@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.
- package/dist/admission.d.ts +11 -2
- package/dist/admission.d.ts.map +1 -1
- package/dist/admission.js.map +1 -1
- package/dist/artifacts.d.ts +9 -1
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +119 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/conformance.d.ts +14 -0
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +154 -30
- package/dist/conformance.js.map +1 -1
- package/dist/derivation.d.ts +23 -4
- package/dist/derivation.d.ts.map +1 -1
- package/dist/derivation.js +105 -6
- package/dist/derivation.js.map +1 -1
- package/dist/digest.d.ts +10 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +45 -0
- package/dist/digest.js.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts +4 -1
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +275 -75
- package/dist/loop.js.map +1 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +6 -5
- package/dist/outcome.js.map +1 -1
- package/dist/plan-digest.d.ts.map +1 -1
- package/dist/plan-digest.js +5 -13
- package/dist/plan-digest.js.map +1 -1
- package/dist/planner.d.ts +25 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +57 -0
- package/dist/planner.js.map +1 -1
- package/dist/record.d.ts +14 -1
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +6 -0
- package/dist/record.js.map +1 -1
- package/dist/regression.d.ts +23 -2
- package/dist/regression.d.ts.map +1 -1
- package/dist/regression.js +22 -6
- package/dist/regression.js.map +1 -1
- package/dist/selection.js +1 -1
- package/dist/selection.js.map +1 -1
- package/dist/spans.d.ts +15 -2
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +20 -14
- package/dist/spans.js.map +1 -1
- package/dist/tool-invoker.d.ts +4 -0
- package/dist/tool-invoker.d.ts.map +1 -1
- package/dist/tool-invoker.js.map +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/conformance.js
CHANGED
|
@@ -1,19 +1,90 @@
|
|
|
1
1
|
import { outcomeClassOf as toolOutcomeClassOf } from './admission.js';
|
|
2
2
|
const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
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
|
|
48
|
-
if (
|
|
49
|
-
bounds[key] =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
105
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
}
|
package/dist/conformance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAetE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACjF,2GAA2G;AAC3G,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,qGAAqG,CAAC,CAAC;IAChI,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,kHAAkH;IAClH,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,0FAA0F,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/H,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AACD,yGAAyG;AACzG,SAAS,OAAO,CAAC,QAAgB,EAAE,YAA+B;IAChE,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,kFAAkF,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/I,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAwC;IACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACnB,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,SAAS;QAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;aACtF,CAAC;YAAC,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;YAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC;AAUD,MAAM,UAAU,eAAe,CAAC,MAAiD;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,OAA+C,CAAC;IAC9E,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAyC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxN,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAiB,EAAE;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,MAAM,IAAI,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqD;IACtF,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,uCAAuC;YACvH,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,KAAK,oCAAoC,MAAM,CAAC,KAAK,uFAAuF,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/P,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,KAAK,qBAAqB,EAAE,CAAC,KAAK,0FAA0F,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/O,OAAO;YACT,CAAC;YACD,kGAAkG;YAClG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;wBAC7D,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;4BAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;4BACnE,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK;gCAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,KAAK,uBAAuB,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;wBACjS,CAAC;6BAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;4BAC9C,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,KAAK,uBAAuB,MAAM,CAAC,WAAW,CAAC,yCAAyC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;wBACnR,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,8GAA8G;YAC9G,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE;wBAAE,SAAS;oBAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,IAAI,OAAO,CAAC,MAAM;wBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,GAAG,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,6BAA6B,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClP,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,KAA0J,EAAE,MAAqD;IAC9O,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAyB,CAAC;IAC/H,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AAC5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
|
package/dist/derivation.d.ts
CHANGED
|
@@ -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
|
|
16
|
-
*
|
|
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. */
|
package/dist/derivation.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/derivation.js
CHANGED
|
@@ -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
|
|
26
|
-
*
|
|
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
|
|
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;
|
package/dist/derivation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivation.js","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"derivation.js","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"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"}
|
package/dist/digest.d.ts
ADDED
|
@@ -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"}
|