Docs Architecture

Architecture Overview

Monorepo layout, seven packages, tool and provider registration, and how piex maps onto the Pi Extension API.

At a glance

Seven independent packages, pure Pi Extension API—tool overrides, new tools, providers, and themes without forking Pi.

Project layout

text
piex/                                  # monorepo
├── README.md                         # project entry
├── docs/                             # 📚 docs + static site (piex.dev, Pages root)
│   ├── index.html                    #   homepage
│   ├── <slug>.md                     #   doc source (Chinese only)
│   ├── notes/<slug>.md               #   blog source (Chinese only)
│   ├── {lang}/docs/<slug>/index.html #   zh/en doc HTML → /{lang}/docs/<slug>/
│   ├── {lang}/blogs/<slug>/index.html#   zh/en blog HTML → /{lang}/blogs/<slug>/
│   ├── assets/                       #   style / main / blog static assets
└── extensions/                      # pi extension packages (TS, via pi.extensions)
    ├── hashline/
    │   ├── README.md
    │   ├── package.json
    │   ├── src/                     # hashline.ts, bun-polyfill.ts, filesystem.ts, patches.ts
    │   └── test/                    # hashline.test.ts
    ├── dap/
    │   ├── README.md
    │   ├── package.json
    │   └── src/                     # dap.ts, client.ts, session.ts, config.ts, types.ts, utils.ts, defaults.json, non-interactive-env.ts
    ├── lsp/
    │   ├── README.md
    │   ├── package.json
    │   ├── src/                     # lsp.ts, defaults.json
    │   └── test/                    # lsp.test.ts, fixtures/mock-lsp-server.mjs
    ├── plan/
    │   ├── README.md
    │   ├── package.json
    │   ├── src/                     # plan.ts
    │   └── test/                    # plan.test.ts
    ├── review/
    │   ├── README.md
    │   ├── package.json
    │   └── src/                     # review.ts
    ├── xai-oauth/
    │   ├── README.md
    │   ├── package.json
    │   ├── src/                     # xai-oauth.ts, models.ts
    │   └── test/                    # xai-oauth.test.ts, models.test.ts
    ├── btw/                         # src/btw.ts
    ├── context/                     # src/context.ts
    └── ai-code-report/              # src/ai-code-report.ts (private, unpublished)
├── prompts/                          # pi prompt packages (via pi.prompts)
    └── init/
        ├── init.md                # → /init
        ├── README.md
        └── package.json             # pi.prompts: ["./init.md"]
└── themes/                          # pi theme packages (via pi.themes)
    └── dark-terminal/
        ├── theme.json               # name: "dark-terminal"
        ├── README.md
        └── package.json             # pi.themes: ["./theme.json"]

Package overview

PackageSizeTool(s)External depsOrigin
hashline191 LOC + polyfill 127overrides edit@oh-my-pi/hashlineoh-my-pi
dap1942 LOC + 212 JSONdebugnoneoh-my-pi
lsp570 LOC + 499 JSONlspnoneoh-my-pi
plan348 LOC/plan, /todosnonePi example
review330 LOC/review, reviewnoneoh-my-pi
initprompt only/initnoneOpenCode
xai-oauth530 LOC + 419 models/login xAI Grok OAuth (live model discovery)noneoh-my-pi / pi-grok
theme-dark-terminaldark high-contrast terminal themenoneopencode-themes

Tool registration

ToolSourceModeNotes
readPi built-inreadRead files
bashPi built-inr/wRun commands
writePi built-inwriteWrite files
grepPi built-inreadSearch content
findPi built-inreadSearch files
lsPi built-inreadList directories
edithashlinewritehashline edit (overrides built-in)
debugdapr/wDAP debug (launch/attach/step/evaluate)
lsplspr/wLSP (diagnostics/nav/rename;edit 后 ERROR)
reviewreviewreadCode review (diff/file/branch/commit)

Provider registration

ProviderSourceAuthNotes
xai-oauthxai-oauthOAuth subscriptionSuperGrok / X Premium+ login; subscription models via cli-chat-proxy; background model discovery after login

Pi Extension API mapping

ConceptOriginpiex implPi API
Override edit toolomphashline.tspi.registerTool({ name: "edit" })
Hook read, append headeromphashline.tspi.on("tool_result", ...)
Register debug toolompdap.tspi.registerTool({ name: "debug" })
Cleanup DAP processesompdap.tspi.on("session_shutdown", ...)
Register lsp toolomplsp.tspi.registerTool({ name: "lsp" })
Post-edit diagnostics hook OpenCode lsp.ts pi.on("tool_result") on edit/write
Plan mode /planPi exampleplan.tspi.registerCommand("plan", ...)
Read-only tool setPi exampleplan.tspi.setActiveTools([...])
Block dangerous cmdsPi exampleplan.tspi.on("tool_call", ...) → block
Progress [DONE:n]Pi exampleplan.tspi.on("turn_end", ...)
Interactive review menuompreview.tspi.registerCommand("review", ...)
Register review toolompreview.tspi.registerTool({ name: "review" })
Guided AGENTS.md setupOpenCodeinit prompts/init/init.mdpi.prompts/init
Persist statePiplan.tspi.appendEntry("plan-mode", ...)
Footer / WidgetPiplan.tsctx.ui.setStatus/setWidget(...)
Register xAI OAuth providerompxai-oauth.tspi.registerProvider("xai-oauth", { oauth: {...} })

Source Markdown: docs/architecture.md