@miller-tech/uap 2.16.7 → 2.20.0

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 (106) hide show
  1. package/config/capacity-policy.json +33 -0
  2. package/config/model-profiles/qwen38.json +32 -33
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/bin/cli.js +57 -0
  5. package/dist/bin/cli.js.map +1 -1
  6. package/dist/capacity/policy.d.ts +32 -1
  7. package/dist/capacity/policy.d.ts.map +1 -1
  8. package/dist/capacity/policy.js +123 -4
  9. package/dist/capacity/policy.js.map +1 -1
  10. package/dist/capacity/probe.d.ts +26 -0
  11. package/dist/capacity/probe.d.ts.map +1 -1
  12. package/dist/capacity/probe.js +84 -3
  13. package/dist/capacity/probe.js.map +1 -1
  14. package/dist/cli/inference.d.ts +4 -0
  15. package/dist/cli/inference.d.ts.map +1 -1
  16. package/dist/cli/inference.js +74 -8
  17. package/dist/cli/inference.js.map +1 -1
  18. package/dist/cli/merge-gate.d.ts +59 -0
  19. package/dist/cli/merge-gate.d.ts.map +1 -0
  20. package/dist/cli/merge-gate.js +238 -0
  21. package/dist/cli/merge-gate.js.map +1 -0
  22. package/dist/cli/merge-queue.d.ts +13 -0
  23. package/dist/cli/merge-queue.d.ts.map +1 -1
  24. package/dist/cli/merge-queue.js +48 -2
  25. package/dist/cli/merge-queue.js.map +1 -1
  26. package/dist/cli/mission.d.ts +25 -0
  27. package/dist/cli/mission.d.ts.map +1 -0
  28. package/dist/cli/mission.js +225 -0
  29. package/dist/cli/mission.js.map +1 -0
  30. package/dist/cli/orch.d.ts +27 -0
  31. package/dist/cli/orch.d.ts.map +1 -0
  32. package/dist/cli/orch.js +70 -0
  33. package/dist/cli/orch.js.map +1 -0
  34. package/dist/cli/systemd-services.d.ts.map +1 -1
  35. package/dist/cli/systemd-services.js +44 -0
  36. package/dist/cli/systemd-services.js.map +1 -1
  37. package/dist/delivery/merge-gate.d.ts +168 -0
  38. package/dist/delivery/merge-gate.d.ts.map +1 -0
  39. package/dist/delivery/merge-gate.js +309 -0
  40. package/dist/delivery/merge-gate.js.map +1 -0
  41. package/dist/inference/analysis.d.ts +69 -3
  42. package/dist/inference/analysis.d.ts.map +1 -1
  43. package/dist/inference/analysis.js +123 -7
  44. package/dist/inference/analysis.js.map +1 -1
  45. package/dist/inference/probe.d.ts +38 -1
  46. package/dist/inference/probe.d.ts.map +1 -1
  47. package/dist/inference/probe.js +303 -30
  48. package/dist/inference/probe.js.map +1 -1
  49. package/dist/inference/strata.d.ts +95 -0
  50. package/dist/inference/strata.d.ts.map +1 -0
  51. package/dist/inference/strata.js +167 -0
  52. package/dist/inference/strata.js.map +1 -0
  53. package/dist/mission/database.d.ts +29 -0
  54. package/dist/mission/database.d.ts.map +1 -0
  55. package/dist/mission/database.js +131 -0
  56. package/dist/mission/database.js.map +1 -0
  57. package/dist/mission/ledger.d.ts +109 -0
  58. package/dist/mission/ledger.d.ts.map +1 -0
  59. package/dist/mission/ledger.js +294 -0
  60. package/dist/mission/ledger.js.map +1 -0
  61. package/dist/mission/poll-cycle.d.ts +73 -0
  62. package/dist/mission/poll-cycle.d.ts.map +1 -0
  63. package/dist/mission/poll-cycle.js +100 -0
  64. package/dist/mission/poll-cycle.js.map +1 -0
  65. package/dist/mission/poll-executor.d.ts +91 -0
  66. package/dist/mission/poll-executor.d.ts.map +1 -0
  67. package/dist/mission/poll-executor.js +328 -0
  68. package/dist/mission/poll-executor.js.map +1 -0
  69. package/dist/models/types.d.ts.map +1 -1
  70. package/dist/models/types.js +33 -27
  71. package/dist/models/types.js.map +1 -1
  72. package/dist/self-tuning/profiles/qwen38.d.ts +13 -14
  73. package/dist/self-tuning/profiles/qwen38.d.ts.map +1 -1
  74. package/dist/self-tuning/profiles/qwen38.js +17 -18
  75. package/dist/self-tuning/profiles/qwen38.js.map +1 -1
  76. package/dist/types/mission.d.ts +80 -0
  77. package/dist/types/mission.d.ts.map +1 -0
  78. package/dist/types/mission.js +12 -0
  79. package/dist/types/mission.js.map +1 -0
  80. package/docs/architecture/adr/0003-mission-orchestrator.md +99 -0
  81. package/docs/architecture/adr/0004-deterministic-merge-gate.md +127 -0
  82. package/docs/architecture/adr/0005-ollama-compatible-surface.md +74 -0
  83. package/docs/guides/CAPACITY_POLICY.md +49 -0
  84. package/docs/guides/INFERENCE_HEALTH.md +65 -8
  85. package/docs/guides/MISSIONS.md +170 -0
  86. package/docs/guides/PROXY.md +50 -0
  87. package/docs/reports/2026-10-02-plane-admin-fail-closed.md +70 -0
  88. package/docs/reports/2026-10-02-plane-admin-protect-session.md +116 -0
  89. package/docs/visual/merge-gate.html +404 -0
  90. package/docs/visual/mission-orchestrator.html +472 -0
  91. package/package.json +2 -2
  92. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  93. package/src/policies/enforcers/__pycache__/expert_review_required.cpython-312.pyc +0 -0
  94. package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
  95. package/src/policies/enforcers/plane_admin_protect.py +133 -0
  96. package/src/policies/schemas/policies/plane-admin-protect.md +55 -0
  97. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  98. package/templates/hooks/uap-policy-gate.sh +33 -0
  99. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
  100. package/tools/agents/scripts/anthropic_proxy.py +1271 -89
  101. package/tools/agents/scripts/requirements-proxy.txt +1 -1
  102. package/tools/agents/tests/test_anthropic_proxy_streaming.py +171 -0
  103. package/tools/agents/tests/test_gate_failclosed_plane_admin.py +248 -0
  104. package/tools/agents/tests/test_ollama_compat.py +320 -0
  105. package/tools/agents/tests/test_plane_admin_protect.py +124 -0
  106. package/tools/agents/tests/test_stream_heartbeat.py +77 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * `uap mission` — the operator surface for the mission ledger.
3
+ *
4
+ * uap mission create "<goal>" --acceptance "<criteria>" [--launch] [--preset <id>]
5
+ * uap mission list [--status active|paused|delivered|failed]
6
+ * uap mission show <id>
7
+ * uap mission pause <id> | resume <id>
8
+ * uap mission replan <id> --acceptance "<new>" --reason "<why>"
9
+ * uap mission salvage [list|approve <id>|reject <id>]
10
+ * uap mission poll [--loop] [--interval N] — the orchestrator loop clock
11
+ *
12
+ * Missions are durable goals with FROZEN acceptance criteria; the poll loop
13
+ * drives them to completion. `--launch` starts the first deliver run
14
+ * immediately instead of waiting for the next poll.
15
+ */
16
+ import chalk from 'chalk';
17
+ import { createMission, decideSalvage, getMission, listAcceptanceRevisions, listAttempts, listMissions, listSalvage, openMissionDb, replanAcceptance, setMissionStatus, } from '../mission/ledger.js';
18
+ import { runPollCycle } from '../mission/poll-executor.js';
19
+ import { orchPollCommand } from './orch.js';
20
+ const VALID_STATUSES = ['active', 'paused', 'delivered', 'failed'];
21
+ function dbFor(options) {
22
+ return openMissionDb(options.projectRoot ?? process.cwd());
23
+ }
24
+ function parseId(text) {
25
+ const n = parseInt(text, 10);
26
+ return Number.isFinite(n) && n > 0 ? n : null;
27
+ }
28
+ function friendlyMission(db, id) {
29
+ try {
30
+ return getMission(db, id);
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ const statusColor = {
37
+ active: chalk.green,
38
+ paused: chalk.yellow,
39
+ delivered: chalk.cyan,
40
+ failed: chalk.red,
41
+ };
42
+ async function createCmd(goal, options) {
43
+ const acceptance = (options.acceptance ?? '').trim();
44
+ if (!goal.trim() || !acceptance) {
45
+ console.log(chalk.yellow(' Usage: uap mission create "<goal>" --acceptance "<criteria>" [--preset <id>] [--launch]'));
46
+ process.exitCode = 1;
47
+ return;
48
+ }
49
+ const projectRoot = options.projectRoot ?? process.cwd();
50
+ const db = dbFor(options);
51
+ const mission = createMission(db, {
52
+ goal: goal.trim(),
53
+ acceptance,
54
+ ...(options.preset ? { presetId: options.preset } : {}),
55
+ });
56
+ console.log(chalk.green(` ✓ mission #${mission.id} created (acceptance frozen ${mission.acceptanceHash.slice(0, 12)}…)`));
57
+ if (options.launch) {
58
+ const reports = await runPollCycle(projectRoot, undefined, undefined, { missionIds: [mission.id] });
59
+ const mine = reports.find((r) => r.missionId === mission.id);
60
+ for (const note of mine?.notes ?? [])
61
+ console.log(chalk.dim(` ${note}`));
62
+ if (!mine) {
63
+ console.log(chalk.yellow(' (the daemon will launch it on the next poll cycle)'));
64
+ }
65
+ }
66
+ else {
67
+ console.log(chalk.dim(' the orchestrator daemon launches it on the next poll (uap mission poll)'));
68
+ }
69
+ }
70
+ function listCmd(options) {
71
+ const db = dbFor(options);
72
+ const status = options.status && VALID_STATUSES.includes(options.status)
73
+ ? options.status
74
+ : undefined;
75
+ const missions = listMissions(db, { status });
76
+ if (options.json) {
77
+ console.log(JSON.stringify(missions, null, 2));
78
+ return;
79
+ }
80
+ if (missions.length === 0) {
81
+ console.log(chalk.dim(' No missions. Create one: uap mission create "<goal>" --acceptance "<criteria>"'));
82
+ return;
83
+ }
84
+ console.log(chalk.bold('\n Missions\n'));
85
+ for (const m of missions) {
86
+ console.log(` #${m.id} ${statusColor[m.status](m.status)} ${chalk.dim(`run ${m.latestRunId ?? '—'} · launches ${m.launchCount} (${m.relaunchCount} resumes)`)}`);
87
+ console.log(` ${m.goal.slice(0, 110)}`);
88
+ }
89
+ console.log('');
90
+ }
91
+ function showCmd(idText, options) {
92
+ const id = parseId(idText);
93
+ const db = dbFor(options);
94
+ if (id === null) {
95
+ console.log(chalk.yellow(' Usage: uap mission show <id>'));
96
+ process.exitCode = 1;
97
+ return;
98
+ }
99
+ const mission = friendlyMission(db, id);
100
+ if (!mission) {
101
+ console.log(chalk.yellow(` mission #${id} not found`));
102
+ process.exitCode = 1;
103
+ return;
104
+ }
105
+ const attempts = listAttempts(db, id);
106
+ const salvage = listSalvage(db, { missionId: id });
107
+ const revisions = listAcceptanceRevisions(db, id);
108
+ if (options.json) {
109
+ console.log(JSON.stringify({ mission, attempts, salvage, revisions }, null, 2));
110
+ return;
111
+ }
112
+ console.log(chalk.bold(`\n Mission #${mission.id} — ${statusColor[mission.status](mission.status)}\n`));
113
+ console.log(` ${chalk.bold('Goal')} ${mission.goal}`);
114
+ console.log(` ${chalk.bold('Acceptance')} ${mission.acceptance}`);
115
+ console.log(chalk.dim(` frozen ${mission.acceptanceHash.slice(0, 16)}… · created ${mission.createdAt.slice(0, 16)}`));
116
+ console.log(` ${chalk.bold('Run')} ${mission.latestRunId ?? '—'}`);
117
+ console.log(` ${chalk.bold('Launches')} ${mission.launchCount} (${mission.relaunchCount} resumes)`);
118
+ if (revisions.length > 0) {
119
+ console.log(` ${chalk.bold('Replans')} ${revisions.length} (prior hashes recorded)`);
120
+ }
121
+ if (attempts.length > 0) {
122
+ console.log(`\n ${chalk.bold('Attempts')}`);
123
+ for (const a of attempts) {
124
+ console.log(` ${a.outcome.padEnd(11)} ${chalk.dim(a.createdAt.slice(5, 16))} ${a.runId ?? ''} ${a.summary ?? ''}`.trimEnd());
125
+ }
126
+ }
127
+ if (salvage.length > 0) {
128
+ console.log(`\n ${chalk.bold('Salvage')}`);
129
+ for (const s of salvage) {
130
+ console.log(` #${s.id} ${s.status} ${chalk.dim(s.createdAt.slice(5, 16))}`);
131
+ console.log(chalk.dim(` ${s.proposal.slice(0, 120)}`));
132
+ }
133
+ }
134
+ console.log('');
135
+ }
136
+ function pauseResumeCmd(idText, status, options) {
137
+ const id = parseId(idText);
138
+ if (id === null) {
139
+ console.log(chalk.yellow(' Usage: uap mission pause <id> | uap mission resume <id>'));
140
+ process.exitCode = 1;
141
+ return;
142
+ }
143
+ const db = dbFor(options);
144
+ const ok = setMissionStatus(db, id, status);
145
+ console.log(ok
146
+ ? chalk.green(` ✓ mission #${id} ${status === 'paused' ? 'paused (the daemon will not touch it)' : 'resumed'}`)
147
+ : chalk.yellow(` mission #${id} not found`));
148
+ if (!ok)
149
+ process.exitCode = 1;
150
+ }
151
+ function replanCmd(idText, options) {
152
+ const id = parseId(idText);
153
+ const acceptance = (options.acceptance ?? '').trim();
154
+ const reason = (options.reason ?? '').trim();
155
+ if (id === null || !acceptance || !reason) {
156
+ console.log(chalk.yellow(' Usage: uap mission replan <id> --acceptance "<new>" --reason "<why>"'));
157
+ process.exitCode = 1;
158
+ return;
159
+ }
160
+ const db = dbFor(options);
161
+ const mission = replanAcceptance(db, id, acceptance, reason);
162
+ console.log(chalk.green(` ✓ mission #${id} replanned (acceptance frozen ${mission.acceptanceHash.slice(0, 12)}…; prior recorded, run link reset)`));
163
+ }
164
+ function salvageCmd(text, options) {
165
+ const db = dbFor(options);
166
+ const sub = text.trim();
167
+ if (sub === '' || sub === 'list') {
168
+ const items = listSalvage(db, {
169
+ ...(options.status ? { status: options.status } : {}),
170
+ });
171
+ if (items.length === 0) {
172
+ console.log(chalk.dim(' No salvage proposals.'));
173
+ return;
174
+ }
175
+ console.log(chalk.bold('\n Salvage proposals (approval-gated)\n'));
176
+ for (const s of items) {
177
+ const st = s.status === 'proposed' ? chalk.cyan('proposed') : s.status === 'approved' ? chalk.green('approved') : chalk.gray('rejected');
178
+ console.log(` #${s.id} ${st} ${chalk.dim(`mission #${s.missionId} · ${s.createdAt.slice(5, 16)}`)}`);
179
+ console.log(` ${s.proposal.slice(0, 130)}`);
180
+ }
181
+ console.log('');
182
+ return;
183
+ }
184
+ const verb = sub.split(/\s+/)[0];
185
+ const id = parseId(sub.split(/\s+/)[1] ?? '');
186
+ if ((verb !== 'approve' && verb !== 'reject') || id === null) {
187
+ console.log(chalk.yellow(' Usage: uap mission salvage list | approve <id> | reject <id>'));
188
+ process.exitCode = 1;
189
+ return;
190
+ }
191
+ const decided = decideSalvage(db, id, verb === 'approve' ? 'approved' : 'rejected');
192
+ console.log(chalk.green(` ✓ salvage #${id} ${decided.status}`));
193
+ }
194
+ export async function missionCommand(sub, text, options = {}) {
195
+ switch (sub) {
196
+ case 'create':
197
+ await createCmd(text, options);
198
+ break;
199
+ case 'list':
200
+ listCmd(options);
201
+ break;
202
+ case 'show':
203
+ showCmd(text, options);
204
+ break;
205
+ case 'pause':
206
+ pauseResumeCmd(text, 'paused', options);
207
+ break;
208
+ case 'resume':
209
+ pauseResumeCmd(text, 'active', options);
210
+ break;
211
+ case 'replan':
212
+ replanCmd(text, options);
213
+ break;
214
+ case 'salvage':
215
+ salvageCmd(text, options);
216
+ break;
217
+ case 'poll':
218
+ await orchPollCommand(options);
219
+ break;
220
+ default:
221
+ console.log(chalk.yellow(' Usage: uap mission create|list|show|pause|resume|replan|salvage|poll …'));
222
+ process.exitCode = 1;
223
+ }
224
+ }
225
+ //# sourceMappingURL=mission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission.js","sourceRoot":"","sources":["../../src/cli/mission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `uap mission poll` — the orchestrator's loop clock (Choir's `orch poll`).
3
+ * (Also registered as the hidden alias `uap orch poll` — NOT the same as
4
+ * `uap orchestrator on|off`, which toggles the in-deliver blackboard
5
+ * orchestrator.)
6
+ *
7
+ * uap mission poll one poll cycle over active missions, then exit
8
+ * uap mission poll --loop keep polling (daemon mode; systemd runs this)
9
+ * uap mission poll --interval N seconds between cycles (default 300)
10
+ * uap mission poll --json machine-readable per-mission reports
11
+ *
12
+ * One cycle: discover runs → sync attempt ledger → decide (poll-cycle.ts) →
13
+ * act (supervise / launch / relaunch with backoff / close / salvage-propose).
14
+ * The cycle NEVER throws: a mission in a bad state produces a report note,
15
+ * not a dead daemon.
16
+ */
17
+ export interface OrchOptions {
18
+ loop?: boolean;
19
+ interval?: string;
20
+ json?: boolean;
21
+ projectRoot?: string;
22
+ }
23
+ export declare const DEFAULT_POLL_INTERVAL_SECS = 300;
24
+ /** Clamp the --interval flag: finite and ≥ 10 s, else the default. PURE. */
25
+ export declare function clampPollIntervalSecs(raw: string | undefined): number;
26
+ export declare function orchPollCommand(options?: OrchOptions): Promise<void>;
27
+ //# sourceMappingURL=orch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orch.d.ts","sourceRoot":"","sources":["../../src/cli/orch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE;AASD,wBAAsB,eAAe,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC9E"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `uap mission poll` — the orchestrator's loop clock (Choir's `orch poll`).
3
+ * (Also registered as the hidden alias `uap orch poll` — NOT the same as
4
+ * `uap orchestrator on|off`, which toggles the in-deliver blackboard
5
+ * orchestrator.)
6
+ *
7
+ * uap mission poll one poll cycle over active missions, then exit
8
+ * uap mission poll --loop keep polling (daemon mode; systemd runs this)
9
+ * uap mission poll --interval N seconds between cycles (default 300)
10
+ * uap mission poll --json machine-readable per-mission reports
11
+ *
12
+ * One cycle: discover runs → sync attempt ledger → decide (poll-cycle.ts) →
13
+ * act (supervise / launch / relaunch with backoff / close / salvage-propose).
14
+ * The cycle NEVER throws: a mission in a bad state produces a report note,
15
+ * not a dead daemon.
16
+ */
17
+ import chalk from 'chalk';
18
+ import { runPollCycle } from '../mission/poll-executor.js';
19
+ export const DEFAULT_POLL_INTERVAL_SECS = 300;
20
+ /** Clamp the --interval flag: finite and ≥ 10 s, else the default. PURE. */
21
+ export function clampPollIntervalSecs(raw) {
22
+ const parsed = raw ? parseInt(raw, 10) : DEFAULT_POLL_INTERVAL_SECS;
23
+ return Number.isFinite(parsed) && parsed >= 10 ? parsed : DEFAULT_POLL_INTERVAL_SECS;
24
+ }
25
+ function printReport(report) {
26
+ console.log(` ${chalk.cyan(`mission #${report.missionId}`)} ${report.actions.length > 0 ? report.actions.join(', ') : 'no action'}`);
27
+ for (const note of report.notes)
28
+ console.log(chalk.dim(` ${note}`));
29
+ }
30
+ export async function orchPollCommand(options = {}) {
31
+ const projectRoot = options.projectRoot ?? process.cwd();
32
+ const intervalSecs = clampPollIntervalSecs(options.interval);
33
+ const cycle = async () => {
34
+ let reports;
35
+ try {
36
+ reports = await runPollCycle(projectRoot);
37
+ }
38
+ catch (e) {
39
+ // The cycle must never take the daemon down — a broken ledger or an
40
+ // unwritable project dir is a cycle error, not a process error.
41
+ console.error(chalk.red(`orch poll cycle failed: ${e instanceof Error ? e.message : String(e)}`));
42
+ return true;
43
+ }
44
+ if (options.json) {
45
+ console.log(JSON.stringify({ ts: new Date().toISOString(), missions: reports }, null, 2));
46
+ }
47
+ else if (reports.length > 0) {
48
+ console.log(chalk.bold(`\n orch poll — ${new Date().toISOString().slice(11, 19)}\n`));
49
+ for (const r of reports)
50
+ printReport(r);
51
+ console.log('');
52
+ }
53
+ else {
54
+ console.log(chalk.dim(`orch poll ${new Date().toISOString().slice(11, 19)} — no active missions`));
55
+ }
56
+ return true;
57
+ };
58
+ if (!options.loop) {
59
+ await cycle();
60
+ return;
61
+ }
62
+ // Daemon mode: sleep between cycles, forever. Each cycle is independent;
63
+ // a crash inside one is caught above, and systemd Restart=always covers
64
+ // anything that still escapes.
65
+ for (;;) {
66
+ await cycle();
67
+ await new Promise((r) => setTimeout(r, intervalSecs * 1000));
68
+ }
69
+ }
70
+ //# sourceMappingURL=orch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orch.js","sourceRoot":"","sources":["../../src/cli/orch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"systemd-services.d.ts","sourceRoot":"","sources":["../../src/cli/systemd-services.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CAmQ3B;AAGD,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,OAAO,GAAE,MAAqB,GAAG,MAAM,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB,GAAG,MAAM,GAAG,IAAI,CAQ1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,GAAE,MAAqB,GAC7B,MAAM,CAwBR"}
1
+ {"version":3,"file":"systemd-services.d.ts","sourceRoot":"","sources":["../../src/cli/systemd-services.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CA6T3B;AAGD,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,OAAO,GAAE,MAAqB,GAAG,MAAM,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB,GAAG,MAAM,GAAG,IAAI,CAQ1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,GAAE,MAAqB,GAC7B,MAAM,CAwBR"}
@@ -235,6 +235,50 @@ export function installSystemdUserServices(projectDir, options = {}) {
235
235
  'LLAMA_LOG_FILE=llama-server.log',
236
236
  '',
237
237
  ].join('\n'), installed, skipped, force);
238
+ // Orchestrator daemon — the loop clock over the mission ledger. Node and
239
+ // the CLI entrypoint are captured ABSOLUTE at install time: a systemd user
240
+ // unit's PATH does not include nvm, so `node`/`uap` lookups would fail.
241
+ //
242
+ // The `:-` defaults are deliberately UNQUOTED: inside a double-quoted
243
+ // assignment the enclosing quotes already make the expansion one word
244
+ // (spaces included), while single quotes would become LITERAL characters
245
+ // — `UAP_NODE="${X:-'/path'}"` yields a value starting with ' and the
246
+ // exec fails with 127 (observed live on first enable, 2026-10-03).
247
+ const orchScriptPath = join(scriptsDir, 'run-orch-poll-continuity.sh');
248
+ writeIfMissing(orchScriptPath, [
249
+ '#!/usr/bin/env bash',
250
+ 'set -euo pipefail',
251
+ '',
252
+ 'ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"',
253
+ `UAP_NODE="\${UAP_ORCH_NODE:-${process.execPath}}"`,
254
+ `UAP_CLI="\${UAP_ORCH_CLI:-${join(projectDir, 'dist', 'bin', 'cli.js')}}"`,
255
+ '',
256
+ '# The poll loop owns mission completion: every cycle re-decides what',
257
+ '# each active mission needs (supervise / launch / relaunch / salvage).',
258
+ 'cd "$ROOT_DIR"',
259
+ 'exec "$UAP_NODE" "$UAP_CLI" mission poll --loop --interval "${UAP_ORCH_POLL_INTERVAL:-300}"',
260
+ '',
261
+ ].join('\n'), installed, skipped, force);
262
+ chmodSync(orchScriptPath, 0o755);
263
+ const orchServicePath = join(userServiceDir, 'uap-orchestrator.service');
264
+ writeIfMissing(orchServicePath, [
265
+ '[Unit]',
266
+ 'Description=UAP Mission Orchestrator (durable goal loop clock)',
267
+ 'After=network-online.target uap-anthropic-proxy.service',
268
+ 'Wants=network-online.target',
269
+ '',
270
+ '[Service]',
271
+ 'Type=simple',
272
+ `WorkingDirectory=${projectDir}`,
273
+ `ExecStart=${orchScriptPath}`,
274
+ 'Restart=always',
275
+ 'RestartSec=10',
276
+ 'TimeoutStopSec=20',
277
+ '',
278
+ '[Install]',
279
+ 'WantedBy=default.target',
280
+ '',
281
+ ].join('\n'), installed, skipped, force);
238
282
  return {
239
283
  installed,
240
284
  skipped,
@@ -1 +1 @@
1
- {"version":3,"file":"systemd-services.js","sourceRoot":"","sources":["../../src/cli/systemd-services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"systemd-services.js","sourceRoot":"","sources":["../../src/cli/systemd-services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Deterministic merge gate — the Choir-uplift PR 2 of 2.
3
+ *
4
+ * The mission orchestrator (PR 1 / ADR-0003) keeps a mission moving until a
5
+ * deliver run reports DONE against its frozen acceptance. But a *report* is a
6
+ * claim. The merge gate is the last deterministic check between that claim and
7
+ * master: before work tied to a mission lands, the gate re-derives the verdict
8
+ * from recorded evidence — never from the run's self-report, and never by
9
+ * parsing acceptance text out of an instruction string (ADR-0003's documented
10
+ * seam: `verifyAcceptanceHash`, the marker hash, and the attempt ledger).
11
+ *
12
+ * Four checks, all deterministic (no model calls — the acceptance judge ran
13
+ * inside deliver; the gate verifies its RECORDED outcome, it does not re-judge):
14
+ *
15
+ * 1. provenance — the marker hash on the PR matches the mission's
16
+ * CURRENT frozen acceptance (a replan after the PR
17
+ * was cut supersedes the criteria it was built to).
18
+ * 2. green-recompute — fresh run-state says delivered, the final recorded
19
+ * iteration passed its gates (acceptanceMet == 1
20
+ * when the judge ran), and no salvage proposal
21
+ * awaits a ruling.
22
+ * 3. sorry-delta — stub markers in ADDED lines of non-test files and
23
+ * apology/escape phrasing in the run's declared
24
+ * summaries. A completion riddled with "TODO" and
25
+ * "sorry, I couldn't" is not a completion.
26
+ * 4. axiom-honesty — the diff does not touch gate infrastructure
27
+ * (enforcers, hooks, baselines, CI, or this gate
28
+ * itself) without explicit acknowledgment. A PR may
29
+ * not weaken the gates that judge it.
30
+ *
31
+ * The gate has NO environment escape hatch by design: `UAP_*_GATE_OFF` and
32
+ * friends are deliberately not consulted here. The only acknowledgment is the
33
+ * operator-visible `allowGateInfra` flag (CLI `--allow-gate-infra`, or a
34
+ * `gate-infra` PR label when wired into the merge queue).
35
+ */
36
+ import type { DeliverRunState } from './run-state.js';
37
+ export type MergeGateCheck = 'provenance' | 'green-recompute' | 'sorry-delta' | 'axiom-honesty';
38
+ /** One changed file: its path and ONLY the lines the diff ADDS (never the
39
+ * removed lines — deleting a TODO is progress, not a violation). Files that
40
+ * are deleted, renamed, or binary carry a path with empty `addedText` — the
41
+ * path itself is evidence for axiom-honesty. */
42
+ export interface ChangedFile {
43
+ path: string;
44
+ addedText: string;
45
+ }
46
+ /** The slice of run-state evidence the gate needs (seam-injected so tests and
47
+ * the merge queue can supply it without touching disk). */
48
+ export type GateRunState = Pick<DeliverRunState, 'status'> & {
49
+ history?: Array<{
50
+ passed: boolean;
51
+ acceptanceMet?: number;
52
+ }>;
53
+ phaseSummaries?: string[];
54
+ };
55
+ /**
56
+ * Tier-1 evidence: the gate-evidence artifact deliver records on success
57
+ * (`.uap/evidence/<candidateSha>.json`, uplift 1.4), binding every gate's
58
+ * exit code to the exact HEAD it proved. Production delivered runs persist
59
+ * WITHOUT a checkpoint (deliver clears it on success), so the artifact — not
60
+ * run-state history — is the seam that survives a real delivery.
61
+ */
62
+ export interface GateEvidenceCheck {
63
+ /** Artifact exists for the sha being landed. */
64
+ present: boolean;
65
+ /** Every recorded gate exited 0. */
66
+ gatesAllZero: boolean;
67
+ /** No gate-affecting environment hatches were set when gates ran. */
68
+ hatchesEmpty: boolean;
69
+ /** The artifact's candidateSha equals the sha being landed. */
70
+ shaMatches: boolean;
71
+ /** The sha the artifact was requested for (for detail messages). */
72
+ expectedSha: string;
73
+ }
74
+ export interface MergeGateInputs {
75
+ missionId: number;
76
+ /** Current frozen acceptance hash slice (8 hex chars) from the ledger. */
77
+ acceptanceHash8: string;
78
+ /** Marker slice carried by the work's provenance (`[mission:#N:hash8]`).
79
+ * The merge queue extracts it from the PR body; the standalone CLI passes
80
+ * the ledger's own slice (the ledger tamper check is the runner's job). */
81
+ markerHash8?: string;
82
+ /** Ledger integrity: the stored acceptance text still hashes to the stored
83
+ * hash (verifyAcceptanceHash). False means the ledger was hand-edited. */
84
+ ledgerIntact: boolean;
85
+ runState: GateRunState | null;
86
+ /** Tier-1 evidence artifact state (null when the caller cannot check). */
87
+ evidence: GateEvidenceCheck | null;
88
+ /** pid corroboration (PR-1 provenance discipline): the run-state pid
89
+ * matches the pid the orchestrator spawned. Undefined when either side is
90
+ * unknown. */
91
+ pidCorroborated?: boolean;
92
+ /** Salvage proposals for this mission still awaiting a ruling. */
93
+ openSalvageCount: number;
94
+ changedFiles: ChangedFile[];
95
+ /** Explicit operator acknowledgment for deliberate gate-infra changes. */
96
+ allowGateInfra?: boolean;
97
+ }
98
+ export interface MergeGateFinding {
99
+ check: MergeGateCheck;
100
+ ok: boolean;
101
+ detail: string;
102
+ }
103
+ export interface MergeGateResult {
104
+ missionId: number;
105
+ pass: boolean;
106
+ findings: MergeGateFinding[];
107
+ }
108
+ /**
109
+ * Stub markers in ADDED code. Applied to non-test, non-docs files: test
110
+ * suites legitimately stub seams (the house style injects stubs everywhere),
111
+ * and docs/ADRs legitimately quote the markers they describe. A `todo!()`
112
+ * left in production code is exactly the half-delivery this check exists to
113
+ * catch.
114
+ */
115
+ export declare const STUB_PATTERNS: Array<{
116
+ label: string;
117
+ re: RegExp;
118
+ }>;
119
+ /** Apology / escape phrasing — the "sorry delta". Scanned in added lines of
120
+ * every changed file and in the run's declared summaries. */
121
+ export declare const SORRY_PATTERNS: Array<{
122
+ label: string;
123
+ re: RegExp;
124
+ }>;
125
+ /**
126
+ * Paths that ARE the gate system. A diff touching any of these without
127
+ * `allowGateInfra` fails axiom-honesty — including the merge gate, its
128
+ * evidence gatherer, and the ledger functions the provenance and
129
+ * green-recompute checks consume: a PR may not weaken (or rewrite) the checks
130
+ * that judge it.
131
+ *
132
+ * Deliberately hard-coded in source, not a config file: an externalized list
133
+ * could be edited by the very PR it judges, and any edit to THIS list trips
134
+ * axiom-honesty against the gate itself (the list protects itself by being
135
+ * the gate — architect review F6).
136
+ */
137
+ export declare const GATE_INFRA_PREFIXES: string[];
138
+ /**
139
+ * PURE decision core. Every check runs and reports (a full finding list, not
140
+ * first-fail) so an operator sees every reason at once; `pass` is the AND of
141
+ * all findings.
142
+ */
143
+ export declare function evaluateMergeGate(inputs: MergeGateInputs): MergeGateResult;
144
+ /**
145
+ * Extract the mission provenance marker from free text (a PR title or body).
146
+ * Prefix-pinned like the poll-executor's parser: the bracketed form must match
147
+ * exactly, so argv injection and partial collisions cannot forge linkage.
148
+ */
149
+ export declare function missionMarkerOf(text: string): {
150
+ missionId: number;
151
+ hash8: string;
152
+ } | null;
153
+ /**
154
+ * Parse a unified diff into changed files with their ADDED lines. Accepts the
155
+ * output of `git diff --unified=0 <base>...HEAD` and `gh pr diff`. Pure — the
156
+ * command execution lives in the callers, tests exercise only this parser.
157
+ *
158
+ * Path coverage is the security property: DELETED files (`+++ /dev/null`),
159
+ * RENAMED files (no `+++` line at all), and BINARY files (no headers) must all
160
+ * reach the axiom-honesty prefix match — `git rm .codex/hooks/x.sh` is the
161
+ * purest form of weakening a gate, so the deleted path is captured from the
162
+ * `diff --git` / `--- a/` lines (security review P1, architect F1).
163
+ *
164
+ * An ADDED content line that itself starts with `+++` is not misread as a
165
+ * header: `+++` only opens a file when the previous line was its `---` pair.
166
+ */
167
+ export declare function parseUnifiedDiff(diff: string): ChangedFile[];
168
+ //# sourceMappingURL=merge-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-gate.d.ts","sourceRoot":"","sources":["../../src/delivery/merge-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAAG,eAAe,CAAC;AAEhG;;;iDAGiD;AACjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;4DAC4D;AAC5D,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;IAC3D,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB;;gFAE4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;+EAC2E;IAC3E,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC;;mBAEe;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAU9D,CAAC;AAEF;8DAC8D;AAC9D,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAI/D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,UAa/B,CAAC;AA6BF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAiJ1E;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGzF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAwD5D"}