@agenticprimitives/orchestration 0.0.0-alpha.2 → 0.0.0-alpha.20
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 +2 -0
- package/dist/admission.d.ts +66 -10
- package/dist/admission.d.ts.map +1 -1
- package/dist/admission.js +203 -8
- package/dist/admission.js.map +1 -1
- package/dist/answer-quality.d.ts +129 -0
- package/dist/answer-quality.d.ts.map +1 -0
- package/dist/answer-quality.js +197 -0
- package/dist/answer-quality.js.map +1 -0
- package/dist/authority.d.ts +39 -0
- package/dist/authority.d.ts.map +1 -1
- package/dist/conformance.d.ts +66 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +140 -0
- package/dist/conformance.js.map +1 -0
- package/dist/derivation.d.ts +21 -0
- package/dist/derivation.d.ts.map +1 -0
- package/dist/derivation.js +31 -0
- package/dist/derivation.js.map +1 -0
- package/dist/evidence.d.ts +77 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +101 -0
- package/dist/evidence.js.map +1 -0
- package/dist/export-port.d.ts +13 -0
- package/dist/export-port.d.ts.map +1 -0
- package/dist/export-port.js +2 -0
- package/dist/export-port.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -4
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +37 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +46 -0
- package/dist/intent.js.map +1 -0
- package/dist/judgment.d.ts +131 -0
- package/dist/judgment.d.ts.map +1 -0
- package/dist/judgment.js +249 -0
- package/dist/judgment.js.map +1 -0
- package/dist/loop.d.ts +52 -7
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +314 -64
- package/dist/loop.js.map +1 -1
- package/dist/metrics.js +8 -8
- package/dist/metrics.js.map +1 -1
- package/dist/outcome.d.ts +223 -0
- package/dist/outcome.d.ts.map +1 -0
- package/dist/outcome.js +325 -0
- package/dist/outcome.js.map +1 -0
- package/dist/plan-digest.d.ts +6 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plan-digest.js +35 -0
- package/dist/plan-digest.js.map +1 -0
- package/dist/planner.d.ts +18 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +74 -0
- package/dist/planner.js.map +1 -1
- package/dist/reconcile.d.ts +41 -0
- package/dist/reconcile.d.ts.map +1 -0
- package/dist/reconcile.js +20 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/record.d.ts +125 -21
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +47 -1
- package/dist/record.js.map +1 -1
- package/dist/regression.d.ts +109 -0
- package/dist/regression.d.ts.map +1 -0
- package/dist/regression.js +97 -0
- package/dist/regression.js.map +1 -0
- package/dist/rollup.d.ts +72 -0
- package/dist/rollup.d.ts.map +1 -0
- package/dist/rollup.js +117 -0
- package/dist/rollup.js.map +1 -0
- package/dist/selection.d.ts +334 -0
- package/dist/selection.d.ts.map +1 -0
- package/dist/selection.js +481 -0
- package/dist/selection.js.map +1 -0
- package/dist/spans.d.ts +62 -0
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +78 -11
- package/dist/spans.js.map +1 -1
- package/dist/tool-invoker.d.ts +54 -3
- package/dist/tool-invoker.d.ts.map +1 -1
- package/dist/tool-invoker.js +26 -1
- package/dist/tool-invoker.js.map +1 -1
- package/dist/trace-facts.d.ts +93 -0
- package/dist/trace-facts.d.ts.map +1 -0
- package/dist/trace-facts.js +82 -0
- package/dist/trace-facts.js.map +1 -0
- package/dist/types.d.ts +86 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/package.json +17 -8
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ExecutionBindingV1 } from './authority.js';
|
|
2
|
+
import type { PlanStep, ToolSpec } from './types.js';
|
|
3
|
+
import type { ToolObservationV1 } from './tool-invoker.js';
|
|
4
|
+
export type ReconcileAnswer =
|
|
5
|
+
/** The effect already happened: what the reconcile read, and the observation that proves it. */
|
|
6
|
+
{
|
|
7
|
+
status: 'found';
|
|
8
|
+
output: unknown;
|
|
9
|
+
observation: Omit<ToolObservationV1, 'outcome'> & {
|
|
10
|
+
outcome?: 'committed' | 'confirmed';
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** No trace of the operation: verify and act. */
|
|
14
|
+
| {
|
|
15
|
+
status: 'absent';
|
|
16
|
+
}
|
|
17
|
+
/** The store that would know could not be asked: no act this attempt. */
|
|
18
|
+
| {
|
|
19
|
+
status: 'indeterminate';
|
|
20
|
+
reason: string;
|
|
21
|
+
};
|
|
22
|
+
export interface ReconcileRequest {
|
|
23
|
+
/** The logical operation identity a retry must locate, never perform again. */
|
|
24
|
+
operationId: string;
|
|
25
|
+
runRef: string;
|
|
26
|
+
stepRef: string;
|
|
27
|
+
step: PlanStep;
|
|
28
|
+
tool: ToolSpec;
|
|
29
|
+
args: Record<string, unknown>;
|
|
30
|
+
/** The admitted binding, when the harness pinned one (it carries the same operation id). */
|
|
31
|
+
binding?: ExecutionBindingV1;
|
|
32
|
+
}
|
|
33
|
+
export interface ReconcilePort {
|
|
34
|
+
reconcile(req: ReconcileRequest): Promise<ReconcileAnswer>;
|
|
35
|
+
}
|
|
36
|
+
/** A reconcile port composed per tool id (or capability id): the runtime binds each effect kind's lookup. A tool
|
|
37
|
+
* nobody bound is `absent` — unless a `fallback` is given, which answers for every unbound tool (the runtime's
|
|
38
|
+
* routed-step lookup: a step whose subject is another agent is reconciled against THAT agent's run, whatever the
|
|
39
|
+
* tool). The fallback answers `absent` for a step it does not recognise. */
|
|
40
|
+
export declare function reconcileByTool(bindings: Record<string, (req: ReconcileRequest) => Promise<ReconcileAnswer>>, fallback?: (req: ReconcileRequest) => Promise<ReconcileAnswer>): ReconcilePort;
|
|
41
|
+
//# sourceMappingURL=reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,eAAe;AACzB,gGAAgG;AAC9F;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAA;KAAE,CAAA;CAAE;AACjI,iDAAiD;GAC/C;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE;AACtB,yEAAyE;GACvE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,4FAA4F;IAC5F,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D;AAED;;;6EAG6E;AAC7E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,aAAa,CAS5L"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** A reconcile port composed per tool id (or capability id): the runtime binds each effect kind's lookup. A tool
|
|
2
|
+
* nobody bound is `absent` — unless a `fallback` is given, which answers for every unbound tool (the runtime's
|
|
3
|
+
* routed-step lookup: a step whose subject is another agent is reconciled against THAT agent's run, whatever the
|
|
4
|
+
* tool). The fallback answers `absent` for a step it does not recognise. */
|
|
5
|
+
export function reconcileByTool(bindings, fallback) {
|
|
6
|
+
return {
|
|
7
|
+
async reconcile(req) {
|
|
8
|
+
const fn = bindings[req.tool.id] ?? (req.tool.capability ? bindings[req.tool.capability.id] : undefined) ?? fallback;
|
|
9
|
+
if (!fn)
|
|
10
|
+
return { status: 'absent' };
|
|
11
|
+
try {
|
|
12
|
+
return await fn(req);
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
return { status: 'indeterminate', reason: e instanceof Error ? e.message : String(e) };
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAiDA;;;6EAG6E;AAC7E,MAAM,UAAU,eAAe,CAAC,QAA6E,EAAE,QAA8D;IAC3K,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,GAAG;YACjB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC;YACrH,IAAI,CAAC,EAAE;gBAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAC7B,OAAO,CAAC,EAAE,CAAC;gBAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC;QACvG,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/record.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ import { type RunIntentOpts } from './loop.js';
|
|
|
4
4
|
import type { ToolInvoker } from './tool-invoker.js';
|
|
5
5
|
import type { TraceContextV1 } from './trace-context.js';
|
|
6
6
|
import type { OffloadReport } from './artifacts.js';
|
|
7
|
+
import type { HarnessEngagementV1, ModelCallV1, RunDoorV1, StartingStateRefV1, VariantV1 } from './trace-facts.js';
|
|
8
|
+
/** Spec 438 §3 — the Endeavor a run was part of. Ids are opaque to orchestration on purpose. */
|
|
9
|
+
export interface RunWorkRefV1 {
|
|
10
|
+
endeavorId: string;
|
|
11
|
+
commitmentId?: string;
|
|
12
|
+
planStepId?: string;
|
|
13
|
+
}
|
|
7
14
|
export interface RunRecordV1 {
|
|
8
15
|
type: 'ap.run-record.v1';
|
|
9
16
|
runRef: string;
|
|
@@ -37,36 +44,75 @@ export interface RunRecordV1 {
|
|
|
37
44
|
* trace (its id, parented to the caller's span) instead of deriving one. Correlation, never trust: no
|
|
38
45
|
* gate reads it, and a forged one changes no verdict (the authority twin). */
|
|
39
46
|
traceContext?: TraceContextV1;
|
|
40
|
-
/** Spec 390 W3 — WHO PROPOSED THE PLAN AND WHO COMPOSED THE REPLY, as names and numbers only: the planner
|
|
41
|
-
* kind (a screen, a compiled shape, a model), the model and provider, and the route's reasons (spec 388 —
|
|
42
|
-
* provider names and token counts, never words). Read by the span projection for the `plan` and
|
|
43
|
-
* `issue_outcome` spans; consulted by no verifier. */
|
|
44
|
-
planner?: RunPlannerSummaryV1;
|
|
45
47
|
/** Spec 390 W3 — when the REQUEST arrived (ms), before the loop started: the gap to `RunStarted` is the
|
|
46
48
|
* admission and preparation the record itself does not itemise (the session, the standing, the playbook),
|
|
47
49
|
* shown as one `receive_request` span rather than hidden. */
|
|
48
50
|
receivedAt?: number;
|
|
51
|
+
/** Spec 390 W3 — the preparation and the wrap-up ITEMISED: what the runtime awaited before `RunStarted` (the
|
|
52
|
+
* session, the budget, the playbook, the standing) and after `RunCompleted` (the reply, the offload), each as a
|
|
53
|
+
* name and a window (ms). Projected as child spans of `receive_request` / `issue_outcome` so a slow turn says
|
|
54
|
+
* WHICH read was slow; never read by a gate. Names are stage words, never a record's content. */
|
|
55
|
+
marks?: RunMarkV1[];
|
|
49
56
|
/** Spec 391 — which steps' results were offloaded to the acting agent's vault (and which write was refused). */
|
|
50
57
|
offloaded?: OffloadReport[];
|
|
58
|
+
/** Spec 398 §5.3 — CANCELED by the person who could resume it: the run stops; what already happened stands
|
|
59
|
+
* (`afterSteps` completed steps, their receipts above). Distinct from `failed` (nothing went wrong) and from a
|
|
60
|
+
* revoked mandate (authority withdrawn — the next step would be refused; the run itself is not stopped). A
|
|
61
|
+
* canceled run reads `canceled` wherever a state is shown, never `failed`. */
|
|
62
|
+
canceled?: {
|
|
63
|
+
at: number;
|
|
64
|
+
by: string;
|
|
65
|
+
afterSteps: number;
|
|
66
|
+
note?: string;
|
|
67
|
+
};
|
|
51
68
|
/** Spec 396 W3 — what the run COST its agent's storage: vault calls and serving-plane (DO) requests, by the step
|
|
52
69
|
* that made them (`plan` for the planner's reads). Numbers only; exported as the `ap.vault.calls` metric. */
|
|
53
70
|
bill?: RunBillV1;
|
|
71
|
+
/** Spec 414 A1 — HOW THE RUN ARRIVED: the door kind and, for an A2A message, its message / context / task ids. */
|
|
72
|
+
door?: RunDoorV1;
|
|
73
|
+
/** Spec 438 §3 — THE WORK THIS RUN WAS PART OF: the Endeavor it serves, and optionally the commitment and
|
|
74
|
+
* plan step within it. A REFERENCE, never authority — a run's permission comes from its mandate, and no
|
|
75
|
+
* verifier, admission stage or enforcer reads this. Ids are plain strings because orchestration does not
|
|
76
|
+
* depend on coordination (the reference points outward; the dependency must not follow it).
|
|
77
|
+
*
|
|
78
|
+
* IT MAY BE ABSENT, and absent is the honest value. A solo Ask that named no work has no workRef; minting a
|
|
79
|
+
* synthetic Endeavor to fill the field would record a fact nobody asserted. For the same reason a retry does
|
|
80
|
+
* NOT inherit its predecessor's work: joining work is an explicit `AttachRun` by a participant, never an
|
|
81
|
+
* inference from a shared contextId or from being the next run along. */
|
|
82
|
+
work?: RunWorkRefV1;
|
|
83
|
+
/** Spec 414 A1 — every language-model call the run made (plan, compose, structured), as names and numbers. */
|
|
84
|
+
modelCalls?: ModelCallV1[];
|
|
85
|
+
/** Spec 414 A1 — the configuration the run ran under; its digest is what a comparison groups by. */
|
|
86
|
+
variant?: VariantV1;
|
|
87
|
+
/** Spec 414 A1 — the seeded records the run began from (a comparison's fixture), by digest. */
|
|
88
|
+
startingState?: StartingStateRefV1;
|
|
89
|
+
/** Spec 414 §3.2 — harness capabilities engaged that leave no other fact on the record (a standing instruction
|
|
90
|
+
* applied, a confirmation reused …). What the record already shows is derived by `engagementsOf`. */
|
|
91
|
+
engaged?: HarnessEngagementV1[];
|
|
92
|
+
/** Spec 417 §5 — HOW THE TURN WENT, kept past the reply: where its time went (stage → ms, the wall phases
|
|
93
|
+
* included), how the skill was chosen (the arm, the choice or hold, the chain, the judge), and the turn it belongs to.
|
|
94
|
+
* Numbers and ids only — never a prompt, never an answer. Read by the inspector, the ops index and the Lab. */
|
|
95
|
+
operational?: RunOperationalV1;
|
|
54
96
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
97
|
+
export interface RunOperationalV1 {
|
|
98
|
+
stages?: Record<string, number>;
|
|
99
|
+
selectionMs?: number;
|
|
100
|
+
selection?: {
|
|
101
|
+
approach: string;
|
|
102
|
+
chose: string | null;
|
|
103
|
+
hold?: string;
|
|
104
|
+
chain?: string[];
|
|
105
|
+
missing?: string[];
|
|
106
|
+
judge?: string;
|
|
107
|
+
confidence?: number;
|
|
108
|
+
};
|
|
109
|
+
skillStage?: string;
|
|
110
|
+
/** 2026-10-02 (`plan/chain-proceed`) — a chain's terminal step ran under the proceed-anyway instruction. */
|
|
111
|
+
chainProceed?: boolean;
|
|
112
|
+
/** The conversation this turn belongs to (the A2A context id, else the Home thread) and the turn's place in it. */
|
|
113
|
+
turn?: {
|
|
114
|
+
contextId?: string;
|
|
115
|
+
recalledTurns?: number;
|
|
70
116
|
};
|
|
71
117
|
}
|
|
72
118
|
/** Spec 381 — the exporter's report, kept on the record. */
|
|
@@ -88,6 +134,32 @@ export interface RunExportReportV1 {
|
|
|
88
134
|
sent: boolean;
|
|
89
135
|
error?: string;
|
|
90
136
|
};
|
|
137
|
+
/** Spec 406 W2 — the bundle's digest anchored on chain from the runtime's harness agent (or why not). */
|
|
138
|
+
anchor?: {
|
|
139
|
+
digest: `0x${string}`;
|
|
140
|
+
registry: `0x${string}`;
|
|
141
|
+
anchoredBy: `0x${string}`;
|
|
142
|
+
txHash?: `0x${string}`;
|
|
143
|
+
chainId?: number;
|
|
144
|
+
} | {
|
|
145
|
+
error: string;
|
|
146
|
+
};
|
|
147
|
+
/** Spec 410 §4.4 — the anchor CITATION beside the bundle in the same vault (`run.anchor:<runRef>`): which chain-
|
|
148
|
+
* qualified registry holds the digest and which estate the run was performed in, so a Home in another estate
|
|
149
|
+
* knows where to look. Written only after a successful anchor; absent when nothing was anchored. */
|
|
150
|
+
anchorRecord?: {
|
|
151
|
+
written: boolean;
|
|
152
|
+
recordType: string;
|
|
153
|
+
error?: string;
|
|
154
|
+
};
|
|
155
|
+
/** Spec 414 A2 — the run's measurements (`run.measures:<runRef>`) beside its provenance: how many numbers, and
|
|
156
|
+
* whether the acting agent's store took them (a grant signed before the scope existed refuses — said, not hidden). */
|
|
157
|
+
measures?: {
|
|
158
|
+
written: boolean;
|
|
159
|
+
recordType: string;
|
|
160
|
+
count: number;
|
|
161
|
+
error?: string;
|
|
162
|
+
};
|
|
91
163
|
}
|
|
92
164
|
/** Build the record of a finished (or stopped) run. */
|
|
93
165
|
/** Spec 396 W3 — the run's bill: vault calls and DO requests, by step. */
|
|
@@ -103,6 +175,19 @@ export interface RunBillV1 {
|
|
|
103
175
|
/** DO requests by op (an op id, never a payload) — which serving-plane calls a turn makes, and how often. */
|
|
104
176
|
byOp?: Record<string, number>;
|
|
105
177
|
}
|
|
178
|
+
/** One timed window of the runtime's own work around the loop (spec 390 W3): a stage name and when it ran. */
|
|
179
|
+
export interface RunMarkV1 {
|
|
180
|
+
name: string;
|
|
181
|
+
startMs: number;
|
|
182
|
+
endMs: number;
|
|
183
|
+
}
|
|
184
|
+
/** Collects `RunMarkV1`s: `time(name, fn)` records the window `fn` took. Overlapping windows are fine (parallel
|
|
185
|
+
* reads each get their own mark). */
|
|
186
|
+
export interface RunMarks {
|
|
187
|
+
readonly list: RunMarkV1[];
|
|
188
|
+
time<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
189
|
+
}
|
|
190
|
+
export declare function runMarks(now?: () => number): RunMarks;
|
|
106
191
|
export declare function recordOf(input: {
|
|
107
192
|
runRef: string;
|
|
108
193
|
intent: Intent;
|
|
@@ -111,11 +196,30 @@ export declare function recordOf(input: {
|
|
|
111
196
|
presented?: readonly MandatePresentation[];
|
|
112
197
|
now?: number;
|
|
113
198
|
traceContext?: TraceContextV1 | null;
|
|
114
|
-
planner?: RunPlannerSummaryV1 | null;
|
|
115
199
|
receivedAt?: number;
|
|
200
|
+
marks?: readonly RunMarkV1[];
|
|
116
201
|
offloaded?: OffloadReport[];
|
|
117
202
|
bill?: RunBillV1 | null;
|
|
203
|
+
door?: RunDoorV1 | null;
|
|
204
|
+
modelCalls?: readonly ModelCallV1[];
|
|
205
|
+
variant?: VariantV1 | null;
|
|
206
|
+
startingState?: StartingStateRefV1 | null;
|
|
207
|
+
engaged?: readonly HarnessEngagementV1[];
|
|
208
|
+
operational?: RunOperationalV1 | null;
|
|
209
|
+
work?: RunWorkRefV1 | null;
|
|
118
210
|
}): RunRecordV1;
|
|
211
|
+
/**
|
|
212
|
+
* Spec 408 §2.4 (R917-P-4) — THE RESUME INPUT, FROM THE RECORD. A caller resumes from the stored
|
|
213
|
+
* `RunRecordV1`, never from a body it was handed: each completed step is paired with the receipt the loop
|
|
214
|
+
* wrote for it, and `runIntent` refuses any pair whose receipt does not vouch for the result
|
|
215
|
+
* (`resume_integrity`). Only steps that executed (`ok`, not skipped, with an `executed` receipt) are
|
|
216
|
+
* offered; everything else runs again through the verifier.
|
|
217
|
+
*/
|
|
218
|
+
export declare function completedFromRecord(record: RunRecordV1): Array<{
|
|
219
|
+
stepRef: string;
|
|
220
|
+
result?: unknown;
|
|
221
|
+
receipt?: StepReceipt;
|
|
222
|
+
}>;
|
|
119
223
|
/** An invoker that answers each step from the record and runs nothing. A step the record does not hold
|
|
120
224
|
* is refused, never executed: a replay may not do new work under an old name. */
|
|
121
225
|
export declare function replayingInvoker(record: RunRecordV1): ToolInvoker;
|
package/dist/record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"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"}
|
package/dist/record.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { runIntent } from './loop.js';
|
|
2
|
+
export function runMarks(now = Date.now) {
|
|
3
|
+
const list = [];
|
|
4
|
+
return {
|
|
5
|
+
list,
|
|
6
|
+
async time(name, fn) {
|
|
7
|
+
const startMs = now();
|
|
8
|
+
try {
|
|
9
|
+
return await fn();
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
list.push({ name, startMs, endMs: now() });
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
2
17
|
export function recordOf(input) {
|
|
3
18
|
const stepRefOf = (o, i) => o.stepRef ?? o.step.id ?? `s${i}`;
|
|
4
19
|
return {
|
|
@@ -16,13 +31,44 @@ export function recordOf(input) {
|
|
|
16
31
|
events: [...input.events],
|
|
17
32
|
outcome: input.result.outcome,
|
|
18
33
|
...(input.traceContext ? { traceContext: input.traceContext } : {}),
|
|
19
|
-
...(input.planner ? { planner: input.planner } : {}),
|
|
20
34
|
...(typeof input.receivedAt === 'number' && input.receivedAt > 0 ? { receivedAt: input.receivedAt } : {}),
|
|
35
|
+
...(input.marks?.length ? { marks: [...input.marks] } : {}),
|
|
21
36
|
...(input.offloaded?.length ? { offloaded: input.offloaded } : {}),
|
|
22
37
|
...(input.bill ? { bill: input.bill } : {}),
|
|
23
38
|
...(input.presented?.length ? { presented: [...input.presented] } : {}),
|
|
39
|
+
...(input.door ? { door: input.door } : {}),
|
|
40
|
+
...(input.modelCalls?.length ? { modelCalls: [...input.modelCalls] } : {}),
|
|
41
|
+
...(input.variant ? { variant: input.variant } : {}),
|
|
42
|
+
...(input.startingState ? { startingState: input.startingState } : {}),
|
|
43
|
+
...(input.operational ? { operational: input.operational } : {}),
|
|
44
|
+
...(input.engaged?.length ? { engaged: [...input.engaged] } : {}),
|
|
45
|
+
// Absent when no work was named — never a synthetic Endeavor (spec 438 §2.3).
|
|
46
|
+
...(input.work?.endeavorId ? { work: input.work } : {}),
|
|
24
47
|
};
|
|
25
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Spec 408 §2.4 (R917-P-4) — THE RESUME INPUT, FROM THE RECORD. A caller resumes from the stored
|
|
51
|
+
* `RunRecordV1`, never from a body it was handed: each completed step is paired with the receipt the loop
|
|
52
|
+
* wrote for it, and `runIntent` refuses any pair whose receipt does not vouch for the result
|
|
53
|
+
* (`resume_integrity`). Only steps that executed (`ok`, not skipped, with an `executed` receipt) are
|
|
54
|
+
* offered; everything else runs again through the verifier.
|
|
55
|
+
*/
|
|
56
|
+
export function completedFromRecord(record) {
|
|
57
|
+
const receiptsByRef = new Map();
|
|
58
|
+
for (const r of record.receipts)
|
|
59
|
+
if (r.status === 'executed')
|
|
60
|
+
receiptsByRef.set(r.stepRef, r);
|
|
61
|
+
const out = [];
|
|
62
|
+
for (const s of record.steps) {
|
|
63
|
+
if (!s.ok || s.skipped)
|
|
64
|
+
continue;
|
|
65
|
+
const receipt = receiptsByRef.get(s.stepRef);
|
|
66
|
+
if (!receipt)
|
|
67
|
+
continue;
|
|
68
|
+
out.push({ stepRef: s.stepRef, ...(s.result !== undefined ? { result: s.result } : {}), receipt });
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
26
72
|
/** An invoker that answers each step from the record and runs nothing. A step the record does not hold
|
|
27
73
|
* is refused, never executed: a replay may not do new work under an old name. */
|
|
28
74
|
export function replayingInvoker(record) {
|
package/dist/record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAsB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { Plan } from './types.js';
|
|
2
|
+
export type StandingRelation = 'self' | 'steward' | 'member' | 'none';
|
|
3
|
+
export interface TransitionLike {
|
|
4
|
+
capability: string;
|
|
5
|
+
establishes: {
|
|
6
|
+
situation: string;
|
|
7
|
+
roles: Readonly<Record<string, string>>;
|
|
8
|
+
outcomeClass: 'submission' | 'authoritative';
|
|
9
|
+
};
|
|
10
|
+
requires: ReadonlyArray<{
|
|
11
|
+
situation: string;
|
|
12
|
+
of: string;
|
|
13
|
+
in?: string;
|
|
14
|
+
absent?: true;
|
|
15
|
+
readBy: string;
|
|
16
|
+
} | {
|
|
17
|
+
standing: 'self' | 'steward' | 'member';
|
|
18
|
+
at: string;
|
|
19
|
+
}>;
|
|
20
|
+
authority: string;
|
|
21
|
+
}
|
|
22
|
+
/** What the harness KNOWS this turn: situations read from the record (by class, with the parties they bind), and the asker's
|
|
23
|
+
* standing at each agent. A situation not listed is UNKNOWN (not absent) unless `known` names its class as fully read. */
|
|
24
|
+
export interface FactsV1 {
|
|
25
|
+
situations: ReadonlyArray<{
|
|
26
|
+
situation: string;
|
|
27
|
+
of: string;
|
|
28
|
+
in?: string; /** Other words the party answers to (a name, a label) — a plan names words, not addresses, before resolution. */
|
|
29
|
+
aliases?: readonly string[];
|
|
30
|
+
}>;
|
|
31
|
+
/** Situation classes whose full extent (for the parties concerned) was read this turn — absence is then a fact. */
|
|
32
|
+
known: ReadonlySet<string>;
|
|
33
|
+
standing: (agent: string) => StandingRelation | undefined;
|
|
34
|
+
/** The agent being asked (the room), for `at: 'room'`. */
|
|
35
|
+
room: string;
|
|
36
|
+
/** Words that MEAN the room in a plan's arguments before resolution ("us", the room's name or label). */
|
|
37
|
+
isRoom?: (value: string) => boolean;
|
|
38
|
+
/** At an organization, a context/acting argument the planner left EMPTY means the room (the read tools take it so;
|
|
39
|
+
* `subjectNamedInAsk` exempts it so). Never at a person's own agent, where empty is a question. */
|
|
40
|
+
emptyMeansRoom?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export type PreconditionVerdictV1 = {
|
|
43
|
+
kind: 'holds';
|
|
44
|
+
because: string;
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'unknown';
|
|
47
|
+
readBy: string;
|
|
48
|
+
because: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'violated';
|
|
51
|
+
because: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'unauthorizable';
|
|
54
|
+
needs: 'self' | 'steward' | 'member';
|
|
55
|
+
at: string;
|
|
56
|
+
has: StandingRelation | undefined;
|
|
57
|
+
because: string;
|
|
58
|
+
};
|
|
59
|
+
export interface StepCheckV1 {
|
|
60
|
+
index: number;
|
|
61
|
+
toolId: string;
|
|
62
|
+
verdicts: PreconditionVerdictV1[];
|
|
63
|
+
}
|
|
64
|
+
/** Every precondition of every step that has a transition, judged against the facts. */
|
|
65
|
+
export declare function checkPlan(plan: Plan, transitions: ReadonlyArray<TransitionLike>, facts: FactsV1): StepCheckV1[];
|
|
66
|
+
export interface CompletionV1 {
|
|
67
|
+
plan: Plan;
|
|
68
|
+
/** Reads inserted before the step whose precondition they settle. */
|
|
69
|
+
inserted: Array<{
|
|
70
|
+
before: number;
|
|
71
|
+
toolId: string;
|
|
72
|
+
because: string;
|
|
73
|
+
}>;
|
|
74
|
+
/** Steps that cannot be authorized by this asker — the plan is not to run; these are the words. */
|
|
75
|
+
gaps: Array<{
|
|
76
|
+
index: number;
|
|
77
|
+
toolId: string;
|
|
78
|
+
because: string;
|
|
79
|
+
needs: 'self' | 'steward' | 'member';
|
|
80
|
+
at: string;
|
|
81
|
+
}>;
|
|
82
|
+
/** Steps whose precondition the facts contradict (inviting a member). */
|
|
83
|
+
violations: Array<{
|
|
84
|
+
index: number;
|
|
85
|
+
toolId: string;
|
|
86
|
+
because: string;
|
|
87
|
+
}>;
|
|
88
|
+
/** A submission's outcome is somebody else's to bring about — said on the reply, never claimed. */
|
|
89
|
+
submissions: Array<{
|
|
90
|
+
index: number;
|
|
91
|
+
toolId: string;
|
|
92
|
+
establishes: string;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
/** Complete a plan against the facts: insert the reads that settle unknown situation preconditions (each once, before the
|
|
96
|
+
* first step that needs it), and name the gaps and violations. Never invents a party or an amount. */
|
|
97
|
+
export declare function completePlan(plan: Plan, transitions: ReadonlyArray<TransitionLike>, facts: FactsV1): CompletionV1;
|
|
98
|
+
/** Spec 420 §2 — the admission rule: a step whose transition the facts CONTRADICT (inviting a member) or whose standing the
|
|
99
|
+
* asker LACKS is refused by name before any signature is asked for. Unknowns pass here — `completePlan` plans their read. */
|
|
100
|
+
export declare function transitionsHold(transitions: ReadonlyArray<TransitionLike>, facts: () => FactsV1): (input: {
|
|
101
|
+
plan: Plan;
|
|
102
|
+
}) => Array<{
|
|
103
|
+
code: 'REQUIRED_ROLE_UNRESOLVED' | 'OUTCOME_NOT_ESTABLISHED';
|
|
104
|
+
recovery: 'refuse';
|
|
105
|
+
stepIndex: number;
|
|
106
|
+
toolId: string;
|
|
107
|
+
message: string;
|
|
108
|
+
}>;
|
|
109
|
+
//# sourceMappingURL=regression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.d.ts","sourceRoot":"","sources":["../src/regression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const ORDER = { none: 0, member: 1, steward: 2, self: 3 };
|
|
2
|
+
const satisfies = (has, needs) => {
|
|
3
|
+
if (!has)
|
|
4
|
+
return false;
|
|
5
|
+
if (needs === 'self')
|
|
6
|
+
return has === 'self';
|
|
7
|
+
return ORDER[has] >= ORDER[needs];
|
|
8
|
+
};
|
|
9
|
+
const party = (step, arg, facts) => {
|
|
10
|
+
if (arg === 'room')
|
|
11
|
+
return facts.room.toLowerCase();
|
|
12
|
+
const v = step.args[arg];
|
|
13
|
+
if (typeof v !== 'string' || !v.trim())
|
|
14
|
+
return facts.emptyMeansRoom && arg !== 'invitee' && arg !== 'recipient' && arg !== 'payee' && arg !== 'member' ? facts.room.toLowerCase() : undefined;
|
|
15
|
+
const w = v.trim().toLowerCase();
|
|
16
|
+
return facts.isRoom?.(w) || w === facts.room.toLowerCase() ? facts.room.toLowerCase() : w;
|
|
17
|
+
};
|
|
18
|
+
const sameParty = (fact, value) => fact.of.toLowerCase() === value || (fact.aliases ?? []).some((a) => { const w = a.toLowerCase(); return w === value || w.split('.')[0] === value || w.split(/\s+/)[0] === value; });
|
|
19
|
+
/** Every precondition of every step that has a transition, judged against the facts. */
|
|
20
|
+
export function checkPlan(plan, transitions, facts) {
|
|
21
|
+
const byCap = new Map(transitions.map((t) => [t.capability, t]));
|
|
22
|
+
return plan.steps.flatMap((step, index) => {
|
|
23
|
+
const t = byCap.get(step.toolId);
|
|
24
|
+
if (!t)
|
|
25
|
+
return [];
|
|
26
|
+
const verdicts = t.requires.map((pre) => {
|
|
27
|
+
if ('standing' in pre) {
|
|
28
|
+
const at = party(step, pre.at, facts);
|
|
29
|
+
if (!at)
|
|
30
|
+
return { kind: 'unknown', readBy: '', because: `${pre.at} is not yet resolved` };
|
|
31
|
+
const has = facts.standing(at);
|
|
32
|
+
if (has === undefined)
|
|
33
|
+
return { kind: 'unknown', readBy: 'standing', because: `the asker's standing at ${at} is not yet known` };
|
|
34
|
+
return satisfies(has, pre.standing)
|
|
35
|
+
? { kind: 'holds', because: `the asker is ${has === 'self' ? 'this agent' : `a ${has}`} at ${at}` }
|
|
36
|
+
: { kind: 'unauthorizable', needs: pre.standing, at, has, because: `${step.toolId} needs a ${pre.standing} at ${at}; the asker ${has === 'none' ? 'has no standing there' : `is a ${has} there`}` };
|
|
37
|
+
}
|
|
38
|
+
const of = party(step, pre.of, facts);
|
|
39
|
+
const inn = pre.in ? party(step, pre.in, facts) : undefined;
|
|
40
|
+
if (!of || (pre.in && !inn))
|
|
41
|
+
return { kind: 'unknown', readBy: pre.readBy, because: `${pre.of}${pre.in ? `/${pre.in}` : ''} is not yet resolved` };
|
|
42
|
+
const matches = facts.situations.filter((s) => s.situation === pre.situation && sameParty(s, of) && (!pre.in || (s.in ?? '').toLowerCase() === inn));
|
|
43
|
+
// A WORD can answer to several parties before resolution ("bob" among two Bobs): that is a question for the resolver,
|
|
44
|
+
// not a fact for the plan — unknown, never a verdict either way.
|
|
45
|
+
if (matches.length > 1)
|
|
46
|
+
return { kind: 'unknown', readBy: '', because: `several answer to "${of}" — which is a question, not a fact` };
|
|
47
|
+
const present = matches.length === 1;
|
|
48
|
+
if (present)
|
|
49
|
+
return pre.absent ? { kind: 'violated', because: `${of} already holds ${label(pre.situation)}${inn ? ` in ${inn}` : ''}` } : { kind: 'holds', because: `${of} holds ${label(pre.situation)}` };
|
|
50
|
+
if (!facts.known.has(pre.situation))
|
|
51
|
+
return { kind: 'unknown', readBy: pre.readBy, because: `whether ${of} holds ${label(pre.situation)}${inn ? ` in ${inn}` : ''} has not been read` };
|
|
52
|
+
return pre.absent ? { kind: 'holds', because: `${of} does not hold ${label(pre.situation)}` } : { kind: 'violated', because: `${of} does not hold ${label(pre.situation)}${inn ? ` in ${inn}` : ''}` };
|
|
53
|
+
});
|
|
54
|
+
return [{ index, toolId: step.toolId, verdicts }];
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const label = (iri) => iri.split('#').pop().replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();
|
|
58
|
+
/** Complete a plan against the facts: insert the reads that settle unknown situation preconditions (each once, before the
|
|
59
|
+
* first step that needs it), and name the gaps and violations. Never invents a party or an amount. */
|
|
60
|
+
export function completePlan(plan, transitions, facts) {
|
|
61
|
+
const checks = checkPlan(plan, transitions, facts);
|
|
62
|
+
const byCap = new Map(transitions.map((t) => [t.capability, t]));
|
|
63
|
+
const inserted = [];
|
|
64
|
+
const gaps = [];
|
|
65
|
+
const violations = [];
|
|
66
|
+
const seenRead = new Set();
|
|
67
|
+
for (const c of checks)
|
|
68
|
+
for (const v of c.verdicts) {
|
|
69
|
+
if (v.kind === 'unknown' && v.readBy && v.readBy !== 'standing' && !seenRead.has(v.readBy) && !plan.steps.some((s) => s.toolId === v.readBy)) {
|
|
70
|
+
seenRead.add(v.readBy);
|
|
71
|
+
inserted.push({ before: c.index, toolId: v.readBy, because: v.because });
|
|
72
|
+
}
|
|
73
|
+
if (v.kind === 'unauthorizable')
|
|
74
|
+
gaps.push({ index: c.index, toolId: c.toolId, because: v.because, needs: v.needs, at: v.at });
|
|
75
|
+
if (v.kind === 'violated')
|
|
76
|
+
violations.push({ index: c.index, toolId: c.toolId, because: v.because });
|
|
77
|
+
}
|
|
78
|
+
const submissions = plan.steps.flatMap((s, index) => { const t = byCap.get(s.toolId); return t?.establishes.outcomeClass === 'submission' ? [{ index, toolId: s.toolId, establishes: t.establishes.situation }] : []; });
|
|
79
|
+
const steps = [];
|
|
80
|
+
plan.steps.forEach((s, i) => { for (const ins of inserted.filter((x) => x.before === i))
|
|
81
|
+
steps.push({ toolId: ins.toolId, args: readArgsFor(ins.toolId, s) }); steps.push(s); });
|
|
82
|
+
return { plan: { ...plan, steps }, inserted, gaps, violations, submissions };
|
|
83
|
+
}
|
|
84
|
+
/** The read's arguments, from the act it precedes: a membership read takes the organization the invitation names. */
|
|
85
|
+
function readArgsFor(readTool, act) {
|
|
86
|
+
if (readTool === 'organization.membership.list')
|
|
87
|
+
return typeof act.args['org'] === 'string' ? { org: act.args['org'] } : {};
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
/** Spec 420 §2 — the admission rule: a step whose transition the facts CONTRADICT (inviting a member) or whose standing the
|
|
91
|
+
* asker LACKS is refused by name before any signature is asked for. Unknowns pass here — `completePlan` plans their read. */
|
|
92
|
+
export function transitionsHold(transitions, facts) {
|
|
93
|
+
return ({ plan }) => checkPlan(plan, transitions, facts()).flatMap((c) => c.verdicts.flatMap((v) => v.kind === 'unauthorizable'
|
|
94
|
+
? [{ code: 'REQUIRED_ROLE_UNRESOLVED', recovery: 'refuse', stepIndex: c.index, toolId: c.toolId, message: `${v.because} — this cannot be done from here; ask a ${v.needs} of that agent.` }]
|
|
95
|
+
: v.kind === 'violated' ? [{ code: 'OUTCOME_NOT_ESTABLISHED', recovery: 'refuse', stepIndex: c.index, toolId: c.toolId, message: `${v.because} — ${c.toolId} would establish nothing.` }] : []));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=regression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.js","sourceRoot":"","sources":["../src/regression.ts"],"names":[],"mappings":"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"}
|