@s_s/harmonia 1.3.0 → 1.4.0

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 (172) hide show
  1. package/README.md +140 -392
  2. package/build/cli/setup.d.ts +4 -2
  3. package/build/cli/setup.js +44 -18
  4. package/build/cli/setup.js.map +1 -1
  5. package/build/core/action-registry.d.ts +36 -0
  6. package/build/core/action-registry.js +53 -0
  7. package/build/core/action-registry.js.map +1 -0
  8. package/build/core/artifacts.d.ts +66 -0
  9. package/build/core/artifacts.js +178 -0
  10. package/build/core/artifacts.js.map +1 -0
  11. package/build/core/dispatch.d.ts +6 -2
  12. package/build/core/dispatch.js +12 -7
  13. package/build/core/dispatch.js.map +1 -1
  14. package/build/core/overrides.d.ts +19 -26
  15. package/build/core/overrides.js +32 -98
  16. package/build/core/overrides.js.map +1 -1
  17. package/build/core/plugin.d.ts +86 -0
  18. package/build/core/plugin.js +332 -0
  19. package/build/core/plugin.js.map +1 -0
  20. package/build/core/registry.d.ts +4 -5
  21. package/build/core/registry.js +8 -9
  22. package/build/core/registry.js.map +1 -1
  23. package/build/core/reviews.d.ts +11 -12
  24. package/build/core/reviews.js +18 -21
  25. package/build/core/reviews.js.map +1 -1
  26. package/build/core/schema.d.ts +43 -15
  27. package/build/core/schema.js +124 -20
  28. package/build/core/schema.js.map +1 -1
  29. package/build/core/state.d.ts +26 -27
  30. package/build/core/state.js +36 -90
  31. package/build/core/state.js.map +1 -1
  32. package/build/core/steps.d.ts +13 -14
  33. package/build/core/steps.js +26 -29
  34. package/build/core/steps.js.map +1 -1
  35. package/build/core/tree-utils.d.ts +52 -0
  36. package/build/core/tree-utils.js +226 -0
  37. package/build/core/tree-utils.js.map +1 -0
  38. package/build/core/types.d.ts +389 -118
  39. package/build/core/types.js +15 -1
  40. package/build/core/types.js.map +1 -1
  41. package/build/core/workflow-engine.d.ts +68 -0
  42. package/build/core/workflow-engine.js +821 -0
  43. package/build/core/workflow-engine.js.map +1 -0
  44. package/build/core/workflow-validator.d.ts +22 -0
  45. package/build/core/workflow-validator.js +489 -0
  46. package/build/core/workflow-validator.js.map +1 -0
  47. package/build/index.js +25 -26
  48. package/build/index.js.map +1 -1
  49. package/build/setup/inject.d.ts +4 -4
  50. package/build/setup/inject.js +6 -6
  51. package/build/setup/inject.js.map +1 -1
  52. package/build/setup/templates.d.ts +9 -7
  53. package/build/setup/templates.js +68 -172
  54. package/build/setup/templates.js.map +1 -1
  55. package/build/tools/artifact-approve.d.ts +8 -0
  56. package/build/tools/{approve-doc.js → artifact-approve.js} +24 -16
  57. package/build/tools/artifact-approve.js.map +1 -0
  58. package/build/tools/artifact-schema.d.ts +12 -0
  59. package/build/tools/artifact-schema.js +148 -0
  60. package/build/tools/artifact-schema.js.map +1 -0
  61. package/build/tools/artifact-tools.d.ts +18 -0
  62. package/build/tools/artifact-tools.js +465 -0
  63. package/build/tools/artifact-tools.js.map +1 -0
  64. package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
  65. package/build/tools/{report-dispatch.js → dispatch-report.js} +106 -28
  66. package/build/tools/dispatch-report.js.map +1 -0
  67. package/build/tools/engine-helpers.d.ts +41 -0
  68. package/build/tools/engine-helpers.js +182 -0
  69. package/build/tools/engine-helpers.js.map +1 -0
  70. package/build/tools/get-project-status.d.ts +6 -4
  71. package/build/tools/get-project-status.js +265 -248
  72. package/build/tools/get-project-status.js.map +1 -1
  73. package/build/tools/get-role-prompt.d.ts +1 -1
  74. package/build/tools/get-role-prompt.js +7 -41
  75. package/build/tools/get-role-prompt.js.map +1 -1
  76. package/build/tools/iteration-start.d.ts +7 -4
  77. package/build/tools/iteration-start.js +45 -19
  78. package/build/tools/iteration-start.js.map +1 -1
  79. package/build/tools/loop-done.d.ts +11 -0
  80. package/build/tools/loop-done.js +109 -0
  81. package/build/tools/loop-done.js.map +1 -0
  82. package/build/tools/patch-start.d.ts +4 -2
  83. package/build/tools/patch-start.js +36 -11
  84. package/build/tools/patch-start.js.map +1 -1
  85. package/build/tools/project-init.d.ts +5 -5
  86. package/build/tools/project-init.js +41 -10
  87. package/build/tools/project-init.js.map +1 -1
  88. package/build/tools/role-dispatch.d.ts +55 -0
  89. package/build/tools/role-dispatch.js +508 -0
  90. package/build/tools/role-dispatch.js.map +1 -0
  91. package/build/tools/utils.d.ts +6 -0
  92. package/build/tools/utils.js +36 -0
  93. package/build/tools/utils.js.map +1 -1
  94. package/package.json +1 -1
  95. package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
  96. package/{build → workflows/dev}/hooks/content.js +27 -18
  97. package/workflows/dev/hooks/index.js +52 -0
  98. package/{build → workflows/dev}/hooks/openclaw.js +31 -20
  99. package/{build → workflows/dev}/hooks/opencode.js +31 -20
  100. package/workflows/dev/roles/architect.md +68 -28
  101. package/workflows/dev/roles/coordinator.md +103 -0
  102. package/workflows/dev/roles/developer.md +5 -5
  103. package/workflows/dev/roles/tester.md +19 -19
  104. package/workflows/dev/schemas/api-contract.json +42 -0
  105. package/workflows/dev/schemas/api-design.json +30 -13
  106. package/workflows/dev/schemas/data-model.json +20 -7
  107. package/workflows/dev/schemas/prd.completeness-check.json +6 -5
  108. package/workflows/dev/schemas/prd.draft.json +13 -5
  109. package/workflows/dev/schemas/prd.final.json +34 -11
  110. package/workflows/dev/schemas/prd.json +29 -11
  111. package/workflows/dev/schemas/prd.requirements.json +6 -5
  112. package/workflows/dev/schemas/prototype.json +6 -2
  113. package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
  114. package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
  115. package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
  116. package/workflows/dev/schemas/task-breakdown.final.json +8 -3
  117. package/workflows/dev/schemas/task-breakdown.json +8 -3
  118. package/workflows/dev/schemas/tech-design.analysis.json +6 -5
  119. package/workflows/dev/schemas/tech-design.draft.json +14 -5
  120. package/workflows/dev/schemas/tech-design.final.json +39 -13
  121. package/workflows/dev/schemas/tech-design.json +34 -13
  122. package/workflows/dev/schemas/tech-design.research.json +21 -0
  123. package/workflows/dev/schemas/test-plan.json +17 -7
  124. package/workflows/dev/schemas/test-report.json +26 -9
  125. package/workflows/dev/schemas/user-stories.json +7 -3
  126. package/workflows/dev/tools/index.js +23 -0
  127. package/workflows/dev/workflow.json +234 -101
  128. package/build/core/docs.d.ts +0 -36
  129. package/build/core/docs.js +0 -96
  130. package/build/core/docs.js.map +0 -1
  131. package/build/core/workflow.d.ts +0 -33
  132. package/build/core/workflow.js +0 -140
  133. package/build/core/workflow.js.map +0 -1
  134. package/build/hooks/claude-code.d.ts +0 -20
  135. package/build/hooks/claude-code.js.map +0 -1
  136. package/build/hooks/content.d.ts +0 -43
  137. package/build/hooks/content.js.map +0 -1
  138. package/build/hooks/install.d.ts +0 -40
  139. package/build/hooks/install.js +0 -63
  140. package/build/hooks/install.js.map +0 -1
  141. package/build/hooks/openclaw.d.ts +0 -24
  142. package/build/hooks/openclaw.js.map +0 -1
  143. package/build/hooks/opencode.d.ts +0 -29
  144. package/build/hooks/opencode.js.map +0 -1
  145. package/build/tools/approve-doc.d.ts +0 -6
  146. package/build/tools/approve-doc.js.map +0 -1
  147. package/build/tools/dispatch-role.d.ts +0 -16
  148. package/build/tools/dispatch-role.js +0 -266
  149. package/build/tools/dispatch-role.js.map +0 -1
  150. package/build/tools/doc-tools.d.ts +0 -16
  151. package/build/tools/doc-tools.js +0 -425
  152. package/build/tools/doc-tools.js.map +0 -1
  153. package/build/tools/override-tools.d.ts +0 -6
  154. package/build/tools/override-tools.js +0 -129
  155. package/build/tools/override-tools.js.map +0 -1
  156. package/build/tools/report-dispatch.js.map +0 -1
  157. package/build/tools/set-scale.d.ts +0 -6
  158. package/build/tools/set-scale.js +0 -95
  159. package/build/tools/set-scale.js.map +0 -1
  160. package/build/tools/setup-project.d.ts +0 -8
  161. package/build/tools/setup-project.js +0 -116
  162. package/build/tools/setup-project.js.map +0 -1
  163. package/build/tools/update-phase.d.ts +0 -12
  164. package/build/tools/update-phase.js +0 -148
  165. package/build/tools/update-phase.js.map +0 -1
  166. package/workflows/dev/roles/pm.md +0 -99
  167. package/workflows/dev/schemas/deploy.json +0 -20
  168. package/workflows/dev/schemas/fsd.json +0 -25
  169. package/workflows/dev/schemas/project-plan.json +0 -20
  170. package/workflows/dev/schemas/retrospective.json +0 -20
  171. package/workflows/dev/schemas/risk-assessment.json +0 -15
  172. package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
@@ -1,425 +0,0 @@
1
- /**
2
- * MCP Tools: doc_write / doc_read / doc_list
3
- * Read and write project documents under <data_dir>/<project_name>/docs/
4
- *
5
- * doc_write validates content against document schemas and checks review
6
- * configuration. If validation fails, the write is rejected with specific
7
- * error details. If review is required, the document is submitted for
8
- * user approval.
9
- *
10
- * Sequential mode (P3): When a document has `steps` defined in workflow.json
11
- * and the project scale is >= medium, doc_write requires a `step` parameter.
12
- * Each step is validated independently, and the final step automatically
13
- * writes the formal document and triggers the review flow.
14
- */
15
- import { z } from 'zod';
16
- import { writeDoc, readDoc, listDocs, writeStepArtifact } from '../core/docs.js';
17
- import { readState } from '../core/state.js';
18
- import { loadWorkflow } from '../core/workflow.js';
19
- import { getMergedOverrides, resolveDocReview } from '../core/overrides.js';
20
- import { submitForReview } from '../core/reviews.js';
21
- import { loadDocSchema, validateDoc, formatValidationErrors } from '../core/schema.js';
22
- import { getDocStepState, getCompletedStepIds, recordStepCompletion, markFinalized } from '../core/steps.js';
23
- import { resolveActive, isError } from './utils.js';
24
- import { getProject, resolveContextDir } from '../core/registry.js';
25
- /** Scales that activate sequential mode (medium and above) */
26
- const SEQUENTIAL_SCALES = new Set(['medium', 'large']);
27
- /**
28
- * Check if sequential mode is active for a given doc definition and scale.
29
- * Returns false when scale is null (not yet set).
30
- */
31
- function isSequentialActive(docDef, scale) {
32
- return scale !== null && !!docDef.steps?.length && SEQUENTIAL_SCALES.has(scale);
33
- }
34
- export function registerDocTools(server, builtinDir, customDir) {
35
- server.tool('doc_write', 'Write or update a project document. For documents with sequential steps (PRD, tech-design, task-breakdown) at medium/large scale, you MUST specify the step parameter. Automatically checks review configuration — if review is required, the document is submitted for user approval.', {
36
- project_name: z.string().describe('Project name'),
37
- doc_id: z
38
- .string()
39
- .describe('Document ID (e.g. prd, user-stories, fsd, prototype, tech-design, task-breakdown, etc.)'),
40
- content: z.string().describe('Document content (markdown, HTML, or JSON depending on doc type and step)'),
41
- step: z
42
- .string()
43
- .optional()
44
- .describe('Sequential step ID (required for docs with steps at medium/large scale). Use project_status to see available steps.'),
45
- }, async ({ project_name, doc_id, content, step }) => {
46
- const ctx = await resolveActive(project_name);
47
- if (isError(ctx))
48
- return ctx;
49
- // Load workflow to get doc definition (format, review defaults)
50
- const state = await readState(project_name, ctx.number, ctx.dir);
51
- const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
52
- const docDef = wf.definition.docs[doc_id];
53
- const isHtml = docDef?.format === 'html';
54
- // Guard: doc_id must be defined in workflow
55
- if (!docDef) {
56
- const validIds = Object.keys(wf.definition.docs)
57
- .filter((id) => !wf.definition.docs[id].external)
58
- .join(', ');
59
- return {
60
- content: [
61
- {
62
- type: 'text',
63
- text: `文档类型 "${doc_id}" 未在工作流中定义。可用的文档类型: ${validIds}`,
64
- },
65
- ],
66
- isError: true,
67
- };
68
- }
69
- // Guard: reject external doc types (should be produced outside doc_write)
70
- if (docDef.external) {
71
- return {
72
- content: [
73
- {
74
- type: 'text',
75
- text: `文档 "${doc_id}" 是外部产出类型,不应通过 doc_write 写入。`,
76
- },
77
- ],
78
- isError: true,
79
- };
80
- }
81
- // Guard: empty content
82
- if (!content.trim()) {
83
- return {
84
- content: [
85
- {
86
- type: 'text',
87
- text: '文档内容为空,请提供实际内容后重新提交。',
88
- },
89
- ],
90
- isError: true,
91
- };
92
- }
93
- // ─── Sequential Mode ───
94
- if (isSequentialActive(docDef, state.scale)) {
95
- return handleSequentialWrite(builtinDir, customDir, state.workflow, project_name, ctx.number, doc_id, content, step, docDef, state.scale, ctx.dir);
96
- }
97
- // ─── Normal Mode (no steps or small scale) ───
98
- // If step was passed but sequential is not active, warn but proceed
99
- if (step) {
100
- // Ignore step parameter for non-sequential docs
101
- }
102
- // Schema validation — reject write if content doesn't meet requirements
103
- const schema = await loadDocSchema(builtinDir, customDir, state.workflow, doc_id);
104
- if (schema) {
105
- const result = validateDoc(content, schema, state.scale, isHtml);
106
- if (!result.valid) {
107
- return {
108
- content: [
109
- {
110
- type: 'text',
111
- text: formatValidationErrors(result.errors),
112
- },
113
- ],
114
- isError: true,
115
- };
116
- }
117
- }
118
- // Write the document with correct extension
119
- const filePath = await writeDoc(project_name, ctx.number, doc_id, content, docDef, ctx.dir);
120
- // Check if review is required
121
- const overrides = await getMergedOverrides(project_name);
122
- const needsReview = docDef ? resolveDocReview(doc_id, docDef, overrides) : false;
123
- if (needsReview) {
124
- await submitForReview(project_name, ctx.number, doc_id, ctx.dir);
125
- const docName = docDef?.name ?? doc_id;
126
- return {
127
- content: [
128
- {
129
- type: 'text',
130
- text: [
131
- `Document "${doc_id}" (${docName}) written to ${filePath}`,
132
- ``,
133
- `** REVIEW REQUIRED **`,
134
- `This document requires user approval before the workflow can proceed.`,
135
- `Please present the document content to the user and ask for their confirmation.`,
136
- `After user approval, call doc_approve with project_name="${project_name}" and doc_id="${doc_id}".`,
137
- `If the user requests changes, revise the document and call doc_write again.`,
138
- ].join('\n'),
139
- },
140
- ],
141
- };
142
- }
143
- return {
144
- content: [
145
- {
146
- type: 'text',
147
- text: `Document "${doc_id}" written to ${filePath}`,
148
- },
149
- ],
150
- };
151
- });
152
- server.tool('doc_read', 'Read a project document. By default reads from the active context. Use the optional `context` parameter (e.g. "iter-1", "patch-2") to read from a different context.', {
153
- project_name: z.string().describe('Project name'),
154
- doc_id: z.string().describe('Document ID to read'),
155
- context: z
156
- .string()
157
- .optional()
158
- .describe('Context to read from (e.g. "iter-1", "patch-2"). Defaults to active context.'),
159
- }, async ({ project_name, doc_id, context }) => {
160
- try {
161
- let contextNumber;
162
- let contextDir;
163
- if (context) {
164
- // Cross-context read: resolve the specified context
165
- const entry = await getProject(project_name);
166
- if (!entry) {
167
- return {
168
- content: [{ type: 'text', text: `项目 "${project_name}" 未注册。` }],
169
- isError: true,
170
- };
171
- }
172
- const resolved = resolveContextDir(project_name, context);
173
- if (!resolved) {
174
- return {
175
- content: [
176
- {
177
- type: 'text',
178
- text: `无法解析上下文 "${context}"。格式示例: iter-1, patch-2`,
179
- },
180
- ],
181
- isError: true,
182
- };
183
- }
184
- contextNumber = resolved.number;
185
- contextDir = resolved.dir;
186
- }
187
- else {
188
- // Default: active context
189
- const ctx = await resolveActive(project_name);
190
- if (isError(ctx))
191
- return ctx;
192
- contextNumber = ctx.number;
193
- contextDir = ctx.dir;
194
- }
195
- const docContent = await readDoc(project_name, contextNumber, doc_id, contextDir);
196
- return {
197
- content: [
198
- {
199
- type: 'text',
200
- text: docContent,
201
- },
202
- ],
203
- };
204
- }
205
- catch {
206
- return {
207
- content: [
208
- {
209
- type: 'text',
210
- text: `Document "${doc_id}" not found. Use doc_list to see available documents.`,
211
- },
212
- ],
213
- isError: true,
214
- };
215
- }
216
- });
217
- server.tool('doc_list', 'List all project documents. By default lists from the active context. Use the optional `context` parameter (e.g. "iter-1", "patch-2") to list from a different context.', {
218
- project_name: z.string().describe('Project name'),
219
- context: z
220
- .string()
221
- .optional()
222
- .describe('Context to list from (e.g. "iter-1", "patch-2"). Defaults to active context.'),
223
- }, async ({ project_name, context }) => {
224
- let contextNumber;
225
- let contextDir;
226
- let contextLabel;
227
- if (context) {
228
- const entry = await getProject(project_name);
229
- if (!entry) {
230
- return {
231
- content: [{ type: 'text', text: `项目 "${project_name}" 未注册。` }],
232
- isError: true,
233
- };
234
- }
235
- const resolved = resolveContextDir(project_name, context);
236
- if (!resolved) {
237
- return {
238
- content: [
239
- { type: 'text', text: `无法解析上下文 "${context}"。格式示例: iter-1, patch-2` },
240
- ],
241
- isError: true,
242
- };
243
- }
244
- contextNumber = resolved.number;
245
- contextDir = resolved.dir;
246
- contextLabel = context;
247
- }
248
- else {
249
- const ctx = await resolveActive(project_name);
250
- if (isError(ctx))
251
- return ctx;
252
- contextNumber = ctx.number;
253
- contextDir = ctx.dir;
254
- contextLabel = ctx.activeContext;
255
- }
256
- const docs = await listDocs(project_name, contextNumber, contextDir);
257
- return {
258
- content: [
259
- {
260
- type: 'text',
261
- text: docs.length > 0
262
- ? `Documents (${contextLabel}):\n${docs.map((d) => `- ${d}`).join('\n')}`
263
- : `No documents found for ${contextLabel}.`,
264
- },
265
- ],
266
- };
267
- });
268
- }
269
- async function handleSequentialWrite(builtinDir, customDir, workflowName, projectName, iteration, docId, content, step, docDef, scale, contextDir) {
270
- const steps = docDef.steps;
271
- const stepIds = steps.map((s) => s.id);
272
- const stepNames = steps.map((s) => `${s.id} (${s.name})`).join(', ');
273
- // Guard: step parameter is required in sequential mode
274
- if (!step) {
275
- return {
276
- content: [
277
- {
278
- type: 'text',
279
- text: [
280
- `文档 "${docId}" 在 ${scale} 规模项目中需要分步写入。`,
281
- `请指定 step 参数。可用的步骤: ${stepNames}`,
282
- ``,
283
- `步骤说明:`,
284
- ...steps.map((s, i) => ` ${i + 1}. ${s.id} — ${s.description}`),
285
- ].join('\n'),
286
- },
287
- ],
288
- isError: true,
289
- };
290
- }
291
- // Guard: step must be valid
292
- const stepDef = steps.find((s) => s.id === step);
293
- if (!stepDef) {
294
- return {
295
- content: [
296
- {
297
- type: 'text',
298
- text: `未知的步骤 "${step}"。可用的步骤: ${stepNames}`,
299
- },
300
- ],
301
- isError: true,
302
- };
303
- }
304
- const stepIndex = stepIds.indexOf(step);
305
- const stepState = await getDocStepState(projectName, iteration, docId, contextDir);
306
- const completedIds = getCompletedStepIds(stepState);
307
- // Guard: prerequisite steps must be completed (hard enforcement)
308
- for (let i = 0; i < stepIndex; i++) {
309
- if (!completedIds.has(stepIds[i])) {
310
- const missingStep = steps[i];
311
- return {
312
- content: [
313
- {
314
- type: 'text',
315
- text: `无法写入步骤 "${step}":前置步骤 "${missingStep.id}" (${missingStep.name}) 尚未完成。请先完成该步骤。`,
316
- },
317
- ],
318
- isError: true,
319
- };
320
- }
321
- }
322
- // Step schema validation
323
- const isJson = stepDef.format === 'json';
324
- const stepSchemaId = `${docId}.${step}`;
325
- const stepSchema = await loadDocSchema(builtinDir, customDir, workflowName, stepSchemaId);
326
- if (stepSchema) {
327
- const result = validateDoc(content, stepSchema, scale, false, isJson);
328
- if (!result.valid) {
329
- return {
330
- content: [
331
- {
332
- type: 'text',
333
- text: formatValidationErrors(result.errors),
334
- },
335
- ],
336
- isError: true,
337
- };
338
- }
339
- }
340
- // Write the step artifact
341
- const artifactPath = await writeStepArtifact(projectName, iteration, docId, step, content, stepDef.format, contextDir);
342
- // Record step completion (handles rollback if overwriting)
343
- await recordStepCompletion(projectName, iteration, docId, step, artifactPath, stepIds, contextDir);
344
- const isLastStep = stepIndex === steps.length - 1;
345
- if (isLastStep) {
346
- // Auto-merge: validate against final doc schema, write formal doc, trigger review
347
- return handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef, contextDir);
348
- }
349
- // Not the last step — return progress info
350
- const nextStep = steps[stepIndex + 1];
351
- return {
352
- content: [
353
- {
354
- type: 'text',
355
- text: [
356
- `步骤 "${step}" (${stepDef.name}) 完成,产物已写入 ${artifactPath}`,
357
- ``,
358
- `下一步: ${nextStep.id} — ${nextStep.description}`,
359
- `请调用 doc_write(project_name="${projectName}", doc_id="${docId}", step="${nextStep.id}", content=...)`,
360
- ].join('\n'),
361
- },
362
- ],
363
- };
364
- }
365
- async function handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef, contextDir) {
366
- const isHtml = docDef.format === 'html';
367
- // Validate against the final document schema (e.g. prd.json)
368
- const finalSchema = await loadDocSchema(builtinDir, customDir, workflowName, docId);
369
- if (finalSchema) {
370
- const isJson = stepDef.format === 'json';
371
- const result = validateDoc(content, finalSchema, scale, isHtml, isJson);
372
- if (!result.valid) {
373
- return {
374
- content: [
375
- {
376
- type: 'text',
377
- text: [
378
- '最终文档校验失败:',
379
- formatValidationErrors(result.errors),
380
- '',
381
- `请修正后重新提交步骤 "${stepDef.id}"。`,
382
- ].join('\n'),
383
- },
384
- ],
385
- isError: true,
386
- };
387
- }
388
- }
389
- // Write the formal document
390
- const filePath = await writeDoc(projectName, iteration, docId, content, docDef, contextDir);
391
- // Mark as finalized
392
- await markFinalized(projectName, iteration, docId, contextDir);
393
- // Check if review is required
394
- const overrides = await getMergedOverrides(projectName);
395
- const needsReview = resolveDocReview(docId, docDef, overrides);
396
- if (needsReview) {
397
- await submitForReview(projectName, iteration, docId, contextDir);
398
- const docName = docDef.name ?? docId;
399
- return {
400
- content: [
401
- {
402
- type: 'text',
403
- text: [
404
- `所有步骤完成!文档 "${docId}" (${docName}) 已写入 ${filePath}`,
405
- ``,
406
- `** REVIEW REQUIRED **`,
407
- `This document requires user approval before the workflow can proceed.`,
408
- `Please present the document content to the user and ask for their confirmation.`,
409
- `After user approval, call doc_approve with project_name="${projectName}" and doc_id="${docId}".`,
410
- `If the user requests changes, revise the document and call doc_write again with the appropriate step.`,
411
- ].join('\n'),
412
- },
413
- ],
414
- };
415
- }
416
- return {
417
- content: [
418
- {
419
- type: 'text',
420
- text: `所有步骤完成!文档 "${docId}" 已写入 ${filePath}`,
421
- },
422
- ],
423
- };
424
- }
425
- //# sourceMappingURL=doc-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-tools.js","sourceRoot":"","sources":["../../src/tools/doc-tools.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * MCP Tools: guard_set / review_set_rule / guard_get
3
- * Manage capability overrides and review settings.
4
- */
5
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
- export declare function registerOverrideTools(server: McpServer): void;
@@ -1,129 +0,0 @@
1
- /**
2
- * MCP Tools: guard_set / review_set_rule / guard_get
3
- * Manage capability overrides and review settings.
4
- */
5
- import { z } from 'zod';
6
- import { setCapabilityOverride, setReviewOverride, getMergedOverrides, readGlobalOverrides, readProjectOverrides, } from '../core/overrides.js';
7
- export function registerOverrideTools(server) {
8
- server.tool('guard_set', 'Configure a role capability to use an external skill or MCP tool instead of the built-in behavior. Settings are saved to the override config file.', {
9
- scope: z.enum(['global', 'project']).describe('Override scope: global (all projects) or project-specific'),
10
- project_name: z.string().optional().describe("Project name (required when scope is 'project')"),
11
- role_id: z.string().describe('Role ID (e.g. pm, architect, developer, tester)'),
12
- capability_id: z.string().describe('Capability ID (e.g. write-prd, write-tech-design)'),
13
- type: z.enum(['skill', 'mcp']).describe('Tool source type'),
14
- tool: z.string().describe('Tool name'),
15
- server_name: z.string().optional().describe("MCP server name (required when type is 'mcp')"),
16
- params: z
17
- .record(z.string(), z.unknown())
18
- .optional()
19
- .describe('Static parameters to always pass when calling the tool'),
20
- notes: z.string().optional().describe('Additional notes for prompt generation (rarely needed)'),
21
- }, async ({ scope, project_name, role_id, capability_id, type, tool, server_name, params, notes }) => {
22
- if (scope === 'project' && !project_name) {
23
- return {
24
- content: [
25
- {
26
- type: 'text',
27
- text: "Error: project_name is required when scope is 'project'.",
28
- },
29
- ],
30
- isError: true,
31
- };
32
- }
33
- const override = { type, tool };
34
- if (server_name)
35
- override.server = server_name;
36
- if (params)
37
- override.params = params;
38
- if (notes)
39
- override.notes = notes;
40
- await setCapabilityOverride(scope, project_name ?? null, role_id, capability_id, override);
41
- return {
42
- content: [
43
- {
44
- type: 'text',
45
- text: `Override set: ${role_id}.${capability_id} → ${type === 'mcp' ? `${server_name}/${tool}` : tool} (${scope})`,
46
- },
47
- ],
48
- };
49
- });
50
- server.tool('review_set_rule', 'Enable or disable review requirement for a specific document type.', {
51
- scope: z.enum(['global', 'project']).describe('Override scope: global or project-specific'),
52
- project_name: z.string().optional().describe("Project name (required when scope is 'project')"),
53
- doc_id: z.string().describe('Document ID (e.g. prd, prototype)'),
54
- enabled: z.boolean().describe('true = require review, false = skip review'),
55
- }, async ({ scope, project_name, doc_id, enabled }) => {
56
- if (scope === 'project' && !project_name) {
57
- return {
58
- content: [
59
- {
60
- type: 'text',
61
- text: "Error: project_name is required when scope is 'project'.",
62
- },
63
- ],
64
- isError: true,
65
- };
66
- }
67
- await setReviewOverride(scope, project_name ?? null, doc_id, enabled);
68
- return {
69
- content: [
70
- {
71
- type: 'text',
72
- text: `Review override set: ${doc_id} → ${enabled ? 'required' : 'skipped'} (${scope})`,
73
- },
74
- ],
75
- };
76
- });
77
- server.tool('guard_get', 'Get the current override configuration. Shows the merged result (project + global) or a specific scope.', {
78
- project_name: z
79
- .string()
80
- .optional()
81
- .describe('Project name — if provided, shows merged config for this project'),
82
- scope: z
83
- .enum(['merged', 'global', 'project'])
84
- .default('merged')
85
- .describe('Which config to show: merged (default), global only, or project only'),
86
- }, async ({ project_name, scope }) => {
87
- let config;
88
- let label;
89
- if (scope === 'global') {
90
- config = await readGlobalOverrides();
91
- label = 'Global overrides';
92
- }
93
- else if (scope === 'project') {
94
- if (!project_name) {
95
- return {
96
- content: [
97
- {
98
- type: 'text',
99
- text: "Error: project_name is required when scope is 'project'.",
100
- },
101
- ],
102
- isError: true,
103
- };
104
- }
105
- config = await readProjectOverrides(project_name);
106
- label = `Project overrides for "${project_name}"`;
107
- }
108
- else {
109
- if (!project_name) {
110
- config = await readGlobalOverrides();
111
- label = 'Global overrides (no project specified)';
112
- }
113
- else {
114
- config = await getMergedOverrides(project_name);
115
- label = `Merged overrides for "${project_name}"`;
116
- }
117
- }
118
- const isEmpty = !config.review && (!config.roles || Object.keys(config.roles).length === 0);
119
- return {
120
- content: [
121
- {
122
- type: 'text',
123
- text: isEmpty ? `${label}: (none configured)` : `${label}:\n${JSON.stringify(config, null, 2)}`,
124
- },
125
- ],
126
- };
127
- });
128
- }
129
- //# sourceMappingURL=override-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"override-tools.js","sourceRoot":"","sources":["../../src/tools/override-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"report-dispatch.js","sourceRoot":"","sources":["../../src/tools/report-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACH,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGpD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,UAAkB,EAAE,SAAiB;IAC3F,MAAM,CAAC,IAAI,CACP,iBAAiB,EACjB,iNAAiN,EACjN;QACI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACzE,MAAM,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,QAAQ,CAAC,2FAA2F,CAAC;QAC1G,gBAAgB,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACL,gHAAgH,CACnH;QACL,UAAU,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;aACtD,QAAQ,EAAE;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QACvF,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YAE7B,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,aAAa,WAAW,2BAA2B,YAAY,IAAI;yBAC5E;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,IAAI,SAAS,CAAC;YAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,oDAAoD;YACpD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5C,CAAC,CAAC,aAAa,WAAW,YAAY,QAAQ,CAAC,MAAM,YAAY,eAAe,GAAG;oBACnF,CAAC,CAAC,aAAa,WAAW,WAAW,QAAQ,CAAC,MAAM,aAAa,eAAe,GAAG,CAAC;gBACxF,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,MAAM;yBACf;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,kEAAkE;YAClE,IAAI,OAAO,GAAyB,IAAI,CAAC;YACzC,IAAI,gBAAgB,EAAE,CAAC;gBACnB,OAAO,GAAG,MAAM,sBAAsB,CAClC,YAAY,EACZ,GAAG,CAAC,MAAM,EACV,QAAQ,EACR,gBAAgB,EAChB,UAAmC,EACnC,KAAK,EACL,GAAG,CAAC,GAAG,CACV,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,YAAY,gBAAgB,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnG,CAAC;YAED,4BAA4B;YAC5B,IACI,eAAe,KAAK,WAAW;gBAC/B,eAAe,KAAK,QAAQ;gBAC5B,eAAe,KAAK,WAAW,EACjC,CAAC;gBACC,0DAA0D;gBAC1D,MAAM,cAAc,CAChB,YAAY,EACZ,GAAG,CAAC,MAAM,EACV,WAAW,EACX;oBACI,MAAM,EAAE,eAAe;oBACvB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5B,EACD,GAAG,CAAC,GAAG,CACV,CAAC;gBAEF,sDAAsD;gBACtD,MAAM,SAAS,GAAG,OAAO,EAAE,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC;gBACpD,IAAI,SAAS,EAAE,CAAC;oBACZ,MAAM,gBAAgB,GAAG,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3E,MAAM,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChG,OAAO,CAAC,IAAI,CAAC,WAAW,SAAS,MAAM,gBAAgB,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,YAAY,WAAW,MAAM,eAAe,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACJ,sDAAsD;gBACtD,MAAM,cAAc,CAChB,YAAY,EACZ,GAAG,CAAC,MAAM,EACV,WAAW,EACX;oBACI,MAAM,EAAE,SAAS;oBACjB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5B,EACD,GAAG,CAAC,GAAG,CACV,CAAC;gBAEF,yBAAyB;gBACzB,MAAM,SAAS,GAAG,OAAO,EAAE,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC;gBACpD,IAAI,SAAS,EAAE,CAAC;oBACZ,MAAM,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5F,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,YAAY,WAAW,YAAY,CAAC,CAAC;YACtD,CAAC;YAED,wDAAwD;YACxD,IAAI,eAAe,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzE,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAErE,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzC,IAAI,MAAM,EAAE,QAAQ;wBAAE,OAAO,KAAK,CAAC,CAAC,4BAA4B;oBAChE,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;gBAEH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,iBAAiB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YAED,iBAAiB;YACjB,MAAM,YAAY,GACd,eAAe,KAAK,SAAS;gBACzB,CAAC,CAAC,2EAA2E,WAAW,yCAAyC;gBACjI,CAAC,CAAC,iFAAiF,CAAC;YAE5F,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,WAAW,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE;qBACpF;iBACJ;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACrE;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACjC,WAAmB,EACnB,SAAiB,EACjB,QAAwB,EACxB,cAAsB,EACtB,SAAqB,EACrB,KAAc,EACd,UAAmB;IAEnB,6EAA6E;IAC7E,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,MAAM,aAAa,CACtB,WAAW,EACX,SAAS,EACT,QAAQ,CAAC,EAAE,EACX;gBACI,cAAc;gBACd,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,EAAE,QAAQ;aACnB,EACD,UAAU,CACb,CAAC;QACN,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAC9C,WAAW,EACX,SAAS,EACT,QAAQ,CAAC,IAAI,EACb,cAAc,EACd,UAAU,CACb,CAAC;IACF,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,MAAM,aAAa,CACtB,WAAW,EACX,SAAS,EACT,eAAe,CAAC,EAAE,EAClB;YACI,MAAM,EAAE,QAAQ;YAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,EACD,UAAU,CACb,CAAC;IACN,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACzG,OAAO,MAAM,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,CAAC;AACnG,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * MCP Tool: project_set_scale
3
- * Set the project scale after PRD approval. Scale is immutable once set.
4
- */
5
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
- export declare function registerSetScale(server: McpServer, builtinDir: string, customDir: string): void;