@s_s/harmonia 1.1.1 → 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 (57) hide show
  1. package/README.md +413 -205
  2. package/build/core/dispatch.d.ts +16 -13
  3. package/build/core/dispatch.js +38 -33
  4. package/build/core/dispatch.js.map +1 -1
  5. package/build/core/docs.d.ts +15 -11
  6. package/build/core/docs.js +24 -19
  7. package/build/core/docs.js.map +1 -1
  8. package/build/core/issues.d.ts +37 -0
  9. package/build/core/issues.js +100 -0
  10. package/build/core/issues.js.map +1 -0
  11. package/build/core/registry.d.ts +63 -6
  12. package/build/core/registry.js +109 -8
  13. package/build/core/registry.js.map +1 -1
  14. package/build/core/reviews.d.ts +9 -8
  15. package/build/core/reviews.js +22 -20
  16. package/build/core/reviews.js.map +1 -1
  17. package/build/core/state.d.ts +18 -10
  18. package/build/core/state.js +50 -27
  19. package/build/core/state.js.map +1 -1
  20. package/build/core/steps.d.ts +8 -7
  21. package/build/core/steps.js +21 -19
  22. package/build/core/steps.js.map +1 -1
  23. package/build/core/types.d.ts +32 -1
  24. package/build/index.js +34 -3
  25. package/build/index.js.map +1 -1
  26. package/build/setup/templates.js +79 -3
  27. package/build/setup/templates.js.map +1 -1
  28. package/build/tools/approve-doc.js +9 -2
  29. package/build/tools/approve-doc.js.map +1 -1
  30. package/build/tools/dispatch-role.js +8 -4
  31. package/build/tools/dispatch-role.js.map +1 -1
  32. package/build/tools/doc-tools.js +100 -21
  33. package/build/tools/doc-tools.js.map +1 -1
  34. package/build/tools/get-project-status.js +108 -17
  35. package/build/tools/get-project-status.js.map +1 -1
  36. package/build/tools/issue-tools.d.ts +10 -0
  37. package/build/tools/issue-tools.js +169 -0
  38. package/build/tools/issue-tools.js.map +1 -0
  39. package/build/tools/iteration-start.d.ts +13 -0
  40. package/build/tools/iteration-start.js +103 -0
  41. package/build/tools/iteration-start.js.map +1 -0
  42. package/build/tools/patch-start.d.ts +14 -0
  43. package/build/tools/patch-start.js +97 -0
  44. package/build/tools/patch-start.js.map +1 -0
  45. package/build/tools/project-init.d.ts +5 -1
  46. package/build/tools/project-init.js +28 -14
  47. package/build/tools/project-init.js.map +1 -1
  48. package/build/tools/report-dispatch.js +23 -19
  49. package/build/tools/report-dispatch.js.map +1 -1
  50. package/build/tools/set-scale.js +7 -4
  51. package/build/tools/set-scale.js.map +1 -1
  52. package/build/tools/update-phase.js +11 -7
  53. package/build/tools/update-phase.js.map +1 -1
  54. package/build/tools/utils.d.ts +34 -0
  55. package/build/tools/utils.js +61 -0
  56. package/build/tools/utils.js.map +1 -0
  57. package/package.json +1 -1
@@ -15,6 +15,7 @@ import { getDispatch, updateDispatch, createSession, updateSession, findSessionB
15
15
  import { listDocs } from '../core/docs.js';
16
16
  import { readState } from '../core/state.js';
17
17
  import { loadWorkflow } from '../core/workflow.js';
18
+ import { resolveActive, isError } from './utils.js';
18
19
  export function registerReportDispatch(server, builtinDir, customDir) {
19
20
  server.tool('dispatch_report', 'Report dispatch status after launching or completing a team member agent. Call with agent_session_id after launching to register the session. Call with status="completed" or "failed" when the agent finishes.', {
20
21
  project_name: z.string().describe('Project name'),
@@ -35,8 +36,11 @@ export function registerReportDispatch(server, builtinDir, customDir) {
35
36
  note: z.string().optional().describe('Optional note (e.g. failure reason)'),
36
37
  }, async ({ project_name, dispatch_id, status, agent_session_id, agent_type, label, note }) => {
37
38
  try {
39
+ const ctx = await resolveActive(project_name);
40
+ if (isError(ctx))
41
+ return ctx;
38
42
  // Load the dispatch record
39
- const dispatch = await getDispatch(project_name, dispatch_id);
43
+ const dispatch = await getDispatch(project_name, ctx.number, dispatch_id, ctx.dir);
40
44
  if (!dispatch) {
41
45
  return {
42
46
  content: [
@@ -68,7 +72,7 @@ export function registerReportDispatch(server, builtinDir, customDir) {
68
72
  // Handle session registration (when agent_session_id is provided)
69
73
  let session = null;
70
74
  if (agent_session_id) {
71
- session = await resolveOrCreateSession(project_name, dispatch, agent_session_id, agent_type, label);
75
+ session = await resolveOrCreateSession(project_name, ctx.number, dispatch, agent_session_id, agent_type, label, ctx.dir);
72
76
  results.push(`Session: ${session.id} (agent: ${agent_session_id}, status: ${session.status})`);
73
77
  }
74
78
  // Handle status transitions
@@ -76,38 +80,38 @@ export function registerReportDispatch(server, builtinDir, customDir) {
76
80
  effectiveStatus === 'failed' ||
77
81
  effectiveStatus === 'cancelled') {
78
82
  // Terminal states: update dispatch and transition session
79
- await updateDispatch(project_name, dispatch_id, {
83
+ await updateDispatch(project_name, ctx.number, dispatch_id, {
80
84
  status: effectiveStatus,
81
85
  ...(session ? { sessionId: session.id } : {}),
82
86
  ...(note ? { note } : {}),
83
- });
87
+ }, ctx.dir);
84
88
  // Transition session: completed → idle, failed → lost
85
89
  const sessionId = session?.id ?? dispatch.sessionId;
86
90
  if (sessionId) {
87
91
  const newSessionStatus = effectiveStatus === 'completed' ? 'idle' : 'lost';
88
- await updateSession(project_name, sessionId, { status: newSessionStatus });
92
+ await updateSession(project_name, ctx.number, sessionId, { status: newSessionStatus }, ctx.dir);
89
93
  results.push(`Session ${sessionId} → ${newSessionStatus}`);
90
94
  }
91
95
  results.push(`Dispatch ${dispatch_id} → ${effectiveStatus}`);
92
96
  }
93
97
  else {
94
98
  // Running: update dispatch status + associate session
95
- await updateDispatch(project_name, dispatch_id, {
99
+ await updateDispatch(project_name, ctx.number, dispatch_id, {
96
100
  status: 'running',
97
101
  ...(session ? { sessionId: session.id } : {}),
98
102
  ...(note ? { note } : {}),
99
- });
103
+ }, ctx.dir);
100
104
  // Mark session as active
101
105
  const sessionId = session?.id ?? dispatch.sessionId;
102
106
  if (sessionId) {
103
- await updateSession(project_name, sessionId, { status: 'active' });
107
+ await updateSession(project_name, ctx.number, sessionId, { status: 'active' }, ctx.dir);
104
108
  }
105
109
  results.push(`Dispatch ${dispatch_id} → running`);
106
110
  }
107
111
  // Completion check: warn if expectedOutputs are missing
108
112
  if (effectiveStatus === 'completed' && dispatch.expectedOutputs.length > 0) {
109
- const existingDocs = await listDocs(project_name);
110
- const state = await readState(project_name);
113
+ const existingDocs = await listDocs(project_name, ctx.number, ctx.dir);
114
+ const state = await readState(project_name, ctx.number, ctx.dir);
111
115
  const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
112
116
  const missingOutputs = dispatch.expectedOutputs.filter((docId) => {
113
117
  const docDef = wf.definition.docs[docId];
@@ -149,31 +153,31 @@ export function registerReportDispatch(server, builtinDir, customDir) {
149
153
  /**
150
154
  * Resolve an existing session by agent session ID, or create a new one.
151
155
  */
152
- async function resolveOrCreateSession(projectName, dispatch, agentSessionId, agentType, label) {
156
+ async function resolveOrCreateSession(projectName, iteration, dispatch, agentSessionId, agentType, label, contextDir) {
153
157
  // If the dispatch already has a session, update it with the agent session ID
154
158
  if (dispatch.sessionId) {
155
- const sessions = await readSessions(projectName);
159
+ const sessions = await readSessions(projectName, iteration, contextDir);
156
160
  const existing = sessions.find((s) => s.id === dispatch.sessionId);
157
161
  if (existing) {
158
- return await updateSession(projectName, existing.id, {
162
+ return await updateSession(projectName, iteration, existing.id, {
159
163
  agentSessionId,
160
164
  ...(agentType ? { agentType } : {}),
161
165
  ...(label ? { label } : {}),
162
166
  status: 'active',
163
- });
167
+ }, contextDir);
164
168
  }
165
169
  }
166
170
  // Check if a session with this agent session ID already exists for this role
167
- const existingByAgent = await findSessionByAgentId(projectName, dispatch.role, agentSessionId);
171
+ const existingByAgent = await findSessionByAgentId(projectName, iteration, dispatch.role, agentSessionId, contextDir);
168
172
  if (existingByAgent) {
169
- return await updateSession(projectName, existingByAgent.id, {
173
+ return await updateSession(projectName, iteration, existingByAgent.id, {
170
174
  status: 'active',
171
175
  ...(agentType ? { agentType } : {}),
172
176
  ...(label ? { label } : {}),
173
- });
177
+ }, contextDir);
174
178
  }
175
179
  // Create a new session
176
- const session = await createSession(projectName, dispatch.role, agentType, label);
177
- return await updateSession(projectName, session.id, { agentSessionId });
180
+ const session = await createSession(projectName, iteration, dispatch.role, agentType, label, contextDir);
181
+ return await updateSession(projectName, iteration, session.id, { agentSessionId }, contextDir);
178
182
  }
179
183
  //# sourceMappingURL=report-dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-dispatch.js","sourceRoot":"","sources":["../../src/tools/report-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-dispatch.js","sourceRoot":"","sources":["../../src/tools/report-dispatch.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,17 @@ import { z } from 'zod';
6
6
  import { readState, setScale } from '../core/state.js';
7
7
  import { loadWorkflow } from '../core/workflow.js';
8
8
  import { readReviews } from '../core/reviews.js';
9
+ import { resolveActive, isError } from './utils.js';
9
10
  export function registerSetScale(server, builtinDir, customDir) {
10
11
  server.tool('project_set_scale', 'Set the project scale after PRD approval. Scale determines which documents are required (full/lite/skip) and enables sequential mode for medium/large projects. Scale is immutable once set — if requirements change significantly, redo the PRD.', {
11
12
  project_name: z.string().describe('项目名称'),
12
13
  scale: z.enum(['small', 'medium', 'large']).describe('项目规模 (small/medium/large)'),
13
14
  }, async ({ project_name, scale }) => {
14
15
  try {
15
- // Check project exists
16
- const state = await readState(project_name);
16
+ const ctx = await resolveActive(project_name);
17
+ if (isError(ctx))
18
+ return ctx;
19
+ const state = await readState(project_name, ctx.number, ctx.dir);
17
20
  // Guard: scale already set
18
21
  if (state.scale !== null) {
19
22
  return {
@@ -27,7 +30,7 @@ export function registerSetScale(server, builtinDir, customDir) {
27
30
  };
28
31
  }
29
32
  // Guard: PRD must be approved
30
- const reviews = await readReviews(project_name);
33
+ const reviews = await readReviews(project_name, ctx.number, ctx.dir);
31
34
  const prdReview = reviews['prd'];
32
35
  if (!prdReview || prdReview.status !== 'approved') {
33
36
  const prdStatus = prdReview ? prdReview.status : '未提交';
@@ -42,7 +45,7 @@ export function registerSetScale(server, builtinDir, customDir) {
42
45
  };
43
46
  }
44
47
  // Set scale
45
- const updated = await setScale(project_name, scale);
48
+ const updated = await setScale(project_name, ctx.number, scale, ctx.dir);
46
49
  // Build doc list based on scale
47
50
  const wf = await loadWorkflow(builtinDir, customDir, state.workflow);
48
51
  const requiredDocs = Object.entries(wf.definition.docs)
@@ -1 +1 @@
1
- {"version":3,"file":"set-scale.js","sourceRoot":"","sources":["../../src/tools/set-scale.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"set-scale.js","sourceRoot":"","sources":["../../src/tools/set-scale.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ import { listDocs } from '../core/docs.js';
15
15
  import { readReviews } from '../core/reviews.js';
16
16
  import { readDispatches } from '../core/dispatch.js';
17
17
  import { getMergedOverrides, resolveDocReview } from '../core/overrides.js';
18
+ import { resolveActive, isError } from './utils.js';
18
19
  export function registerUpdatePhase(server, builtinDir, customDir) {
19
20
  server.tool('phase_update', 'Update the status of a project phase. When a phase is completed, the next phase is automatically started. Completing a phase checks that all required doc outputs exist.', {
20
21
  project_name: z.string().describe('Project name'),
@@ -24,11 +25,14 @@ export function registerUpdatePhase(server, builtinDir, customDir) {
24
25
  force: z.boolean().optional().describe('Force completion even if outputs are missing (default: false)'),
25
26
  }, async ({ project_name, phase_id, status, blocked_reason, force }) => {
26
27
  try {
28
+ const ctx = await resolveActive(project_name);
29
+ if (isError(ctx))
30
+ return ctx;
27
31
  // ── Completion guards ──
28
32
  if (status === 'completed' && !force) {
29
- const currentState = await readState(project_name);
33
+ const currentState = await readState(project_name, ctx.number, ctx.dir);
30
34
  const wf = await loadWorkflow(builtinDir, customDir, currentState.workflow);
31
- const existingDocs = await listDocs(project_name);
35
+ const existingDocs = await listDocs(project_name, ctx.number, ctx.dir);
32
36
  const phaseDef = wf.definition.phases.find((p) => p.id === phase_id);
33
37
  const phaseIndex = wf.definition.phases.findIndex((p) => p.id === phase_id);
34
38
  const guardErrors = [];
@@ -36,12 +40,12 @@ export function registerUpdatePhase(server, builtinDir, customDir) {
36
40
  if (currentState.scale === null) {
37
41
  guardErrors.push('Scale 尚未设定。请先调用 project_set_scale 设定项目规模。');
38
42
  }
39
- // Guard 1: Prior phases must all be completed
43
+ // Guard 1: Prior phases must all be completed (skipped counts as completed)
40
44
  if (phaseIndex > 0) {
41
45
  const priorPhases = wf.definition.phases.slice(0, phaseIndex);
42
46
  const incompletePriors = priorPhases.filter((pp) => {
43
47
  const ps = currentState.phases.find((s) => s.id === pp.id);
44
- return !ps || ps.status !== 'completed';
48
+ return !ps || (ps.status !== 'completed' && ps.status !== 'skipped');
45
49
  });
46
50
  if (incompletePriors.length > 0) {
47
51
  guardErrors.push(`前序阶段未完成: ${incompletePriors.map((p) => p.id).join(', ')}`);
@@ -67,7 +71,7 @@ export function registerUpdatePhase(server, builtinDir, customDir) {
67
71
  }
68
72
  // Guard 3: Docs requiring review must be approved
69
73
  const overrides = await getMergedOverrides(project_name);
70
- const reviews = await readReviews(project_name);
74
+ const reviews = await readReviews(project_name, ctx.number, ctx.dir);
71
75
  const unapprovedDocs = phaseDef.outputs.filter((o) => {
72
76
  const docDef = wf.definition.docs[o];
73
77
  if (!docDef)
@@ -88,7 +92,7 @@ export function registerUpdatePhase(server, builtinDir, customDir) {
88
92
  }
89
93
  }
90
94
  // Guard 4: No active dispatches
91
- const dispatches = await readDispatches(project_name);
95
+ const dispatches = await readDispatches(project_name, ctx.number, ctx.dir);
92
96
  const activeDispatches = dispatches.filter((d) => d.status === 'dispatched' || d.status === 'running');
93
97
  if (activeDispatches.length > 0) {
94
98
  const activeList = activeDispatches.map((d) => `${d.id} (${d.role}, ${d.status})`).join(', ');
@@ -112,7 +116,7 @@ export function registerUpdatePhase(server, builtinDir, customDir) {
112
116
  };
113
117
  }
114
118
  }
115
- const state = await updatePhaseStatus(project_name, phase_id, status, blocked_reason);
119
+ const state = await updatePhaseStatus(project_name, ctx.number, phase_id, status, blocked_reason, ctx.dir);
116
120
  const phasesSummary = state.phases
117
121
  .map((p) => {
118
122
  const marker = p.id === state.currentPhase ? ' <-- current' : '';
@@ -1 +1 @@
1
- {"version":3,"file":"update-phase.js","sourceRoot":"","sources":["../../src/tools/update-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-phase.js","sourceRoot":"","sources":["../../src/tools/update-phase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared utility for tool handlers — resolves the active context (iteration or patch)
3
+ * for a project. All tools that operate on iteration/patch-level data should use this
4
+ * instead of directly reading entry.currentIteration.
5
+ */
6
+ import type { ProjectEntry } from '../core/registry.js';
7
+ export interface ResolvedContext {
8
+ entry: ProjectEntry;
9
+ /** The iteration or patch number */
10
+ number: number;
11
+ /** "iteration" or "patch" */
12
+ type: 'iteration' | 'patch';
13
+ /** Absolute path to the context directory (iter-N/ or patch-N/) */
14
+ dir: string;
15
+ /** The raw activeContext string, e.g. "iter-1" or "patch-2" */
16
+ activeContext: string;
17
+ }
18
+ type ToolResult = {
19
+ content: {
20
+ type: 'text';
21
+ text: string;
22
+ }[];
23
+ isError?: boolean;
24
+ };
25
+ /**
26
+ * Resolve the active context for a project. Returns either a ResolvedContext
27
+ * or a ToolResult error (to be returned directly from the tool handler).
28
+ */
29
+ export declare function resolveActive(projectName: string): Promise<ResolvedContext | ToolResult>;
30
+ /**
31
+ * Type guard: check if the result is an error (ToolResult) or a resolved context.
32
+ */
33
+ export declare function isError(result: ResolvedContext | ToolResult): result is ToolResult;
34
+ export {};
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shared utility for tool handlers — resolves the active context (iteration or patch)
3
+ * for a project. All tools that operate on iteration/patch-level data should use this
4
+ * instead of directly reading entry.currentIteration.
5
+ */
6
+ import { getProject, resolveContextDir } from '../core/registry.js';
7
+ /**
8
+ * Resolve the active context for a project. Returns either a ResolvedContext
9
+ * or a ToolResult error (to be returned directly from the tool handler).
10
+ */
11
+ export async function resolveActive(projectName) {
12
+ const entry = await getProject(projectName);
13
+ if (!entry) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: 'text',
18
+ text: `项目 "${projectName}" 未注册。请先调用 project_init 注册项目。`,
19
+ },
20
+ ],
21
+ isError: true,
22
+ };
23
+ }
24
+ if (!entry.activeContext) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: `项目 "${projectName}" 尚未开始迭代或补丁。请先调用 iteration_start 或 patch_start。`,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ const resolved = resolveContextDir(projectName, entry.activeContext);
36
+ if (!resolved) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: `项目 "${projectName}" 的 activeContext "${entry.activeContext}" 无法解析。数据可能已损坏。`,
42
+ },
43
+ ],
44
+ isError: true,
45
+ };
46
+ }
47
+ return {
48
+ entry,
49
+ number: resolved.number,
50
+ type: resolved.type,
51
+ dir: resolved.dir,
52
+ activeContext: entry.activeContext,
53
+ };
54
+ }
55
+ /**
56
+ * Type guard: check if the result is an error (ToolResult) or a resolved context.
57
+ */
58
+ export function isError(result) {
59
+ return 'content' in result && !('entry' in result);
60
+ }
61
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAoBpE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,WAAW,+BAA+B;iBAC1D;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,WAAW,iDAAiD;iBAC5E;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,WAAW,sBAAsB,KAAK,CAAC,aAAa,iBAAiB;iBACrF;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,OAAO;QACH,KAAK;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,aAAa,EAAE,KAAK,CAAC,aAAa;KACrC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAoC;IACxD,OAAO,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@s_s/harmonia",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "description": "Multi-agent orchestration MCP server with pluggable workflows",
5
5
  "type": "module",
6
6
  "main": "./build/index.js",