@agenticprimitives/orchestration 0.0.0-alpha.1 → 0.0.0-alpha.11

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 (114) hide show
  1. package/README.md +2 -0
  2. package/dist/admission.d.ts +127 -0
  3. package/dist/admission.d.ts.map +1 -0
  4. package/dist/admission.js +355 -0
  5. package/dist/admission.js.map +1 -0
  6. package/dist/answer-quality.d.ts +80 -0
  7. package/dist/answer-quality.d.ts.map +1 -0
  8. package/dist/answer-quality.js +97 -0
  9. package/dist/answer-quality.js.map +1 -0
  10. package/dist/artifacts.d.ts +137 -0
  11. package/dist/artifacts.d.ts.map +1 -0
  12. package/dist/artifacts.js +232 -0
  13. package/dist/artifacts.js.map +1 -0
  14. package/dist/authority.d.ts +465 -0
  15. package/dist/authority.d.ts.map +1 -0
  16. package/dist/authority.js +2 -0
  17. package/dist/authority.js.map +1 -0
  18. package/dist/conformance.d.ts +66 -0
  19. package/dist/conformance.d.ts.map +1 -0
  20. package/dist/conformance.js +140 -0
  21. package/dist/conformance.js.map +1 -0
  22. package/dist/derivation.d.ts +21 -0
  23. package/dist/derivation.d.ts.map +1 -0
  24. package/dist/derivation.js +31 -0
  25. package/dist/derivation.js.map +1 -0
  26. package/dist/durable.d.ts +44 -0
  27. package/dist/durable.d.ts.map +1 -0
  28. package/dist/durable.js +15 -0
  29. package/dist/durable.js.map +1 -0
  30. package/dist/export-port.d.ts +13 -0
  31. package/dist/export-port.d.ts.map +1 -0
  32. package/dist/export-port.js +2 -0
  33. package/dist/export-port.js.map +1 -0
  34. package/dist/flow-trace.d.ts +105 -0
  35. package/dist/flow-trace.d.ts.map +1 -0
  36. package/dist/flow-trace.js +60 -0
  37. package/dist/flow-trace.js.map +1 -0
  38. package/dist/index.d.ts +37 -4
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +44 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/input.d.ts +165 -0
  43. package/dist/input.d.ts.map +1 -0
  44. package/dist/input.js +33 -0
  45. package/dist/input.js.map +1 -0
  46. package/dist/intent.d.ts +37 -0
  47. package/dist/intent.d.ts.map +1 -0
  48. package/dist/intent.js +46 -0
  49. package/dist/intent.js.map +1 -0
  50. package/dist/judgment.d.ts +131 -0
  51. package/dist/judgment.d.ts.map +1 -0
  52. package/dist/judgment.js +249 -0
  53. package/dist/judgment.js.map +1 -0
  54. package/dist/loop.d.ts +155 -6
  55. package/dist/loop.d.ts.map +1 -1
  56. package/dist/loop.js +905 -32
  57. package/dist/loop.js.map +1 -1
  58. package/dist/metrics.d.ts +35 -0
  59. package/dist/metrics.d.ts.map +1 -0
  60. package/dist/metrics.js +98 -0
  61. package/dist/metrics.js.map +1 -0
  62. package/dist/outcome.d.ts +223 -0
  63. package/dist/outcome.d.ts.map +1 -0
  64. package/dist/outcome.js +325 -0
  65. package/dist/outcome.js.map +1 -0
  66. package/dist/plan-digest.d.ts +6 -0
  67. package/dist/plan-digest.d.ts.map +1 -0
  68. package/dist/plan-digest.js +35 -0
  69. package/dist/plan-digest.js.map +1 -0
  70. package/dist/planner-wire.d.ts +11 -0
  71. package/dist/planner-wire.d.ts.map +1 -0
  72. package/dist/planner-wire.js +53 -0
  73. package/dist/planner-wire.js.map +1 -0
  74. package/dist/planner.d.ts +51 -0
  75. package/dist/planner.d.ts.map +1 -1
  76. package/dist/planner.js +74 -0
  77. package/dist/planner.js.map +1 -1
  78. package/dist/reconcile.d.ts +41 -0
  79. package/dist/reconcile.d.ts.map +1 -0
  80. package/dist/reconcile.js +20 -0
  81. package/dist/reconcile.js.map +1 -0
  82. package/dist/record.d.ts +238 -0
  83. package/dist/record.d.ts.map +1 -0
  84. package/dist/record.js +116 -0
  85. package/dist/record.js.map +1 -0
  86. package/dist/regression.d.ts +109 -0
  87. package/dist/regression.d.ts.map +1 -0
  88. package/dist/regression.js +97 -0
  89. package/dist/regression.js.map +1 -0
  90. package/dist/selection.d.ts +334 -0
  91. package/dist/selection.d.ts.map +1 -0
  92. package/dist/selection.js +481 -0
  93. package/dist/selection.js.map +1 -0
  94. package/dist/spans.d.ts +262 -0
  95. package/dist/spans.d.ts.map +1 -0
  96. package/dist/spans.js +589 -0
  97. package/dist/spans.js.map +1 -0
  98. package/dist/tool-invoker.d.ts +61 -3
  99. package/dist/tool-invoker.d.ts.map +1 -1
  100. package/dist/tool-invoker.js +26 -1
  101. package/dist/tool-invoker.js.map +1 -1
  102. package/dist/trace-context.d.ts +26 -0
  103. package/dist/trace-context.d.ts.map +1 -0
  104. package/dist/trace-context.js +59 -0
  105. package/dist/trace-context.js.map +1 -0
  106. package/dist/trace-facts.d.ts +84 -0
  107. package/dist/trace-facts.d.ts.map +1 -0
  108. package/dist/trace-facts.js +82 -0
  109. package/dist/trace-facts.js.map +1 -0
  110. package/dist/types.d.ts +265 -3
  111. package/dist/types.d.ts.map +1 -1
  112. package/dist/types.js +4 -0
  113. package/dist/types.js.map +1 -1
  114. package/package.json +19 -7
@@ -0,0 +1,481 @@
1
+ // SKILL SELECTION BY DECLARED VOCABULARY — spec 415 A4 (`skill-selection/rules`), the first approach that can say NO.
2
+ //
3
+ // The model planner selects among instruction skills by their descriptions and, measured on the sandbox organization
4
+ // (2026-09-26), is nearly perfect when the ask IS one of the skills and fires anyway when it is merely adjacent — 10 of
5
+ // 12 external distractors, 5 of 12 development negatives. A NOT-for clause in the descriptions moved that a little.
6
+ // This selector reads what the contract DECLARES instead of prose: the `utterances` a skill's author wrote (spec 367)
7
+ // — `says` sentences that are this skill, `isNot` sentences that are not — and scores the ask against them
8
+ // deterministically. It chooses only with a margin; otherwise it HOLDS, and a hold is a selection of nothing, never a
9
+ // guess. The same ask, the same declarations, the same answer, every time (J5).
10
+ //
11
+ // Behaviour, never authority: what is chosen still runs under every gate; what is held answers with what the skills do.
12
+ // Cluster-level grounding (the domain ontology's classes per skill) is the next increment: the registry models classes
13
+ // per archetype today, not per skill, so the declarations are the vocabulary this reads.
14
+ import { inferIntent, renderReading, skillCard } from './intent.js';
15
+ import { logprobChoiceDecisionModel } from './judgment.js';
16
+ import { judgeQuestions, judgeQuestionsAveraged, applyDecisionRule, explainAnswer, structuredCallDecisionModel, NOT_APPLICABLE } from './judgment.js';
17
+ export const DEFAULT_DECLARED_SELECTION = { threshold: 0.3, margin: 0.08 };
18
+ const STOP = new Set(['a', 'an', 'the', 'and', 'or', 'of', 'to', 'for', 'in', 'on', 'at', 'by', 'with', 'from', 'as', 'is', 'are', 'be', 'it', 'its', 'this', 'that', 'these', 'those', 'we', 'our', 'us', 'i', 'my', 'me', 'you', 'your', 'they', 'their', 'them', 'he', 'she', 'his', 'her', 'do', 'does', 'did', 'can', 'could', 'would', 'should', 'will', 'need', 'needs', 'want', 'wants', 'help', 'please', 'so', 'if', 'but', 'not', 'no', 'yes', 'what', 'which', 'who', 'how', 'when', 'where', 'than', 'then', 'there', 'here', 'have', 'has', 'had', 'get', 'got', 'one', 'some', 'any', 'all', 'about', 'into', 'out', 'up', 'down', 'over', 'before', 'after', 'just', 'also', 'like', 'more', 'most', 'very', 'really', 'give', 'make', 'put', 'let', 'go', 'know', 'think', 'thing', 'things', 'something', 'anything', 'everything', 'way', 'ways', 'im', 'ive', 'id', 'dont', 'cant', 'wont', 'isnt', 'arent']);
19
+ /** A crude, deterministic stem: enough to make "assessing" meet "assessment" and "grants" meet "grant". */
20
+ const stem = (w) => {
21
+ let s = w;
22
+ for (const suf of ['ations', 'ation', 'ments', 'ment', 'ities', 'ity', 'ness', 'ings', 'ing', 'ers', 'er', 'ies', 'ied', 'ed', 'es', 's', 'ly']) {
23
+ if (s.length <= suf.length + 3 || !s.endsWith(suf))
24
+ continue;
25
+ // "-es" is a plural marker only after a sibilant (boxes, churches); "deadlines" loses its "s", not its "es".
26
+ if (suf === 'es' && !/(ss|sh|ch|x|z)es$/.test(s))
27
+ continue;
28
+ s = s.slice(0, -suf.length);
29
+ break;
30
+ }
31
+ return s;
32
+ };
33
+ /** The content tokens of a sentence: lower-cased words, stop words dropped, stemmed. */
34
+ export function tokensOf(text) {
35
+ return text.toLowerCase().replace(/[’']/g, '').split(/[^a-z0-9]+/).filter((w) => w.length > 1 && !STOP.has(w)).map(stem);
36
+ }
37
+ const bigrams = (t) => new Set(t.slice(1).map((w, i) => `${t[i]} ${w}`));
38
+ /** How much of an EXAMPLE the ask covers: its unigram overlap over the example's size, bigrams counted double. */
39
+ export function overlap(askTokens, example) {
40
+ const ex = tokensOf(example);
41
+ if (!ex.length)
42
+ return 0;
43
+ const askSet = new Set(askTokens);
44
+ const uni = ex.filter((w) => askSet.has(w)).length;
45
+ const askBi = bigrams(askTokens);
46
+ const bi = [...bigrams(ex)].filter((b) => askBi.has(b)).length;
47
+ return Math.min(1, (uni + 2 * bi) / (ex.length + 2 * Math.max(0, ex.length - 1)) * 2);
48
+ }
49
+ /**
50
+ * Select one candidate by its declared utterances, or hold. For each candidate: the best overlap with a `says`
51
+ * example is its positive score, the best overlap with an `isNot` example its negative score, net = positive −
52
+ * negative. The top candidate is chosen only when net ≥ threshold, positive > negative, and it leads the runner-up
53
+ * by the margin; each failure names its hold. Ties are broken by id so the choice is stable.
54
+ */
55
+ export function selectByDeclaredUtterances(ask, candidates, params = {}) {
56
+ const p = { ...DEFAULT_DECLARED_SELECTION, ...params };
57
+ const askTokens = tokensOf(ask);
58
+ const scored = candidates.map((c) => {
59
+ const pos = Math.max(0, ...c.utterances.filter((u) => !u.isNot).map((u) => overlap(askTokens, u.says)));
60
+ const neg = Math.max(0, ...c.utterances.filter((u) => u.isNot).map((u) => overlap(askTokens, u.says)));
61
+ return { id: c.id, pos, neg, net: pos - neg };
62
+ }).sort((a, b) => b.net - a.net || a.id.localeCompare(b.id));
63
+ const scores = Object.fromEntries(scored.map((s) => [s.id, Number(s.net.toFixed(4))]));
64
+ const top = scored[0];
65
+ const runnerUp = scored[1];
66
+ const rejected = runnerUp && runnerUp.net > 0 ? [runnerUp.id] : [];
67
+ if (!top)
68
+ return { chose: null, hold: 'no-candidate', rejected, scores, params: p };
69
+ // The candidate the ask most RESEMBLES decides the is-not hold: when its own declared "not this" sentences cover the
70
+ // ask at least as well as its "this" sentences, the ask is the adjacent thing, whatever the net ranking says.
71
+ const nearest = [...scored].sort((a, b) => b.pos - a.pos || a.id.localeCompare(b.id))[0];
72
+ if (nearest.neg > 0 && nearest.neg >= nearest.pos)
73
+ return { chose: null, hold: 'is-not', rejected: [nearest.id, ...rejected.filter((r) => r !== nearest.id)], scores, params: p };
74
+ if (top.net < p.threshold)
75
+ return { chose: null, hold: 'below-threshold', rejected: [top.id, ...rejected.filter((r) => r !== top.id)], scores, params: p };
76
+ if (runnerUp && top.net - runnerUp.net < p.margin)
77
+ return { chose: null, hold: 'no-margin', rejected: [top.id, runnerUp.id], scores, params: p };
78
+ return { chose: top.id, rejected, scores, params: p };
79
+ }
80
+ /** Ground the ask in the lexicon: the classes one of whose terms occurs in it (exactly), with the term. The domain lexicon
81
+ * when given (every class, covered or not); otherwise the classes the candidates cover or exclude. */
82
+ export function groundInLexicon(ask, candidates, lexicon) {
83
+ const askSet = new Set(tokensOf(ask));
84
+ const pool = lexicon?.length ? [...lexicon] : candidates.flatMap((c) => [...c.covers, ...(c.excludes ?? [])]);
85
+ const out = new Map();
86
+ for (const k of pool) {
87
+ if (out.has(k.iri))
88
+ continue;
89
+ for (const term of k.terms?.length ? k.terms : [k.label]) {
90
+ const toks = tokensOf(term);
91
+ if (toks.length && toks.every((t) => askSet.has(t))) {
92
+ out.set(k.iri, { iri: k.iri, term });
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ return [...out.values()].sort((a, b) => a.iri.localeCompare(b.iri));
98
+ }
99
+ /** THE DECISION, from grounded classes alone — pure, so a gate can re-derive every recorded decision from the grounding
100
+ * on the trace without the ask's words. Coverage → exclusion → (neighbourhood only when nothing is covered directly). */
101
+ export function decideFromGrounding(groundedIris, candidates, lexicon) {
102
+ if (!candidates.length)
103
+ return { chose: null, hold: 'no-candidate', survivors: [], because: {}, excluded: {} };
104
+ const g = new Set(groundedIris);
105
+ const cover = (classes) => {
106
+ const because = {};
107
+ for (const c of candidates) {
108
+ const hit = c.covers.filter((k) => classes.has(k.iri)).map((k) => k.iri).sort();
109
+ if (hit.length)
110
+ because[c.id] = hit;
111
+ }
112
+ return because;
113
+ };
114
+ let because = cover(g);
115
+ let via = Object.keys(because).length ? 'direct' : undefined;
116
+ if (!via && lexicon?.length && g.size) {
117
+ // The neighbourhood: every class sharing a semantic cluster with a grounded class.
118
+ const clustersOf = new Map(lexicon.map((e) => [e.iri, e.clusters]));
119
+ const near = new Set();
120
+ const groundedClusters = new Set([...g].flatMap((iri) => clustersOf.get(iri) ?? []));
121
+ for (const e of lexicon)
122
+ if (e.clusters.some((c) => groundedClusters.has(c)))
123
+ near.add(e.iri);
124
+ because = cover(near);
125
+ if (Object.keys(because).length)
126
+ via = 'neighbourhood';
127
+ }
128
+ const excluded = {};
129
+ for (const c of candidates) {
130
+ const hit = (c.excludes ?? []).filter((k) => g.has(k.iri)).map((k) => k.iri).sort();
131
+ if (hit.length && because[c.id]) {
132
+ excluded[c.id] = hit;
133
+ delete because[c.id];
134
+ }
135
+ }
136
+ const survivors = Object.keys(because).sort();
137
+ const base = { survivors, because, excluded, ...(via ? { via } : {}) };
138
+ if (!survivors.length)
139
+ return { chose: null, hold: Object.keys(excluded).length ? 'excluded' : 'no-grounding', ...base };
140
+ if (survivors.length > 1)
141
+ return { chose: null, hold: 'ambiguous', ...base };
142
+ return { chose: survivors[0], ...base };
143
+ }
144
+ export function selectByOntology(ask, candidates, lexicon) {
145
+ const grounded = groundInLexicon(ask, candidates, lexicon);
146
+ return { ...decideFromGrounding(grounded.map((x) => x.iri), candidates, lexicon), grounded };
147
+ }
148
+ /** The selection outcomes the criterion can name: skills and `none` — "ask the person" and "needs several" fold into none. */
149
+ export function foldSelectionAbstentions(dist) {
150
+ const out = {};
151
+ for (const [k, v] of Object.entries(dist)) {
152
+ const f = k === NEEDS_CLARIFICATION || k === NEEDS_SEVERAL ? 'none' : k;
153
+ out[f] = (out[f] ?? 0) + v;
154
+ }
155
+ return out;
156
+ }
157
+ /** Temperature scaling of a (folded) distribution: p_i^(1/T), renormalised. T > 1 softens, T < 1 sharpens. */
158
+ export function calibrateByTemperature(dist, temperature) {
159
+ const folded = foldSelectionAbstentions(dist);
160
+ const EPS = 1e-6;
161
+ const w = Object.fromEntries(Object.entries(folded).map(([k, v]) => [k, Math.pow(Math.max(v, EPS), 1 / temperature)]));
162
+ const z = Object.values(w).reduce((a, b) => a + b, 0);
163
+ return Object.fromEntries(Object.entries(w).map(([k, v]) => [k, v / z]));
164
+ }
165
+ /** THE CONFORMAL SET: every outcome whose calibrated probability is at least 1 − q̂, most likely first. With q̂ fitted at
166
+ * level alpha on exchangeable labelled runs, the set contains the right outcome with probability ≥ 1 − alpha. */
167
+ export function conformalSetOf(dist, acceptance) {
168
+ const calibrated = calibrateByTemperature(dist, acceptance.temperature);
169
+ const threshold = 1 - acceptance.qhat;
170
+ const set = Object.entries(calibrated).filter(([, v]) => v >= threshold).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([k]) => k);
171
+ return { calibrated, set, threshold };
172
+ }
173
+ export const DEFAULT_JUDGMENT_SELECTION = { floor: 0.5, margin: 0.15, fitFloor: 0.5, permutations: 2, privateReasoning: true };
174
+ /** v5 (2026-09-27, spec 416 W2): the skill choice gains "ask the person" and "needs several skills"; every candidate
175
+ * gets a pointwise yes-no FIT question built from its covered and excluded classes (the ontology's distinction, judged
176
+ * for meaning — the veto by word match is retired, 416 §4a); options are shuffled under neutral ids and K calls are
177
+ * averaged; the model may reason privately first. v4: one choice + the class question, numbers only, one call. */
178
+ export const SELECTION_JUDGE = { name: 'ap.skill-selection-judge.v5', kind: 'model' };
179
+ /** The fast profile: one call, one question over ontology cards and the typed reading, cards as a cacheable prefix
180
+ * (fast.v2, 2026-09-27; v5-fast listed the full descriptions and put the request first). Its own name (J5). */
181
+ export const SELECTION_JUDGE_FAST = { name: 'ap.skill-selection-judge.fast.v2', kind: 'model' };
182
+ /** Spec 418 — fast.v3: the question says a request missing information a skill needs is still that skill's (it asks). */
183
+ export const SELECTION_JUDGE_FAST_V3 = { name: 'ap.skill-selection-judge.fast.v3', kind: 'model' };
184
+ const FAST_V3_QUESTION = 'Which ONE offered skill should handle this request? A request that lacks information the skill needs (facts, figures, a meeting, a system) is still that skill\'s — the skill asks for what is missing; do not choose "none" for that reason.';
185
+ /** The fast question answered by one letter's log-probabilities (no tool, one output token). */
186
+ export const SELECTION_JUDGE_LOGPROB = { name: 'ap.skill-selection-judge.logprob.v1', kind: 'model' };
187
+ /** The choice's outcomes that are not skills: both abstain, each for its own reason. */
188
+ export const NEEDS_CLARIFICATION = 'clarify';
189
+ export const NEEDS_SEVERAL = 'several';
190
+ export const OUTSIDE_DOMAIN = 'outside-domain';
191
+ /** What "none" means to the judge — the outcome that keeps a skill from answering what it was not written for. */
192
+ const NONE_FITS = 'No offered skill fits: the request is out of scope, merely adjacent to a skill, or too small or personal for any of them.';
193
+ const CLARIFY_OUTCOME = 'The request could reasonably mean what two or more of these skills do; the person should be asked which.';
194
+ const SEVERAL_OUTCOME = 'The request needs two or more of these skills, one after another — it is a plan, not one skill.';
195
+ /** The pointwise FIT statement for one skill: what it produces, and what it is not for — the ontology's words. */
196
+ function fitStatement(c) {
197
+ const covers = (c.covers ?? []).map((k) => k.label).join(', ');
198
+ const excludes = (c.excludes ?? []).map((k) => k.label).join(', ');
199
+ return `This request asks for what this skill produces${covers ? ` (${covers})` : ''}${excludes ? `, and not for ${excludes}` : ''}. The skill: ${c.description}`;
200
+ }
201
+ export async function selectByJudgment(ask, candidates, call, params = {}, ctx = {}) {
202
+ const p = { ...DEFAULT_JUDGMENT_SELECTION, ...params };
203
+ const ids = candidates.map((c) => c.id);
204
+ const base = { offered: ids, judge: SELECTION_JUDGE, params: p };
205
+ if (!ids.length)
206
+ return { chose: null, hold: 'no-candidate', rejected: [], distribution: {}, ...base };
207
+ if (!call)
208
+ return { chose: null, hold: 'no-judge', rejected: [], distribution: {}, ...base };
209
+ const classes = new Map();
210
+ for (const c of candidates)
211
+ for (const k of c.covers ?? [])
212
+ if (!classes.has(k.iri))
213
+ classes.set(k.iri, k.label);
214
+ // Typed questions about one state (the request), asked together:
215
+ // skill choice over the skills + "ask the person" + "needs several" + n/a (none);
216
+ // fit:<id> per skill, yes-no: it asks for what this skill produces and not for what it excludes (pointwise — all
217
+ // can be low, so a poor slate cannot manufacture a winner);
218
+ // requests choice over the domain classes + n/a (the typed intent, recorded; never narrows).
219
+ const fitId = (id) => `fit:${id}`;
220
+ if (p.profile === 'fast' || p.profile === 'logprob')
221
+ return selectByFastJudgment(ask, candidates, call, p, base, ctx);
222
+ const questions = [
223
+ { id: 'skill', kind: 'choice', question: 'Which ONE offered skill should handle this request?', options: candidates.map((c) => ({ id: c.id, describe: c.description })),
224
+ alsoOutcomes: [{ id: NEEDS_CLARIFICATION, describe: CLARIFY_OUTCOME }, { id: NEEDS_SEVERAL, describe: SEVERAL_OUTCOME }], notApplicable: NONE_FITS },
225
+ ...candidates.map((c) => ({ id: fitId(c.id), kind: 'yes-no', statement: fitStatement(c) })),
226
+ ...(classes.size ? [{ id: 'requests', kind: 'choice', question: 'Which ONE domain class does the request ask FOR (the thing it wants produced or done)?', options: [...classes.entries()].map(([iri, label]) => ({ id: iri, describe: label })), notApplicable: 'The request asks for nothing in this domain.' }] : []),
227
+ ];
228
+ const j = await judgeQuestionsAveraged(`Request:\n${ask}`, questions, structuredCallDecisionModel(call, { name: SELECTION_JUDGE.name, privateReasoning: p.privateReasoning }), { permutations: p.permutations });
229
+ if (j.error !== undefined)
230
+ return { chose: null, hold: 'judge-error', error: j.error, rejected: [], distribution: {}, permutations: j.permutations, ...base };
231
+ const a = j.answers['skill'];
232
+ if (!a)
233
+ return { chose: null, hold: 'malformed', ...(j.received?.['skill'] ? { received: j.received['skill'] } : {}), rejected: [], distribution: {}, permutations: j.permutations, ...base };
234
+ // The distribution in the selection's vocabulary: n/a is "none" (the gates and the Lab read `none`); `clarify` and
235
+ // `several` keep their names (the gates count them as abstentions).
236
+ const distribution = Object.fromEntries(Object.entries(a.distribution).map(([k, v]) => [k === NOT_APPLICABLE ? 'none' : k, v]));
237
+ const fit = Object.fromEntries(candidates.flatMap((c) => { const f = j.answers[fitId(c.id)]; return f ? [[c.id, f.distribution['true'] ?? 0]] : []; }));
238
+ const rq = j.answers['requests'];
239
+ const intent = rq ? { requests: rq.top === NOT_APPLICABLE ? OUTSIDE_DOMAIN : rq.top, about: [] } : undefined;
240
+ const label = (o) => (o === NOT_APPLICABLE ? 'none' : o);
241
+ const r = { distribution, fit, permutations: j.permutations, ...(intent ? { intent } : {}), reason: explainAnswer(a, label), ...base };
242
+ const ranked = Object.entries(distribution).sort((x, y) => y[1] - x[1] || x[0].localeCompare(y[0]));
243
+ const skillsRanked = ranked.filter(([k]) => ids.includes(k));
244
+ const [topId] = ranked[0];
245
+ const runnerUp = skillsRanked.find(([k]) => k !== topId);
246
+ if (p.acceptance) {
247
+ // CONFORMAL ACCEPTANCE (W3): one skill in the set routes to it (its fit still has to agree); `none` alone declines;
248
+ // several outcomes in the set ask the person among exactly those; an empty set declines.
249
+ const cs = conformalSetOf(distribution, p.acceptance);
250
+ const predictionSet = { set: cs.set, threshold: Number(cs.threshold.toFixed(4)), mapDigest: p.acceptance.mapDigest };
251
+ const rc = { ...r, predictionSet };
252
+ if (cs.set.length === 0)
253
+ return { chose: null, hold: 'empty-set', rejected: skillsRanked.slice(0, 1).map(([k]) => k), ...rc };
254
+ if (cs.set.length > 1)
255
+ return { chose: null, hold: 'needs-clarification', rejected: cs.set.filter((k) => ids.includes(k)), ...rc };
256
+ const only = cs.set[0];
257
+ if (only === 'none')
258
+ return { chose: null, hold: 'none-fits', rejected: skillsRanked.filter(([, v]) => v > 0).slice(0, 1).map(([k]) => k), ...rc };
259
+ const withFit = `${explainAnswer(a, label)} Its fit: ${Math.round((fit[only] ?? 0) * 100)}%.`;
260
+ if ((fit[only] ?? 0) < p.fitFloor)
261
+ return { chose: null, hold: 'not-a-fit', rejected: [only], ...rc, reason: withFit };
262
+ return { chose: only, rejected: runnerUp && runnerUp[0] !== only && runnerUp[1] > 0 ? [runnerUp[0]] : [], ...rc, reason: withFit };
263
+ }
264
+ if (topId === NEEDS_CLARIFICATION)
265
+ return { chose: null, hold: 'needs-clarification', rejected: skillsRanked.slice(0, 2).map(([k]) => k), ...r };
266
+ if (topId === NEEDS_SEVERAL)
267
+ return { chose: null, hold: 'needs-several', rejected: skillsRanked.slice(0, 2).map(([k]) => k), ...r };
268
+ const d = applyDecisionRule(a, p);
269
+ if (d.decided !== null) {
270
+ // The judged veto: the chosen skill's own fit question must agree that the request is what the skill is for.
271
+ const withFit = `${explainAnswer(a, label)} Its fit: ${Math.round((fit[d.decided] ?? 0) * 100)}%.`;
272
+ if ((fit[d.decided] ?? 0) < p.fitFloor)
273
+ return { chose: null, hold: 'not-a-fit', rejected: [d.decided], ...r, reason: withFit };
274
+ return { chose: d.decided, rejected: runnerUp && runnerUp[1] > 0 ? [runnerUp[0]] : [], ...r, reason: withFit };
275
+ }
276
+ if (d.because === 'not-applicable')
277
+ return { chose: null, hold: 'none-fits', rejected: skillsRanked.filter(([, v]) => v > 0).slice(0, 1).map(([k]) => k), ...r };
278
+ if (d.because === 'unreadable')
279
+ return { chose: null, hold: 'malformed', rejected: [], distribution: {}, ...base };
280
+ return { chose: null, hold: d.because, rejected: skillsRanked.slice(0, 2).map(([k]) => k), ...r };
281
+ }
282
+ /** The FAST profile: one structured call, one choice (the skills + none), numbers only; the floor/margin rule decides. */
283
+ async function selectByFastJudgment(ask, candidates, call, p, base, ctx) {
284
+ const ids = candidates.map((c) => c.id);
285
+ // The TYPED READING (416 §4f): the request in the ontology's terms + what is known of the asker; the skills as cards in
286
+ // the same terms. The cards are the stable prefix (cacheable); the reading is the state, last.
287
+ const reading = inferIntent(ask, candidates.map((c) => ({ id: c.id, covers: c.covers ?? [], ...(c.excludes ? { excludes: c.excludes } : {}) })), ctx.lexicon, ctx.asker);
288
+ const labels = new Map([...(ctx.lexicon ?? []).map((e) => [e.iri, e.label]), ...candidates.flatMap((c) => [...(c.covers ?? []), ...(c.excludes ?? [])].map((k) => [k.iri, k.label]))]);
289
+ const labelOf = (iri) => labels.get(iri) ?? iri.split('#').pop() ?? iri;
290
+ const v3 = p.fastVersion === 'v3';
291
+ const q = { id: 'skill', kind: 'choice', question: v3 ? FAST_V3_QUESTION : 'Which ONE offered skill should handle this request?', options: candidates.map((c) => ({ id: c.id, describe: skillCard(c) })), notApplicable: NONE_FITS };
292
+ // `logprob`: the same question and reading, answered by one letter's log-probabilities instead of written numbers.
293
+ const logprob = p.profile === 'logprob';
294
+ if (logprob && !ctx.choose)
295
+ return { chose: null, hold: 'no-judge', rejected: [], distribution: {}, ...base, judge: SELECTION_JUDGE_LOGPROB };
296
+ const port = logprob ? logprobChoiceDecisionModel(ctx.choose, { name: SELECTION_JUDGE_LOGPROB.name }) : structuredCallDecisionModel(call, { name: (v3 ? SELECTION_JUDGE_FAST_V3 : SELECTION_JUDGE_FAST).name, stablePrefix: true });
297
+ // Spec 418 — two-sample agreement: a second, independent sample in parallel; disagreement between two skills is a clarify.
298
+ const samples = !logprob && (p.samples ?? 1) > 1 ? p.samples : 1;
299
+ const all = await Promise.all(Array.from({ length: samples }, () => judgeQuestions(renderReading(ask, reading, labelOf), [q], port)));
300
+ let j = all[0];
301
+ const others = all.slice(1).filter((o) => o.error === undefined);
302
+ // Borderline: one more sample, and the MEAN of the two distributions is the answer the rule reads.
303
+ let borderline;
304
+ const a0 = j.answers['skill'];
305
+ if (samples === 1 && p.borderline && a0 && j.error === undefined && a0.confidence >= p.borderline[0] && a0.confidence <= p.borderline[1]) {
306
+ const j2 = await judgeQuestions(renderReading(ask, reading, labelOf), [q], port);
307
+ const a2 = j2.answers['skill'];
308
+ borderline = { first: a0.confidence, ...(a2 ? { second: a2.confidence } : {}) };
309
+ if (a2 && j2.error === undefined) {
310
+ const keys = new Set([...Object.keys(a0.distribution), ...Object.keys(a2.distribution)]);
311
+ const dist = Object.fromEntries([...keys].map((k) => [k, ((a0.distribution[k] ?? 0) + (a2.distribution[k] ?? 0)) / 2]));
312
+ const ranked = Object.entries(dist).sort((x, y) => y[1] - x[1]);
313
+ j = { ...j, answers: { ...j.answers, skill: { ...a0, distribution: dist, top: ranked[0][0], confidence: ranked[0][1], lead: ranked[0][1] - (ranked[1]?.[1] ?? 0) } } };
314
+ }
315
+ }
316
+ const fb = { ...base, judge: logprob ? SELECTION_JUDGE_LOGPROB : v3 ? SELECTION_JUDGE_FAST_V3 : SELECTION_JUDGE_FAST, reading: { names: reading.names.map((g) => g.iri), near: reading.near.length, ...(reading.asker?.relation ? { relation: reading.asker.relation } : {}), ...(reading.asker?.recentSkills?.length ? { recentSkills: reading.asker.recentSkills.map((x) => x.id) } : {}), ...(reading.asker?.memoryTags?.length ? { memoryTags: reading.asker.memoryTags.length } : {}) } };
317
+ if (j.error !== undefined)
318
+ return { chose: null, hold: 'judge-error', error: j.error, rejected: [], distribution: {}, ...fb };
319
+ const a = j.answers['skill'];
320
+ if (!a)
321
+ return { chose: null, hold: 'malformed', ...(j.received?.['skill'] ? { received: j.received['skill'] } : {}), rejected: [], distribution: {}, ...fb };
322
+ const distribution = Object.fromEntries(Object.entries(a.distribution).map(([k, v]) => [k === NOT_APPLICABLE ? 'none' : k, v]));
323
+ const label = (o) => (o === NOT_APPLICABLE ? 'none' : o);
324
+ const r = { distribution, reason: explainAnswer(a, label), ...fb, ...(borderline ? { borderline } : {}) };
325
+ const skillsRanked = Object.entries(distribution).filter(([k]) => ids.includes(k)).sort((x, y) => y[1] - x[1] || x[0].localeCompare(y[0]));
326
+ const d = applyDecisionRule(a, p);
327
+ if (samples > 1) {
328
+ const tops = [a.top, ...others.map((o) => o.answers['skill']?.top ?? null)].map((t) => (t === NOT_APPLICABLE ? 'none' : t));
329
+ const skillTops = [...new Set(tops.filter((t) => !!t && ids.includes(t)))];
330
+ const agreement = { samples, tops, agreed: new Set(tops).size === 1 };
331
+ if (skillTops.length > 1)
332
+ return { chose: null, hold: 'needs-clarification', rejected: skillTops.slice(0, 2), ...r, agreement };
333
+ if (!agreement.agreed && d.decided !== null)
334
+ return { chose: null, hold: 'no-margin', rejected: [d.decided], ...r, agreement };
335
+ if (d.decided !== null) {
336
+ const ru = skillsRanked.find(([k]) => k !== d.decided);
337
+ return { chose: d.decided, rejected: ru && ru[1] > 0 ? [ru[0]] : [], ...r, agreement };
338
+ }
339
+ }
340
+ if (d.decided !== null) {
341
+ const ru = skillsRanked.find(([k]) => k !== d.decided);
342
+ return { chose: d.decided, rejected: ru && ru[1] > 0 ? [ru[0]] : [], ...r };
343
+ }
344
+ // Split between two skills: ask which, rather than decline (a declined ask reaches the planner without the skills).
345
+ if (p.splitToClarify !== undefined && (d.because === 'below-floor' || d.because === 'no-margin') && skillsRanked.length >= 2 && skillsRanked[0][1] + skillsRanked[1][1] >= p.splitToClarify) {
346
+ return { chose: null, hold: 'needs-clarification', rejected: [skillsRanked[0][0], skillsRanked[1][0]], ...r };
347
+ }
348
+ if (d.because === 'not-applicable')
349
+ return { chose: null, hold: 'none-fits', rejected: skillsRanked.filter(([, v]) => v > 0).slice(0, 1).map(([k]) => k), ...r };
350
+ if (d.because === 'unreadable')
351
+ return { chose: null, hold: 'malformed', rejected: [], distribution: {}, ...fb };
352
+ return { chose: null, hold: d.because, rejected: skillsRanked.slice(0, 2).map(([k]) => k), ...r };
353
+ }
354
+ export async function selectByOntologyFirst(ask, candidates, call, params = {}, lexicon, asker) {
355
+ const ontology = selectByOntology(ask, candidates, lexicon);
356
+ if (ontology.chose)
357
+ return { chose: ontology.chose, decidedBy: 'ontology', ontology };
358
+ const judgment = await selectByJudgment(ask, candidates, call, params, { ...(lexicon ? { lexicon } : {}), ...(asker ? { asker } : {}) });
359
+ return { chose: judgment.chose, ...(judgment.hold ? { hold: judgment.hold } : {}), decidedBy: 'judgment', ontology, judgment };
360
+ }
361
+ export async function selectByOntologyThenJudgment(ask, candidates, call, params = {}, lexicon) {
362
+ const ontology = selectByOntology(ask, candidates, lexicon);
363
+ if (!ontology.survivors.length)
364
+ return { chose: null, hold: ontology.hold ?? 'no-grounding', decidedBy: 'ontology', ontology };
365
+ const slate = candidates.filter((c) => ontology.survivors.includes(c.id));
366
+ const judgment = await selectByJudgment(ask, slate, call, params, { ...(lexicon ? { lexicon } : {}) });
367
+ return { chose: judgment.chose, ...(judgment.hold ? { hold: judgment.hold } : {}), decidedBy: 'judgment', ontology, judgment };
368
+ }
369
+ export const DEFAULT_PROPOSAL = { smallCatalog: 50, veto: 'unsupported' };
370
+ /** THE PROPOSAL, from grounded classes alone — pure, re-derivable by a gate. */
371
+ export function proposeFromGrounding(groundedIris, candidates, lexicon, params = {}) {
372
+ const p = { ...DEFAULT_PROPOSAL, ...params };
373
+ const g = new Set(groundedIris);
374
+ const removed = {};
375
+ for (const c of candidates) {
376
+ const hit = (c.excludes ?? []).filter((k) => g.has(k.iri)).map((k) => k.iri).sort();
377
+ if (hit.length && (p.veto === 'any' || !c.covers.some((k) => g.has(k.iri))))
378
+ removed[c.id] = hit;
379
+ }
380
+ const clustersOf = new Map((lexicon ?? []).map((e) => [e.iri, e.clusters]));
381
+ const groundedClusters = new Set([...g].flatMap((iri) => clustersOf.get(iri) ?? []));
382
+ const near = new Set((lexicon ?? []).filter((e) => !g.has(e.iri) && e.clusters.some((c) => groundedClusters.has(c))).map((e) => e.iri));
383
+ const via = {};
384
+ const open = candidates.filter((c) => !removed[c.id]);
385
+ for (const c of open)
386
+ if (c.covers.some((k) => g.has(k.iri)))
387
+ via[c.id] = 'direct';
388
+ for (const c of open)
389
+ if (!via[c.id] && c.covers.some((k) => near.has(k.iri)))
390
+ via[c.id] = 'neighbourhood';
391
+ if (candidates.length <= p.smallCatalog)
392
+ for (const c of open)
393
+ if (!via[c.id])
394
+ via[c.id] = 'catalog';
395
+ const rank = { direct: 0, neighbourhood: 1, catalog: 2 };
396
+ const order = new Map(candidates.map((c, i) => [c.id, i]));
397
+ const proposed = Object.keys(via).sort((a, b) => rank[via[a]] - rank[via[b]] || order.get(a) - order.get(b));
398
+ return { candidates: proposed, via, removed, params: p };
399
+ }
400
+ export async function selectByProposalThenJudgment(ask, candidates, call, params = {}, lexicon, proposalParams = {}) {
401
+ const grounded = groundInLexicon(ask, candidates, lexicon);
402
+ const proposal = proposeFromGrounding(grounded.map((x) => x.iri), candidates, lexicon, proposalParams);
403
+ if (!proposal.candidates.length)
404
+ return { chose: null, hold: 'nothing-proposed', grounded, proposal };
405
+ // The judge sees the proposed skills in catalog order, not proposal order: the proposal changes WHO is offered, never
406
+ // how they are presented (position is a known judge bias; ordering by the rule would smuggle its preference in).
407
+ const slate = candidates.filter((c) => proposal.via[c.id]);
408
+ const judgment = await selectByJudgment(ask, slate, call, params, { ...(lexicon ? { lexicon } : {}) });
409
+ return { chose: judgment.chose, ...(judgment.hold ? { hold: judgment.hold } : {}), grounded, proposal, judgment };
410
+ }
411
+ export const DEFAULT_FRAMED_SELECTION = { floor: 0.3, margin: 0.15 };
412
+ export const FRAMED_JUDGE = { name: 'ap.skill-selection-judge.framed.v1', kind: 'model' };
413
+ const FRAMED_SYSTEM = 'You classify a request made to an organization\'s agent, in the terms of the organization\'s domain ontology, and '
414
+ + 'judge which of its skills fits. First say what the request asks FOR — the one thing it wants produced or done — as '
415
+ + 'exactly one of the listed classes, or "outside-domain" when none of them is what is being asked for (a request can '
416
+ + 'mention a board, a grant or an AI tool and still ask for something none of the classes is: minutes, a speech, a '
417
+ + 'pick between caterers, a how-to). Then say which listed classes the request is ABOUT. Then give each skill a '
418
+ + 'probability that it is the right one, and "none" the probability that no skill fits; they should sum to 1. Do not '
419
+ + 'answer the request.';
420
+ export async function selectByFramedJudgment(ask, candidates, call, params = {}) {
421
+ const p = { ...DEFAULT_FRAMED_SELECTION, ...params };
422
+ // The vocabulary the judge must speak: every class a skill covers, once.
423
+ const classes = new Map();
424
+ for (const c of candidates)
425
+ for (const k of c.covers)
426
+ if (!classes.has(k.iri))
427
+ classes.set(k.iri, k.label);
428
+ // Evidence: the classes the request's own words already name (the lexicon grounding), strongest first.
429
+ const grounded = groundInLexicon(ask, candidates.map((c) => ({ id: c.id, covers: c.covers.map((k) => ({ iri: k.iri, label: k.label, terms: k.terms ?? [k.label] })) }))).map((g) => g.iri);
430
+ const base = { grounded, judge: FRAMED_JUDGE, params: p };
431
+ if (!call)
432
+ return { chose: null, hold: 'no-judge', rejected: [], covering: [], distribution: {}, ...base };
433
+ if (!classes.size)
434
+ return { chose: null, hold: 'malformed', rejected: [], covering: [], distribution: {}, ...base };
435
+ const ids = candidates.map((c) => c.id);
436
+ const classList = [...classes.entries()].map(([iri, label]) => `- ${iri} — ${label}`).join('\n');
437
+ const out = await call({
438
+ system: FRAMED_SYSTEM,
439
+ messages: [{ role: 'user', content: `Request:\n${ask}\n\nDomain classes:\n${classList}\n\nWords in the request that name classes: ${grounded.length ? grounded.map((g) => classes.get(g) ?? g).join(', ') : 'none'}\n\nSkills (and the classes each covers):\n${candidates.map((c) => `- ${c.id}: ${c.description}\n covers: ${c.covers.map((k) => k.label).join(', ')}`).join('\n')}` }],
440
+ tool: {
441
+ name: 'typed_fit', description: 'The request typed in the domain ontology, and each skill\'s probability of fitting it.',
442
+ input_schema: { type: 'object', properties: {
443
+ requests: { type: 'string', enum: [...classes.keys(), OUTSIDE_DOMAIN], description: 'The one class the request asks FOR, or outside-domain' },
444
+ about: { type: 'array', items: { type: 'string', enum: [...classes.keys()] }, description: 'Classes the request is about' },
445
+ scores: { type: 'array', items: { type: 'object', properties: { skill: { type: 'string', enum: [...ids, 'none'] }, p: { type: 'number', minimum: 0, maximum: 1 } }, required: ['skill', 'p'] } },
446
+ reason: { type: 'string', description: 'One sentence.' },
447
+ }, required: ['requests', 'scores'] },
448
+ },
449
+ maxTokens: 700,
450
+ }).catch(() => null);
451
+ const requested = typeof out?.['requests'] === 'string' ? String(out['requests']) : null;
452
+ const rows = Array.isArray(out?.['scores']) ? out['scores'] : null;
453
+ if (!requested || (!classes.has(requested) && requested !== OUTSIDE_DOMAIN) || !rows)
454
+ return { chose: null, hold: 'malformed', rejected: [], covering: [], distribution: {}, ...base };
455
+ const about = Array.isArray(out?.['about']) ? out['about'].filter((a) => typeof a === 'string' && classes.has(a)) : [];
456
+ const raw = Object.fromEntries([...ids, 'none'].map((k) => [k, 0]));
457
+ for (const r of rows)
458
+ if (typeof r.skill === 'string' && r.skill in raw && typeof r.p === 'number' && Number.isFinite(r.p) && r.p > 0)
459
+ raw[r.skill] = Math.max(raw[r.skill], r.p);
460
+ const total = Object.values(raw).reduce((s, v) => s + v, 0);
461
+ const distribution = total > 0 ? Object.fromEntries(Object.entries(raw).map(([k, v]) => [k, Number((v / total).toFixed(4))])) : {};
462
+ const reason = typeof out?.['reason'] === 'string' ? String(out['reason']).slice(0, 300) : undefined;
463
+ const intent = { requests: requested, about };
464
+ const r = { intent, distribution, ...(reason ? { reason } : {}), ...base };
465
+ // 2. The ontology names the candidates.
466
+ if (requested === OUTSIDE_DOMAIN)
467
+ return { chose: null, hold: 'outside-domain', rejected: [], covering: [], ...r };
468
+ const covering = candidates.filter((c) => c.covers.some((k) => k.iri === requested)).map((c) => c.id).sort();
469
+ if (!covering.length)
470
+ return { chose: null, hold: 'not-covered', rejected: [], covering, ...r };
471
+ // 3. The distribution ranks within them.
472
+ const ranked = covering.map((id) => ({ id, p: distribution[id] ?? 0 })).sort((a, b) => b.p - a.p || a.id.localeCompare(b.id));
473
+ const top = ranked[0], next = ranked[1];
474
+ if (top.p < p.floor)
475
+ return { chose: null, hold: 'judge-disagrees', rejected: [top.id], covering, ...r };
476
+ if (next && top.p - next.p < p.margin)
477
+ return { chose: null, hold: 'no-margin', rejected: [top.id, next.id], covering, ...r };
478
+ const outside = Object.entries(distribution).filter(([k, v]) => k !== 'none' && !covering.includes(k) && v > 0).sort((a, b) => b[1] - a[1]).slice(0, 1).map(([k]) => k);
479
+ return { chose: top.id, rejected: [...(next ? [next.id] : []), ...outside].slice(0, 2), covering, ...r };
480
+ }
481
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"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"}