@shendu-sdt/sdt-dev-agent 0.1.1 → 0.1.3-beta.10

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.
Files changed (101) hide show
  1. package/README.md +85 -31
  2. package/dist/catalog.d.ts +16 -0
  3. package/dist/catalog.d.ts.map +1 -0
  4. package/dist/catalog.js +98 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/cli/index.js +72 -3
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/commands/add.d.ts +7 -0
  9. package/dist/commands/add.d.ts.map +1 -0
  10. package/dist/commands/add.js +267 -0
  11. package/dist/commands/add.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +31 -5
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/list.d.ts +4 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +20 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/status.d.ts +2 -0
  20. package/dist/commands/status.d.ts.map +1 -0
  21. package/dist/commands/status.js +66 -0
  22. package/dist/commands/status.js.map +1 -0
  23. package/dist/core/capability-discovery.d.ts +23 -0
  24. package/dist/core/capability-discovery.d.ts.map +1 -0
  25. package/dist/core/capability-discovery.js +49 -0
  26. package/dist/core/capability-discovery.js.map +1 -0
  27. package/dist/core/init-options.d.ts +7 -1
  28. package/dist/core/init-options.d.ts.map +1 -1
  29. package/dist/core/init-options.js +64 -34
  30. package/dist/core/init-options.js.map +1 -1
  31. package/dist/core/init-plan.d.ts +25 -1
  32. package/dist/core/init-plan.d.ts.map +1 -1
  33. package/dist/core/init-plan.js +211 -37
  34. package/dist/core/init-plan.js.map +1 -1
  35. package/dist/core/init-writer.d.ts +17 -1
  36. package/dist/core/init-writer.d.ts.map +1 -1
  37. package/dist/core/init-writer.js +72 -19
  38. package/dist/core/init-writer.js.map +1 -1
  39. package/dist/core/manifest.d.ts +8 -0
  40. package/dist/core/manifest.d.ts.map +1 -0
  41. package/dist/core/manifest.js +16 -0
  42. package/dist/core/manifest.js.map +1 -0
  43. package/dist/core/mcp-config.d.ts +12 -0
  44. package/dist/core/mcp-config.d.ts.map +1 -0
  45. package/dist/core/mcp-config.js +60 -0
  46. package/dist/core/mcp-config.js.map +1 -0
  47. package/dist/core/project-inspector.d.ts +1 -0
  48. package/dist/core/project-inspector.d.ts.map +1 -1
  49. package/dist/core/project-inspector.js +4 -0
  50. package/dist/core/project-inspector.js.map +1 -1
  51. package/dist/core/remote-skill-installer.d.ts +16 -0
  52. package/dist/core/remote-skill-installer.d.ts.map +1 -0
  53. package/dist/core/remote-skill-installer.js +104 -0
  54. package/dist/core/remote-skill-installer.js.map +1 -0
  55. package/dist/core/workflow-installer.d.ts +22 -0
  56. package/dist/core/workflow-installer.d.ts.map +1 -0
  57. package/dist/core/workflow-installer.js +103 -0
  58. package/dist/core/workflow-installer.js.map +1 -0
  59. package/dist/types.d.ts +103 -6
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/types.js +10 -2
  62. package/dist/types.js.map +1 -1
  63. package/dist/utils/follow-up-notice.d.ts +7 -0
  64. package/dist/utils/follow-up-notice.d.ts.map +1 -0
  65. package/dist/utils/follow-up-notice.js +29 -0
  66. package/dist/utils/follow-up-notice.js.map +1 -0
  67. package/dist/utils/init-welcome.d.ts.map +1 -1
  68. package/dist/utils/init-welcome.js +20 -33
  69. package/dist/utils/init-welcome.js.map +1 -1
  70. package/dist/utils/mastergo-notice.d.ts +7 -0
  71. package/dist/utils/mastergo-notice.d.ts.map +1 -0
  72. package/dist/utils/mastergo-notice.js +14 -0
  73. package/dist/utils/mastergo-notice.js.map +1 -0
  74. package/dist/utils/searchable-multi-select.js +5 -6
  75. package/dist/utils/searchable-multi-select.js.map +1 -1
  76. package/dist/utils/styled-select.d.ts.map +1 -1
  77. package/dist/utils/styled-select.js.map +1 -1
  78. package/dist/utils/terminal-theme.d.ts +4 -0
  79. package/dist/utils/terminal-theme.d.ts.map +1 -0
  80. package/dist/utils/terminal-theme.js +25 -0
  81. package/dist/utils/terminal-theme.js.map +1 -0
  82. package/package.json +6 -3
  83. package/templates/bootstrap/project-entry.md +17 -0
  84. package/templates/mcp/context7/claude-code/server.json +6 -0
  85. package/templates/mcp/context7/codex/config.toml +3 -0
  86. package/templates/mcp/mastergo/claude-code/server.json +6 -0
  87. package/templates/mcp/mastergo/codex/config.toml +4 -0
  88. package/templates/skills/builtin/bootstrap-project-docs/SKILL.md +16 -0
  89. package/templates/skills/builtin/bootstrap-project-docs/references/architecture-first.md +7 -0
  90. package/templates/skills/builtin/bootstrap-project-docs/references/tool-rules-follow-up.md +8 -0
  91. package/templates/skills/remote/catalog.json +68 -0
  92. package/templates/workflows/openspec/README.md +7 -0
  93. package/templates/workflows/openspec/claude-code/README.md +7 -0
  94. package/templates/workflows/openspec/codex/README.md +7 -0
  95. package/templates/AGENTS.md +0 -24
  96. package/templates/ARCHITECTURE.md +0 -26
  97. package/templates/capabilities/mcp/README.md +0 -8
  98. package/templates/capabilities/skills/README.md +0 -8
  99. package/templates/docs/ai-collaboration/README.md +0 -16
  100. package/templates/tools/claude-code/README.md +0 -8
  101. package/templates/tools/codex/README.md +0 -8
@@ -0,0 +1,267 @@
1
+ import path from 'node:path';
2
+ import { MCP_CATALOG, SKILL_CATALOG, WORKFLOW_CATALOG, getMcpCatalogEntry, getSkillCatalogEntry, getWorkflowCatalogEntry, } from '../catalog.js';
3
+ import { detectSkillAvailability, detectWorkflowAvailability, } from '../core/capability-discovery.js';
4
+ import { readInstallManifest, writeInstallManifest } from '../core/manifest.js';
5
+ import { buildClaudeMcpConfig, buildCodexMcpConfig, mergeMcpConfig, parseConfiguredMcpIds, } from '../core/mcp-config.js';
6
+ import { buildWorkflowInstallCommand, buildRemoteSkillInstallCommand, getProjectMcpConfigPath, getRemoteSkillInstallTargets, getRemoteSkillTargetPath, getWorkflowTargetPaths, } from '../core/init-plan.js';
7
+ import { installRemoteSkill } from '../core/remote-skill-installer.js';
8
+ import { installWorkflow } from '../core/workflow-installer.js';
9
+ import { exists, readText, writeText } from '../utils/fs.js';
10
+ import { printMastergoTokenNotice } from '../utils/mastergo-notice.js';
11
+ import { withTerminalTone } from '../utils/terminal-theme.js';
12
+ function resolveTargetTools(manifest, requestedTool) {
13
+ if (!requestedTool) {
14
+ return manifest.tools;
15
+ }
16
+ if (!manifest.tools.includes(requestedTool)) {
17
+ throw new Error(`Tool is not initialized in this project: ${requestedTool}`);
18
+ }
19
+ return [requestedTool];
20
+ }
21
+ function ensureSkillRecord(manifest, skillId) {
22
+ const existing = manifest.skills.find((skill) => skill.id === skillId);
23
+ if (existing) {
24
+ return existing;
25
+ }
26
+ const skill = getSkillCatalogEntry(skillId);
27
+ const record = {
28
+ id: skillId,
29
+ selection: skill.selection,
30
+ sourceType: skill.sourceType,
31
+ installs: [],
32
+ };
33
+ manifest.skills.push(record);
34
+ return record;
35
+ }
36
+ function ensureMcpRecord(manifest, mcpId) {
37
+ const existing = manifest.mcps.find((mcp) => mcp.id === mcpId);
38
+ if (existing) {
39
+ return existing;
40
+ }
41
+ const mcp = getMcpCatalogEntry(mcpId);
42
+ const record = {
43
+ id: mcpId,
44
+ selection: mcp.selection,
45
+ sourceType: mcp.sourceType,
46
+ installs: [],
47
+ };
48
+ manifest.mcps.push(record);
49
+ return record;
50
+ }
51
+ function ensureWorkflowRecord(manifest, workflowId) {
52
+ const existing = manifest.workflows.find((workflow) => workflow.id === workflowId);
53
+ if (existing) {
54
+ return existing;
55
+ }
56
+ const workflow = getWorkflowCatalogEntry(workflowId);
57
+ const record = {
58
+ id: workflowId,
59
+ sourceType: workflow.sourceType,
60
+ installs: [],
61
+ };
62
+ manifest.workflows.push(record);
63
+ return record;
64
+ }
65
+ function printAddProgressStart(kind, id, tool, index, total) {
66
+ const label = kind === 'skill' ? 'Installing' : kind === 'mcp' ? 'Applying' : 'Installing';
67
+ console.log(`${label} ${kind} ${index}/${total}: ${id} (${tool})...`);
68
+ }
69
+ function formatInstallStatusLine(line, status) {
70
+ if (status === 'installed') {
71
+ return withTerminalTone(line, 'success');
72
+ }
73
+ if (status === 'failed') {
74
+ return withTerminalTone(line, 'failure');
75
+ }
76
+ return line;
77
+ }
78
+ export async function runAddSkillCommand(skillId, options = {}) {
79
+ if (!SKILL_CATALOG.some((skill) => skill.id === skillId)) {
80
+ throw new Error(`Unknown skill: ${skillId}`);
81
+ }
82
+ const projectRoot = process.cwd();
83
+ const manifest = await readInstallManifest(projectRoot);
84
+ const tools = resolveTargetTools(manifest, options.tool);
85
+ const skill = getSkillCatalogEntry(skillId);
86
+ const skillRecord = ensureSkillRecord(manifest, skill.id);
87
+ console.log(`Adding skill: ${skill.id}`);
88
+ for (const [index, tool] of tools.entries()) {
89
+ printAddProgressStart('skill', skill.id, tool, index + 1, tools.length);
90
+ const availability = await detectSkillAvailability(projectRoot, tool, skill.id);
91
+ const targetPath = getRemoteSkillTargetPath(tool, skill.id);
92
+ const installTargets = getRemoteSkillInstallTargets(tool, skill.id);
93
+ const installCommand = skill.remote
94
+ ? buildRemoteSkillInstallCommand(skill.id, tool, skill.remote.installCommand)
95
+ : undefined;
96
+ const existingInstall = skillRecord.installs.find((install) => install.tool === tool);
97
+ if (availability.status === 'already-present') {
98
+ if (existingInstall) {
99
+ existingInstall.status = availability.status;
100
+ existingInstall.reason = availability.reason;
101
+ }
102
+ else {
103
+ skillRecord.installs.push({
104
+ tool,
105
+ status: availability.status,
106
+ reason: availability.reason,
107
+ path: targetPath,
108
+ source: skill.remote?.source,
109
+ installCommand,
110
+ });
111
+ }
112
+ console.log(formatInstallStatusLine(`- ${skill.id} (${tool}) ${availability.status}`, availability.status));
113
+ continue;
114
+ }
115
+ if (!skill.remote) {
116
+ throw new Error(`Builtin skill is not supported by add yet: ${skill.id}`);
117
+ }
118
+ const result = await installRemoteSkill(projectRoot, {
119
+ tool,
120
+ skillId: skill.id,
121
+ targetPath,
122
+ installTargets,
123
+ source: skill.remote.source,
124
+ installCommand: installCommand ?? skill.remote.installCommand,
125
+ });
126
+ if (!existingInstall) {
127
+ skillRecord.installs.push({
128
+ tool,
129
+ status: result.success ? 'installed' : 'failed',
130
+ reason: result.success ? undefined : 'install-failed',
131
+ path: targetPath,
132
+ source: skill.remote.source,
133
+ installCommand,
134
+ });
135
+ }
136
+ else {
137
+ existingInstall.status = result.success ? 'installed' : 'failed';
138
+ existingInstall.reason = result.success ? undefined : 'install-failed';
139
+ }
140
+ console.log(formatInstallStatusLine(`- ${skill.id} (${tool}) ${result.success ? 'installed' : 'failed'}`, result.success ? 'installed' : 'failed'));
141
+ if (!result.success) {
142
+ console.log(withTerminalTone(` retry: ${installCommand}`, 'failure'));
143
+ }
144
+ }
145
+ await writeInstallManifest(projectRoot, manifest);
146
+ }
147
+ export async function runAddWorkflowCommand(workflowId, options = {}) {
148
+ if (!WORKFLOW_CATALOG.some((workflow) => workflow.id === workflowId)) {
149
+ throw new Error(`Unknown workflow: ${workflowId}`);
150
+ }
151
+ const projectRoot = process.cwd();
152
+ const manifest = await readInstallManifest(projectRoot);
153
+ const tools = resolveTargetTools(manifest, options.tool);
154
+ const workflow = getWorkflowCatalogEntry(workflowId);
155
+ const workflowRecord = ensureWorkflowRecord(manifest, workflow.id);
156
+ console.log(`Adding workflow: ${workflow.id}`);
157
+ for (const [index, tool] of tools.entries()) {
158
+ printAddProgressStart('workflow', workflow.id, tool, index + 1, tools.length);
159
+ const availability = await detectWorkflowAvailability(projectRoot, tool, workflow.id);
160
+ const targetPaths = getWorkflowTargetPaths(tool, workflow.id);
161
+ const installCommand = buildWorkflowInstallCommand(workflow.id, tool);
162
+ const primaryPath = targetPaths[0] ?? '.';
163
+ const existingInstall = workflowRecord.installs.find((install) => install.tool === tool);
164
+ if (availability.status === 'already-present') {
165
+ if (existingInstall) {
166
+ existingInstall.status = availability.status;
167
+ existingInstall.reason = availability.reason;
168
+ }
169
+ else {
170
+ workflowRecord.installs.push({
171
+ tool,
172
+ status: availability.status,
173
+ reason: availability.reason,
174
+ path: primaryPath,
175
+ installCommand,
176
+ });
177
+ }
178
+ console.log(formatInstallStatusLine(`- ${workflow.id} (${tool}) ${availability.status}`, availability.status));
179
+ continue;
180
+ }
181
+ const result = await installWorkflow(projectRoot, {
182
+ tool,
183
+ workflowId: workflow.id,
184
+ installCommand,
185
+ });
186
+ if (!existingInstall) {
187
+ workflowRecord.installs.push({
188
+ tool,
189
+ status: result.success ? 'installed' : 'failed',
190
+ reason: result.success ? undefined : 'install-failed',
191
+ path: primaryPath,
192
+ installCommand,
193
+ });
194
+ }
195
+ else {
196
+ existingInstall.status = result.success ? 'installed' : 'failed';
197
+ existingInstall.reason = result.success ? undefined : 'install-failed';
198
+ }
199
+ console.log(formatInstallStatusLine(`- ${workflow.id} (${tool}) ${result.success ? 'installed' : 'failed'}`, result.success ? 'installed' : 'failed'));
200
+ if (!result.success) {
201
+ console.log(withTerminalTone(` retry: ${installCommand}`, 'failure'));
202
+ }
203
+ }
204
+ await writeInstallManifest(projectRoot, manifest);
205
+ }
206
+ export async function runAddMcpCommand(mcpId, options = {}) {
207
+ if (!MCP_CATALOG.some((mcp) => mcp.id === mcpId)) {
208
+ throw new Error(`Unknown MCP: ${mcpId}`);
209
+ }
210
+ const projectRoot = process.cwd();
211
+ const manifest = await readInstallManifest(projectRoot);
212
+ const tools = resolveTargetTools(manifest, options.tool);
213
+ const mcp = getMcpCatalogEntry(mcpId);
214
+ const mcpRecord = ensureMcpRecord(manifest, mcp.id);
215
+ console.log(`Adding MCP: ${mcp.id}`);
216
+ const mastergoNoticeInstalls = [];
217
+ for (const [index, tool] of tools.entries()) {
218
+ printAddProgressStart('mcp', mcp.id, tool, index + 1, tools.length);
219
+ const configPath = getProjectMcpConfigPath(tool);
220
+ const absolutePath = path.join(projectRoot, configPath);
221
+ const existingInstall = mcpRecord.installs.find((install) => install.tool === tool);
222
+ if (await exists(absolutePath)) {
223
+ const current = await readText(absolutePath);
224
+ const configured = parseConfiguredMcpIds(tool, current);
225
+ if (configured.has(mcp.id)) {
226
+ if (existingInstall) {
227
+ existingInstall.status = 'already-present';
228
+ existingInstall.reason = 'already-present';
229
+ }
230
+ else {
231
+ mcpRecord.installs.push({
232
+ tool,
233
+ status: 'already-present',
234
+ reason: 'already-present',
235
+ path: configPath,
236
+ });
237
+ }
238
+ console.log(formatInstallStatusLine(`- ${mcp.id} (${tool}) already-present`, 'already-present'));
239
+ continue;
240
+ }
241
+ await writeText(absolutePath, mergeMcpConfig(tool, current, [mcp.id]));
242
+ }
243
+ else {
244
+ await writeText(absolutePath, tool === 'codex' ? buildCodexMcpConfig([mcp.id]) : buildClaudeMcpConfig([mcp.id]));
245
+ }
246
+ if (existingInstall) {
247
+ existingInstall.status = 'installed';
248
+ existingInstall.reason = undefined;
249
+ }
250
+ else {
251
+ mcpRecord.installs.push({
252
+ tool,
253
+ status: 'installed',
254
+ path: configPath,
255
+ });
256
+ }
257
+ console.log(formatInstallStatusLine(`- ${mcp.id} (${tool}) installed`, 'installed'));
258
+ if (mcp.id === 'mastergo') {
259
+ mastergoNoticeInstalls.push({ tool, path: configPath });
260
+ }
261
+ }
262
+ await writeInstallManifest(projectRoot, manifest);
263
+ if (mcp.id === 'mastergo') {
264
+ printMastergoTokenNotice(mastergoNoticeInstalls);
265
+ }
266
+ }
267
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAc7D,wBAAsB,cAAc,CAClC,UAAU,SAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAoC7D,wBAAsB,cAAc,CAClC,UAAU,SAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -3,15 +3,27 @@ import { promises as fs } from 'node:fs';
3
3
  import { inspectProject } from '../core/project-inspector.js';
4
4
  import { resolveInitSelections } from '../core/init-options.js';
5
5
  import { createInitPlan } from '../core/init-plan.js';
6
+ import { getProjectMcpConfigPath } from '../core/init-plan.js';
6
7
  import { applyInitPlan } from '../core/init-writer.js';
7
8
  import { showInitWelcome } from '../utils/init-welcome.js';
8
- function printSummary(targetPath, writtenFiles) {
9
- console.log(`Initialized SDT DevAgent in ${targetPath}`);
9
+ import { printMastergoTokenNotice } from '../utils/mastergo-notice.js';
10
+ import { withTerminalTone } from '../utils/terminal-theme.js';
11
+ function printSummary(targetPath, writtenFiles, failedRemoteSkills) {
12
+ console.log(withTerminalTone(`Initialized SDT DevAgent in ${targetPath}`, 'success'));
10
13
  console.log('');
11
- console.log('Generated files:');
14
+ console.log('Installed bootstrap and tool integration assets:');
12
15
  for (const file of writtenFiles) {
13
16
  console.log(`- ${file}`);
14
17
  }
18
+ if (failedRemoteSkills.length > 0) {
19
+ console.log('');
20
+ console.log(withTerminalTone('Remote skill installs that need manual retry:', 'failure'));
21
+ for (const item of failedRemoteSkills) {
22
+ console.log(withTerminalTone(`- ${item.skillId} (${item.tool})`, 'failure'));
23
+ console.log(` reason: ${item.error}`);
24
+ console.log(` retry: ${item.installCommand}`);
25
+ }
26
+ }
15
27
  }
16
28
  export async function runInitCommand(targetPath = '.', options = {}) {
17
29
  const resolvedTarget = path.resolve(targetPath);
@@ -28,7 +40,21 @@ export async function runInitCommand(targetPath = '.', options = {}) {
28
40
  const selections = await resolveInitSelections(options);
29
41
  const facts = await inspectProject(resolvedTarget);
30
42
  const plan = createInitPlan(facts, selections);
31
- const result = await applyInitPlan(resolvedTarget, plan);
32
- printSummary(resolvedTarget, result.writtenFiles);
43
+ const result = await applyInitPlan(resolvedTarget, plan, {
44
+ onRemoteSkillInstallStart(install, index, total) {
45
+ console.log(`Installing remote skill ${index}/${total}: ${install.skillId} (${install.tool})...`);
46
+ },
47
+ onRemoteSkillInstallFinish(install, result) {
48
+ const line = `- ${install.skillId} (${install.tool}) ${result}`;
49
+ console.log(withTerminalTone(line, result === 'installed' ? 'success' : 'failure'));
50
+ },
51
+ });
52
+ printSummary(resolvedTarget, result.writtenFiles, result.failedRemoteSkills);
53
+ if (selections.mcps.includes('mastergo')) {
54
+ printMastergoTokenNotice(selections.tools.map((tool) => ({
55
+ tool,
56
+ path: getProjectMcpConfigPath(tool),
57
+ })));
58
+ }
33
59
  }
34
60
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,SAAS,YAAY,CAAC,UAAkB,EAAE,YAAsB;IAC9D,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAU,GAAG,GAAG,EAChB,UAA0B,EAAE;IAE5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAE/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;QACjF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,cAAc,EAAE,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,eAAe,EAAE,CAAA;IAEvB,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAExD,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runListSkillsCommand(): void;
2
+ export declare function runListMcpCommand(): void;
3
+ export declare function runListWorkflowsCommand(): void;
4
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAO9C"}
@@ -0,0 +1,20 @@
1
+ import { MCP_CATALOG, SKILL_CATALOG, WORKFLOW_CATALOG } from '../catalog.js';
2
+ export function runListSkillsCommand() {
3
+ console.log('Installable skills');
4
+ for (const skill of SKILL_CATALOG) {
5
+ console.log(`- ${skill.id} | ${skill.selection} | ${skill.sourceType} | ${skill.description}`);
6
+ }
7
+ }
8
+ export function runListMcpCommand() {
9
+ console.log('Installable MCP servers');
10
+ for (const mcp of MCP_CATALOG) {
11
+ console.log(`- ${mcp.id} | ${mcp.selection} | ${mcp.sourceType} | ${mcp.description}`);
12
+ }
13
+ }
14
+ export function runListWorkflowsCommand() {
15
+ console.log('Installable workflows');
16
+ for (const workflow of WORKFLOW_CATALOG) {
17
+ console.log(`- ${workflow.id} | ${workflow.sourceType} | ${workflow.supportedTools.join(', ')} | ${workflow.description}`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAE5E,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACjC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAChG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IACtC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,UAAU,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;IACxF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,KAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,UAAU,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAC9G,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runStatusCommand(targetPath?: string): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAsDA,wBAAsB,gBAAgB,CAAC,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCtE"}
@@ -0,0 +1,66 @@
1
+ import path from 'node:path';
2
+ import { detectSkillAvailability, detectWorkflowAvailability, } from '../core/capability-discovery.js';
3
+ import { readInstallManifest } from '../core/manifest.js';
4
+ import { parseConfiguredMcpIds } from '../core/mcp-config.js';
5
+ import { exists, readText } from '../utils/fs.js';
6
+ async function resolveSkillStatus(projectRoot, skillId, install) {
7
+ const detected = await detectSkillAvailability(projectRoot, install.tool, skillId);
8
+ if (detected.status === 'missing') {
9
+ return install.status === 'failed' ? 'failed' : 'missing';
10
+ }
11
+ return install.status === 'already-present' ? 'already-present' : 'installed';
12
+ }
13
+ async function resolveMcpStatus(projectRoot, mcpId, install) {
14
+ if (!(await exists(path.join(projectRoot, install.path)))) {
15
+ return install.status === 'failed' ? 'failed' : 'missing';
16
+ }
17
+ const config = await readText(path.join(projectRoot, install.path));
18
+ const configured = parseConfiguredMcpIds(install.tool, config);
19
+ if (configured.has(mcpId)) {
20
+ return install.status === 'already-present' ? 'already-present' : 'installed';
21
+ }
22
+ return 'missing';
23
+ }
24
+ async function resolveWorkflowStatus(projectRoot, workflowId, install) {
25
+ const detected = await detectWorkflowAvailability(projectRoot, install.tool, workflowId);
26
+ if (detected.status === 'missing') {
27
+ return install.status === 'failed' ? 'failed' : 'missing';
28
+ }
29
+ return install.status === 'already-present' ? 'already-present' : 'installed';
30
+ }
31
+ export async function runStatusCommand(targetPath = '.') {
32
+ const projectRoot = path.resolve(targetPath);
33
+ const manifest = await readInstallManifest(projectRoot);
34
+ console.log('Current project capability status');
35
+ console.log(`Project: ${manifest.project.name}`);
36
+ console.log('');
37
+ console.log('AI Coding Tools:');
38
+ for (const tool of manifest.tools) {
39
+ console.log(`- ${tool}`);
40
+ }
41
+ console.log('');
42
+ console.log('Skills:');
43
+ for (const skill of manifest.skills) {
44
+ for (const install of skill.installs) {
45
+ const status = await resolveSkillStatus(projectRoot, skill.id, install);
46
+ console.log(`- ${skill.id} (${install.tool}) ${status}`);
47
+ }
48
+ }
49
+ console.log('');
50
+ console.log('MCP:');
51
+ for (const mcp of manifest.mcps) {
52
+ for (const install of mcp.installs) {
53
+ const status = await resolveMcpStatus(projectRoot, mcp.id, install);
54
+ console.log(`- ${mcp.id} (${install.tool}) ${status}`);
55
+ }
56
+ }
57
+ console.log('');
58
+ console.log('Workflows:');
59
+ for (const workflow of manifest.workflows) {
60
+ for (const install of workflow.installs) {
61
+ const status = await resolveWorkflowStatus(projectRoot, workflow.id, install);
62
+ console.log(`- ${workflow.id} (${install.tool}) ${status}`);
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { SkillId, ToolId, WorkflowId } from '../types.js';
2
+ /** skill 在项目里的探测结果。 */
3
+ export interface SkillDiscoveryResult {
4
+ status: 'missing' | 'already-present';
5
+ reason?: 'already-present';
6
+ }
7
+ /** workflow 在项目里的探测结果。 */
8
+ export interface WorkflowDiscoveryResult {
9
+ status: 'missing' | 'already-present';
10
+ reason?: 'already-present';
11
+ }
12
+ /**
13
+ * skill 是否已经安装到项目级目录。
14
+ * `bundle` 模式要求所有目标目录齐全,`single` 只看首个主目录。
15
+ */
16
+ export declare function hasProjectSkillInstall(projectRoot: string, tool: ToolId, skillId: SkillId): boolean;
17
+ /** 对外暴露的 skill 可用性探测入口。 */
18
+ export declare function detectSkillAvailability(projectRoot: string, tool: ToolId, skillId: SkillId): Promise<SkillDiscoveryResult>;
19
+ /** workflow 采用“关键路径全量存在”作为已安装判定标准。 */
20
+ export declare function hasProjectWorkflowInstall(projectRoot: string, tool: ToolId, workflowId: WorkflowId): boolean;
21
+ /** 对外暴露的 workflow 可用性探测入口。 */
22
+ export declare function detectWorkflowAvailability(projectRoot: string, tool: ToolId, workflowId: WorkflowId): Promise<WorkflowDiscoveryResult>;
23
+ //# sourceMappingURL=capability-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-discovery.d.ts","sourceRoot":"","sources":["../../src/core/capability-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG9D,uBAAuB;AACvB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,GAAG,iBAAiB,CAAA;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAED,0BAA0B;AAC1B,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,GAAG,iBAAiB,CAAA;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,GACf,OAAO,CAgBT;AAED,2BAA2B;AAC3B,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,CAAC,CAW/B;AAED,sCAAsC;AACtC,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,GACrB,OAAO,CAIT;AAED,8BAA8B;AAC9B,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,uBAAuB,CAAC,CAWlC"}
@@ -0,0 +1,49 @@
1
+ import { existsSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { getSkillCatalogEntry } from '../catalog.js';
4
+ import { getRemoteSkillInstallTargets, getWorkflowTargetPaths } from './init-plan.js';
5
+ /**
6
+ * skill 是否已经安装到项目级目录。
7
+ * `bundle` 模式要求所有目标目录齐全,`single` 只看首个主目录。
8
+ */
9
+ export function hasProjectSkillInstall(projectRoot, tool, skillId) {
10
+ const skill = getSkillCatalogEntry(skillId);
11
+ const installTargets = getRemoteSkillInstallTargets(tool, skillId);
12
+ if (skill.detectionMode === 'bundle') {
13
+ return installTargets.every((target) => existsSync(path.join(projectRoot, target.targetPath, 'SKILL.md')));
14
+ }
15
+ const firstTarget = installTargets[0];
16
+ if (!firstTarget) {
17
+ return false;
18
+ }
19
+ return existsSync(path.join(projectRoot, firstTarget.targetPath, 'SKILL.md'));
20
+ }
21
+ /** 对外暴露的 skill 可用性探测入口。 */
22
+ export async function detectSkillAvailability(projectRoot, tool, skillId) {
23
+ if (hasProjectSkillInstall(projectRoot, tool, skillId)) {
24
+ return {
25
+ status: 'already-present',
26
+ reason: 'already-present',
27
+ };
28
+ }
29
+ return {
30
+ status: 'missing',
31
+ };
32
+ }
33
+ /** workflow 采用“关键路径全量存在”作为已安装判定标准。 */
34
+ export function hasProjectWorkflowInstall(projectRoot, tool, workflowId) {
35
+ return getWorkflowTargetPaths(tool, workflowId).every((targetPath) => existsSync(path.join(projectRoot, targetPath)));
36
+ }
37
+ /** 对外暴露的 workflow 可用性探测入口。 */
38
+ export async function detectWorkflowAvailability(projectRoot, tool, workflowId) {
39
+ if (hasProjectWorkflowInstall(projectRoot, tool, workflowId)) {
40
+ return {
41
+ status: 'already-present',
42
+ reason: 'already-present',
43
+ };
44
+ }
45
+ return {
46
+ status: 'missing',
47
+ };
48
+ }
49
+ //# sourceMappingURL=capability-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-discovery.js","sourceRoot":"","sources":["../../src/core/capability-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAcrF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,IAAY,EACZ,OAAgB;IAEhB,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,cAAc,GAAG,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAElE,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAClE,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;AAC/E,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAmB,EACnB,IAAY,EACZ,OAAgB;IAEhB,IAAI,sBAAsB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,iBAAiB;SAC1B,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS;KAClB,CAAA;AACH,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,IAAY,EACZ,UAAsB;IAEtB,OAAO,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CACnE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAC/C,CAAA;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAmB,EACnB,IAAY,EACZ,UAAsB;IAEtB,IAAI,yBAAyB,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,iBAAiB;SAC1B,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS;KAClB,CAAA;AACH,CAAC"}
@@ -1,9 +1,15 @@
1
1
  import type { InitSelections } from '../types.js';
2
+ /** CLI 原始入参;这里还未经过合法性校验和默认值归一化。 */
2
3
  export interface RawInitOptions {
3
4
  tools?: string;
4
5
  installMode?: string;
5
- capabilities?: string;
6
+ skills?: string;
7
+ mcp?: string;
6
8
  yes?: boolean;
7
9
  }
10
+ /**
11
+ * `init` 选择解析入口。
12
+ * 优先消费显式命令参数;只有必要时才退回交互式选择。
13
+ */
8
14
  export declare function resolveInitSelections(options: RawInitOptions): Promise<InitSelections>;
9
15
  //# sourceMappingURL=init-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-options.d.ts","sourceRoot":"","sources":["../../src/core/init-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,cAAc,EAAuB,MAAM,aAAa,CAAA;AAOpF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAmFD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CA4F5F"}
1
+ {"version":3,"file":"init-options.d.ts","sourceRoot":"","sources":["../../src/core/init-options.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAuC,MAAM,aAAa,CAAA;AAOtF,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AA+FD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CA0G5F"}