Module Structure
扩展生态先在 source project 上发现配置与资源,再由 Workspace 级注册表完成插件整合, 最后冻结为 Session 私有视图;MCP 和 LSP 还会在 Session 初始化时创建独立连接与进程。
Directory Layout
packages/cli/src/mcp/— MCP transport、目录、交互、恢复、OAuth 与异步任务packages/cli/src/plugins/— 插件发现、装载及向其他扩展点的资源注入packages/cli/src/skills/— Skill 元数据发现、正文延迟加载与注册表packages/cli/src/slash-commands/custom/— Markdown 自定义命令解析和执行packages/cli/src/hooks/— Hook 配置、匹配、信任与多种执行后端packages/cli/src/lsp/— Session 级语言服务器客户端和语义查询.blade/— 仓库内项目级 Skills、命令与配置资源
Key Entry Points
resolveWorkspaceAgentResources()inpackages/cli/src/agent/resources/WorkspaceAgentResources.ts— 初始化并缓存 Workspace 扩展注册表snapshotWorkspaceAgentResources()inpackages/cli/src/agent/resources/WorkspaceAgentResources.ts— 创建 Session 持有的扩展资源快照resolveWorkspaceMcpConfig()inpackages/cli/src/mcp/resolveWorkspaceMcpConfig.ts— 合并当前 Session 的 MCP 来源resolveWorkspaceLspResources()inpackages/cli/src/lsp/WorkspaceLspResources.ts— 解析并冻结当前 Session 的 LSP 配置SessionRuntime.initialize()inpackages/cli/src/agent/runtime/SessionRuntime.ts— 绑定 Hooks 并创建 Session 私有 MCP/LSP 运行时
Gotchas
- Workspace Trust 只决定项目扩展资源能否被发现,配置型 Hook 还必须通过独立的精确摘要信任;信任 workspace 不等于信任其中的命令、Prompt 或 HTTP Hook(
packages/cli/src/skills/SkillRegistry.ts,packages/cli/src/hooks/HookTrustService.ts) - source project 是 MCP/LSP/插件配置身份,execution workspace 是 worktree 中实际执行工具和启动 LSP 的路径;将两者混用会让 MCP 默认 cwd、MCP roots 或 LSP 文件边界指向错误 checkout(
packages/cli/src/agent/runtime/SessionRuntime.ts,packages/cli/src/mcp/resolveWorkspaceMcpConfig.ts,packages/cli/src/lsp/LspSessionManager.ts) - 插件刷新先清空再整批重注入 Workspace 注册表,但已创建 Session 使用 Skills、命令、Hooks 和 LSP 的快照,不应被刷新中的可变对象追改(
packages/cli/src/plugins/PluginIntegrator.ts,packages/cli/src/agent/resources/WorkspaceAgentResources.ts) - 插件整合阶段只登记 MCP/LSP 定义数量,不建立连接;实际 MCP client 和 LSP process 都延迟到精确 Session 中创建(
packages/cli/src/plugins/PluginIntegrator.ts,packages/cli/src/agent/runtime/SessionRuntime.ts) - MCP、LSP、Skills 和命令均按 workspace 或 Session 隔离,不能以无参数全局单例作为多项目调用的权威来源(
packages/cli/src/mcp/McpRegistry.ts,packages/cli/src/skills/SkillRegistry.ts,packages/cli/src/slash-commands/custom/CustomCommandRegistry.ts)
Architecture
- 扩展资源主链路是“Workspace 发现与插件整合 → Session 快照 → 工具/Prompt/事件适配”;该边界让项目切换和插件刷新不改变正在运行的模型回合(
packages/cli/src/agent/resources/WorkspaceAgentResources.ts,packages/cli/src/agent/runtime/SessionRuntime.ts) - 插件是扩展聚合入口,可同时提供命令、Skills、Agents、Hooks、MCP 和 LSP;其中命令、Skills、Agents 注入 Workspace 注册表,Hooks 整批交换配置,MCP/LSP 由 Session 重新解析(
packages/cli/src/plugins/PluginIntegrator.ts,packages/cli/src/plugins/PluginLoader.ts) - Skills 与自定义命令都以 Markdown 为载体,但 Skills 将元数据暴露给模型并延迟加载正文,自定义命令会在发现时加载正文并在调用前展开参数、Shell 和文件引用(
packages/cli/src/skills/SkillLoader.ts,packages/cli/src/slash-commands/custom/CustomCommandExecutor.ts) - Hooks 是扩展域的行为拦截层,横跨工具准入、权限、会话、Agent 停止、压缩和 MCP Elicitation;它不拥有这些领域的主状态(
packages/cli/src/hooks/types/HookTypes.ts,packages/cli/src/tools/execution/ToolExecutionHooks.ts) - MCP 工具和 LSP 工具都进入统一 ToolRegistry,但前者是外部 Execute 工具与动态目录,后者是仅在 Session 有可用服务器时注册的 ReadOnly 语义查询工具(
packages/cli/src/mcp/createMcpTool.ts,packages/cli/src/tools/builtin/index.ts)
Decisions
- 运行时资源在 Session 创建时做深拷贝快照,是为了阻止后续 workspace refresh、项目切换或插件刷新改变活动 Session 已暴露给模型的能力集合(
packages/cli/src/skills/SkillRegistry.ts,packages/cli/src/slash-commands/custom/CustomCommandRegistry.ts,git:f6a82242) - 扩展点统一经过 Workspace Trust 后再读取项目级可执行资源,同时保留用户级资源可用性;Hooks 额外按内容摘要授权,避免“信任路径”永久授权后续修改(
packages/cli/src/security/WorkspaceTrustService.ts,packages/cli/src/hooks/HookTrustService.ts,git:a172a7c0) - MCP 与 LSP 放在独立 Session 生命周期而非进程全局生命周期,以隔离并行 Session 的连接、目录、诊断、环境和清理责任(
packages/cli/src/agent/runtime/SessionRuntime.ts,packages/cli/src/mcp/McpRegistry.ts,packages/cli/src/lsp/LspSessionManager.ts)
Patterns
- 插件资源使用
plugin:<plugin-name>:<resource>或稳定 provider 名称避免跨插件冲突;短名只在唯一时才可解析(packages/cli/src/plugins/namespacing.ts,packages/cli/src/skills/SkillRegistry.ts,packages/cli/src/slash-commands/custom/CustomCommandRegistry.ts) - 外部扩展产生的 schema、日志、结果、指令和配置都在进入模型或 UI 前做大小、类型和安全投影,不能直接透传协议对象(
packages/cli/src/mcp/McpToolResult.ts,packages/cli/src/hooks/schemas/HookSchemas.ts,packages/cli/src/config/lspSettings.ts)
Child Knowledge Nodes
./mcp-protocol-runtime/SKILL.md— 进入条件:修改 MCP transport、动态目录、OAuth、Elicitation、Sampling、Tasks、结果安全或连接恢复./plugin-lifecycle-and-marketplace/SKILL.md— 进入条件:修改插件发现、安装、来源策略、兼容性、命名空间或资源注入./skills-and-custom-commands/SKILL.md— 进入条件:修改 SKILL.md/命令 Markdown 解析、覆盖优先级、延迟加载、Session 快照或调用入口./hooks-and-behavior-interception/SKILL.md— 进入条件:修改 Hook 事件、匹配、执行顺序、信任摘要、错误策略或跨领域拦截行为./lsp-code-intelligence/SKILL.md— 进入条件:修改 LSP 配置、进程代际、文档同步、诊断回注、语义查询或子 Session 继承