@agenticprimitives/orchestration 0.0.0-alpha.2 → 0.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +2 -0
  2. package/dist/admission.d.ts +66 -10
  3. package/dist/admission.d.ts.map +1 -1
  4. package/dist/admission.js +203 -8
  5. package/dist/admission.js.map +1 -1
  6. package/dist/answer-quality.d.ts +129 -0
  7. package/dist/answer-quality.d.ts.map +1 -0
  8. package/dist/answer-quality.js +197 -0
  9. package/dist/answer-quality.js.map +1 -0
  10. package/dist/authority.d.ts +39 -0
  11. package/dist/authority.d.ts.map +1 -1
  12. package/dist/conformance.d.ts +66 -0
  13. package/dist/conformance.d.ts.map +1 -0
  14. package/dist/conformance.js +140 -0
  15. package/dist/conformance.js.map +1 -0
  16. package/dist/derivation.d.ts +21 -0
  17. package/dist/derivation.d.ts.map +1 -0
  18. package/dist/derivation.js +31 -0
  19. package/dist/derivation.js.map +1 -0
  20. package/dist/evidence.d.ts +77 -0
  21. package/dist/evidence.d.ts.map +1 -0
  22. package/dist/evidence.js +101 -0
  23. package/dist/evidence.js.map +1 -0
  24. package/dist/export-port.d.ts +13 -0
  25. package/dist/export-port.d.ts.map +1 -0
  26. package/dist/export-port.js +2 -0
  27. package/dist/export-port.js.map +1 -0
  28. package/dist/index.d.ts +23 -6
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +29 -4
  31. package/dist/index.js.map +1 -1
  32. package/dist/intent.d.ts +37 -0
  33. package/dist/intent.d.ts.map +1 -0
  34. package/dist/intent.js +46 -0
  35. package/dist/intent.js.map +1 -0
  36. package/dist/judgment.d.ts +131 -0
  37. package/dist/judgment.d.ts.map +1 -0
  38. package/dist/judgment.js +249 -0
  39. package/dist/judgment.js.map +1 -0
  40. package/dist/loop.d.ts +52 -7
  41. package/dist/loop.d.ts.map +1 -1
  42. package/dist/loop.js +314 -64
  43. package/dist/loop.js.map +1 -1
  44. package/dist/metrics.js +8 -8
  45. package/dist/metrics.js.map +1 -1
  46. package/dist/outcome.d.ts +223 -0
  47. package/dist/outcome.d.ts.map +1 -0
  48. package/dist/outcome.js +325 -0
  49. package/dist/outcome.js.map +1 -0
  50. package/dist/plan-digest.d.ts +6 -0
  51. package/dist/plan-digest.d.ts.map +1 -0
  52. package/dist/plan-digest.js +35 -0
  53. package/dist/plan-digest.js.map +1 -0
  54. package/dist/planner.d.ts +18 -0
  55. package/dist/planner.d.ts.map +1 -1
  56. package/dist/planner.js +74 -0
  57. package/dist/planner.js.map +1 -1
  58. package/dist/reconcile.d.ts +41 -0
  59. package/dist/reconcile.d.ts.map +1 -0
  60. package/dist/reconcile.js +20 -0
  61. package/dist/reconcile.js.map +1 -0
  62. package/dist/record.d.ts +125 -21
  63. package/dist/record.d.ts.map +1 -1
  64. package/dist/record.js +47 -1
  65. package/dist/record.js.map +1 -1
  66. package/dist/regression.d.ts +109 -0
  67. package/dist/regression.d.ts.map +1 -0
  68. package/dist/regression.js +97 -0
  69. package/dist/regression.js.map +1 -0
  70. package/dist/rollup.d.ts +72 -0
  71. package/dist/rollup.d.ts.map +1 -0
  72. package/dist/rollup.js +117 -0
  73. package/dist/rollup.js.map +1 -0
  74. package/dist/selection.d.ts +334 -0
  75. package/dist/selection.d.ts.map +1 -0
  76. package/dist/selection.js +481 -0
  77. package/dist/selection.js.map +1 -0
  78. package/dist/spans.d.ts +62 -0
  79. package/dist/spans.d.ts.map +1 -1
  80. package/dist/spans.js +78 -11
  81. package/dist/spans.js.map +1 -1
  82. package/dist/tool-invoker.d.ts +54 -3
  83. package/dist/tool-invoker.d.ts.map +1 -1
  84. package/dist/tool-invoker.js +26 -1
  85. package/dist/tool-invoker.js.map +1 -1
  86. package/dist/trace-facts.d.ts +93 -0
  87. package/dist/trace-facts.d.ts.map +1 -0
  88. package/dist/trace-facts.js +82 -0
  89. package/dist/trace-facts.js.map +1 -0
  90. package/dist/types.d.ts +86 -1
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/types.js +4 -0
  93. package/dist/types.js.map +1 -1
  94. package/package.json +17 -8
@@ -0,0 +1,131 @@
1
+ import type { StructuredCallLike } from './selection.js';
2
+ export declare const NOT_APPLICABLE = "n/a";
3
+ export type JudgmentQuestionV1 = {
4
+ id: string;
5
+ kind: 'yes-no';
6
+ statement: string;
7
+ } | {
8
+ id: string;
9
+ kind: 'scale';
10
+ question: string; /** worst → best */
11
+ levels: ReadonlyArray<{
12
+ id: string;
13
+ describe: string;
14
+ }>;
15
+ notApplicable?: string;
16
+ } | {
17
+ id: string;
18
+ kind: 'choice';
19
+ question: string;
20
+ options: ReadonlyArray<{
21
+ id: string;
22
+ describe: string;
23
+ }>;
24
+ /** Outcomes that are not options — e.g. "ask the person", "needs several" — listed after the options, never
25
+ * shuffled or renamed. */
26
+ alsoOutcomes?: ReadonlyArray<{
27
+ id: string;
28
+ describe: string;
29
+ }>;
30
+ /** Describes when NONE of the options applies; present ⇒ `n/a` is an outcome. */ notApplicable?: string;
31
+ };
32
+ /** One question's answer: the normalised distribution over its outcomes, the top outcome, and how far it leads. */
33
+ export interface JudgmentAnswerV1 {
34
+ id: string;
35
+ kind: JudgmentQuestionV1['kind'];
36
+ distribution: Record<string, number>;
37
+ top: string;
38
+ /** P(top). */
39
+ confidence: number;
40
+ /** P(top) − P(runner-up). */
41
+ lead: number;
42
+ /** Scale only: the expected level index (0 = worst), over the applicable levels. */
43
+ expectedLevel?: number;
44
+ }
45
+ export interface JudgmentV1 {
46
+ /** The binding that decided (J3), e.g. `ap.decision-model.structured-call.v1`. */
47
+ judge: {
48
+ name: string;
49
+ kind: 'model' | 'mechanical' | 'human';
50
+ };
51
+ answers: Record<string, JudgmentAnswerV1>;
52
+ /** Questions the binding answered in a shape that could not be read as a distribution (J8: said, never guessed). */
53
+ unreadable: string[];
54
+ /** The binding failed outright (the provider refused, timed out, called nothing): no answers. */
55
+ error?: string;
56
+ /** For each unreadable question, the SHAPE of what came back (types and field names, never values) — so "malformed"
57
+ * can be diagnosed without recording anything the judge read or wrote. */
58
+ received?: Record<string, string>;
59
+ }
60
+ /** Raw distributions from a binding, per question id, before normalisation. */
61
+ export type RawDistributionsV1 = Record<string, Record<string, number>>;
62
+ /** THE DECISION-MODEL PORT (J13): a frozen state + typed questions in, one distribution per question out. A binding
63
+ * may add `received`: the shape of anything it could not read (never values). */
64
+ export interface DecisionModelPort {
65
+ readonly name: string;
66
+ readonly kind: 'model' | 'mechanical' | 'human';
67
+ decide(state: string, questions: ReadonlyArray<JudgmentQuestionV1>): Promise<{
68
+ distributions: RawDistributionsV1;
69
+ received?: Record<string, string>;
70
+ }>;
71
+ }
72
+ /** The shape of a value — types and field names only, never a value. */
73
+ export declare function shapeOf(v: unknown, depth?: number): string;
74
+ /** The outcomes a question admits, in order. */
75
+ export declare function outcomesOf(q: JudgmentQuestionV1): string[];
76
+ /** Normalise one raw distribution over a question's outcomes. Unknown keys and non-finite / negative values are
77
+ * dropped; an all-zero answer is unreadable (null). Deterministic tie-break by outcome order. */
78
+ export declare function answerOf(q: JudgmentQuestionV1, raw: Record<string, number> | undefined): JudgmentAnswerV1 | null;
79
+ /** Ask a decision model the questions about one state. A failed binding is `error`, never an answer (J8). */
80
+ export declare function judgeQuestions(state: string, questions: ReadonlyArray<JudgmentQuestionV1>, port: DecisionModelPort): Promise<JudgmentV1>;
81
+ /** THE DECLARED DECISION RULE over a choice/scale answer: take the top only when it is an option (not n/a), carries at
82
+ * least `floor`, and leads the runner-up (n/a included) by `margin`. Otherwise abstain, naming why. */
83
+ export interface DecisionRuleV1 {
84
+ floor: number;
85
+ margin: number;
86
+ }
87
+ export type DecisionV1 = {
88
+ decided: string;
89
+ } | {
90
+ decided: null;
91
+ because: 'not-applicable' | 'below-floor' | 'no-margin' | 'unreadable';
92
+ };
93
+ export declare function applyDecisionRule(answer: JudgmentAnswerV1 | undefined, rule: DecisionRuleV1): DecisionV1;
94
+ /** J10 — the explanation is COMPOSED from the numbers, never generated. */
95
+ export declare function explainAnswer(answer: JudgmentAnswerV1, label?: (outcome: string) => string): string;
96
+ /**
97
+ * A decision model bound to one forced structured call. The tool's schema has, per question, an array of
98
+ * `{outcome, p}` with `outcome` an enum of that question's outcomes — and NOTHING ELSE: no reason, no text (J10).
99
+ * `name` is recorded on every judgment (J3); it should change whenever the prompt or the model changes (J5).
100
+ */
101
+ export declare function structuredCallDecisionModel(call: StructuredCallLike, opts: {
102
+ name: string;
103
+ maxTokens?: number;
104
+ /** A `scratch` field, FIRST in the schema, where the model may reason before the numbers — for a model that does not
105
+ * reason internally (measured 2026-09-26: numbers-only cost Claude Haiku 12 points and its calibration; Gemini, which
106
+ * thinks, lost nothing). Discarded here, never returned, never recorded (J7, J10). */
107
+ privateReasoning?: boolean;
108
+ /** The questions go in the SYSTEM prompt and the state last, so the prefix is the same on every call for the same
109
+ * questions — what a provider's prompt cache keys on. (The default puts the state first.) */
110
+ stablePrefix?: boolean;
111
+ }): DecisionModelPort;
112
+ export interface AveragedJudgmentV1 extends JudgmentV1 {
113
+ /** How many permutations were asked and how many answered (an unanswered one is left out of the average, and said). */
114
+ permutations: {
115
+ asked: number;
116
+ answered: number;
117
+ };
118
+ }
119
+ export declare function judgeQuestionsAveraged(state: string, questions: ReadonlyArray<JudgmentQuestionV1>, port: DecisionModelPort, opts: {
120
+ permutations: number;
121
+ }): Promise<AveragedJudgmentV1>;
122
+ /** The host call: one letter among `letters`, each letter's reported log-probability. */
123
+ export type LogprobChoiceLike = (input: {
124
+ system: string;
125
+ user: string;
126
+ letters: readonly string[];
127
+ }) => Promise<Record<string, number>>;
128
+ export declare function logprobChoiceDecisionModel(choose: LogprobChoiceLike, opts: {
129
+ name: string;
130
+ }): DecisionModelPort;
131
+ //# sourceMappingURL=judgment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgment.d.ts","sourceRoot":"","sources":["../src/judgment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ export const NOT_APPLICABLE = 'n/a';
2
+ /** The shape of a value — types and field names only, never a value. */
3
+ export function shapeOf(v, depth = 0) {
4
+ if (v === null)
5
+ return 'null';
6
+ if (Array.isArray(v))
7
+ return `array(${v.length})${v.length && depth < 2 ? `<${shapeOf(v[0], depth + 1)}>` : ''}`;
8
+ if (typeof v === 'object')
9
+ return depth < 2 ? `{${Object.keys(v).slice(0, 8).map((k) => `${k.length > 40 ? 'key' : k}:${shapeOf(v[k], depth + 1)}`).join(',')}}` : 'object';
10
+ return typeof v;
11
+ }
12
+ /** The outcomes a question admits, in order. */
13
+ export function outcomesOf(q) {
14
+ if (q.kind === 'yes-no')
15
+ return ['true', 'false'];
16
+ const base = [...(q.kind === 'scale' ? q.levels : q.options), ...(q.kind === 'choice' ? q.alsoOutcomes ?? [] : [])].map((o) => o.id);
17
+ return q.notApplicable !== undefined ? [...base, NOT_APPLICABLE] : base;
18
+ }
19
+ /** Normalise one raw distribution over a question's outcomes. Unknown keys and non-finite / negative values are
20
+ * dropped; an all-zero answer is unreadable (null). Deterministic tie-break by outcome order. */
21
+ export function answerOf(q, raw) {
22
+ if (!raw || typeof raw !== 'object')
23
+ return null;
24
+ const outcomes = outcomesOf(q);
25
+ const vals = outcomes.map((o) => { const v = raw[o]; return typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : 0; });
26
+ const total = vals.reduce((s, v) => s + v, 0);
27
+ if (total <= 0)
28
+ return null;
29
+ const distribution = Object.fromEntries(outcomes.map((o, i) => [o, Number((vals[i] / total).toFixed(4))]));
30
+ const ranked = outcomes.map((o, i) => [o, vals[i] / total, i]).sort((a, b) => b[1] - a[1] || a[2] - b[2]);
31
+ const [top, p] = ranked[0];
32
+ const second = ranked[1]?.[1] ?? 0;
33
+ const out = { id: q.id, kind: q.kind, distribution, top, confidence: Number(p.toFixed(4)), lead: Number((p - second).toFixed(4)) };
34
+ if (q.kind === 'scale') {
35
+ const applicable = q.levels.map((l) => distribution[l.id] ?? 0);
36
+ const mass = applicable.reduce((s, v) => s + v, 0);
37
+ if (mass > 0)
38
+ out.expectedLevel = Number((applicable.reduce((s, v, i) => s + v * i, 0) / mass).toFixed(4));
39
+ }
40
+ return out;
41
+ }
42
+ /** Ask a decision model the questions about one state. A failed binding is `error`, never an answer (J8). */
43
+ export async function judgeQuestions(state, questions, port) {
44
+ const judgeId = { name: port.name, kind: port.kind };
45
+ let raw;
46
+ let received;
47
+ try {
48
+ ({ distributions: raw, received } = await port.decide(state, questions));
49
+ }
50
+ catch (e) {
51
+ return { judge: judgeId, answers: {}, unreadable: questions.map((q) => q.id), error: String(e?.message ?? e).slice(0, 300) };
52
+ }
53
+ const answers = {};
54
+ const unreadable = [];
55
+ for (const q of questions) {
56
+ const a = answerOf(q, raw?.[q.id]);
57
+ if (a)
58
+ answers[q.id] = a;
59
+ else
60
+ unreadable.push(q.id);
61
+ }
62
+ const shapes = unreadable.length && received ? Object.fromEntries(unreadable.filter((id) => received[id]).map((id) => [id, received[id]])) : {};
63
+ return { judge: judgeId, answers, unreadable, ...(Object.keys(shapes).length ? { received: shapes } : {}) };
64
+ }
65
+ export function applyDecisionRule(answer, rule) {
66
+ if (!answer)
67
+ return { decided: null, because: 'unreadable' };
68
+ if (answer.top === NOT_APPLICABLE)
69
+ return { decided: null, because: 'not-applicable' };
70
+ if (answer.confidence < rule.floor)
71
+ return { decided: null, because: 'below-floor' };
72
+ if (answer.lead < rule.margin)
73
+ return { decided: null, because: 'no-margin' };
74
+ return { decided: answer.top };
75
+ }
76
+ /** J10 — the explanation is COMPOSED from the numbers, never generated. */
77
+ export function explainAnswer(answer, label = (o) => o) {
78
+ const ranked = Object.entries(answer.distribution).sort((a, b) => b[1] - a[1]);
79
+ const pct = (v) => `${Math.round(v * 100)}%`;
80
+ const [top, p] = ranked[0];
81
+ const second = ranked[1];
82
+ return `${label(top)} at ${pct(p)}${second ? `, ahead of ${label(second[0])} at ${pct(second[1])}` : ''}.`;
83
+ }
84
+ // ── The structured-call binding ──────────────────────────────────────────────────────────────────────────────────
85
+ const PRIVATE_REASONING = 'Before the numbers, you may think in the `scratch` field: weigh what the request actually asks for '
86
+ + 'against each outcome. `scratch` is discarded unread — it is never shown or recorded; only the probabilities count. '
87
+ + 'Keep it under 120 words.';
88
+ const DECISION_SYSTEM = 'You are a decision model. You do not answer the request, explain, or write anything. For EACH question you are '
89
+ + 'given, assign a probability to EVERY outcome listed for it; each question\'s probabilities sum to 1. Use "n/a" '
90
+ + 'where it is offered and none of the other outcomes applies. An outcome you give 0 may be left out. Probabilities '
91
+ + 'should be calibrated: an outcome given '
92
+ + '0.8 should be right about 80% of the time. Report through the tool; its only fields are numbers.';
93
+ /** Render one question for the model (the outcomes are the enum the tool accepts). */
94
+ function renderQuestion(q) {
95
+ if (q.kind === 'yes-no')
96
+ return `[${q.id}] yes-no — "${q.statement}" — outcomes: true, false`;
97
+ const opts = [...(q.kind === 'scale' ? q.levels : q.options), ...(q.kind === 'choice' ? q.alsoOutcomes ?? [] : [])].map((o) => ` - ${o.id}: ${o.describe}`).join('\n');
98
+ const na = q.notApplicable !== undefined ? `\n - ${NOT_APPLICABLE}: ${q.notApplicable}` : '';
99
+ return `[${q.id}] ${q.kind}${q.kind === 'scale' ? ' (worst → best)' : ''} — ${q.question}\n outcomes:\n${opts}${na}`;
100
+ }
101
+ /**
102
+ * A decision model bound to one forced structured call. The tool's schema has, per question, an array of
103
+ * `{outcome, p}` with `outcome` an enum of that question's outcomes — and NOTHING ELSE: no reason, no text (J10).
104
+ * `name` is recorded on every judgment (J3); it should change whenever the prompt or the model changes (J5).
105
+ */
106
+ export function structuredCallDecisionModel(call, opts) {
107
+ return {
108
+ name: opts.name, kind: 'model',
109
+ async decide(state, questions) {
110
+ const properties = Object.fromEntries([
111
+ ...(opts.privateReasoning ? [['scratch', { type: 'string', description: 'Private working; discarded unread.' }]] : []),
112
+ ...questions.map((q) => [q.id, {
113
+ type: 'array', description: `The probability of each outcome of question ${q.id}.`,
114
+ items: { type: 'object', properties: { outcome: { type: 'string', enum: outcomesOf(q) }, p: { type: 'number', minimum: 0, maximum: 1 } }, required: ['outcome', 'p'] },
115
+ }])
116
+ ]);
117
+ const sys = opts.privateReasoning ? `${DECISION_SYSTEM} ${PRIVATE_REASONING}` : DECISION_SYSTEM;
118
+ const qs = questions.map(renderQuestion).join('\n\n');
119
+ const out = await call({
120
+ system: opts.stablePrefix ? `${sys}\n\nQuestions:\n${qs}` : sys,
121
+ messages: [{ role: 'user', content: opts.stablePrefix ? `State:\n${state}` : `State:\n${state}\n\nQuestions:\n${qs}` }],
122
+ tool: { name: 'decide', description: 'One probability per outcome, per question. Numbers only.', input_schema: { type: 'object', properties, required: questions.map((q) => q.id) } },
123
+ // Sized by the outcomes, not the questions: a model that lists every outcome (zeros included) of a 40-class
124
+ // question needs ~40 tokens per outcome, and a bound it runs out of returns no call at all.
125
+ maxTokens: opts.maxTokens ?? (opts.privateReasoning ? 500 : 300) + 40 * questions.reduce((n, q) => n + outcomesOf(q).length, 0),
126
+ });
127
+ const raw = {};
128
+ const received = {};
129
+ for (const q of questions) {
130
+ received[q.id] = out?.[q.id] === undefined ? `absent (top-level: ${shapeOf(out)})` : shapeOf(out[q.id]);
131
+ // Some hosts hand a nested array argument back as its JSON text; that is an encoding, not a different answer.
132
+ let rows = out?.[q.id];
133
+ if (typeof rows === 'string') {
134
+ try {
135
+ rows = JSON.parse(rows);
136
+ }
137
+ catch {
138
+ continue;
139
+ }
140
+ }
141
+ if (!Array.isArray(rows))
142
+ continue;
143
+ const d = {};
144
+ for (const r of rows)
145
+ if (typeof r?.outcome === 'string' && typeof r.p === 'number')
146
+ d[r.outcome] = Math.max(d[r.outcome] ?? 0, r.p);
147
+ raw[q.id] = d;
148
+ }
149
+ return { distributions: raw, received };
150
+ },
151
+ };
152
+ }
153
+ // ── Permutation-averaged judging (debiasing) ────────────────────────────────────────────────────────────────────────
154
+ // A judge reading options in a list is biased by their ORDER and by their LABELS (position bias; option-id bias). Each
155
+ // of K calls sees the choice options in a different order under neutral ids (`o1`, `o2`, …) and the yes-no questions in a
156
+ // different order under neutral ids; the answers are mapped back and the distributions AVERAGED. Averaging also turns K
157
+ // calls into a spread the consistency gate can read. The permutations are drawn from a seed derived from the state, so
158
+ // the same state is asked the same way every time (J5); what varies between repeats is the model, not the harness.
159
+ /** A small deterministic PRNG (mulberry32) seeded from a string. */
160
+ function seeded(seedText) {
161
+ let h = 2166136261;
162
+ for (let i = 0; i < seedText.length; i++) {
163
+ h ^= seedText.charCodeAt(i);
164
+ h = Math.imul(h, 16777619);
165
+ }
166
+ let a = h >>> 0;
167
+ return () => { a = (a + 0x6d2b79f5) >>> 0; let t = a; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; };
168
+ }
169
+ function shuffled(xs, rnd) { const a = [...xs]; for (let i = a.length - 1; i > 0; i--) {
170
+ const j = Math.floor(rnd() * (i + 1));
171
+ [a[i], a[j]] = [a[j], a[i]];
172
+ } return a; }
173
+ export async function judgeQuestionsAveraged(state, questions, port, opts) {
174
+ const K = Math.max(1, Math.floor(opts.permutations));
175
+ const runs = await Promise.all(Array.from({ length: K }, async (_, k) => {
176
+ const rnd = seeded(`${k}\u0000${state}`);
177
+ const qMap = new Map(); // neutral question id → real
178
+ const oMap = new Map(); // real question id → (neutral option id → real)
179
+ const neutral = shuffled(questions, rnd).map((q, qi) => {
180
+ const nid = q.kind === 'yes-no' ? `q${qi + 1}` : q.id; // choice/scale keep their id (it names no option)
181
+ qMap.set(nid, q.id);
182
+ if (q.kind !== 'choice')
183
+ return { ...q, id: nid };
184
+ const back = new Map();
185
+ const options = shuffled(q.options, rnd).map((o, oi) => { const id = `o${oi + 1}`; back.set(id, o.id); return { id, describe: o.describe }; });
186
+ oMap.set(q.id, back);
187
+ return { ...q, id: nid, options };
188
+ });
189
+ const j = await judgeQuestions(state, neutral, port);
190
+ if (j.error !== undefined)
191
+ return { error: j.error };
192
+ const answers = {};
193
+ for (const [nid, a] of Object.entries(j.answers)) {
194
+ const real = qMap.get(nid);
195
+ const back = oMap.get(real);
196
+ answers[real] = Object.fromEntries(Object.entries(a.distribution).map(([o, v]) => [back?.get(o) ?? o, v]));
197
+ }
198
+ return { answers, received: j.received };
199
+ }));
200
+ const ok = runs.filter((r) => 'answers' in r);
201
+ const judgeId = { name: port.name, kind: port.kind };
202
+ if (!ok.length)
203
+ return { judge: judgeId, answers: {}, unreadable: questions.map((q) => q.id), error: runs[0].error, permutations: { asked: K, answered: 0 } };
204
+ const answers = {};
205
+ const unreadable = [];
206
+ for (const q of questions) {
207
+ const got = ok.map((r) => r.answers[q.id]).filter((d) => !!d);
208
+ if (!got.length) {
209
+ unreadable.push(q.id);
210
+ continue;
211
+ }
212
+ const mean = {};
213
+ for (const o of outcomesOf(q))
214
+ mean[o] = got.reduce((s, d) => s + (d[o] ?? 0), 0) / got.length;
215
+ const a = answerOf(q, mean);
216
+ if (a)
217
+ answers[q.id] = a;
218
+ else
219
+ unreadable.push(q.id);
220
+ }
221
+ const received = Object.assign({}, ...ok.map((r) => r.received ?? {}));
222
+ const shapes = unreadable.length ? Object.fromEntries(unreadable.filter((id) => received[id]).map((id) => [id, received[id]])) : {};
223
+ return { judge: judgeId, answers, unreadable, ...(Object.keys(shapes).length ? { received: shapes } : {}), permutations: { asked: K, answered: ok.length } };
224
+ }
225
+ const LETTER_SYSTEM = 'You are a decision model. Read the options and the state. Reply with exactly ONE capital letter: the '
226
+ + 'option that best answers the question for this state. No other text.';
227
+ export function logprobChoiceDecisionModel(choose, opts) {
228
+ return {
229
+ name: opts.name, kind: 'model',
230
+ async decide(state, questions) {
231
+ if (questions.length !== 1 || questions[0].kind !== 'choice')
232
+ throw new Error('the log-probability binding answers exactly one choice question per call');
233
+ const q = questions[0];
234
+ const outcomes = outcomesOf(q);
235
+ if (outcomes.length > 26)
236
+ throw new Error(`the log-probability binding offers at most 26 options (letters); this question has ${outcomes.length}`);
237
+ const letters = outcomes.map((_, i) => String.fromCharCode(65 + i));
238
+ const describe = (o) => (o === NOT_APPLICABLE ? q.notApplicable ?? 'none of these' : [...q.options, ...(q.alsoOutcomes ?? [])].find((x) => x.id === o)?.describe ?? o);
239
+ const system = `${LETTER_SYSTEM}\n\nQuestion: ${q.question}\nOptions:\n${outcomes.map((o, i) => `${letters[i]}. ${describe(o)}`).join('\n')}`;
240
+ const lp = await choose({ system, user: `State:\n${state}\n\nAnswer with one letter.`, letters });
241
+ const max = Math.max(...Object.values(lp));
242
+ const raw = {};
243
+ outcomes.forEach((o, i) => { const v = lp[letters[i]]; if (v !== undefined)
244
+ raw[o] = Math.exp(v - max); });
245
+ return { distributions: { [q.id]: raw } };
246
+ },
247
+ };
248
+ }
249
+ //# sourceMappingURL=judgment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgment.js","sourceRoot":"","sources":["../src/judgment.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAiDpC,wEAAwE;AACxE,MAAM,UAAU,OAAO,CAAC,CAAU,EAAE,KAAK,GAAG,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjH,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnN,OAAO,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,CAAqB;IAC9C,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrI,OAAO,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED;kGACkG;AAClG,MAAM,UAAU,QAAQ,CAAC,CAAqB,EAAE,GAAuC;IACrF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7H,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAE,GAAG,KAAK,EAAE,CAAC,CAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,GAAG,GAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrJ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,GAAG,CAAC;YAAE,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6GAA6G;AAC7G,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,SAA4C,EAAE,IAAuB;IACvH,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,GAAuB,CAAC;IAAC,IAAI,QAA4C,CAAC;IAC9E,IAAI,CAAC;QAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAC3F,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAE,CAAW,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC1I,CAAC;IACD,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;YAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACxH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAS,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnJ,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9G,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAAC,MAAoC,EAAE,IAAoB;IAC1F,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAC7D,IAAI,MAAM,CAAC,GAAG,KAAK,cAAc;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IACvF,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACrF,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,MAAwB,EAAE,QAAqC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IACrD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IAAC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7G,CAAC;AAED,oHAAoH;AAEpH,MAAM,iBAAiB,GAAG,qGAAqG;MAC3H,qHAAqH;MACrH,0BAA0B,CAAC;AAE/B,MAAM,eAAe,GACnB,iHAAiH;MAC/G,iHAAiH;MACjH,mHAAmH;MACnH,yCAAyC;MACzC,kGAAkG,CAAC;AAEvG,sFAAsF;AACtF,SAAS,cAAc,CAAC,CAAqB;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,SAAS,2BAA2B,CAAC;IAC9F,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1K,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,cAAc,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,kBAAkB,IAAI,GAAG,EAAE,EAAE,CAAC;AACxH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAwB,EAAE,IAO5C;IACxB,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO;QAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS;YAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/H,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC/B,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,+CAA+C,CAAC,CAAC,EAAE,GAAG;wBAClF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;qBACvK,CAAU,CAAC;aAAC,CAAC,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,eAAe,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;YAChG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;gBACrB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;gBAC/D,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,mBAAmB,EAAE,EAAE,EAAE,CAAC;gBACvH,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0DAA0D,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrL,4GAA4G;gBAC5G,4FAA4F;gBAC5F,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAChI,CAAC,CAAC;YACH,MAAM,GAAG,GAAuB,EAAE,CAAC;YACnC,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxG,8GAA8G;gBAC9G,IAAI,IAAI,GAAY,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAAC,IAAI,CAAC;wBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,SAAS;oBAAC,CAAC;gBAAC,CAAC;gBACtF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACnC,MAAM,CAAC,GAA2B,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,IAAiD;oBAAE,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;wBAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClL,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uHAAuH;AACvH,uHAAuH;AACvH,0HAA0H;AAC1H,wHAAwH;AACxH,uHAAuH;AACvH,mHAAmH;AAEnH,oEAAoE;AACpE,SAAS,MAAM,CAAC,QAAgB;IAC9B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAAC,CAAC;IACtG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,OAAO,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACzL,CAAC;AACD,SAAS,QAAQ,CAAI,EAAgB,EAAE,GAAiB,IAAS,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;AAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAOhN,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAa,EAAE,SAA4C,EAAE,IAAuB,EAAE,IAA8B;IAC/J,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACtE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,6BAA6B;QACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAA+B,CAAC,CAAC,gDAAgD;QACrG,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YACrD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kDAAkD;YACzG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAwB,CAAC;YACxE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;YACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/I,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACrB,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAwB,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC;QAC9D,MAAM,OAAO,GAA2C,EAAE,CAAC;QAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAAC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7G,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAW,CAAC;IACpD,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAgD,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAG,IAAI,CAAC,CAAC,CAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;IACrL,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA+B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACrD,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QAC/F,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;YAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpI,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;AAC/J,CAAC;AAWD,MAAM,aAAa,GAAG,uGAAuG;MACzH,sEAAsE,CAAC;AAE3E,MAAM,UAAU,0BAA0B,CAAC,MAAyB,EAAE,IAAsB;IAC1F,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO;QAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS;YAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC3J,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAoD,CAAC;YAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sFAAsF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnJ,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC/K,MAAM,MAAM,GAAG,GAAG,aAAa,iBAAiB,CAAC,CAAC,QAAQ,eAAe,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9I,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,6BAA6B,EAAE,OAAO,EAAE,CAAC,CAAC;YAClG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,GAA2B,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5G,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/loop.d.ts CHANGED
@@ -1,9 +1,18 @@
1
1
  import type { Intent, Plan, PlanStep, RunResult, StepObservation, ToolSpec } from './types.js';
2
+ import { CONTINUE_STEP_ID } from './types.js';
2
3
  import type { Planner } from './planner.js';
3
- import type { ToolInvoker } from './tool-invoker.js';
4
+ import { type ToolInvoker } from './tool-invoker.js';
4
5
  import { type SuppliedInputV1 } from './input.js';
5
6
  import type { MandatePresentation, OrchestrationPorts, ResolvedStep, StepReceipt } from './authority.js';
6
7
  export interface RunIntentOpts {
8
+ /** Spec 438 §3 — the work this run is part of, when the caller already holds the id (the Ask's session, the
9
+ * door's data part). Stamped onto `RunStarted` and the record; NEVER looked up here. Absent is correct for a
10
+ * solo run, and a retry does not inherit it — joining work is an explicit `AttachRun`. */
11
+ work?: {
12
+ endeavorId: string;
13
+ commitmentId?: string;
14
+ planStepId?: string;
15
+ };
7
16
  /** The injected planning port (deterministic default or the LLM adapter). */
8
17
  planner: Planner;
9
18
  /** The tools the agent exposes — the plan may only reference these (fail-closed). */
@@ -14,6 +23,13 @@ export interface RunIntentOpts {
14
23
  maxSteps?: number;
15
24
  /** How many times the loop re-plans after a step failure. Default 1 (one observe→re-plan cycle). */
16
25
  maxReplans?: number;
26
+ /** Spec 421 W1 — CONTINUATION: the planner may end a plan with `plan.continue` ("show me what these reads return, then
27
+ * I will plan the rest"); the loop then plans again from the SUCCESSFUL observations, through every gate a first plan
28
+ * passes. `max` bounds it per run (inside the step budget). Absent ⇒ off: the reserved step is not offered, and a plan
29
+ * naming it is refused as an unknown tool. */
30
+ continuation?: {
31
+ max: number;
32
+ };
17
33
  /** Optional observer for each executed step (telemetry; never authority). */
18
34
  onObserve?: (obs: StepObservation) => void;
19
35
  /** Spec 374 §1 — WHICH STEPS ARE JUDGED ELSEWHERE. Returns the agent a step is routed to when its
@@ -81,6 +97,29 @@ export interface RunIntentOpts {
81
97
  version: string;
82
98
  commitment: string;
83
99
  };
100
+ /** Spec 414 A1 — which SKILL.md contract a tool came from, as the compiled definition says (injected, like
101
+ * skillRef). Absent, or undefined for a tool ⇒ the receipt names no per-step skill. */
102
+ skillOf?: (toolId: string) => {
103
+ id: string;
104
+ version: string;
105
+ contractDigest: string;
106
+ } | undefined;
107
+ /**
108
+ * Spec 413 — ONE DECLARED RETRIEVAL STEP, run before the first plan (a playbook's `retrievalQueries`, the harness's
109
+ * wiring). It is a real step: `StepProposed` → `ToolInvoked` → a receipt at stepRef `retrieve`, so the trace shows it.
110
+ * Its observation joins the run's observations — what the ANSWER is composed from — and is kept OUT of every planner
111
+ * input, first plan and re-plan alike: retrieved passages ground what is said, never what is done, so they neither
112
+ * reach a prompt nor mark the run as having read untrusted content. Only an informational tool may be named (a
113
+ * retrieval that needed a mandate would not be retrieval); anything else is refused before anything runs. Skipped on
114
+ * resume (the checkpoint carries what happened). A failed or empty retrieval is recorded as such and the run goes on.
115
+ */
116
+ retrieval?: {
117
+ toolId: string;
118
+ args: Record<string, unknown>;
119
+ /** Spec 416 §4g — run the retrieval only when the PLAN needs it (evaluated after planning; the passages are never
120
+ * planner input, so nothing is lost by waiting). Absent ⇒ before the plan, always (spec 413 as written). */
121
+ onlyIf?: (plan: Plan) => boolean;
122
+ };
84
123
  /** Unix-seconds clock, injected so receipts are deterministic in tests. */
85
124
  now?: () => number;
86
125
  /** What to do when a step needs a mandate and none was presented. `'throw'` (the default, unchanged)
@@ -88,6 +127,10 @@ export interface RunIntentOpts {
88
127
  * the step, so an Ask surface can tell the person what authority it would need instead of refusing —
89
128
  * it grants nothing: the caller must come back with a mandate, which is then verified as always. */
90
129
  onMissingMandate?: 'throw' | 'report';
130
+ /** Spec 418 §12 — a COMPARISON run holds its self-acting writes: the step is reached, its args normalised and resolved,
131
+ * and its receipt recorded as `skipped` ("dry run"), but the invoker is not called — so an experiment never changes the
132
+ * estate its cases assume, nor writes test data into a person's vault. Never set on a person's own run. */
133
+ dryRunSelfActs?: boolean;
91
134
  /**
92
135
  * Normalise a step's args before ANYTHING judges them — spec 350 §3.1.
93
136
  *
@@ -125,13 +168,15 @@ export interface RunIntentOpts {
125
168
  * already executed is re-invoked under the same idempotency key (an invoker makes it a no-op). */
126
169
  supplied?: SuppliedInputV1[];
127
170
  }
171
+ /** Spec 413 — the stepRef of the declared pre-plan retrieval step. */
172
+ export declare const RETRIEVAL_STEP_REF = "retrieve";
128
173
  /**
129
- * Run an intent to a terminal result. Plans, executes the steps in order (threading `ref` results into later
130
- * args), observes, and re-plans (bounded) when a step throws. Returns `completed` with the last successful
131
- * step's result, `failed` with the error, `denied` when authority refused a step, or `suspended` when an
132
- * approval is pending. Fail-closed throughout: an unknown tool, an empty plan, no plan, an exhausted step
133
- * budget, a capability step with no verifier, or a denial all produce a non-completed RunResult — never a
134
- * misleading empty success.
174
+ * The indices of the batch starting at `i`: the step and the consecutive steps after it that may run
175
+ * beside it (spec 370 P3). A step runs beside others only when its tool exercises no capability, it fans
176
+ * nothing out, no `after` edge points into the batch, none of its `$ref`s (or its `when`) name a result the
177
+ * batch produces, and it is not a replay (a replay is instant; keeping it alone keeps the order obvious).
135
178
  */
179
+ export { CONTINUE_STEP_ID };
180
+ export declare const CONTINUE_TOOL: ToolSpec;
136
181
  export declare function runIntent(intent: Intent, opts: RunIntentOpts): Promise<RunResult>;
137
182
  //# sourceMappingURL=loop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EACwB,mBAAmB,EAAc,kBAAkB,EAAE,YAAY,EAAE,WAAW,EACjH,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,kFAAkF;IAClF,MAAM,EAAE,WAAW,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C;;4GAEwG;IACxG,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IACjE,oFAAoF;IACpF,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;iGAI6F;IAC7F,SAAS,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAAC;IAC/D;;2EAEuE;IACvE,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,GAAG,IAAI,CAAC;IACpG;6GACyG;IACzG,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,aAAa,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAChH,wFAAwF;IACxF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,gBAAgB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7F;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7H;;4GAEwG;IACxG,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;yGAGqG;IACrG,gBAAgB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACtC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/H;;gHAE4G;IAC5G,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7F;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/H;;uGAEmG;IACnG,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AA0JD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CA2gBvF"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"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"}