@miller-tech/uap 1.94.0 → 1.96.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/benchmarks/benchmark.d.ts +4 -4
- package/dist/benchmarks/paired/types.d.ts +2 -2
- package/dist/bin/cli.js +18 -2
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/deliver.d.ts +5 -0
- package/dist/cli/deliver.d.ts.map +1 -1
- package/dist/cli/deliver.js +275 -14
- package/dist/cli/deliver.js.map +1 -1
- package/dist/cli/task.d.ts +1 -1
- package/dist/cli/task.d.ts.map +1 -1
- package/dist/cli/task.js +64 -0
- package/dist/cli/task.js.map +1 -1
- package/dist/coordination/reactor.d.ts.map +1 -1
- package/dist/coordination/reactor.js +14 -0
- package/dist/coordination/reactor.js.map +1 -1
- package/dist/delivery/applier.d.ts.map +1 -1
- package/dist/delivery/applier.js +3 -0
- package/dist/delivery/applier.js.map +1 -1
- package/dist/delivery/auto-mine.d.ts +30 -0
- package/dist/delivery/auto-mine.d.ts.map +1 -0
- package/dist/delivery/auto-mine.js +132 -0
- package/dist/delivery/auto-mine.js.map +1 -0
- package/dist/delivery/auto-optimizer.d.ts +6 -2
- package/dist/delivery/auto-optimizer.d.ts.map +1 -1
- package/dist/delivery/auto-optimizer.js +12 -5
- package/dist/delivery/auto-optimizer.js.map +1 -1
- package/dist/delivery/candidate-workspace.d.ts +32 -0
- package/dist/delivery/candidate-workspace.d.ts.map +1 -0
- package/dist/delivery/candidate-workspace.js +117 -0
- package/dist/delivery/candidate-workspace.js.map +1 -0
- package/dist/delivery/convergence-loop.d.ts +55 -0
- package/dist/delivery/convergence-loop.d.ts.map +1 -1
- package/dist/delivery/convergence-loop.js +105 -3
- package/dist/delivery/convergence-loop.js.map +1 -1
- package/dist/delivery/decompose.d.ts +45 -0
- package/dist/delivery/decompose.d.ts.map +1 -0
- package/dist/delivery/decompose.js +122 -0
- package/dist/delivery/decompose.js.map +1 -0
- package/dist/delivery/escalation.d.ts +2 -0
- package/dist/delivery/escalation.d.ts.map +1 -1
- package/dist/delivery/escalation.js +5 -0
- package/dist/delivery/escalation.js.map +1 -1
- package/dist/delivery/explorer.d.ts +9 -0
- package/dist/delivery/explorer.d.ts.map +1 -1
- package/dist/delivery/explorer.js +83 -23
- package/dist/delivery/explorer.js.map +1 -1
- package/dist/delivery/index.d.ts +6 -1
- package/dist/delivery/index.d.ts.map +1 -1
- package/dist/delivery/index.js +5 -0
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/run-state.d.ts +44 -0
- package/dist/delivery/run-state.d.ts.map +1 -0
- package/dist/delivery/run-state.js +169 -0
- package/dist/delivery/run-state.js.map +1 -0
- package/dist/delivery/task-sync.d.ts +47 -0
- package/dist/delivery/task-sync.d.ts.map +1 -0
- package/dist/delivery/task-sync.js +148 -0
- package/dist/delivery/task-sync.js.map +1 -0
- package/dist/mcp-router/tools/deliver.d.ts +48 -0
- package/dist/mcp-router/tools/deliver.d.ts.map +1 -1
- package/dist/mcp-router/tools/deliver.js +64 -4
- package/dist/mcp-router/tools/deliver.js.map +1 -1
- package/dist/observability/halo-exporter.d.ts +6 -3
- package/dist/observability/halo-exporter.d.ts.map +1 -1
- package/dist/observability/halo-exporter.js +40 -6
- package/dist/observability/halo-exporter.js.map +1 -1
- package/dist/state/manifest.d.ts +34 -0
- package/dist/state/manifest.d.ts.map +1 -0
- package/dist/state/manifest.js +152 -0
- package/dist/state/manifest.js.map +1 -0
- package/dist/state/reactor-inject.d.ts +14 -0
- package/dist/state/reactor-inject.d.ts.map +1 -0
- package/dist/state/reactor-inject.js +25 -0
- package/dist/state/reactor-inject.js.map +1 -0
- package/dist/tasks/beads-sync.d.ts +38 -0
- package/dist/tasks/beads-sync.d.ts.map +1 -0
- package/dist/tasks/beads-sync.js +122 -0
- package/dist/tasks/beads-sync.js.map +1 -0
- package/dist/tasks/service.d.ts +7 -0
- package/dist/tasks/service.d.ts.map +1 -1
- package/dist/tasks/service.js +23 -0
- package/dist/tasks/service.js.map +1 -1
- package/package.json +1 -1
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/src/policies/enforcers/delivery_enforcement.py +1 -1
- package/templates/hooks/deliver_autoroute.py +60 -10
- package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Mine — close the HALO self-improvement loop.
|
|
3
|
+
*
|
|
4
|
+
* HALO tracing is on by default, but until now the analysis step was manual
|
|
5
|
+
* (`uap harness analyze`), so findings never flowed back into the harness.
|
|
6
|
+
* This module mines the local trace file after every delivery run using the
|
|
7
|
+
* self-harness span classifier, persists the ranked weakness report to
|
|
8
|
+
* `.uap/halo/weaknesses.json`, and returns the top findings for display —
|
|
9
|
+
* every run makes the next run a little smarter, no operator required.
|
|
10
|
+
*
|
|
11
|
+
* Read-only over traces; fail-soft by contract. Opt out: UAP_HALO_AUTOMINE=0.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'fs';
|
|
14
|
+
import { dirname } from 'path';
|
|
15
|
+
import { haloTracePath } from '../observability/halo-exporter.js';
|
|
16
|
+
import { mineFromHaloSpans } from '../self-harness/trace-mine.js';
|
|
17
|
+
/** Only mine the recent tail — old spans were already mined by earlier runs. */
|
|
18
|
+
const MAX_TRACE_LINES = 5000;
|
|
19
|
+
/** A pattern must recur to be a systemic weakness, not a one-off. */
|
|
20
|
+
const DEFAULT_MIN_FREQUENCY = 3;
|
|
21
|
+
export function isAutoMineEnabled() {
|
|
22
|
+
const v = (process.env.UAP_HALO_AUTOMINE ?? '').toLowerCase();
|
|
23
|
+
return !(v === '0' || v === 'false' || v === 'off');
|
|
24
|
+
}
|
|
25
|
+
function weaknessReportPath() {
|
|
26
|
+
return haloTracePath().replace(/[^/\\]+$/, 'weaknesses.json');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Mine the HALO trace tail for recurring failure patterns and persist the
|
|
30
|
+
* ranked report next to the trace file. Returns empty on any failure.
|
|
31
|
+
*/
|
|
32
|
+
export function autoMineHaloTraces(modelId, minFrequency = DEFAULT_MIN_FREQUENCY) {
|
|
33
|
+
const empty = { reports: [], reportPath: null };
|
|
34
|
+
if (!isAutoMineEnabled())
|
|
35
|
+
return empty;
|
|
36
|
+
try {
|
|
37
|
+
const tracePath = haloTracePath();
|
|
38
|
+
if (!existsSync(tracePath))
|
|
39
|
+
return empty;
|
|
40
|
+
const lines = readFileSync(tracePath, 'utf-8').split('\n').filter(Boolean).slice(-MAX_TRACE_LINES);
|
|
41
|
+
const spans = [];
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
try {
|
|
44
|
+
spans.push(JSON.parse(line));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// skip corrupt lines
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (spans.length === 0)
|
|
51
|
+
return empty;
|
|
52
|
+
const reports = mineFromHaloSpans(spans, { model: modelId, minFrequency });
|
|
53
|
+
if (reports.length === 0) {
|
|
54
|
+
// The failure pattern stopped recurring — retire the persisted report
|
|
55
|
+
// so future runs stop being told about weaknesses that no longer exist.
|
|
56
|
+
try {
|
|
57
|
+
rmSync(weaknessReportPath(), { force: true });
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// best-effort
|
|
61
|
+
}
|
|
62
|
+
return empty;
|
|
63
|
+
}
|
|
64
|
+
const out = weaknessReportPath();
|
|
65
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
66
|
+
const tmp = `${out}.tmp`;
|
|
67
|
+
writeFileSync(tmp, JSON.stringify({ generatedAt: new Date().toISOString(), model: modelId, minedSpans: spans.length, reports }, null, 2), 'utf-8');
|
|
68
|
+
renameSync(tmp, out);
|
|
69
|
+
return { reports, reportPath: out };
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return empty;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Weakness → prompt feedback: translate recurring mined failure kinds into
|
|
77
|
+
* imperative guidance the loop injects alongside practice cards, so what the
|
|
78
|
+
* harness OBSERVED failing changes what the model is TOLD next run. Guidance
|
|
79
|
+
* text is harness-authored (keyed by FailureKind), never model output — same
|
|
80
|
+
* provenance rule as the practice store.
|
|
81
|
+
*/
|
|
82
|
+
const KIND_GUIDANCE = {
|
|
83
|
+
'verify.fail': 'Recent runs on this setup repeatedly produced output that FAILED the completion gates. Re-read the gate feedback line by line and satisfy every failing gate before ending a turn.',
|
|
84
|
+
'toolcall.path.garbled': 'Recent runs repeatedly used wrong or garbled file paths. Use exact relative paths from the project root, copied verbatim — never abbreviate or re-case a path.',
|
|
85
|
+
'agent.timeout': 'Recent runs repeatedly hit wall-clock timeouts. Prefer smaller, complete, verifiable increments per turn over one oversized attempt.',
|
|
86
|
+
'agent.error': 'Recent runs crashed mid-attempt. Keep every file block complete and well-formed; do not truncate output.',
|
|
87
|
+
'loop.nonterminate': 'Recent runs looped without terminating. Converge: finish the change and emit final file blocks instead of continuing to explore.',
|
|
88
|
+
'gen.runaway.npredict': 'Recent runs hit the generation-length cap. Be concise — emit only the files that change, with no commentary dumps.',
|
|
89
|
+
'guardrail.poison.recon': 'Recent runs got stuck in read-only reconnaissance. Start writing implementation files early; reading more is not progress.',
|
|
90
|
+
'toolcall.args.truncated': 'Recent runs emitted truncated tool arguments. Keep individual outputs small enough to complete; split large files across turns if needed.',
|
|
91
|
+
};
|
|
92
|
+
/** Convert mined weakness reports into injectable guidance lines (top N kinds). */
|
|
93
|
+
export function weaknessGuidance(reports, top = 2) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
for (const r of reports.slice(0, top)) {
|
|
96
|
+
const g = KIND_GUIDANCE[r.kind];
|
|
97
|
+
if (g)
|
|
98
|
+
lines.push(g);
|
|
99
|
+
}
|
|
100
|
+
return lines;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Load the persisted weakness report written by a previous run's auto-mine.
|
|
104
|
+
* Fail-soft: any problem (missing, corrupt, stale schema) yields [].
|
|
105
|
+
*/
|
|
106
|
+
/** Guidance older than this is stale — the codebase and harness moved on. */
|
|
107
|
+
const WEAKNESS_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
108
|
+
export function loadPersistedWeaknesses() {
|
|
109
|
+
try {
|
|
110
|
+
const path = weaknessReportPath();
|
|
111
|
+
if (!existsSync(path))
|
|
112
|
+
return [];
|
|
113
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
114
|
+
const generated = typeof parsed.generatedAt === 'string' ? Date.parse(parsed.generatedAt) : NaN;
|
|
115
|
+
if (!Number.isFinite(generated) || Date.now() - generated > WEAKNESS_TTL_MS)
|
|
116
|
+
return [];
|
|
117
|
+
if (!Array.isArray(parsed.reports))
|
|
118
|
+
return [];
|
|
119
|
+
return parsed.reports.filter((r) => typeof r === 'object' && r !== null && typeof r.kind === 'string');
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** One-line operator summary of the top mined weaknesses. */
|
|
126
|
+
export function summarizeWeaknesses(reports, top = 3) {
|
|
127
|
+
if (reports.length === 0)
|
|
128
|
+
return null;
|
|
129
|
+
const parts = reports.slice(0, top).map((r) => `${r.kind} ×${r.frequency}`);
|
|
130
|
+
return `recurring failure patterns: ${parts.join(', ')} — details: uap harness analyze`;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=auto-mine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-mine.js","sourceRoot":"","sources":["../../src/delivery/auto-mine.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ export interface AutoPlan {
|
|
|
26
26
|
ideate: boolean;
|
|
27
27
|
halo: boolean;
|
|
28
28
|
coordinate: boolean;
|
|
29
|
+
/** LLM acceptance judge: verify spec behavioral completeness after gates pass */
|
|
30
|
+
acceptance: boolean;
|
|
29
31
|
/** Run the integration tier locally (after the fast tier passes) */
|
|
30
32
|
integration: boolean;
|
|
31
33
|
/** Run a local dev deploy+smoke tier locally */
|
|
@@ -44,9 +46,11 @@ export interface AutoPlan {
|
|
|
44
46
|
* Map instruction complexity to a convergence-aid plan.
|
|
45
47
|
*
|
|
46
48
|
* - simple → plain single-shot loop (aids would only add cost)
|
|
47
|
-
* - moderate → exploration ×3 + critic + practices +
|
|
49
|
+
* - moderate → exploration ×3 + critic + practices + ideation + acceptance
|
|
50
|
+
* judge + HALO + coordination
|
|
48
51
|
* - complex → the full stack (= --optimize): exploration ×4, critic,
|
|
49
|
-
* practices, escalation, ideation, HALO,
|
|
52
|
+
* practices, escalation, ideation, acceptance judge, HALO,
|
|
53
|
+
* coordination
|
|
50
54
|
*
|
|
51
55
|
* The classifier is injectable for tests and future model-based upgrades.
|
|
52
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-optimizer.d.ts","sourceRoot":"","sources":["../../src/delivery/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,4DAA4D;AAC5D,eAAO,MAAM,8BAA8B,EAAE,oBAG5C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"auto-optimizer.d.ts","sourceRoot":"","sources":["../../src/delivery/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,4DAA4D;AAC5D,eAAO,MAAM,8BAA8B,EAAE,oBAG5C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,kBAC8B,GAC1D,QAAQ,CAyDV"}
|
|
@@ -22,9 +22,11 @@ export const DELIVERY_COMPLEXITY_THRESHOLDS = {
|
|
|
22
22
|
* Map instruction complexity to a convergence-aid plan.
|
|
23
23
|
*
|
|
24
24
|
* - simple → plain single-shot loop (aids would only add cost)
|
|
25
|
-
* - moderate → exploration ×3 + critic + practices +
|
|
25
|
+
* - moderate → exploration ×3 + critic + practices + ideation + acceptance
|
|
26
|
+
* judge + HALO + coordination
|
|
26
27
|
* - complex → the full stack (= --optimize): exploration ×4, critic,
|
|
27
|
-
* practices, escalation, ideation, HALO,
|
|
28
|
+
* practices, escalation, ideation, acceptance judge, HALO,
|
|
29
|
+
* coordination
|
|
28
30
|
*
|
|
29
31
|
* The classifier is injectable for tests and future model-based upgrades.
|
|
30
32
|
*/
|
|
@@ -39,6 +41,7 @@ export function planAutoOptimization(instruction, classify = (q) => measureQuery
|
|
|
39
41
|
ideate: false,
|
|
40
42
|
halo: false,
|
|
41
43
|
coordinate: false,
|
|
44
|
+
acceptance: false,
|
|
42
45
|
integration: false,
|
|
43
46
|
deployDev: false,
|
|
44
47
|
watchCi: false,
|
|
@@ -52,13 +55,16 @@ export function planAutoOptimization(instruction, classify = (q) => measureQuery
|
|
|
52
55
|
critic: true,
|
|
53
56
|
practices: true,
|
|
54
57
|
escalate: false,
|
|
55
|
-
|
|
58
|
+
// Ideation is cheap (one seed-generation call) and pays off whenever
|
|
59
|
+
// exploration is on — divergent seeds beat the four static defaults.
|
|
60
|
+
ideate: true,
|
|
56
61
|
halo: true,
|
|
57
62
|
coordinate: true,
|
|
63
|
+
acceptance: true,
|
|
58
64
|
integration: true,
|
|
59
65
|
deployDev: false,
|
|
60
66
|
watchCi: false,
|
|
61
|
-
summary: 'moderate task → exploration ×3, critic, practices, integration tier, HALO, coordination',
|
|
67
|
+
summary: 'moderate task → exploration ×3, critic, practices, ideation, acceptance judge, integration tier, HALO, coordination',
|
|
62
68
|
};
|
|
63
69
|
}
|
|
64
70
|
return {
|
|
@@ -70,10 +76,11 @@ export function planAutoOptimization(instruction, classify = (q) => measureQuery
|
|
|
70
76
|
ideate: true,
|
|
71
77
|
halo: true,
|
|
72
78
|
coordinate: true,
|
|
79
|
+
acceptance: true,
|
|
73
80
|
integration: true,
|
|
74
81
|
deployDev: true,
|
|
75
82
|
watchCi: true,
|
|
76
|
-
summary: 'complex task → exploration ×4, critic, practices, escalation, ideation, integration + deploy-dev tiers, watch-ci (push stays opt-in), HALO, coordination',
|
|
83
|
+
summary: 'complex task → exploration ×4, critic, practices, escalation, ideation, acceptance judge, integration + deploy-dev tiers, watch-ci (push stays opt-in), HALO, coordination',
|
|
77
84
|
};
|
|
78
85
|
}
|
|
79
86
|
//# sourceMappingURL=auto-optimizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-optimizer.js","sourceRoot":"","sources":["../../src/delivery/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,sBAAsB,GAGvB,MAAM,8BAA8B,CAAC;AAItC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IAClE,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACX,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-optimizer.js","sourceRoot":"","sources":["../../src/delivery/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,sBAAsB,GAGvB,MAAM,8BAA8B,CAAC;AAItC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IAClE,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACX,CAAC;AA6BF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,WAAkD,CAAC,CAAC,EAAE,EAAE,CACtD,sBAAsB,CAAC,CAAC,EAAE,8BAA8B,CAAC;IAE3D,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO;YACL,UAAU;YACV,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,gCAAgC;SAC1C,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO;YACL,UAAU;YACV,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;YACd,OAAO,EACL,qHAAqH;SACxH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU;QACV,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EACL,4KAA4K;KAC/K,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate Workspaces — git-worktree isolation for parallel best-of-N
|
|
3
|
+
* exploration.
|
|
4
|
+
*
|
|
5
|
+
* The explorer's default evaluation is sequential apply → verify → rollback in
|
|
6
|
+
* ONE tree (gates cannot run concurrently in a shared tree, and losers' gate
|
|
7
|
+
* side effects leak into later candidates). A workspace provider gives each
|
|
8
|
+
* candidate its own detached git worktree of HEAD, so candidates verify
|
|
9
|
+
* concurrently and in full isolation; only the winner is re-applied and
|
|
10
|
+
* re-verified in the real tree.
|
|
11
|
+
*
|
|
12
|
+
* Availability is conservative: provider construction returns null unless the
|
|
13
|
+
* project is a git repo with a CLEAN status — uncommitted changes would be
|
|
14
|
+
* invisible inside a worktree of HEAD, silently changing what candidates are
|
|
15
|
+
* judged against. Everything is fail-soft: any error at any step means "no
|
|
16
|
+
* workspace", and the explorer falls back to the sequential in-tree path.
|
|
17
|
+
*/
|
|
18
|
+
export interface CandidateWorkspace {
|
|
19
|
+
/** Root of the isolated tree the candidate is applied + verified in. */
|
|
20
|
+
root: string;
|
|
21
|
+
/** Remove the worktree. Never throws. */
|
|
22
|
+
cleanup(): void;
|
|
23
|
+
}
|
|
24
|
+
/** Returns an isolated workspace, or null to fall back to in-tree evaluation. */
|
|
25
|
+
export type WorkspaceProvider = () => CandidateWorkspace | null;
|
|
26
|
+
export declare function isParallelExploreEnabled(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Build a git-worktree workspace provider for `projectRoot`, or null when
|
|
29
|
+
* isolation is unavailable (not a git repo, dirty tree, env opt-out).
|
|
30
|
+
*/
|
|
31
|
+
export declare function createGitWorktreeProvider(projectRoot: string): WorkspaceProvider | null;
|
|
32
|
+
//# sourceMappingURL=candidate-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-workspace.d.ts","sourceRoot":"","sources":["../../src/delivery/candidate-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAahE,wBAAgB,wBAAwB,IAAI,OAAO,CAGlD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAgEvF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate Workspaces — git-worktree isolation for parallel best-of-N
|
|
3
|
+
* exploration.
|
|
4
|
+
*
|
|
5
|
+
* The explorer's default evaluation is sequential apply → verify → rollback in
|
|
6
|
+
* ONE tree (gates cannot run concurrently in a shared tree, and losers' gate
|
|
7
|
+
* side effects leak into later candidates). A workspace provider gives each
|
|
8
|
+
* candidate its own detached git worktree of HEAD, so candidates verify
|
|
9
|
+
* concurrently and in full isolation; only the winner is re-applied and
|
|
10
|
+
* re-verified in the real tree.
|
|
11
|
+
*
|
|
12
|
+
* Availability is conservative: provider construction returns null unless the
|
|
13
|
+
* project is a git repo with a CLEAN status — uncommitted changes would be
|
|
14
|
+
* invisible inside a worktree of HEAD, silently changing what candidates are
|
|
15
|
+
* judged against. Everything is fail-soft: any error at any step means "no
|
|
16
|
+
* workspace", and the explorer falls back to the sequential in-tree path.
|
|
17
|
+
*/
|
|
18
|
+
import { execFileSync } from 'child_process';
|
|
19
|
+
import { existsSync, mkdtempSync, rmSync, symlinkSync } from 'fs';
|
|
20
|
+
import { tmpdir } from 'os';
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
function git(projectRoot, args, timeoutMs = 15_000) {
|
|
23
|
+
return execFileSync('git', args, {
|
|
24
|
+
cwd: projectRoot,
|
|
25
|
+
encoding: 'utf-8',
|
|
26
|
+
timeout: timeoutMs,
|
|
27
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
28
|
+
// Never inherit a poisoned GIT_DIR from a hook environment.
|
|
29
|
+
env: { ...process.env, GIT_DIR: undefined, GIT_WORK_TREE: undefined, GIT_INDEX_FILE: undefined },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function isParallelExploreEnabled() {
|
|
33
|
+
const v = (process.env.UAP_DELIVER_PARALLEL_EXPLORE ?? '').toLowerCase();
|
|
34
|
+
return !(v === '0' || v === 'false' || v === 'off');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build a git-worktree workspace provider for `projectRoot`, or null when
|
|
38
|
+
* isolation is unavailable (not a git repo, dirty tree, env opt-out).
|
|
39
|
+
*/
|
|
40
|
+
export function createGitWorktreeProvider(projectRoot) {
|
|
41
|
+
if (!isParallelExploreEnabled())
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
if (git(projectRoot, ['rev-parse', '--is-inside-work-tree']).trim() !== 'true')
|
|
45
|
+
return null;
|
|
46
|
+
// A dirty tree means HEAD is not what the loop is actually converging on.
|
|
47
|
+
if (git(projectRoot, ['status', '--porcelain']).trim() !== '')
|
|
48
|
+
return null;
|
|
49
|
+
// Sweep worktree registrations a crashed earlier run left behind.
|
|
50
|
+
git(projectRoot, ['worktree', 'prune']);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return () => {
|
|
56
|
+
let dir = null;
|
|
57
|
+
try {
|
|
58
|
+
// Re-check cleanliness EVERY call: the explorer applies each turn's
|
|
59
|
+
// winner to the main tree as uncommitted writes, so from turn 2 the
|
|
60
|
+
// tree is dirty and a worktree of HEAD would be a stale baseline —
|
|
61
|
+
// candidates must then fall back to the sequential in-tree path.
|
|
62
|
+
if (git(projectRoot, ['status', '--porcelain']).trim() !== '')
|
|
63
|
+
return null;
|
|
64
|
+
dir = mkdtempSync(join(tmpdir(), 'uap-candidate-'));
|
|
65
|
+
const root = join(dir, 'tree');
|
|
66
|
+
git(projectRoot, ['worktree', 'add', '--detach', root, 'HEAD'], 60_000);
|
|
67
|
+
// Gates need dependencies; share the main tree's node_modules by
|
|
68
|
+
// symlink (same convention as the repo's own worktree workflow).
|
|
69
|
+
// Residual sharing, accepted: the link is WRITABLE, so concurrent gate
|
|
70
|
+
// runs share tool caches (.cache/.vite etc.) and gate-executed code has
|
|
71
|
+
// the same reach it already has on the sequential in-tree path.
|
|
72
|
+
const mainModules = join(projectRoot, 'node_modules');
|
|
73
|
+
const wtModules = join(root, 'node_modules');
|
|
74
|
+
if (existsSync(mainModules) && !existsSync(wtModules)) {
|
|
75
|
+
try {
|
|
76
|
+
symlinkSync(mainModules, wtModules, 'junction');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// gates may still work without it (pure-node projects)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const cleanup = () => {
|
|
83
|
+
try {
|
|
84
|
+
git(projectRoot, ['worktree', 'remove', '--force', root], 60_000);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// fall through to raw dir removal
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
if (dir)
|
|
91
|
+
rmSync(dir, { recursive: true, force: true });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// best-effort
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
git(projectRoot, ['worktree', 'prune']);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// best-effort
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return { root, cleanup };
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
try {
|
|
107
|
+
if (dir)
|
|
108
|
+
rmSync(dir, { recursive: true, force: true });
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// best-effort
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=candidate-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-workspace.js","sourceRoot":"","sources":["../../src/delivery/candidate-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,6 +103,8 @@ export interface ExplorerSettings {
|
|
|
103
103
|
candidates?: number;
|
|
104
104
|
seeds?: StrategySeed[];
|
|
105
105
|
judge?: Judge;
|
|
106
|
+
/** Per-candidate isolated workspaces → concurrent candidate verification. */
|
|
107
|
+
workspaceProvider?: import('./candidate-workspace.js').WorkspaceProvider;
|
|
106
108
|
}
|
|
107
109
|
/**
|
|
108
110
|
* Directive returned from onIteration to steer the loop (Phase 5).
|
|
@@ -120,6 +122,12 @@ export interface IterationDirective {
|
|
|
120
122
|
enableCritic?: boolean;
|
|
121
123
|
/** Swap the model/executor (model escalation) */
|
|
122
124
|
switchExecutor?: LoopExecutor;
|
|
125
|
+
/**
|
|
126
|
+
* Regenerate divergent strategy seeds (requires ConvergenceConfig.seedGenerator).
|
|
127
|
+
* Used by the escalation ladder when the loop stagnates: fresh, feedback-aware
|
|
128
|
+
* seeds re-diversify exploration instead of retrying the same failed strategies.
|
|
129
|
+
*/
|
|
130
|
+
regenerateSeeds?: boolean;
|
|
123
131
|
/** Human-readable reason, surfaced in logs and the iteration record */
|
|
124
132
|
note?: string;
|
|
125
133
|
}
|
|
@@ -228,6 +236,53 @@ export interface ConvergenceConfig {
|
|
|
228
236
|
* `--ceiling`). Also caps escalation's raiseMaxTurns under untilDelivered.
|
|
229
237
|
*/
|
|
230
238
|
maxTurnsCeiling?: number;
|
|
239
|
+
/**
|
|
240
|
+
* Called after every completed turn with serializable loop state so callers
|
|
241
|
+
* can persist it (durable runs). Fail-soft: a throwing callback is ignored.
|
|
242
|
+
*/
|
|
243
|
+
onCheckpoint?: (checkpoint: LoopCheckpoint) => void;
|
|
244
|
+
/**
|
|
245
|
+
* Resume an interrupted run from a persisted checkpoint: prior history,
|
|
246
|
+
* prompt context, and stagnation counters are restored and the loop
|
|
247
|
+
* continues at checkpoint.turn + 1 with a fresh `maxTurns` budget.
|
|
248
|
+
*/
|
|
249
|
+
resumeFrom?: LoopCheckpoint;
|
|
250
|
+
/**
|
|
251
|
+
* Regenerates divergent strategy seeds mid-run (see IterationDirective.
|
|
252
|
+
* regenerateSeeds). Receives the instruction plus the latest gate feedback so
|
|
253
|
+
* fresh seeds steer AWAY from the failing region of solution space.
|
|
254
|
+
*/
|
|
255
|
+
seedGenerator?: (instruction: string, feedback?: string) => Promise<StrategySeed[]>;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Serializable loop state persisted after every turn so an interrupted run can
|
|
259
|
+
* be resumed (`uap deliver --resume`). Contains only harness-owned data plus
|
|
260
|
+
* the truncated prompt-context strings the next turn would have received —
|
|
261
|
+
* no functions, no full model transcripts.
|
|
262
|
+
*/
|
|
263
|
+
export interface LoopCheckpoint {
|
|
264
|
+
/** Last completed 1-based turn. */
|
|
265
|
+
turn: number;
|
|
266
|
+
history: IterationRecord[];
|
|
267
|
+
/** Prompt context carried into the next turn (practices/protectedFiles are re-derived on resume). */
|
|
268
|
+
prevContext: {
|
|
269
|
+
previousOutput?: string;
|
|
270
|
+
feedback?: string;
|
|
271
|
+
applyError?: string;
|
|
272
|
+
previousFiles?: string[];
|
|
273
|
+
critique?: string[];
|
|
274
|
+
};
|
|
275
|
+
bestSoFar: number;
|
|
276
|
+
bestAcceptance: number;
|
|
277
|
+
stagnantTurns: number;
|
|
278
|
+
/** Escalation state applied mid-run, so a resumed run is NOT silently
|
|
279
|
+
* de-escalated: exploration width + seeds and the critic are restored by
|
|
280
|
+
* the loop; a model switch cannot serialize, so `modelEscalated` is a
|
|
281
|
+
* signal the CLI uses to re-bind the stronger executor before resuming. */
|
|
282
|
+
candidates?: number;
|
|
283
|
+
seeds?: StrategySeed[];
|
|
284
|
+
criticEnabled?: boolean;
|
|
285
|
+
modelEscalated?: boolean;
|
|
231
286
|
}
|
|
232
287
|
/** Default prompt strategy: lean contract + structured retry context. */
|
|
233
288
|
export declare const defaultPromptBuilder: PromptBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convergence-loop.d.ts","sourceRoot":"","sources":["../../src/delivery/convergence-loop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"convergence-loop.d.ts","sourceRoot":"","sources":["../../src/delivery/convergence-loop.ts"],"names":[],"mappings":"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"}
|