@s_s/harmonia 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +140 -392
  2. package/build/cli/setup.d.ts +4 -2
  3. package/build/cli/setup.js +44 -18
  4. package/build/cli/setup.js.map +1 -1
  5. package/build/core/action-registry.d.ts +36 -0
  6. package/build/core/action-registry.js +53 -0
  7. package/build/core/action-registry.js.map +1 -0
  8. package/build/core/artifacts.d.ts +66 -0
  9. package/build/core/artifacts.js +178 -0
  10. package/build/core/artifacts.js.map +1 -0
  11. package/build/core/dispatch.d.ts +18 -11
  12. package/build/core/dispatch.js +43 -33
  13. package/build/core/dispatch.js.map +1 -1
  14. package/build/core/issues.d.ts +37 -0
  15. package/build/core/issues.js +100 -0
  16. package/build/core/issues.js.map +1 -0
  17. package/build/core/overrides.d.ts +19 -26
  18. package/build/core/overrides.js +32 -98
  19. package/build/core/overrides.js.map +1 -1
  20. package/build/core/plugin.d.ts +86 -0
  21. package/build/core/plugin.js +332 -0
  22. package/build/core/plugin.js.map +1 -0
  23. package/build/core/registry.d.ts +36 -3
  24. package/build/core/registry.js +63 -5
  25. package/build/core/registry.js.map +1 -1
  26. package/build/core/reviews.d.ts +13 -13
  27. package/build/core/reviews.js +31 -32
  28. package/build/core/reviews.js.map +1 -1
  29. package/build/core/schema.d.ts +43 -15
  30. package/build/core/schema.js +124 -20
  31. package/build/core/schema.js.map +1 -1
  32. package/build/core/state.d.ts +29 -22
  33. package/build/core/state.js +49 -81
  34. package/build/core/state.js.map +1 -1
  35. package/build/core/steps.d.ts +15 -15
  36. package/build/core/steps.js +32 -33
  37. package/build/core/steps.js.map +1 -1
  38. package/build/core/tree-utils.d.ts +52 -0
  39. package/build/core/tree-utils.js +226 -0
  40. package/build/core/tree-utils.js.map +1 -0
  41. package/build/core/types.d.ts +417 -117
  42. package/build/core/types.js +15 -1
  43. package/build/core/types.js.map +1 -1
  44. package/build/core/workflow-engine.d.ts +68 -0
  45. package/build/core/workflow-engine.js +821 -0
  46. package/build/core/workflow-engine.js.map +1 -0
  47. package/build/core/workflow-validator.d.ts +22 -0
  48. package/build/core/workflow-validator.js +489 -0
  49. package/build/core/workflow-validator.js.map +1 -0
  50. package/build/index.js +28 -25
  51. package/build/index.js.map +1 -1
  52. package/build/setup/inject.d.ts +4 -4
  53. package/build/setup/inject.js +6 -6
  54. package/build/setup/inject.js.map +1 -1
  55. package/build/setup/templates.d.ts +9 -7
  56. package/build/setup/templates.js +68 -103
  57. package/build/setup/templates.js.map +1 -1
  58. package/build/tools/artifact-approve.d.ts +8 -0
  59. package/build/tools/artifact-approve.js +94 -0
  60. package/build/tools/artifact-approve.js.map +1 -0
  61. package/build/tools/artifact-schema.d.ts +12 -0
  62. package/build/tools/artifact-schema.js +148 -0
  63. package/build/tools/artifact-schema.js.map +1 -0
  64. package/build/tools/artifact-tools.d.ts +18 -0
  65. package/build/tools/artifact-tools.js +465 -0
  66. package/build/tools/artifact-tools.js.map +1 -0
  67. package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
  68. package/build/tools/dispatch-report.js +261 -0
  69. package/build/tools/dispatch-report.js.map +1 -0
  70. package/build/tools/engine-helpers.d.ts +41 -0
  71. package/build/tools/engine-helpers.js +182 -0
  72. package/build/tools/engine-helpers.js.map +1 -0
  73. package/build/tools/get-project-status.d.ts +6 -4
  74. package/build/tools/get-project-status.js +308 -246
  75. package/build/tools/get-project-status.js.map +1 -1
  76. package/build/tools/get-role-prompt.d.ts +1 -1
  77. package/build/tools/get-role-prompt.js +7 -41
  78. package/build/tools/get-role-prompt.js.map +1 -1
  79. package/build/tools/issue-tools.d.ts +10 -0
  80. package/build/tools/issue-tools.js +169 -0
  81. package/build/tools/issue-tools.js.map +1 -0
  82. package/build/tools/iteration-start.d.ts +7 -4
  83. package/build/tools/iteration-start.js +51 -20
  84. package/build/tools/iteration-start.js.map +1 -1
  85. package/build/tools/loop-done.d.ts +11 -0
  86. package/build/tools/loop-done.js +109 -0
  87. package/build/tools/loop-done.js.map +1 -0
  88. package/build/tools/patch-start.d.ts +16 -0
  89. package/build/tools/patch-start.js +122 -0
  90. package/build/tools/patch-start.js.map +1 -0
  91. package/build/tools/project-init.d.ts +5 -5
  92. package/build/tools/project-init.js +47 -18
  93. package/build/tools/project-init.js.map +1 -1
  94. package/build/tools/role-dispatch.d.ts +55 -0
  95. package/build/tools/role-dispatch.js +508 -0
  96. package/build/tools/role-dispatch.js.map +1 -0
  97. package/build/tools/utils.d.ts +40 -0
  98. package/build/tools/utils.js +97 -0
  99. package/build/tools/utils.js.map +1 -0
  100. package/package.json +1 -1
  101. package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
  102. package/{build → workflows/dev}/hooks/content.js +27 -18
  103. package/workflows/dev/hooks/index.js +52 -0
  104. package/{build → workflows/dev}/hooks/openclaw.js +31 -20
  105. package/{build → workflows/dev}/hooks/opencode.js +31 -20
  106. package/workflows/dev/roles/architect.md +68 -28
  107. package/workflows/dev/roles/coordinator.md +103 -0
  108. package/workflows/dev/roles/developer.md +5 -5
  109. package/workflows/dev/roles/tester.md +19 -19
  110. package/workflows/dev/schemas/api-contract.json +42 -0
  111. package/workflows/dev/schemas/api-design.json +30 -13
  112. package/workflows/dev/schemas/data-model.json +20 -7
  113. package/workflows/dev/schemas/prd.completeness-check.json +6 -5
  114. package/workflows/dev/schemas/prd.draft.json +13 -5
  115. package/workflows/dev/schemas/prd.final.json +34 -11
  116. package/workflows/dev/schemas/prd.json +29 -11
  117. package/workflows/dev/schemas/prd.requirements.json +6 -5
  118. package/workflows/dev/schemas/prototype.json +6 -2
  119. package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
  120. package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
  121. package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
  122. package/workflows/dev/schemas/task-breakdown.final.json +8 -3
  123. package/workflows/dev/schemas/task-breakdown.json +8 -3
  124. package/workflows/dev/schemas/tech-design.analysis.json +6 -5
  125. package/workflows/dev/schemas/tech-design.draft.json +14 -5
  126. package/workflows/dev/schemas/tech-design.final.json +39 -13
  127. package/workflows/dev/schemas/tech-design.json +34 -13
  128. package/workflows/dev/schemas/tech-design.research.json +21 -0
  129. package/workflows/dev/schemas/test-plan.json +17 -7
  130. package/workflows/dev/schemas/test-report.json +26 -9
  131. package/workflows/dev/schemas/user-stories.json +7 -3
  132. package/workflows/dev/tools/index.js +23 -0
  133. package/workflows/dev/workflow.json +234 -101
  134. package/build/core/docs.d.ts +0 -32
  135. package/build/core/docs.js +0 -91
  136. package/build/core/docs.js.map +0 -1
  137. package/build/core/workflow.d.ts +0 -33
  138. package/build/core/workflow.js +0 -140
  139. package/build/core/workflow.js.map +0 -1
  140. package/build/hooks/claude-code.d.ts +0 -20
  141. package/build/hooks/claude-code.js.map +0 -1
  142. package/build/hooks/content.d.ts +0 -43
  143. package/build/hooks/content.js.map +0 -1
  144. package/build/hooks/install.d.ts +0 -40
  145. package/build/hooks/install.js +0 -63
  146. package/build/hooks/install.js.map +0 -1
  147. package/build/hooks/openclaw.d.ts +0 -24
  148. package/build/hooks/openclaw.js.map +0 -1
  149. package/build/hooks/opencode.d.ts +0 -29
  150. package/build/hooks/opencode.js.map +0 -1
  151. package/build/tools/approve-doc.d.ts +0 -6
  152. package/build/tools/approve-doc.js +0 -108
  153. package/build/tools/approve-doc.js.map +0 -1
  154. package/build/tools/dispatch-role.d.ts +0 -16
  155. package/build/tools/dispatch-role.js +0 -277
  156. package/build/tools/dispatch-role.js.map +0 -1
  157. package/build/tools/doc-tools.d.ts +0 -16
  158. package/build/tools/doc-tools.js +0 -389
  159. package/build/tools/doc-tools.js.map +0 -1
  160. package/build/tools/override-tools.d.ts +0 -6
  161. package/build/tools/override-tools.js +0 -129
  162. package/build/tools/override-tools.js.map +0 -1
  163. package/build/tools/report-dispatch.js +0 -194
  164. package/build/tools/report-dispatch.js.map +0 -1
  165. package/build/tools/set-scale.d.ts +0 -6
  166. package/build/tools/set-scale.js +0 -107
  167. package/build/tools/set-scale.js.map +0 -1
  168. package/build/tools/setup-project.d.ts +0 -8
  169. package/build/tools/setup-project.js +0 -116
  170. package/build/tools/setup-project.js.map +0 -1
  171. package/build/tools/update-phase.d.ts +0 -12
  172. package/build/tools/update-phase.js +0 -159
  173. package/build/tools/update-phase.js.map +0 -1
  174. package/workflows/dev/roles/pm.md +0 -99
  175. package/workflows/dev/schemas/deploy.json +0 -20
  176. package/workflows/dev/schemas/fsd.json +0 -25
  177. package/workflows/dev/schemas/project-plan.json +0 -20
  178. package/workflows/dev/schemas/retrospective.json +0 -20
  179. package/workflows/dev/schemas/risk-assessment.json +0 -15
  180. package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Pure node-tree traversal utilities.
3
+ *
4
+ * All functions here are pure (no side effects, no engine state dependency),
5
+ * and only depend on types from ./types.ts.
6
+ *
7
+ * Extracted from workflow-engine.ts, loop-done.ts, role-dispatch.ts,
8
+ * engine-helpers.ts, and workflow-validator.ts to eliminate duplication
9
+ * and avoid circular dependencies.
10
+ */
11
+ /**
12
+ * Find a node by ID within a workflow tree.
13
+ * Returns null if not found.
14
+ */
15
+ export function findNodeInTree(node, targetId) {
16
+ if (node.id === targetId)
17
+ return node;
18
+ switch (node.type) {
19
+ case 'sequence':
20
+ case 'parallel':
21
+ for (const child of node.children) {
22
+ const found = findNodeInTree(child, targetId);
23
+ if (found)
24
+ return found;
25
+ }
26
+ break;
27
+ case 'gate': {
28
+ const passResult = findNodeInTree(node.pass, targetId);
29
+ if (passResult)
30
+ return passResult;
31
+ if ('type' in node.fail) {
32
+ const failResult = findNodeInTree(node.fail, targetId);
33
+ if (failResult)
34
+ return failResult;
35
+ }
36
+ break;
37
+ }
38
+ case 'loop': {
39
+ const bodyResult = findNodeInTree(node.body, targetId);
40
+ if (bodyResult)
41
+ return bodyResult;
42
+ break;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ /**
48
+ * Find the path from root to a specific node (inclusive on both ends).
49
+ * Returns null if node not found.
50
+ */
51
+ export function findPathToNode(node, targetId) {
52
+ if (node.id === targetId)
53
+ return [node];
54
+ switch (node.type) {
55
+ case 'sequence':
56
+ case 'parallel':
57
+ for (const child of node.children) {
58
+ const path = findPathToNode(child, targetId);
59
+ if (path)
60
+ return [node, ...path];
61
+ }
62
+ break;
63
+ case 'gate': {
64
+ const passPath = findPathToNode(node.pass, targetId);
65
+ if (passPath)
66
+ return [node, ...passPath];
67
+ if ('type' in node.fail) {
68
+ const failPath = findPathToNode(node.fail, targetId);
69
+ if (failPath)
70
+ return [node, ...failPath];
71
+ }
72
+ break;
73
+ }
74
+ case 'loop': {
75
+ const bodyPath = findPathToNode(node.body, targetId);
76
+ if (bodyPath)
77
+ return [node, ...bodyPath];
78
+ break;
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+ /**
84
+ * Recursively collect all node IDs in a subtree.
85
+ */
86
+ export function collectAllNodeIds(node, ids) {
87
+ ids.add(node.id);
88
+ switch (node.type) {
89
+ case 'sequence':
90
+ case 'parallel':
91
+ for (const child of node.children) {
92
+ collectAllNodeIds(child, ids);
93
+ }
94
+ break;
95
+ case 'gate':
96
+ collectAllNodeIds(node.pass, ids);
97
+ if ('type' in node.fail) {
98
+ collectAllNodeIds(node.fail, ids);
99
+ }
100
+ break;
101
+ case 'loop':
102
+ collectAllNodeIds(node.body, ids);
103
+ break;
104
+ }
105
+ }
106
+ /**
107
+ * Find the parent of a node by its ID.
108
+ * Returns the parent node and the child's index, or null if not found.
109
+ */
110
+ export function findParent(root, targetId, current) {
111
+ const node = current ?? root;
112
+ switch (node.type) {
113
+ case 'sequence':
114
+ case 'parallel':
115
+ for (let i = 0; i < node.children.length; i++) {
116
+ if (node.children[i].id === targetId) {
117
+ return { parent: node, childIndex: i };
118
+ }
119
+ const found = findParent(root, targetId, node.children[i]);
120
+ if (found)
121
+ return found;
122
+ }
123
+ break;
124
+ case 'gate':
125
+ if (node.pass.id === targetId) {
126
+ return { parent: node, childIndex: 0 };
127
+ }
128
+ const passResult = findParent(root, targetId, node.pass);
129
+ if (passResult)
130
+ return passResult;
131
+ if ('type' in node.fail) {
132
+ const failNode = node.fail;
133
+ if (failNode.id === targetId) {
134
+ return { parent: node, childIndex: 1 };
135
+ }
136
+ const failResult = findParent(root, targetId, failNode);
137
+ if (failResult)
138
+ return failResult;
139
+ }
140
+ break;
141
+ case 'loop':
142
+ if (node.body.id === targetId) {
143
+ return { parent: node, childIndex: 0 };
144
+ }
145
+ const loopResult = findParent(root, targetId, node.body);
146
+ if (loopResult)
147
+ return loopResult;
148
+ break;
149
+ }
150
+ return null;
151
+ }
152
+ /**
153
+ * Collect all node IDs that come after a target node in execution order.
154
+ *
155
+ * "After" means:
156
+ * - Subsequent siblings (and their full subtrees) in the parent sequence
157
+ * - Any nodes that follow the parent in its grandparent sequence (recursively)
158
+ *
159
+ * For parallel nodes, subsequent siblings don't apply (they execute simultaneously).
160
+ */
161
+ export function collectSubsequentNodeIds(root, targetId) {
162
+ const result = new Set();
163
+ // Find the path from root to the target
164
+ const path = findPathToNode(root, targetId);
165
+ if (!path || path.length === 0)
166
+ return result;
167
+ // Walk up the path, collecting subsequent siblings at each level
168
+ for (let i = 0; i < path.length - 1; i++) {
169
+ const parent = path[i];
170
+ const child = path[i + 1];
171
+ if (parent.type === 'sequence') {
172
+ const childIndex = parent.children.findIndex((c) => c.id === child.id);
173
+ // Collect all children after the one on our path
174
+ for (let j = childIndex + 1; j < parent.children.length; j++) {
175
+ collectAllNodeIds(parent.children[j], result);
176
+ }
177
+ }
178
+ // For gate nodes, if our path goes through pass, we don't need to collect fail
179
+ // because fail is an alternative path, not a subsequent one.
180
+ // For parallel nodes, siblings are concurrent not subsequent — don't reset.
181
+ }
182
+ return result;
183
+ }
184
+ /**
185
+ * Collect all task nodes from a workflow tree (recursive).
186
+ */
187
+ export function collectTaskNodes(node) {
188
+ const tasks = [];
189
+ switch (node.type) {
190
+ case 'task':
191
+ tasks.push(node);
192
+ break;
193
+ case 'sequence':
194
+ case 'parallel':
195
+ for (const child of node.children) {
196
+ tasks.push(...collectTaskNodes(child));
197
+ }
198
+ break;
199
+ case 'gate':
200
+ tasks.push(...collectTaskNodes(node.pass));
201
+ if ('type' in node.fail) {
202
+ tasks.push(...collectTaskNodes(node.fail));
203
+ }
204
+ break;
205
+ case 'loop':
206
+ tasks.push(...collectTaskNodes(node.body));
207
+ break;
208
+ }
209
+ return tasks;
210
+ }
211
+ /**
212
+ * Find the nearest ancestor loop node for a given node ID.
213
+ * Returns the loop node ID if found, undefined otherwise.
214
+ */
215
+ export function findAncestorLoopId(root, targetId) {
216
+ const path = findPathToNode(root, targetId);
217
+ if (!path)
218
+ return undefined;
219
+ // Walk backwards through ancestors (excluding the target itself)
220
+ for (let i = path.length - 2; i >= 0; i--) {
221
+ if (path[i].type === 'loop')
222
+ return path[i].id;
223
+ }
224
+ return undefined;
225
+ }
226
+ //# sourceMappingURL=tree-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-utils.js","sourceRoot":"","sources":["../../src/core/tree-utils.ts"],"names":[],"mappings":"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"}