@miller-tech/uap 1.170.0 → 1.172.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 (73) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/bin/cli.js +26 -0
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/browser/web-browser.d.ts +17 -0
  5. package/dist/browser/web-browser.d.ts.map +1 -1
  6. package/dist/browser/web-browser.js +36 -0
  7. package/dist/browser/web-browser.js.map +1 -1
  8. package/dist/cli/interaction.d.ts +29 -0
  9. package/dist/cli/interaction.d.ts.map +1 -0
  10. package/dist/cli/interaction.js +217 -0
  11. package/dist/cli/interaction.js.map +1 -0
  12. package/dist/cli/verify.d.ts +6 -0
  13. package/dist/cli/verify.d.ts.map +1 -1
  14. package/dist/cli/verify.js +112 -7
  15. package/dist/cli/verify.js.map +1 -1
  16. package/dist/delivery/fidelity.d.ts +16 -0
  17. package/dist/delivery/fidelity.d.ts.map +1 -1
  18. package/dist/delivery/fidelity.js +7 -0
  19. package/dist/delivery/fidelity.js.map +1 -1
  20. package/dist/delivery/interaction/driver.d.ts +60 -0
  21. package/dist/delivery/interaction/driver.d.ts.map +1 -0
  22. package/dist/delivery/interaction/driver.js +18 -0
  23. package/dist/delivery/interaction/driver.js.map +1 -0
  24. package/dist/delivery/interaction/manifest.d.ts +84 -0
  25. package/dist/delivery/interaction/manifest.d.ts.map +1 -0
  26. package/dist/delivery/interaction/manifest.js +241 -0
  27. package/dist/delivery/interaction/manifest.js.map +1 -0
  28. package/dist/delivery/interaction/mine.d.ts +54 -0
  29. package/dist/delivery/interaction/mine.d.ts.map +1 -0
  30. package/dist/delivery/interaction/mine.js +218 -0
  31. package/dist/delivery/interaction/mine.js.map +1 -0
  32. package/dist/delivery/interaction/runner.d.ts +51 -0
  33. package/dist/delivery/interaction/runner.d.ts.map +1 -0
  34. package/dist/delivery/interaction/runner.js +277 -0
  35. package/dist/delivery/interaction/runner.js.map +1 -0
  36. package/dist/delivery/interaction/types.d.ts +223 -0
  37. package/dist/delivery/interaction/types.d.ts.map +1 -0
  38. package/dist/delivery/interaction/types.js +19 -0
  39. package/dist/delivery/interaction/types.js.map +1 -0
  40. package/dist/delivery/interaction/verdict.d.ts +26 -0
  41. package/dist/delivery/interaction/verdict.d.ts.map +1 -0
  42. package/dist/delivery/interaction/verdict.js +139 -0
  43. package/dist/delivery/interaction/verdict.js.map +1 -0
  44. package/dist/delivery/interaction/watchdog.d.ts +82 -0
  45. package/dist/delivery/interaction/watchdog.d.ts.map +1 -0
  46. package/dist/delivery/interaction/watchdog.js +210 -0
  47. package/dist/delivery/interaction/watchdog.js.map +1 -0
  48. package/dist/delivery/interaction/web-driver.d.ts +102 -0
  49. package/dist/delivery/interaction/web-driver.d.ts.map +1 -0
  50. package/dist/delivery/interaction/web-driver.js +306 -0
  51. package/dist/delivery/interaction/web-driver.js.map +1 -0
  52. package/dist/delivery/interaction-gate.d.ts +45 -0
  53. package/dist/delivery/interaction-gate.d.ts.map +1 -0
  54. package/dist/delivery/interaction-gate.js +248 -0
  55. package/dist/delivery/interaction-gate.js.map +1 -0
  56. package/dist/delivery/mission-acceptance.d.ts +2 -0
  57. package/dist/delivery/mission-acceptance.d.ts.map +1 -1
  58. package/dist/delivery/mission-acceptance.js +23 -0
  59. package/dist/delivery/mission-acceptance.js.map +1 -1
  60. package/dist/delivery/vision-judge.d.ts +21 -0
  61. package/dist/delivery/vision-judge.d.ts.map +1 -1
  62. package/dist/delivery/vision-judge.js +96 -0
  63. package/dist/delivery/vision-judge.js.map +1 -1
  64. package/dist/types/config.d.ts +20 -0
  65. package/dist/types/config.d.ts.map +1 -1
  66. package/dist/types/config.js +7 -0
  67. package/dist/types/config.js.map +1 -1
  68. package/package.json +1 -1
  69. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  70. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  71. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
  72. package/tools/agents/scripts/anthropic_proxy.py +14 -5
  73. package/tools/agents/tests/test_proxy_auth_headers.py +82 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Interaction gate — runs the artifact's own promises against real input.
3
+ *
4
+ * Sits between the execution smoke gate and the visual gate:
5
+ *
6
+ * build → execution smoke (does it load) → INTERACTION (does it do what it
7
+ * promised) → visual (does it look right) → acceptance (is anything missing)
8
+ *
9
+ * Before vision, for two reasons. A vision judge grades a FRAME, and a frozen
10
+ * frame is indistinguishable from a working one — so a broken build can collect
11
+ * a passing aesthetic score, and the fix loop then chases palette notes instead
12
+ * of the defect. And the vision pass costs a headless render plus a model call,
13
+ * which is waste on a build that cannot be played.
14
+ *
15
+ * SECURITY NOTE: manifest expression strings are interpolated into script that
16
+ * runs in the driving browser, so the manifest is a code-bearing input. It is
17
+ * kept under `.uap/interaction/` — which the self-protect enforcer denies to the
18
+ * agent — and every expression is checked for mutation before use. Both are load
19
+ * bearing: the write-protection is a security control, not just an integrity one.
20
+ */
21
+ import type { InteractionDriver } from './interaction/driver.js';
22
+ import type { InteractionManifest, InteractionVerdict, ProbeMode } from './interaction/types.js';
23
+ export interface InteractionGateOptions {
24
+ /** Supply the manifest directly (tests, or a caller that just mined one). */
25
+ manifest?: InteractionManifest;
26
+ /** Which probe modes to run. Default: core only. */
27
+ modes?: ProbeMode[];
28
+ /** Max fidelity: uncovered requirements block. */
29
+ strictCoverage?: boolean;
30
+ /** Injected driver (tests). Default: the real web driver. */
31
+ driverFactory?: (manifest: InteractionManifest) => InteractionDriver;
32
+ /** Overall budget; probes still running when it expires are reported skipped. */
33
+ budgetMs?: number;
34
+ /** Per-probe wall-clock bound. */
35
+ probeTimeoutMs?: number;
36
+ /** Requirements text, so a manifest mined from older requirements is flagged. */
37
+ specText?: string;
38
+ }
39
+ export declare const DEFAULT_BUDGET_MS = 300000;
40
+ /** Evidence path that cannot escape the evidence directory. */
41
+ export declare function evidencePathFor(dir: string, probeId: string): string | null;
42
+ export declare function runInteractionGate(projectRoot: string, options?: InteractionGateOptions): Promise<InteractionVerdict>;
43
+ /** One-line summary for the verify report. */
44
+ export declare function interactionSummary(v: InteractionVerdict): string;
45
+ //# sourceMappingURL=interaction-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-gate.d.ts","sourceRoot":"","sources":["../../src/delivery/interaction-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAeH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,oDAAoD;IACpD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,iBAAiB,CAAC;IACrE,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAiBzC,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3E;AAuMD,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAS7B;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAKhE"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Interaction gate — runs the artifact's own promises against real input.
3
+ *
4
+ * Sits between the execution smoke gate and the visual gate:
5
+ *
6
+ * build → execution smoke (does it load) → INTERACTION (does it do what it
7
+ * promised) → visual (does it look right) → acceptance (is anything missing)
8
+ *
9
+ * Before vision, for two reasons. A vision judge grades a FRAME, and a frozen
10
+ * frame is indistinguishable from a working one — so a broken build can collect
11
+ * a passing aesthetic score, and the fix loop then chases palette notes instead
12
+ * of the defect. And the vision pass costs a headless render plus a model call,
13
+ * which is waste on a build that cannot be played.
14
+ *
15
+ * SECURITY NOTE: manifest expression strings are interpolated into script that
16
+ * runs in the driving browser, so the manifest is a code-bearing input. It is
17
+ * kept under `.uap/interaction/` — which the self-protect enforcer denies to the
18
+ * agent — and every expression is checked for mutation before use. Both are load
19
+ * bearing: the write-protection is a security control, not just an integrity one.
20
+ */
21
+ import { mkdirSync, rmSync } from 'node:fs';
22
+ import { resolve, sep } from 'node:path';
23
+ import { detectArtifactType, findWebEntryDir } from './execution-gate.js';
24
+ import { coverageOf, loadManifestDetailed, manifestIsStale } from './interaction/manifest.js';
25
+ import { runProbe } from './interaction/runner.js';
26
+ import { judgeInteraction, skippedVerdict } from './interaction/verdict.js';
27
+ import { judgeWatchdog, parseWatchdogSample, watchdogSampleScript, } from './interaction/watchdog.js';
28
+ import { WebInteractionDriver, evidenceDir } from './interaction/web-driver.js';
29
+ import { delay } from './interaction/driver.js';
30
+ export const DEFAULT_BUDGET_MS = 300_000;
31
+ /** Sample the watchdog without letting a failure there break the run. */
32
+ async function sampleWatchdog(driver, watchExprs) {
33
+ try {
34
+ const raw = driver.watchdogSample
35
+ ? await driver.watchdogSample(watchExprs)
36
+ : await driver.read(`(${watchdogSampleScript(watchExprs)})()`);
37
+ return parseWatchdogSample(raw);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /** Evidence path that cannot escape the evidence directory. */
44
+ export function evidencePathFor(dir, probeId) {
45
+ const candidate = resolve(dir, `${probeId}.png`);
46
+ const root = resolve(dir);
47
+ return candidate === root || candidate.startsWith(root + sep) ? candidate : null;
48
+ }
49
+ async function runGate(projectRoot, options) {
50
+ let manifest = options.manifest;
51
+ if (!manifest) {
52
+ const loaded = loadManifestDetailed(projectRoot);
53
+ if (loaded.status === 'absent') {
54
+ return skippedVerdict('no interaction manifest — run `uap interaction mine` to derive probes from the requirements');
55
+ }
56
+ if (loaded.status === 'invalid') {
57
+ // NOT a skip. An invalid manifest is a tampered or broken acceptance
58
+ // criterion; reporting it as "no manifest" would tell the operator to
59
+ // re-mine and launder the problem away.
60
+ return {
61
+ passed: false,
62
+ skipped: false,
63
+ results: [],
64
+ coverage: { total: 0, covered: 0, uncovered: [] },
65
+ feedback: `interaction gate: the manifest at .uap/interaction/manifest.json is INVALID and was not run:\n` +
66
+ loaded.problems.map((p) => ` · ${p}`).join('\n'),
67
+ };
68
+ }
69
+ manifest = loaded.manifest;
70
+ }
71
+ const modes = options.modes ?? ['core'];
72
+ const probes = manifest.probes.filter((p) => modes.includes(p.mode));
73
+ // Coverage over the probes that will RUN, not the whole manifest.
74
+ const coverage = coverageOf(manifest, probes);
75
+ if (probes.length === 0) {
76
+ return skippedVerdict(`manifest has no probes for mode(s) ${modes.join(', ')}`, coverage);
77
+ }
78
+ // Only the web adapter exists. Silently handing a `cli`/`http` manifest to the
79
+ // web driver would spin up a static server and a browser for an artifact that
80
+ // is neither, and report the resulting mess as an artifact defect.
81
+ if (manifest.kind !== 'web') {
82
+ return skippedVerdict(`no driver for artifact kind '${manifest.kind}' yet — only 'web' is implemented`, coverage);
83
+ }
84
+ const webRoot = findWebEntryDir(projectRoot);
85
+ if (!webRoot && detectArtifactType(projectRoot) !== 'web') {
86
+ return skippedVerdict('manifest declares a web artifact but no web entry point was found', coverage);
87
+ }
88
+ const evidence = evidenceDir(projectRoot);
89
+ try {
90
+ // Clear stale evidence so screenshots always describe THIS run — leftovers
91
+ // from probes that no longer exist read as current evidence.
92
+ rmSync(evidence, { recursive: true, force: true });
93
+ mkdirSync(evidence, { recursive: true });
94
+ }
95
+ catch {
96
+ /* evidence is best-effort */
97
+ }
98
+ const driver = options.driverFactory?.(manifest) ??
99
+ new WebInteractionDriver({
100
+ projectRoot,
101
+ entry: manifest.entry,
102
+ ...(webRoot ? { webRoot } : {}),
103
+ });
104
+ const budgetMs = options.budgetMs ?? DEFAULT_BUDGET_MS;
105
+ const startedAt = Date.now();
106
+ const results = [];
107
+ const samples = [];
108
+ const watchExprs = manifest.watch ?? [];
109
+ let ranAny = false;
110
+ let segment = 0;
111
+ const resetProblems = [];
112
+ try {
113
+ try {
114
+ await driver.start();
115
+ }
116
+ catch (e) {
117
+ const probe = driver;
118
+ const launched = typeof probe.didLaunch === 'function' && probe.didLaunch();
119
+ if (!launched) {
120
+ // Infrastructure: no browser, no server. The gate has no opinion.
121
+ return skippedVerdict(`driver unavailable (${String(e).slice(0, 160)})`, coverage);
122
+ }
123
+ // The browser came up and the ARTIFACT failed to load. That is a defect.
124
+ return {
125
+ passed: false,
126
+ skipped: false,
127
+ results: [],
128
+ coverage,
129
+ feedback: `interaction gate: the artifact failed to load in a real browser — ` +
130
+ `${String(e).slice(0, 200)}\n` +
131
+ `Nothing could be driven, so no behaviour was verified. Check the entry ` +
132
+ `path (${manifest.entry}) resolves and the page reaches 'load'.`,
133
+ };
134
+ }
135
+ const first = await sampleWatchdog(driver, watchExprs);
136
+ if (first)
137
+ samples.push({ ...first, segment });
138
+ for (const probe of probes) {
139
+ if (Date.now() - startedAt > budgetMs) {
140
+ results.push({
141
+ probeId: probe.id,
142
+ description: probe.description,
143
+ mode: probe.mode,
144
+ requirementIds: probe.requirementIds ?? [],
145
+ passed: false,
146
+ skipped: true,
147
+ skipReason: `interaction budget of ${budgetMs}ms exhausted before this probe ran`,
148
+ assertions: [],
149
+ errors: [],
150
+ durationMs: 0,
151
+ });
152
+ continue;
153
+ }
154
+ // Fresh page per probe: shared state makes results order-dependent and
155
+ // reports one probe's damage as the next probe's defect.
156
+ if (ranAny) {
157
+ if (driver.reset) {
158
+ try {
159
+ await driver.reset();
160
+ segment++;
161
+ }
162
+ catch (e) {
163
+ // Silence here would read exactly like a properly isolated run,
164
+ // while every later probe inherits the previous probe's state.
165
+ resetProblems.push(`before ${probe.id}: ${String(e).slice(0, 120)}`);
166
+ }
167
+ }
168
+ else {
169
+ resetProblems.push(`before ${probe.id}: this driver cannot reset between probes`);
170
+ }
171
+ }
172
+ ranAny = true;
173
+ const evPath = evidencePathFor(evidence, probe.id);
174
+ results.push(await runProbe(driver, probe, {
175
+ ...(evPath ? { evidencePath: evPath } : {}),
176
+ // Leave room inside the overall budget so a single probe cannot eat it.
177
+ ...(options.probeTimeoutMs ? { timeoutMs: options.probeTimeoutMs } : {}),
178
+ }));
179
+ const s = await sampleWatchdog(driver, watchExprs);
180
+ if (s)
181
+ samples.push({ ...s, segment });
182
+ }
183
+ // A final short window so "is the loop still ticking NOW" is answered by
184
+ // fresh frames rather than a cumulative count from earlier in the run.
185
+ await delay(600);
186
+ const last = await sampleWatchdog(driver, watchExprs);
187
+ if (last)
188
+ samples.push({ ...last, segment });
189
+ let driverErrors = [];
190
+ try {
191
+ driverErrors = driver.errors();
192
+ }
193
+ catch {
194
+ /* an unreadable error channel must not abort the verdict */
195
+ }
196
+ const watchdog = samples.length > 0 ? judgeWatchdog(samples, driverErrors) : undefined;
197
+ // Coverage from the probes that actually RAN — a probe skipped for budget
198
+ // exhaustion must not mark its requirement covered.
199
+ const ranIds = new Set(results.filter((r) => !r.skipped).map((r) => r.probeId));
200
+ const ranCoverage = coverageOf(manifest, probes.filter((p) => ranIds.has(p.id)));
201
+ const verdict = judgeInteraction(manifest, results, ranCoverage, watchdog, {
202
+ ...(options.strictCoverage ? { strictCoverage: true } : {}),
203
+ });
204
+ if (resetProblems.length > 0) {
205
+ verdict.feedback +=
206
+ `\n⚠ ${resetProblems.length} probe(s) ran WITHOUT a clean reset, so they inherited the ` +
207
+ `previous probe's state and their results may be order-dependent:\n ` +
208
+ resetProblems.slice(0, 5).join('\n ');
209
+ }
210
+ if (options.specText && manifestIsStale(manifest, options.specText)) {
211
+ verdict.feedback +=
212
+ `\n⚠ these probes were mined from DIFFERENT requirements than the current ones — ` +
213
+ `re-run \`uap interaction mine\`. A pass here is evidence about the old requirements.`;
214
+ }
215
+ return verdict;
216
+ }
217
+ finally {
218
+ // Guarded: a rejecting stop() in a bare `finally` REPLACES the computed
219
+ // verdict with a throw, which would escape runVerify and destroy its
220
+ // documented exit-code contract.
221
+ try {
222
+ await driver.stop();
223
+ }
224
+ catch {
225
+ /* teardown failure must not lose the verdict */
226
+ }
227
+ }
228
+ }
229
+ export async function runInteractionGate(projectRoot, options = {}) {
230
+ try {
231
+ return await runGate(projectRoot, options);
232
+ }
233
+ catch (e) {
234
+ // Never let this gate crash `uap verify`. The visual gate degrades the same
235
+ // way; an exception here would bypass the 0/1/3 exit contract the Stop hook
236
+ // depends on and abort the session with a stack trace.
237
+ return skippedVerdict(`interaction gate error: ${String(e).slice(0, 200)}`);
238
+ }
239
+ }
240
+ /** One-line summary for the verify report. */
241
+ export function interactionSummary(v) {
242
+ if (v.skipped)
243
+ return `interaction gate: SKIPPED (${v.skipReason ?? 'no reason'})`;
244
+ const ran = v.results.filter((r) => !r.skipped).length;
245
+ const ok = v.results.filter((r) => !r.skipped && r.passed).length;
246
+ return `interaction gate: ${v.passed ? 'PASS' : 'FAIL'} — ${ok}/${ran} probe(s), requirements covered ${v.coverage.covered}/${v.coverage.total}`;
247
+ }
248
+ //# sourceMappingURL=interaction-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-gate.js","sourceRoot":"","sources":["../../src/delivery/interaction-gate.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ import type { AcceptanceGate, LoopExecutor } from './convergence-loop.js';
20
20
  import { runAcceptanceGate, type AcceptanceResult } from './acceptance-judge.js';
21
21
  import { runExecutionGate } from './execution-gate.js';
22
22
  import { runVisualGate } from './visual-gate.js';
23
+ import { runInteractionGate } from './interaction-gate.js';
23
24
  import { buildUserPathsNote } from './user-validation.js';
24
25
  import type { SpecRegistry } from './spec-registry.js';
25
26
  /**
@@ -53,6 +54,7 @@ export interface MissionAcceptanceDeps {
53
54
  /** Test seams — default to the real gates. */
54
55
  executionGate?: typeof runExecutionGate;
55
56
  visualGate?: typeof runVisualGate;
57
+ interactionGate?: typeof runInteractionGate;
56
58
  visionReview?: typeof visionAcceptanceFeedback;
57
59
  judge?: typeof runAcceptanceGate;
58
60
  userPathsNote?: typeof buildUserPathsNote;
@@ -1 +1 @@
1
- {"version":3,"file":"mission-acceptance.d.ts","sourceRoot":"","sources":["../../src/delivery/mission-acceptance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EAEjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAqB,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,gBAAgB,EACnB,iBAAiB,EAAE,OAAO,GACzB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAavD;AAED,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,KAAK,EAAE,YAAY,CAAC;IACpB,oDAAoD;IACpD,aAAa,EAAE,YAAY,CAAC;IAC5B;8EAC0E;IAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/C,KAAK,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAiHtF"}
1
+ {"version":3,"file":"mission-acceptance.d.ts","sourceRoot":"","sources":["../../src/delivery/mission-acceptance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EAEjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAqB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,gBAAgB,EACnB,iBAAiB,EAAE,OAAO,GACzB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAavD;AAED,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,KAAK,EAAE,YAAY,CAAC;IACpB,oDAAoD;IACpD,aAAa,EAAE,YAAY,CAAC;IAC5B;8EAC0E;IAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/C,KAAK,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAiItF"}
@@ -19,6 +19,7 @@
19
19
  import { runAcceptanceGate, formatAcceptanceReport, } from './acceptance-judge.js';
20
20
  import { runExecutionGate } from './execution-gate.js';
21
21
  import { runVisualGate, visualRuntimeNote } from './visual-gate.js';
22
+ import { runInteractionGate } from './interaction-gate.js';
22
23
  import { resolveFidelity } from './fidelity.js';
23
24
  import { buildUserPathsNote } from './user-validation.js';
24
25
  /**
@@ -70,6 +71,12 @@ export async function visionAcceptanceFeedback(root, spec, screenshots) {
70
71
  const fidelity = resolveFidelity(root);
71
72
  if (!fidelity.max)
72
73
  return null;
74
+ // Mirrors verify: the aesthetic judge only fails a turn when a project has
75
+ // opted back into blocking. Otherwise the loop would keep rejecting a
76
+ // working build over findings that are false against the frame graded —
77
+ // and the generator would burn turns "fixing" correct rendering code.
78
+ if (fidelity.visionBlocking !== 'block')
79
+ return null;
73
80
  if (fidelity.visionEndpoint && !process.env.UAP_VISION_ENDPOINT)
74
81
  process.env.UAP_VISION_ENDPOINT = fidelity.visionEndpoint;
75
82
  if (fidelity.visionModel && !process.env.UAP_VISION_MODEL)
@@ -95,6 +102,7 @@ export async function visionAcceptanceFeedback(root, spec, screenshots) {
95
102
  export function buildMissionAcceptanceGate(deps) {
96
103
  const executionGate = deps.executionGate ?? runExecutionGate;
97
104
  const visualGate = deps.visualGate ?? runVisualGate;
105
+ const interactionGate = deps.interactionGate ?? runInteractionGate;
98
106
  const judge = deps.judge ?? runAcceptanceGate;
99
107
  const userPathsNote = deps.userPathsNote ?? buildUserPathsNote;
100
108
  // eslint-disable-next-line no-console
@@ -136,6 +144,21 @@ export function buildMissionAcceptanceGate(deps) {
136
144
  // fix the broken UX first (the required ordering).
137
145
  const uv = userPathsNote(root);
138
146
  const behavioralFailing = Boolean(uv?.trusted && /User-path validation FAILED/.test(uv.note));
147
+ // Interaction gate: the loop must converge against the SAME behavioural
148
+ // bar `uap verify` enforces. Running it only on the verify side would
149
+ // recreate the Generator≠Evaluator divergence this file already records
150
+ // (run Y): the loop converges happily, then the release gate rejects the
151
+ // result with feedback the loop never saw and cannot act on.
152
+ if (!behavioralFailing) {
153
+ const interaction = await interactionGate(root, {
154
+ ...(fidelity.max
155
+ ? { modes: ['core', 'accelerated', 'soak'], strictCoverage: true }
156
+ : {}),
157
+ });
158
+ if (!interaction.skipped && !interaction.passed && (deps.primary || fidelity.max)) {
159
+ return { passed: false, feedback: interaction.feedback };
160
+ }
161
+ }
139
162
  if (!behavioralFailing) {
140
163
  // Visual gate: watch the artifact RUN — the observation summary becomes
141
164
  // judge evidence (a code-evidence judge cannot see a never-started
@@ -1 +1 @@
1
- {"version":3,"file":"mission-acceptance.js","sourceRoot":"","sources":["../../src/delivery/mission-acceptance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mission-acceptance.js","sourceRoot":"","sources":["../../src/delivery/mission-acceptance.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,27 @@ export declare function readDesignContext(projectRoot: string): string;
44
44
  * unconfigured or on any failure.
45
45
  */
46
46
  export declare function judgeScreenshots(screenshotPaths: string[], spec: string, designContext?: string, fetchImpl?: typeof fetchModelWithRetry): Promise<VisionVerdict | null>;
47
+ /**
48
+ * Drop findings the model cannot substantiate from the image.
49
+ *
50
+ * Diagnosed live (octopus_invaders_v3, 2026-07-26): asked CHECKABLE questions
51
+ * about a frame, the model answered accurately — stars visible, nebula
52
+ * gradients present, HUD text read correctly, health bar "full". Asked for a
53
+ * `findings` ARRAY, the same model on the same frame then reported "no
54
+ * nebulae", "UI elements appear randomly placed" and a health bar overflowing
55
+ * its container. Perception was fine; the list-shaped task was not — a
56
+ * `findings: []` slot plus a "strict reviewer" persona gets filled whether or
57
+ * not defects exist, and single-frame input invites claims about animation and
58
+ * hit-feedback that one still frame cannot show.
59
+ *
60
+ * So each finding is put back to the model with the image and asked for the
61
+ * evidence. Anything it cannot point to is discarded rather than shipped as a
62
+ * defect for an agent to "fix" in working code.
63
+ */
64
+ export declare function corroborateFindings(findings: string[], screenshotPaths: string[], fetchImpl?: typeof fetchModelWithRetry): Promise<{
65
+ kept: string[];
66
+ dropped: string[];
67
+ }>;
47
68
  /** One-line advisory summary for reports/evidence. */
48
69
  export declare function visionSummary(verdict: VisionVerdict | null): string | null;
49
70
  //# sourceMappingURL=vision-judge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vision-judge.d.ts","sourceRoot":"","sources":["../../src/delivery/vision-judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiC9D;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgC7D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EAAE,EACzB,IAAI,EAAE,MAAM,EACZ,aAAa,SAAK,EAClB,SAAS,CAAC,EAAE,OAAO,mBAAmB,GACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6F/B;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAI1E"}
1
+ {"version":3,"file":"vision-judge.d.ts","sourceRoot":"","sources":["../../src/delivery/vision-judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiC9D;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgC7D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EAAE,EACzB,IAAI,EAAE,MAAM,EACZ,aAAa,SAAK,EAClB,SAAS,CAAC,EAAE,OAAO,mBAAmB,GACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6F/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,CAAC,EAAE,OAAO,mBAAmB,GACrC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6EhD;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAI1E"}
@@ -228,6 +228,102 @@ export async function judgeScreenshots(screenshotPaths, spec, designContext = ''
228
228
  return null;
229
229
  }
230
230
  }
231
+ /**
232
+ * Drop findings the model cannot substantiate from the image.
233
+ *
234
+ * Diagnosed live (octopus_invaders_v3, 2026-07-26): asked CHECKABLE questions
235
+ * about a frame, the model answered accurately — stars visible, nebula
236
+ * gradients present, HUD text read correctly, health bar "full". Asked for a
237
+ * `findings` ARRAY, the same model on the same frame then reported "no
238
+ * nebulae", "UI elements appear randomly placed" and a health bar overflowing
239
+ * its container. Perception was fine; the list-shaped task was not — a
240
+ * `findings: []` slot plus a "strict reviewer" persona gets filled whether or
241
+ * not defects exist, and single-frame input invites claims about animation and
242
+ * hit-feedback that one still frame cannot show.
243
+ *
244
+ * So each finding is put back to the model with the image and asked for the
245
+ * evidence. Anything it cannot point to is discarded rather than shipped as a
246
+ * defect for an agent to "fix" in working code.
247
+ */
248
+ export async function corroborateFindings(findings, screenshotPaths, fetchImpl) {
249
+ const kept = [];
250
+ const dropped = [];
251
+ if (!visionJudgeConfigured() || findings.length === 0) {
252
+ return { kept: findings, dropped };
253
+ }
254
+ const endpoint = process.env.UAP_VISION_ENDPOINT.replace(/\/$/, '');
255
+ const model = process.env.UAP_VISION_MODEL;
256
+ const doFetch = fetchImpl ?? fetchModelWithRetry;
257
+ const images = screenshotPaths.slice(0, MAX_IMAGES).map((p) => ({
258
+ type: 'image_url',
259
+ image_url: { url: `data:image/png;base64,${readFileSync(p).toString('base64')}` },
260
+ }));
261
+ for (const finding of findings.slice(0, MAX_FINDINGS)) {
262
+ try {
263
+ const res = await doFetch(`${endpoint}/chat/completions`, {
264
+ method: 'POST',
265
+ headers: {
266
+ 'Content-Type': 'application/json',
267
+ ...(process.env.UAP_VISION_API_KEY ? { Authorization: `Bearer ${process.env.UAP_VISION_API_KEY}` } : {}),
268
+ },
269
+ body: JSON.stringify({
270
+ model,
271
+ max_tokens: 220,
272
+ temperature: 0,
273
+ chat_template_kwargs: { enable_thinking: false },
274
+ messages: [
275
+ {
276
+ role: 'user',
277
+ content: [
278
+ {
279
+ type: 'text',
280
+ text: 'A reviewer made this claim about the image:\n"' +
281
+ finding.slice(0, 400) +
282
+ '"\n\nYour job is to CHECK it, not to agree with it. Answer ONLY JSON: ' +
283
+ '{"visible": <true|false>, "where": "<region of the image that shows it, or empty>"}\n' +
284
+ 'Answer false if the claim is about motion, animation, timing, or what happens ' +
285
+ 'when the user acts — a single still frame cannot show those. ' +
286
+ 'Answer false if it is a matter of taste rather than something visible. ' +
287
+ 'When in doubt, answer false.',
288
+ },
289
+ ...images,
290
+ ],
291
+ },
292
+ ],
293
+ }),
294
+ });
295
+ if (!res.ok) {
296
+ // Cannot check ⇒ cannot substantiate. Withhold rather than assert.
297
+ dropped.push(finding);
298
+ continue;
299
+ }
300
+ const data = (await res.json());
301
+ const raw = data.choices?.[0]?.message?.content || data.choices?.[0]?.message?.reasoning_content || '';
302
+ const start = raw.indexOf('{');
303
+ const end = raw.lastIndexOf('}');
304
+ let visible = false;
305
+ let where = '';
306
+ if (start >= 0 && end > start) {
307
+ try {
308
+ const j = JSON.parse(raw.slice(start, end + 1));
309
+ visible = j.visible === true;
310
+ where = typeof j.where === 'string' ? j.where : '';
311
+ }
312
+ catch {
313
+ visible = false;
314
+ }
315
+ }
316
+ if (visible && where.trim())
317
+ kept.push(`${finding} [seen: ${where.trim().slice(0, 80)}]`);
318
+ else
319
+ dropped.push(finding);
320
+ }
321
+ catch {
322
+ dropped.push(finding);
323
+ }
324
+ }
325
+ return { kept, dropped };
326
+ }
231
327
  /** One-line advisory summary for reports/evidence. */
232
328
  export function visionSummary(verdict) {
233
329
  if (!verdict)
@@ -1 +1 @@
1
- {"version":3,"file":"vision-judge.js","sourceRoot":"","sources":["../../src/delivery/vision-judge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vision-judge.js","sourceRoot":"","sources":["../../src/delivery/vision-judge.ts"],"names":[],"mappings":"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"}