@agenticprimitives/orchestration 0.0.0-alpha.27 → 0.0.0-alpha.28

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 (59) hide show
  1. package/dist/admission.d.ts +11 -2
  2. package/dist/admission.d.ts.map +1 -1
  3. package/dist/admission.js.map +1 -1
  4. package/dist/artifacts.d.ts +9 -1
  5. package/dist/artifacts.d.ts.map +1 -1
  6. package/dist/artifacts.js +119 -2
  7. package/dist/artifacts.js.map +1 -1
  8. package/dist/conformance.d.ts +14 -0
  9. package/dist/conformance.d.ts.map +1 -1
  10. package/dist/conformance.js +154 -30
  11. package/dist/conformance.js.map +1 -1
  12. package/dist/derivation.d.ts +23 -4
  13. package/dist/derivation.d.ts.map +1 -1
  14. package/dist/derivation.js +105 -6
  15. package/dist/derivation.js.map +1 -1
  16. package/dist/digest.d.ts +10 -0
  17. package/dist/digest.d.ts.map +1 -0
  18. package/dist/digest.js +45 -0
  19. package/dist/digest.js.map +1 -0
  20. package/dist/index.d.ts +7 -6
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +7 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/loop.d.ts +4 -1
  25. package/dist/loop.d.ts.map +1 -1
  26. package/dist/loop.js +275 -75
  27. package/dist/loop.js.map +1 -1
  28. package/dist/outcome.d.ts.map +1 -1
  29. package/dist/outcome.js +6 -5
  30. package/dist/outcome.js.map +1 -1
  31. package/dist/plan-digest.d.ts.map +1 -1
  32. package/dist/plan-digest.js +5 -13
  33. package/dist/plan-digest.js.map +1 -1
  34. package/dist/planner.d.ts +25 -0
  35. package/dist/planner.d.ts.map +1 -1
  36. package/dist/planner.js +57 -0
  37. package/dist/planner.js.map +1 -1
  38. package/dist/record.d.ts +14 -1
  39. package/dist/record.d.ts.map +1 -1
  40. package/dist/record.js +6 -0
  41. package/dist/record.js.map +1 -1
  42. package/dist/regression.d.ts +23 -2
  43. package/dist/regression.d.ts.map +1 -1
  44. package/dist/regression.js +22 -6
  45. package/dist/regression.js.map +1 -1
  46. package/dist/selection.js +1 -1
  47. package/dist/selection.js.map +1 -1
  48. package/dist/spans.d.ts +15 -2
  49. package/dist/spans.d.ts.map +1 -1
  50. package/dist/spans.js +20 -14
  51. package/dist/spans.js.map +1 -1
  52. package/dist/tool-invoker.d.ts +4 -0
  53. package/dist/tool-invoker.d.ts.map +1 -1
  54. package/dist/tool-invoker.js.map +1 -1
  55. package/dist/types.d.ts +54 -0
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/types.js +4 -0
  58. package/dist/types.js.map +1 -1
  59. package/package.json +2 -2
@@ -1,19 +1,90 @@
1
1
  import { outcomeClassOf as toolOutcomeClassOf } from './admission.js';
2
2
  const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
3
- /** The first figure of money in a sentence: "$2,000", "2000 usdc", "under 500", "for 1,250.50 dollars". */
4
- function moneyIn(sentence) {
5
- const m = sentence.match(/(?:\$|usd\s?|usdc\s?)?\s*(\d{1,3}(?:,\d{3})+|\d+)(?:\.(\d{1,2}))?\s*(?:usdc|usd|dollars?|bucks)?\b/i);
6
- if (!m)
7
- return null;
8
- // A bare number with no money word or symbol counts only after a bound word ("under", "for", "within", "budget").
9
- const raw = m[0];
10
- const hasMoneyWord = /\$|usd|dollar|buck/i.test(raw);
11
- const before = sentence.slice(0, m.index ?? 0);
12
- const afterBoundWord = /\b(under|for|within|budget(?: of)?|up to|at most|no more than|max(?:imum)?(?: of)?)\s*$/i.test(before);
13
- if (!hasMoneyWord && !afterBoundWord)
14
- return null;
15
- const n = Number(`${m[1].replace(/,/g, '')}${m[2] ? `.${m[2]}` : ''}`);
16
- return Number.isFinite(n) ? n : null;
3
+ const MONEY_WORD = '(?:usdc|usd|dollars?|bucks)';
4
+ const BOUND_WORD = '(?:under|below|within|less than|up to|at most|no more than|not more than|not over|max(?:imum)?(?: of)?|budget(?: of| is|:)?|cap(?:ped)? (?:of|at)|limit(?: of)?)';
5
+ const NUMBER_WORD = '(?:one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|fifteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|hundred|thousand|million|grand|a few|a couple|several|half)';
6
+ const RE_MONEY_AFTER = new RegExp(`^\\s?${MONEY_WORD}\\b`, 'i');
7
+ const RE_MONEY_BEFORE = /(?:\$|\b(?:usdc|usd)\s?)$/i;
8
+ const RE_BOUND_BEFORE = new RegExp(`\\b${BOUND_WORD}\\s*(?:about |around |roughly |a total of |total of )?$`, 'i');
9
+ const RE_PER_UNIT = /^\s*(?:each|apiece|per\b|a (?:head|person|piece)\b|every\b)/i;
10
+ const RE_TRAILING_FIGURE = /^\s*(?:and\s+)?\d/i;
11
+ const RE_BARE_BOUND_END = /^\s*(?:$|[,.;:!?)]|(?:total|in total|in all|altogether|overall|max|maximum|tops|or less|at|on|for|by|with|and|to|from|in)\b)/i;
12
+ const RE_WORDED = [new RegExp(`\\b${BOUND_WORD}\\s+(?:about |around |roughly )?${NUMBER_WORD}\\b`, 'i'), new RegExp(`\\b${NUMBER_WORD}\\s+${MONEY_WORD}\\b`, 'i')];
13
+ /** Read the money BOUND a sentence states — see the block above. Bounded: a goal past 4,000 characters is read to there. */
14
+ export function readMoneyBound(input) {
15
+ const sentence = String(input ?? '').slice(0, 4000);
16
+ const moneyBound = new Set(); // money, governed by a bound word: "under $2,000"
17
+ const bareBound = new Set(); // a bare figure governed by a bound word: "budget 500"
18
+ const money = new Set(); // money with no bound word: "for 1,250.50 dollars"
19
+ let unread = null;
20
+ const re = /(\d{1,3}(?:,\d{3})+|\d+)(?:\.(\d+))?/g;
21
+ for (let m = re.exec(sentence); m; m = re.exec(sentence)) {
22
+ const start = m.index;
23
+ const end = start + m[0].length;
24
+ const window = sentence.slice(Math.max(0, start - 48), start);
25
+ const negative = /[-−]$/.test(window) || /[-−]\s?(?:\$|usdc?\s?)$/i.test(window);
26
+ const before = window.replace(/[-−]$/, '');
27
+ const after = sentence.slice(end, end + 32);
28
+ const symbol = RE_MONEY_BEFORE.test(before);
29
+ const lead = before.replace(RE_MONEY_BEFORE, '').replace(/[-−]\s?$/, '');
30
+ const moneyAfter = RE_MONEY_AFTER.exec(after);
31
+ const isMoney = symbol || !!moneyAfter;
32
+ const bound = RE_BOUND_BEFORE.test(lead);
33
+ if (!isMoney && !bound)
34
+ continue; // a date, a head-count, a street number: no role
35
+ const rest = moneyAfter ? after.slice(moneyAfter[0].length) : after;
36
+ const figure = m[0];
37
+ if (!moneyAfter && /^[a-z%]/i.test(after)) { // "2k", "50%", "5th": glued to something that is not a money word
38
+ if (isMoney)
39
+ unread = `"${figure}${after.match(/^[a-z%]+/i)[0]}" is not a figure this reader understands`;
40
+ continue;
41
+ }
42
+ if (!isMoney && !RE_BARE_BOUND_END.test(after))
43
+ continue; // "under 40 people", "within 2 weeks": a bound on something else
44
+ if (negative) {
45
+ unread = `"${figure}" is written as a negative amount`;
46
+ continue;
47
+ }
48
+ if (/^\d/.test(after) || (m[2] && m[2].length > 2)) {
49
+ unread = `"${figure}" is not a well-formed amount`;
50
+ continue;
51
+ }
52
+ if (RE_PER_UNIT.test(rest)) {
53
+ unread = `"${figure}" is a per-unit figure, not a total`;
54
+ continue;
55
+ }
56
+ if (moneyAfter && RE_TRAILING_FIGURE.test(rest)) {
57
+ unread = `"${figure}" is followed by another figure — one amount or two cannot be told`;
58
+ continue;
59
+ }
60
+ const n = Number(`${m[1].replace(/,/g, '')}${m[2] ? `.${m[2]}` : ''}`);
61
+ if (!Number.isFinite(n)) {
62
+ unread = `"${figure}" is not a finite amount`;
63
+ continue;
64
+ }
65
+ (bound ? (isMoney ? moneyBound : bareBound) : money).add(n);
66
+ }
67
+ if (unread)
68
+ return { kind: 'unread', why: unread };
69
+ // THE ROLE DECIDES. A figure a bound word governs is the bound; money with no bound word is the bound only when it is
70
+ // the one amount the sentence names. A BARE bounded figure ("at most 12 at the hall") beside a different amount of
71
+ // money cannot be told from a head-count, and two different bounds cannot both be the total: unread, not a guess.
72
+ const bounded = new Set([...moneyBound, ...bareBound]);
73
+ if (bounded.size > 1)
74
+ return { kind: 'unread', why: `the sentence states ${bounded.size} different bounds (${[...bounded].join(', ')})` };
75
+ if (bounded.size === 1) {
76
+ const value = [...bounded][0];
77
+ if (!moneyBound.size && [...money].some((x) => x !== value))
78
+ return { kind: 'unread', why: `the sentence bounds something at ${value} and also names ${[...money].join(', ')} — which is the money bound cannot be told` };
79
+ return { kind: 'amount', value };
80
+ }
81
+ if (money.size === 1)
82
+ return { kind: 'amount', value: [...money][0] };
83
+ if (money.size > 1)
84
+ return { kind: 'unread', why: `the sentence names ${money.size} different amounts (${[...money].join(', ')}) and none is marked as the bound` };
85
+ if (RE_WORDED.some((r) => r.test(sentence)))
86
+ return { kind: 'unread', why: 'the sentence states an amount in words, which this reader does not read' };
87
+ return { kind: 'none' };
17
88
  }
18
89
  /** The words after a preposition, to the next clause: "at the town hall on Friday" → "the town hall". */
19
90
  function afterIn(sentence, prepositions) {
@@ -40,13 +111,16 @@ export function classifyOpenIntent(goal, classes) {
40
111
  return null;
41
112
  const c = hits[0];
42
113
  const bounds = {};
114
+ const unread = [];
43
115
  for (const [key, how] of Object.entries(c.reads ?? {})) {
44
116
  if (!c.bounds[key])
45
117
  continue;
46
118
  if (how.kind === 'money') {
47
- const n = moneyIn(sentence);
48
- if (n !== null)
49
- bounds[key] = n;
119
+ const read = readMoneyBound(sentence);
120
+ if (read.kind === 'amount')
121
+ bounds[key] = read.value;
122
+ else if (read.kind === 'unread')
123
+ unread.push(key); // stated, not understood — carried, never dropped (RUNC-4)
50
124
  }
51
125
  else {
52
126
  const v = afterIn(sentence, how.prepositions);
@@ -54,19 +128,29 @@ export function classifyOpenIntent(goal, classes) {
54
128
  bounds[key] = v;
55
129
  }
56
130
  }
57
- return { class: c.class, ...(Object.keys(bounds).length ? { bounds } : {}) };
131
+ return { class: c.class, ...(Object.keys(bounds).length ? { bounds } : {}), ...(unread.length ? { unread } : {}) };
58
132
  }
59
133
  export function statedOutcomeOf(intent) {
60
134
  const o = intent.constraints?.outcome;
61
- return o && typeof o === 'object' && typeof o.class === 'string' && o.class ? { class: o.class, ...(o.bounds && typeof o.bounds === 'object' ? { bounds: o.bounds } : {}) } : null;
135
+ if (!o || typeof o !== 'object' || typeof o.class !== 'string' || !o.class)
136
+ return null;
137
+ const unread = Array.isArray(o.unread) ? o.unread.filter((k) => typeof k === 'string' && !!k) : [];
138
+ return { class: o.class, ...(o.bounds && typeof o.bounds === 'object' ? { bounds: o.bounds } : {}), ...(unread.length ? { unread } : {}) };
62
139
  }
140
+ /** A plain decimal amount, or null: NaN, ±Infinity, exponent forms, units and anything else are not amounts. */
63
141
  const asNumber = (v) => {
64
142
  if (typeof v === 'number')
65
143
  return Number.isFinite(v) ? v : null;
66
- if (typeof v === 'string' && /^\s*-?\d+(\.\d+)?\s*$/.test(v))
67
- return Number(v);
144
+ if (typeof v === 'string' && v.length <= 40 && /^\s*-?\d+(\.\d+)?\s*$/.test(v)) {
145
+ const n = Number(v);
146
+ return Number.isFinite(n) ? n : null;
147
+ }
68
148
  return null;
69
149
  };
150
+ /** A `{ $ref: 'step.path' }` placeholder — a value an earlier step's result will supply. */
151
+ const isRef = (v) => !!v && typeof v === 'object' && !Array.isArray(v) && typeof v.$ref === 'string';
152
+ /** Amounts are summed in millionths so 0.1 + 0.2 is not "over" 0.3. */
153
+ const micro = (n) => Math.round(n * 1e6);
70
154
  const norm = (v) => String(v ?? '').trim().toLowerCase();
71
155
  /**
72
156
  * The rule. `lookup` resolves an outcome class IRI to what it entails (the ontology's `outcomeClassOf`); a class
@@ -74,13 +158,15 @@ const norm = (v) => String(v ?? '').trim().toLowerCase();
74
158
  * that names the unknown class, never a silent pass.
75
159
  */
76
160
  export function outcomeConformance(lookup) {
77
- return ({ intent, plan, tools }) => {
161
+ return ({ intent, plan, tools, concrete }) => {
78
162
  const stated = statedOutcomeOf(intent);
79
163
  if (!stated)
80
164
  return [];
81
165
  const byId = new Map(tools.map((t) => [t.id, t]));
82
166
  const oc = lookup(stated.class);
83
167
  const violations = [];
168
+ /** Running total (millionths) of the amounts admitted so far, per amount bound — the bound is judged over the plan. */
169
+ const totals = new Map();
84
170
  plan.steps.forEach((step, i) => {
85
171
  const tool = byId.get(step.toolId);
86
172
  if (!tool || !tool.capability || toolOutcomeClassOf(tool) === 'lookup')
@@ -99,18 +185,56 @@ export function outcomeConformance(lookup) {
99
185
  if (ent.bound) {
100
186
  const b = oc.bounds[ent.bound];
101
187
  const statedValue = stated.bounds?.[ent.bound];
102
- if (b && statedValue !== undefined) {
188
+ // RUNC-4 — a bound the sentence STATED and nobody could read holds every effect it governs back: the person
189
+ // said a limit, and offering the effect as if she had not is the failure this stage exists to prevent.
190
+ if (b && stated.unread?.includes(ent.bound)) {
191
+ violations.push({ code: 'OUTCOME_BOUND_UNREAD', message: `${capId}: the intent states a ${ent.bound} that could not be understood, so ${b.arg} cannot be judged against it — state the ${ent.bound} as one plain figure`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
192
+ }
193
+ else if (b && statedValue !== undefined) {
103
194
  const actual = step.args[b.arg];
104
- if (actual !== undefined && actual !== null && actual !== '') {
105
- if (b.kind === 'amount') {
195
+ if (b.kind === 'amount') {
196
+ const limit = asNumber(statedValue);
197
+ if (limit === null || limit < 0) {
198
+ violations.push({ code: 'OUTCOME_BOUND_UNREAD', message: `${capId}: the ${ent.bound} the intent stated (${String(statedValue)}) is not an amount, so ${b.arg} cannot be judged against it`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
199
+ }
200
+ else if (actual === undefined || actual === null || actual === '' || (!concrete && isRef(actual))) {
201
+ // Spec 445 W0 — AN AMOUNT THAT IS NOT YET A FIGURE IS NOT UNDER THE BOUND. Absent (to be asked for) used
202
+ // to pass unjudged, and whatever the person or the tool later supplied was never compared with what she
203
+ // said; a `$ref` was refused outright though its value is decidable the moment the producing step has
204
+ // run. One rule for both: at plan admission the step is NOT conformant and says so (`defer` — a caller
205
+ // that cannot re-judge sees a refusal); at the point of use (`concrete`) an amount still absent is ASKED
206
+ // for before any tool or signature sees the step, and a threaded one is by then a value and is judged
207
+ // below like any other.
208
+ const threaded = isRef(actual);
209
+ violations.push(concrete
210
+ ? { code: 'OUTCOME_BOUND_PENDING', message: `${capId}: ${b.arg} is not stated, and the intent holds it to a ${ent.bound} of ${String(statedValue)} — how much?`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'ask' }
211
+ : { code: 'OUTCOME_BOUND_PENDING', message: `${capId}: ${b.arg} ${threaded ? 'comes from an earlier step\'s result' : 'is not stated'}, so it cannot yet be held to the ${ent.bound} the intent stated (${String(statedValue)}) — it is judged when it is a figure, before the step is offered for signature or run`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'defer' });
212
+ }
213
+ else {
106
214
  const have = asNumber(actual);
107
- const limit = asNumber(statedValue);
108
- if (have === null || limit === null || have > limit)
215
+ if (have === null || have < 0) {
216
+ // A negative, NaN, infinite or unreadable amount is not "under the bound" — it is not an amount.
217
+ violations.push({ code: 'OUTCOME_BOUND_EXCEEDED', message: `${capId}: ${b.arg} ${typeof actual === 'object' ? 'is not a stated figure' : String(actual)} is not a non-negative amount and cannot be held to the ${ent.bound} the intent stated (${String(statedValue)})`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
218
+ }
219
+ else if (micro(have) > micro(limit)) {
109
220
  violations.push({ code: 'OUTCOME_BOUND_EXCEEDED', message: `${capId}: ${b.arg} ${String(actual)} exceeds the ${ent.bound} the intent stated (${String(statedValue)})`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
221
+ }
222
+ else {
223
+ // THE BOUND IS ON THE PLAN, NOT ON A STEP. Three payments of 1,900 under a budget of 2,000 each passed
224
+ // alone. Every effect held to this bound is summed in plan order; the step that takes the total over
225
+ // is refused (and does not count), as is any after it that would. A fan-out step counts once here and
226
+ // is judged again, item by item, when the loop has expanded it.
227
+ const spent = totals.get(ent.bound) ?? 0;
228
+ if (spent + micro(have) > micro(limit)) {
229
+ violations.push({ code: 'OUTCOME_BOUND_EXCEEDED', message: `${capId}: ${b.arg} ${String(actual)} takes the plan's total to ${(spent + micro(have)) / 1e6}, which exceeds the ${ent.bound} the intent stated (${String(statedValue)}) — the ${ent.bound} is for the whole plan, not for each step`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
230
+ }
231
+ else
232
+ totals.set(ent.bound, spent + micro(have));
233
+ }
110
234
  }
111
- else if (norm(actual) !== norm(statedValue)) {
112
- violations.push({ code: 'OUTCOME_BOUND_EXCEEDED', message: `${capId}: ${b.arg} "${String(actual)}" is not the ${ent.bound} the intent named ("${String(statedValue)}") — a substitute is not what was asked`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
113
- }
235
+ }
236
+ else if (actual !== undefined && actual !== null && actual !== '' && norm(actual) !== norm(statedValue)) {
237
+ violations.push({ code: 'OUTCOME_BOUND_EXCEEDED', message: `${capId}: ${b.arg} "${String(actual)}" is not the ${ent.bound} the intent named ("${String(statedValue)}") — a substitute is not what was asked`, stepIndex: i, toolId: tool.id, field: b.arg, recovery: 'refuse' });
114
238
  }
115
239
  }
116
240
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,37 @@ import type { StepObservation } from './types.js';
2
2
  export interface ArgDerivationV1 {
3
3
  /** The value (or its name part) is in the person's own words. */
4
4
  hers: boolean;
5
- /** Observations the value occurs in, by stepRef (and tool). */
5
+ /** Observations the value occurs in, by stepRef (and tool). `threaded` marks a source the plan NAMED: the argument is
6
+ * a `{ $ref }` to that step's result (`via: 'ref'`), or that step's own arguments were threaded from this one
7
+ * (`via: 'transitive'`) — the chain a value travelled, as the plan wrote it, not a textual match. */
6
8
  from: Array<{
7
9
  stepRef: string;
8
10
  toolId: string;
9
11
  untrusted: boolean;
12
+ threaded?: true;
13
+ via?: 'ref' | 'transitive';
10
14
  }>;
11
- /** The value came ONLY from untrusted content: not in her words, and every source it occurs in is untrusted. */
15
+ /** The value came ONLY from untrusted content: not in her words, and every source it occurs in is untrusted — or it
16
+ * was THREADED out of an untrusted result (directly or through a step that was), which is where it came from
17
+ * whatever else happens to contain the same characters. */
12
18
  untrustedOnly: boolean;
19
+ /** RUN-10 — the argument is a `$ref` no earlier observation provides: where it came from cannot be said. */
20
+ unresolvedRef?: true;
13
21
  }
14
22
  /**
15
- * Derivation of each STRING argument (and each string in an array argument) of one step. Arguments shorter than three
16
- * characters, and values the run cannot have read (booleans, numbers) are not judged: they carry no party or content.
23
+ * Derivation of each argument of one step.
24
+ *
25
+ * A LITERAL string argument (and each string in an array argument) is judged by containment: is it in her sentence, and
26
+ * which observations contain it. Literals shorter than three characters, and literal booleans / numbers, are not judged:
27
+ * they carry no party or content.
28
+ *
29
+ * A THREADED argument — `{ $ref: 'inbox.items.0.from' }`, anywhere in the value — is judged by what the plan says
30
+ * (RUN-10, spec 445 W0): its source IS the step whose result the `$ref` names, and transitively every step THAT step's
31
+ * own arguments were threaded from. It used to be skipped entirely (only strings were judged, and a threaded value is
32
+ * an object until it resolves), so the normal way a plan carries a payee out of a message it read left no evidence at
33
+ * all. The resolved value is still looked for in her words: "pay the 10 she asked for" threaded from a read is hers.
34
+ * `observations` must carry each producing step's `step.ref` (the loop's do); a `$ref` nothing provides is recorded as
35
+ * `unresolvedRef`, never as "no derivation".
17
36
  */
18
37
  export declare function deriveArgs(args: Record<string, unknown>, goal: string, observations: ReadonlyArray<StepObservation>): Record<string, ArgDerivationV1>;
19
38
  /** The arguments of a step that came only from untrusted content — the ones her signing card must name. */
@@ -1 +1 @@
1
- {"version":3,"file":"derivation.d.ts","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACrE,gHAAgH;IAChH,aAAa,EAAE,OAAO,CAAC;CACxB;AAwBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAerJ;AAED,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,EAAE,CAE1E"}
1
+ {"version":3,"file":"derivation.d.ts","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,EAAE,OAAO,CAAC;IACd;;0GAEsG;IACtG,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;IAClH;;gEAE4D;IAC5D,aAAa,EAAE,OAAO,CAAC;IACvB,4GAA4G;IAC5G,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB;AAwDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA0CrJ;AAED,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,EAAE,CAE1E"}
@@ -20,24 +20,123 @@ const contains = (hay, needle) => {
20
20
  }
21
21
  return false;
22
22
  };
23
- const isUntrusted = (r) => !!r && typeof r === 'object' && r.untrusted === true;
23
+ const isUntrusted = (r) => !!r && typeof r === 'object' && (r.untrusted === true || r['x-ap-untrusted'] === true);
24
+ /** Every `{ $ref: 'name.path' }` inside a value (the argument itself, or nested in an object / array argument). */
25
+ function refsIn(v, out = [], depth = 0) {
26
+ if (!v || typeof v !== 'object' || depth > 16)
27
+ return out;
28
+ if (Array.isArray(v)) {
29
+ for (const x of v)
30
+ refsIn(x, out, depth + 1);
31
+ return out;
32
+ }
33
+ const o = v;
34
+ if (typeof o.$ref === 'string') {
35
+ out.push(o.$ref);
36
+ return out;
37
+ }
38
+ for (const x of Object.values(o))
39
+ refsIn(x, out, depth + 1);
40
+ return out;
41
+ }
42
+ /** The value a `$ref` path names inside the producing step's result — the loop's own flat path walk. */
43
+ const atPath = (root, path) => path.reduce((acc, seg) => (acc == null ? undefined : acc[seg]), root);
44
+ /** The strings (and numbers, as written) a resolved value carries, bounded — what "is it in her words" is asked of. */
45
+ function leavesOf(v, out = [], depth = 0) {
46
+ if (out.length >= 32 || depth > 6)
47
+ return out;
48
+ if (typeof v === 'string')
49
+ out.push(v);
50
+ else if (typeof v === 'number' && Number.isFinite(v))
51
+ out.push(String(v));
52
+ else if (Array.isArray(v)) {
53
+ for (const x of v)
54
+ leavesOf(x, out, depth + 1);
55
+ }
56
+ else if (v && typeof v === 'object') {
57
+ for (const x of Object.values(v))
58
+ leavesOf(x, out, depth + 1);
59
+ }
60
+ return out;
61
+ }
62
+ /** Whole-word containment with no minimum length — for a THREADED value only (a threaded amount of "10" is hers when
63
+ * her sentence says 10; the three-character floor exists to keep stray literals from matching everything). */
64
+ const containsToken = (hay, needle) => {
65
+ if (!needle || needle.length > hay.length)
66
+ return false;
67
+ for (let i = hay.indexOf(needle); i >= 0; i = hay.indexOf(needle, i + 1)) {
68
+ const before = i === 0 ? '' : hay[i - 1];
69
+ const after = hay[i + needle.length] ?? '';
70
+ if (!WORD_CHAR.test(before) && !WORD_CHAR.test(after))
71
+ return true;
72
+ }
73
+ return false;
74
+ };
24
75
  /**
25
- * Derivation of each STRING argument (and each string in an array argument) of one step. Arguments shorter than three
26
- * characters, and values the run cannot have read (booleans, numbers) are not judged: they carry no party or content.
76
+ * Derivation of each argument of one step.
77
+ *
78
+ * A LITERAL string argument (and each string in an array argument) is judged by containment: is it in her sentence, and
79
+ * which observations contain it. Literals shorter than three characters, and literal booleans / numbers, are not judged:
80
+ * they carry no party or content.
81
+ *
82
+ * A THREADED argument — `{ $ref: 'inbox.items.0.from' }`, anywhere in the value — is judged by what the plan says
83
+ * (RUN-10, spec 445 W0): its source IS the step whose result the `$ref` names, and transitively every step THAT step's
84
+ * own arguments were threaded from. It used to be skipped entirely (only strings were judged, and a threaded value is
85
+ * an object until it resolves), so the normal way a plan carries a payee out of a message it read left no evidence at
86
+ * all. The resolved value is still looked for in her words: "pay the 10 she asked for" threaded from a read is hers.
87
+ * `observations` must carry each producing step's `step.ref` (the loop's do); a `$ref` nothing provides is recorded as
88
+ * `unresolvedRef`, never as "no derivation".
27
89
  */
28
90
  export function deriveArgs(args, goal, observations) {
29
91
  const said = norm(goal);
30
- const texts = observations.filter((o) => o.ok && !o.skipped && o.result !== undefined).map((o) => ({
92
+ const live = observations.filter((o) => o.ok && !o.skipped && o.result !== undefined);
93
+ // Textual containment is asked only when a literal needs it — serialising every result for a plan of `$ref`s is waste.
94
+ let textsMemo;
95
+ const texts = () => (textsMemo ??= live.map((o) => ({
31
96
  stepRef: o.stepRef ?? '', toolId: o.step.toolId, untrusted: isUntrusted(o.result), text: norm(typeof o.result === 'string' ? o.result : JSON.stringify(o.result)),
32
- }));
97
+ })));
98
+ /** The latest live observation bound under a ref name. */
99
+ const producerOf = (name) => { for (let i = live.length - 1; i >= 0; i--)
100
+ if (live[i].step.ref === name)
101
+ return live[i]; return undefined; };
33
102
  const out = {};
34
103
  for (const [k, raw] of Object.entries(args)) {
104
+ const refs = refsIn(raw);
105
+ if (refs.length) {
106
+ const from = [];
107
+ const seen = new Set();
108
+ const resolved = [];
109
+ let unresolved = false;
110
+ const walk = (ref, via, depth) => {
111
+ const [name, ...path] = ref.split('.');
112
+ const o = name ? producerOf(name) : undefined;
113
+ if (!o) {
114
+ if (via === 'ref')
115
+ unresolved = true;
116
+ return;
117
+ }
118
+ if (via === 'ref')
119
+ resolved.push(atPath(o.result, path));
120
+ if (seen.has(o) || depth > 16)
121
+ return;
122
+ seen.add(o);
123
+ from.push({ stepRef: o.stepRef ?? o.step.id ?? '', toolId: o.step.toolId, untrusted: isUntrusted(o.result), threaded: true, via });
124
+ for (const inner of refsIn(o.step.args))
125
+ walk(inner, 'transitive', depth + 1);
126
+ };
127
+ for (const r of refs)
128
+ walk(r, 'ref', 0);
129
+ const leaves = resolved.flatMap((v) => leavesOf(v)).map(norm).filter(Boolean);
130
+ const hers = leaves.length > 0 && leaves.every((l) => containsToken(said, l) || formsOf(l).some((f) => contains(said, f)));
131
+ out[k] = { hers, from, untrustedOnly: !hers && from.some((f) => f.untrusted), ...(unresolved ? { unresolvedRef: true } : {}) };
132
+ continue;
133
+ }
35
134
  const values = (Array.isArray(raw) ? raw : [raw]).filter((v) => typeof v === 'string' && norm(v).length >= 3);
36
135
  if (!values.length)
37
136
  continue;
38
137
  const forms = values.flatMap(formsOf);
39
138
  const hers = forms.some((f) => contains(said, f));
40
- const from = texts.filter((t) => forms.some((f) => contains(t.text, f))).map(({ stepRef, toolId, untrusted }) => ({ stepRef, toolId, untrusted }));
139
+ const from = texts().filter((t) => forms.some((f) => contains(t.text, f))).map(({ stepRef, toolId, untrusted }) => ({ stepRef, toolId, untrusted }));
41
140
  out[k] = { hers, from, untrustedOnly: !hers && from.length > 0 && from.every((f) => f.untrusted) };
42
141
  }
43
142
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"derivation.js","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derivation.js","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** The scheme tag every value digest carries. A digest under any other tag (or none — the retired `json:` prefix form)
2
+ * was not written by this rule and is never compared as if it were. */
3
+ export declare const VALUE_DIGEST_SCHEME: "sha256-jcs-v1";
4
+ /** `sha256-jcs-v1:<64 hex>` over the full canonical JSON of `v`. */
5
+ export declare function valueDigest(v: unknown): Promise<string>;
6
+ /** Was this digest written under the current scheme, over a value that could be serialised? */
7
+ export declare const isValueDigest: (d: unknown) => d is string;
8
+ /** Structural equality of two values, by their full canonical JSON (a declared branch's `equals`). Never a prefix. */
9
+ export declare function sameValue(a: unknown, b: unknown): boolean;
10
+ //# sourceMappingURL=digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAaA;wEACwE;AACxE,eAAO,MAAM,mBAAmB,EAAG,eAAwB,CAAC;AAK5D,oEAAoE;AACpE,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAO7D;AAED,+FAA+F;AAC/F,eAAO,MAAM,aAAa,MAAO,OAAO,KAAG,CAAC,IAAI,MAAyE,CAAC;AAE1H,sHAAsH;AACtH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAEzD"}
package/dist/digest.js ADDED
@@ -0,0 +1,45 @@
1
+ // VALUE DIGESTS — spec 445 W0 (RUN-8), completing R917-P-4 (spec 408 §2.4).
2
+ //
3
+ // A receipt's `inputDigest` / `planArgsDigest` / `outputDigest` are what a resume compares a replayed step against. They
4
+ // were a 2,048-character JSON PREFIX: two values agreeing in their first ~2 kB compared equal, so a completed step's
5
+ // result altered past the prefix was replayed as "the one the receipt recorded" and fed later `$ref`s. They are now a
6
+ // SHA-256 over the FULL canonical JSON of the value (keys sorted at every level, bigints as decimal strings — the same
7
+ // canonical form `plan-digest.ts` and `artifacts.ts` use), tagged with the scheme so a reader can tell which rule a
8
+ // receipt was written under.
9
+ //
10
+ // One pass to serialise, one native hash (Web Crypto): linear in the value, no RegExp, no repeated slicing — a 2 MB
11
+ // argument is a few milliseconds, not a cliff.
12
+ import { canonicalJson } from './artifacts.js';
13
+ /** The scheme tag every value digest carries. A digest under any other tag (or none — the retired `json:` prefix form)
14
+ * was not written by this rule and is never compared as if it were. */
15
+ export const VALUE_DIGEST_SCHEME = 'sha256-jcs-v1';
16
+ const PREFIX = `${VALUE_DIGEST_SCHEME}:`;
17
+ /** What a value that cannot be serialised (a cycle) digests to. It vouches for nothing: `vouchesFor` is false for it. */
18
+ const UNSERIALIZABLE = `${PREFIX}unserializable`;
19
+ /** `sha256-jcs-v1:<64 hex>` over the full canonical JSON of `v`. */
20
+ export async function valueDigest(v) {
21
+ let json;
22
+ try {
23
+ json = canonicalJson(v);
24
+ }
25
+ catch {
26
+ return UNSERIALIZABLE;
27
+ }
28
+ const bytes = new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(json)));
29
+ let hex = '';
30
+ for (let i = 0; i < bytes.length; i++)
31
+ hex += bytes[i].toString(16).padStart(2, '0');
32
+ return `${PREFIX}${hex}`;
33
+ }
34
+ /** Was this digest written under the current scheme, over a value that could be serialised? */
35
+ export const isValueDigest = (d) => typeof d === 'string' && /^sha256-jcs-v1:[0-9a-f]{64}$/.test(d);
36
+ /** Structural equality of two values, by their full canonical JSON (a declared branch's `equals`). Never a prefix. */
37
+ export function sameValue(a, b) {
38
+ try {
39
+ return canonicalJson(a) === canonicalJson(b);
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,yHAAyH;AACzH,qHAAqH;AACrH,sHAAsH;AACtH,uHAAuH;AACvH,oHAAoH;AACpH,6BAA6B;AAC7B,EAAE;AACF,oHAAoH;AACpH,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;wEACwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAwB,CAAC;AAC5D,MAAM,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAC;AACzC,yHAAyH;AACzH,MAAM,cAAc,GAAG,GAAG,MAAM,gBAAgB,CAAC;AAEjD,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAU;IAC1C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,cAAc,CAAC;IAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtF,OAAO,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1H,sHAAsH;AACtH,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,CAAU;IAC9C,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC/E,CAAC"}