Docs Architecture

架构概览

仓库结构、7 个 package 总览、工具/Provider 注册表,以及 omp 能力到 pi Extension API 的映射。

项目结构

text
piex/                                  # monorepo
├── README.md                         # 项目入口
├── docs/                             # 📚 文档 + 静态站(piex.dev,Pages 根)
│   ├── index.html                    #   主页(JS 字典 i18n)
│   ├── <slug>.md                     #   文档源稿(仅中文)
│   ├── notes/<slug>.md               #   博客源稿(仅中文)
│   ├── {lang}/docs/<slug>/index.html #   中/英文档 HTML → /{lang}/docs/<slug>/
│   ├── {lang}/blogs/<slug>/index.html#   中/英博客 HTML → /{lang}/blogs/<slug>/
│   ├── assets/                       #   style / main / blog 静态资源
└── extensions/                      # 🧩 pi extension 包(TS,走 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,未发布)
├── prompts/                          # 📝 pi prompt 包(走 pi.prompts)
    └── init/
        ├── init.md                # → /init
        ├── README.md
        └── package.json             # pi.prompts: ["./init.md"]
└── themes/                          # 🎨 pi theme 包(走 pi.themes)
    └── dark-terminal/
        ├── theme.json               # name: "dark-terminal"
        ├── README.md
        └── package.json             # pi.themes: ["./theme.json"]

Package 总览

Package 代码量 工具 外部依赖 功能来源
hashline191 行 + polyfill 127 行覆盖 edit@oh-my-pi/hashlineoh-my-pi
dap1942 行 + 212 行 JSONdebugoh-my-pi
lsp~1350 行 + 499 行 JSONlspoh-my-pi
plan348 行/plan, /todospi 示例
review330 行/review, reviewoh-my-pi
initprompt only/initOpenCode
xai-oauth530 行 + 419 行 models/login xAI Grok OAuth 订阅登录(含实时模型发现)oh-my-pi / pi-grok
theme-dark-terminal暗终端高对比度主题opencode-themes

工具注册总览

工具名 来源 类型 说明
readpi 内置读取文件
bashpi 内置读写执行命令
writepi 内置写入文件
greppi 内置搜索内容
findpi 内置搜索文件
lspi 内置列出目录
edithashlinehashline 编辑(覆盖内置)
debugdap读写DAP 调试(launch/attach/step/evaluate)
lsplsp读写LSP:诊断/导航/rename;edit 后 ERROR
reviewreview代码评审(diff/file/branch/commit)

Provider 注册总览

Provider 来源 认证 说明
xai-oauthxai-oauthOAuth 订阅SuperGrok / X Premium+ 登录;订阅模型经 cli-chat-proxy,支持登录后后台模型发现

pi Extension API 映射

原功能概念 来源 piex 实现 pi API
覆盖 edit 工具omphashline.tspi.registerTool({ name: "edit" })
Hook read 追加 headeromphashline.tspi.on("tool_result", ...)
注册 debug 工具ompdap.tspi.registerTool({ name: "debug" })
会话清理 DAP 进程ompdap.tspi.on("session_shutdown", ...)
注册 lsp 工具omplsp.tspi.registerTool({ name: "lsp" })
写后诊断 hook OpenCode lsp.ts pi.on("tool_result") on edit/write
计划模式 /planpi 示例plan.tspi.registerCommand("plan", ...)
只读工具切换pi 示例plan.tspi.setActiveTools([...])
危险命令拦截pi 示例plan.tspi.on("tool_call", ...) → block
进度追踪 [DONE:n]pi 示例plan.tspi.on("turn_end", ...)
交互评审菜单ompreview.tspi.registerCommand("review", ...)
注册 review 工具ompreview.tspi.registerTool({ name: "review" })
引导生成 AGENTS.mdOpenCodeinit prompts/init/init.mdpi.prompts/init
状态持久化piplan.tspi.appendEntry("plan-mode", ...)
Footer/Widgepiplan.tsctx.ui.setStatus/setWidget(...)
注册 xAI OAuth providerompxai-oauth.tspi.registerProvider("xai-oauth", { oauth: {...} })