@miller-tech/uap 1.192.0 → 1.193.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/deliver-detach.d.ts +8 -1
- package/dist/cli/deliver-detach.d.ts.map +1 -1
- package/dist/cli/deliver-detach.js +39 -2
- package/dist/cli/deliver-detach.js.map +1 -1
- package/dist/cli/deliver.d.ts +25 -0
- package/dist/cli/deliver.d.ts.map +1 -1
- package/dist/cli/deliver.js +69 -5
- package/dist/cli/deliver.js.map +1 -1
- package/dist/mcp-router/server.d.ts +11 -0
- package/dist/mcp-router/server.d.ts.map +1 -1
- package/dist/mcp-router/server.js +31 -1
- package/dist/mcp-router/server.js.map +1 -1
- package/package.json +1 -1
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
- package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
|
@@ -53,7 +53,14 @@ export declare function detachLogPath(projectRoot: string, stamp: string): strin
|
|
|
53
53
|
* session, and its stdio is a file, so nothing about the wrapper's death can
|
|
54
54
|
* reach it.
|
|
55
55
|
*/
|
|
56
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Returned when the mirror budget expired while the mission was still running.
|
|
58
|
+
* Distinct from any real exit code so a caller cannot mistake it for failure.
|
|
59
|
+
*/
|
|
60
|
+
export declare const STILL_RUNNING = -1;
|
|
61
|
+
export declare function relaunchDetached(projectRoot: string, stamp: string, opts?: {
|
|
62
|
+
mirrorBudgetMs?: number;
|
|
63
|
+
}): Promise<number>;
|
|
57
64
|
/** Is this process the detached child? */
|
|
58
65
|
export declare function isDetachedChild(): boolean;
|
|
59
66
|
/** True when the project dir looks writable enough to host the detach log. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliver-detach.d.ts","sourceRoot":"","sources":["../../src/cli/deliver-detach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAOH,8EAA8E;AAC9E,eAAO,MAAM,UAAU,yBAAyB,CAAC;AACjD,sDAAsD;AACtD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,cAAc,CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"deliver-detach.d.ts","sourceRoot":"","sources":["../../src/cli/deliver-detach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAOH,8EAA8E;AAC9E,eAAO,MAAM,UAAU,yBAAyB,CAAC;AACjD,sDAAsD;AACtD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,cAAc,CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,MAAM,CAAC,CAmGjB;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAM7D"}
|
|
@@ -64,7 +64,12 @@ export function detachLogPath(projectRoot, stamp) {
|
|
|
64
64
|
* session, and its stdio is a file, so nothing about the wrapper's death can
|
|
65
65
|
* reach it.
|
|
66
66
|
*/
|
|
67
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Returned when the mirror budget expired while the mission was still running.
|
|
69
|
+
* Distinct from any real exit code so a caller cannot mistake it for failure.
|
|
70
|
+
*/
|
|
71
|
+
export const STILL_RUNNING = -1;
|
|
72
|
+
export async function relaunchDetached(projectRoot, stamp, opts = {}) {
|
|
68
73
|
const logPath = detachLogPath(projectRoot, stamp);
|
|
69
74
|
mkdirSync(join(projectRoot, '.uap', 'deliver-logs'), { recursive: true });
|
|
70
75
|
// Touch it so the tail below always has something to open.
|
|
@@ -96,7 +101,20 @@ export async function relaunchDetached(projectRoot, stamp) {
|
|
|
96
101
|
' (it stops at the next turn boundary with its work checkpointed and the lock\n' +
|
|
97
102
|
' released. Killing the pid does none of that — the run loses everything it\n' +
|
|
98
103
|
' had finished, leaves the lock behind, and the next launch starts from zero.)');
|
|
99
|
-
// Mirror the log to our stdout for as long as we are alive
|
|
104
|
+
// Mirror the log to our stdout for as long as we are alive — but not past a
|
|
105
|
+
// caller that has already given up.
|
|
106
|
+
//
|
|
107
|
+
// The mission is DETACHED by this point; mirroring is a convenience. For a
|
|
108
|
+
// terminal or CI caller that convenience is the whole point and it should run
|
|
109
|
+
// to completion. For an AGENT it inverts: its tool budget expires mid-mirror,
|
|
110
|
+
// the call is killed, and a launch that SUCCEEDED is reported to the model as
|
|
111
|
+
// a timeout. Seen on 2026-08-10 — "shell tool terminated command after
|
|
112
|
+
// exceeding timeout 300000 ms", followed by "The deliver tool keeps timing
|
|
113
|
+
// out", followed by `xargs kill -9` on the very run that was still working.
|
|
114
|
+
//
|
|
115
|
+
// So a bounded mirror returns STILL_RUNNING instead of being killed, and the
|
|
116
|
+
// caller is told the mission continues. Unbounded when no budget is given,
|
|
117
|
+
// which is what a terminal keeps.
|
|
100
118
|
return await new Promise((resolve) => {
|
|
101
119
|
let offset = 0;
|
|
102
120
|
let done = false;
|
|
@@ -113,13 +131,32 @@ export async function relaunchDetached(projectRoot, stamp) {
|
|
|
113
131
|
const stream = createReadStream(logPath, { start: offset, end: size - 1, encoding: 'utf-8' });
|
|
114
132
|
offset = size;
|
|
115
133
|
stream.on('data', (chunk) => process.stdout.write(String(chunk)));
|
|
134
|
+
// The stat above and this read are two separate moments, and the file can
|
|
135
|
+
// go between them — rotated, cleaned up, or on a temp filesystem being
|
|
136
|
+
// torn down. An unhandled 'error' on a read stream is a hard crash, so a
|
|
137
|
+
// vanished LOG would take down a launch whose MISSION is fine, which is
|
|
138
|
+
// precisely backwards: mirroring is a convenience and its failure must
|
|
139
|
+
// never be louder than the thing it is reporting on.
|
|
140
|
+
//
|
|
141
|
+
// Found by CI, not locally: the race needs the log to disappear inside a
|
|
142
|
+
// 400ms window, which a slower machine hits and mine did not.
|
|
143
|
+
stream.on('error', () => {
|
|
144
|
+
/* the mission is unaffected; stop echoing this chunk and try again */
|
|
145
|
+
});
|
|
116
146
|
};
|
|
117
147
|
const timer = setInterval(pump, 400);
|
|
148
|
+
let budget;
|
|
149
|
+
if (opts.mirrorBudgetMs && opts.mirrorBudgetMs > 0) {
|
|
150
|
+
budget = setTimeout(() => finish(STILL_RUNNING), opts.mirrorBudgetMs);
|
|
151
|
+
budget.unref?.();
|
|
152
|
+
}
|
|
118
153
|
const finish = (code) => {
|
|
119
154
|
if (done)
|
|
120
155
|
return;
|
|
121
156
|
done = true;
|
|
122
157
|
clearInterval(timer);
|
|
158
|
+
if (budget)
|
|
159
|
+
clearTimeout(budget);
|
|
123
160
|
setTimeout(() => {
|
|
124
161
|
pump(); // one last flush so the tail of the mission is not lost
|
|
125
162
|
resolve(code);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliver-detach.js","sourceRoot":"","sources":["../../src/cli/deliver-detach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE7E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,CAAC;AACjD,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAOrD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAK5B;IACC,IAAI,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACzF,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,SAAS,EAAE,CAAC;IAC/E,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9F,8EAA8E;IAC9E,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAClF,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,oEAAoE;KAC7E,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,KAAa;IAC9D,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"deliver-detach.js","sourceRoot":"","sources":["../../src/cli/deliver-detach.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/deliver.d.ts
CHANGED
|
@@ -130,6 +130,31 @@ export declare function bestKeepFastScore(gateResults: Array<{
|
|
|
130
130
|
passed: boolean;
|
|
131
131
|
}>, fastRungIds: Set<string>): number | null;
|
|
132
132
|
export { resolveAcceptanceVerdict } from '../delivery/mission-acceptance.js';
|
|
133
|
+
/**
|
|
134
|
+
* The follow budget to use when the caller named none.
|
|
135
|
+
*
|
|
136
|
+
* The 900s default above is right for the caller it describes — a human at a
|
|
137
|
+
* terminal, or a CI step — and the note is right that making it short globally
|
|
138
|
+
* was the wrong layer. What it does not cover is the caller that appeared
|
|
139
|
+
* since: an AGENT shelling out to `uap deliver --await-run` from a bash tool.
|
|
140
|
+
* That caller has a request timeout exactly like the MCP one, but it is not the
|
|
141
|
+
* MCP layer, so it got the long default and was killed mid-wait every time.
|
|
142
|
+
*
|
|
143
|
+
* Measured over 24h on 2026-08-10: thirteen waiting invocations from a bash
|
|
144
|
+
* tool, TEN of them with a tool budget of 300s against this 900s default —
|
|
145
|
+
* guaranteed to be cut short. The model read every one as "the deliver tool
|
|
146
|
+
* keeps timing out" and went looking for other ways through, which is the loop.
|
|
147
|
+
* The MCP tool itself never timed out once in the same window (max 48s).
|
|
148
|
+
*
|
|
149
|
+
* Discriminating on a TTY would not work: CI is not a TTY either and genuinely
|
|
150
|
+
* wants the long block. The question is "does my caller give up on me", and
|
|
151
|
+
* this repo already answers it — `resolveOwnerPid` walks the process ancestry
|
|
152
|
+
* for an agent client, which is how a detached run knows whose session it
|
|
153
|
+
* belongs to. Same question, same answer, one implementation.
|
|
154
|
+
*
|
|
155
|
+
* An explicit --await-timeout always wins over this.
|
|
156
|
+
*/
|
|
157
|
+
export declare function defaultAwaitBudgetSec(ownerPid?: () => number | undefined): number;
|
|
133
158
|
import type { AutoPlan } from '../delivery/auto-optimizer.js';
|
|
134
159
|
export interface DeliverOptions {
|
|
135
160
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliver.d.ts","sourceRoot":"","sources":["../../src/cli/deliver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAazD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG;IAAE,iBAAiB,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAQhF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAMV;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAMV;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,GAAG,IAAI,CAIhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;CACnC,GAAG,OAAO,CAMV;AAED;;;;;;GAMG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAIT;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,MAAM,GAAG,IAAI,CAIf;AAID,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"deliver.d.ts","sourceRoot":"","sources":["../../src/cli/deliver.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/deliver.js
CHANGED
|
@@ -27,7 +27,7 @@ import { applyPendingIntents } from '../delivery/pending-intents.js';
|
|
|
27
27
|
import { runAcceptanceGate } from '../delivery/acceptance-judge.js';
|
|
28
28
|
import { buildMissionAcceptanceGate, resolveAcceptanceVerdict } from '../delivery/mission-acceptance.js';
|
|
29
29
|
import { createSpecRegistry } from '../delivery/spec-registry.js';
|
|
30
|
-
import { guardAgainstOwnerExit } from '../delivery/orphan-guard.js';
|
|
30
|
+
import { guardAgainstOwnerExit, resolveOwnerPid } from '../delivery/orphan-guard.js';
|
|
31
31
|
import { findRepoRoot, formatScopeNotice, unreachablePaths } from '../delivery/scope-notice.js';
|
|
32
32
|
import { deletionTargets, formatDeletionNotice } from '../delivery/deletion-notice.js';
|
|
33
33
|
/**
|
|
@@ -186,7 +186,7 @@ function cfgRawEarlyForUvFactory(projectRoot) {
|
|
|
186
186
|
}
|
|
187
187
|
import { resolveSessionTokenBudget, sessionWorkingBudget, discoverModelContextWindow } from '../delivery/context-budget.js';
|
|
188
188
|
import { preflightProject, formatPreflightFailure } from '../delivery/project-preflight.js';
|
|
189
|
-
import { awaitInFlightDeliver } from '../delivery/await-run.js';
|
|
189
|
+
import { awaitInFlightDeliver, FOLLOW_CLIENT_POLL_SEC } from '../delivery/await-run.js';
|
|
190
190
|
/**
|
|
191
191
|
* Follow-mode budget when the caller names none, and its ceiling (seconds).
|
|
192
192
|
*
|
|
@@ -200,10 +200,42 @@ import { awaitInFlightDeliver } from '../delivery/await-run.js';
|
|
|
200
200
|
* every terminal and CI caller at 45s to fix a limit that only one client has.
|
|
201
201
|
*/
|
|
202
202
|
const AWAIT_DEFAULT_BUDGET_SEC = 900;
|
|
203
|
+
/**
|
|
204
|
+
* The follow budget to use when the caller named none.
|
|
205
|
+
*
|
|
206
|
+
* The 900s default above is right for the caller it describes — a human at a
|
|
207
|
+
* terminal, or a CI step — and the note is right that making it short globally
|
|
208
|
+
* was the wrong layer. What it does not cover is the caller that appeared
|
|
209
|
+
* since: an AGENT shelling out to `uap deliver --await-run` from a bash tool.
|
|
210
|
+
* That caller has a request timeout exactly like the MCP one, but it is not the
|
|
211
|
+
* MCP layer, so it got the long default and was killed mid-wait every time.
|
|
212
|
+
*
|
|
213
|
+
* Measured over 24h on 2026-08-10: thirteen waiting invocations from a bash
|
|
214
|
+
* tool, TEN of them with a tool budget of 300s against this 900s default —
|
|
215
|
+
* guaranteed to be cut short. The model read every one as "the deliver tool
|
|
216
|
+
* keeps timing out" and went looking for other ways through, which is the loop.
|
|
217
|
+
* The MCP tool itself never timed out once in the same window (max 48s).
|
|
218
|
+
*
|
|
219
|
+
* Discriminating on a TTY would not work: CI is not a TTY either and genuinely
|
|
220
|
+
* wants the long block. The question is "does my caller give up on me", and
|
|
221
|
+
* this repo already answers it — `resolveOwnerPid` walks the process ancestry
|
|
222
|
+
* for an agent client, which is how a detached run knows whose session it
|
|
223
|
+
* belongs to. Same question, same answer, one implementation.
|
|
224
|
+
*
|
|
225
|
+
* An explicit --await-timeout always wins over this.
|
|
226
|
+
*/
|
|
227
|
+
export function defaultAwaitBudgetSec(ownerPid = resolveOwnerPid) {
|
|
228
|
+
try {
|
|
229
|
+
return ownerPid() !== undefined ? FOLLOW_CLIENT_POLL_SEC : AWAIT_DEFAULT_BUDGET_SEC;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return AWAIT_DEFAULT_BUDGET_SEC; // unknowable: keep the long-standing default
|
|
233
|
+
}
|
|
234
|
+
}
|
|
203
235
|
const AWAIT_MAX_BUDGET_SEC = 14_400;
|
|
204
236
|
import { resolveFidelity } from '../delivery/fidelity.js';
|
|
205
237
|
import { installRunExitRecorder } from '../delivery/run-exit.js';
|
|
206
|
-
import { shouldDetach, relaunchDetached, isDetachedChild, canHostDetachLog, NO_DETACH_ENV, } from './deliver-detach.js';
|
|
238
|
+
import { shouldDetach, relaunchDetached, STILL_RUNNING, isDetachedChild, canHostDetachLog, NO_DETACH_ENV, } from './deliver-detach.js';
|
|
207
239
|
import { completeDeliveryTask, openDeliveryTask, recordDeliveryOutcome, recordOrchestratorTaskOutcome, reopenDeliveryTask } from '../delivery/task-sync.js';
|
|
208
240
|
import { autoMineHaloTraces, summarizeWeaknesses, weaknessGuidance, loadPersistedWeaknesses } from '../delivery/auto-mine.js';
|
|
209
241
|
import { createGitWorktreeProvider } from '../delivery/candidate-workspace.js';
|
|
@@ -958,7 +990,7 @@ export async function deliverCommand(instruction, options) {
|
|
|
958
990
|
const rawBudget = Number(options.awaitTimeout ?? 0);
|
|
959
991
|
const budgetSec = Number.isFinite(rawBudget) && rawBudget > 0
|
|
960
992
|
? Math.min(rawBudget, AWAIT_MAX_BUDGET_SEC)
|
|
961
|
-
:
|
|
993
|
+
: defaultAwaitBudgetSec();
|
|
962
994
|
const budgetMs = Math.max(1, budgetSec) * 1000;
|
|
963
995
|
let lastTickBucket = 0;
|
|
964
996
|
const outcome = await awaitInFlightDeliver(followRoot, {
|
|
@@ -1025,7 +1057,39 @@ export async function deliverCommand(instruction, options) {
|
|
|
1025
1057
|
});
|
|
1026
1058
|
if (decision.detach && canHostDetachLog(projectRootForDetach)) {
|
|
1027
1059
|
const stamp = new Date().toISOString().replace(/[-:.]/g, '').slice(0, 15);
|
|
1028
|
-
|
|
1060
|
+
// Cap the mirror for a caller that gives up. The mission is already
|
|
1061
|
+
// detached; mirroring past the caller's budget does not help it and
|
|
1062
|
+
// converts a SUCCESSFUL launch into a reported timeout — after which the
|
|
1063
|
+
// model kills the run it just started. Same discriminator as the follow
|
|
1064
|
+
// budget: an agent client in the ancestry means somebody is counting.
|
|
1065
|
+
const mirrorBudgetMs = resolveOwnerPid() !== undefined ? FOLLOW_CLIENT_POLL_SEC * 1000 : undefined;
|
|
1066
|
+
const code = await relaunchDetached(projectRootForDetach, stamp, { mirrorBudgetMs });
|
|
1067
|
+
if (code === STILL_RUNNING) {
|
|
1068
|
+
// The mission continues. Say so as a RESULT, not as a truncated stream:
|
|
1069
|
+
// a caller that reads this as failure is the loop being fixed.
|
|
1070
|
+
console.log(chalk.yellow('\n⇢ still running — this launch stopped WATCHING, the mission did not stop. ' +
|
|
1071
|
+
'It continues in the background.'));
|
|
1072
|
+
console.log(chalk.dim(' Follow it with `uap deliver --await-run` (returns quickly; "still running" is an ' +
|
|
1073
|
+
'answer, call it again).\n Do NOT relaunch and do NOT kill it — the run is intact and ' +
|
|
1074
|
+
'holds the lock.'));
|
|
1075
|
+
// --json is a contract: every exit emits parseable output. Without this a
|
|
1076
|
+
// --json caller gets a truncated stream with no JSON at all, which is
|
|
1077
|
+
// exactly what sent one looking for a gate override.
|
|
1078
|
+
if (options.json) {
|
|
1079
|
+
console.log(JSON.stringify({
|
|
1080
|
+
success: true,
|
|
1081
|
+
stillRunning: true,
|
|
1082
|
+
detached: true,
|
|
1083
|
+
projectRoot: projectRootForDetach,
|
|
1084
|
+
reason: 'the mission is running in the background; this launch stopped watching after ' +
|
|
1085
|
+
`${FOLLOW_CLIENT_POLL_SEC}s because the caller has a request timeout`,
|
|
1086
|
+
nextStep: 'Follow it with `uap deliver --await-run`. Do not relaunch and do not kill it.',
|
|
1087
|
+
}, null, 2));
|
|
1088
|
+
}
|
|
1089
|
+
process.exitCode = 0;
|
|
1090
|
+
return;
|
|
1091
|
+
}
|
|
1092
|
+
process.exitCode = code;
|
|
1029
1093
|
return;
|
|
1030
1094
|
}
|
|
1031
1095
|
try {
|