@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.
- package/README.md +140 -392
- package/build/cli/setup.d.ts +4 -2
- package/build/cli/setup.js +44 -18
- package/build/cli/setup.js.map +1 -1
- package/build/core/action-registry.d.ts +36 -0
- package/build/core/action-registry.js +53 -0
- package/build/core/action-registry.js.map +1 -0
- package/build/core/artifacts.d.ts +66 -0
- package/build/core/artifacts.js +178 -0
- package/build/core/artifacts.js.map +1 -0
- package/build/core/dispatch.d.ts +18 -11
- package/build/core/dispatch.js +43 -33
- package/build/core/dispatch.js.map +1 -1
- package/build/core/issues.d.ts +37 -0
- package/build/core/issues.js +100 -0
- package/build/core/issues.js.map +1 -0
- package/build/core/overrides.d.ts +19 -26
- package/build/core/overrides.js +32 -98
- package/build/core/overrides.js.map +1 -1
- package/build/core/plugin.d.ts +86 -0
- package/build/core/plugin.js +332 -0
- package/build/core/plugin.js.map +1 -0
- package/build/core/registry.d.ts +36 -3
- package/build/core/registry.js +63 -5
- package/build/core/registry.js.map +1 -1
- package/build/core/reviews.d.ts +13 -13
- package/build/core/reviews.js +31 -32
- package/build/core/reviews.js.map +1 -1
- package/build/core/schema.d.ts +43 -15
- package/build/core/schema.js +124 -20
- package/build/core/schema.js.map +1 -1
- package/build/core/state.d.ts +29 -22
- package/build/core/state.js +49 -81
- package/build/core/state.js.map +1 -1
- package/build/core/steps.d.ts +15 -15
- package/build/core/steps.js +32 -33
- package/build/core/steps.js.map +1 -1
- package/build/core/tree-utils.d.ts +52 -0
- package/build/core/tree-utils.js +226 -0
- package/build/core/tree-utils.js.map +1 -0
- package/build/core/types.d.ts +417 -117
- package/build/core/types.js +15 -1
- package/build/core/types.js.map +1 -1
- package/build/core/workflow-engine.d.ts +68 -0
- package/build/core/workflow-engine.js +821 -0
- package/build/core/workflow-engine.js.map +1 -0
- package/build/core/workflow-validator.d.ts +22 -0
- package/build/core/workflow-validator.js +489 -0
- package/build/core/workflow-validator.js.map +1 -0
- package/build/index.js +28 -25
- package/build/index.js.map +1 -1
- package/build/setup/inject.d.ts +4 -4
- package/build/setup/inject.js +6 -6
- package/build/setup/inject.js.map +1 -1
- package/build/setup/templates.d.ts +9 -7
- package/build/setup/templates.js +68 -103
- package/build/setup/templates.js.map +1 -1
- package/build/tools/artifact-approve.d.ts +8 -0
- package/build/tools/artifact-approve.js +94 -0
- package/build/tools/artifact-approve.js.map +1 -0
- package/build/tools/artifact-schema.d.ts +12 -0
- package/build/tools/artifact-schema.js +148 -0
- package/build/tools/artifact-schema.js.map +1 -0
- package/build/tools/artifact-tools.d.ts +18 -0
- package/build/tools/artifact-tools.js +465 -0
- package/build/tools/artifact-tools.js.map +1 -0
- package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
- package/build/tools/dispatch-report.js +261 -0
- package/build/tools/dispatch-report.js.map +1 -0
- package/build/tools/engine-helpers.d.ts +41 -0
- package/build/tools/engine-helpers.js +182 -0
- package/build/tools/engine-helpers.js.map +1 -0
- package/build/tools/get-project-status.d.ts +6 -4
- package/build/tools/get-project-status.js +308 -246
- package/build/tools/get-project-status.js.map +1 -1
- package/build/tools/get-role-prompt.d.ts +1 -1
- package/build/tools/get-role-prompt.js +7 -41
- package/build/tools/get-role-prompt.js.map +1 -1
- package/build/tools/issue-tools.d.ts +10 -0
- package/build/tools/issue-tools.js +169 -0
- package/build/tools/issue-tools.js.map +1 -0
- package/build/tools/iteration-start.d.ts +7 -4
- package/build/tools/iteration-start.js +51 -20
- package/build/tools/iteration-start.js.map +1 -1
- package/build/tools/loop-done.d.ts +11 -0
- package/build/tools/loop-done.js +109 -0
- package/build/tools/loop-done.js.map +1 -0
- package/build/tools/patch-start.d.ts +16 -0
- package/build/tools/patch-start.js +122 -0
- package/build/tools/patch-start.js.map +1 -0
- package/build/tools/project-init.d.ts +5 -5
- package/build/tools/project-init.js +47 -18
- package/build/tools/project-init.js.map +1 -1
- package/build/tools/role-dispatch.d.ts +55 -0
- package/build/tools/role-dispatch.js +508 -0
- package/build/tools/role-dispatch.js.map +1 -0
- package/build/tools/utils.d.ts +40 -0
- package/build/tools/utils.js +97 -0
- package/build/tools/utils.js.map +1 -0
- package/package.json +1 -1
- package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
- package/{build → workflows/dev}/hooks/content.js +27 -18
- package/workflows/dev/hooks/index.js +52 -0
- package/{build → workflows/dev}/hooks/openclaw.js +31 -20
- package/{build → workflows/dev}/hooks/opencode.js +31 -20
- package/workflows/dev/roles/architect.md +68 -28
- package/workflows/dev/roles/coordinator.md +103 -0
- package/workflows/dev/roles/developer.md +5 -5
- package/workflows/dev/roles/tester.md +19 -19
- package/workflows/dev/schemas/api-contract.json +42 -0
- package/workflows/dev/schemas/api-design.json +30 -13
- package/workflows/dev/schemas/data-model.json +20 -7
- package/workflows/dev/schemas/prd.completeness-check.json +6 -5
- package/workflows/dev/schemas/prd.draft.json +13 -5
- package/workflows/dev/schemas/prd.final.json +34 -11
- package/workflows/dev/schemas/prd.json +29 -11
- package/workflows/dev/schemas/prd.requirements.json +6 -5
- package/workflows/dev/schemas/prototype.json +6 -2
- package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
- package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
- package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
- package/workflows/dev/schemas/task-breakdown.final.json +8 -3
- package/workflows/dev/schemas/task-breakdown.json +8 -3
- package/workflows/dev/schemas/tech-design.analysis.json +6 -5
- package/workflows/dev/schemas/tech-design.draft.json +14 -5
- package/workflows/dev/schemas/tech-design.final.json +39 -13
- package/workflows/dev/schemas/tech-design.json +34 -13
- package/workflows/dev/schemas/tech-design.research.json +21 -0
- package/workflows/dev/schemas/test-plan.json +17 -7
- package/workflows/dev/schemas/test-report.json +26 -9
- package/workflows/dev/schemas/user-stories.json +7 -3
- package/workflows/dev/tools/index.js +23 -0
- package/workflows/dev/workflow.json +234 -101
- package/build/core/docs.d.ts +0 -32
- package/build/core/docs.js +0 -91
- package/build/core/docs.js.map +0 -1
- package/build/core/workflow.d.ts +0 -33
- package/build/core/workflow.js +0 -140
- package/build/core/workflow.js.map +0 -1
- package/build/hooks/claude-code.d.ts +0 -20
- package/build/hooks/claude-code.js.map +0 -1
- package/build/hooks/content.d.ts +0 -43
- package/build/hooks/content.js.map +0 -1
- package/build/hooks/install.d.ts +0 -40
- package/build/hooks/install.js +0 -63
- package/build/hooks/install.js.map +0 -1
- package/build/hooks/openclaw.d.ts +0 -24
- package/build/hooks/openclaw.js.map +0 -1
- package/build/hooks/opencode.d.ts +0 -29
- package/build/hooks/opencode.js.map +0 -1
- package/build/tools/approve-doc.d.ts +0 -6
- package/build/tools/approve-doc.js +0 -108
- package/build/tools/approve-doc.js.map +0 -1
- package/build/tools/dispatch-role.d.ts +0 -16
- package/build/tools/dispatch-role.js +0 -277
- package/build/tools/dispatch-role.js.map +0 -1
- package/build/tools/doc-tools.d.ts +0 -16
- package/build/tools/doc-tools.js +0 -389
- package/build/tools/doc-tools.js.map +0 -1
- package/build/tools/override-tools.d.ts +0 -6
- package/build/tools/override-tools.js +0 -129
- package/build/tools/override-tools.js.map +0 -1
- package/build/tools/report-dispatch.js +0 -194
- package/build/tools/report-dispatch.js.map +0 -1
- package/build/tools/set-scale.d.ts +0 -6
- package/build/tools/set-scale.js +0 -107
- package/build/tools/set-scale.js.map +0 -1
- package/build/tools/setup-project.d.ts +0 -8
- package/build/tools/setup-project.js +0 -116
- package/build/tools/setup-project.js.map +0 -1
- package/build/tools/update-phase.d.ts +0 -12
- package/build/tools/update-phase.js +0 -159
- package/build/tools/update-phase.js.map +0 -1
- package/workflows/dev/roles/pm.md +0 -99
- package/workflows/dev/schemas/deploy.json +0 -20
- package/workflows/dev/schemas/fsd.json +0 -25
- package/workflows/dev/schemas/project-plan.json +0 -20
- package/workflows/dev/schemas/retrospective.json +0 -20
- package/workflows/dev/schemas/risk-assessment.json +0 -15
- 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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"}
|