@burtson-labs/agent-core 1.6.39 → 1.6.41
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/dist/graph/contracts.d.ts +48 -0
- package/dist/graph/contracts.d.ts.map +1 -0
- package/dist/graph/contracts.js +88 -0
- package/dist/graph/contracts.js.map +1 -0
- package/dist/graph/envelopes.d.ts +48 -0
- package/dist/graph/envelopes.d.ts.map +1 -0
- package/dist/graph/envelopes.js +46 -0
- package/dist/graph/envelopes.js.map +1 -0
- package/dist/graph/index.d.ts +2 -0
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +2 -0
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/loopNode.d.ts.map +1 -1
- package/dist/graph/loopNode.js +26 -0
- package/dist/graph/loopNode.js.map +1 -1
- package/dist/graph/scheduler.d.ts.map +1 -1
- package/dist/graph/scheduler.js +20 -2
- package/dist/graph/scheduler.js.map +1 -1
- package/dist/graph/types.d.ts +45 -0
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3 — completion contracts, evidence, verification nodes.
|
|
3
|
+
*
|
|
4
|
+
* A node that "completed" without producing what it promised is the graph
|
|
5
|
+
* version of the claim-without-doing problem the loop's detectors chase in
|
|
6
|
+
* prose. Contracts make the promise EXPLICIT and machine-checkable:
|
|
7
|
+
* an executor returns an outcome + evidence, the scheduler checks the node's
|
|
8
|
+
* contract against them, and a violation IS a failure — dependents skip, the
|
|
9
|
+
* run reports failed, nobody builds on unverified work.
|
|
10
|
+
*
|
|
11
|
+
* Contracts are deliberately DECLARATIVE (plain data, serializable):
|
|
12
|
+
* - a future planner (Phase 9) can propose them alongside a GraphSpec;
|
|
13
|
+
* - checkpoints (Phase 5) can persist them;
|
|
14
|
+
* - hosts can render "why is this node failed" without executing anything.
|
|
15
|
+
* Anything needing custom logic belongs in a verification NODE — independent
|
|
16
|
+
* work the scheduler runs like any other node — not in a contract lambda.
|
|
17
|
+
*/
|
|
18
|
+
import type { CompletionContract, EvidenceItem, GraphNodeSpec, NodeExecutor, NodeRunContext } from './types';
|
|
19
|
+
/**
|
|
20
|
+
* Check a contract. Returns human-readable violations — empty array = pass.
|
|
21
|
+
* Pure and total: bad regex sources become a violation, never a throw.
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkContract(contract: CompletionContract | undefined, outcome: {
|
|
24
|
+
output?: unknown;
|
|
25
|
+
evidence?: EvidenceItem[];
|
|
26
|
+
}): string[];
|
|
27
|
+
/** What a verifier decides about upstream work. */
|
|
28
|
+
export interface Verdict {
|
|
29
|
+
pass: boolean;
|
|
30
|
+
/** Required when pass=false — a verdict without reasons is unactionable. */
|
|
31
|
+
reasons?: string[];
|
|
32
|
+
}
|
|
33
|
+
export type VerifierFn = (ctx: NodeRunContext) => Promise<Verdict> | Verdict;
|
|
34
|
+
/**
|
|
35
|
+
* Build an INDEPENDENT verification node for `targetId`: it depends on the
|
|
36
|
+
* target, runs the verifier against the target's result, and fails the graph
|
|
37
|
+
* branch when the verdict is negative — so anything depending on the verify
|
|
38
|
+
* node only runs over verified work. (Chain: work → verify → consume.)
|
|
39
|
+
*
|
|
40
|
+
* The verifier is ordinary node work — it can be a wrapped loop turn (a second
|
|
41
|
+
* model reviewing the first's output) or plain code (run the tests, diff the
|
|
42
|
+
* artifact). The scheduler treats it like any node; there is no special path.
|
|
43
|
+
*/
|
|
44
|
+
export declare function verificationNode(id: string, targetId: string, verifier: VerifierFn, spec?: Partial<Pick<GraphNodeSpec, 'label' | 'dependsOn'>>): {
|
|
45
|
+
node: GraphNodeSpec;
|
|
46
|
+
executor: NodeExecutor;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/graph/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,GACvD,MAAM,EAAE,CA8BV;AAID,mDAAmD;AACnD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAE7E;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,UAAU,EACpB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,GACzD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAmBjD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3 — completion contracts, evidence, verification nodes.
|
|
4
|
+
*
|
|
5
|
+
* A node that "completed" without producing what it promised is the graph
|
|
6
|
+
* version of the claim-without-doing problem the loop's detectors chase in
|
|
7
|
+
* prose. Contracts make the promise EXPLICIT and machine-checkable:
|
|
8
|
+
* an executor returns an outcome + evidence, the scheduler checks the node's
|
|
9
|
+
* contract against them, and a violation IS a failure — dependents skip, the
|
|
10
|
+
* run reports failed, nobody builds on unverified work.
|
|
11
|
+
*
|
|
12
|
+
* Contracts are deliberately DECLARATIVE (plain data, serializable):
|
|
13
|
+
* - a future planner (Phase 9) can propose them alongside a GraphSpec;
|
|
14
|
+
* - checkpoints (Phase 5) can persist them;
|
|
15
|
+
* - hosts can render "why is this node failed" without executing anything.
|
|
16
|
+
* Anything needing custom logic belongs in a verification NODE — independent
|
|
17
|
+
* work the scheduler runs like any other node — not in a contract lambda.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.checkContract = checkContract;
|
|
21
|
+
exports.verificationNode = verificationNode;
|
|
22
|
+
/**
|
|
23
|
+
* Check a contract. Returns human-readable violations — empty array = pass.
|
|
24
|
+
* Pure and total: bad regex sources become a violation, never a throw.
|
|
25
|
+
*/
|
|
26
|
+
function checkContract(contract, outcome) {
|
|
27
|
+
if (!contract)
|
|
28
|
+
return [];
|
|
29
|
+
const violations = [];
|
|
30
|
+
const text = typeof outcome.output === 'string'
|
|
31
|
+
? outcome.output
|
|
32
|
+
: outcome.output === undefined
|
|
33
|
+
? ''
|
|
34
|
+
: JSON.stringify(outcome.output);
|
|
35
|
+
if (contract.outputNonEmpty && text.trim().length === 0) {
|
|
36
|
+
violations.push('contract: output is empty');
|
|
37
|
+
}
|
|
38
|
+
if (contract.outputMatches) {
|
|
39
|
+
try {
|
|
40
|
+
const re = new RegExp(contract.outputMatches, 's');
|
|
41
|
+
if (!re.test(text)) {
|
|
42
|
+
violations.push(`contract: output does not match /${contract.outputMatches}/`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
violations.push(`contract: invalid outputMatches regex /${contract.outputMatches}/`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const req of contract.requireEvidence ?? []) {
|
|
50
|
+
const min = Math.max(1, req.min ?? 1);
|
|
51
|
+
const count = (outcome.evidence ?? []).filter((e) => e.kind === req.kind).length;
|
|
52
|
+
if (count < min) {
|
|
53
|
+
violations.push(`contract: needs ${min} evidence of kind "${req.kind}", got ${count}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return violations;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build an INDEPENDENT verification node for `targetId`: it depends on the
|
|
60
|
+
* target, runs the verifier against the target's result, and fails the graph
|
|
61
|
+
* branch when the verdict is negative — so anything depending on the verify
|
|
62
|
+
* node only runs over verified work. (Chain: work → verify → consume.)
|
|
63
|
+
*
|
|
64
|
+
* The verifier is ordinary node work — it can be a wrapped loop turn (a second
|
|
65
|
+
* model reviewing the first's output) or plain code (run the tests, diff the
|
|
66
|
+
* artifact). The scheduler treats it like any node; there is no special path.
|
|
67
|
+
*/
|
|
68
|
+
function verificationNode(id, targetId, verifier, spec) {
|
|
69
|
+
const node = {
|
|
70
|
+
id,
|
|
71
|
+
label: spec?.label ?? `verify ${targetId}`,
|
|
72
|
+
dependsOn: [...new Set([targetId, ...(spec?.dependsOn ?? [])])],
|
|
73
|
+
};
|
|
74
|
+
const executor = async (ctx) => {
|
|
75
|
+
const verdict = await verifier(ctx);
|
|
76
|
+
if (!verdict.pass) {
|
|
77
|
+
const reasons = verdict.reasons?.length ? verdict.reasons.join('; ') : 'no reasons given';
|
|
78
|
+
throw new Error(`verification failed for ${targetId}: ${reasons}`);
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
output: verdict,
|
|
82
|
+
summary: `verified ${targetId}`,
|
|
83
|
+
evidence: [{ kind: 'verification', detail: targetId, data: verdict }],
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
return { node, executor };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/graph/contracts.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAcH,sCAiCC;AAuBD,4CAwBC;AApFD;;;GAGG;AACH,SAAgB,aAAa,CAC3B,QAAwC,EACxC,OAAwD;IAExD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAC7C,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,0CAA0C,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACjF,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,mBAAmB,GAAG,sBAAsB,GAAG,CAAC,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAaD;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAC9B,EAAU,EACV,QAAgB,EAChB,QAAoB,EACpB,IAA0D;IAE1D,MAAM,IAAI,GAAkB;QAC1B,EAAE;QACF,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,UAAU,QAAQ,EAAE;QAC1C,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAChE,CAAC;IACF,MAAM,QAAQ,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAC1F,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;YACL,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,YAAY,QAAQ,EAAE;YAC/B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 6 — per-node capability envelopes.
|
|
3
|
+
*
|
|
4
|
+
* An envelope narrows what a NODE may do, independent of what the host's
|
|
5
|
+
* global permission model allows. The two compose, and the layering is
|
|
6
|
+
* deliberate:
|
|
7
|
+
*
|
|
8
|
+
* - agent-core (here) provides the MECHANISM: a declarative, serializable
|
|
9
|
+
* envelope (tool-name allow/deny) evaluated as a beforeToolExecute-style
|
|
10
|
+
* gate, plus gate composition. No policy knowledge — this package doesn't
|
|
11
|
+
* know what "plan mode" or "risk tier" means.
|
|
12
|
+
* - hosts provide the POLICY: the CLI/extension inject their host-kit
|
|
13
|
+
* permission gate (mode + risk classification) per node via loop options;
|
|
14
|
+
* `composeGates` runs envelope first, host gate second, first deny wins.
|
|
15
|
+
*
|
|
16
|
+
* So "verification nodes run read-only" is spelled: give the verify node an
|
|
17
|
+
* envelope allowing only read tools — enforced in-core — while the host's own
|
|
18
|
+
* plan/auto gate still applies on top. A node can only ever be NARROWER than
|
|
19
|
+
* the host allows, never wider: an envelope has no allow-override power, it
|
|
20
|
+
* can only deny.
|
|
21
|
+
*/
|
|
22
|
+
import type { NodeEnvelope } from './types';
|
|
23
|
+
/** Same shape the tool loop's beforeToolExecute uses — kept structural so the
|
|
24
|
+
* graph module doesn't import loop types it doesn't need. */
|
|
25
|
+
export type ToolGate = (call: {
|
|
26
|
+
name: string;
|
|
27
|
+
params: Record<string, string>;
|
|
28
|
+
}) => Promise<{
|
|
29
|
+
allow: boolean;
|
|
30
|
+
reason?: string;
|
|
31
|
+
}> | {
|
|
32
|
+
allow: boolean;
|
|
33
|
+
reason?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Build a gate from a declarative envelope.
|
|
37
|
+
* - `denyTools` always blocks its entries (deny wins over allow).
|
|
38
|
+
* - `allowTools`, when present, blocks everything NOT listed.
|
|
39
|
+
* - No envelope / empty envelope = allow everything (the host gate still runs).
|
|
40
|
+
*/
|
|
41
|
+
export declare function envelopeGate(envelope: NodeEnvelope | undefined): ToolGate;
|
|
42
|
+
/**
|
|
43
|
+
* Compose gates left → right: the first deny wins (its reason surfaces), a
|
|
44
|
+
* call must pass every gate to run. Undefined entries are skipped so callers
|
|
45
|
+
* can pass optional host gates without branching.
|
|
46
|
+
*/
|
|
47
|
+
export declare function composeGates(...gates: Array<ToolGate | undefined>): ToolGate;
|
|
48
|
+
//# sourceMappingURL=envelopes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelopes.d.ts","sourceRoot":"","sources":["../../src/graph/envelopes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;8DAC8D;AAC9D,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KAC1E,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5C;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,CAkBzE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,CAS5E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envelopeGate = envelopeGate;
|
|
4
|
+
exports.composeGates = composeGates;
|
|
5
|
+
/**
|
|
6
|
+
* Build a gate from a declarative envelope.
|
|
7
|
+
* - `denyTools` always blocks its entries (deny wins over allow).
|
|
8
|
+
* - `allowTools`, when present, blocks everything NOT listed.
|
|
9
|
+
* - No envelope / empty envelope = allow everything (the host gate still runs).
|
|
10
|
+
*/
|
|
11
|
+
function envelopeGate(envelope) {
|
|
12
|
+
const deny = new Set(envelope?.denyTools ?? []);
|
|
13
|
+
const allow = envelope?.allowTools ? new Set(envelope.allowTools) : null;
|
|
14
|
+
return (call) => {
|
|
15
|
+
if (deny.has(call.name)) {
|
|
16
|
+
return {
|
|
17
|
+
allow: false,
|
|
18
|
+
reason: `node envelope denies "${call.name}" — this node may not use that tool; work within its declared capabilities or report what you would have done.`
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (allow && !allow.has(call.name)) {
|
|
22
|
+
return {
|
|
23
|
+
allow: false,
|
|
24
|
+
reason: `node envelope allows only [${[...allow].join(', ')}] — "${call.name}" is outside this node's capabilities; use the allowed tools or report what you would have done.`
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return { allow: true };
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compose gates left → right: the first deny wins (its reason surfaces), a
|
|
32
|
+
* call must pass every gate to run. Undefined entries are skipped so callers
|
|
33
|
+
* can pass optional host gates without branching.
|
|
34
|
+
*/
|
|
35
|
+
function composeGates(...gates) {
|
|
36
|
+
const active = gates.filter((g) => typeof g === 'function');
|
|
37
|
+
return async (call) => {
|
|
38
|
+
for (const gate of active) {
|
|
39
|
+
const verdict = await gate(call);
|
|
40
|
+
if (!verdict.allow)
|
|
41
|
+
return verdict;
|
|
42
|
+
}
|
|
43
|
+
return { allow: true };
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=envelopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelopes.js","sourceRoot":"","sources":["../../src/graph/envelopes.ts"],"names":[],"mappings":";;AAmCA,oCAkBC;AAOD,oCASC;AAxCD;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,QAAkC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,yBAAyB,IAAI,CAAC,IAAI,gHAAgH;aAC3J,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,8BAA8B,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,kGAAkG;aAC/K,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,GAAG,KAAkC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC;IAC3E,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,OAAO,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/graph/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
package/dist/graph/index.js
CHANGED
|
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./types"), exports);
|
|
18
18
|
__exportStar(require("./scheduler"), exports);
|
|
19
19
|
__exportStar(require("./loopNode"), exports);
|
|
20
|
+
__exportStar(require("./contracts"), exports);
|
|
21
|
+
__exportStar(require("./envelopes"), exports);
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/graph/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B;AAC5B,8CAA4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopNode.d.ts","sourceRoot":"","sources":["../../src/graph/loopNode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"loopNode.d.ts","sourceRoot":"","sources":["../../src/graph/loopNode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAgB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG1E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,oBAAoB,CAAC;IAC1B;kCAC8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;iEAC6D;IAC7D,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAWjE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,GAAG,YAAY,CA2C/F"}
|
package/dist/graph/loopNode.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.wrapLoopAsNode = wrapLoopAsNode;
|
|
|
10
10
|
* graph inspectable and retryable per-node later).
|
|
11
11
|
*/
|
|
12
12
|
const tool_use_loop_1 = require("../tools/tool-use-loop");
|
|
13
|
+
const envelopes_1 = require("./envelopes");
|
|
13
14
|
function defaultNodePrompt(base) {
|
|
14
15
|
return (ctx) => {
|
|
15
16
|
const upstreamIds = Object.keys(ctx.upstream);
|
|
@@ -30,8 +31,32 @@ function wrapLoopAsNode(deps, buildPrompt) {
|
|
|
30
31
|
}
|
|
31
32
|
return async (nodeCtx) => {
|
|
32
33
|
const chat = deps.chatFactory ? await deps.chatFactory() : deps.chat;
|
|
34
|
+
// Auto-evidence: successful edit-tool results become 'file-changed'
|
|
35
|
+
// evidence without the executor author doing anything — so a contract
|
|
36
|
+
// like requireEvidence:[{kind:'file-changed'}] works out of the box.
|
|
37
|
+
// The caller's own emitEvent (if any) still sees every event.
|
|
38
|
+
const EDIT_TOOLS = new Set(['write_file', 'apply_edit', 'replace_range', 'apply_patch', 'delete_file']);
|
|
39
|
+
const evidence = [];
|
|
40
|
+
const lastPath = new Map();
|
|
41
|
+
const callerEmit = deps.loopOptions?.emitEvent;
|
|
42
|
+
const emitEvent = (type, payload) => {
|
|
43
|
+
const p = (payload ?? {});
|
|
44
|
+
if (type === 'tool_loop:tool_execute' && p.name && EDIT_TOOLS.has(p.name)) {
|
|
45
|
+
lastPath.set(p.name, p.params?.path ?? '');
|
|
46
|
+
}
|
|
47
|
+
else if (type === 'tool_loop:tool_result' && p.name && EDIT_TOOLS.has(p.name) && !p.isError) {
|
|
48
|
+
evidence.push({ kind: 'file-changed', detail: lastPath.get(p.name) || undefined });
|
|
49
|
+
}
|
|
50
|
+
callerEmit?.(type, payload);
|
|
51
|
+
};
|
|
52
|
+
// Phase 6: the node's envelope (from its spec, threaded via NodeRunContext)
|
|
53
|
+
// composes with any host-injected gate — envelope first, host policy
|
|
54
|
+
// second, first deny wins. The envelope can only narrow, never widen.
|
|
55
|
+
const gate = (0, envelopes_1.composeGates)((0, envelopes_1.envelopeGate)(nodeCtx.envelope), deps.loopOptions?.beforeToolExecute);
|
|
33
56
|
const loop = (0, tool_use_loop_1.createToolUseLoop)(deps.registry, deps.ctx, {
|
|
34
57
|
...(deps.loopOptions ?? {}),
|
|
58
|
+
beforeToolExecute: gate,
|
|
59
|
+
emitEvent,
|
|
35
60
|
signal: nodeCtx.signal,
|
|
36
61
|
});
|
|
37
62
|
const result = await loop.run(buildPrompt(nodeCtx), chat, deps.systemPrompt);
|
|
@@ -41,6 +66,7 @@ function wrapLoopAsNode(deps, buildPrompt) {
|
|
|
41
66
|
return {
|
|
42
67
|
output: result.finalResponse,
|
|
43
68
|
summary: result.finalResponse.slice(0, 200),
|
|
69
|
+
evidence,
|
|
44
70
|
};
|
|
45
71
|
};
|
|
46
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopNode.js","sourceRoot":"","sources":["../../src/graph/loopNode.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"loopNode.js","sourceRoot":"","sources":["../../src/graph/loopNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/graph/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/graph/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD;AAED,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEzE,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,cAAc,EACzB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CA8JzB"}
|
package/dist/graph/scheduler.js
CHANGED
|
@@ -25,6 +25,7 @@ exports.runGraph = runGraph;
|
|
|
25
25
|
* graph:node_failed, graph:node_skipped, graph:node_cancelled, graph:done.
|
|
26
26
|
*/
|
|
27
27
|
const types_1 = require("./types");
|
|
28
|
+
const contracts_1 = require("./contracts");
|
|
28
29
|
async function runGraph(spec, executors, opts = {}) {
|
|
29
30
|
const startedAt = Date.now();
|
|
30
31
|
const validation = (0, types_1.validateGraph)(spec);
|
|
@@ -60,6 +61,7 @@ async function runGraph(spec, executors, opts = {}) {
|
|
|
60
61
|
}
|
|
61
62
|
const deps = new Map(spec.nodes.map((n) => [n.id, n.dependsOn ?? []]));
|
|
62
63
|
const labelOf = new Map(spec.nodes.map((n) => [n.id, n.label ?? n.id]));
|
|
64
|
+
const specOf = new Map(spec.nodes.map((n) => [n.id, n]));
|
|
63
65
|
const running = new Map();
|
|
64
66
|
let anyFailed = false;
|
|
65
67
|
const readyToRun = (id) => results[id].state === 'pending' &&
|
|
@@ -98,11 +100,27 @@ async function runGraph(spec, executors, opts = {}) {
|
|
|
98
100
|
nodeId: id,
|
|
99
101
|
signal: signal ?? new AbortController().signal,
|
|
100
102
|
upstream,
|
|
103
|
+
envelope: specOf.get(id)?.envelope,
|
|
101
104
|
});
|
|
102
|
-
|
|
105
|
+
// Phase 3: the node only counts as done if its completion contract
|
|
106
|
+
// holds. A violation is a FAILURE — "finished but produced nothing it
|
|
107
|
+
// promised" must not feed downstream nodes.
|
|
108
|
+
const violations = (0, contracts_1.checkContract)(specOf.get(id)?.contract, outcome ?? {});
|
|
103
109
|
record.output = outcome?.output;
|
|
104
110
|
record.summary = outcome?.summary;
|
|
105
|
-
|
|
111
|
+
record.evidence = outcome?.evidence;
|
|
112
|
+
if (violations.length > 0) {
|
|
113
|
+
record.state = 'failed';
|
|
114
|
+
record.error = violations.join('; ');
|
|
115
|
+
record.contractViolations = violations;
|
|
116
|
+
anyFailed = true;
|
|
117
|
+
emit('graph:node_contract_violation', { id, label: labelOf.get(id), violations });
|
|
118
|
+
emit('graph:node_failed', { id, label: labelOf.get(id), error: record.error });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
record.state = 'done';
|
|
122
|
+
emit('graph:node_done', { id, label: labelOf.get(id), summary: record.summary });
|
|
123
|
+
}
|
|
106
124
|
}
|
|
107
125
|
catch (err) {
|
|
108
126
|
record.state = 'failed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/graph/scheduler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/graph/scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/types.d.ts
CHANGED
|
@@ -18,6 +18,37 @@
|
|
|
18
18
|
* pending → cancelled (the run's signal aborted before it started)
|
|
19
19
|
* Terminal states never transition again.
|
|
20
20
|
*/
|
|
21
|
+
/** A structured claim about what a node actually did (Phase 3).
|
|
22
|
+
* e.g. { kind: 'file-changed', detail: 'src/x.ts' }. JSON-serializable. */
|
|
23
|
+
export interface EvidenceItem {
|
|
24
|
+
kind: string;
|
|
25
|
+
detail?: string;
|
|
26
|
+
data?: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface EvidenceRequirement {
|
|
29
|
+
kind: string;
|
|
30
|
+
/** Minimum count of matching items. Default 1. */
|
|
31
|
+
min?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Declarative completion contract: what a node MUST produce to count as
|
|
34
|
+
* done. Checked by the scheduler after the executor resolves; violations are
|
|
35
|
+
* failures (dependents skip). Plain data on purpose — proposable by a future
|
|
36
|
+
* planner, persistable by future checkpoints. */
|
|
37
|
+
export interface CompletionContract {
|
|
38
|
+
outputNonEmpty?: boolean;
|
|
39
|
+
/** Regex source the (stringified) output must match (flags: 's'). */
|
|
40
|
+
outputMatches?: string;
|
|
41
|
+
requireEvidence?: EvidenceRequirement[];
|
|
42
|
+
}
|
|
43
|
+
/** Per-node capability envelope (Phase 6) — declarative tool-name bounds.
|
|
44
|
+
* `denyTools` always blocks; `allowTools`, when present, blocks everything
|
|
45
|
+
* not listed. An envelope can only NARROW what the host's own permission
|
|
46
|
+
* gate allows, never widen it. Plain data on purpose (planner-proposable,
|
|
47
|
+
* checkpoint-persistable). */
|
|
48
|
+
export interface NodeEnvelope {
|
|
49
|
+
allowTools?: string[];
|
|
50
|
+
denyTools?: string[];
|
|
51
|
+
}
|
|
21
52
|
/** One node in the DAG. */
|
|
22
53
|
export interface GraphNodeSpec {
|
|
23
54
|
/** Unique id within the graph. */
|
|
@@ -26,6 +57,10 @@ export interface GraphNodeSpec {
|
|
|
26
57
|
dependsOn?: string[];
|
|
27
58
|
/** Human label for UIs; falls back to id. */
|
|
28
59
|
label?: string;
|
|
60
|
+
/** Completion contract enforced on this node's outcome. */
|
|
61
|
+
contract?: CompletionContract;
|
|
62
|
+
/** Capability envelope enforced while this node runs. */
|
|
63
|
+
envelope?: NodeEnvelope;
|
|
29
64
|
}
|
|
30
65
|
export interface GraphSpec {
|
|
31
66
|
nodes: GraphNodeSpec[];
|
|
@@ -36,6 +71,9 @@ export type NodeState = 'pending' | 'running' | 'done' | 'failed' | 'skipped' |
|
|
|
36
71
|
export interface NodeOutcome {
|
|
37
72
|
output?: unknown;
|
|
38
73
|
summary?: string;
|
|
74
|
+
/** Structured claims about what was actually done — checked against the
|
|
75
|
+
* node's contract and carried on the result for downstream/UIs. */
|
|
76
|
+
evidence?: EvidenceItem[];
|
|
39
77
|
}
|
|
40
78
|
/** Terminal record for one node after a run. */
|
|
41
79
|
export interface NodeResult {
|
|
@@ -43,8 +81,11 @@ export interface NodeResult {
|
|
|
43
81
|
state: NodeState;
|
|
44
82
|
output?: unknown;
|
|
45
83
|
summary?: string;
|
|
84
|
+
evidence?: EvidenceItem[];
|
|
46
85
|
/** Set when state === 'failed'. */
|
|
47
86
|
error?: string;
|
|
87
|
+
/** Set when the failure was a contract violation (state 'failed'). */
|
|
88
|
+
contractViolations?: string[];
|
|
48
89
|
startedAt?: number;
|
|
49
90
|
endedAt?: number;
|
|
50
91
|
durationMs?: number;
|
|
@@ -63,6 +104,10 @@ export interface NodeRunContext {
|
|
|
63
104
|
signal: AbortSignal;
|
|
64
105
|
/** Terminal results of this node's direct dependencies (all state 'done'). */
|
|
65
106
|
upstream: Record<string, NodeResult>;
|
|
107
|
+
/** The node's capability envelope, threaded from its spec. Loop-wrapped
|
|
108
|
+
* executors enforce it automatically (see loopNode.ts); custom executors
|
|
109
|
+
* receive it here and are expected to honor it. */
|
|
110
|
+
envelope?: NodeEnvelope;
|
|
66
111
|
}
|
|
67
112
|
export type NodeExecutor = (ctx: NodeRunContext) => Promise<NodeOutcome> | NodeOutcome;
|
|
68
113
|
export interface GraphValidation {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"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"}
|