@sentropic/h2a-runtime 0.97.10 → 0.97.12

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 (57) hide show
  1. package/dist/cli-help-groups.js +1 -1
  2. package/dist/cli-help-groups.js.map +1 -1
  3. package/dist/file-lock.d.ts +12 -0
  4. package/dist/file-lock.d.ts.map +1 -1
  5. package/dist/file-lock.js +37 -17
  6. package/dist/file-lock.js.map +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +79 -7
  9. package/dist/index.js.map +1 -1
  10. package/dist/launch-guard.d.ts +31 -0
  11. package/dist/launch-guard.d.ts.map +1 -0
  12. package/dist/launch-guard.js +135 -0
  13. package/dist/launch-guard.js.map +1 -0
  14. package/dist/native-host.d.ts +11 -4
  15. package/dist/native-host.d.ts.map +1 -1
  16. package/dist/native-host.js +19 -6
  17. package/dist/native-host.js.map +1 -1
  18. package/dist/native-terminal/client.d.ts.map +1 -1
  19. package/dist/native-terminal/client.js +7 -0
  20. package/dist/native-terminal/client.js.map +1 -1
  21. package/dist/native-terminal/host.d.ts +258 -17
  22. package/dist/native-terminal/host.d.ts.map +1 -1
  23. package/dist/native-terminal/host.js +814 -68
  24. package/dist/native-terminal/host.js.map +1 -1
  25. package/dist/native-terminal/op.d.ts.map +1 -1
  26. package/dist/native-terminal/op.js +8 -2
  27. package/dist/native-terminal/op.js.map +1 -1
  28. package/dist/native-terminal/process.d.ts.map +1 -1
  29. package/dist/native-terminal/process.js +1 -0
  30. package/dist/native-terminal/process.js.map +1 -1
  31. package/dist/native-terminal/protocol.d.ts +1 -0
  32. package/dist/native-terminal/protocol.d.ts.map +1 -1
  33. package/dist/native-terminal/protocol.js.map +1 -1
  34. package/dist/native-terminal/screen.d.ts +3 -0
  35. package/dist/native-terminal/screen.d.ts.map +1 -0
  36. package/dist/native-terminal/screen.js +18 -0
  37. package/dist/native-terminal/screen.js.map +1 -0
  38. package/dist/native-terminal/server.d.ts.map +1 -1
  39. package/dist/native-terminal/server.js +5 -0
  40. package/dist/native-terminal/server.js.map +1 -1
  41. package/dist/native-terminal/supervisor.d.ts +34 -2
  42. package/dist/native-terminal/supervisor.d.ts.map +1 -1
  43. package/dist/native-terminal/supervisor.js +420 -42
  44. package/dist/native-terminal/supervisor.js.map +1 -1
  45. package/dist/proc-identity.d.ts +67 -0
  46. package/dist/proc-identity.d.ts.map +1 -0
  47. package/dist/proc-identity.js +106 -0
  48. package/dist/proc-identity.js.map +1 -0
  49. package/dist/prompt-delivery.d.ts +11 -1
  50. package/dist/prompt-delivery.d.ts.map +1 -1
  51. package/dist/prompt-delivery.js +62 -6
  52. package/dist/prompt-delivery.js.map +1 -1
  53. package/dist/registry.d.ts +111 -4
  54. package/dist/registry.d.ts.map +1 -1
  55. package/dist/registry.js +86 -11
  56. package/dist/registry.js.map +1 -1
  57. package/package.json +4 -3
@@ -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;KACvB;IACD;QACE,0EAA0E;QAC1E,qCAAqC;QACrC,wDAAwD;QACxD,mDAAmD;QACnD,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,yDAAyD;QAClE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC;KAC5D;IACD;QACE,0EAA0E;QAC1E,0DAA0D;QAC1D,gEAAgE;QAChE,gDAAgD;QAChD,EAAE;QACF,qEAAqE;QACrE,mDAAmD;QACnD,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,qDAAqD;QAC9D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,CAAC;KAC5E;IACD;QACE,0EAA0E;QAC1E,0CAA0C;QAC1C,+CAA+C;QAC/C,gCAAgC;QAChC,EAAE;QACF,6EAA6E;QAC7E,sEAAsE;QACtE,8CAA8C;QAC9C,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,+DAA+D;QACxE,QAAQ,EAAE;YACR,SAAS;YACT,SAAS;YACT,YAAY;YACZ,QAAQ;YACR,MAAM;YACN,SAAS;YACT,SAAS;YACT,WAAW;YACX,QAAQ;YACR,OAAO;YACP,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,oEAAoE;YACpE,MAAM;SACP;KACF;IACD;QACE,gFAAgF;QAChF,sGAAsG;QACtG,EAAE;QACF,qCAAqC;QACrC,wGAAwG;QACxG,EAAE;QACF,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,6DAA6D;QAC7D,EAAE,EAAE,kBAAkB;QACtB,OAAO,EAAE,0CAA0C;QACnD,QAAQ,EAAE;YACR,SAAS;YACT,SAAS;YACT,UAAU;YACV,kBAAkB;YAClB,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,SAAS;SACV;KACF;IACD;QACE,wEAAwE;QACxE,0EAA0E;QAC1E,6EAA6E;QAC7E,4EAA4E;QAC5E,2DAA2D;QAC3D,EAAE;QACF,0EAA0E;QAC1E,mFAAmF;QACnF,2EAA2E;QAC3E,EAAE;QACF,+EAA+E;QAC/E,qGAAqG;QACrG,EAAE;QACF,gEAAgE;QAChE,EAAE,EAAE,WAAW;QACf,OAAO,EAAE,mEAAmE;QAC5E,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;KAClE;IACD;QACE,wEAAwE;QACxE,yEAAyE;QACzE,gEAAgE;QAChE,EAAE;QACF,0EAA0E;QAC1E,wEAAwE;QACxE,kBAAkB;QAClB,sFAAsF;QACtF,oGAAoG;QACpG,EAAE;QACF,wEAAwE;QACxE,qEAAqE;QACrE,4EAA4E;QAC5E,6EAA6E;QAC7E,yEAAyE;QACzE,iEAAiE;QACjE,EAAE,EAAE,WAAW;QACf,OAAO,EACL,6EAA6E;QAC/E,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;IACD;QACE,gEAAgE;QAChE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAgC,IAAI,GAAG,CAC7D,uBAAuB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAU,CAAC,CAC7D,CACF,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAyC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAA2B,EAC3B,YAA0B,EAC1B,QAA6B;IAE7B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;IACzC,iEAAiE;IACjE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;;YAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,+BAA+B,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,uEAAuE;QACvE,iEAAiE;QACjE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"cli-help-groups.js","sourceRoot":"","sources":["../src/cli-help-groups.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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,CAuBhE;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"}
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
- * Acquire the lockfile guarding `path` (exclusive create). Returns the fd on
36
- * success, or undefined if it could not be acquired within LOCK_MAX_WAIT_MS (the
37
- * caller then proceeds best-effort). Breaks a STALE lock (holder crashed) by age.
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 acquireFileLock(path) {
45
+ export function tryAcquireFileLock(path) {
40
46
  const lp = lockPath(path);
41
47
  mkdirSync(dirname(path), { recursive: true });
42
- const deadline = Date.now() + LOCK_MAX_WAIT_MS;
43
- for (;;) {
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
- const fd = openSync(lp, "wx"); // O_CREAT|O_EXCL|O_WRONLY
46
- return fd;
52
+ return openSync(lp, "wx"); // O_CREAT|O_EXCL|O_WRONLY
47
53
  }
48
54
  catch {
49
- // Held — break it if it is stale (a crashed holder left it behind).
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 > LOCK_STALE_MS) {
53
- rmSync(lp, { force: true });
54
- continue; // retry the exclusive create immediately
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
- // raced with the holder releasing it → just retry the create
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) {
@@ -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;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,0BAA0B;YACzD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;gBAC9C,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC;oBACxB,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5B,SAAS,CAAC,yCAAyC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,SAAS,CAAC,CAAC,+BAA+B;YAC7E,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,IAAY;IACtD,IAAI,CAAC;QACH,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAI,IAAY,EAAE,EAAW;IACvD,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS;YAAE,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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("Read-only DEF identity-cull proof packet; execution is disabled");
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
- killNativeSessionTree(name);
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
- killLocalSession(name);
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 (sessionHost === "native")
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();