@s_s/harmonia 1.2.0 → 1.3.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 (54) hide show
  1. package/build/core/dispatch.d.ts +14 -11
  2. package/build/core/dispatch.js +37 -32
  3. package/build/core/dispatch.js.map +1 -1
  4. package/build/core/docs.d.ts +15 -11
  5. package/build/core/docs.js +23 -18
  6. package/build/core/docs.js.map +1 -1
  7. package/build/core/issues.d.ts +37 -0
  8. package/build/core/issues.js +100 -0
  9. package/build/core/issues.js.map +1 -0
  10. package/build/core/registry.d.ts +34 -0
  11. package/build/core/registry.js +59 -0
  12. package/build/core/registry.js.map +1 -1
  13. package/build/core/reviews.d.ts +9 -8
  14. package/build/core/reviews.js +21 -19
  15. package/build/core/reviews.js.map +1 -1
  16. package/build/core/state.d.ts +22 -14
  17. package/build/core/state.js +52 -30
  18. package/build/core/state.js.map +1 -1
  19. package/build/core/steps.d.ts +8 -7
  20. package/build/core/steps.js +20 -18
  21. package/build/core/steps.js.map +1 -1
  22. package/build/core/types.d.ts +31 -2
  23. package/build/index.js +4 -0
  24. package/build/index.js.map +1 -1
  25. package/build/setup/templates.js +70 -1
  26. package/build/setup/templates.js.map +1 -1
  27. package/build/tools/approve-doc.js +9 -31
  28. package/build/tools/approve-doc.js.map +1 -1
  29. package/build/tools/dispatch-role.js +8 -19
  30. package/build/tools/dispatch-role.js.map +1 -1
  31. package/build/tools/doc-tools.js +98 -62
  32. package/build/tools/doc-tools.js.map +1 -1
  33. package/build/tools/get-project-status.js +69 -24
  34. package/build/tools/get-project-status.js.map +1 -1
  35. package/build/tools/issue-tools.d.ts +10 -0
  36. package/build/tools/issue-tools.js +169 -0
  37. package/build/tools/issue-tools.js.map +1 -0
  38. package/build/tools/iteration-start.js +9 -4
  39. package/build/tools/iteration-start.js.map +1 -1
  40. package/build/tools/patch-start.d.ts +14 -0
  41. package/build/tools/patch-start.js +97 -0
  42. package/build/tools/patch-start.js.map +1 -0
  43. package/build/tools/project-init.js +6 -8
  44. package/build/tools/project-init.js.map +1 -1
  45. package/build/tools/report-dispatch.js +21 -32
  46. package/build/tools/report-dispatch.js.map +1 -1
  47. package/build/tools/set-scale.js +7 -19
  48. package/build/tools/set-scale.js.map +1 -1
  49. package/build/tools/update-phase.js +11 -22
  50. package/build/tools/update-phase.js.map +1 -1
  51. package/build/tools/utils.d.ts +34 -0
  52. package/build/tools/utils.js +61 -0
  53. package/build/tools/utils.js.map +1 -0
  54. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/core/steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/core/steps.ts"],"names":[],"mappings":"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"}
@@ -116,8 +116,9 @@ export interface LoadedWorkflow {
116
116
  definition: WorkflowDefinition;
117
117
  roles: Record<string, RoleDefinition>;
118
118
  }
119
- export type PhaseStatus = 'pending' | 'in_progress' | 'completed' | 'blocked' | 'review';
119
+ export type PhaseStatus = 'pending' | 'in_progress' | 'completed' | 'blocked' | 'review' | 'skipped';
120
120
  export type ProjectScale = 'small' | 'medium' | 'large';
121
+ export type ContextType = 'iteration' | 'patch';
121
122
  export interface PhaseState {
122
123
  id: string;
123
124
  status: PhaseStatus;
@@ -132,7 +133,9 @@ export interface ProjectState {
132
133
  projectDir: string;
133
134
  /** Workflow name, e.g. "dev" */
134
135
  workflow: string;
135
- /** Iteration number this state belongs to */
136
+ /** Context type: "iteration" for full iterations, "patch" for lightweight patches */
137
+ type: ContextType;
138
+ /** Iteration or patch number this state belongs to */
136
139
  iteration: number;
137
140
  /** Project scale determined by PM (null until set via project_set_scale) */
138
141
  scale: ProjectScale | null;
@@ -258,3 +261,29 @@ export interface DocStepState {
258
261
  /** Finalized at timestamp */
259
262
  finalizedAt?: string;
260
263
  }
264
+ export type IssueStatus = 'open' | 'closed';
265
+ export type IssueSource = 'test' | 'user-feedback';
266
+ export interface IssueResolvedBy {
267
+ type: ContextType;
268
+ number: number;
269
+ }
270
+ export interface Issue {
271
+ /** Auto-generated ID, e.g. "issue-1" */
272
+ id: string;
273
+ /** Short title */
274
+ title: string;
275
+ /** Detailed description */
276
+ description: string;
277
+ /** Where this issue was discovered */
278
+ source: IssueSource;
279
+ /** Which iteration this issue relates to */
280
+ iteration: number;
281
+ /** How this issue was resolved (set when closing) */
282
+ resolvedBy?: IssueResolvedBy;
283
+ /** Current status */
284
+ status: IssueStatus;
285
+ /** When this issue was created */
286
+ createdAt: string;
287
+ /** When this issue was closed */
288
+ closedAt?: string;
289
+ }
package/build/index.js CHANGED
@@ -97,6 +97,8 @@ else {
97
97
  const { registerOverrideTools } = await import('./tools/override-tools.js');
98
98
  const { registerDispatchRole } = await import('./tools/dispatch-role.js');
99
99
  const { registerReportDispatch } = await import('./tools/report-dispatch.js');
100
+ const { registerPatchStart } = await import('./tools/patch-start.js');
101
+ const { registerIssueTools } = await import('./tools/issue-tools.js');
100
102
  // Custom workflows directory: <data_dir>/.workflows
101
103
  const CUSTOM_WORKFLOWS_DIR = join(getGlobalDir(), '.workflows');
102
104
  const server = new McpServer({
@@ -115,6 +117,8 @@ else {
115
117
  registerOverrideTools(server);
116
118
  registerDispatchRole(server, BUILTIN_WORKFLOWS_DIR, CUSTOM_WORKFLOWS_DIR);
117
119
  registerReportDispatch(server, BUILTIN_WORKFLOWS_DIR, CUSTOM_WORKFLOWS_DIR);
120
+ registerPatchStart(server, BUILTIN_WORKFLOWS_DIR, CUSTOM_WORKFLOWS_DIR);
121
+ registerIssueTools(server);
118
122
  // Connect via stdio
119
123
  const transport = new StdioServerTransport();
120
124
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,75 @@ When \`doc_write\` returns "REVIEW REQUIRED":
162
162
  1. **Always check status first** — start each session with \`project_status()\` to understand where you are
163
163
  2. **Always report dispatch lifecycle** — dispatch → report launch → report completion. Never skip dispatch_report.
164
164
  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.
165
- 4. **Always check scale** — use \`project_status(project_name)\` to check scale before deciding which documents to produce`;
165
+ 4. **Always check scale** — use \`project_status(project_name)\` to check scale before deciding which documents to produce
166
+
167
+ ### Patch Workflow
168
+
169
+ Patches are lightweight fix cycles for bug fixes and small improvements. Unlike full iterations, patches skip the clarify and design phases, and scale is fixed to small.
170
+
171
+ #### When to Use Patches
172
+
173
+ - Bug fixes found during testing or user feedback
174
+ - Small improvements that don't need full requirements/design
175
+ - Issues tracked via \`issue_create\`
176
+
177
+ #### Starting a Patch
178
+
179
+ \`\`\`
180
+ patch_start(project_name, description="fix login timeout", issue_id="issue-1")
181
+ \`\`\`
182
+
183
+ This:
184
+ - Creates a \`patch-N/\` directory
185
+ - Skips clarify and design phases
186
+ - Sets scale to small
187
+ - Switches the active context to the patch
188
+
189
+ #### Patch Phases
190
+
191
+ Patches start directly at the develop phase:
192
+ 1. **develop** — Fix the issue, write code
193
+ 2. **test** — Verify the fix
194
+ 3. **deliver** — Close out the patch
195
+
196
+ #### After Patch Completion
197
+
198
+ - Close the related issue: \`issue_update(project_name, issue_id, status="closed", resolved_by_type="patch", resolved_by_number=N)\`
199
+ - Start another patch or switch back to iteration with \`iteration_start\`
200
+
201
+ ### Issue Management
202
+
203
+ Issues track problems discovered during testing or from user feedback. They exist at the project level (not per-iteration).
204
+
205
+ #### Creating Issues
206
+
207
+ \`\`\`
208
+ issue_create(project_name, title="Login timeout on slow networks", description="...", source="test", iteration=1)
209
+ \`\`\`
210
+
211
+ Sources: \`test\` (found during testing) or \`user-feedback\` (reported by users).
212
+
213
+ #### Tracking Issues
214
+
215
+ - \`issue_list(project_name)\` — View all issues
216
+ - \`issue_list(project_name, status="open")\` — View open issues only
217
+ - \`issue_update(project_name, issue_id, status="closed", resolved_by_type="patch", resolved_by_number=1)\` — Close with resolution
218
+
219
+ #### Workflow Integration
220
+
221
+ - \`project_status\` shows open issue count and suggests \`patch_start\` when there are unresolved issues
222
+ - When testing reveals bugs, use \`issue_create\` to track them
223
+ - Use \`patch_start\` with \`issue_id\` to link patches to issues
224
+
225
+ ### Cross-Context Document Access
226
+
227
+ Use the optional \`context\` parameter on \`doc_read\` and \`doc_list\` to access documents from any iteration or patch:
228
+
229
+ \`\`\`
230
+ doc_read(project_name, "prd", context="iter-1") // Read PRD from iteration 1
231
+ doc_list(project_name, context="patch-2") // List docs from patch 2
232
+ \`\`\`
233
+
234
+ This is useful when working in a patch but needing to reference the original iteration's documents.`;
166
235
  }
167
236
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/setup/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2HAmJgH,CAAC;AAC5H,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oGAwNyF,CAAC;AACrG,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { z } from 'zod';
6
6
  import { resolveReview, getPendingReviews } from '../core/reviews.js';
7
- import { getProject } from '../core/registry.js';
7
+ import { resolveActive, isError } from './utils.js';
8
8
  export function registerApproveDoc(server) {
9
9
  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).', {
10
10
  project_name: z.string().describe('Project name'),
@@ -13,22 +13,11 @@ export function registerApproveDoc(server) {
13
13
  comment: z.string().optional().describe('Optional comment — user feedback or reason for rejection'),
14
14
  }, async ({ project_name, doc_id, approved, comment }) => {
15
15
  try {
16
- // Resolve current iteration
17
- const entry = await getProject(project_name);
18
- if (!entry || entry.currentIteration === 0) {
19
- return {
20
- content: [
21
- {
22
- type: 'text',
23
- text: `项目 "${project_name}" 未找到或尚未开始迭代。`,
24
- },
25
- ],
26
- isError: true,
27
- };
28
- }
29
- const iteration = entry.currentIteration;
16
+ const ctx = await resolveActive(project_name);
17
+ if (isError(ctx))
18
+ return ctx;
30
19
  const status = approved ? 'approved' : 'rejected';
31
- const review = await resolveReview(project_name, iteration, doc_id, status, comment);
20
+ const review = await resolveReview(project_name, ctx.number, doc_id, status, comment);
32
21
  if (approved) {
33
22
  return {
34
23
  content: [
@@ -69,21 +58,10 @@ export function registerApproveDoc(server) {
69
58
  server.tool('review_list', 'List all documents currently pending user review.', {
70
59
  project_name: z.string().describe('Project name'),
71
60
  }, async ({ project_name }) => {
72
- // Resolve current iteration
73
- const entry = await getProject(project_name);
74
- if (!entry || entry.currentIteration === 0) {
75
- return {
76
- content: [
77
- {
78
- type: 'text',
79
- text: `项目 "${project_name}" 未找到或尚未开始迭代。`,
80
- },
81
- ],
82
- isError: true,
83
- };
84
- }
85
- const iteration = entry.currentIteration;
86
- const pending = await getPendingReviews(project_name, iteration);
61
+ const ctx = await resolveActive(project_name);
62
+ if (isError(ctx))
63
+ return ctx;
64
+ const pending = await getPendingReviews(project_name, ctx.number);
87
65
  if (pending.length === 0) {
88
66
  return {
89
67
  content: [
@@ -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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"}
@@ -18,7 +18,7 @@ import { readState } from '../core/state.js';
18
18
  import { readDoc } from '../core/docs.js';
19
19
  import { getMergedOverrides, resolveRoleConfig } from '../core/overrides.js';
20
20
  import { createDispatch, findIdleSession } from '../core/dispatch.js';
21
- import { getProject } from '../core/registry.js';
21
+ import { resolveActive, isError } from './utils.js';
22
22
  /**
23
23
  * Build override instructions to inject into the role prompt.
24
24
  */
@@ -95,22 +95,11 @@ export function registerDispatchRole(server, builtinDir, customDir) {
95
95
  .describe("Document IDs to include as input for the team member. If not specified, automatically uses the current phase's input docs."),
96
96
  }, async ({ project_name, role, task_brief, input_doc_ids }) => {
97
97
  try {
98
- // Resolve current iteration
99
- const entry = await getProject(project_name);
100
- if (!entry || entry.currentIteration === 0) {
101
- return {
102
- content: [
103
- {
104
- type: 'text',
105
- text: `项目 "${project_name}" 未找到或尚未开始迭代。请先调用 iteration_start。`,
106
- },
107
- ],
108
- isError: true,
109
- };
110
- }
111
- const iteration = entry.currentIteration;
98
+ const ctx = await resolveActive(project_name);
99
+ if (isError(ctx))
100
+ return ctx;
112
101
  // Load project state and workflow
113
- const state = await readState(project_name, iteration);
102
+ const state = await readState(project_name, ctx.number, ctx.dir);
114
103
  const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
115
104
  // Validate role exists
116
105
  const roleDef = wf.roles[role];
@@ -169,7 +158,7 @@ export function registerDispatchRole(server, builtinDir, customDir) {
169
158
  if (docDef?.external)
170
159
  continue; // external outputs not stored as docs
171
160
  try {
172
- inputDocs[docId] = await readDoc(project_name, iteration, docId);
161
+ inputDocs[docId] = await readDoc(project_name, ctx.number, docId, ctx.dir);
173
162
  }
174
163
  catch {
175
164
  missingDocs.push(docId);
@@ -180,9 +169,9 @@ export function registerDispatchRole(server, builtinDir, customDir) {
180
169
  // Resolve expected outputs for this dispatch
181
170
  const expectedOutputs = resolveExpectedOutputs(currentPhase, wf.definition, state.scale);
182
171
  // Check for reusable idle session
183
- const idleSession = await findIdleSession(project_name, iteration, role);
172
+ const idleSession = await findIdleSession(project_name, ctx.number, role, ctx.dir);
184
173
  // Create dispatch record
185
- const dispatch = await createDispatch(project_name, iteration, role, task_brief, expectedOutputs, idleSession?.id);
174
+ const dispatch = await createDispatch(project_name, ctx.number, role, task_brief, expectedOutputs, idleSession?.id, ctx.dir);
186
175
  // Build session guidance
187
176
  const sessionGuidance = buildSessionGuidance(idleSession, roleDef.frontmatter.session, roleConfig.agent);
188
177
  // Build human-readable summary for the agent
@@ -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":"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;AACtE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AASpD;;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;;;;GAIG;AACH,SAAS,sBAAsB,CAC3B,YAAyC,EACzC,WAA+B,EAC/B,KAA0B;IAE1B,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,UAAkB,EAAE,SAAiB;IACzF,MAAM,CAAC,IAAI,CACP,eAAe,EACf,8YAA8Y,EAC9Y;QACI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QACpF,UAAU,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CACL,0HAA0H,CAC7H;QACL,aAAa,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACL,4HAA4H,CAC/H;KACR,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE;QACxD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YAE7B,kCAAkC;YAClC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAErE,uBAAuB;YACvB,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,SAAS,IAAI,2BAA2B,SAAS,EAAE;yBAC5D;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,+BAA+B;YAC/B,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAChF,MAAM,iBAAiB,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC;YACtF,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,MAAM,cAAc,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAE7E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE;gCACF,OAAO,IAAI,cAAc,KAAK,CAAC,YAAY,aAAa;gCACxD,cAAc,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;gCACrD,SAAS;oCACL,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,YAAY,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oCAC9D,CAAC,CAAC,EAAE;gCACR,EAAE;gCACF,0BAA0B;6BAC7B;iCACI,MAAM,CAAC,OAAO,CAAC;iCACf,IAAI,CAAC,IAAI,CAAC;yBAClB;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,uBAAuB;YACvB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAEzD,gDAAgD;YAChD,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YAE9F,uBAAuB;YACvB,MAAM,MAAM,GAAG,aAAa,IAAI,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC;YAE3D,mFAAmF;YACnF,MAAM,SAAS,GAA2B,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,QAAQ;oBAAE,SAAS,CAAC,sCAAsC;gBACtE,IAAI,CAAC;oBACD,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/E,CAAC;gBAAC,MAAM,CAAC;oBACL,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YAED,gCAAgC;YAChC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAEtD,6CAA6C;YAC7C,MAAM,eAAe,GAAG,sBAAsB,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAEzF,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAEnF,yBAAyB;YACzB,MAAM,QAAQ,GAAG,MAAM,cAAc,CACjC,YAAY,EACZ,GAAG,CAAC,MAAM,EACV,IAAI,EACJ,UAAU,EACV,eAAe,EACf,WAAW,EAAE,EAAE,EACf,GAAG,CAAC,GAAG,CACV,CAAC;YAEF,yBAAyB;YACzB,MAAM,eAAe,GAAG,oBAAoB,CACxC,WAAW,EACX,OAAO,CAAC,WAAW,CAAC,OAAO,EAC3B,UAAU,CAAC,KAAK,CACnB,CAAC;YAEF,6CAA6C;YAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;YACnE,MAAM,OAAO,GAAG;gBACZ,eAAe,IAAI,EAAE;gBACrB,EAAE;gBACF,sBAAsB;gBACtB,oBAAoB,QAAQ,CAAC,EAAE,IAAI;gBACnC,aAAa,QAAQ,CAAC,MAAM,EAAE;gBAC9B,EAAE;gBACF,qBAAqB;gBACrB,eAAe;gBACf,EAAE;gBACF,eAAe;gBACf,UAAU;gBACV,EAAE;gBACF,kBAAkB;gBAClB,YAAY,YAAY,EAAE;gBAC1B,cAAc,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;gBAC3C,eAAe,OAAO,CAAC,WAAW,CAAC,QAAQ,GAAG,SAAS,EAAE;gBACzD,EAAE;gBACF,oBAAoB;gBACpB,cAAc,YAAY,EAAE;gBAC5B,gBAAgB,KAAK,CAAC,UAAU,EAAE;gBAClC,YAAY,KAAK,CAAC,KAAK,IAAI,OAAO,EAAE;gBACpC,oBAAoB,KAAK,CAAC,YAAY,EAAE;gBACxC,EAAE;gBACF,uBAAuB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG;aAC5H,CAAC;YAEF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,OAAO,CAAC,IAAI,CACR,EAAE,EACF,cAAc,EACd,yEAAyE,QAAQ,CAAC,EAAE,+BAA+B,EACnH,gGAAgG,EAChG,EAAE,EACF,gBAAgB,EAChB,EAAE,EACF,UAAU,CACb,CAAC;YAEF,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC3B;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,SAAS,oBAAoB,CACzB,WAAwD,EACxD,WAAmB,EACnB,aAAsB;IAEtB,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc;YACtC,CAAC,CAAC,uBAAuB,WAAW,CAAC,cAAc,IAAI;YACvD,CAAC,CAAC,gCAAgC,CAAC;QACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO;YACH,+BAA+B,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE;YACvD,KAAK,OAAO,EAAE;YACd,iBAAiB,WAAW,CAAC,SAAS,IAAI,SAAS,EAAE;YACrD,kBAAkB,WAAW,CAAC,YAAY,EAAE;YAC5C,EAAE;YACF,mEAAmE;YACnE,WAAW,CAAC,cAAc;gBACtB,CAAC,CAAC,kBAAkB,WAAW,CAAC,cAAc,qBAAqB,WAAW,CAAC,cAAc,iCAAiC;gBAC9H,CAAC,CAAC,8FAA8F;SACvG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,OAAO;QACH,8CAA8C;QAC9C,iBAAiB,WAAW,EAAE;QAC9B,EAAE;QACF,+CAA+C;QAC/C,aAAa,CAAC,CAAC,CAAC,0BAA0B,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;KACjE;SACI,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
@@ -20,7 +20,8 @@ import { getMergedOverrides, resolveDocReview } from '../core/overrides.js';
20
20
  import { submitForReview } from '../core/reviews.js';
21
21
  import { loadDocSchema, validateDoc, formatValidationErrors } from '../core/schema.js';
22
22
  import { getDocStepState, getCompletedStepIds, recordStepCompletion, markFinalized } from '../core/steps.js';
23
- import { getProject } from '../core/registry.js';
23
+ import { resolveActive, isError } from './utils.js';
24
+ import { getProject, resolveContextDir } from '../core/registry.js';
24
25
  /** Scales that activate sequential mode (medium and above) */
25
26
  const SEQUENTIAL_SCALES = new Set(['medium', 'large']);
26
27
  /**
@@ -42,22 +43,11 @@ export function registerDocTools(server, builtinDir, customDir) {
42
43
  .optional()
43
44
  .describe('Sequential step ID (required for docs with steps at medium/large scale). Use project_status to see available steps.'),
44
45
  }, async ({ project_name, doc_id, content, step }) => {
45
- // Resolve current iteration
46
- const entry = await getProject(project_name);
47
- if (!entry || entry.currentIteration === 0) {
48
- return {
49
- content: [
50
- {
51
- type: 'text',
52
- text: `项目 "${project_name}" 未找到或尚未开始迭代。请先调用 iteration_start。`,
53
- },
54
- ],
55
- isError: true,
56
- };
57
- }
58
- const iteration = entry.currentIteration;
46
+ const ctx = await resolveActive(project_name);
47
+ if (isError(ctx))
48
+ return ctx;
59
49
  // Load workflow to get doc definition (format, review defaults)
60
- const state = await readState(project_name, iteration);
50
+ const state = await readState(project_name, ctx.number, ctx.dir);
61
51
  const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
62
52
  const docDef = wf.definition.docs[doc_id];
63
53
  const isHtml = docDef?.format === 'html';
@@ -102,7 +92,7 @@ export function registerDocTools(server, builtinDir, customDir) {
102
92
  }
103
93
  // ─── Sequential Mode ───
104
94
  if (isSequentialActive(docDef, state.scale)) {
105
- return handleSequentialWrite(builtinDir, customDir, state.workflow, project_name, iteration, doc_id, content, step, docDef, state.scale);
95
+ return handleSequentialWrite(builtinDir, customDir, state.workflow, project_name, ctx.number, doc_id, content, step, docDef, state.scale, ctx.dir);
106
96
  }
107
97
  // ─── Normal Mode (no steps or small scale) ───
108
98
  // If step was passed but sequential is not active, warn but proceed
@@ -126,12 +116,12 @@ export function registerDocTools(server, builtinDir, customDir) {
126
116
  }
127
117
  }
128
118
  // Write the document with correct extension
129
- const filePath = await writeDoc(project_name, iteration, doc_id, content, docDef);
119
+ const filePath = await writeDoc(project_name, ctx.number, doc_id, content, docDef, ctx.dir);
130
120
  // Check if review is required
131
121
  const overrides = await getMergedOverrides(project_name);
132
122
  const needsReview = docDef ? resolveDocReview(doc_id, docDef, overrides) : false;
133
123
  if (needsReview) {
134
- await submitForReview(project_name, iteration, doc_id);
124
+ await submitForReview(project_name, ctx.number, doc_id, ctx.dir);
135
125
  const docName = docDef?.name ?? doc_id;
136
126
  return {
137
127
  content: [
@@ -159,26 +149,50 @@ export function registerDocTools(server, builtinDir, customDir) {
159
149
  ],
160
150
  };
161
151
  });
162
- server.tool('doc_read', 'Read a project document from the project docs directory.', {
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.', {
163
153
  project_name: z.string().describe('Project name'),
164
154
  doc_id: z.string().describe('Document ID to read'),
165
- }, async ({ project_name, doc_id }) => {
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 }) => {
166
160
  try {
167
- // Resolve current iteration
168
- const entry = await getProject(project_name);
169
- if (!entry || entry.currentIteration === 0) {
170
- return {
171
- content: [
172
- {
173
- type: 'text',
174
- text: `项目 "${project_name}" 未找到或尚未开始迭代。请先调用 iteration_start。`,
175
- },
176
- ],
177
- isError: true,
178
- };
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;
179
186
  }
180
- const iteration = entry.currentIteration;
181
- const docContent = await readDoc(project_name, iteration, doc_id);
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);
182
196
  return {
183
197
  content: [
184
198
  {
@@ -200,37 +214,59 @@ export function registerDocTools(server, builtinDir, customDir) {
200
214
  };
201
215
  }
202
216
  });
203
- server.tool('doc_list', 'List all project documents in the project docs directory.', {
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.', {
204
218
  project_name: z.string().describe('Project name'),
205
- }, async ({ project_name }) => {
206
- // Resolve current iteration
207
- const entry = await getProject(project_name);
208
- if (!entry || entry.currentIteration === 0) {
209
- return {
210
- content: [
211
- {
212
- type: 'text',
213
- text: `项目 "${project_name}" 未找到或尚未开始迭代。请先调用 iteration_start。`,
214
- },
215
- ],
216
- isError: true,
217
- };
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;
218
255
  }
219
- const iteration = entry.currentIteration;
220
- const docs = await listDocs(project_name, iteration);
256
+ const docs = await listDocs(project_name, contextNumber, contextDir);
221
257
  return {
222
258
  content: [
223
259
  {
224
260
  type: 'text',
225
261
  text: docs.length > 0
226
- ? `Documents:\n${docs.map((d) => `- ${d}`).join('\n')}`
227
- : 'No documents found for this iteration.',
262
+ ? `Documents (${contextLabel}):\n${docs.map((d) => `- ${d}`).join('\n')}`
263
+ : `No documents found for ${contextLabel}.`,
228
264
  },
229
265
  ],
230
266
  };
231
267
  });
232
268
  }
233
- async function handleSequentialWrite(builtinDir, customDir, workflowName, projectName, iteration, docId, content, step, docDef, scale) {
269
+ async function handleSequentialWrite(builtinDir, customDir, workflowName, projectName, iteration, docId, content, step, docDef, scale, contextDir) {
234
270
  const steps = docDef.steps;
235
271
  const stepIds = steps.map((s) => s.id);
236
272
  const stepNames = steps.map((s) => `${s.id} (${s.name})`).join(', ');
@@ -266,7 +302,7 @@ async function handleSequentialWrite(builtinDir, customDir, workflowName, projec
266
302
  };
267
303
  }
268
304
  const stepIndex = stepIds.indexOf(step);
269
- const stepState = await getDocStepState(projectName, iteration, docId);
305
+ const stepState = await getDocStepState(projectName, iteration, docId, contextDir);
270
306
  const completedIds = getCompletedStepIds(stepState);
271
307
  // Guard: prerequisite steps must be completed (hard enforcement)
272
308
  for (let i = 0; i < stepIndex; i++) {
@@ -302,13 +338,13 @@ async function handleSequentialWrite(builtinDir, customDir, workflowName, projec
302
338
  }
303
339
  }
304
340
  // Write the step artifact
305
- const artifactPath = await writeStepArtifact(projectName, iteration, docId, step, content, stepDef.format);
341
+ const artifactPath = await writeStepArtifact(projectName, iteration, docId, step, content, stepDef.format, contextDir);
306
342
  // Record step completion (handles rollback if overwriting)
307
- await recordStepCompletion(projectName, iteration, docId, step, artifactPath, stepIds);
343
+ await recordStepCompletion(projectName, iteration, docId, step, artifactPath, stepIds, contextDir);
308
344
  const isLastStep = stepIndex === steps.length - 1;
309
345
  if (isLastStep) {
310
346
  // Auto-merge: validate against final doc schema, write formal doc, trigger review
311
- return handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef);
347
+ return handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef, contextDir);
312
348
  }
313
349
  // Not the last step — return progress info
314
350
  const nextStep = steps[stepIndex + 1];
@@ -326,7 +362,7 @@ async function handleSequentialWrite(builtinDir, customDir, workflowName, projec
326
362
  ],
327
363
  };
328
364
  }
329
- async function handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef) {
365
+ async function handleFinalStep(builtinDir, customDir, workflowName, projectName, iteration, docId, content, docDef, scale, stepDef, contextDir) {
330
366
  const isHtml = docDef.format === 'html';
331
367
  // Validate against the final document schema (e.g. prd.json)
332
368
  const finalSchema = await loadDocSchema(builtinDir, customDir, workflowName, docId);
@@ -351,14 +387,14 @@ async function handleFinalStep(builtinDir, customDir, workflowName, projectName,
351
387
  }
352
388
  }
353
389
  // Write the formal document
354
- const filePath = await writeDoc(projectName, iteration, docId, content, docDef);
390
+ const filePath = await writeDoc(projectName, iteration, docId, content, docDef, contextDir);
355
391
  // Mark as finalized
356
- await markFinalized(projectName, iteration, docId);
392
+ await markFinalized(projectName, iteration, docId, contextDir);
357
393
  // Check if review is required
358
394
  const overrides = await getMergedOverrides(projectName);
359
395
  const needsReview = resolveDocReview(docId, docDef, overrides);
360
396
  if (needsReview) {
361
- await submitForReview(projectName, iteration, docId);
397
+ await submitForReview(projectName, iteration, docId, contextDir);
362
398
  const docName = docDef.name ?? docId;
363
399
  return {
364
400
  content: [