AgentDock

技术栈与架构

AgentDock CLI 的技术选型依据、已落地实现与分层架构设计。

技术栈与架构

已落地技术栈

以下组件已在 packages/cli 中实际使用,均可在源码中验证。

组件版本在本项目中的角色出处
Bunlatest构建层:bun build 打包为单文件 Node.js 可执行文件github.com/oven-sh/bun
Citty^0.1.6命令建模:子命令定义、flag schema、lazy 加载github.com/unjs/citty
Clack^0.9.1人类交互层:@clack/prompts 提供 TTY 交互 UIgithub.com/bombshell-dev/clack
MCP TypeScript SDK^1.0.0Agent 协议层:实现 MCP Stdio 服务器,暴露工具接口github.com/modelcontextprotocol/typescript-sdk
Changesetsworkspace发布治理:语义版本管理与 CHANGELOG 生成github.com/changesets/changesets

Giget(远程模板拉取)已在选型中,当前版本模板内置于 CLI npm 包,Giget 将在支持远程模板注册表时引入。


分层架构

CLI 的核心设计约束:Human / CI / Agent 三种消费者复用同一执行器核心,表面层完全可替换

┌─────────────────────────────────────────────┐
│              命令层 (Citty)                  │
│   src/commands/init.ts  src/commands/mcp.ts  │
│   - flag schema 定义                         │
│   - 环境检测,分发到对应适配器               │
└───────────────┬─────────────────────────────┘

    ┌───────────┼────────────┐
    ▼           ▼            ▼
┌───────┐ ┌─────────┐ ┌──────────┐
│ Human │ │  Agent  │ │   MCP    │
│Adapter│ │ Adapter │ │ Adapter  │
│(Clack)│ │  (JSON) │ │(Stdio)   │
└───┬───┘ └────┬────┘ └────┬─────┘
    └──────────┴────────────┘

    ┌───────────▼──────────┐
    │     执行器核心        │
    │  src/core/scaffold   │  ← 文件复制、版本检查
    │  src/core/registry   │  ← 模板注册表读取
    └──────────────────────┘

适配器职责

Human Adapter (src/adapters/human.ts)

  • 仅在 TTY 环境下启动
  • 使用 Clack 提供可取消的交互式流程
  • 不包含业务逻辑,仅收集参数后调用核心

Agent Adapter (src/adapters/agent.ts)

  • --silent / --json / 非 TTY 时启动
  • 所有输出均为结构化 JSON(NDJSON 格式)
  • 失败时输出错误对象 + 非零退出码,便于 CI/Agent 解析

MCP Adapter (src/adapters/mcp/)

  • 实现 MCP Stdio 服务器规范
  • list_templatesscaffold_project 投影为 MCP 工具
  • AI Agent 可通过 MCP 客户端直接调用,无需解析命令行

为什么这样分层

无头优先(Headless-first)

执行器核心的设计不依赖 TTY,Human Adapter 是在核心之上的一层"外壳"。这意味着:

  • 所有核心路径都可以在无 TTY 的 CI/Agent 环境中测试
  • Clack 等交互库的升级/替换不影响核心逻辑

结构化输出作为协议

Agent Adapter 把 stdout 限定为可被机器稳定解析的 JSON 对象,而不是自然语言字符串。这遵循 gws CLI 的设计理念:把 CLI 当作机器协议接口,而不仅仅是交互工具。

同一能力多态投影

scaffold_project 这个核心能力,同时被投影为:

  1. agentdock init(人类 flag 调用)
  2. agentdock init --json(Agent/CI 调用)
  3. MCP 工具 scaffold_project(AI Agent 原生调用)

新增能力时,只需在核心实现一次,三种表面层自动具备。


参考出处

On this page