@s_s/harmonia 1.0.0 → 1.1.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 (114) hide show
  1. package/README.md +396 -2
  2. package/build/cli/setup.d.ts +21 -0
  3. package/build/cli/setup.js +72 -0
  4. package/build/cli/setup.js.map +1 -0
  5. package/build/core/dispatch.d.ts +10 -0
  6. package/build/core/dispatch.js +21 -0
  7. package/build/core/dispatch.js.map +1 -1
  8. package/build/core/docs.d.ts +13 -0
  9. package/build/core/docs.js +32 -0
  10. package/build/core/docs.js.map +1 -1
  11. package/build/core/registry.d.ts +1 -1
  12. package/build/core/registry.js +5 -16
  13. package/build/core/registry.js.map +1 -1
  14. package/build/core/schema.d.ts +38 -0
  15. package/build/core/schema.js +187 -0
  16. package/build/core/schema.js.map +1 -0
  17. package/build/core/state.d.ts +11 -1
  18. package/build/core/state.js +23 -2
  19. package/build/core/state.js.map +1 -1
  20. package/build/core/steps.d.ts +34 -0
  21. package/build/core/steps.js +113 -0
  22. package/build/core/steps.js.map +1 -0
  23. package/build/core/types.d.ts +81 -4
  24. package/build/core/workflow.d.ts +26 -6
  25. package/build/core/workflow.js +88 -11
  26. package/build/core/workflow.js.map +1 -1
  27. package/build/hooks/claude-code.d.ts +20 -0
  28. package/build/hooks/claude-code.js +218 -0
  29. package/build/hooks/claude-code.js.map +1 -0
  30. package/build/hooks/content.d.ts +43 -0
  31. package/build/hooks/content.js +109 -0
  32. package/build/hooks/content.js.map +1 -0
  33. package/build/hooks/install.d.ts +40 -0
  34. package/build/hooks/install.js +63 -0
  35. package/build/hooks/install.js.map +1 -0
  36. package/build/hooks/openclaw.d.ts +24 -0
  37. package/build/hooks/openclaw.js +219 -0
  38. package/build/hooks/openclaw.js.map +1 -0
  39. package/build/hooks/opencode.d.ts +29 -0
  40. package/build/hooks/opencode.js +226 -0
  41. package/build/hooks/opencode.js.map +1 -0
  42. package/build/index.d.ts +4 -7
  43. package/build/index.js +80 -42
  44. package/build/index.js.map +1 -1
  45. package/build/setup/inject.d.ts +13 -17
  46. package/build/setup/inject.js +34 -92
  47. package/build/setup/inject.js.map +1 -1
  48. package/build/setup/templates.d.ts +12 -16
  49. package/build/setup/templates.js +52 -69
  50. package/build/setup/templates.js.map +1 -1
  51. package/build/tools/approve-doc.d.ts +1 -1
  52. package/build/tools/approve-doc.js +4 -4
  53. package/build/tools/approve-doc.js.map +1 -1
  54. package/build/tools/dispatch-role.d.ts +2 -2
  55. package/build/tools/dispatch-role.js +41 -11
  56. package/build/tools/dispatch-role.js.map +1 -1
  57. package/build/tools/doc-tools.d.ts +11 -3
  58. package/build/tools/doc-tools.js +257 -13
  59. package/build/tools/doc-tools.js.map +1 -1
  60. package/build/tools/get-project-status.d.ts +4 -2
  61. package/build/tools/get-project-status.js +165 -50
  62. package/build/tools/get-project-status.js.map +1 -1
  63. package/build/tools/get-role-prompt.d.ts +2 -2
  64. package/build/tools/get-role-prompt.js +4 -4
  65. package/build/tools/get-role-prompt.js.map +1 -1
  66. package/build/tools/override-tools.d.ts +1 -1
  67. package/build/tools/override-tools.js +4 -4
  68. package/build/tools/override-tools.js.map +1 -1
  69. package/build/tools/project-init.d.ts +5 -1
  70. package/build/tools/project-init.js +92 -32
  71. package/build/tools/project-init.js.map +1 -1
  72. package/build/tools/report-dispatch.d.ts +6 -3
  73. package/build/tools/report-dispatch.js +45 -8
  74. package/build/tools/report-dispatch.js.map +1 -1
  75. package/build/tools/set-scale.d.ts +6 -0
  76. package/build/tools/set-scale.js +92 -0
  77. package/build/tools/set-scale.js.map +1 -0
  78. package/build/tools/setup-project.d.ts +1 -1
  79. package/build/tools/setup-project.js +33 -5
  80. package/build/tools/setup-project.js.map +1 -1
  81. package/build/tools/update-phase.d.ts +8 -3
  82. package/build/tools/update-phase.js +85 -20
  83. package/build/tools/update-phase.js.map +1 -1
  84. package/package.json +2 -1
  85. package/workflows/dev/roles/architect.md +1 -1
  86. package/workflows/dev/roles/pm.md +5 -5
  87. package/workflows/dev/roles/tester.md +1 -1
  88. package/workflows/dev/schemas/api-design.json +25 -0
  89. package/workflows/dev/schemas/data-model.json +20 -0
  90. package/workflows/dev/schemas/deploy.json +20 -0
  91. package/workflows/dev/schemas/fsd.json +25 -0
  92. package/workflows/dev/schemas/prd.completeness-check.json +24 -0
  93. package/workflows/dev/schemas/prd.draft.json +15 -0
  94. package/workflows/dev/schemas/prd.final.json +30 -0
  95. package/workflows/dev/schemas/prd.json +30 -0
  96. package/workflows/dev/schemas/prd.requirements.json +25 -0
  97. package/workflows/dev/schemas/project-plan.json +20 -0
  98. package/workflows/dev/schemas/prototype.json +4 -0
  99. package/workflows/dev/schemas/retrospective.json +20 -0
  100. package/workflows/dev/schemas/risk-assessment.json +15 -0
  101. package/workflows/dev/schemas/task-breakdown.coarse.json +15 -0
  102. package/workflows/dev/schemas/task-breakdown.dependencies.json +20 -0
  103. package/workflows/dev/schemas/task-breakdown.detailed.json +10 -0
  104. package/workflows/dev/schemas/task-breakdown.final.json +10 -0
  105. package/workflows/dev/schemas/task-breakdown.json +10 -0
  106. package/workflows/dev/schemas/tech-design.analysis.json +25 -0
  107. package/workflows/dev/schemas/tech-design.api-contract.json +20 -0
  108. package/workflows/dev/schemas/tech-design.draft.json +15 -0
  109. package/workflows/dev/schemas/tech-design.final.json +30 -0
  110. package/workflows/dev/schemas/tech-design.json +30 -0
  111. package/workflows/dev/schemas/test-plan.json +20 -0
  112. package/workflows/dev/schemas/test-report.json +25 -0
  113. package/workflows/dev/schemas/user-stories.json +10 -0
  114. package/workflows/dev/workflow.json +85 -5
@@ -1,21 +1,17 @@
1
1
  /**
2
- * PM guidance prompt template for OpenCode.
2
+ * PM guidance prompt template.
3
3
  *
4
- * This template is injected into the project's AGENTS.md to guide the host
5
- * agent to act as the PM role in a Harmonia-managed project.
6
- */
7
- export interface PromptTemplateParams {
8
- projectName: string;
9
- projectDir: string;
10
- workflow: string;
11
- scale: string;
12
- }
13
- /**
14
- * Generate the PM guidance prompt for OpenCode AGENTS.md injection.
4
+ * This template is injected into the project's agent config file to guide the
5
+ * host agent to act as the PM role in a Harmonia-managed project.
6
+ * The target file (AGENTS.md / CLAUDE.md) is determined by @s_s/agent-kit.
7
+ *
8
+ * The prompt is project-agnostic — no project name, directory, or scale.
9
+ * PM discovers project info at runtime via project_status.
15
10
  */
16
- export declare function generateOpenCodePrompt(params: PromptTemplateParams): string;
17
11
  /**
18
- * The marker tags used to identify Harmonia-injected content in AGENTS.md.
12
+ * Generate the PM guidance prompt content.
13
+ *
14
+ * Returns raw prompt content WITHOUT marker tags — markers are managed
15
+ * by @s_s/agent-kit's injectPrompt (<!-- harmonia:start/end -->).
19
16
  */
20
- export declare const HARMONIA_MARKER_START = "<!-- harmonia:start -->";
21
- export declare const HARMONIA_MARKER_END = "<!-- harmonia:end -->";
17
+ export declare function generatePmPrompt(): string;
@@ -1,22 +1,31 @@
1
1
  /**
2
- * PM guidance prompt template for OpenCode.
2
+ * PM guidance prompt template.
3
3
  *
4
- * This template is injected into the project's AGENTS.md to guide the host
5
- * agent to act as the PM role in a Harmonia-managed project.
4
+ * This template is injected into the project's agent config file to guide the
5
+ * host agent to act as the PM role in a Harmonia-managed project.
6
+ * The target file (AGENTS.md / CLAUDE.md) is determined by @s_s/agent-kit.
7
+ *
8
+ * The prompt is project-agnostic — no project name, directory, or scale.
9
+ * PM discovers project info at runtime via project_status.
6
10
  */
7
11
  /**
8
- * Generate the PM guidance prompt for OpenCode AGENTS.md injection.
12
+ * Generate the PM guidance prompt content.
13
+ *
14
+ * Returns raw prompt content WITHOUT marker tags — markers are managed
15
+ * by @s_s/agent-kit's injectPrompt (<!-- harmonia:start/end -->).
9
16
  */
10
- export function generateOpenCodePrompt(params) {
11
- return `<!-- harmonia:start -->
12
- ## Harmonia — Project Manager Mode
17
+ export function generatePmPrompt() {
18
+ return `## Harmonia — Project Manager Mode
13
19
 
14
- You are the **PM (Project Manager)** for project **${params.projectName}**.
20
+ You are the **PM (Project Manager)** for a Harmonia-managed project.
15
21
  Harmonia is managing the project workflow. You are the central coordinator — the only role that talks directly to the user.
16
22
 
17
- - **Project directory**: ${params.projectDir}
18
- - **Workflow**: ${params.workflow}
19
- - **Scale**: ${params.scale}
23
+ ### Getting Started
24
+
25
+ 1. **Check for existing projects**: Call \`project_status()\` (no params) to list registered projects
26
+ 2. **If resuming**: Call \`project_status(project_name)\` to see current state and next steps
27
+ 3. **If new project**: Talk to user, then call \`project_init(project_name, project_dir)\` to register
28
+ 4. **After PRD approved**: Call \`project_set_scale(project_name, scale)\` to set project scale
20
29
 
21
30
  ### Your Responsibilities
22
31
 
@@ -25,65 +34,48 @@ Harmonia is managing the project workflow. You are the central coordinator — t
25
34
  3. **Coordinate the team** — dispatch roles, track sessions and dispatch progress, manage outputs
26
35
  4. **Ensure quality** — review documents, handle review cycles, verify deliverables
27
36
 
28
- ### Available Harmonia Tools
29
-
30
- | Tool | When to Use |
31
- |------|-------------|
32
- | \`get_project_status\` | Check current phase, progress, sessions, dispatches, pending reviews, next steps |
33
- | \`get_role_prompt\` | View any role's prompt and configuration |
34
- | \`update_phase\` | Advance or update a phase's status |
35
- | \`write_doc\` | Write/update a project document (auto-triggers review if configured) |
36
- | \`read_doc\` | Read a project document |
37
- | \`list_docs\` | List all project documents |
38
- | \`dispatch_role\` | Prepare data + create dispatch record for a team member (auto-detects reusable sessions) |
39
- | \`report_dispatch\` | Report dispatch status: register agent session after launch, report completion/failure |
40
- | \`approve_doc\` | Approve or reject a document after user review |
41
- | \`list_pending_reviews\` | Check which documents are awaiting user approval |
42
- | \`set_capability_override\` | Configure a role to use an external tool for a capability |
43
- | \`set_review_override\` | Enable/disable review for a document type |
44
- | \`get_overrides\` | View current override configuration |
45
-
46
37
  ### Workflow Guide
47
38
 
48
39
  #### Phase 1: Requirements Clarification (\`clarify\`)
49
40
 
50
41
  1. Talk to the user to understand their needs
51
- 2. Write the PRD: \`write_doc(project_name, "prd", content)\`
52
- 3. Write user stories: \`write_doc(project_name, "user-stories", content)\`
53
- 4. If the project is medium/large, also write: FSD, prototype (HTML), project plan
54
- 5. Handle review cycles — when \`write_doc\` returns "REVIEW REQUIRED", present the document to the user and wait for confirmation
55
- 6. After all clarify-phase documents are approved, advance: \`update_phase(project_name, "clarify", "completed")\`
42
+ 2. Write the PRD: \`doc_write(project_name, "prd", content)\`
43
+ 3. Write user stories: \`doc_write(project_name, "user-stories", content)\`
44
+ 4. Handle review cycles when \`doc_write\` returns "REVIEW REQUIRED", present the document to the user and wait for confirmation
45
+ 5. After PRD is approved, evaluate the project scale and call \`project_set_scale(project_name, scale)\`
46
+ 6. Based on scale, write additional documents if needed (FSD, prototype, project plan for medium/large)
47
+ 7. After all clarify-phase documents are approved, advance: \`phase_update(project_name, "clarify", "completed")\`
56
48
 
57
49
  #### Phase 2: Design (\`design\`)
58
50
 
59
- 1. Dispatch the architect: \`dispatch_role(project_name, "architect", task_brief)\`
51
+ 1. Dispatch the architect: \`role_dispatch(project_name, "architect", task_brief)\`
60
52
  2. Follow the dispatch workflow (see below) to launch and track the architect
61
53
  3. The architect will produce: tech-design, task-breakdown (and optionally: data-model, api-design, risk-assessment)
62
54
  4. Review the architect's output, ask user for feedback if needed
63
- 5. Advance: \`update_phase(project_name, "design", "completed")\`
55
+ 5. Advance: \`phase_update(project_name, "design", "completed")\`
64
56
 
65
57
  #### Phase 3: Development (\`develop\`)
66
58
 
67
- 1. Read the task breakdown: \`read_doc(project_name, "task-breakdown")\`
68
- 2. Dispatch developers for each task (or batch): \`dispatch_role(project_name, "developer", task_brief)\`
59
+ 1. Read the task breakdown: \`doc_read(project_name, "task-breakdown")\`
60
+ 2. Dispatch developers for each task (or batch): \`role_dispatch(project_name, "developer", task_brief)\`
69
61
  3. Developers can work in parallel if tasks are independent — each gets their own dispatch and session
70
- 4. Track progress with \`get_project_status\` — it shows all active sessions and dispatch records
71
- 5. Advance when all tasks are complete: \`update_phase(project_name, "develop", "completed")\`
62
+ 4. Track progress with \`project_status\` — it shows all active sessions and dispatch records
63
+ 5. Advance when all tasks are complete: \`phase_update(project_name, "develop", "completed")\`
72
64
 
73
65
  #### Phase 4: Testing (\`test\`)
74
66
 
75
- 1. Dispatch the tester: \`dispatch_role(project_name, "tester", task_brief)\`
67
+ 1. Dispatch the tester: \`role_dispatch(project_name, "tester", task_brief)\`
76
68
  2. Follow the dispatch workflow to launch and track the tester
77
69
  3. Tester writes test plan, executes tests, produces test report
78
70
  4. If bugs are found, coordinate fixes with developers (re-dispatch as needed)
79
- 5. Advance: \`update_phase(project_name, "test", "completed")\`
71
+ 5. Advance: \`phase_update(project_name, "test", "completed")\`
80
72
 
81
73
  #### Phase 5: Delivery (\`deliver\`)
82
74
 
83
75
  1. Review all deliverables against user stories and acceptance criteria
84
76
  2. Present final results to the user
85
- 3. Write retrospective: \`write_doc(project_name, "retrospective", content)\`
86
- 4. Advance: \`update_phase(project_name, "deliver", "completed")\`
77
+ 3. Write retrospective: \`doc_write(project_name, "retrospective", content)\`
78
+ 4. Advance: \`phase_update(project_name, "deliver", "completed")\`
87
79
 
88
80
  ### Dispatch Workflow (Critical — follow every time)
89
81
 
@@ -91,7 +83,7 @@ Dispatching a team member follows three steps:
91
83
 
92
84
  #### Step 1: Dispatch
93
85
  \`\`\`
94
- dispatch_role(project_name, role, task_brief)
86
+ role_dispatch(project_name, role, task_brief)
95
87
  → Returns: data package + dispatch_id + session guidance
96
88
  \`\`\`
97
89
  Harmonia automatically:
@@ -105,29 +97,29 @@ Launch the agent based on the session guidance:
105
97
 
106
98
  After launching, immediately report:
107
99
  \`\`\`
108
- report_dispatch(project_name, dispatch_id, agent_session_id="<id from agent>", agent_type="opencode")
100
+ dispatch_report(project_name, dispatch_id, agent_session_id="<id from agent>", agent_type="opencode")
109
101
  \`\`\`
110
102
  This registers the session and marks the dispatch as running.
111
103
 
112
104
  #### Step 3: Completion
113
105
  When the agent finishes (process exits or session ends):
114
106
  \`\`\`
115
- report_dispatch(project_name, dispatch_id, status="completed")
107
+ dispatch_report(project_name, dispatch_id, status="completed")
116
108
  \`\`\`
117
109
  Or if it failed:
118
110
  \`\`\`
119
- report_dispatch(project_name, dispatch_id, status="failed", note="reason")
111
+ dispatch_report(project_name, dispatch_id, status="failed", note="reason")
120
112
  \`\`\`
121
- Then check: \`get_project_status\` to verify outputs and determine next steps.
113
+ Then check: \`project_status\` to verify outputs and determine next steps.
122
114
 
123
115
  ### Launching Agents
124
116
 
125
117
  #### If you are an OpenClaw agent (sessions_spawn)
126
- Use \`sessions_spawn\` to launch a sub-agent. The sub-agent automatically shares the gateway-level MCP configuration, so it can use all Harmonia tools (write_doc, read_doc, etc.) without additional setup.
118
+ Use \`sessions_spawn\` to launch a sub-agent. The sub-agent automatically shares the gateway-level MCP configuration, so it can use all Harmonia tools (doc_write, doc_read, etc.) without additional setup.
127
119
 
128
120
  \`\`\`
129
121
  sessions_spawn with:
130
- - system prompt = the role prompt from dispatch_role
122
+ - system prompt = the role prompt from role_dispatch
131
123
  - task = the task brief
132
124
  - The sub-agent has access to all configured MCP servers including Harmonia
133
125
  \`\`\`
@@ -142,36 +134,27 @@ Launch the agent via shell command (\`exec\`). You need to:
142
134
 
143
135
  If you were interrupted or are resuming from a previous session:
144
136
 
145
- 1. **Start with** \`get_project_status\` — it shows everything: phases, active sessions, dispatch records, pending reviews
137
+ 1. **Start with** \`project_status()\` — it shows everything: phases, active sessions, dispatch records, pending reviews
146
138
  2. **Check dispatch records** — any "running" dispatches may need verification (did the agent finish?)
147
139
  3. **Check sessions** — "active" sessions may have agents still running; "idle" sessions can be reused; "lost" sessions need re-dispatch
148
- 4. **Follow the next steps** suggested by \`get_project_status\`
140
+ 4. **Follow the next steps** suggested by \`project_status\`
149
141
 
150
142
  ### Document Review Flow
151
143
 
152
144
  Some documents require user approval (PRD, prototype by default).
153
- When \`write_doc\` returns "REVIEW REQUIRED":
145
+ When \`doc_write\` returns "REVIEW REQUIRED":
154
146
 
155
147
  1. Present the full document to the user
156
148
  2. Ask if they approve or want changes
157
- 3. If approved → call \`approve_doc(project_name, doc_id, true)\`
158
- 4. If changes needed → revise and call \`write_doc\` again
149
+ 3. If approved → call \`doc_approve(project_name, doc_id, true)\`
150
+ 4. If changes needed → revise and call \`doc_write\` again
159
151
  5. **Never skip review.** Unapproved documents must not be used as input for subsequent phases.
160
152
 
161
153
  ### Important Rules
162
154
 
163
- 1. **Always check status first** — start each session with \`get_project_status\` to understand where you are
164
- 2. **Always report dispatch lifecycle** — dispatch → report launch → report completion. Never skip report_dispatch.
165
- 3. **Document everything** — every phase output must be saved via \`write_doc\`
166
- 4. **Don't skip phases** — follow the workflow order unless blocked
167
- 5. **Don't make technical decisions** — that's the architect's job; ask them via \`dispatch_role\`
168
- 6. **Don't write code** — that's the developer's job
169
- 7. **Scale appropriately** — small projects don't need all documents; check the scale setting
170
- <!-- harmonia:end -->`;
155
+ 1. **Always check status first** — start each session with \`project_status()\` to understand where you are
156
+ 2. **Always report dispatch lifecycle** — dispatch → report launch → report completion. Never skip dispatch_report.
157
+ 3. **You are the coordinator, not the executor** — dispatch technical work to the appropriate roles (architect, developer, tester). Harmonia enforces this via hooks and guards.
158
+ 4. **Always check scale** — use \`project_status(project_name)\` to check scale before deciding which documents to produce`;
171
159
  }
172
- /**
173
- * The marker tags used to identify Harmonia-injected content in AGENTS.md.
174
- */
175
- export const HARMONIA_MARKER_START = '<!-- harmonia:start -->';
176
- export const HARMONIA_MARKER_END = '<!-- harmonia:end -->';
177
160
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/setup/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA4B;IAC/D,OAAO;;;qDAG0C,MAAM,CAAC,WAAW;;;2BAG5C,MAAM,CAAC,UAAU;kBAC1B,MAAM,CAAC,QAAQ;eAClB,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAuJL,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/setup/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2HA4IgH,CAAC;AAC5H,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP Tool: approve_doc
2
+ * MCP Tool: doc_approve / review_list
3
3
  * Approve or reject a document that is pending review.
4
4
  */
5
5
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
@@ -1,11 +1,11 @@
1
1
  /**
2
- * MCP Tool: approve_doc
2
+ * MCP Tool: doc_approve / review_list
3
3
  * Approve or reject a document that is pending review.
4
4
  */
5
5
  import { z } from 'zod';
6
6
  import { resolveReview, getPendingReviews } from '../core/reviews.js';
7
7
  export function registerApproveDoc(server) {
8
- server.tool('approve_doc', 'Approve or reject a document pending review. Call this after the user has reviewed the document and confirmed (or requested changes).', {
8
+ server.tool('doc_approve', 'Approve or reject a document pending review. Call this after the user has reviewed the document and confirmed (or requested changes).', {
9
9
  project_name: z.string().describe('Project name'),
10
10
  doc_id: z.string().describe('Document ID to approve/reject'),
11
11
  approved: z.boolean().describe('true = approved, false = rejected (needs revision)'),
@@ -32,7 +32,7 @@ export function registerApproveDoc(server) {
32
32
  text: [
33
33
  `Document "${doc_id}" rejected.`,
34
34
  comment ? `User feedback: ${comment}` : '',
35
- `Please revise the document based on the feedback and call write_doc again.`,
35
+ `Please revise the document based on the feedback and call doc_write again.`,
36
36
  ].join('\n'),
37
37
  },
38
38
  ],
@@ -51,7 +51,7 @@ export function registerApproveDoc(server) {
51
51
  };
52
52
  }
53
53
  });
54
- server.tool('list_pending_reviews', 'List all documents currently pending user review.', {
54
+ server.tool('review_list', 'List all documents currently pending user review.', {
55
55
  project_name: z.string().describe('Project name'),
56
56
  }, async ({ project_name }) => {
57
57
  const pending = await getPendingReviews(project_name);
@@ -1 +1 @@
1
- {"version":3,"file":"approve-doc.js","sourceRoot":"","sources":["../../src/tools/approve-doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approve-doc.js","sourceRoot":"","sources":["../../src/tools/approve-doc.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP Tool: dispatch_role
2
+ * MCP Tool: role_dispatch
3
3
  *
4
4
  * Prepare all data needed to hand off a task to a team member role.
5
5
  * Returns: role prompt (with overrides injected), frontmatter config,
@@ -13,4 +13,4 @@
13
13
  * The host agent (PM) decides how to pass this to the team member.
14
14
  */
15
15
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
16
- export declare function registerDispatchRole(server: McpServer, workflowsDir: string): void;
16
+ export declare function registerDispatchRole(server: McpServer, builtinDir: string, customDir: string): void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP Tool: dispatch_role
2
+ * MCP Tool: role_dispatch
3
3
  *
4
4
  * Prepare all data needed to hand off a task to a team member role.
5
5
  * Returns: role prompt (with overrides injected), frontmatter config,
@@ -62,6 +62,7 @@ function findCurrentPhase(phases, currentPhaseId) {
62
62
  /**
63
63
  * Resolve expected output doc IDs for a dispatch.
64
64
  * Uses the current phase's outputs, filtering out external, scale-skipped, and optional docs.
65
+ * When scale is null, returns all non-external outputs (cannot filter by scale).
65
66
  */
66
67
  function resolveExpectedOutputs(currentPhase, workflowDef, scale) {
67
68
  if (!currentPhase)
@@ -72,14 +73,16 @@ function resolveExpectedOutputs(currentPhase, workflowDef, scale) {
72
73
  return false;
73
74
  if (docDef.external)
74
75
  return false;
75
- const scaleVal = docDef.scale[scale];
76
- if (scaleVal === 'skip' || scaleVal === 'optional')
77
- return false;
76
+ if (scale !== null) {
77
+ const scaleVal = docDef.scale[scale];
78
+ if (scaleVal === 'skip' || scaleVal === 'optional')
79
+ return false;
80
+ }
78
81
  return true;
79
82
  });
80
83
  }
81
- export function registerDispatchRole(server, workflowsDir) {
82
- server.tool('dispatch_role', "Prepare all data needed to dispatch a task to a team member. Returns the role's prompt (with capability overrides), configuration, input documents, task brief, and a dispatch tracking ID. Automatically searches for reusable sessions and provides guidance. Does NOT launch agents — you (PM) decide how to pass this to the team member. After launching, call report_dispatch to register the session.", {
84
+ export function registerDispatchRole(server, builtinDir, customDir) {
85
+ server.tool('role_dispatch', "Prepare all data needed to dispatch a task to a team member. Returns the role's prompt (with capability overrides), configuration, input documents, task brief, and a dispatch tracking ID. Automatically searches for reusable sessions and provides guidance. Does NOT launch agents — you (PM) decide how to pass this to the team member. After launching, call dispatch_report to register the session.", {
83
86
  project_name: z.string().describe('Project name'),
84
87
  role: z.string().describe('Role ID to dispatch (e.g. architect, developer, tester)'),
85
88
  task_brief: z
@@ -93,7 +96,7 @@ export function registerDispatchRole(server, workflowsDir) {
93
96
  try {
94
97
  // Load project state and workflow
95
98
  const state = await readState(project_name);
96
- const wf = await loadWorkflow(workflowsDir, state.workflow);
99
+ const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
97
100
  // Validate role exists
98
101
  const roleDef = wf.roles[role];
99
102
  if (!roleDef) {
@@ -108,15 +111,42 @@ export function registerDispatchRole(server, workflowsDir) {
108
111
  isError: true,
109
112
  };
110
113
  }
114
+ // Guard: role-phase validation
115
+ const currentPhase = findCurrentPhase(wf.definition.phases, state.currentPhase);
116
+ const currentPhaseRoles = currentPhase?.roles ?? [];
117
+ const phaseIndex = wf.definition.phases.findIndex((p) => p.id === state.currentPhase);
118
+ const nextPhase = phaseIndex >= 0 ? wf.definition.phases[phaseIndex + 1] : undefined;
119
+ const nextPhaseRoles = nextPhase?.roles ?? [];
120
+ const allowedRoles = [...new Set([...currentPhaseRoles, ...nextPhaseRoles])];
121
+ if (allowedRoles.length > 0 && !allowedRoles.includes(role)) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'text',
126
+ text: [
127
+ `角色 "${role}" 不属于当前阶段 "${state.currentPhase}" 或下一阶段的角色。`,
128
+ `当前阶段允许的角色: ${currentPhaseRoles.join(', ') || '(无)'}`,
129
+ nextPhase
130
+ ? `下一阶段 (${nextPhase.id}) 允许的角色: ${nextPhaseRoles.join(', ')}`
131
+ : '',
132
+ '',
133
+ '如确需 dispatch 此角色,请先推进阶段。',
134
+ ]
135
+ .filter(Boolean)
136
+ .join('\n'),
137
+ },
138
+ ],
139
+ isError: true,
140
+ };
141
+ }
111
142
  // Get merged overrides
112
143
  const overrides = await getMergedOverrides(project_name);
113
144
  // Build the full prompt with overrides injected
114
145
  const overrideSection = buildOverrideSection(role, overrides);
115
146
  const fullPrompt = overrideSection ? `${roleDef.prompt}\n${overrideSection}` : roleDef.prompt;
116
147
  // Determine input docs
117
- const currentPhase = findCurrentPhase(wf.definition.phases, state.currentPhase);
118
148
  const docIds = input_doc_ids ?? currentPhase?.inputs ?? [];
119
- // Read input documents (skip external docs like "code" — not managed by write_doc)
149
+ // Read input documents (skip external docs like "code" — not managed by doc_write)
120
150
  const inputDocs = {};
121
151
  const missingDocs = [];
122
152
  for (const docId of docIds) {
@@ -164,7 +194,7 @@ export function registerDispatchRole(server, workflowsDir) {
164
194
  `## Project Context`,
165
195
  `- Project: ${project_name}`,
166
196
  `- Directory: ${state.projectDir}`,
167
- `- Scale: ${state.scale}`,
197
+ `- Scale: ${state.scale ?? '(未设定)'}`,
168
198
  `- Current phase: ${state.currentPhase}`,
169
199
  ``,
170
200
  `## Input Documents (${Object.keys(inputDocs).length}${missingDocs.length > 0 ? `, ${missingDocs.length} missing` : ''})`,
@@ -175,7 +205,7 @@ export function registerDispatchRole(server, workflowsDir) {
175
205
  if (missingDocs.length > 0) {
176
206
  summary.push(``, `### Missing Documents`, ...missingDocs.map((d) => `- ${d}`));
177
207
  }
178
- summary.push(``, `## Next Step`, `After launching the agent, call \`report_dispatch\` with dispatch_id="${dispatch.id}" and the agent's session ID.`, `When the agent finishes, call \`report_dispatch\` again with status="completed" (or "failed").`, ``, `## Role Prompt`, ``, fullPrompt);
208
+ summary.push(``, `## Next Step`, `After launching the agent, call \`dispatch_report\` with dispatch_id="${dispatch.id}" and the agent's session ID.`, `When the agent finishes, call \`dispatch_report\` again with status="completed" (or "failed").`, ``, `## Role Prompt`, ``, fullPrompt);
179
209
  return {
180
210
  content: [
181
211
  {
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-role.js","sourceRoot":"","sources":["../../src/tools/dispatch-role.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch-role.js","sourceRoot":"","sources":["../../src/tools/dispatch-role.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
1
  /**
2
- * MCP Tools: write_doc / read_doc / list_docs
2
+ * MCP Tools: doc_write / doc_read / doc_list
3
3
  * Read and write project documents under <data_dir>/<project_name>/docs/
4
4
  *
5
- * write_doc checks review configuration and auto-submits for review if needed.
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.
6
14
  */
7
15
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
- export declare function registerDocTools(server: McpServer, workflowsDir: string): void;
16
+ export declare function registerDocTools(server: McpServer, builtinDir: string, customDir: string): void;