@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.
- package/README.md +396 -2
- package/build/cli/setup.d.ts +21 -0
- package/build/cli/setup.js +72 -0
- package/build/cli/setup.js.map +1 -0
- package/build/core/dispatch.d.ts +10 -0
- package/build/core/dispatch.js +21 -0
- package/build/core/dispatch.js.map +1 -1
- package/build/core/docs.d.ts +13 -0
- package/build/core/docs.js +32 -0
- package/build/core/docs.js.map +1 -1
- package/build/core/registry.d.ts +1 -1
- package/build/core/registry.js +5 -16
- package/build/core/registry.js.map +1 -1
- package/build/core/schema.d.ts +38 -0
- package/build/core/schema.js +187 -0
- package/build/core/schema.js.map +1 -0
- package/build/core/state.d.ts +11 -1
- package/build/core/state.js +23 -2
- package/build/core/state.js.map +1 -1
- package/build/core/steps.d.ts +34 -0
- package/build/core/steps.js +113 -0
- package/build/core/steps.js.map +1 -0
- package/build/core/types.d.ts +81 -4
- package/build/core/workflow.d.ts +26 -6
- package/build/core/workflow.js +88 -11
- package/build/core/workflow.js.map +1 -1
- package/build/hooks/claude-code.d.ts +20 -0
- package/build/hooks/claude-code.js +218 -0
- package/build/hooks/claude-code.js.map +1 -0
- package/build/hooks/content.d.ts +43 -0
- package/build/hooks/content.js +109 -0
- package/build/hooks/content.js.map +1 -0
- package/build/hooks/install.d.ts +40 -0
- package/build/hooks/install.js +63 -0
- package/build/hooks/install.js.map +1 -0
- package/build/hooks/openclaw.d.ts +24 -0
- package/build/hooks/openclaw.js +219 -0
- package/build/hooks/openclaw.js.map +1 -0
- package/build/hooks/opencode.d.ts +29 -0
- package/build/hooks/opencode.js +226 -0
- package/build/hooks/opencode.js.map +1 -0
- package/build/index.d.ts +4 -7
- package/build/index.js +80 -42
- package/build/index.js.map +1 -1
- package/build/setup/inject.d.ts +13 -17
- package/build/setup/inject.js +34 -92
- package/build/setup/inject.js.map +1 -1
- package/build/setup/templates.d.ts +12 -16
- package/build/setup/templates.js +52 -69
- package/build/setup/templates.js.map +1 -1
- package/build/tools/approve-doc.d.ts +1 -1
- package/build/tools/approve-doc.js +4 -4
- package/build/tools/approve-doc.js.map +1 -1
- package/build/tools/dispatch-role.d.ts +2 -2
- package/build/tools/dispatch-role.js +41 -11
- package/build/tools/dispatch-role.js.map +1 -1
- package/build/tools/doc-tools.d.ts +11 -3
- package/build/tools/doc-tools.js +257 -13
- package/build/tools/doc-tools.js.map +1 -1
- package/build/tools/get-project-status.d.ts +4 -2
- package/build/tools/get-project-status.js +165 -50
- package/build/tools/get-project-status.js.map +1 -1
- package/build/tools/get-role-prompt.d.ts +2 -2
- package/build/tools/get-role-prompt.js +4 -4
- package/build/tools/get-role-prompt.js.map +1 -1
- package/build/tools/override-tools.d.ts +1 -1
- package/build/tools/override-tools.js +4 -4
- package/build/tools/override-tools.js.map +1 -1
- package/build/tools/project-init.d.ts +5 -1
- package/build/tools/project-init.js +92 -32
- package/build/tools/project-init.js.map +1 -1
- package/build/tools/report-dispatch.d.ts +6 -3
- package/build/tools/report-dispatch.js +45 -8
- package/build/tools/report-dispatch.js.map +1 -1
- package/build/tools/set-scale.d.ts +6 -0
- package/build/tools/set-scale.js +92 -0
- package/build/tools/set-scale.js.map +1 -0
- package/build/tools/setup-project.d.ts +1 -1
- package/build/tools/setup-project.js +33 -5
- package/build/tools/setup-project.js.map +1 -1
- package/build/tools/update-phase.d.ts +8 -3
- package/build/tools/update-phase.js +85 -20
- package/build/tools/update-phase.js.map +1 -1
- package/package.json +2 -1
- package/workflows/dev/roles/architect.md +1 -1
- package/workflows/dev/roles/pm.md +5 -5
- package/workflows/dev/roles/tester.md +1 -1
- package/workflows/dev/schemas/api-design.json +25 -0
- package/workflows/dev/schemas/data-model.json +20 -0
- package/workflows/dev/schemas/deploy.json +20 -0
- package/workflows/dev/schemas/fsd.json +25 -0
- package/workflows/dev/schemas/prd.completeness-check.json +24 -0
- package/workflows/dev/schemas/prd.draft.json +15 -0
- package/workflows/dev/schemas/prd.final.json +30 -0
- package/workflows/dev/schemas/prd.json +30 -0
- package/workflows/dev/schemas/prd.requirements.json +25 -0
- package/workflows/dev/schemas/project-plan.json +20 -0
- package/workflows/dev/schemas/prototype.json +4 -0
- package/workflows/dev/schemas/retrospective.json +20 -0
- package/workflows/dev/schemas/risk-assessment.json +15 -0
- package/workflows/dev/schemas/task-breakdown.coarse.json +15 -0
- package/workflows/dev/schemas/task-breakdown.dependencies.json +20 -0
- package/workflows/dev/schemas/task-breakdown.detailed.json +10 -0
- package/workflows/dev/schemas/task-breakdown.final.json +10 -0
- package/workflows/dev/schemas/task-breakdown.json +10 -0
- package/workflows/dev/schemas/tech-design.analysis.json +25 -0
- package/workflows/dev/schemas/tech-design.api-contract.json +20 -0
- package/workflows/dev/schemas/tech-design.draft.json +15 -0
- package/workflows/dev/schemas/tech-design.final.json +30 -0
- package/workflows/dev/schemas/tech-design.json +30 -0
- package/workflows/dev/schemas/test-plan.json +20 -0
- package/workflows/dev/schemas/test-report.json +25 -0
- package/workflows/dev/schemas/user-stories.json +10 -0
- package/workflows/dev/workflow.json +85 -5
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PM guidance prompt template
|
|
2
|
+
* PM guidance prompt template.
|
|
3
3
|
*
|
|
4
|
-
* This template is injected into the project's
|
|
5
|
-
* agent to act as the PM role in a Harmonia-managed project.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
*
|
|
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
|
|
21
|
-
export declare const HARMONIA_MARKER_END = "<!-- harmonia:end -->";
|
|
17
|
+
export declare function generatePmPrompt(): string;
|
package/build/setup/templates.js
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PM guidance prompt template
|
|
2
|
+
* PM guidance prompt template.
|
|
3
3
|
*
|
|
4
|
-
* This template is injected into the project's
|
|
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
|
|
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
|
|
11
|
-
return
|
|
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
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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: \`
|
|
52
|
-
3. Write user stories: \`
|
|
53
|
-
4.
|
|
54
|
-
5.
|
|
55
|
-
6.
|
|
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: \`
|
|
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: \`
|
|
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: \`
|
|
68
|
-
2. Dispatch developers for each task (or batch): \`
|
|
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 \`
|
|
71
|
-
5. Advance when all tasks are complete: \`
|
|
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: \`
|
|
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: \`
|
|
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: \`
|
|
86
|
-
4. Advance: \`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
107
|
+
dispatch_report(project_name, dispatch_id, status="completed")
|
|
116
108
|
\`\`\`
|
|
117
109
|
Or if it failed:
|
|
118
110
|
\`\`\`
|
|
119
|
-
|
|
111
|
+
dispatch_report(project_name, dispatch_id, status="failed", note="reason")
|
|
120
112
|
\`\`\`
|
|
121
|
-
Then check: \`
|
|
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 (
|
|
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
|
|
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** \`
|
|
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 \`
|
|
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 \`
|
|
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 \`
|
|
158
|
-
4. If changes needed → revise and call \`
|
|
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 \`
|
|
164
|
-
2. **Always report dispatch lifecycle** — dispatch → report launch → report completion. Never skip
|
|
165
|
-
3. **
|
|
166
|
-
4. **
|
|
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;
|
|
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,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Tool:
|
|
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('
|
|
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
|
|
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('
|
|
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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACP,aAAa,EACb,uIAAuI,EACvI;QACI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QACpF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;KACtG,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAClD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAE1E,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,aAAa,MAAM,gDAAgD;yBAC5E;qBACJ;iBACJ,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE;gCACF,aAAa,MAAM,aAAa;gCAChC,OAAO,CAAC,CAAC,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;gCAC1C,4EAA4E;6BAC/E,CAAC,IAAI,CAAC,IAAI,CAAC;yBACf;qBACJ;iBACJ,CAAC;YACN,CAAC;QACL,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;IAEF,MAAM,CAAC,IAAI,CACP,
|
|
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:
|
|
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,
|
|
16
|
+
export declare function registerDispatchRole(server: McpServer, builtinDir: string, customDir: string): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Tool:
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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,
|
|
82
|
-
server.tool('
|
|
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(
|
|
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
|
|
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 \`
|
|
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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAStE;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAc,EAAE,SAAyB;IACnE,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC9D,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAa;QACpB,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,wEAAwE;QACxE,wEAAwE;QACxE,EAAE;KACL,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,GAAG,QAA8B,CAAC;QACzC,MAAM,OAAO,GACT,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM;YACxB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,qBAAqB,CAAC,CAAC,IAAI,SAAS;YACnD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC;QAErC,IAAI,WAAW,GAAG,OAAO,KAAK,WAAW,OAAO,EAAE,CAAC;QAEnD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,WAAW,IAAI,2BAA2B,QAAQ,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,WAAW,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAyB,EAAE,cAAsB;IACvE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;AACvD,CAAC;AAED
|
|
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:
|
|
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
|
-
*
|
|
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,
|
|
16
|
+
export declare function registerDocTools(server: McpServer, builtinDir: string, customDir: string): void;
|