Skip to content

架构概览

相关文档: 开发环境搭建 — 构建和测试指南 | 贡献指南 — PR 流程和代码规范 | 系统架构 — 用户视角的系统架构概述

本文档面向贡献者,描述核心模块的职责和数据流。

模块地图

src/
├── index.ts              # 插件入口,引导启动
├── pi-extension.ts       # opencode 插件集成点

├── core/                 # 核心基础设施
│   ├── plugin-core.ts    # 插件生命周期管理
│   ├── service.ts        # 服务注册模式
│   ├── event-bus.ts      # 事件总线
│   └── state-registry.ts # 全局状态注册

├── loader/               # 加载层
│   ├── role-loader.ts    # 角色 YAML 加载与解析
│   └── subagents.ts      # 子代理发现

├── resolver/             # 解析器
│   ├── bootstrap.ts      # 启动引导
│   ├── env-resolver.ts   # 环境变量解析
│   ├── frontmatter.ts    # 文件前置元数据
│   ├── orchestrator.ts   # 编排器
│   ├── reference-resolver.ts
│   └── skill-resolver.ts

├── hooks/                # Hook 系统
│   ├── chat-message.ts   # 用户消息处理
│   ├── system-transform.ts # 系统提示词构建
│   ├── tool-before.ts    # 工具调用前拦截
│   ├── tool-after.ts     # 工具调用后处理
│   └── ...

├── function/             # 函数系统
│   ├── parser.ts         # |function:args| 语法解析
│   ├── phase-machine.ts  # 函数阶段状态机
│   └── runtime-state.ts  # 会话级函数状态

├── graph/                # 协作图
│   ├── templates.ts      # 拓扑模板(pipeline / review-loop / star)
│   ├── validator.ts      # 图结构验证
│   ├── state.ts          # 图执行状态
│   ├── advance.ts        # 步骤推进
│   └── termination.ts    # 终止条件评估

├── dispatch/             # 调度系统
│   ├── tools.ts          # dispatch 工具注册
│   ├── factory.ts        # 子代理会话工厂
│   ├── concurrency.ts    # 信号量并发控制
│   ├── budget.ts         # 预算跟踪
│   └── checkpoint.ts     # 断点续传

├── recovery/             # 恢复引擎
│   ├── engine.ts         # 恢复链执行器
│   ├── error-detection.ts # 错误模式匹配
│   └── strategies/       # 7 种恢复策略

├── memory/               # 记忆存储
│   ├── store.ts          # 记忆持久化
│   └── tools.ts          # memory_write / memory_recall 工具

├── session/              # 会话工具
│   ├── tools.ts          # 10 个会话管理工具
│   ├── analytics.ts      # 分析仪表盘
│   └── export.ts         # 导出

├── notifications/        # 通知系统
│   ├── manager.ts        # 通知管理器
│   ├── channels/         # email / slack / webhook
│   └── scheduler.ts      # 定时投递

├── prompt/               # 提示词构建 — 系统提示组装
│   ├── builder.ts        # 提示词构建器
│   └── agent-config.ts   # 代理配置

├── signal/               # 信号系统
│   ├── signal-ledger.ts  # 信号日志
│   └── signal-tool.ts    # 信号发射工具

├── sync/                 # 同步工具 — 符号链接、代理文件
│   ├── agent-files.ts    # 代理文件管理
│   └── skill-symlinks.ts # 技能符号链接

├── loop/                 # 循环协调器
│   ├── coordinator.ts    # 多轮迭代控制
│   └── worker-dispatch.ts # 子 worker 派发

├── web/                  # 网络工具
│   ├── web-fetch.ts      # URL 抓取
│   ├── web-search.ts     # 网页搜索
│   └── ssrf-guard.ts     # SSRF 防护

├── lsp/                  # LSP 客户端
│   ├── client-manager.ts # 语言服务器管理
│   └── tools/            # LSP 工具实现

├── platform/             # 平台抽象层 — 工具装配、适配器
│   ├── tool-assembly.ts  # 工具注册与装配
│   └── types.ts          # 平台类型

├── extensions/           # 扩展系统
│   └── extension-point.ts # 扩展点注册

├── asset/                # 资产工具 — 检索、搜索、验证
│   ├── asset-inspect.ts  # 资产检视
│   ├── asset-search.ts   # 资产搜索
│   ├── asset-validate.ts # 资产验证
│   └── skill-compose.ts  # 技能组合分析

├── tui/                  # 终端 UI
│   └── components/       # SolidJS 组件

├── utils/                # 工具函数 — 路径、超时、显示辅助

└── cli/                  # CLI 入口
    └── main.ts           # 子命令定义

模块依赖关系

下表列出各 src/ 模块之间的核心依赖关系。依赖链决定了模块初始化和降级顺序,详见 服务架构 中拓扑排序的五个层级(Tier 0–4)。

核心依赖链

依赖方向:  模块A → 模块B  表示 "模块A 导入/使用 模块B"
src/index.ts  → loader → resolver → core → hooks
src/pi-extension.ts → platform → core

core/  ←──  所有上游模块(hooks, dispatch, loop, session, ...)

  ├── dispatch/   → core/, recovery/*.d.ts
  ├── hooks/      → dispatch/, function/, graph/, core/, session/, memory/, signal/
  ├── loop/       → dispatch/, core/
  ├── recovery/   → dispatch/types
  ├── extensions/ → dispatch/, recovery/, core/
  ├── notifications/ → core/ (event-bus)
  ├── function/   → core/ (state-registry)
  ├── graph/      → core/ (state)
  ├── session/    → core/
  ├── memory/     → core/
  ├── lsp/        → core/
  ├── asset/      → core/
  ├── platform/   → core/
  └── prompt/     → function/, core/

独立/叶子模块:
  ├── web/        — 无 src/ 内部依赖
  ├── hashline/   — 无 src/ 内部依赖
  ├── sync/       — 无 src/ 内部依赖
  ├── tui/        — 无 src/ 内部依赖
  └── utils/      — 被多个模块导入的工具函数

依赖详情

模块依赖方依赖类型
core/hooks, dispatch, loop, function, graph, session, memory, lsp, asset, platform, extensions, notifications, prompt, recovery基础设施 — 服务注册、事件总线、状态注册表
dispatch/hooks (核心调用), loop (子代理派发), extensions (条件注册), tool-service调度引擎 — 并发控制、预算、检查点
function/hooks (chat-message, system-transform), prompt (builder)函数状态机 — 解析、门控、观察
recovery/dispatch (错误恢复), extensions (策略注册)恢复引擎 — 模式匹配、策略链
graph/hooks (tool-after 图推进), extensions (拓扑注册)协作图引擎 — 验证、终止
session/hooks, dispatch (会话上下文)会话工具 — CRUD、导出、搜索
memory/hooks (system-transform 记忆注入)记忆存储 — SQLite 持久化、搜索
notifications/hooks, extensions (通知通道注册)事件订阅 — 多通道投递、节流

生命周期交叉引用

模块的初始化顺序由 ServiceSupervisor 按拓扑排序驱动:

依赖方向约束

在贡献代码时,请遵循依赖方向:上层模块可以导入下层模块,但下层模块不应反向依赖上层模块。例如 hooks/ 可以导入 dispatch/,但 dispatch/ 不应导入 hooks/。独立模块(web/hashline/)也不应导入其他业务模块。

数据流

一条用户消息的典型处理管线:

用户输入


src/index.ts (插件入口)


src/hooks/chat-message.ts (消息拦截)


src/function/parser.ts (函数语法解析)
    │  ┌─────────────────────────┐
    │  │ |plan| → plan 函数激活   │
    │  │ |execute| → execute 激活│
    │  │ |loop:N| → loop 激活    │
    │  └─────────────────────────┘

src/hooks/system-transform.ts (系统提示构建)
    │  ┌──────────────────────────┐
    │  │ 注入技能、引用、函数声明   │
    │  └──────────────────────────┘

src/hooks/tool-before.ts (工具调用前)
src/hooks/tool-after.ts  (工具调用后)


src/dispatch/tools.ts (子代理派发)
    │  ┌─────────────────────────────┐
    │  │ dispatch → concurrency 控制 │
    │  │         → budget 检查       │
    │  │         → 子代理会话创建     │
    │  └─────────────────────────────┘

src/recovery/engine.ts (错误恢复)
    │  ┌──────────────────────────────┐
    │  │ 重试 → 模型降级 → 截断 → 汇总 │
    │  └──────────────────────────────┘

结果返回给用户

下一步

基于 MIT 许可协议发布