@sentropic/h2a-runtime 0.97.11 → 0.98.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/cli-help-groups.js +1 -1
- package/dist/cli-help-groups.js.map +1 -1
- package/dist/file-lock.d.ts +12 -0
- package/dist/file-lock.d.ts.map +1 -1
- package/dist/file-lock.js +37 -17
- package/dist/file-lock.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -7
- package/dist/index.js.map +1 -1
- package/dist/launch-guard.d.ts +31 -0
- package/dist/launch-guard.d.ts.map +1 -0
- package/dist/launch-guard.js +135 -0
- package/dist/launch-guard.js.map +1 -0
- package/dist/native-host.d.ts +11 -4
- package/dist/native-host.d.ts.map +1 -1
- package/dist/native-host.js +19 -6
- package/dist/native-host.js.map +1 -1
- package/dist/native-terminal/client.d.ts.map +1 -1
- package/dist/native-terminal/client.js +7 -0
- package/dist/native-terminal/client.js.map +1 -1
- package/dist/native-terminal/host.d.ts +258 -17
- package/dist/native-terminal/host.d.ts.map +1 -1
- package/dist/native-terminal/host.js +814 -68
- package/dist/native-terminal/host.js.map +1 -1
- package/dist/native-terminal/op.d.ts.map +1 -1
- package/dist/native-terminal/op.js +8 -2
- package/dist/native-terminal/op.js.map +1 -1
- package/dist/native-terminal/process.d.ts.map +1 -1
- package/dist/native-terminal/process.js +1 -0
- package/dist/native-terminal/process.js.map +1 -1
- package/dist/native-terminal/protocol.d.ts +1 -0
- package/dist/native-terminal/protocol.d.ts.map +1 -1
- package/dist/native-terminal/protocol.js.map +1 -1
- package/dist/native-terminal/screen.d.ts +3 -0
- package/dist/native-terminal/screen.d.ts.map +1 -0
- package/dist/native-terminal/screen.js +18 -0
- package/dist/native-terminal/screen.js.map +1 -0
- package/dist/native-terminal/server.d.ts.map +1 -1
- package/dist/native-terminal/server.js +5 -0
- package/dist/native-terminal/server.js.map +1 -1
- package/dist/native-terminal/supervisor.d.ts +34 -2
- package/dist/native-terminal/supervisor.d.ts.map +1 -1
- package/dist/native-terminal/supervisor.js +420 -42
- package/dist/native-terminal/supervisor.js.map +1 -1
- package/dist/proc-identity.d.ts +67 -0
- package/dist/proc-identity.d.ts.map +1 -0
- package/dist/proc-identity.js +106 -0
- package/dist/proc-identity.js.map +1 -0
- package/dist/prompt-delivery.d.ts +11 -1
- package/dist/prompt-delivery.d.ts.map +1 -1
- package/dist/prompt-delivery.js +62 -6
- package/dist/prompt-delivery.js.map +1 -1
- package/dist/registry.d.ts +111 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +86 -11
- package/dist/registry.js.map +1 -1
- package/package.json +4 -3
package/dist/cli-help-groups.js
CHANGED
|
@@ -106,7 +106,7 @@ export const H2A_RUNTIME_HELP_GROUPS = [
|
|
|
106
106
|
{
|
|
107
107
|
id: "SPECIALIST",
|
|
108
108
|
heading: "Specialist identity tools (advanced):",
|
|
109
|
-
commands: ["identity"],
|
|
109
|
+
commands: ["identity", "lock"],
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
// Vendored excerpt 3, § "Daily operator surface — top level", these rows:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-help-groups.js","sourceRoot":"","sources":["../src/cli-help-groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAsBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE;QACE,0EAA0E;QAC1E,mDAAmD;QACnD,+CAA+C;QAC/C,4EAA4E;QAC5E,EAAE;QACF,iEAAiE;QACjE,oDAAoD;QACpD,4CAA4C;QAC5C,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,kDAAkD;QAC3D,QAAQ,EAAE;YACR,KAAK;YACL,OAAO;YACP,QAAQ;YACR,KAAK;YACL,QAAQ;YACR,SAAS;YACT,MAAM;YACN,UAAU;YACV,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,MAAM;SACP;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,uCAAuC;QAChD,QAAQ,EAAE,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-help-groups.js","sourceRoot":"","sources":["../src/cli-help-groups.ts"],"names":[],"mappings":"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"}
|
package/dist/file-lock.d.ts
CHANGED
|
@@ -17,6 +17,18 @@
|
|
|
17
17
|
*/
|
|
18
18
|
/** Spin parameters for the lockfile (bounded — a deadlock must never hang a hook). */
|
|
19
19
|
export declare const LOCK_STALE_MS = 10000;
|
|
20
|
+
/**
|
|
21
|
+
* ONE attempt at the lockfile guarding `path` (exclusive create), with the same
|
|
22
|
+
* stale-lock takeover as `acquireFileLock` but NO waiting at all: returns the fd,
|
|
23
|
+
* or undefined when someone else holds it right now.
|
|
24
|
+
*
|
|
25
|
+
* For callers that must not block the event loop for the wait budget below —
|
|
26
|
+
* hygiene-only mutations that are better retried later than spun on (see the
|
|
27
|
+
* PTY-exit prune in native-terminal/host.ts). A caller that needs the mutation
|
|
28
|
+
* to happen must use `acquireFileLock`/`withFileLock` instead: this one reports
|
|
29
|
+
* "not now", which is not the same as "done".
|
|
30
|
+
*/
|
|
31
|
+
export declare function tryAcquireFileLock(path: string): number | undefined;
|
|
20
32
|
/**
|
|
21
33
|
* Acquire the lockfile guarding `path` (exclusive create). Returns the fd on
|
|
22
34
|
* success, or undefined if it could not be acquired within LOCK_MAX_WAIT_MS (the
|
package/dist/file-lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,sFAAsF;AACtF,eAAO,MAAM,aAAa,QAAS,CAAC;AAgBpC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,sFAAsF;AACtF,eAAO,MAAM,aAAa,QAAS,CAAC;AAgBpC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQhE;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAW9D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAO5D"}
|
package/dist/file-lock.js
CHANGED
|
@@ -32,36 +32,56 @@ function spinSleep(ms) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* ONE attempt at the lockfile guarding `path` (exclusive create), with the same
|
|
36
|
+
* stale-lock takeover as `acquireFileLock` but NO waiting at all: returns the fd,
|
|
37
|
+
* or undefined when someone else holds it right now.
|
|
38
|
+
*
|
|
39
|
+
* For callers that must not block the event loop for the wait budget below —
|
|
40
|
+
* hygiene-only mutations that are better retried later than spun on (see the
|
|
41
|
+
* PTY-exit prune in native-terminal/host.ts). A caller that needs the mutation
|
|
42
|
+
* to happen must use `acquireFileLock`/`withFileLock` instead: this one reports
|
|
43
|
+
* "not now", which is not the same as "done".
|
|
38
44
|
*/
|
|
39
|
-
export function
|
|
45
|
+
export function tryAcquireFileLock(path) {
|
|
40
46
|
const lp = lockPath(path);
|
|
41
47
|
mkdirSync(dirname(path), { recursive: true });
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
// Two attempts at most: the second exists only for the case the first found a
|
|
49
|
+
// STALE lockfile (or raced the holder releasing one) and cleared the way.
|
|
50
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
44
51
|
try {
|
|
45
|
-
|
|
46
|
-
return fd;
|
|
52
|
+
return openSync(lp, "wx"); // O_CREAT|O_EXCL|O_WRONLY
|
|
47
53
|
}
|
|
48
54
|
catch {
|
|
49
|
-
|
|
55
|
+
if (attempt > 0)
|
|
56
|
+
return undefined; // someone else won it: not now
|
|
50
57
|
try {
|
|
51
58
|
const age = Date.now() - statSync(lp).mtimeMs;
|
|
52
|
-
if (age
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
59
|
+
if (age <= LOCK_STALE_MS)
|
|
60
|
+
return undefined; // genuinely held: not now
|
|
61
|
+
rmSync(lp, { force: true }); // crashed holder: break it and retry once
|
|
56
62
|
}
|
|
57
63
|
catch {
|
|
58
|
-
//
|
|
64
|
+
// Raced with the holder releasing it → retry the create once.
|
|
59
65
|
}
|
|
60
|
-
if (Date.now() >= deadline)
|
|
61
|
-
return undefined; // give up, proceed best-effort
|
|
62
|
-
spinSleep(LOCK_SPIN_MS);
|
|
63
66
|
}
|
|
64
67
|
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Acquire the lockfile guarding `path` (exclusive create). Returns the fd on
|
|
72
|
+
* success, or undefined if it could not be acquired within LOCK_MAX_WAIT_MS (the
|
|
73
|
+
* caller then proceeds best-effort). Breaks a STALE lock (holder crashed) by age.
|
|
74
|
+
*/
|
|
75
|
+
export function acquireFileLock(path) {
|
|
76
|
+
const deadline = Date.now() + LOCK_MAX_WAIT_MS;
|
|
77
|
+
for (;;) {
|
|
78
|
+
const fd = tryAcquireFileLock(path);
|
|
79
|
+
if (fd !== undefined)
|
|
80
|
+
return fd;
|
|
81
|
+
if (Date.now() >= deadline)
|
|
82
|
+
return undefined; // give up, proceed best-effort
|
|
83
|
+
spinSleep(LOCK_SPIN_MS);
|
|
84
|
+
}
|
|
65
85
|
}
|
|
66
86
|
/** Release a lock taken by `acquireFileLock` (idempotent — a double release is a no-op). */
|
|
67
87
|
export function releaseFileLock(fd, path) {
|
package/dist/file-lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,iDAAiD;AACtF,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,iDAAiD;AACzE,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,wDAAwD;AAExF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,SAAS,SAAS,CAAC,EAAU;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACxB,2EAA2E;IAC7E,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuEA,OAAO,EAsDL,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import { gitAlignment, localAncestry, localGitStat, remoteGitStat, } from "./git
|
|
|
18
18
|
import { syncConversation } from "./sync.js";
|
|
19
19
|
import { attachLocalSession, attachPodTmux, capturePane, capturePaneVisible, clearPaneComposer, conductorRunning, currentTmuxSessionName, currentTmuxSessionIs, ensureManagedTmuxProfile, ensureHeadlessTerminal, existingLocalSessionSlugs, fanoutLabels, findLocalSession, killLocalSession, localSessionGatewayEnvStatus, listLocalSessions, listH2aStatusSurfaces, listLocalSessionsWithDiagnostics, localSessionIdle, localSessionPanePid, localSessionName, paneProcessObservation, paneTreeCpuMs, paneWorkerAttribution, paneWorkerAttributionFromView, paneWorkerPid, pasteLiteralBlock, submitPane, installH2aStatusSurface, managedSessionCandidates, parseManagedSessionName, openH2aStatusWindow, persistLaunchContext, readLaunchContext, readFleetProcView, relaunchInSession, resolveAgentPane, resolveAgentPaneForInstance, resolveLocalSession, sessionRelaunchSafety, runLocalCliForeground, sendKeysLiteral, sessionAttached, sessionAttachedCount, setLocalSessionDisplayName, slugify, cleanupHeadlessPromptFile, startH2aWindow, startH2aWindowVerified, startHeadlessSession, startLocalSession, tmuxAvailable, uninstallH2aStatusSurface, } from "./tmux.js";
|
|
20
20
|
import { deliverInitialPrompt, sleepSync, } from "./prompt-delivery.js";
|
|
21
|
+
import { startLaunchGuard } from "./launch-guard.js";
|
|
21
22
|
import { buildLaunchContext } from "./launch-context.js";
|
|
22
23
|
import { attachNativeSession, driveNativeInstruction, killNativeSessionIfIncarnation, killNativeSessionTree, nativeHostAvailable, nativePromptDeliveryDeps, nativeSessionLiveness, nativeSessionPid, nativeSessionState, nativeTreeCpuMs, nativeWorkerPid, resolveSessionHostKind, startNativeH2aSidecar, startNativeHeadlessSession, startNativeSession, } from "./native-host.js";
|
|
23
24
|
import { executeNativeRestart, NativeRestartError, } from "./native-restart.js";
|
|
@@ -1760,7 +1761,40 @@ export async function main(argv) {
|
|
|
1760
1761
|
.version("0.0.0");
|
|
1761
1762
|
const identityCommand = program
|
|
1762
1763
|
.command("identity")
|
|
1763
|
-
.description("
|
|
1764
|
+
.description("Inspect identity bindings or unlock a token-fenced identity lock");
|
|
1765
|
+
const operatorBreak = async (lockPath, token, assertDead) => {
|
|
1766
|
+
const { breakLockAsOperator } = await import("@sentropic/h2a");
|
|
1767
|
+
const result = breakLockAsOperator(lockPath, { expectToken: token, assertDead });
|
|
1768
|
+
process.stdout.write(`${JSON.stringify({ path: lockPath, ...result })}\n`);
|
|
1769
|
+
if (!result.broken) {
|
|
1770
|
+
process.stderr.write(`[h2a] lock break refused: ${result.reason}${result.pid !== undefined ? ` (pid ${result.pid})` : ""}\n`);
|
|
1771
|
+
if (result.reason === "assert-dead-required") {
|
|
1772
|
+
process.stderr.write("[h2a] verify the holder has stopped, then explicitly pass --assert-dead; no PID is killed\n");
|
|
1773
|
+
}
|
|
1774
|
+
process.exitCode = 1;
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
identityCommand
|
|
1778
|
+
.command("unlock")
|
|
1779
|
+
.description("Break identity/.lock by expected token through SUCC; refuse live holders; never kill a PID")
|
|
1780
|
+
.option("--root <path>", "h2a store root (default: H2A_ROOT or ~/h2a-workspace/.h2a)")
|
|
1781
|
+
.requiredOption("--token <token>", "expected LOCK token; legacy uses legacy- + SHA-256 of exact file bytes")
|
|
1782
|
+
.option("--assert-dead", "explicitly assert an undecidable holder has stopped; cannot override a live verdict")
|
|
1783
|
+
.action(async (opts) => {
|
|
1784
|
+
const root = opts.root ?? process.env.H2A_ROOT ?? defaultLocalH2aRoot();
|
|
1785
|
+
await operatorBreak(join(root, "identity", ".lock"), opts.token, opts.assertDead === true);
|
|
1786
|
+
});
|
|
1787
|
+
program
|
|
1788
|
+
.command("lock")
|
|
1789
|
+
.description("Recover a succession lock by expected token; never kill a PID")
|
|
1790
|
+
.command("break")
|
|
1791
|
+
.description("Retire the expected LOCK through SUCC, without acquiring or republishing it")
|
|
1792
|
+
.requiredOption("--path <path>", "exact succession LOCK path")
|
|
1793
|
+
.requiredOption("--token <token>", "expected LOCK token (including synthetic legacy tokens)")
|
|
1794
|
+
.option("--assert-dead", "explicitly assert an undecidable holder has stopped; live holders are refused")
|
|
1795
|
+
.action(async (opts) => {
|
|
1796
|
+
await operatorBreak(opts.path, opts.token, opts.assertDead === true);
|
|
1797
|
+
});
|
|
1764
1798
|
identityCommand
|
|
1765
1799
|
.command("cull")
|
|
1766
1800
|
.description("Emit a fail-closed DEF binding analysis packet (dry-run only)")
|
|
@@ -4301,6 +4335,8 @@ export async function main(argv) {
|
|
|
4301
4335
|
let agentPane;
|
|
4302
4336
|
let promptFile;
|
|
4303
4337
|
let promptDelivery;
|
|
4338
|
+
let launchGuard;
|
|
4339
|
+
let launchOwnership;
|
|
4304
4340
|
if (opts.json && opts.name) {
|
|
4305
4341
|
process.stderr.write(`${STRUCTURED_LAUNCH_PHASE_PREFIX}${JSON.stringify({
|
|
4306
4342
|
launchId: opts.name,
|
|
@@ -4335,6 +4371,10 @@ export async function main(argv) {
|
|
|
4335
4371
|
? { terminateOnAgentExit: true }
|
|
4336
4372
|
: {}),
|
|
4337
4373
|
...(structuredLaunch ? { refuseExisting: true } : {}),
|
|
4374
|
+
...(structuredLaunch && initialPrompt !== undefined ? { beforeCreate: (owned) => {
|
|
4375
|
+
launchOwnership = { host: "native", sessions: [owned] };
|
|
4376
|
+
launchGuard = startLaunchGuard(join(cwd, ".h2a", "runs", slugify(label ?? cwd)), launchOwnership);
|
|
4377
|
+
} } : {}),
|
|
4338
4378
|
sessionClass,
|
|
4339
4379
|
}));
|
|
4340
4380
|
}
|
|
@@ -4363,17 +4403,37 @@ export async function main(argv) {
|
|
|
4363
4403
|
process.exitCode = 1;
|
|
4364
4404
|
return;
|
|
4365
4405
|
}
|
|
4406
|
+
if (structuredLaunch && !opts.headless && initialPrompt !== undefined) {
|
|
4407
|
+
if (sessionHost !== "native") {
|
|
4408
|
+
const ownedPid = localSessionPanePid(agentPane);
|
|
4409
|
+
if (ownedPid === undefined) {
|
|
4410
|
+
killLocalSession(name);
|
|
4411
|
+
throw new Error("cannot attest the created tmux pane");
|
|
4412
|
+
}
|
|
4413
|
+
launchOwnership = { host: "tmux", sessions: [{ name, pane: agentPane, pid: ownedPid }] };
|
|
4414
|
+
launchGuard = startLaunchGuard(join(cwd, ".h2a", "runs", slug), launchOwnership);
|
|
4415
|
+
}
|
|
4416
|
+
}
|
|
4366
4417
|
let h2aSidecarStarted = false;
|
|
4367
4418
|
if (h2aSidecar && sessionHost === "native") {
|
|
4368
4419
|
h2aSidecarStarted = startNativeH2aSidecar(name, cwd, h2a.command, {
|
|
4369
4420
|
...(structuredLaunch ? { verified: true } : {}),
|
|
4421
|
+
...(launchGuard && launchOwnership?.host === "native" ? { beforeCreate: (owned) => {
|
|
4422
|
+
if (launchOwnership?.host === "native") {
|
|
4423
|
+
launchOwnership.sessions.push(owned);
|
|
4424
|
+
launchGuard.own(launchOwnership);
|
|
4425
|
+
}
|
|
4426
|
+
} } : {}),
|
|
4370
4427
|
});
|
|
4371
4428
|
if (!h2aSidecarStarted && structuredLaunch) {
|
|
4372
4429
|
cleanupHeadlessPromptFile(promptFile);
|
|
4373
4430
|
// OWN-CLEANUP, deliberately NOT resolver-derived (F1 sorting):
|
|
4374
4431
|
// this kills the session THIS command just created on the host
|
|
4375
4432
|
// it chose; the resolver could refuse and leak the partial.
|
|
4376
|
-
|
|
4433
|
+
if (launchGuard)
|
|
4434
|
+
launchGuard.stop();
|
|
4435
|
+
else
|
|
4436
|
+
killNativeSessionTree(name);
|
|
4377
4437
|
process.stderr.write(`[h2a] required h2a sidecar failed for ${slug}; the partial session was stopped\n`);
|
|
4378
4438
|
process.exitCode = 1;
|
|
4379
4439
|
return;
|
|
@@ -4400,7 +4460,10 @@ export async function main(argv) {
|
|
|
4400
4460
|
// OWN-CLEANUP, deliberately NOT resolver-derived (F1 sorting):
|
|
4401
4461
|
// this kills the session THIS command just created on the host
|
|
4402
4462
|
// it chose; the resolver could refuse and leak the partial.
|
|
4403
|
-
|
|
4463
|
+
if (launchGuard)
|
|
4464
|
+
launchGuard.stop();
|
|
4465
|
+
else
|
|
4466
|
+
killLocalSession(name);
|
|
4404
4467
|
process.stderr.write(`[h2a] required h2a sidecar failed for ${slug}; the partial session was stopped\n`);
|
|
4405
4468
|
process.exitCode = 1;
|
|
4406
4469
|
return;
|
|
@@ -4417,7 +4480,7 @@ export async function main(argv) {
|
|
|
4417
4480
|
// reporting "started" over a lost brief is what left a lane inert
|
|
4418
4481
|
// for 33 minutes on 2026-07-28.
|
|
4419
4482
|
promptDelivery = sessionHost === "native"
|
|
4420
|
-
? deliverInitialPrompt(name, initialPrompt, nativePromptDeliveryDeps(sleepSync))
|
|
4483
|
+
? deliverInitialPrompt(name, initialPrompt, nativePromptDeliveryDeps(sleepSync), { profile })
|
|
4421
4484
|
: deliverInitialPrompt(agentPane, initialPrompt, {
|
|
4422
4485
|
capturePane: capturePaneVisible,
|
|
4423
4486
|
clearComposer: clearPaneComposer,
|
|
@@ -4426,7 +4489,7 @@ export async function main(argv) {
|
|
|
4426
4489
|
cpuMs: paneTreeCpuMs,
|
|
4427
4490
|
sleep: sleepSync,
|
|
4428
4491
|
now: () => Date.now(),
|
|
4429
|
-
});
|
|
4492
|
+
}, { profile });
|
|
4430
4493
|
if (promptDelivery.state !== "working") {
|
|
4431
4494
|
cleanupHeadlessPromptFile(promptFile);
|
|
4432
4495
|
// Only claim the session is gone when the kill actually reported
|
|
@@ -4437,7 +4500,7 @@ export async function main(argv) {
|
|
|
4437
4500
|
// OWN-CLEANUP, deliberately NOT resolver-derived (F1 sorting):
|
|
4438
4501
|
// `name`/`sessionHost` are the session and host THIS command
|
|
4439
4502
|
// just created; re-resolving could refuse and leak the partial.
|
|
4440
|
-
const stopped = sessionHost === "native"
|
|
4503
|
+
const stopped = launchGuard ? launchGuard.stop() : sessionHost === "native"
|
|
4441
4504
|
? killNativeSessionTree(name)
|
|
4442
4505
|
: killLocalSession(name);
|
|
4443
4506
|
const detail = promptDelivery.state === "submitted-idle"
|
|
@@ -4457,6 +4520,12 @@ export async function main(argv) {
|
|
|
4457
4520
|
? `[h2a] last screen:\n${promptDelivery.capture}\n`
|
|
4458
4521
|
: ""));
|
|
4459
4522
|
process.exitCode = 1;
|
|
4523
|
+
if (opts.json && promptDelivery.state === "provider-blocked") {
|
|
4524
|
+
process.stdout.write(`${JSON.stringify({ kind: "h2a.run.failure", version: 1,
|
|
4525
|
+
state: "provider-blocked", launchId: slug, error: promptDelivery.reason,
|
|
4526
|
+
stopped, retrySafe: false, prompt: { delivered: true, waitedMs: promptDelivery.waitedMs },
|
|
4527
|
+
})}\n`);
|
|
4528
|
+
}
|
|
4460
4529
|
return;
|
|
4461
4530
|
}
|
|
4462
4531
|
}
|
|
@@ -4475,7 +4544,9 @@ export async function main(argv) {
|
|
|
4475
4544
|
// OWN-CLEANUP, deliberately NOT resolver-derived (F1 sorting):
|
|
4476
4545
|
// `name`/`sessionHost` are the session and host THIS command
|
|
4477
4546
|
// just created; re-resolving could refuse and leak the partial.
|
|
4478
|
-
if (
|
|
4547
|
+
if (launchGuard)
|
|
4548
|
+
launchGuard.stop();
|
|
4549
|
+
else if (sessionHost === "native")
|
|
4479
4550
|
killNativeSessionTree(name);
|
|
4480
4551
|
else
|
|
4481
4552
|
killLocalSession(name);
|
|
@@ -4510,6 +4581,7 @@ export async function main(argv) {
|
|
|
4510
4581
|
...(resultJson !== undefined ? { resultJson } : {}),
|
|
4511
4582
|
...(promptDelivery !== undefined ? { promptDelivery } : {}),
|
|
4512
4583
|
});
|
|
4584
|
+
launchGuard?.complete();
|
|
4513
4585
|
// The writer is now durable in the registry. End the short critical
|
|
4514
4586
|
// section before a foreground attach can keep this command alive.
|
|
4515
4587
|
resumeClaim?.release();
|