@miller-tech/uap 1.148.25 → 1.149.2

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.
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Pre-execution plan validation (the ATG-style "thought experiment").
3
+ *
4
+ * Adapted from "Atomic Task Graph: A Unified Framework for Agentic Planning
5
+ * and Execution" (arXiv 2607.01942) — see docs/ATTRIBUTION.md for full credits.
6
+ *
7
+ * Two layers, both run BEFORE any phase executes:
8
+ *
9
+ * 1. `validatePhaseGraph` — structural: duplicate ids, unknown/self deps,
10
+ * dependency cycles, empty goals. Pure, no model.
11
+ * 2. `runPlanThoughtExperiment` — one evaluator call that mentally executes
12
+ * the decomposition ("will these phases, in this dependency order, deliver
13
+ * the mission?") and returns a pass/fail verdict with findings. The judge
14
+ * did not author the plan — the same generator≠evaluator separation the
15
+ * acceptance gate uses.
16
+ *
17
+ * `reviewPlanText` is the free-text sibling used by `uap plan validate` on
18
+ * markdown plan artifacts (the validate-plan-on-change gate's `validate the
19
+ * plan` step becomes a real review, not just a stamp).
20
+ *
21
+ * Everything is fail-soft: a validator or model error forfeits the check, it
22
+ * never blocks delivery — decomposition and the plan gate must never wedge.
23
+ *
24
+ * SECURITY NOTE: because of that fail-soft design (and because the judged text
25
+ * is authored by the same party the gate constrains), a PASS verdict is an
26
+ * anti-sloppiness signal, NOT an adversarial guarantee — never build
27
+ * enforcement that treats a PASS as proof of review.
28
+ */
29
+ /** Structural validation of a phase/epic DAG. Pure — safe to call anywhere. */
30
+ export function validatePhaseGraph(phases) {
31
+ const errors = [];
32
+ const warnings = [];
33
+ const ids = new Set();
34
+ for (const p of phases) {
35
+ if (ids.has(p.id))
36
+ errors.push(`duplicate phase id '${p.id}'`);
37
+ ids.add(p.id);
38
+ if (!p.goal || !p.goal.trim())
39
+ errors.push(`phase '${p.id}' has an empty goal`);
40
+ }
41
+ for (const p of phases) {
42
+ for (const d of p.deps ?? []) {
43
+ if (d === p.id)
44
+ errors.push(`phase '${p.id}' depends on itself`);
45
+ else if (!ids.has(d))
46
+ warnings.push(`phase '${p.id}' depends on unknown phase '${d}' (dropped at execution)`);
47
+ }
48
+ }
49
+ // Cycle detection (DFS with recursion stack) over known-id edges only —
50
+ // unknown and self deps are already reported above.
51
+ const visited = new Set();
52
+ const stack = new Set();
53
+ const byId = new Map(phases.map((p) => [p.id, p]));
54
+ const hasCycle = (id) => {
55
+ visited.add(id);
56
+ stack.add(id);
57
+ for (const d of byId.get(id)?.deps ?? []) {
58
+ if (!byId.has(d) || d === id)
59
+ continue;
60
+ if (!visited.has(d) && hasCycle(d))
61
+ return true;
62
+ if (stack.has(d))
63
+ return true;
64
+ }
65
+ stack.delete(id);
66
+ return false;
67
+ };
68
+ for (const p of phases) {
69
+ if (!visited.has(p.id) && hasCycle(p.id)) {
70
+ errors.push('dependency cycle detected — cycle members can never become ready and their subtree is skipped at execution');
71
+ break;
72
+ }
73
+ }
74
+ return { ok: errors.length === 0, errors, warnings };
75
+ }
76
+ /** Extract a {verdict,findings} JSON verdict from model output. Anything
77
+ * unparseable is a PASS — a garbled judge must not block delivery. */
78
+ export function parsePlanVerdict(text) {
79
+ try {
80
+ const match = text.match(/\{[\s\S]*\}/);
81
+ if (!match)
82
+ return { verdict: 'pass', findings: [] };
83
+ const parsed = JSON.parse(match[0]);
84
+ const verdict = parsed.verdict === 'fail' ? 'fail' : 'pass';
85
+ const findings = Array.isArray(parsed.findings)
86
+ ? parsed.findings
87
+ .filter((f) => typeof f === 'string' && f.trim().length > 0)
88
+ // Model output reaches terminals and prompts — strip control/ANSI bytes.
89
+ .map((f) => f.replace(/[\x00-\x08\x0b-\x1f\x7f]/g, ' ').trim().slice(0, 300))
90
+ .slice(0, 8)
91
+ : [];
92
+ return { verdict, findings };
93
+ }
94
+ catch {
95
+ return { verdict: 'pass', findings: [] };
96
+ }
97
+ }
98
+ function describePhases(phases) {
99
+ return phases
100
+ .map((p, i) => `${i + 1}. [${p.id}] ${p.title} — ${p.goal}${p.deps?.length ? ` (deps: ${p.deps.join(', ')})` : ''}`)
101
+ .join('\n');
102
+ }
103
+ /**
104
+ * ATG thought experiment: ask the evaluator to mentally execute the phase plan
105
+ * before anything real runs, hunting for the defects that sink multi-phase
106
+ * missions (missing prerequisites, wrong dependency order, phases consuming
107
+ * artifacts no earlier phase produces, invented scope). One call; fail-soft.
108
+ */
109
+ export async function runPlanThoughtExperiment(mission, phases, executor) {
110
+ const prompt = [
111
+ 'You are a plan validator. Mentally EXECUTE the phase plan below, in its',
112
+ 'dependency order, before anything real runs. You did not author this plan;',
113
+ 'judge it adversarially.',
114
+ '',
115
+ `MISSION: ${mission.slice(0, 4000)}`,
116
+ '',
117
+ 'PHASE PLAN:',
118
+ describePhases(phases),
119
+ '',
120
+ 'Check ONLY for defects that would make execution fail or deliver the wrong thing:',
121
+ '- a phase that needs an artifact/decision no earlier phase (per its deps) produces',
122
+ '- missing prerequisite phases (setup, shared contracts, migrations)',
123
+ '- dependency edges that are wrong or missing (a later phase silently assumes an independent one ran first)',
124
+ '- phases that invent scope the mission does not imply, or mission parts no phase covers',
125
+ 'Do NOT fail a plan for style, granularity taste, or improvements that are merely nice.',
126
+ '',
127
+ 'Respond with ONLY JSON: {"verdict": "pass" | "fail", "findings": ["<specific defect>", ...]}',
128
+ '"fail" requires at least one concrete, execution-breaking finding.',
129
+ ].join('\n');
130
+ try {
131
+ return parsePlanVerdict(await executor(prompt));
132
+ }
133
+ catch {
134
+ return { verdict: 'pass', findings: [] }; // model unavailable ⇒ check forfeited, never blocked
135
+ }
136
+ }
137
+ /**
138
+ * Free-text plan review for `uap plan validate` over a markdown plan artifact.
139
+ * Same verdict contract and fail-soft rules as the phase thought experiment.
140
+ */
141
+ export async function reviewPlanText(planText, executor) {
142
+ const truncated = planText.length > 12000;
143
+ const prompt = [
144
+ 'You are a plan validator. Review the implementation plan below as if you',
145
+ 'had to execute it exactly as written. You did not author it; judge it',
146
+ 'adversarially.',
147
+ '',
148
+ 'PLAN:' + (truncated ? ' (truncated to the first 12,000 characters — judge only what you see)' : ''),
149
+ planText.slice(0, 12000),
150
+ '',
151
+ 'Check ONLY for defects that would make executing the plan fail or produce the wrong result:',
152
+ '- steps in an impossible order (a step consumes what a later step produces)',
153
+ '- missing prerequisite or verification steps for risky/irreversible actions',
154
+ '- load-bearing assumptions stated nowhere and likely false',
155
+ '- internal contradictions between sections',
156
+ 'Do NOT fail a plan for style, brevity, or missing nice-to-haves.',
157
+ '',
158
+ 'Respond with ONLY JSON: {"verdict": "pass" | "fail", "findings": ["<specific defect>", ...]}',
159
+ '"fail" requires at least one concrete, execution-breaking finding.',
160
+ ].join('\n');
161
+ try {
162
+ return parsePlanVerdict(await executor(prompt));
163
+ }
164
+ catch {
165
+ return { verdict: 'pass', findings: [] };
166
+ }
167
+ }
168
+ //# sourceMappingURL=plan-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-check.js","sourceRoot":"","sources":["../../src/delivery/plan-check.ts"],"names":[],"mappings":"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"}
@@ -86,13 +86,48 @@ export interface OrchestratorConfig {
86
86
  maxTasks?: number;
87
87
  /** Progress hook. */
88
88
  onTask?: (task: OrchestratorTask, outcome: TaskOutcome) => void;
89
+ /**
90
+ * Minimal node repair (ATG): extra fresh attempts for a FAILED task before
91
+ * its dependents are blocked. Each repair attempt re-executes ONLY the
92
+ * failed node, with the failure summary fed into its minimal context — the
93
+ * validated rest of the graph stays frozen. Default: UAP_ORCH_TASK_REPAIRS
94
+ * env (fallback 1, env hard-ceiling 5 — a full executor rerun per attempt
95
+ * must not be unboundable from the environment). 0 restores fail-fast.
96
+ */
97
+ maxRepairsPerTask?: number;
98
+ /**
99
+ * Re-plan repair (ATG minimal-subgraph repair): after retries are exhausted,
100
+ * re-plan the failed node as a replacement chain executed in place. The
101
+ * chain is interface-preserving — its first task inherits the failed node's
102
+ * deps, and when the whole chain succeeds the ORIGINAL task id is credited
103
+ * on the blackboard, so dependents unblock without any graph rewrite.
104
+ * Return null/[] to decline. Fail-soft: a throw declines.
105
+ */
106
+ repairTask?: (task: OrchestratorTask, lastFailure: TaskOutcome, attempts: number) => Promise<OrchestratorTask[] | null>;
107
+ /**
108
+ * Dependency-aware parallel dispatch: max independent READY tasks running
109
+ * concurrently (wave-barrier scheduling: each wave completes before the
110
+ * next dispatches — simple and deterministic over maximal utilization).
111
+ * Default 1 = sequential, the historical behavior. DELIBERATELY config-only,
112
+ * no env override: >1 requires a runTask that tolerates concurrent
113
+ * execution (isolated workspaces / per-task judge state), and the
114
+ * production deliver runTask is NOT concurrency-safe yet — an env knob
115
+ * would let one exported variable silently corrupt every deliver run.
116
+ * Clamped to [1, 16].
117
+ */
118
+ concurrency?: number;
89
119
  }
90
120
  export interface OrchestratorResult {
91
121
  success: boolean;
122
+ /** Succeeded ids — includes synthetic repair-chain link ids (`x.r0-…`)
123
+ * alongside the credited original id when a repair chain ran. */
92
124
  completed: string[];
93
125
  failed: string[];
94
- /** Aggregate turns across all executed tasks. */
126
+ /** Aggregate turns across all executed tasks (incl. retries and repairs). */
95
127
  turns: number;
128
+ /** Full attempt trail: a repaired task appears MULTIPLE times (failed
129
+ * attempt(s), chain links, then the credited success under its original
130
+ * id). Consumers wanting "the" outcome for an id must take the LAST entry. */
96
131
  outcomes: TaskOutcome[];
97
132
  }
98
133
  /**
@@ -114,12 +149,19 @@ export declare function governContext(prompt: string, depLineCount: number, budg
114
149
  export declare function assembleTaskContext(task: OrchestratorTask, mission: string, blackboard: Map<string, TaskOutcome>, maxDepSummaryChars?: number, opts?: {
115
150
  designLines?: string[];
116
151
  budgetChars?: number;
152
+ lastFailure?: string;
117
153
  }): AssembledContext;
118
154
  /**
119
- * P1 — execute the task DAG on a blackboard. Topologically ordered; a task
120
- * runs only after every dependency has SUCCEEDED. A failed task blocks its
121
- * dependents (their deps aren't all green) and they are reported as skipped/
122
- * failed rather than run against incomplete state. Fail-soft on publish.
155
+ * P1 — execute the task DAG on a blackboard. Dependency-aware: a task runs
156
+ * only after every dependency has SUCCEEDED; independent READY tasks dispatch
157
+ * in parallel up to `concurrency` (default 1 the historical sequential
158
+ * behavior). A task that fails gets ATG-style MINIMAL REPAIR before its
159
+ * dependents are blocked: bounded fresh re-execution of just that node with
160
+ * the failure fed back (`maxRepairsPerTask`), then an optional re-planned
161
+ * replacement chain (`repairTask`) credited under the original id — the
162
+ * validated rest of the graph stays frozen throughout. Only when repair is
163
+ * exhausted are dependents reported as skipped rather than run against
164
+ * incomplete state. Fail-soft on publish.
123
165
  */
124
166
  export declare function orchestrate(config: OrchestratorConfig): Promise<OrchestratorResult>;
125
167
  //# sourceMappingURL=task-orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-orchestrator.d.ts","sourceRoot":"","sources":["../../src/delivery/task-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,wEAAwE;AACxE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC;qEACiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B;;;;OAIG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACjF;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAQD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAgB3H;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,kBAAkB,SAA4B,EAC9C,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D,gBAAgB,CA6ClB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4EzF"}
1
+ {"version":3,"file":"task-orchestrator.d.ts","sourceRoot":"","sources":["../../src/delivery/task-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -72,6 +72,12 @@ export function assembleTaskContext(task, mission, blackboard, maxDepSummaryChar
72
72
  sections.push('This task is done when:');
73
73
  task.criteria.forEach((c, i) => sections.push(` ${i + 1}. ${c}`));
74
74
  }
75
+ // Minimal repair: the retry sees WHAT failed last time, not a fresh-amnesia
76
+ // rerun — the one new piece of information a repair attempt has.
77
+ if (opts.lastFailure && opts.lastFailure.trim()) {
78
+ sections.push('');
79
+ sections.push(`PREVIOUS ATTEMPT FAILED — fix this: ${opts.lastFailure.trim().slice(0, 400)}`);
80
+ }
75
81
  // P3 — relevant persisted design decisions (objective/architecture): a
76
82
  // small retrieval, not the full spec dump.
77
83
  if (opts.designLines && opts.designLines.length > 0) {
@@ -98,41 +104,42 @@ export function assembleTaskContext(task, mission, blackboard, maxDepSummaryChar
98
104
  const governed = governContext(raw, includedDeps.length, opts.budgetChars ?? DEFAULT_CONTEXT_BUDGET_CHARS);
99
105
  return { taskId: task.id, prompt: governed.prompt, includedDeps };
100
106
  }
107
+ function envInt(name, fallback, max) {
108
+ const rawStr = process.env[name];
109
+ if (!rawStr || !rawStr.trim())
110
+ return fallback; // empty string = unset, not 0
111
+ const raw = Number(rawStr);
112
+ return Number.isFinite(raw) && raw >= 0 ? Math.min(Math.floor(raw), max) : fallback;
113
+ }
101
114
  /**
102
- * P1 — execute the task DAG on a blackboard. Topologically ordered; a task
103
- * runs only after every dependency has SUCCEEDED. A failed task blocks its
104
- * dependents (their deps aren't all green) and they are reported as skipped/
105
- * failed rather than run against incomplete state. Fail-soft on publish.
115
+ * P1 — execute the task DAG on a blackboard. Dependency-aware: a task runs
116
+ * only after every dependency has SUCCEEDED; independent READY tasks dispatch
117
+ * in parallel up to `concurrency` (default 1 the historical sequential
118
+ * behavior). A task that fails gets ATG-style MINIMAL REPAIR before its
119
+ * dependents are blocked: bounded fresh re-execution of just that node with
120
+ * the failure fed back (`maxRepairsPerTask`), then an optional re-planned
121
+ * replacement chain (`repairTask`) credited under the original id — the
122
+ * validated rest of the graph stays frozen throughout. Only when repair is
123
+ * exhausted are dependents reported as skipped rather than run against
124
+ * incomplete state. Fail-soft on publish.
106
125
  */
107
126
  export async function orchestrate(config) {
108
127
  const maxTasks = config.maxTasks ?? DEFAULT_MAX_TASKS;
109
128
  const budget = config.contextBudgetChars;
110
- // Mutable queue so P5 re-planning can append discovered subtasks; re-sorted
111
- // topologically each time the set grows.
112
- let queue = topoOrder(config.tasks);
113
- const known = new Set(queue.map((t) => t.id));
129
+ const concurrency = Math.min(Math.max(1, config.concurrency ?? 1), 16);
130
+ const maxRepairs = Math.max(0, config.maxRepairsPerTask ?? envInt('UAP_ORCH_TASK_REPAIRS', 1, 5));
131
+ // Pending is kept topo-ordered; P5 re-planning appends discovered subtasks
132
+ // and re-sorts. `scheduled` counts every task ever admitted (initial +
133
+ // re-planned + repair chains) against the maxTasks runaway guard.
134
+ let pending = topoOrder(config.tasks);
135
+ const known = new Set(pending.map((t) => t.id));
136
+ let scheduled = pending.length;
114
137
  const blackboard = new Map();
115
138
  const done = new Set();
116
139
  const failed = new Set();
117
140
  const outcomes = [];
118
141
  let turns = 0;
119
- for (let qi = 0; qi < queue.length; qi++) {
120
- const task = queue[qi];
121
- const deps = task.deps ?? [];
122
- // Skip a task whose dependency failed — never build against a broken base.
123
- const blockedBy = deps.filter((d) => failed.has(d) || !done.has(d));
124
- if (blockedBy.length > 0) {
125
- const outcome = {
126
- taskId: task.id,
127
- success: false,
128
- summary: `skipped — unmet dependency: ${blockedBy.join(', ')}`,
129
- turns: 0,
130
- };
131
- failed.add(task.id);
132
- outcomes.push(outcome);
133
- config.onTask?.(task, outcome);
134
- continue;
135
- }
142
+ const runOne = async (task, lastFailure) => {
136
143
  let designLines = [];
137
144
  if (config.retrieveDesign) {
138
145
  try {
@@ -145,34 +152,192 @@ export async function orchestrate(config) {
145
152
  const ctx = assembleTaskContext(task, config.mission, blackboard, config.maxDepSummaryChars, {
146
153
  designLines,
147
154
  budgetChars: budget,
155
+ ...(lastFailure ? { lastFailure } : {}),
148
156
  });
149
- const outcome = await config.runTask(ctx, task);
157
+ // A throwing runTask becomes a failed outcome, never an abandoned graph:
158
+ // under parallel dispatch one rejection must not orphan in-flight siblings.
159
+ let outcome;
160
+ try {
161
+ outcome = await config.runTask(ctx, task);
162
+ }
163
+ catch (err) {
164
+ outcome = {
165
+ taskId: task.id,
166
+ success: false,
167
+ summary: `task execution error: ${err instanceof Error ? err.message : String(err)}`.slice(0, 300),
168
+ turns: 0,
169
+ };
170
+ }
150
171
  turns += outcome.turns;
151
172
  outcomes.push(outcome);
152
- if (outcome.success) {
153
- done.add(task.id);
154
- blackboard.set(task.id, outcome);
155
- try {
156
- await config.publish?.(outcome, task);
157
- }
158
- catch {
159
- // publishing to durable memory is best-effort
173
+ return outcome;
174
+ };
175
+ const recordSuccess = async (id, task, outcome) => {
176
+ done.add(id);
177
+ blackboard.set(id, outcome);
178
+ try {
179
+ await config.publish?.(outcome, task);
180
+ }
181
+ catch {
182
+ // publishing to durable memory is best-effort
183
+ }
184
+ };
185
+ const markSkipped = (task, blockedBy) => {
186
+ const outcome = {
187
+ taskId: task.id,
188
+ success: false,
189
+ summary: `skipped — unmet dependency: ${blockedBy.join(', ')}`,
190
+ turns: 0,
191
+ };
192
+ failed.add(task.id);
193
+ outcomes.push(outcome);
194
+ config.onTask?.(task, outcome);
195
+ };
196
+ /**
197
+ * Re-plan repair: execute the replacement chain in place. Interface
198
+ * preserving — the first link inherits the failed node's deps, links chain
199
+ * sequentially, and full-chain success credits the ORIGINAL task id on the
200
+ * blackboard so dependents unblock unchanged. Returns the credited outcome,
201
+ * or null when the repair was declined or the chain broke.
202
+ */
203
+ const runRepairChain = async (task, lastFailure, attempts) => {
204
+ if (!config.repairTask)
205
+ return null;
206
+ let plan = null;
207
+ try {
208
+ plan = await config.repairTask(task, lastFailure, attempts);
209
+ }
210
+ catch {
211
+ plan = null; // fail-soft: an unplannable repair keeps the failure
212
+ }
213
+ if (!plan || plan.length === 0 || scheduled + plan.length > maxTasks)
214
+ return null;
215
+ let prevId;
216
+ let last = null;
217
+ for (let i = 0; i < plan.length; i++) {
218
+ // Namespace chain links under the failed node. The 64-char cut can eat
219
+ // the differentiator for very long task ids, so collisions against
220
+ // anything ever known get a numeric suffix instead of silently
221
+ // overwriting a blackboard entry.
222
+ let subId = `${task.id}.r${i}-${plan[i].id}`.slice(0, 64);
223
+ for (let bump = 2; known.has(subId); bump++)
224
+ subId = `${subId.slice(0, 60)}~${bump}`;
225
+ const sub = {
226
+ ...plan[i],
227
+ id: subId,
228
+ deps: i === 0 ? [...(task.deps ?? [])] : [prevId],
229
+ };
230
+ known.add(sub.id);
231
+ scheduled++;
232
+ // Chain links run to plan; their own newTasks are DELIBERATELY dropped —
233
+ // a repair must converge the failed node, not grow the graph.
234
+ const outcome = await runOne(sub, i === 0 ? lastFailure.summary : undefined);
235
+ config.onTask?.(sub, outcome);
236
+ if (!outcome.success) {
237
+ failed.add(sub.id);
238
+ return null;
160
239
  }
161
- // P5 adaptive re-planning: fold discovered subtasks into the queue.
162
- const fresh = (outcome.newTasks ?? []).filter((t) => !known.has(t.id));
163
- if (fresh.length > 0 && queue.length + fresh.length <= maxTasks) {
240
+ await recordSuccess(sub.id, sub, outcome);
241
+ prevId = sub.id;
242
+ last = outcome;
243
+ }
244
+ if (!last)
245
+ return null;
246
+ const credited = {
247
+ taskId: task.id,
248
+ success: true,
249
+ summary: `repaired via ${plan.length} replacement task(s): ${last.summary}`.slice(0, 400),
250
+ turns: 0,
251
+ ...(last.contract ? { contract: last.contract } : {}),
252
+ };
253
+ outcomes.push(credited);
254
+ await recordSuccess(task.id, task, credited);
255
+ return credited;
256
+ };
257
+ /** Full failure handling for one task: retries → re-plan chain → fail. */
258
+ const settleTask = async (task, first) => {
259
+ let final = first;
260
+ let attempts = 1;
261
+ // Minimal repair 1 — bounded re-execution of JUST this node, failure fed back.
262
+ while (!final.success && attempts <= maxRepairs) {
263
+ final = await runOne(task, final.summary);
264
+ attempts++;
265
+ }
266
+ // Minimal repair 2 — re-planned replacement chain, original id credited.
267
+ if (!final.success) {
268
+ const credited = await runRepairChain(task, final, attempts);
269
+ if (credited)
270
+ final = credited;
271
+ }
272
+ if (final.success) {
273
+ // Repair-chain success already recorded itself under the original id.
274
+ if (!done.has(task.id))
275
+ await recordSuccess(task.id, task, final);
276
+ // P5 — adaptive re-planning: fold discovered subtasks into the graph.
277
+ const fresh = (final.newTasks ?? []).filter((t) => !known.has(t.id));
278
+ if (fresh.length > 0 && scheduled + fresh.length <= maxTasks) {
164
279
  for (const t of fresh)
165
280
  known.add(t.id);
166
- // Re-topo-sort the not-yet-run remainder plus the new tasks so deps hold.
167
- const remainder = queue.slice(qi + 1).concat(fresh);
168
- const resorted = topoOrder(remainder);
169
- queue = queue.slice(0, qi + 1).concat(resorted);
281
+ scheduled += fresh.length;
282
+ const merged = pending.concat(fresh);
283
+ const sorted = topoOrder(merged);
284
+ // topoOrder cleans deps against ONLY the passed array — which would
285
+ // silently drop edges to already-done (harmless) and already-FAILED
286
+ // (dangerous: dependents would run on a broken base) tasks. Restore
287
+ // each task's true deps, filtered against everything ever known.
288
+ const byId = new Map(merged.map((t) => [t.id, t]));
289
+ pending = sorted.map((s) => {
290
+ const orig = byId.get(s.id);
291
+ const deps = (orig.deps ?? []).filter((d) => known.has(d) && d !== s.id);
292
+ return { ...orig, deps };
293
+ });
170
294
  }
171
295
  }
172
296
  else {
173
297
  failed.add(task.id);
174
298
  }
175
- config.onTask?.(task, outcome);
299
+ config.onTask?.(task, final);
300
+ return final;
301
+ };
302
+ while (pending.length > 0) {
303
+ // Skip cascade: drop every task whose dependency already failed — never
304
+ // build against a broken base. Loops because each skip can cascade.
305
+ let cascading = true;
306
+ while (cascading) {
307
+ cascading = false;
308
+ for (let i = 0; i < pending.length; i++) {
309
+ const blockedBy = (pending[i].deps ?? []).filter((d) => failed.has(d));
310
+ if (blockedBy.length > 0) {
311
+ markSkipped(pending[i], blockedBy);
312
+ pending.splice(i, 1);
313
+ i--;
314
+ cascading = true;
315
+ }
316
+ }
317
+ }
318
+ if (pending.length === 0)
319
+ break;
320
+ // Ready set: every dependency has SUCCEEDED. Nothing ready with work
321
+ // still pending means an unsatisfiable remainder (cycle degraded by
322
+ // topoOrder) — skip it rather than wedge.
323
+ const ready = pending.filter((t) => (t.deps ?? []).every((d) => done.has(d)));
324
+ if (ready.length === 0) {
325
+ for (const t of pending)
326
+ markSkipped(t, (t.deps ?? []).filter((d) => !done.has(d)));
327
+ pending = [];
328
+ break;
329
+ }
330
+ // Dependency-aware dispatch: up to `concurrency` independent ready tasks
331
+ // run at once (they are mutually independent by construction — none can
332
+ // depend on another still-pending task). Settlement (repair, re-planning,
333
+ // bookkeeping) is sequential for deterministic graph state.
334
+ const wave = ready.slice(0, concurrency);
335
+ const waveIds = new Set(wave.map((t) => t.id));
336
+ pending = pending.filter((t) => !waveIds.has(t.id));
337
+ const results = await Promise.all(wave.map(async (t) => ({ task: t, outcome: await runOne(t) })));
338
+ for (const { task, outcome } of results) {
339
+ await settleTask(task, outcome);
340
+ }
176
341
  }
177
342
  return {
178
343
  success: failed.size === 0,
@@ -1 +1 @@
1
- {"version":3,"file":"task-orchestrator.js","sourceRoot":"","sources":["../../src/delivery/task-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAmF3C,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,YAAoB,EAAE,MAAc;IAChF,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,sEAAsE;IACtE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACzG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC;QAAE,GAAG,IAAI,+BAA+B,OAAO,sDAAsD,MAAM,eAAe,CAAC;IAC1I,sEAAsE;IACtE,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,mCAAmC,CAAC;IAC1F,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAsB,EACtB,OAAe,EACf,UAAoC,EACpC,kBAAkB,GAAG,yBAAyB,EAC9C,OAAyD,EAAE;IAE3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,kCAAkC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,uEAAuE;IACvE,2CAA2C;IAC3C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACxE,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,IAAI,4BAA4B,CAAC,CAAC;IAC3G,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA0B;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;IACzC,4EAA4E;IAC5E,yCAAyC;IACzC,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAwB,CAAuB,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,2EAA2E;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAgB;gBAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+BAA+B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9D,KAAK,EAAE,CAAC;aACT,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,GAAG,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,kBAAkB,EAAE;YAC3F,WAAW;YACX,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;YACD,sEAAsE;YACtE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAChE,KAAK,MAAM,CAAC,IAAI,KAAK;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,0EAA0E;gBAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,SAA4B,CAAuB,CAAC;gBAC/E,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC;QAC1B,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;QACnB,KAAK;QACL,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"task-orchestrator.js","sourceRoot":"","sources":["../../src/delivery/task-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ # Attribution & Inspirations
2
+
3
+ UAP stands on published research, community engineering write-ups, and open-source
4
+ software. This page credits the sources whose ideas are implemented in this codebase,
5
+ and what each one inspired. (Dependency licenses ship with the packages themselves;
6
+ this page is about *ideas and provenance*, not license compliance.)
7
+
8
+ ## Research & techniques
9
+
10
+ | Source | What it inspired in UAP |
11
+ |---|---|
12
+ | **Atomic Task Graph: A Unified Framework for Agentic Planning and Execution** — [arXiv 2607.01942](https://arxiv.org/abs/2607.01942) | The v1.149 delivery uplifts: pre-execution plan validation (`src/delivery/plan-check.ts` — structural DAG checks + the evaluator "thought experiment" with one re-plan), ATG-style minimal node repair in the blackboard orchestrator (bounded retry with failure feedback + interface-preserving `repairTask` chains credited under the original task id), and dependency-aware parallel dispatch of independent ready tasks. The paper's ablations — validation and localized repair carry the gains, not the graph representation itself — directly shaped what we adopted and what we skipped (tool-call-granularity nodes, full-upfront planning). Surfaced to us via [Carlos E. Perez (@IntuitMachine)'s thread](https://x.com/IntuitMachine/status/2076465883938009457). |
13
+ | **vLLM Semantic Router** — collaboration as a serving-layer primitive ([vLLM project](https://github.com/vllm-project)) | The proxy's serving-layer recipes (`Confidence` / `Fusion` / `Ratings` / `ReMoM` in `src/types/config.ts` and the inference proxy): multi-sample selection, judge-fused answers, and signal-selected escalation behind a single model API, plus the gate-as-confidence escalation idea (local model → stronger model when gates disagree). |
14
+ | **Anthropic's loop-engineering practices**, as summarized publicly by Miles Deutscher | The v1.81 generator≠evaluator separation (the model implementing never grades its own work — acceptance gates are authored and judged by a different model) and the barbell routing strategy (cheap generator, sharp evaluator) used across deliver, the acceptance judge, and now the plan thought experiment. |
15
+ | **Google Labs DESIGN.md** — the [`@google/design.md`](https://www.npmjs.com/package/@google/design.md) format and OSS CLI | The project design system integration (`uap design` interrogate/lint/diff, `src/design/tokens.ts` token parsing, the reactor's design-context injection, and the hard design-token gate for UI files). |
16
+
17
+ ## Benchmarks
18
+
19
+ | Source | How UAP uses it |
20
+ |---|---|
21
+ | **Terminal-Bench** ([tbench.ai](https://www.tbench.ai/)) | Terminal-agent evaluation; drove the token-optimization and success-rate validation results, and the confound-hunting methodology lessons in the TBench Investigation. |
22
+ | **SWE-bench Pro** | Basis of the `benchmarks/suites/swe-bench-pro-gen` paired uplift A/B suite for local-model delivery. |
23
+
24
+ ## Notable open source in the stack
25
+
26
+ The full dependency graph lives in `package.json`; these deserve explicit mention
27
+ because UAP embeds, vendors, or builds core workflows around them:
28
+
29
+ - **[llama.cpp](https://github.com/ggml-org/llama.cpp) / ik_llama.cpp** — the local inference backend the whole local-model path (deliver, recipes, slot budgeting) is built against.
30
+ - **Qwen** (Alibaba) — the local models UAP's local-first delivery pipeline is tuned for and benchmarked with.
31
+ - **[Qdrant](https://qdrant.tech/)** + **nomic-embed-text** — the semantic long-term memory store and its embeddings.
32
+ - **[uPlot](https://github.com/leeoniya/uPlot)** (MIT) — vendored (with license) in `web/vendor/` for the dashboard's charts.
33
+ - **[RTK — Rust Token Killer](https://github.com/rtk-rs)** — the token-optimized CLI proxy the hook layer routes shell commands through.
34
+ - **commander**, **@clack/prompts**, **vitest**, **better-sqlite3**, **zod** — the CLI, wizard, test, storage, and schema backbones.
35
+
36
+ ## Conventions
37
+
38
+ When a feature is adopted from a paper or external write-up, credit it in three
39
+ places: the module docstring of the implementing file, the PR description, and a
40
+ row on this page. If you spot an uncredited inspiration, please open a PR.