@agenticprimitives/orchestration 0.0.0-alpha.2 → 0.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/admission.d.ts +66 -10
- package/dist/admission.d.ts.map +1 -1
- package/dist/admission.js +203 -8
- package/dist/admission.js.map +1 -1
- package/dist/answer-quality.d.ts +129 -0
- package/dist/answer-quality.d.ts.map +1 -0
- package/dist/answer-quality.js +197 -0
- package/dist/answer-quality.js.map +1 -0
- package/dist/authority.d.ts +39 -0
- package/dist/authority.d.ts.map +1 -1
- package/dist/conformance.d.ts +66 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +140 -0
- package/dist/conformance.js.map +1 -0
- package/dist/derivation.d.ts +21 -0
- package/dist/derivation.d.ts.map +1 -0
- package/dist/derivation.js +31 -0
- package/dist/derivation.js.map +1 -0
- package/dist/evidence.d.ts +77 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +101 -0
- package/dist/evidence.js.map +1 -0
- package/dist/export-port.d.ts +13 -0
- package/dist/export-port.d.ts.map +1 -0
- package/dist/export-port.js +2 -0
- package/dist/export-port.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -4
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +37 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +46 -0
- package/dist/intent.js.map +1 -0
- package/dist/judgment.d.ts +131 -0
- package/dist/judgment.d.ts.map +1 -0
- package/dist/judgment.js +249 -0
- package/dist/judgment.js.map +1 -0
- package/dist/loop.d.ts +52 -7
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +314 -64
- package/dist/loop.js.map +1 -1
- package/dist/metrics.js +8 -8
- package/dist/metrics.js.map +1 -1
- package/dist/outcome.d.ts +223 -0
- package/dist/outcome.d.ts.map +1 -0
- package/dist/outcome.js +325 -0
- package/dist/outcome.js.map +1 -0
- package/dist/plan-digest.d.ts +6 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plan-digest.js +35 -0
- package/dist/plan-digest.js.map +1 -0
- package/dist/planner.d.ts +18 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +74 -0
- package/dist/planner.js.map +1 -1
- package/dist/reconcile.d.ts +41 -0
- package/dist/reconcile.d.ts.map +1 -0
- package/dist/reconcile.js +20 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/record.d.ts +125 -21
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +47 -1
- package/dist/record.js.map +1 -1
- package/dist/regression.d.ts +109 -0
- package/dist/regression.d.ts.map +1 -0
- package/dist/regression.js +97 -0
- package/dist/regression.js.map +1 -0
- package/dist/rollup.d.ts +72 -0
- package/dist/rollup.d.ts.map +1 -0
- package/dist/rollup.js +117 -0
- package/dist/rollup.js.map +1 -0
- package/dist/selection.d.ts +334 -0
- package/dist/selection.d.ts.map +1 -0
- package/dist/selection.js +481 -0
- package/dist/selection.js.map +1 -0
- package/dist/spans.d.ts +62 -0
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +78 -11
- package/dist/spans.js.map +1 -1
- package/dist/tool-invoker.d.ts +54 -3
- package/dist/tool-invoker.d.ts.map +1 -1
- package/dist/tool-invoker.js +26 -1
- package/dist/tool-invoker.js.map +1 -1
- package/dist/trace-facts.d.ts +93 -0
- package/dist/trace-facts.d.ts.map +1 -0
- package/dist/trace-facts.js +82 -0
- package/dist/trace-facts.js.map +1 -0
- package/dist/types.d.ts +86 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/package.json +17 -8
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// ANSWER QUALITY, JUDGED — spec 416 §4h. An instruction skill's answer is scored by typed yes-no questions (J9) over one
|
|
2
|
+
// frozen state — the request, the skill's ontology card, the answer — so a faster or cheaper way of answering can be
|
|
3
|
+
// traded against quality with evidence, not taste. Numbers only leave (J7): the per-question probabilities and their
|
|
4
|
+
// mean. Evidence, never authority (J1): nothing reads the score to permit or refuse anything.
|
|
5
|
+
import { judgeQuestions, judgeQuestionsAveraged, structuredCallDecisionModel } from './judgment.js';
|
|
6
|
+
export const ANSWER_QUALITY_JUDGE = { name: 'ap.answer-quality-judge.v1', kind: 'model' };
|
|
7
|
+
/** The rubric: each a statement the judge gives P(true) for. Stable ids — a changed rubric is a new judge name (J5). */
|
|
8
|
+
export const ANSWER_QUALITY_RUBRIC = [
|
|
9
|
+
{ id: 'answers', statement: 'The answer addresses what the request actually asks for, not a neighbouring task.' },
|
|
10
|
+
{ id: 'method', statement: 'The answer follows the skill\'s method and produces what the skill says it produces.' },
|
|
11
|
+
{ id: 'grounded', statement: 'The answer states no specific facts about the organization (names, figures, dates) that the request did not give, or marks each such fact as a placeholder to confirm.' },
|
|
12
|
+
{ id: 'asks', statement: 'Where the request lacks information the skill needs, the answer says what is needed instead of inventing it (true if nothing was missing).' },
|
|
13
|
+
{ id: 'usable', statement: 'A person could act on this answer as it stands, without rewriting it.' },
|
|
14
|
+
];
|
|
15
|
+
/** Judge one answer. The answer is truncated to `maxChars` (the judge reads a bounded state). */
|
|
16
|
+
export async function judgeAnswerQuality(input, call) {
|
|
17
|
+
const t0 = Date.now();
|
|
18
|
+
const max = input.maxChars ?? 8000;
|
|
19
|
+
const answer = input.answer.length > max ? `${input.answer.slice(0, max)}\n…(truncated)` : input.answer;
|
|
20
|
+
const questions = ANSWER_QUALITY_RUBRIC.map((q) => ({ id: q.id, kind: 'yes-no', statement: q.statement }));
|
|
21
|
+
const j = await judgeQuestions(`The skill: ${input.skillCard}\n\nThe request:\n${input.request}\n\nThe answer:\n${answer}`, questions, structuredCallDecisionModel(call, { name: ANSWER_QUALITY_JUDGE.name, stablePrefix: true }));
|
|
22
|
+
const scores = Object.fromEntries(Object.entries(j.answers).map(([id, a]) => [id, Number((a.distribution['true'] ?? 0).toFixed(4))]));
|
|
23
|
+
const vals = Object.values(scores);
|
|
24
|
+
return { judge: ANSWER_QUALITY_JUDGE, scores, score: vals.length ? Number((vals.reduce((a, b) => a + b, 0) / vals.length).toFixed(4)) : 0, ms: Date.now() - t0, ...(j.error !== undefined ? { error: j.error } : {}) };
|
|
25
|
+
}
|
|
26
|
+
// ── PAIRWISE PREFERENCE — a rubric scored in isolation saturates (0.97–1.00 for everything, 2026-09-27); two answers to
|
|
27
|
+
// the same request, judged side by side in BOTH orders under neutral labels and averaged (position bias cancelled), is
|
|
28
|
+
// the comparison that discriminates. Numbers only: P(first better), P(second better), P(no real difference).
|
|
29
|
+
export const ANSWER_PREFERENCE_JUDGE = { name: 'ap.answer-preference-judge.v1', kind: 'model' };
|
|
30
|
+
export async function judgeAnswerPreference(input, call) {
|
|
31
|
+
const t0 = Date.now();
|
|
32
|
+
const max = input.maxChars ?? 6000;
|
|
33
|
+
const cut = (a) => (a.length > max ? `${a.slice(0, max)}\n…(truncated)` : a);
|
|
34
|
+
const q = { id: 'better', kind: 'choice', question: 'Which answer better serves this request under this skill — more correct, more complete, better grounded, more usable?', options: Object.entries(input.answers).map(([id, a]) => ({ id, describe: cut(a).replace(/\s+/g, ' ') })), alsoOutcomes: [{ id: 'tie', describe: 'No real difference in quality.' }] };
|
|
35
|
+
const j = await judgeQuestionsAveraged(`The skill: ${input.skillCard}\n\nThe request:\n${input.request}`, [q], structuredCallDecisionModel(call, { name: ANSWER_PREFERENCE_JUDGE.name }), { permutations: 2 });
|
|
36
|
+
const a = j.answers['better'];
|
|
37
|
+
return { judge: ANSWER_PREFERENCE_JUDGE, preference: a ? { ...a.distribution } : {}, permutations: j.permutations, ms: Date.now() - t0, ...(j.error !== undefined ? { error: j.error } : {}) };
|
|
38
|
+
}
|
|
39
|
+
// ── THE OUTCOME CHECK — spec 418 / gap register A2. Not "was the right skill chosen" but "did the answer DELIVER what the
|
|
40
|
+
// request asked for". The ontology says what each skill PRODUCES; the request says WHICH of those it wants. So one call asks,
|
|
41
|
+
// per candidate class of the terminal skill, "does the request ask for a <class>?" and, per class, "does the answer deliver
|
|
42
|
+
// it — or, where the request lacks the facts it needs, its structure with the missing facts named?". Intermediate artifacts
|
|
43
|
+
// the plan was built on are always required. The score is delivery over the REQUESTED classes (those asked with P ≥ 0.5;
|
|
44
|
+
// the most-asked one when none is). v2 (2026-09-28): v1 required every product, and scored a correct letter of inquiry
|
|
45
|
+
// 0.24 because the drafter also produces proposals, and a structured pipeline with its gaps named ~0.
|
|
46
|
+
// v3 (2026-10-02) — ALTERNATIVE OUTPUTS ARE SCORED ONCE. A skill can produce EITHER one class OR another (the drafter: a
|
|
47
|
+
// Letter of Inquiry or a Grant Proposal, two entries to one application; its body picks one). v2 still asked about each
|
|
48
|
+
// and, when a request read as asking for both, averaged in the one the skill was never meant to write: on chain panels
|
|
49
|
+
// 1–4 (3 repeats, Claude Haiku judging) 51 of 68 grant runs delivered exactly one and lost about a third of the score.
|
|
50
|
+
// The ontology now says which produced classes are alternatives (`alternative`, a group name from the data graph's
|
|
51
|
+
// `skills:alternativeGroup`), and the score counts UNITS: an ungrouped class is its own unit, exactly as in v2; a group
|
|
52
|
+
// is one unit, requested = the most-asked member, delivered = the best-delivered member, required if any member is. The
|
|
53
|
+
// per-class `classes` / `requested` maps keep their shape; `units` says what was scored.
|
|
54
|
+
// Numbers only; evidence, never authority (J1).
|
|
55
|
+
export const OUTCOME_CHECK_JUDGE = { name: 'ap.outcome-check-judge.v3', kind: 'model' };
|
|
56
|
+
export async function judgeOutcomeDelivered(input, call) {
|
|
57
|
+
const t0 = Date.now();
|
|
58
|
+
const max = input.maxChars ?? 9000;
|
|
59
|
+
const answer = input.answer.length > max ? `${input.answer.slice(0, max)}\n…(truncated)` : input.answer;
|
|
60
|
+
const cands = input.expected.slice(0, 8);
|
|
61
|
+
if (!cands.length)
|
|
62
|
+
return { judge: OUTCOME_CHECK_JUDGE, classes: {}, requested: {}, score: 0, ms: 0, error: 'no expected classes' };
|
|
63
|
+
const qs = [
|
|
64
|
+
// Two plain questions per class, never one compound one: a judge reading "X, or else Y" anchored on X and scored a
|
|
65
|
+
// correct template-with-gaps 0.02 (validation, 2026-09-28). Delivered = the higher of the two.
|
|
66
|
+
...cands.map((c, i) => ({ id: `d${i + 1}`, kind: 'yes-no', statement: `The answer contains a complete ${c.label}.` })),
|
|
67
|
+
...cands.map((c, i) => ({ id: `s${i + 1}`, kind: 'yes-no', statement: `The answer lays out a ${c.label}'s full structure, filled in wherever the request gave the facts, and names the facts still needed to finish it.` })),
|
|
68
|
+
...cands.flatMap((c, i) => (c.required ? [] : [{ id: `r${i + 1}`, kind: 'yes-no', statement: `The request asks for a ${c.label}.` }])),
|
|
69
|
+
];
|
|
70
|
+
const j = await judgeQuestions(`The request:\n${input.request}\n\nThe answer:\n${answer}`, qs, structuredCallDecisionModel(call, { name: OUTCOME_CHECK_JUDGE.name, stablePrefix: true }));
|
|
71
|
+
const p = (id) => Number((j.answers[id]?.distribution['true'] ?? 0).toFixed(4));
|
|
72
|
+
const classes = Object.fromEntries(cands.map((c, i) => [c.iri, Math.max(p(`d${i + 1}`), p(`s${i + 1}`))]));
|
|
73
|
+
const requested = Object.fromEntries(cands.map((c, i) => [c.iri, c.required ? 1 : p(`r${i + 1}`)]));
|
|
74
|
+
// Fold each alternative group into ONE unit (v3); an ungrouped class is its own unit, so v2's arithmetic is unchanged.
|
|
75
|
+
const byId = new Map();
|
|
76
|
+
for (const c of cands) {
|
|
77
|
+
const id = c.alternative ? `alternative:${c.alternative}` : c.iri;
|
|
78
|
+
const u = byId.get(id) ?? (byId.set(id, { id, members: [], requested: 0, delivered: 0, counted: false }).get(id));
|
|
79
|
+
u.members.push(c.iri);
|
|
80
|
+
u.requested = Math.max(u.requested, requested[c.iri]);
|
|
81
|
+
u.delivered = Math.max(u.delivered, classes[c.iri]);
|
|
82
|
+
if (c.required)
|
|
83
|
+
u.required = true;
|
|
84
|
+
}
|
|
85
|
+
const units = [...byId.values()];
|
|
86
|
+
let counted = units.filter((u) => u.requested >= 0.5);
|
|
87
|
+
if (!counted.some((u) => !u.required)) {
|
|
88
|
+
const optional = units.filter((u) => !u.required).sort((a, b) => b.requested - a.requested);
|
|
89
|
+
if (optional[0])
|
|
90
|
+
counted = [...counted, optional[0]];
|
|
91
|
+
}
|
|
92
|
+
for (const u of counted)
|
|
93
|
+
u.counted = true;
|
|
94
|
+
const vals = counted.map((u) => u.delivered);
|
|
95
|
+
return { judge: OUTCOME_CHECK_JUDGE, classes, requested, units, score: vals.length ? Number((vals.reduce((a, b) => a + b, 0) / vals.length).toFixed(4)) : 0, ms: Date.now() - t0, ...(j.error !== undefined ? { error: j.error } : {}) };
|
|
96
|
+
}
|
|
97
|
+
// ── THE OUTCOME, ONE CLASS PER CALL — v4 (2026-10-14, "evals article gap" W4). v3 asked ONE call about every class at
|
|
98
|
+
// once (up to 8 classes, 2–3 questions each): one judge call grading several dimensions, which is the thing the article
|
|
99
|
+
// says not to do, and a judge that could not read the answer still had to put a number on every class. v4 asks the
|
|
100
|
+
// judge ONE QUESTION PER CLASS, each in its own call, with the class's own words — its `rdfs:comment` and the fields its
|
|
101
|
+
// SHACL shape requires (W3 hands these over) — and lets it say UNKNOWN. Unknown is earl:cantTell: counted, reported, and
|
|
102
|
+
// OUT of the denominator (a judge that cannot read an answer must not score it 0 or 1). The "which classes does the
|
|
103
|
+
// request ask for" question is about the REQUEST, not the answer, so it stays one call of its own, as before.
|
|
104
|
+
//
|
|
105
|
+
// What a class EXPECTS depends on the gold (W2): a class the plan PRODUCES must be delivered; a class the gold names
|
|
106
|
+
// MISSING must be NAMED as missing (asked for, never invented); a clarify case must ASK WHICH option. The units, the
|
|
107
|
+
// alternative groups and the arithmetic are v3's; only the questions and the cantTell verdict are new.
|
|
108
|
+
export const OUTCOME_PER_CLASS_JUDGE = { name: 'ap.outcome-per-class-judge.v4', kind: 'model' };
|
|
109
|
+
/** The question for one class, from the ontology's own words. Pure, so the prompt is a function of the class. */
|
|
110
|
+
export function outcomeQuestionOf(c) {
|
|
111
|
+
const what = c.comment ? ` ${c.comment.trim().replace(/\s+/g, ' ')}` : '';
|
|
112
|
+
const has = c.requiredFields?.length ? ` A complete one has: ${c.requiredFields.join(', ')}.` : '';
|
|
113
|
+
const good = c.qualityFields?.length ? ` A good one also has: ${c.qualityFields.join(', ')}.` : '';
|
|
114
|
+
switch (c.kind ?? 'delivered') {
|
|
115
|
+
case 'named-missing':
|
|
116
|
+
return `The right answer NAMES the ${c.label} as missing — says it needs it, asks for it, or leaves a marked placeholder — instead of inventing one.${what} Does the answer do that?`;
|
|
117
|
+
case 'asked-which':
|
|
118
|
+
return `The right answer ASKS the person which of the named options they mean, instead of choosing one for them. Does the answer ask which?`;
|
|
119
|
+
default:
|
|
120
|
+
return `Does the answer deliver a ${c.label}?${what}${has}${good} "Delivered" means the answer contains a complete ${c.label}, or lays out its full structure filled in wherever the request gave the facts and names the facts still needed.`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export async function judgeOutcomePerClass(input, call) {
|
|
124
|
+
const t0 = Date.now();
|
|
125
|
+
const max = input.maxChars ?? 9000;
|
|
126
|
+
const answer = input.answer.length > max ? `${input.answer.slice(0, max)}\n…(truncated)` : input.answer;
|
|
127
|
+
const cands = input.expected.slice(0, 8);
|
|
128
|
+
if (!cands.length)
|
|
129
|
+
return { judge: OUTCOME_PER_CLASS_JUDGE, classes: {}, requested: {}, verdicts: {}, units: [], score: 0, counted: 0, cantTell: 0, calls: 0, ms: 0, error: 'no expected classes' };
|
|
130
|
+
const port = structuredCallDecisionModel(call, { name: OUTCOME_PER_CLASS_JUDGE.name, stablePrefix: true });
|
|
131
|
+
const state = `The request:\n${input.request}\n\nThe answer:\n${answer}`;
|
|
132
|
+
const errors = [];
|
|
133
|
+
const classes = {};
|
|
134
|
+
const verdicts = {};
|
|
135
|
+
let calls = 0;
|
|
136
|
+
// ONE CLASS PER CALL. Sequential, so the wall time is the sum (the post-run phase subtracts it) and the provider's
|
|
137
|
+
// prompt cache sees one stable prefix; the answer is the same bytes in every call.
|
|
138
|
+
for (const c of cands) {
|
|
139
|
+
const q = { id: 'd', kind: 'choice', question: outcomeQuestionOf(c), options: [
|
|
140
|
+
{ id: 'delivered', describe: c.kind === 'named-missing' ? 'the answer names it as missing and asks for it' : c.kind === 'asked-which' ? 'the answer asks which option is meant' : `the answer delivers a ${c.label} (complete, or its full structure with the missing facts named)` },
|
|
141
|
+
{ id: 'missing', describe: c.kind === 'named-missing' ? 'the answer invents it or does not mention it' : c.kind === 'asked-which' ? 'the answer chooses an option or does neither' : `the answer does not deliver a ${c.label}` },
|
|
142
|
+
], notApplicable: 'unknown — the answer cannot be read well enough to tell (empty, cut off, not about this request, or unreadable)' };
|
|
143
|
+
calls++;
|
|
144
|
+
const j = await judgeQuestions(state, [q], port);
|
|
145
|
+
if (j.error !== undefined)
|
|
146
|
+
errors.push(`${c.label}: ${j.error}`);
|
|
147
|
+
const a = j.answers['d'];
|
|
148
|
+
const top = a?.top;
|
|
149
|
+
verdicts[c.iri] = top === 'delivered' || top === 'missing' ? top : 'unknown';
|
|
150
|
+
classes[c.iri] = verdicts[c.iri] === 'unknown' ? 0 : Number((a.distribution['delivered'] ?? 0).toFixed(4));
|
|
151
|
+
}
|
|
152
|
+
// THE REQUEST's question, once: which of the optional classes it asks for (a required one is asked for by construction).
|
|
153
|
+
const optional = cands.filter((c) => !c.required);
|
|
154
|
+
const requested = Object.fromEntries(cands.map((c) => [c.iri, c.required ? 1 : 0]));
|
|
155
|
+
if (optional.length) {
|
|
156
|
+
calls++;
|
|
157
|
+
const rq = await judgeQuestions(`The request:\n${input.request}`, optional.map((c, i) => ({ id: `r${i + 1}`, kind: 'yes-no', statement: `The request asks for a ${c.label}.` })), port);
|
|
158
|
+
if (rq.error !== undefined)
|
|
159
|
+
errors.push(`request: ${rq.error}`);
|
|
160
|
+
optional.forEach((c, i) => { requested[c.iri] = Number((rq.answers[`r${i + 1}`]?.distribution['true'] ?? 0).toFixed(4)); });
|
|
161
|
+
}
|
|
162
|
+
// v3's units: an alternative group is ONE unit (requested = most-asked member, delivered = best member, verdict = the
|
|
163
|
+
// best member's); an ungrouped class is its own unit.
|
|
164
|
+
const byId = new Map();
|
|
165
|
+
for (const c of cands) {
|
|
166
|
+
const id = c.alternative ? `alternative:${c.alternative}` : c.iri;
|
|
167
|
+
const u = byId.get(id) ?? (byId.set(id, { id, members: [], requested: 0, delivered: 0, counted: false, verdict: 'unknown' }).get(id));
|
|
168
|
+
u.members.push(c.iri);
|
|
169
|
+
u.requested = Math.max(u.requested, requested[c.iri]);
|
|
170
|
+
const v = verdicts[c.iri];
|
|
171
|
+
// A group's verdict: delivered if any member was; else missing if any member was read as missing; else unknown.
|
|
172
|
+
if (v === 'delivered' && (u.verdict !== 'delivered' || classes[c.iri] > u.delivered)) {
|
|
173
|
+
u.verdict = 'delivered';
|
|
174
|
+
u.delivered = Math.max(u.delivered, classes[c.iri]);
|
|
175
|
+
}
|
|
176
|
+
else if (v === 'missing' && u.verdict === 'unknown')
|
|
177
|
+
u.verdict = 'missing';
|
|
178
|
+
if (v !== 'unknown')
|
|
179
|
+
u.delivered = Math.max(u.delivered, classes[c.iri]);
|
|
180
|
+
if (c.required)
|
|
181
|
+
u.required = true;
|
|
182
|
+
}
|
|
183
|
+
const units = [...byId.values()];
|
|
184
|
+
let counted = units.filter((u) => u.requested >= 0.5);
|
|
185
|
+
if (!counted.some((u) => !u.required)) {
|
|
186
|
+
const opt = units.filter((u) => !u.required).sort((a, b) => b.requested - a.requested);
|
|
187
|
+
if (opt[0])
|
|
188
|
+
counted = [...counted, opt[0]];
|
|
189
|
+
}
|
|
190
|
+
for (const u of counted)
|
|
191
|
+
u.counted = true;
|
|
192
|
+
const known = counted.filter((u) => u.verdict !== 'unknown');
|
|
193
|
+
const cantTell = counted.length - known.length;
|
|
194
|
+
const vals = known.map((u) => u.delivered);
|
|
195
|
+
return { judge: OUTCOME_PER_CLASS_JUDGE, classes, requested, verdicts, units, score: vals.length ? Number((vals.reduce((a, b) => a + b, 0) / vals.length).toFixed(4)) : 0, counted: known.length, cantTell, calls, ms: Date.now() - t0, ...(errors.length ? { error: errors.join(' | ').slice(0, 300) } : {}) };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=answer-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-quality.js","sourceRoot":"","sources":["../src/answer-quality.ts"],"names":[],"mappings":"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"}
|
package/dist/authority.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ToolObservationV1 } from './tool-invoker.js';
|
|
1
2
|
import type { Intent, PlanStep, ToolSpec } from './types.js';
|
|
2
3
|
import type { StepRiskClass } from '@agenticprimitives/tool-policy';
|
|
3
4
|
/** What the caller presented as its authority. OPAQUE to the loop — it is handed to the verifier and
|
|
@@ -38,6 +39,9 @@ export interface StepAuthorityRequest {
|
|
|
38
39
|
step: ResolvedStep;
|
|
39
40
|
/** Whether this check follows an approval. A verifier may not need to know; a receipt does. */
|
|
40
41
|
afterApproval: boolean;
|
|
42
|
+
/** Spec 408 §2.3 — the digest of the plan this run is executing (`planDigest`), computed by the loop
|
|
43
|
+
* once per admitted plan. A mandate that binds a plan is judged against it on every step. */
|
|
44
|
+
planDigest?: string;
|
|
41
45
|
}
|
|
42
46
|
/** An UNSATISFIED condition attached to the authority. Not a UI prompt. */
|
|
43
47
|
export interface Obligation {
|
|
@@ -195,11 +199,20 @@ export interface ExecutionBindingV1 {
|
|
|
195
199
|
rootPrincipal?: string;
|
|
196
200
|
originatingAgent?: string;
|
|
197
201
|
actingAgent: string;
|
|
202
|
+
/** Spec 397 — the hop came THROUGH A HOST as the person: the registered client and the template whose wire
|
|
203
|
+
* admitted it (`ask-as-me`), or whose standing wire the step's mandate was derived from (`act-as-me`). Ids only. */
|
|
204
|
+
via?: {
|
|
205
|
+
client: string;
|
|
206
|
+
template: string;
|
|
207
|
+
};
|
|
198
208
|
};
|
|
199
209
|
}
|
|
200
210
|
export interface StepReceipt {
|
|
201
211
|
/** Spec 367 §5 — the admitted binding this step ran under. */
|
|
202
212
|
binding?: ExecutionBindingV1;
|
|
213
|
+
/** Spec 421 W2 — per argument of an ACT, whether its value was in her words or only in what the run read (and whether
|
|
214
|
+
* that was untrusted). Evidence for audit and the signing card; no verifier reads it. */
|
|
215
|
+
derivation?: Record<string, import('./derivation.js').ArgDerivationV1>;
|
|
203
216
|
/** Spec 360 — what followed the act, per declared effect. `ok:false` is a disclosure that failed while
|
|
204
217
|
* the act stood: visible evidence, never a reason to unwind the step (the loop isolates the throw). */
|
|
205
218
|
effects?: Array<{
|
|
@@ -250,7 +263,18 @@ export interface StepReceipt {
|
|
|
250
263
|
approvalRecords?: string[];
|
|
251
264
|
idempotencyKey?: string;
|
|
252
265
|
inputDigest?: string;
|
|
266
|
+
/** The step's arguments AS PLANNED (resolved against earlier results only, before names became addresses). A resume
|
|
267
|
+
* compares a replayed step against this: a replay never re-resolves names, so it cannot reproduce `inputDigest` for a
|
|
268
|
+
* step whose argument was a name ("missio nexus") — and refusing it broke every resume past such a step. */
|
|
269
|
+
planArgsDigest?: string;
|
|
253
270
|
outputDigest?: string;
|
|
271
|
+
/** Spec 410 §2 — WHAT THE ADAPTER SAW, beside the output digest: which end committed this and what it can
|
|
272
|
+
* show. `attests` is the one word a stranger reads first; only `confirmed` may be called "verified at commit". */
|
|
273
|
+
observation?: ToolObservationV1;
|
|
274
|
+
attests?: ToolObservationV1['outcome'];
|
|
275
|
+
/** Spec 410 §3 — this attempt found the operation already done and DID NOT ACT; the observation is the
|
|
276
|
+
* reconcile's. A retry after a lost response leaves this, never a second effect. */
|
|
277
|
+
reconciled?: true;
|
|
254
278
|
error?: string;
|
|
255
279
|
/** Spec 350 §3.4 — set when `status === 'suspended'` because the tool asked the person for something: the
|
|
256
280
|
* kind of prompt and, for a signature, what must be signed by whom. Never the answers. */
|
|
@@ -269,6 +293,13 @@ export interface StepReceipt {
|
|
|
269
293
|
version: string;
|
|
270
294
|
commitment: string;
|
|
271
295
|
};
|
|
296
|
+
/** Spec 414 A1 — the SKILL.md contract that governed THIS step (finer than the playbook): canonical id, version
|
|
297
|
+
* and the contract's content digest, as the compiled definition says its tool came from. Grants nothing. */
|
|
298
|
+
skill?: {
|
|
299
|
+
id: string;
|
|
300
|
+
version: string;
|
|
301
|
+
contractDigest: string;
|
|
302
|
+
};
|
|
272
303
|
startedAt: number;
|
|
273
304
|
completedAt: number;
|
|
274
305
|
}
|
|
@@ -287,6 +318,11 @@ export type RunEvent = RunEventStamp & ({
|
|
|
287
318
|
runRef: string;
|
|
288
319
|
intent: Intent;
|
|
289
320
|
presentedRef: string | null;
|
|
321
|
+
work?: {
|
|
322
|
+
endeavorId: string;
|
|
323
|
+
commitmentId?: string;
|
|
324
|
+
planStepId?: string;
|
|
325
|
+
};
|
|
290
326
|
} | {
|
|
291
327
|
type: 'PlanCreated';
|
|
292
328
|
runRef: string;
|
|
@@ -426,6 +462,9 @@ export interface OrchestrationPorts {
|
|
|
426
462
|
/** Spec 367 W1 — judges the plan's SHAPE before any step runs (the verifier judges authority). Absent ⇒
|
|
427
463
|
* every well-formed plan is executed, which is the behaviour every run had before the port existed. */
|
|
428
464
|
planAdmission?: import('./admission.js').PlanAdmission;
|
|
465
|
+
/** Spec 410 §3 — asked before every non-read step whether THIS operation already happened (reconcile → verify →
|
|
466
|
+
* act). Absent ⇒ no reconcile, the behaviour every run had before the port existed. */
|
|
467
|
+
reconcile?: import('./reconcile.js').ReconcilePort;
|
|
429
468
|
events?: RunEventSink;
|
|
430
469
|
}
|
|
431
470
|
//# sourceMappingURL=authority.d.ts.map
|
package/dist/authority.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE;oGACoG;AACpG,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;CACf;AAED;8GAC8G;AAC9G,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B;;sCAEkC;IAClC,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,wFAAwF;IACxF,IAAI,EAAE,aAAa,CAAC;IACpB,6FAA6F;IAC7F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,+FAA+F;IAC/F,aAAa,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AdmissionRule, AdmissionViolation } from './admission.js';
|
|
2
|
+
import type { ToolSpec } from './types.js';
|
|
3
|
+
/** What the ontology says an outcome class entails — the shape `@agenticprimitives/ontology` exports. */
|
|
4
|
+
export interface OutcomeClassView {
|
|
5
|
+
class: string;
|
|
6
|
+
label: string;
|
|
7
|
+
entails: ReadonlyArray<{
|
|
8
|
+
capability: string;
|
|
9
|
+
carries?: readonly string[];
|
|
10
|
+
bound?: string;
|
|
11
|
+
}>;
|
|
12
|
+
bounds: Readonly<Record<string, {
|
|
13
|
+
arg: string;
|
|
14
|
+
kind: 'amount' | 'named';
|
|
15
|
+
}>>;
|
|
16
|
+
/** The words that name this outcome (the ontology's), for `classifyOpenIntent`. */
|
|
17
|
+
words?: readonly string[];
|
|
18
|
+
/** How each bound is read off a sentence (the ontology's). */
|
|
19
|
+
reads?: Readonly<Record<string, {
|
|
20
|
+
kind: 'money';
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'after';
|
|
23
|
+
prepositions: readonly string[];
|
|
24
|
+
}>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Spec 410 §6 — THE ASK'S CLASSIFIER, rendered from the ontology: does this sentence name an OPEN intent of a published
|
|
28
|
+
* outcome class? Matched on the class's own words, whole and case-insensitive; the bounds read the way the class says
|
|
29
|
+
* they are read. Deterministic — the same sentence classifies the same way on every run, so the stated outcome the
|
|
30
|
+
* mandate digests is stable across a resume. Null for every closed intent ("pay alice 10"), which is judged by nothing
|
|
31
|
+
* here. A sentence that names two classes is not classified: one outcome per ask.
|
|
32
|
+
*/
|
|
33
|
+
export declare function classifyOpenIntent(goal: string, classes: ReadonlyArray<OutcomeClassView>): StatedOutcomeV1 | null;
|
|
34
|
+
/** What an open intent states: `intent.constraints.outcome`. */
|
|
35
|
+
export interface StatedOutcomeV1 {
|
|
36
|
+
/** The outcome class IRI or CURIE (`apint:OrganizedGathering`). */
|
|
37
|
+
class: string;
|
|
38
|
+
/** The bounds the sentence stated, by the class's bound keys (`{ budget: 2000, venue: 'the hall' }`). */
|
|
39
|
+
bounds?: Record<string, string | number>;
|
|
40
|
+
}
|
|
41
|
+
export declare function statedOutcomeOf(intent: {
|
|
42
|
+
constraints?: Record<string, unknown>;
|
|
43
|
+
}): StatedOutcomeV1 | null;
|
|
44
|
+
/**
|
|
45
|
+
* The rule. `lookup` resolves an outcome class IRI to what it entails (the ontology's `outcomeClassOf`); a class
|
|
46
|
+
* the ontology does not publish entails NOTHING, so every consequential step under it is refused — a refusal
|
|
47
|
+
* that names the unknown class, never a silent pass.
|
|
48
|
+
*/
|
|
49
|
+
export declare function outcomeConformance(lookup: (classIri: string) => OutcomeClassView | null): AdmissionRule;
|
|
50
|
+
/** For a caller that wants the split the spec names: what stays offered and what was refused. */
|
|
51
|
+
export declare function conformEffects(input: {
|
|
52
|
+
intent: {
|
|
53
|
+
constraints?: Record<string, unknown>;
|
|
54
|
+
};
|
|
55
|
+
plan: {
|
|
56
|
+
steps: Array<{
|
|
57
|
+
toolId: string;
|
|
58
|
+
args: Record<string, unknown>;
|
|
59
|
+
}>;
|
|
60
|
+
};
|
|
61
|
+
tools: ToolSpec[];
|
|
62
|
+
}, lookup: (classIri: string) => OutcomeClassView | null): {
|
|
63
|
+
offered: number[];
|
|
64
|
+
refused: AdmissionViolation[];
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,yGAAyG;AACzG,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5E,mFAAmF;IACnF,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAC;CAC1G;AAyBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,eAAe,GAAG,IAAI,CAajH;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,eAAe,GAAG,IAAI,CAGzG;AASD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,GAAG,aAAa,CAiDvG;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAKtS"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { outcomeClassOf as toolOutcomeClassOf } from './admission.js';
|
|
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;
|
|
17
|
+
}
|
|
18
|
+
/** The words after a preposition, to the next clause: "at the town hall on Friday" → "the town hall". */
|
|
19
|
+
function afterIn(sentence, prepositions) {
|
|
20
|
+
for (const p of prepositions) {
|
|
21
|
+
const m = sentence.match(new RegExp(`\\b${escapeRe(p)}\\s+([^,.;]+?)(?=\\s+(?:on|for|with|under|by|before|after|next|this)\\b|[,.;]|$)`, 'i'));
|
|
22
|
+
if (m?.[1])
|
|
23
|
+
return m[1].trim();
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Spec 410 §6 — THE ASK'S CLASSIFIER, rendered from the ontology: does this sentence name an OPEN intent of a published
|
|
29
|
+
* outcome class? Matched on the class's own words, whole and case-insensitive; the bounds read the way the class says
|
|
30
|
+
* they are read. Deterministic — the same sentence classifies the same way on every run, so the stated outcome the
|
|
31
|
+
* mandate digests is stable across a resume. Null for every closed intent ("pay alice 10"), which is judged by nothing
|
|
32
|
+
* here. A sentence that names two classes is not classified: one outcome per ask.
|
|
33
|
+
*/
|
|
34
|
+
export function classifyOpenIntent(goal, classes) {
|
|
35
|
+
const sentence = String(goal ?? '').trim();
|
|
36
|
+
if (!sentence)
|
|
37
|
+
return null;
|
|
38
|
+
const hits = classes.filter((c) => (c.words ?? []).some((w) => new RegExp(`\\b${escapeRe(w)}\\b`, 'i').test(sentence)));
|
|
39
|
+
if (hits.length !== 1)
|
|
40
|
+
return null;
|
|
41
|
+
const c = hits[0];
|
|
42
|
+
const bounds = {};
|
|
43
|
+
for (const [key, how] of Object.entries(c.reads ?? {})) {
|
|
44
|
+
if (!c.bounds[key])
|
|
45
|
+
continue;
|
|
46
|
+
if (how.kind === 'money') {
|
|
47
|
+
const n = moneyIn(sentence);
|
|
48
|
+
if (n !== null)
|
|
49
|
+
bounds[key] = n;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const v = afterIn(sentence, how.prepositions);
|
|
53
|
+
if (v)
|
|
54
|
+
bounds[key] = v;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { class: c.class, ...(Object.keys(bounds).length ? { bounds } : {}) };
|
|
58
|
+
}
|
|
59
|
+
export function statedOutcomeOf(intent) {
|
|
60
|
+
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;
|
|
62
|
+
}
|
|
63
|
+
const asNumber = (v) => {
|
|
64
|
+
if (typeof v === 'number')
|
|
65
|
+
return Number.isFinite(v) ? v : null;
|
|
66
|
+
if (typeof v === 'string' && /^\s*-?\d+(\.\d+)?\s*$/.test(v))
|
|
67
|
+
return Number(v);
|
|
68
|
+
return null;
|
|
69
|
+
};
|
|
70
|
+
const norm = (v) => String(v ?? '').trim().toLowerCase();
|
|
71
|
+
/**
|
|
72
|
+
* The rule. `lookup` resolves an outcome class IRI to what it entails (the ontology's `outcomeClassOf`); a class
|
|
73
|
+
* the ontology does not publish entails NOTHING, so every consequential step under it is refused — a refusal
|
|
74
|
+
* that names the unknown class, never a silent pass.
|
|
75
|
+
*/
|
|
76
|
+
export function outcomeConformance(lookup) {
|
|
77
|
+
return ({ intent, plan, tools }) => {
|
|
78
|
+
const stated = statedOutcomeOf(intent);
|
|
79
|
+
if (!stated)
|
|
80
|
+
return [];
|
|
81
|
+
const byId = new Map(tools.map((t) => [t.id, t]));
|
|
82
|
+
const oc = lookup(stated.class);
|
|
83
|
+
const violations = [];
|
|
84
|
+
plan.steps.forEach((step, i) => {
|
|
85
|
+
const tool = byId.get(step.toolId);
|
|
86
|
+
if (!tool || !tool.capability || toolOutcomeClassOf(tool) === 'lookup')
|
|
87
|
+
return; // a read entails nothing consequential
|
|
88
|
+
const capId = tool.capability.id;
|
|
89
|
+
if (!oc) {
|
|
90
|
+
violations.push({ code: 'OUTCOME_NOT_ENTAILED', message: `${capId} was proposed under the outcome "${stated.class}", which this substrate does not publish — an outcome nobody modelled entails nothing`, stepIndex: i, toolId: tool.id, recovery: 'refuse' });
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const ent = oc.entails.find((e) => e.capability === capId);
|
|
94
|
+
if (!ent) {
|
|
95
|
+
violations.push({ code: 'OUTCOME_NOT_ENTAILED', message: `${capId} is not something ${oc.label} entails — it was proposed anyway, and is refused before it can be offered for signature`, stepIndex: i, toolId: tool.id, recovery: 'refuse' });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Bounds: the argument the class says this entailment is held to, against what the intent stated.
|
|
99
|
+
if (ent.bound) {
|
|
100
|
+
const b = oc.bounds[ent.bound];
|
|
101
|
+
const statedValue = stated.bounds?.[ent.bound];
|
|
102
|
+
if (b && statedValue !== undefined) {
|
|
103
|
+
const actual = step.args[b.arg];
|
|
104
|
+
if (actual !== undefined && actual !== null && actual !== '') {
|
|
105
|
+
if (b.kind === 'amount') {
|
|
106
|
+
const have = asNumber(actual);
|
|
107
|
+
const limit = asNumber(statedValue);
|
|
108
|
+
if (have === null || limit === null || have > limit)
|
|
109
|
+
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' });
|
|
110
|
+
}
|
|
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
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Carries: what the write's present arguments carry (the tool's declaration) must stay within the entailment.
|
|
118
|
+
if (ent.carries && tool.carries) {
|
|
119
|
+
const allowed = new Set(ent.carries.map(norm));
|
|
120
|
+
for (const [arg, classes] of Object.entries(tool.carries)) {
|
|
121
|
+
const present = step.args[arg];
|
|
122
|
+
if (present === undefined || present === null || present === '')
|
|
123
|
+
continue;
|
|
124
|
+
const outside = classes.filter((c) => !allowed.has(norm(c)));
|
|
125
|
+
if (outside.length)
|
|
126
|
+
violations.push({ code: 'OUTCOME_DISCLOSURE', message: `${capId}: ${arg} would carry ${outside.join(', ')}, which ${oc.label} does not entail disclosing`, stepIndex: i, toolId: tool.id, field: arg, recovery: 'refuse' });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return violations;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/** For a caller that wants the split the spec names: what stays offered and what was refused. */
|
|
134
|
+
export function conformEffects(input, lookup) {
|
|
135
|
+
const rule = outcomeConformance(lookup);
|
|
136
|
+
const refused = rule({ intent: input.intent, plan: input.plan, tools: input.tools });
|
|
137
|
+
const bad = new Set(refused.map((v) => v.stepIndex));
|
|
138
|
+
return { offered: input.plan.steps.map((_, i) => i).filter((i) => !bad.has(i)), refused };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StepObservation } from './types.js';
|
|
2
|
+
export interface ArgDerivationV1 {
|
|
3
|
+
/** The value (or its name part) is in the person's own words. */
|
|
4
|
+
hers: boolean;
|
|
5
|
+
/** Observations the value occurs in, by stepRef (and tool). */
|
|
6
|
+
from: Array<{
|
|
7
|
+
stepRef: string;
|
|
8
|
+
toolId: string;
|
|
9
|
+
untrusted: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
/** The value came ONLY from untrusted content: not in her words, and every source it occurs in is untrusted. */
|
|
12
|
+
untrustedOnly: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
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.
|
|
17
|
+
*/
|
|
18
|
+
export declare function deriveArgs(args: Record<string, unknown>, goal: string, observations: ReadonlyArray<StepObservation>): Record<string, ArgDerivationV1>;
|
|
19
|
+
/** The arguments of a step that came only from untrusted content — the ones her signing card must name. */
|
|
20
|
+
export declare function untrustedArgs(d: Record<string, ArgDerivationV1>): string[];
|
|
21
|
+
//# sourceMappingURL=derivation.d.ts.map
|
|
@@ -0,0 +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;AAQD;;;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"}
|