@shendu-sdt/sdt-dev-agent 0.1.2 → 0.1.3-beta.20260519142550
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -14
- package/dist/catalog/index.d.ts +4 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +4 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/mcp.d.ts +12 -0
- package/dist/catalog/mcp.d.ts.map +1 -0
- package/dist/catalog/mcp.js +37 -0
- package/dist/catalog/mcp.js.map +1 -0
- package/dist/catalog/shared.d.ts +5 -0
- package/dist/catalog/shared.d.ts.map +1 -0
- package/dist/catalog/shared.js +8 -0
- package/dist/catalog/shared.js.map +1 -0
- package/dist/catalog/skills.d.ts +14 -0
- package/dist/catalog/skills.d.ts.map +1 -0
- package/dist/catalog/skills.js +55 -0
- package/dist/catalog/skills.js.map +1 -0
- package/dist/catalog/workflows.d.ts +8 -0
- package/dist/catalog/workflows.d.ts.map +1 -0
- package/dist/catalog/workflows.js +24 -0
- package/dist/catalog/workflows.js.map +1 -0
- package/dist/cli/index.js +72 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +300 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +81 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +20 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +66 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/bootstrap-entry.d.ts +5 -0
- package/dist/core/bootstrap-entry.d.ts.map +1 -0
- package/dist/core/bootstrap-entry.js +9 -0
- package/dist/core/bootstrap-entry.js.map +1 -0
- package/dist/core/capability-discovery.d.ts +23 -0
- package/dist/core/capability-discovery.d.ts.map +1 -0
- package/dist/core/capability-discovery.js +49 -0
- package/dist/core/capability-discovery.js.map +1 -0
- package/dist/core/hook-config.d.ts +19 -0
- package/dist/core/hook-config.d.ts.map +1 -0
- package/dist/core/hook-config.js +162 -0
- package/dist/core/hook-config.js.map +1 -0
- package/dist/core/init-options.d.ts +7 -1
- package/dist/core/init-options.d.ts.map +1 -1
- package/dist/core/init-options.js +70 -39
- package/dist/core/init-options.js.map +1 -1
- package/dist/core/init-plan.d.ts +25 -1
- package/dist/core/init-plan.d.ts.map +1 -1
- package/dist/core/init-plan.js +277 -37
- package/dist/core/init-plan.js.map +1 -1
- package/dist/core/init-writer.d.ts +17 -1
- package/dist/core/init-writer.d.ts.map +1 -1
- package/dist/core/init-writer.js +177 -19
- package/dist/core/init-writer.js.map +1 -1
- package/dist/core/manifest.d.ts +8 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +18 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/mcp-config.d.ts +13 -0
- package/dist/core/mcp-config.d.ts.map +1 -0
- package/dist/core/mcp-config.js +102 -0
- package/dist/core/mcp-config.js.map +1 -0
- package/dist/core/project-inspector.d.ts +1 -0
- package/dist/core/project-inspector.d.ts.map +1 -1
- package/dist/core/project-inspector.js +6 -1
- package/dist/core/project-inspector.js.map +1 -1
- package/dist/core/remote-skill-installer.d.ts +16 -0
- package/dist/core/remote-skill-installer.d.ts.map +1 -0
- package/dist/core/remote-skill-installer.js +104 -0
- package/dist/core/remote-skill-installer.js.map +1 -0
- package/dist/core/tool-profile.d.ts +41 -0
- package/dist/core/tool-profile.d.ts.map +1 -0
- package/dist/core/tool-profile.js +122 -0
- package/dist/core/tool-profile.js.map +1 -0
- package/dist/core/workflow-installer.d.ts +22 -0
- package/dist/core/workflow-installer.d.ts.map +1 -0
- package/dist/core/workflow-installer.js +104 -0
- package/dist/core/workflow-installer.js.map +1 -0
- package/dist/types.d.ts +121 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/follow-up-notice.d.ts +7 -0
- package/dist/utils/follow-up-notice.d.ts.map +1 -0
- package/dist/utils/follow-up-notice.js +29 -0
- package/dist/utils/follow-up-notice.js.map +1 -0
- package/dist/utils/init-welcome.d.ts +1 -0
- package/dist/utils/init-welcome.d.ts.map +1 -1
- package/dist/utils/init-welcome.js +49 -38
- package/dist/utils/init-welcome.js.map +1 -1
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +11 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mastergo-notice.d.ts +7 -0
- package/dist/utils/mastergo-notice.d.ts.map +1 -0
- package/dist/utils/mastergo-notice.js +14 -0
- package/dist/utils/mastergo-notice.js.map +1 -0
- package/dist/utils/progress-spinner.d.ts +22 -0
- package/dist/utils/progress-spinner.d.ts.map +1 -0
- package/dist/utils/progress-spinner.js +74 -0
- package/dist/utils/progress-spinner.js.map +1 -0
- package/dist/utils/terminal-theme.d.ts +4 -0
- package/dist/utils/terminal-theme.d.ts.map +1 -0
- package/dist/utils/terminal-theme.js +25 -0
- package/dist/utils/terminal-theme.js.map +1 -0
- package/package.json +4 -4
- package/templates/bootstrap/project-entry.md +28 -0
- package/templates/hooks/claude-code/bootstrap-project-docs-context.mjs +38 -0
- package/templates/hooks/claude-code/settings.json +36 -0
- package/templates/hooks/codex/bootstrap-project-docs-context.mjs +38 -0
- package/templates/hooks/codex/config.toml +16 -0
- package/templates/mcp/context7/claude-code/server.json +6 -0
- package/templates/mcp/context7/codex/config.toml +3 -0
- package/templates/mcp/mastergo/claude-code/server.json +6 -0
- package/templates/mcp/mastergo/codex/config.toml +4 -0
- package/templates/rules/claude-code/CLAUDE.md +17 -0
- package/templates/rules/codex/AGENTS.md +17 -0
- package/templates/skills/builtin/bootstrap-project-docs/SKILL.md +30 -0
- package/templates/skills/builtin/bootstrap-project-docs/agents/openai.yaml +4 -0
- package/templates/skills/builtin/bootstrap-project-docs/references/architecture-first.md +19 -0
- package/templates/skills/builtin/bootstrap-project-docs/references/doc-state-routing.md +28 -0
- package/templates/skills/builtin/bootstrap-project-docs/references/tool-rules-follow-up.md +23 -0
- package/templates/skills/remote/catalog.json +68 -0
- package/templates/workflows/openspec/README.md +7 -0
- package/templates/workflows/openspec/claude-code/README.md +7 -0
- package/templates/workflows/openspec/codex/README.md +7 -0
- package/templates/AGENTS.md +0 -24
- package/templates/ARCHITECTURE.md +0 -26
- package/templates/capabilities/mcp/README.md +0 -8
- package/templates/capabilities/skills/README.md +0 -8
- package/templates/docs/ai-collaboration/README.md +0 -16
- package/templates/tools/claude-code/README.md +0 -8
- package/templates/tools/codex/README.md +0 -8
package/README.md
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
# SDT DevAgent
|
|
2
2
|
|
|
3
|
-
面向研发项目的全局 CLI
|
|
3
|
+
面向研发项目的全局 CLI,用于给现有仓库安装项目级 AI 协作接入能力。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
当前版本提供以下命令:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
sdt-dev-agent init [targetPath]
|
|
9
|
+
sdt-dev-agent status [targetPath]
|
|
10
|
+
sdt-dev-agent list skills
|
|
11
|
+
sdt-dev-agent list mcp
|
|
12
|
+
sdt-dev-agent list workflows
|
|
13
|
+
sdt-dev-agent add skill <name>
|
|
14
|
+
sdt-dev-agent add mcp <name>
|
|
15
|
+
sdt-dev-agent add workflow <name>
|
|
9
16
|
```
|
|
10
17
|
|
|
11
|
-
|
|
18
|
+
它会围绕 bootstrap skill、项目级 skills、项目级 MCP、workflow 和安装清单来初始化或增量管理目标项目。
|
|
12
19
|
|
|
13
20
|
## Quick Start
|
|
14
21
|
|
|
@@ -33,24 +40,71 @@ sdt-dev-agent init .
|
|
|
33
40
|
sdt-dev-agent init . --yes
|
|
34
41
|
```
|
|
35
42
|
|
|
43
|
+
## Supported Tools
|
|
44
|
+
|
|
36
45
|
当前支持:
|
|
37
46
|
|
|
38
47
|
- tools: `codex`, `claude-code`
|
|
39
|
-
- install mode: `recommended`, `
|
|
40
|
-
|
|
48
|
+
- install mode: `recommended`, `custom`
|
|
49
|
+
|
|
50
|
+
## Built-in Capabilities
|
|
51
|
+
|
|
52
|
+
当前命令面只处理三类 capability:
|
|
53
|
+
|
|
54
|
+
- `skills`
|
|
55
|
+
- `mcp`
|
|
56
|
+
- `workflows`
|
|
57
|
+
|
|
58
|
+
当前内置能力可以概括为:
|
|
59
|
+
|
|
60
|
+
- `skills`
|
|
61
|
+
- 必装 bootstrap skill:`bootstrap-project-docs`
|
|
62
|
+
- 内置推荐远端 skills,可按 `recommended` 或 `custom` 安装
|
|
63
|
+
- `mcp`
|
|
64
|
+
- 默认 MCP:`Context7`
|
|
65
|
+
- 选装 MCP:`MasterGo`
|
|
66
|
+
- `workflows`
|
|
67
|
+
- 独立 workflow:`OpenSpec`
|
|
68
|
+
- 不会混入普通 `skill`;使用 `list workflows` / `add workflow` 管理
|
|
41
69
|
|
|
42
70
|
初始化输出包括:
|
|
43
71
|
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
72
|
+
- 根级前置入口文档:`AGENTS.md` / `CLAUDE.md`
|
|
73
|
+
- `.sdt-devagent/bootstrap-project-docs.md`
|
|
74
|
+
- 必装 bootstrap skill:`bootstrap-project-docs`
|
|
75
|
+
- `Codex` / `Claude Code` 的项目级 hooks 增强配置
|
|
76
|
+
- 远端推荐 skills 的项目级安装结果
|
|
77
|
+
- `Context7` / `MasterGo` 的项目级 MCP 配置
|
|
48
78
|
- `.sdt-devagent/manifest.json`
|
|
49
79
|
|
|
80
|
+
## Discover And Install
|
|
81
|
+
|
|
82
|
+
查看当前内置项:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
sdt-dev-agent list skills
|
|
86
|
+
sdt-dev-agent list mcp
|
|
87
|
+
sdt-dev-agent list workflows
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
增量安装:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
sdt-dev-agent add skill <name>
|
|
94
|
+
sdt-dev-agent add mcp <name>
|
|
95
|
+
sdt-dev-agent add workflow <name>
|
|
96
|
+
```
|
|
97
|
+
|
|
50
98
|
> [!NOTE]
|
|
51
|
-
>
|
|
99
|
+
> 当前只支持 `Codex` / `Claude Code` 的项目级接入,不包含业务任务编排、PR/发布流或服务端能力。
|
|
100
|
+
>
|
|
101
|
+
> 重复执行 `init` 时,CLI 托管的 bootstrap 入口文件和 manifest 会按最新模板直接覆盖;用户已有 `AGENTS.md` / `CLAUDE.md` 会保留并提示人工合并。
|
|
102
|
+
>
|
|
103
|
+
> 如果项目层已经存在 `.codex/hooks.json`,CLI 不会再把托管 hooks 混写进同层 `.codex/config.toml`;会把 Codex hooks 标记成 degraded,并继续保留入口文档、bootstrap skill 和 MCP。
|
|
52
104
|
>
|
|
53
|
-
>
|
|
105
|
+
> `Codex` 的项目级 hooks 首次还需要在 `/hooks` 里完成 trust review,文件已写入不等于该 hooks 已经开始执行。
|
|
106
|
+
>
|
|
107
|
+
> 如果远端 skill 安装失败,CLI 会保留已成功写入的本地文件与 manifest 状态,并输出 retry 命令;但本次 `init` 会以非零退出,避免把“部分成功”误判成“初始化完成”。
|
|
54
108
|
|
|
55
109
|
## Development
|
|
56
110
|
|
|
@@ -94,13 +148,66 @@ pnpm run verify
|
|
|
94
148
|
pnpm run verify
|
|
95
149
|
```
|
|
96
150
|
|
|
97
|
-
|
|
151
|
+
`verify` 当前会依次执行:`typecheck -> lint -> test -> build`。
|
|
152
|
+
|
|
153
|
+
正式版发布:
|
|
98
154
|
|
|
99
155
|
```bash
|
|
100
|
-
pnpm run release
|
|
156
|
+
pnpm run release # 等价于 pnpm run release:patch
|
|
101
157
|
pnpm run release:patch
|
|
102
158
|
pnpm run release:minor
|
|
103
159
|
pnpm run release:major
|
|
104
160
|
```
|
|
105
161
|
|
|
106
|
-
|
|
162
|
+
说明:
|
|
163
|
+
|
|
164
|
+
- `release` / `release:patch`:发布下一个 patch 版本到 npm `latest`
|
|
165
|
+
- `release:minor`:发布下一个 minor 版本到 npm `latest`
|
|
166
|
+
- `release:major`:发布下一个 major 版本到 npm `latest`
|
|
167
|
+
|
|
168
|
+
开发主线 beta 发布:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pnpm run release:beta
|
|
172
|
+
# 或手动指定 buildId
|
|
173
|
+
pnpm run release:beta -- 20260519143000
|
|
174
|
+
# 或兼容旧方式
|
|
175
|
+
BUILD_NUMBER=20260519143000 pnpm run release:beta
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
beta 流水线前置条件:
|
|
179
|
+
|
|
180
|
+
- 流水线需配置私密变量 `NPM_TOKEN`
|
|
181
|
+
- `NPM_TOKEN` 必须是对 `@shendu-sdt/sdt-dev-agent` 具备 publish 权限的 npm 官方 token
|
|
182
|
+
- beta 发布步骤需在运行时写入 npm 官方 registry 的 `/root/.npmrc`
|
|
183
|
+
- token 建议使用有限有效期并定期轮换,例如 `90 days`
|
|
184
|
+
|
|
185
|
+
推荐发布分支约定:
|
|
186
|
+
|
|
187
|
+
- `master`:正式版发布分支,默认手动发布,由发布人显式选择 `patch` / `minor` / `major`
|
|
188
|
+
- `dev`:beta 发布分支,默认由发布人本地执行 `pnpm run release:beta`
|
|
189
|
+
|
|
190
|
+
脚本强校验:
|
|
191
|
+
|
|
192
|
+
- 执行 `pnpm run release:beta` 时,当前分支必须是 `dev`
|
|
193
|
+
- 执行正式版发布命令时,当前分支必须是 `master`
|
|
194
|
+
- 发布前工作区必须干净,不能存在本地未提交修改
|
|
195
|
+
- 发布前本地分支必须与对应远端分支完全同步
|
|
196
|
+
- beta 对应 `origin/dev`
|
|
197
|
+
- 正式版对应 `origin/master`
|
|
198
|
+
- 任一条件不满足时,发布脚本会直接报错并停止,不会继续写版本号或执行 `npm publish`
|
|
199
|
+
|
|
200
|
+
版本规则:
|
|
201
|
+
|
|
202
|
+
- 正式版由发布人明确选择 `patch` / `minor` / `major`
|
|
203
|
+
- beta 会基于当前稳定版本生成“下一 patch 版本”的 `-beta.<buildId>` 版本号
|
|
204
|
+
- 不传参时,`buildId` 默认使用本地时间的 `YYYYMMDDHHmmss`
|
|
205
|
+
- 例如当前版本是 `0.1.2`,本地执行后可能发布为 `0.1.3-beta.20260519143000`
|
|
206
|
+
|
|
207
|
+
发布行为:
|
|
208
|
+
|
|
209
|
+
- 正式版发布到 npm `latest`
|
|
210
|
+
- beta 发布到 npm `beta`
|
|
211
|
+
- 发布脚本会先执行 `verify`(包含 `typecheck`、`lint`、`test`、`build`),再写入目标版本,然后对目标版本执行 `npm publish --dry-run`,最后发布到 npm 官方 registry
|
|
212
|
+
- 本地 beta 发布会更新工作区中的版本号文件;发布完成后如果不打算保留该 prerelease 版本号,需要由发布人自行处理工作区状态
|
|
213
|
+
- 执行 beta 发布前,发布机仍然需要具备 npm 官方 registry 的发布权限
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DEFAULT_SKILL_IDS, getSkillCatalogEntry, OPTIONAL_SKILL_IDS, REQUIRED_SKILL_ID, SKILL_CATALOG, SKILL_IDS, } from './skills.js';
|
|
2
|
+
export { DEFAULT_MCP_IDS, getMcpCatalogEntry, MCP_CATALOG, MCP_IDS, OPTIONAL_MCP_IDS, } from './mcp.js';
|
|
3
|
+
export { getWorkflowCatalogEntry, WORKFLOW_CATALOG, WORKFLOW_IDS } from './workflows.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DEFAULT_SKILL_IDS, getSkillCatalogEntry, OPTIONAL_SKILL_IDS, REQUIRED_SKILL_ID, SKILL_CATALOG, SKILL_IDS, } from './skills.js';
|
|
2
|
+
export { DEFAULT_MCP_IDS, getMcpCatalogEntry, MCP_CATALOG, MCP_IDS, OPTIONAL_MCP_IDS, } from './mcp.js';
|
|
3
|
+
export { getWorkflowCatalogEntry, WORKFLOW_CATALOG, WORKFLOW_IDS } from './workflows.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CatalogMcp, McpId } from '../types.js';
|
|
2
|
+
/** MCP 能力清单,模板目录是运行时生成项目级配置的事实源。 */
|
|
3
|
+
export declare const MCP_CATALOG: CatalogMcp[];
|
|
4
|
+
/** 推荐模式下默认安装的 MCP ID 集合。 */
|
|
5
|
+
export declare const DEFAULT_MCP_IDS: McpId[];
|
|
6
|
+
/** 可选但非默认安装的 MCP ID 集合。 */
|
|
7
|
+
export declare const OPTIONAL_MCP_IDS: McpId[];
|
|
8
|
+
/** 对外暴露给 `list/add` 的 MCP ID 集合。 */
|
|
9
|
+
export declare const MCP_IDS: McpId[];
|
|
10
|
+
/** 按稳定 ID 读取单个 MCP catalog 项。 */
|
|
11
|
+
export declare function getMcpCatalogEntry(mcpId: McpId): CatalogMcp;
|
|
12
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/catalog/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGpD,oCAAoC;AACpC,eAAO,MAAM,WAAW,EAAE,UAAU,EAmBH,CAAA;AAEjC,4BAA4B;AAC5B,eAAO,MAAM,eAAe,EAAE,KAAK,EAEb,CAAA;AAEtB,2BAA2B;AAC3B,eAAO,MAAM,gBAAgB,EAAE,KAAK,EAEd,CAAA;AAEtB,oCAAoC;AACpC,eAAO,MAAM,OAAO,EAAE,KAAK,EAAqC,CAAA;AAEhE,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAM3D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ALL_TOOLS } from './shared.js';
|
|
2
|
+
/** MCP 能力清单,模板目录是运行时生成项目级配置的事实源。 */
|
|
3
|
+
export const MCP_CATALOG = [
|
|
4
|
+
{
|
|
5
|
+
id: 'context7',
|
|
6
|
+
displayName: 'Context7',
|
|
7
|
+
description: '默认安装的项目级文档检索 MCP。',
|
|
8
|
+
sourceType: 'project-template',
|
|
9
|
+
selection: 'default',
|
|
10
|
+
supportedTools: ALL_TOOLS,
|
|
11
|
+
templateBaseDir: 'mcp/context7',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: 'mastergo',
|
|
15
|
+
displayName: 'MasterGo',
|
|
16
|
+
description: '选装设计稿 MCP。',
|
|
17
|
+
sourceType: 'project-template',
|
|
18
|
+
selection: 'optional',
|
|
19
|
+
supportedTools: ALL_TOOLS,
|
|
20
|
+
templateBaseDir: 'mcp/mastergo',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
/** 推荐模式下默认安装的 MCP ID 集合。 */
|
|
24
|
+
export const DEFAULT_MCP_IDS = MCP_CATALOG.filter((mcp) => mcp.selection === 'default').map((mcp) => mcp.id);
|
|
25
|
+
/** 可选但非默认安装的 MCP ID 集合。 */
|
|
26
|
+
export const OPTIONAL_MCP_IDS = MCP_CATALOG.filter((mcp) => mcp.selection === 'optional').map((mcp) => mcp.id);
|
|
27
|
+
/** 对外暴露给 `list/add` 的 MCP ID 集合。 */
|
|
28
|
+
export const MCP_IDS = MCP_CATALOG.map((mcp) => mcp.id);
|
|
29
|
+
/** 按稳定 ID 读取单个 MCP catalog 项。 */
|
|
30
|
+
export function getMcpCatalogEntry(mcpId) {
|
|
31
|
+
const mcp = MCP_CATALOG.find((item) => item.id === mcpId);
|
|
32
|
+
if (!mcp) {
|
|
33
|
+
throw new Error(`Unknown MCP catalog id: ${mcpId}`);
|
|
34
|
+
}
|
|
35
|
+
return mcp;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/catalog/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,oCAAoC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC;QACE,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,kBAAkB;QAC9B,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,cAAc;KAChC;IACD;QACE,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,kBAAkB;QAC9B,SAAS,EAAE,UAAU;QACrB,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,cAAc;KAChC;CAC8B,CAAA;AAEjC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAY,WAAW,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CACrC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAEtB,2BAA2B;AAC3B,MAAM,CAAC,MAAM,gBAAgB,GAAY,WAAW,CAAC,MAAM,CACzD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,UAAU,CACtC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAEtB,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAY,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAEhE,iCAAiC;AACjC,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;IACzD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/catalog/shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,uBAAuB;AACvB,eAAO,MAAM,SAAS,EAAE,MAAM,EAA6B,CAAA;AAI3D,eAAO,MAAM,WAAW,QAAuC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
/** 当前仓库支持写入配置的工具清单。 */
|
|
4
|
+
export const ALL_TOOLS = ['codex', 'claude-code'];
|
|
5
|
+
/** 用于从 `src/catalog/*` 稳定回到仓库根目录。 */
|
|
6
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
export const projectRoot = path.resolve(currentDir, '..', '..');
|
|
8
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/catalog/shared.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIxC,uBAAuB;AACvB,MAAM,CAAC,MAAM,SAAS,GAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;AAE3D,qCAAqC;AACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CatalogSkill, SkillId } from '../types.js';
|
|
2
|
+
/** 技能能力清单,包含一个必装本地 skill 和若干远端推荐 skill。 */
|
|
3
|
+
export declare const SKILL_CATALOG: CatalogSkill[];
|
|
4
|
+
/** 初始化阶段始终会安装的 bootstrap skill。 */
|
|
5
|
+
export declare const REQUIRED_SKILL_ID: SkillId;
|
|
6
|
+
/** 推荐模式下默认安装的远端 skill ID 集合。 */
|
|
7
|
+
export declare const DEFAULT_SKILL_IDS: SkillId[];
|
|
8
|
+
/** 可选但非默认安装的远端 skill ID 集合。 */
|
|
9
|
+
export declare const OPTIONAL_SKILL_IDS: SkillId[];
|
|
10
|
+
/** 对外暴露给 `list/add` 的 skill ID 集合,不包含必装 bootstrap skill。 */
|
|
11
|
+
export declare const SKILL_IDS: SkillId[];
|
|
12
|
+
/** 按稳定 ID 读取单个 skill catalog 项。 */
|
|
13
|
+
export declare function getSkillCatalogEntry(skillId: SkillId): CatalogSkill;
|
|
14
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/catalog/skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAU,MAAM,aAAa,CAAA;AA0ChE,2CAA2C;AAC3C,eAAO,MAAM,aAAa,EAAE,YAAY,EAYL,CAAA;AAEnC,mCAAmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,OAAkC,CAAA;AAElE,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,EAAE,OAAO,EAEb,CAAA;AAE1B,+BAA+B;AAC/B,eAAO,MAAM,kBAAkB,EAAE,OAAO,EAEd,CAAA;AAE1B,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,OAAO,EAEL,CAAA;AAE1B,mCAAmC;AACnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAMnE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parseJsonText } from '../utils/json.js';
|
|
4
|
+
import { ALL_TOOLS, projectRoot } from './shared.js';
|
|
5
|
+
/** 从 `templates/skills/remote/catalog.json` 加载远端推荐 skill 清单。 */
|
|
6
|
+
function loadRemoteSkillCatalog() {
|
|
7
|
+
const catalogPath = path.join(projectRoot, 'templates', 'skills', 'remote', 'catalog.json');
|
|
8
|
+
const raw = readFileSync(catalogPath, 'utf8');
|
|
9
|
+
const entries = parseJsonText(raw, catalogPath);
|
|
10
|
+
return entries.map((entry) => ({
|
|
11
|
+
id: entry.id,
|
|
12
|
+
displayName: entry.displayName,
|
|
13
|
+
description: entry.description,
|
|
14
|
+
sourceType: 'remote-recommended',
|
|
15
|
+
selection: entry.selection,
|
|
16
|
+
detectionMode: entry.detectionMode,
|
|
17
|
+
supportedTools: entry.supportedTools,
|
|
18
|
+
remote: {
|
|
19
|
+
source: entry.source,
|
|
20
|
+
installCommand: entry.installCommand,
|
|
21
|
+
installTargets: entry.installTargets,
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
/** 技能能力清单,包含一个必装本地 skill 和若干远端推荐 skill。 */
|
|
26
|
+
export const SKILL_CATALOG = [
|
|
27
|
+
{
|
|
28
|
+
id: 'bootstrap-project-docs',
|
|
29
|
+
displayName: 'bootstrap-project-docs',
|
|
30
|
+
description: '初始化项目事实文档与工具规则文档的必装 bootstrap skill。',
|
|
31
|
+
sourceType: 'builtin-local',
|
|
32
|
+
selection: 'required',
|
|
33
|
+
detectionMode: 'single',
|
|
34
|
+
supportedTools: ALL_TOOLS,
|
|
35
|
+
templateDir: 'skills/builtin/bootstrap-project-docs',
|
|
36
|
+
},
|
|
37
|
+
...loadRemoteSkillCatalog(),
|
|
38
|
+
];
|
|
39
|
+
/** 初始化阶段始终会安装的 bootstrap skill。 */
|
|
40
|
+
export const REQUIRED_SKILL_ID = 'bootstrap-project-docs';
|
|
41
|
+
/** 推荐模式下默认安装的远端 skill ID 集合。 */
|
|
42
|
+
export const DEFAULT_SKILL_IDS = SKILL_CATALOG.filter((skill) => skill.selection === 'default').map((skill) => skill.id);
|
|
43
|
+
/** 可选但非默认安装的远端 skill ID 集合。 */
|
|
44
|
+
export const OPTIONAL_SKILL_IDS = SKILL_CATALOG.filter((skill) => skill.selection === 'optional').map((skill) => skill.id);
|
|
45
|
+
/** 对外暴露给 `list/add` 的 skill ID 集合,不包含必装 bootstrap skill。 */
|
|
46
|
+
export const SKILL_IDS = SKILL_CATALOG.filter((skill) => skill.id !== REQUIRED_SKILL_ID).map((skill) => skill.id);
|
|
47
|
+
/** 按稳定 ID 读取单个 skill catalog 项。 */
|
|
48
|
+
export function getSkillCatalogEntry(skillId) {
|
|
49
|
+
const skill = SKILL_CATALOG.find((item) => item.id === skillId);
|
|
50
|
+
if (!skill) {
|
|
51
|
+
throw new Error(`Unknown skill catalog id: ${skillId}`);
|
|
52
|
+
}
|
|
53
|
+
return skill;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/catalog/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAkBpD,gEAAgE;AAChE,SAAS,sBAAsB;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC3F,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,aAAa,CAA6B,GAAG,EAAE,WAAW,CAAC,CAAA;IAE3E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,MAAM,EAAE;YACN,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C;QACE,EAAE,EAAE,wBAAwB;QAC5B,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,sCAAsC;QACnD,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,UAAU;QACrB,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,uCAAuC;KACrD;IACD,GAAG,sBAAsB,EAAE;CACM,CAAA;AAEnC,mCAAmC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAY,wBAAwB,CAAA;AAElE,gCAAgC;AAChC,MAAM,CAAC,MAAM,iBAAiB,GAAc,aAAa,CAAC,MAAM,CAC9D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CACzC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAE1B,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAc,aAAa,CAAC,MAAM,CAC/D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,UAAU,CAC1C,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAE1B,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAc,aAAa,CAAC,MAAM,CACtD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,iBAAiB,CAC1C,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAE1B,mCAAmC;AACnC,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CatalogWorkflow, WorkflowId } from '../types.js';
|
|
2
|
+
/** workflow 能力清单,当前只维护独立于 skill 的 OpenSpec 集成。 */
|
|
3
|
+
export declare const WORKFLOW_CATALOG: CatalogWorkflow[];
|
|
4
|
+
/** 对外暴露给 `list/add` 的 workflow ID 集合。 */
|
|
5
|
+
export declare const WORKFLOW_IDS: WorkflowId[];
|
|
6
|
+
/** 按稳定 ID 读取单个 workflow catalog 项。 */
|
|
7
|
+
export declare function getWorkflowCatalogEntry(workflowId: WorkflowId): CatalogWorkflow;
|
|
8
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/catalog/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG9D,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAUR,CAAA;AAEtC,yCAAyC;AACzC,eAAO,MAAM,YAAY,EAAE,UAAU,EAAoD,CAAA;AAEzF,sCAAsC;AACtC,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAM/E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ALL_TOOLS } from './shared.js';
|
|
2
|
+
/** workflow 能力清单,当前只维护独立于 skill 的 OpenSpec 集成。 */
|
|
3
|
+
export const WORKFLOW_CATALOG = [
|
|
4
|
+
{
|
|
5
|
+
id: 'openspec',
|
|
6
|
+
displayName: 'OpenSpec',
|
|
7
|
+
description: '独立的 spec-driven workflow 工作流能力,不属于普通 skills 或 MCP。',
|
|
8
|
+
sourceType: 'workflow-integration',
|
|
9
|
+
supportedTools: ALL_TOOLS,
|
|
10
|
+
templateBaseDir: 'workflows/openspec',
|
|
11
|
+
installCommand: 'npx -y @fission-ai/openspec@latest init --tools <tool> --profile core .',
|
|
12
|
+
},
|
|
13
|
+
];
|
|
14
|
+
/** 对外暴露给 `list/add` 的 workflow ID 集合。 */
|
|
15
|
+
export const WORKFLOW_IDS = WORKFLOW_CATALOG.map((workflow) => workflow.id);
|
|
16
|
+
/** 按稳定 ID 读取单个 workflow catalog 项。 */
|
|
17
|
+
export function getWorkflowCatalogEntry(workflowId) {
|
|
18
|
+
const workflow = WORKFLOW_CATALOG.find((item) => item.id === workflowId);
|
|
19
|
+
if (!workflow) {
|
|
20
|
+
throw new Error(`Unknown workflow catalog id: ${workflowId}`);
|
|
21
|
+
}
|
|
22
|
+
return workflow;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/catalog/workflows.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD;QACE,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,oDAAoD;QACjE,UAAU,EAAE,sBAAsB;QAClC,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,oBAAoB;QACrC,cAAc,EAAE,yEAAyE;KAC1F;CACmC,CAAA;AAEtC,yCAAyC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAiB,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAEzF,sCAAsC;AACtC,MAAM,UAAU,uBAAuB,CAAC,UAAsB;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAA;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { runAddMcpCommand, runAddSkillCommand, runAddWorkflowCommand } from '../commands/add.js';
|
|
2
3
|
import { runInitCommand } from '../commands/init.js';
|
|
4
|
+
import { runListMcpCommand, runListSkillsCommand, runListWorkflowsCommand, } from '../commands/list.js';
|
|
5
|
+
import { runStatusCommand } from '../commands/status.js';
|
|
3
6
|
const program = new Command();
|
|
4
7
|
program
|
|
5
8
|
.name('sdt-dev-agent')
|
|
@@ -7,10 +10,11 @@ program
|
|
|
7
10
|
.version('0.1.0');
|
|
8
11
|
program
|
|
9
12
|
.command('init [targetPath]')
|
|
10
|
-
.description('Initialize
|
|
13
|
+
.description('Initialize bootstrap skills, tool integrations, and MCP config in a project')
|
|
11
14
|
.option('--tools <tools>', 'Comma-separated tools: codex,claude-code')
|
|
12
|
-
.option('--install-mode <mode>', 'Install mode: recommended|
|
|
13
|
-
.option('--
|
|
15
|
+
.option('--install-mode <mode>', 'Install mode: recommended|custom')
|
|
16
|
+
.option('--skills <skills>', 'Comma-separated remote skill ids for custom install')
|
|
17
|
+
.option('--mcp <mcp>', 'Comma-separated MCP ids for custom install')
|
|
14
18
|
.option('--yes', 'Use default selections without prompting')
|
|
15
19
|
.action(async (targetPath = '.', options) => {
|
|
16
20
|
try {
|
|
@@ -22,5 +26,70 @@ program
|
|
|
22
26
|
process.exitCode = 1;
|
|
23
27
|
}
|
|
24
28
|
});
|
|
29
|
+
program
|
|
30
|
+
.command('status [targetPath]')
|
|
31
|
+
.description('Show current project capability status')
|
|
32
|
+
.action(async (targetPath = '.') => {
|
|
33
|
+
try {
|
|
34
|
+
await runStatusCommand(targetPath);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
38
|
+
console.error(message);
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const listCommand = program.command('list').description('Show installable capability catalogs');
|
|
43
|
+
listCommand.command('skills').description('List installable skills').action(runListSkillsCommand);
|
|
44
|
+
listCommand.command('mcp').description('List installable MCP servers').action(runListMcpCommand);
|
|
45
|
+
listCommand
|
|
46
|
+
.command('workflows')
|
|
47
|
+
.description('List installable workflows')
|
|
48
|
+
.action(runListWorkflowsCommand);
|
|
49
|
+
const addCommand = program
|
|
50
|
+
.command('add')
|
|
51
|
+
.description('Add a skill, MCP, or workflow to an initialized project');
|
|
52
|
+
addCommand
|
|
53
|
+
.command('skill <name>')
|
|
54
|
+
.description('Add a skill to the initialized project')
|
|
55
|
+
.option('--tool <tool>', 'Limit installation to one initialized tool')
|
|
56
|
+
.action(async (name, options) => {
|
|
57
|
+
try {
|
|
58
|
+
await runAddSkillCommand(name, options);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
62
|
+
console.error(message);
|
|
63
|
+
process.exitCode = 1;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
addCommand
|
|
67
|
+
.command('mcp <name>')
|
|
68
|
+
.description('Add an MCP server to the initialized project')
|
|
69
|
+
.option('--tool <tool>', 'Limit installation to one initialized tool')
|
|
70
|
+
.action(async (name, options) => {
|
|
71
|
+
try {
|
|
72
|
+
await runAddMcpCommand(name, options);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
76
|
+
console.error(message);
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
addCommand
|
|
81
|
+
.command('workflow <name>')
|
|
82
|
+
.description('Add a workflow to the initialized project')
|
|
83
|
+
.option('--tool <tool>', 'Limit installation to one initialized tool')
|
|
84
|
+
.action(async (name, options) => {
|
|
85
|
+
try {
|
|
86
|
+
await runAddWorkflowCommand(name, options);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
90
|
+
console.error(message);
|
|
91
|
+
process.exitCode = 1;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
25
94
|
await program.parseAsync(process.argv);
|
|
26
95
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface AddCommandOptions {
|
|
2
|
+
tool?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare function runAddSkillCommand(skillId: string, options?: AddCommandOptions): Promise<void>;
|
|
5
|
+
export declare function runAddWorkflowCommand(workflowId: string, options?: AddCommandOptions): Promise<void>;
|
|
6
|
+
export declare function runAddMcpCommand(mcpId: string, options?: AddCommandOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AA6FD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA2Ff;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkFf;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
|