# nicobailon/pi-web-access architecture

> Architecture diagram of the GitHub repository nicobailon/pi-web-access, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nicobailon/pi-web-access
- Repository: https://github.com/nicobailon/pi-web-access

## Overview

Pi Web Access is a Pi agent extension that searches the web, fetches and extracts page content, and supports GitHub cloning, PDFs, and video understanding. The primary workflow starts in the extension, routes a query through provider selection and fallback, then returns results; users can separately fetch URLs or request curator summaries. The README documents a broad provider and media capability set, but only selected routing and storage internals were sampled, so uncertain implementation links are omitted.

Main entry points: [`index.ts`](https://github.com/nicobailon/pi-web-access/blob/main/index.ts) (Extension tools), [`gemini-search.ts`](https://github.com/nicobailon/pi-web-access/blob/main/gemini-search.ts) (Search routing), [`extract.ts`](https://github.com/nicobailon/pi-web-access/blob/main/extract.ts) (Page extraction), [`curator-run.ts`](https://github.com/nicobailon/pi-web-access/blob/main/curator-run.ts) (Curator runs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Agent entry"]
  node_extension["Extension tools<br/>[index.ts]"]
end

subgraph group_search["Web search"]
  node_query_router["Search routing<br/>[gemini-search.ts]"]
  node_openai["OpenAI search<br/>[openai-search.ts]"]
  node_exa["Exa search<br/>[exa.ts]"]
  node_brave["Brave search<br/>[brave.ts]"]
  node_parallel["Parallel search<br/>[parallel.ts]"]
  node_local_search["Private and hosted search<br/>[searxng.ts]"]
  node_search_services["Other search adapters<br/>[jina-search.ts]"]
end

subgraph group_content["Content access"]
  node_fetch_extract["Page extraction<br/>[extract.ts]"]
  node_github["GitHub cloning<br/>[github-extract.ts]"]
  node_pdf["PDF extraction<br/>[pdf-extract.ts]"]
  node_video["Video understanding<br/>[video-extract.ts]"]
end

subgraph group_enrichment["Analysis and state"]
  node_curator["Curator server<br/>[curator-server.ts]"]
  node_curator_run["Curator runs<br/>[curator-run.ts]"]
  node_summary["Summary generation<br/>[summary-review.ts]"]
  node_rewrite["Query rewriting<br/>[query-rewrite.ts]"]
  node_answer["Page answers<br/>[page-query.ts]"]
  node_cache[("Fetch cache<br/>[storage.ts]")]
end

node_agent(("Pi agent"))
node_web_providers["Search services"]
node_fetch_services["Fetch services"]
node_models["Pi model registry"]
node_model_services["Model providers"]
node_filesystem[("Local files")]

node_agent -->|"invokes tools"| node_extension
node_extension -->|"routes queries"| node_query_router
node_query_router -->|"tries provider"| node_openai
node_query_router -->|"tries provider"| node_exa
node_query_router -->|"tries provider"| node_brave
node_query_router -->|"tries provider"| node_parallel
node_query_router -->|"tries private search"| node_local_search
node_query_router -->|"tries providers"| node_search_services
node_openai -->|"sends searches"| node_web_providers
node_exa -->|"sends searches"| node_web_providers
node_brave -->|"sends searches"| node_web_providers
node_parallel -->|"sends searches"| node_web_providers
node_local_search -->|"sends searches"| node_web_providers
node_search_services -->|"sends searches"| node_web_providers
node_extension -->|"fetches URLs"| node_fetch_extract
node_fetch_extract -->|"requests pages"| node_fetch_services
node_extension -->|"clones repositories"| node_github
node_github -->|"writes clone"| node_filesystem
node_extension -->|"extracts PDFs"| node_pdf
node_extension -->|"analyzes video"| node_video
node_extension -->|"starts curation"| node_curator
node_curator -->|"dispatches run"| node_curator_run
node_curator_run -->|"searches queries"| node_query_router
node_curator_run -->|"requests summary"| node_summary
node_summary -->|"resolves model"| node_models
node_rewrite -->|"resolves model"| node_models
node_answer -->|"resolves model"| node_models
node_models -->|"completes requests"| node_model_services
node_extension -->|"stores results"| node_cache
node_fetch_extract -->|"caches content"| node_cache
node_cache -->|"reads and writes"| node_filesystem

click node_extension "https://github.com/nicobailon/pi-web-access/blob/main/index.ts"
click node_query_router "https://github.com/nicobailon/pi-web-access/blob/main/gemini-search.ts"
click node_openai "https://github.com/nicobailon/pi-web-access/blob/main/openai-search.ts"
click node_exa "https://github.com/nicobailon/pi-web-access/blob/main/exa.ts"
click node_brave "https://github.com/nicobailon/pi-web-access/blob/main/brave.ts"
click node_parallel "https://github.com/nicobailon/pi-web-access/blob/main/parallel.ts"
click node_local_search "https://github.com/nicobailon/pi-web-access/blob/main/searxng.ts"
click node_search_services "https://github.com/nicobailon/pi-web-access/blob/main/jina-search.ts"
click node_fetch_extract "https://github.com/nicobailon/pi-web-access/blob/main/extract.ts"
click node_github "https://github.com/nicobailon/pi-web-access/blob/main/github-extract.ts"
click node_pdf "https://github.com/nicobailon/pi-web-access/blob/main/pdf-extract.ts"
click node_video "https://github.com/nicobailon/pi-web-access/blob/main/video-extract.ts"
click node_curator "https://github.com/nicobailon/pi-web-access/blob/main/curator-server.ts"
click node_curator_run "https://github.com/nicobailon/pi-web-access/blob/main/curator-run.ts"
click node_summary "https://github.com/nicobailon/pi-web-access/blob/main/summary-review.ts"
click node_rewrite "https://github.com/nicobailon/pi-web-access/blob/main/query-rewrite.ts"
click node_answer "https://github.com/nicobailon/pi-web-access/blob/main/page-query.ts"
click node_cache "https://github.com/nicobailon/pi-web-access/blob/main/storage.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_extension toneBlue
class node_query_router,node_openai,node_exa,node_brave,node_parallel,node_local_search,node_search_services,node_filesystem toneAmber
class node_fetch_extract,node_github,node_pdf,node_video toneMint
class node_curator,node_curator_run,node_summary,node_rewrite,node_answer,node_cache toneRose
class node_agent,node_web_providers,node_fetch_services,node_models,node_model_services toneIndigo
```

## Components

### Agent entry

- [Extension tools](https://github.com/nicobailon/pi-web-access/blob/main/index.ts): `index.ts`

### Web search

- [Search routing](https://github.com/nicobailon/pi-web-access/blob/main/gemini-search.ts): `gemini-search.ts`
- [OpenAI search](https://github.com/nicobailon/pi-web-access/blob/main/openai-search.ts): `openai-search.ts`
- [Exa search](https://github.com/nicobailon/pi-web-access/blob/main/exa.ts): `exa.ts`
- [Brave search](https://github.com/nicobailon/pi-web-access/blob/main/brave.ts): `brave.ts`
- [Parallel search](https://github.com/nicobailon/pi-web-access/blob/main/parallel.ts): `parallel.ts`
- [Private and hosted search](https://github.com/nicobailon/pi-web-access/blob/main/searxng.ts): `searxng.ts`
- [Other search adapters](https://github.com/nicobailon/pi-web-access/blob/main/jina-search.ts): `jina-search.ts`

### Content access

- [Page extraction](https://github.com/nicobailon/pi-web-access/blob/main/extract.ts): `extract.ts`
- [GitHub cloning](https://github.com/nicobailon/pi-web-access/blob/main/github-extract.ts): `github-extract.ts`
- [PDF extraction](https://github.com/nicobailon/pi-web-access/blob/main/pdf-extract.ts): `pdf-extract.ts`
- [Video understanding](https://github.com/nicobailon/pi-web-access/blob/main/video-extract.ts): `video-extract.ts`

### Analysis and state

- [Curator server](https://github.com/nicobailon/pi-web-access/blob/main/curator-server.ts): `curator-server.ts`
- [Curator runs](https://github.com/nicobailon/pi-web-access/blob/main/curator-run.ts): `curator-run.ts`
- [Summary generation](https://github.com/nicobailon/pi-web-access/blob/main/summary-review.ts): `summary-review.ts`
- [Query rewriting](https://github.com/nicobailon/pi-web-access/blob/main/query-rewrite.ts): `query-rewrite.ts`
- [Page answers](https://github.com/nicobailon/pi-web-access/blob/main/page-query.ts): `page-query.ts`
- [Fetch cache](https://github.com/nicobailon/pi-web-access/blob/main/storage.ts): `storage.ts`

### Other components

- **Pi agent**
- **Search services**
- **Fetch services**
- **Pi model registry**
- **Model providers**
- **Local files**

## Connections

- Pi agent → Extension tools: invokes tools
- Extension tools → Search routing: routes queries
- Search routing → OpenAI search: tries provider
- Search routing → Exa search: tries provider
- Search routing → Brave search: tries provider
- Search routing → Parallel search: tries provider
- Search routing → Private and hosted search: tries private search
- Search routing → Other search adapters: tries providers
- OpenAI search → Search services: sends searches
- Exa search → Search services: sends searches
- Brave search → Search services: sends searches
- Parallel search → Search services: sends searches
- Private and hosted search → Search services: sends searches
- Other search adapters → Search services: sends searches
- Extension tools → Page extraction: fetches URLs
- Page extraction → Fetch services: requests pages
- Extension tools → GitHub cloning: clones repositories
- GitHub cloning → Local files: writes clone
- Extension tools → PDF extraction: extracts PDFs
- Extension tools → Video understanding: analyzes video
- Extension tools → Curator server: starts curation
- Curator server → Curator runs: dispatches run
- Curator runs → Search routing: searches queries
- Curator runs → Summary generation: requests summary
- Summary generation → Pi model registry: resolves model
- Query rewriting → Pi model registry: resolves model
- Page answers → Pi model registry: resolves model
- Pi model registry → Model providers: completes requests
- Extension tools → Fetch cache: stores results
- Page extraction → Fetch cache: caches content
- Fetch cache → Local files: reads and writes
