@soleri/core 2.11.0 → 7.0.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/data/flows/build.flow.yaml +128 -0
- package/data/flows/deliver.flow.yaml +110 -0
- package/data/flows/design.flow.yaml +108 -0
- package/data/flows/enhance.flow.yaml +90 -0
- package/data/flows/explore.flow.yaml +84 -0
- package/data/flows/fix.flow.yaml +90 -0
- package/data/flows/plan.flow.yaml +87 -0
- package/data/flows/review.flow.yaml +90 -0
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +10 -0
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +16 -2
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/capabilities/chain-mapping.d.ts +21 -0
- package/dist/capabilities/chain-mapping.d.ts.map +1 -0
- package/dist/capabilities/chain-mapping.js +86 -0
- package/dist/capabilities/chain-mapping.js.map +1 -0
- package/dist/capabilities/index.d.ts +10 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +8 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/registry.d.ts +95 -0
- package/dist/capabilities/registry.d.ts.map +1 -0
- package/dist/capabilities/registry.js +227 -0
- package/dist/capabilities/registry.js.map +1 -0
- package/dist/capabilities/types.d.ts +106 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +12 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +58 -2
- package/dist/control/intent-router.js.map +1 -1
- package/dist/domain-packs/index.d.ts +8 -0
- package/dist/domain-packs/index.d.ts.map +1 -0
- package/dist/domain-packs/index.js +8 -0
- package/dist/domain-packs/index.js.map +1 -0
- package/dist/domain-packs/inject-rules.d.ts +24 -0
- package/dist/domain-packs/inject-rules.d.ts.map +1 -0
- package/dist/domain-packs/inject-rules.js +65 -0
- package/dist/domain-packs/inject-rules.js.map +1 -0
- package/dist/domain-packs/knowledge-installer.d.ts +27 -0
- package/dist/domain-packs/knowledge-installer.d.ts.map +1 -0
- package/dist/domain-packs/knowledge-installer.js +89 -0
- package/dist/domain-packs/knowledge-installer.js.map +1 -0
- package/dist/domain-packs/loader.d.ts +28 -0
- package/dist/domain-packs/loader.d.ts.map +1 -0
- package/dist/domain-packs/loader.js +105 -0
- package/dist/domain-packs/loader.js.map +1 -0
- package/dist/domain-packs/pack-runtime.d.ts +80 -0
- package/dist/domain-packs/pack-runtime.d.ts.map +1 -0
- package/dist/domain-packs/pack-runtime.js +36 -0
- package/dist/domain-packs/pack-runtime.js.map +1 -0
- package/dist/domain-packs/skills-installer.d.ts +21 -0
- package/dist/domain-packs/skills-installer.d.ts.map +1 -0
- package/dist/domain-packs/skills-installer.js +38 -0
- package/dist/domain-packs/skills-installer.js.map +1 -0
- package/dist/domain-packs/token-resolver.d.ts +37 -0
- package/dist/domain-packs/token-resolver.d.ts.map +1 -0
- package/dist/domain-packs/token-resolver.js +109 -0
- package/dist/domain-packs/token-resolver.js.map +1 -0
- package/dist/domain-packs/types.d.ts +91 -0
- package/dist/domain-packs/types.d.ts.map +1 -0
- package/dist/domain-packs/types.js +122 -0
- package/dist/domain-packs/types.js.map +1 -0
- package/dist/engine/bin/soleri-engine.d.ts +12 -0
- package/dist/engine/bin/soleri-engine.d.ts.map +1 -0
- package/dist/engine/bin/soleri-engine.js +183 -0
- package/dist/engine/bin/soleri-engine.js.map +1 -0
- package/dist/engine/core-ops.d.ts +27 -0
- package/dist/engine/core-ops.d.ts.map +1 -0
- package/dist/engine/core-ops.js +159 -0
- package/dist/engine/core-ops.js.map +1 -0
- package/dist/engine/index.d.ts +19 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +17 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/register-engine.d.ts +54 -0
- package/dist/engine/register-engine.d.ts.map +1 -0
- package/dist/engine/register-engine.js +270 -0
- package/dist/engine/register-engine.js.map +1 -0
- package/dist/engine/test-helpers.d.ts +30 -0
- package/dist/engine/test-helpers.d.ts.map +1 -0
- package/dist/engine/test-helpers.js +59 -0
- package/dist/engine/test-helpers.js.map +1 -0
- package/dist/flows/context-router.d.ts +39 -0
- package/dist/flows/context-router.d.ts.map +1 -0
- package/dist/flows/context-router.js +206 -0
- package/dist/flows/context-router.js.map +1 -0
- package/dist/flows/dispatch-registry.d.ts +24 -0
- package/dist/flows/dispatch-registry.d.ts.map +1 -0
- package/dist/flows/dispatch-registry.js +70 -0
- package/dist/flows/dispatch-registry.js.map +1 -0
- package/dist/flows/epilogue.d.ts +24 -0
- package/dist/flows/epilogue.d.ts.map +1 -0
- package/dist/flows/epilogue.js +52 -0
- package/dist/flows/epilogue.js.map +1 -0
- package/dist/flows/executor.d.ts +25 -0
- package/dist/flows/executor.d.ts.map +1 -0
- package/dist/flows/executor.js +153 -0
- package/dist/flows/executor.js.map +1 -0
- package/dist/flows/gate-evaluator.d.ts +26 -0
- package/dist/flows/gate-evaluator.d.ts.map +1 -0
- package/dist/flows/gate-evaluator.js +162 -0
- package/dist/flows/gate-evaluator.js.map +1 -0
- package/dist/flows/index.d.ts +14 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +20 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/loader.d.ts +17 -0
- package/dist/flows/loader.d.ts.map +1 -0
- package/dist/flows/loader.js +61 -0
- package/dist/flows/loader.js.map +1 -0
- package/dist/flows/plan-builder.d.ts +40 -0
- package/dist/flows/plan-builder.d.ts.map +1 -0
- package/dist/flows/plan-builder.js +213 -0
- package/dist/flows/plan-builder.js.map +1 -0
- package/dist/flows/probes.d.ts +11 -0
- package/dist/flows/probes.d.ts.map +1 -0
- package/dist/flows/probes.js +62 -0
- package/dist/flows/probes.js.map +1 -0
- package/dist/flows/types.d.ts +950 -0
- package/dist/flows/types.d.ts.map +1 -0
- package/dist/flows/types.js +105 -0
- package/dist/flows/types.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/intelligence/loader.d.ts +19 -0
- package/dist/intelligence/loader.d.ts.map +1 -1
- package/dist/intelligence/loader.js +86 -5
- package/dist/intelligence/loader.js.map +1 -1
- package/dist/intelligence/types.d.ts +1 -0
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/packs/types.d.ts +58 -19
- package/dist/packs/types.d.ts.map +1 -1
- package/dist/packs/types.js +14 -0
- package/dist/packs/types.js.map +1 -1
- package/dist/playbooks/generic/onboarding.d.ts +9 -0
- package/dist/playbooks/generic/onboarding.d.ts.map +1 -0
- package/dist/playbooks/generic/onboarding.js +74 -0
- package/dist/playbooks/generic/onboarding.js.map +1 -0
- package/dist/playbooks/playbook-registry.d.ts.map +1 -1
- package/dist/playbooks/playbook-registry.js +2 -0
- package/dist/playbooks/playbook-registry.js.map +1 -1
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
- package/dist/runtime/admin-extra-ops.js +15 -9
- package/dist/runtime/admin-extra-ops.js.map +1 -1
- package/dist/runtime/admin-ops.js +4 -4
- package/dist/runtime/admin-ops.js.map +1 -1
- package/dist/runtime/capture-ops.d.ts.map +1 -1
- package/dist/runtime/capture-ops.js +33 -1
- package/dist/runtime/capture-ops.js.map +1 -1
- package/dist/runtime/domain-ops.d.ts +21 -5
- package/dist/runtime/domain-ops.d.ts.map +1 -1
- package/dist/runtime/domain-ops.js +85 -8
- package/dist/runtime/domain-ops.js.map +1 -1
- package/dist/runtime/facades/cognee-facade.d.ts.map +1 -1
- package/dist/runtime/facades/cognee-facade.js +3 -1
- package/dist/runtime/facades/cognee-facade.js.map +1 -1
- package/dist/runtime/facades/index.d.ts.map +1 -1
- package/dist/runtime/facades/index.js +10 -6
- package/dist/runtime/facades/index.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +2 -0
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/orchestrate-ops.d.ts +8 -7
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
- package/dist/runtime/orchestrate-ops.js +227 -58
- package/dist/runtime/orchestrate-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +23 -17
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +6 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts +13 -0
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -0
- package/dist/runtime/vault-linking-ops.js +367 -0
- package/dist/runtime/vault-linking-ops.js.map +1 -0
- package/dist/vault/linking.d.ts +46 -0
- package/dist/vault/linking.d.ts.map +1 -0
- package/dist/vault/linking.js +275 -0
- package/dist/vault/linking.js.map +1 -0
- package/dist/vault/vault-types.d.ts +37 -0
- package/dist/vault/vault-types.d.ts.map +1 -1
- package/dist/vault/vault.d.ts +12 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +85 -6
- package/dist/vault/vault.js.map +1 -1
- package/package.json +4 -1
- package/src/__tests__/admin-extra-ops.test.ts +1 -1
- package/src/__tests__/admin-ops.test.ts +2 -1
- package/src/__tests__/cognee-client-gaps.test.ts +470 -0
- package/src/__tests__/cognee-hybrid-search.test.ts +478 -0
- package/src/__tests__/cognee-sync-manager-deep.test.ts +630 -0
- package/src/__tests__/cognee-sync-manager.test.ts +1 -0
- package/src/__tests__/core-ops.test.ts +9 -61
- package/src/__tests__/domain-packs.test.ts +421 -0
- package/src/__tests__/flows.test.ts +604 -0
- package/src/__tests__/playbook-registry.test.ts +2 -2
- package/src/__tests__/playbook-seeder.test.ts +8 -8
- package/src/__tests__/playbook.test.ts +5 -5
- package/src/__tests__/token-resolver.test.ts +79 -0
- package/src/brain/brain.ts +12 -0
- package/src/brain/intelligence.ts +21 -2
- package/src/capabilities/chain-mapping.ts +93 -0
- package/src/capabilities/index.ts +21 -0
- package/src/capabilities/registry.ts +290 -0
- package/src/capabilities/types.ts +143 -0
- package/src/control/intent-router.ts +46 -2
- package/src/domain-packs/index.ts +27 -0
- package/src/domain-packs/inject-rules.ts +74 -0
- package/src/domain-packs/knowledge-installer.ts +116 -0
- package/src/domain-packs/loader.ts +124 -0
- package/src/domain-packs/pack-runtime.ts +99 -0
- package/src/domain-packs/skills-installer.ts +56 -0
- package/src/domain-packs/token-resolver.ts +126 -0
- package/src/domain-packs/types.ts +229 -0
- package/src/engine/__tests__/register-engine.test.ts +104 -0
- package/src/engine/bin/soleri-engine.ts +217 -0
- package/src/engine/core-ops.ts +178 -0
- package/src/engine/index.ts +19 -0
- package/src/engine/register-engine.ts +385 -0
- package/src/engine/test-helpers.ts +83 -0
- package/src/flows/context-router.ts +257 -0
- package/src/flows/dispatch-registry.ts +80 -0
- package/src/flows/epilogue.ts +65 -0
- package/src/flows/executor.ts +182 -0
- package/src/flows/gate-evaluator.ts +171 -0
- package/src/flows/index.ts +52 -0
- package/src/flows/loader.ts +63 -0
- package/src/flows/plan-builder.ts +250 -0
- package/src/flows/probes.ts +70 -0
- package/src/flows/types.ts +217 -0
- package/src/index.ts +68 -1
- package/src/intelligence/loader.ts +96 -5
- package/src/intelligence/types.ts +1 -0
- package/src/packs/types.ts +19 -0
- package/src/playbooks/generic/onboarding.ts +79 -0
- package/src/playbooks/playbook-registry.ts +2 -0
- package/src/runtime/admin-extra-ops.ts +14 -8
- package/src/runtime/admin-ops.ts +4 -4
- package/src/runtime/capture-ops.ts +40 -1
- package/src/runtime/domain-ops.ts +92 -7
- package/src/runtime/facades/cognee-facade.ts +3 -1
- package/src/runtime/facades/index.ts +12 -6
- package/src/runtime/facades/vault-facade.ts +2 -0
- package/src/runtime/orchestrate-ops.ts +271 -62
- package/src/runtime/runtime.ts +27 -18
- package/src/runtime/types.ts +6 -2
- package/src/runtime/vault-linking-ops.ts +454 -0
- package/src/vault/linking.ts +333 -0
- package/src/vault/vault-types.ts +46 -0
- package/src/vault/vault.ts +94 -7
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate evaluator — checks step gates against tool results to decide
|
|
3
|
+
* whether execution should CONTINUE, STOP, or BRANCH.
|
|
4
|
+
*/
|
|
5
|
+
import type { PlanStep, GateVerdict } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Evaluate a plan step's gate against collected tool results.
|
|
8
|
+
* If no gate is defined, returns CONTINUE (passed).
|
|
9
|
+
*/
|
|
10
|
+
export declare function evaluateGate(gate: PlanStep['gate'], toolResults: Record<string, unknown>): GateVerdict;
|
|
11
|
+
/**
|
|
12
|
+
* Evaluate a simple condition string: "lhs op rhs".
|
|
13
|
+
* Supported operators: ==, !=, >=, <=, >, <
|
|
14
|
+
* lhs is resolved as a dotted path from data, rhs is a literal.
|
|
15
|
+
*/
|
|
16
|
+
export declare function evaluateCondition(condition: string, data: Record<string, unknown>): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Extract a numeric score from tool results.
|
|
19
|
+
* Looks for common score field names.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractScore(data: Record<string, unknown>): number;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a dotted path like "result.data.score" against an object.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolvePath(obj: Record<string, unknown>, path: string): unknown;
|
|
26
|
+
//# sourceMappingURL=gate-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evaluator.d.ts","sourceRoot":"","sources":["../../src/flows/gate-evaluator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,WAAW,CAuDb;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAkC3F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAwBlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ/E"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate evaluator — checks step gates against tool results to decide
|
|
3
|
+
* whether execution should CONTINUE, STOP, or BRANCH.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate a plan step's gate against collected tool results.
|
|
7
|
+
* If no gate is defined, returns CONTINUE (passed).
|
|
8
|
+
*/
|
|
9
|
+
export function evaluateGate(gate, toolResults) {
|
|
10
|
+
if (!gate) {
|
|
11
|
+
return { passed: true, action: 'CONTINUE' };
|
|
12
|
+
}
|
|
13
|
+
switch (gate.type) {
|
|
14
|
+
case 'GATE': {
|
|
15
|
+
const passed = gate.condition ? evaluateCondition(gate.condition, toolResults) : true;
|
|
16
|
+
if (passed)
|
|
17
|
+
return { passed: true, action: 'CONTINUE' };
|
|
18
|
+
return {
|
|
19
|
+
passed: false,
|
|
20
|
+
action: gate.onFail?.action ?? 'STOP',
|
|
21
|
+
goto: gate.onFail?.goto,
|
|
22
|
+
message: gate.onFail?.message,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
case 'SCORE': {
|
|
26
|
+
const score = extractScore(toolResults);
|
|
27
|
+
const minScore = gate.min ?? 0;
|
|
28
|
+
const passed = score >= minScore;
|
|
29
|
+
if (passed)
|
|
30
|
+
return { passed: true, action: 'CONTINUE', score };
|
|
31
|
+
return {
|
|
32
|
+
passed: false,
|
|
33
|
+
action: gate.onFail?.action ?? 'STOP',
|
|
34
|
+
goto: gate.onFail?.goto,
|
|
35
|
+
message: gate.onFail?.message ?? `Score ${score} below minimum ${minScore}`,
|
|
36
|
+
score,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case 'CHECKPOINT': {
|
|
40
|
+
const passed = gate.condition ? evaluateCondition(gate.condition, toolResults) : true;
|
|
41
|
+
if (passed)
|
|
42
|
+
return { passed: true, action: 'CONTINUE' };
|
|
43
|
+
return {
|
|
44
|
+
passed: false,
|
|
45
|
+
action: gate.onFail?.action ?? 'CONTINUE',
|
|
46
|
+
goto: gate.onFail?.goto,
|
|
47
|
+
message: gate.onFail?.message,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
case 'BRANCH': {
|
|
51
|
+
// BRANCH gates always trigger branching
|
|
52
|
+
return {
|
|
53
|
+
passed: true,
|
|
54
|
+
action: 'BRANCH',
|
|
55
|
+
goto: gate.onFail?.goto,
|
|
56
|
+
message: gate.onFail?.message,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
return { passed: true, action: 'CONTINUE' };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Evaluate a simple condition string: "lhs op rhs".
|
|
65
|
+
* Supported operators: ==, !=, >=, <=, >, <
|
|
66
|
+
* lhs is resolved as a dotted path from data, rhs is a literal.
|
|
67
|
+
*/
|
|
68
|
+
export function evaluateCondition(condition, data) {
|
|
69
|
+
const operators = ['>=', '<=', '!=', '==', '>', '<'];
|
|
70
|
+
for (const op of operators) {
|
|
71
|
+
const idx = condition.indexOf(op);
|
|
72
|
+
if (idx === -1)
|
|
73
|
+
continue;
|
|
74
|
+
const lhsPath = condition.slice(0, idx).trim();
|
|
75
|
+
const rhsRaw = condition.slice(idx + op.length).trim();
|
|
76
|
+
const lhsValue = resolvePath(data, lhsPath);
|
|
77
|
+
const rhsValue = parseConditionValue(rhsRaw);
|
|
78
|
+
const lNum = typeof lhsValue === 'number' ? lhsValue : Number(lhsValue);
|
|
79
|
+
const rNum = typeof rhsValue === 'number' ? rhsValue : Number(rhsValue);
|
|
80
|
+
const useNumeric = !Number.isNaN(lNum) && !Number.isNaN(rNum);
|
|
81
|
+
switch (op) {
|
|
82
|
+
case '==':
|
|
83
|
+
return useNumeric ? lNum === rNum : String(lhsValue) === String(rhsValue);
|
|
84
|
+
case '!=':
|
|
85
|
+
return useNumeric ? lNum !== rNum : String(lhsValue) !== String(rhsValue);
|
|
86
|
+
case '>=':
|
|
87
|
+
return useNumeric ? lNum >= rNum : false;
|
|
88
|
+
case '<=':
|
|
89
|
+
return useNumeric ? lNum <= rNum : false;
|
|
90
|
+
case '>':
|
|
91
|
+
return useNumeric ? lNum > rNum : false;
|
|
92
|
+
case '<':
|
|
93
|
+
return useNumeric ? lNum < rNum : false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// No operator found — check if value is truthy
|
|
97
|
+
const val = resolvePath(data, condition.trim());
|
|
98
|
+
return !!val;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract a numeric score from tool results.
|
|
102
|
+
* Looks for common score field names.
|
|
103
|
+
*/
|
|
104
|
+
export function extractScore(data) {
|
|
105
|
+
// Direct score fields
|
|
106
|
+
for (const key of ['score', 'validationScore', 'total']) {
|
|
107
|
+
if (typeof data[key] === 'number')
|
|
108
|
+
return data[key];
|
|
109
|
+
}
|
|
110
|
+
// Search within nested result objects
|
|
111
|
+
for (const val of Object.values(data)) {
|
|
112
|
+
if (val && typeof val === 'object' && !Array.isArray(val)) {
|
|
113
|
+
const nested = val;
|
|
114
|
+
for (const key of ['score', 'validationScore', 'total']) {
|
|
115
|
+
if (typeof nested[key] === 'number')
|
|
116
|
+
return nested[key];
|
|
117
|
+
}
|
|
118
|
+
// One more level: data property
|
|
119
|
+
if (nested.data && typeof nested.data === 'object') {
|
|
120
|
+
const deep = nested.data;
|
|
121
|
+
for (const key of ['score', 'validationScore', 'total']) {
|
|
122
|
+
if (typeof deep[key] === 'number')
|
|
123
|
+
return deep[key];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Resolve a dotted path like "result.data.score" against an object.
|
|
132
|
+
*/
|
|
133
|
+
export function resolvePath(obj, path) {
|
|
134
|
+
const parts = path.split('.');
|
|
135
|
+
let current = obj;
|
|
136
|
+
for (const part of parts) {
|
|
137
|
+
if (current === null || current === undefined || typeof current !== 'object')
|
|
138
|
+
return undefined;
|
|
139
|
+
current = current[part];
|
|
140
|
+
}
|
|
141
|
+
return current;
|
|
142
|
+
}
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
// Internal
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
function parseConditionValue(raw) {
|
|
147
|
+
if (raw === 'true')
|
|
148
|
+
return true;
|
|
149
|
+
if (raw === 'false')
|
|
150
|
+
return false;
|
|
151
|
+
if (raw === 'null')
|
|
152
|
+
return 0;
|
|
153
|
+
// Strip quotes
|
|
154
|
+
if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
|
|
155
|
+
return raw.slice(1, -1);
|
|
156
|
+
}
|
|
157
|
+
const num = Number(raw);
|
|
158
|
+
if (!Number.isNaN(num))
|
|
159
|
+
return num;
|
|
160
|
+
return raw;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=gate-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evaluator.js","sourceRoot":"","sources":["../../src/flows/gate-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow engine — YAML-driven workflow orchestration.
|
|
3
|
+
*/
|
|
4
|
+
export type { Flow, FlowStep, Gate, GateAction, ProbeName, ProbeResults, PlanStep, SkippedStep, OrchestrationPlan, OrchestrationContext, StepResult, ExecutionResult, GateVerdict, } from './types.js';
|
|
5
|
+
export { loadFlowById, loadAllFlows, parseSimpleYaml } from './loader.js';
|
|
6
|
+
export { runProbes } from './probes.js';
|
|
7
|
+
export { INTENT_TO_FLOW, chainToToolName, chainToRequires, flowStepsToPlanSteps, pruneSteps, buildPlan, } from './plan-builder.js';
|
|
8
|
+
export { detectContext, applyContextOverrides, getFlowOverrides } from './context-router.js';
|
|
9
|
+
export type { ContextOverride } from './context-router.js';
|
|
10
|
+
export { evaluateGate, evaluateCondition, extractScore, resolvePath } from './gate-evaluator.js';
|
|
11
|
+
export { FlowExecutor } from './executor.js';
|
|
12
|
+
export { createDispatcher } from './dispatch-registry.js';
|
|
13
|
+
export { runEpilogue } from './epilogue.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow engine — YAML-driven workflow orchestration.
|
|
3
|
+
*/
|
|
4
|
+
// Loader
|
|
5
|
+
export { loadFlowById, loadAllFlows, parseSimpleYaml } from './loader.js';
|
|
6
|
+
// Probes
|
|
7
|
+
export { runProbes } from './probes.js';
|
|
8
|
+
// Plan builder
|
|
9
|
+
export { INTENT_TO_FLOW, chainToToolName, chainToRequires, flowStepsToPlanSteps, pruneSteps, buildPlan, } from './plan-builder.js';
|
|
10
|
+
// Context router
|
|
11
|
+
export { detectContext, applyContextOverrides, getFlowOverrides } from './context-router.js';
|
|
12
|
+
// Gate evaluator
|
|
13
|
+
export { evaluateGate, evaluateCondition, extractScore, resolvePath } from './gate-evaluator.js';
|
|
14
|
+
// Executor
|
|
15
|
+
export { FlowExecutor } from './executor.js';
|
|
16
|
+
// Dispatch registry
|
|
17
|
+
export { createDispatcher } from './dispatch-registry.js';
|
|
18
|
+
// Epilogue
|
|
19
|
+
export { runEpilogue } from './epilogue.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1E,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,eAAe;AACf,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG7F,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEjG,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow loader — reads and validates YAML flow files from a directory.
|
|
3
|
+
*/
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
import { type Flow } from './types.js';
|
|
6
|
+
/** Re-export for backward compat (tests import this). */
|
|
7
|
+
export declare const parseSimpleYaml: typeof parseYaml;
|
|
8
|
+
/**
|
|
9
|
+
* Load a single flow by its `id` field from *.flow.yaml files in a directory.
|
|
10
|
+
* Returns `null` if not found or validation fails.
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadFlowById(flowId: string, flowsDir?: string): Flow | null;
|
|
13
|
+
/**
|
|
14
|
+
* Load all valid flows from *.flow.yaml files in a directory.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadAllFlows(flowsDir?: string): Flow[];
|
|
17
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/flows/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAKnD,yDAAyD;AACzD,eAAO,MAAM,eAAe,kBAAY,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAkB3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAmBtD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow loader — reads and validates YAML flow files from a directory.
|
|
3
|
+
*/
|
|
4
|
+
import { readdirSync, readFileSync, existsSync } from 'node:fs';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { parse as parseYaml } from 'yaml';
|
|
8
|
+
import { flowSchema } from './types.js';
|
|
9
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const DEFAULT_FLOWS_DIR = join(__dirname, '..', '..', 'data', 'flows');
|
|
11
|
+
/** Re-export for backward compat (tests import this). */
|
|
12
|
+
export const parseSimpleYaml = parseYaml;
|
|
13
|
+
/**
|
|
14
|
+
* Load a single flow by its `id` field from *.flow.yaml files in a directory.
|
|
15
|
+
* Returns `null` if not found or validation fails.
|
|
16
|
+
*/
|
|
17
|
+
export function loadFlowById(flowId, flowsDir) {
|
|
18
|
+
const dir = flowsDir ?? DEFAULT_FLOWS_DIR;
|
|
19
|
+
if (!existsSync(dir))
|
|
20
|
+
return null;
|
|
21
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.flow.yaml'));
|
|
22
|
+
for (const file of files) {
|
|
23
|
+
try {
|
|
24
|
+
const content = readFileSync(join(dir, file), 'utf-8');
|
|
25
|
+
const raw = parseYaml(content);
|
|
26
|
+
const parsed = flowSchema.safeParse(raw);
|
|
27
|
+
if (parsed.success && parsed.data.id === flowId) {
|
|
28
|
+
return parsed.data;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// skip invalid files
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load all valid flows from *.flow.yaml files in a directory.
|
|
39
|
+
*/
|
|
40
|
+
export function loadAllFlows(flowsDir) {
|
|
41
|
+
const dir = flowsDir ?? DEFAULT_FLOWS_DIR;
|
|
42
|
+
if (!existsSync(dir))
|
|
43
|
+
return [];
|
|
44
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.flow.yaml'));
|
|
45
|
+
const flows = [];
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
try {
|
|
48
|
+
const content = readFileSync(join(dir, file), 'utf-8');
|
|
49
|
+
const raw = parseYaml(content);
|
|
50
|
+
const parsed = flowSchema.safeParse(raw);
|
|
51
|
+
if (parsed.success) {
|
|
52
|
+
flows.push(parsed.data);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// skip invalid files
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return flows;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/flows/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAEnD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvE,yDAAyD;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,QAAiB;IAC5D,MAAM,GAAG,GAAG,QAAQ,IAAI,iBAAiB,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;gBAChD,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAiB;IAC5C,MAAM,GAAG,GAAG,QAAQ,IAAI,iBAAiB,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan builder — converts intent + flow + probes into an OrchestrationPlan.
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentRuntime } from '../runtime/types.js';
|
|
5
|
+
import type { Flow, PlanStep, SkippedStep, OrchestrationPlan, ProbeResults, ProbeName } from './types.js';
|
|
6
|
+
import type { CapabilityRegistry } from '../capabilities/index.js';
|
|
7
|
+
export declare const INTENT_TO_FLOW: Record<string, string>;
|
|
8
|
+
/**
|
|
9
|
+
* Convert a chain name (e.g. "vault-search") to a tool name (e.g. "myagent_vault_search").
|
|
10
|
+
*/
|
|
11
|
+
export declare function chainToToolName(chain: string, agentId: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Infer which probe capability a chain requires, or undefined if none.
|
|
14
|
+
*/
|
|
15
|
+
export declare function chainToRequires(chain: string): ProbeName | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Convert flow steps into plan steps.
|
|
18
|
+
*
|
|
19
|
+
* Resolution order for capability IDs:
|
|
20
|
+
* 1. If the step has `needs:` (v2), use those capability IDs directly
|
|
21
|
+
* 2. If the step only has `chains:` (v1), map via chainToCapability()
|
|
22
|
+
* 3. chainToToolName() is still used for tool dispatch (fallback path)
|
|
23
|
+
*
|
|
24
|
+
* When an optional `registry` is provided, each resolved capability is
|
|
25
|
+
* validated. Unavailable capabilities are recorded in the step's
|
|
26
|
+
* `unavailableCapabilities` list (informational — pruning is separate).
|
|
27
|
+
*/
|
|
28
|
+
export declare function flowStepsToPlanSteps(flow: Flow, agentId: string, registry?: CapabilityRegistry): PlanStep[];
|
|
29
|
+
/**
|
|
30
|
+
* Remove steps whose required capabilities are not available.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pruneSteps(steps: PlanStep[], probes: ProbeResults): {
|
|
33
|
+
kept: PlanStep[];
|
|
34
|
+
skipped: SkippedStep[];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Build a full orchestration plan from intent, agent config, and runtime.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildPlan(intent: string, agentId: string, projectPath: string, runtime: AgentRuntime, prompt?: string): Promise<OrchestrationPlan>;
|
|
40
|
+
//# sourceMappingURL=plan-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-builder.d.ts","sourceRoot":"","sources":["../../src/flows/plan-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACV,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWjD,CAAC;AAMF;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAUpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,QAAQ,EAAE,CA4EZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,YAAY,GACnB;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAkB9C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAyD5B"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan builder — converts intent + flow + probes into an OrchestrationPlan.
|
|
3
|
+
*/
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
import { loadFlowById } from './loader.js';
|
|
6
|
+
import { runProbes } from './probes.js';
|
|
7
|
+
import { detectContext, applyContextOverrides } from './context-router.js';
|
|
8
|
+
import { chainToCapability } from '../capabilities/index.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Intent → Flow mapping
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export const INTENT_TO_FLOW = {
|
|
13
|
+
BUILD: 'BUILD-flow',
|
|
14
|
+
CREATE: 'BUILD-flow',
|
|
15
|
+
FIX: 'FIX-flow',
|
|
16
|
+
REVIEW: 'REVIEW-flow',
|
|
17
|
+
PLAN: 'PLAN-flow',
|
|
18
|
+
DESIGN: 'DESIGN-flow',
|
|
19
|
+
ENHANCE: 'ENHANCE-flow',
|
|
20
|
+
IMPROVE: 'ENHANCE-flow',
|
|
21
|
+
EXPLORE: 'EXPLORE-flow',
|
|
22
|
+
DELIVER: 'DELIVER-flow',
|
|
23
|
+
};
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Convert a chain name (e.g. "vault-search") to a tool name (e.g. "myagent_vault_search").
|
|
29
|
+
*/
|
|
30
|
+
export function chainToToolName(chain, agentId) {
|
|
31
|
+
return `${agentId}_${chain.replace(/-/g, '_')}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Infer which probe capability a chain requires, or undefined if none.
|
|
35
|
+
*/
|
|
36
|
+
export function chainToRequires(chain) {
|
|
37
|
+
const lower = chain.toLowerCase();
|
|
38
|
+
if (lower.startsWith('vault') || lower.startsWith('memory'))
|
|
39
|
+
return 'vault';
|
|
40
|
+
if (lower.startsWith('brain'))
|
|
41
|
+
return 'brain';
|
|
42
|
+
if (lower.startsWith('component') || lower.startsWith('token') || lower.startsWith('design'))
|
|
43
|
+
return 'designSystem';
|
|
44
|
+
if (lower.startsWith('session'))
|
|
45
|
+
return 'sessionStore';
|
|
46
|
+
// recommend-* and get-stack-* have no hard requirements
|
|
47
|
+
if (lower.startsWith('recommend') || lower.startsWith('get-stack'))
|
|
48
|
+
return undefined;
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert flow steps into plan steps.
|
|
53
|
+
*
|
|
54
|
+
* Resolution order for capability IDs:
|
|
55
|
+
* 1. If the step has `needs:` (v2), use those capability IDs directly
|
|
56
|
+
* 2. If the step only has `chains:` (v1), map via chainToCapability()
|
|
57
|
+
* 3. chainToToolName() is still used for tool dispatch (fallback path)
|
|
58
|
+
*
|
|
59
|
+
* When an optional `registry` is provided, each resolved capability is
|
|
60
|
+
* validated. Unavailable capabilities are recorded in the step's
|
|
61
|
+
* `unavailableCapabilities` list (informational — pruning is separate).
|
|
62
|
+
*/
|
|
63
|
+
export function flowStepsToPlanSteps(flow, agentId, registry) {
|
|
64
|
+
return flow.steps.map((step) => {
|
|
65
|
+
// Tool names for dispatch fallback (always computed from chains)
|
|
66
|
+
const tools = (step.chains ?? []).map((c) => chainToToolName(c, agentId));
|
|
67
|
+
// Resolve capability IDs: prefer needs (v2), fall back to chains (v1)
|
|
68
|
+
const capabilityIds = [];
|
|
69
|
+
if (step.needs && step.needs.length > 0) {
|
|
70
|
+
capabilityIds.push(...step.needs);
|
|
71
|
+
}
|
|
72
|
+
else if (step.chains) {
|
|
73
|
+
for (const chain of step.chains) {
|
|
74
|
+
const capId = chainToCapability(chain);
|
|
75
|
+
if (capId && !capabilityIds.includes(capId)) {
|
|
76
|
+
capabilityIds.push(capId);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Probe-level requires (existing behavior, derived from chains)
|
|
81
|
+
const requires = [];
|
|
82
|
+
for (const chain of step.chains ?? []) {
|
|
83
|
+
const req = chainToRequires(chain);
|
|
84
|
+
if (req && !requires.includes(req))
|
|
85
|
+
requires.push(req);
|
|
86
|
+
}
|
|
87
|
+
// Validate capabilities against registry if provided
|
|
88
|
+
const unavailableCapabilities = [];
|
|
89
|
+
if (registry) {
|
|
90
|
+
for (const capId of capabilityIds) {
|
|
91
|
+
const resolved = registry.resolve(capId);
|
|
92
|
+
if (!resolved.available) {
|
|
93
|
+
unavailableCapabilities.push(capId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const planStep = {
|
|
98
|
+
id: step.id,
|
|
99
|
+
name: step.name ?? step.id,
|
|
100
|
+
tools,
|
|
101
|
+
parallel: step.parallel ?? false,
|
|
102
|
+
requires,
|
|
103
|
+
status: 'pending',
|
|
104
|
+
};
|
|
105
|
+
// Attach capability metadata (non-breaking additions)
|
|
106
|
+
if (capabilityIds.length > 0) {
|
|
107
|
+
planStep.capabilities = capabilityIds;
|
|
108
|
+
}
|
|
109
|
+
if (unavailableCapabilities.length > 0) {
|
|
110
|
+
planStep.unavailableCapabilities =
|
|
111
|
+
unavailableCapabilities;
|
|
112
|
+
}
|
|
113
|
+
if (step.gate) {
|
|
114
|
+
const gate = step.gate;
|
|
115
|
+
planStep.gate = {
|
|
116
|
+
type: gate.type,
|
|
117
|
+
};
|
|
118
|
+
if ('condition' in gate && gate.condition) {
|
|
119
|
+
planStep.gate.condition = gate.condition;
|
|
120
|
+
}
|
|
121
|
+
if ('min' in gate && gate.min !== undefined) {
|
|
122
|
+
planStep.gate.min = gate.min;
|
|
123
|
+
}
|
|
124
|
+
if (gate['on-false']) {
|
|
125
|
+
planStep.gate.onFail = {
|
|
126
|
+
action: gate['on-false'].action,
|
|
127
|
+
goto: gate['on-false'].goto,
|
|
128
|
+
message: gate['on-false'].message,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return planStep;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Remove steps whose required capabilities are not available.
|
|
137
|
+
*/
|
|
138
|
+
export function pruneSteps(steps, probes) {
|
|
139
|
+
const kept = [];
|
|
140
|
+
const skipped = [];
|
|
141
|
+
for (const step of steps) {
|
|
142
|
+
const missingProbes = step.requires.filter((r) => !probes[r]);
|
|
143
|
+
if (missingProbes.length > 0) {
|
|
144
|
+
skipped.push({
|
|
145
|
+
id: step.id,
|
|
146
|
+
name: step.name,
|
|
147
|
+
reason: `Missing capabilities: ${missingProbes.join(', ')}`,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
kept.push(step);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { kept, skipped };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Build a full orchestration plan from intent, agent config, and runtime.
|
|
158
|
+
*/
|
|
159
|
+
export async function buildPlan(intent, agentId, projectPath, runtime, prompt) {
|
|
160
|
+
const normalizedIntent = intent.toUpperCase();
|
|
161
|
+
const flowId = INTENT_TO_FLOW[normalizedIntent] ?? 'BUILD-flow';
|
|
162
|
+
const flow = loadFlowById(flowId);
|
|
163
|
+
const probes = await runProbes(runtime, projectPath);
|
|
164
|
+
let steps = [];
|
|
165
|
+
let skipped = [];
|
|
166
|
+
const warnings = [];
|
|
167
|
+
if (flow) {
|
|
168
|
+
let allSteps = flowStepsToPlanSteps(flow, agentId);
|
|
169
|
+
// Context-sensitive chain routing: detect what's being built/fixed/reviewed
|
|
170
|
+
// and apply chain overrides (inject, skip, substitute) before pruning.
|
|
171
|
+
const entities = { components: [], actions: [] };
|
|
172
|
+
const contexts = prompt ? detectContext(prompt, entities) : [];
|
|
173
|
+
if (contexts.length > 0) {
|
|
174
|
+
allSteps = applyContextOverrides(allSteps, contexts, flowId, agentId);
|
|
175
|
+
}
|
|
176
|
+
const pruneResult = pruneSteps(allSteps, probes);
|
|
177
|
+
steps = pruneResult.kept;
|
|
178
|
+
skipped = pruneResult.skipped;
|
|
179
|
+
if (pruneResult.skipped.length > 0) {
|
|
180
|
+
warnings.push(`${pruneResult.skipped.length} step(s) skipped due to missing capabilities.`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
warnings.push(`Flow "${flowId}" not found — plan will have no steps.`);
|
|
185
|
+
}
|
|
186
|
+
if (!probes.vault)
|
|
187
|
+
warnings.push('Vault unavailable — knowledge capture will be skipped.');
|
|
188
|
+
if (!probes.brain)
|
|
189
|
+
warnings.push('Brain has no vocabulary — recommendations may be limited.');
|
|
190
|
+
const epilogue = [];
|
|
191
|
+
if (probes.vault)
|
|
192
|
+
epilogue.push('capture_knowledge');
|
|
193
|
+
if (probes.sessionStore)
|
|
194
|
+
epilogue.push('session_capture');
|
|
195
|
+
return {
|
|
196
|
+
planId: randomUUID(),
|
|
197
|
+
intent: normalizedIntent,
|
|
198
|
+
flowId,
|
|
199
|
+
steps,
|
|
200
|
+
skipped,
|
|
201
|
+
epilogue,
|
|
202
|
+
warnings,
|
|
203
|
+
summary: prompt ?? `${normalizedIntent} plan with ${steps.length} step(s)`,
|
|
204
|
+
estimatedTools: steps.reduce((acc, s) => acc + s.tools.length, 0),
|
|
205
|
+
context: {
|
|
206
|
+
intent: normalizedIntent,
|
|
207
|
+
probes,
|
|
208
|
+
entities: { components: [], actions: [] },
|
|
209
|
+
projectPath,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=plan-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-builder.js","sourceRoot":"","sources":["../../src/flows/plan-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability probes — detect what subsystems are available at runtime.
|
|
3
|
+
* All probes are resilient: they catch errors and return false on failure.
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentRuntime } from '../runtime/types.js';
|
|
6
|
+
import type { ProbeResults } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Run all 6 capability probes in parallel and return results.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runProbes(runtime: AgentRuntime, projectPath: string): Promise<ProbeResults>;
|
|
11
|
+
//# sourceMappingURL=probes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/flows/probes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAWjG"}
|