@openrig/cli 0.4.1 → 0.4.3

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 (264) hide show
  1. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
  2. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +87 -0
  3. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +46 -0
  4. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  5. package/daemon/dist/adapters/codex-runtime-adapter.js +167 -3
  6. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  7. package/daemon/dist/adapters/tmux.d.ts +31 -0
  8. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  9. package/daemon/dist/adapters/tmux.js +62 -0
  10. package/daemon/dist/adapters/tmux.js.map +1 -1
  11. package/daemon/dist/db/migrations/045_resume_verification.d.ts +29 -0
  12. package/daemon/dist/db/migrations/045_resume_verification.d.ts.map +1 -0
  13. package/daemon/dist/db/migrations/045_resume_verification.js +34 -0
  14. package/daemon/dist/db/migrations/045_resume_verification.js.map +1 -0
  15. package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +41 -0
  16. package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -0
  17. package/daemon/dist/db/migrations/046_seat_identity_verdicts.js +56 -0
  18. package/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -0
  19. package/daemon/dist/db/migrations/047_events_node_type_index.d.ts +48 -0
  20. package/daemon/dist/db/migrations/047_events_node_type_index.d.ts.map +1 -0
  21. package/daemon/dist/db/migrations/047_events_node_type_index.js +52 -0
  22. package/daemon/dist/db/migrations/047_events_node_type_index.js.map +1 -0
  23. package/daemon/dist/domain/activity-endpoint.d.ts +25 -0
  24. package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -0
  25. package/daemon/dist/domain/activity-endpoint.js +91 -0
  26. package/daemon/dist/domain/activity-endpoint.js.map +1 -0
  27. package/daemon/dist/domain/claim-service.d.ts +36 -0
  28. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  29. package/daemon/dist/domain/claim-service.js +90 -0
  30. package/daemon/dist/domain/claim-service.js.map +1 -1
  31. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +57 -0
  32. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  33. package/daemon/dist/domain/claude-compaction-enforcer.js +149 -3
  34. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  35. package/daemon/dist/domain/event-loop-monitor.d.ts +100 -0
  36. package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -0
  37. package/daemon/dist/domain/event-loop-monitor.js +127 -0
  38. package/daemon/dist/domain/event-loop-monitor.js.map +1 -0
  39. package/daemon/dist/domain/gate-predicate.d.ts +29 -0
  40. package/daemon/dist/domain/gate-predicate.d.ts.map +1 -0
  41. package/daemon/dist/domain/gate-predicate.js +73 -0
  42. package/daemon/dist/domain/gate-predicate.js.map +1 -0
  43. package/daemon/dist/domain/graph-projection.d.ts +7 -1
  44. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  45. package/daemon/dist/domain/graph-projection.js +19 -1
  46. package/daemon/dist/domain/graph-projection.js.map +1 -1
  47. package/daemon/dist/domain/node-inventory.d.ts +7 -1
  48. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  49. package/daemon/dist/domain/node-inventory.js +84 -5
  50. package/daemon/dist/domain/node-inventory.js.map +1 -1
  51. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
  52. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
  53. package/daemon/dist/domain/periodic-snapshot-scheduler.js +11 -0
  54. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
  55. package/daemon/dist/domain/policies/idle-gate-qitem.d.ts +14 -0
  56. package/daemon/dist/domain/policies/idle-gate-qitem.d.ts.map +1 -0
  57. package/daemon/dist/domain/policies/idle-gate-qitem.js +114 -0
  58. package/daemon/dist/domain/policies/idle-gate-qitem.js.map +1 -0
  59. package/daemon/dist/domain/restore-orchestrator.d.ts +8 -0
  60. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  61. package/daemon/dist/domain/restore-orchestrator.js +109 -27
  62. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  63. package/daemon/dist/domain/restore-plan-preview.d.ts +25 -1
  64. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  65. package/daemon/dist/domain/restore-plan-preview.js +72 -4
  66. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  67. package/daemon/dist/domain/resume-metadata-refresher.d.ts +44 -2
  68. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  69. package/daemon/dist/domain/resume-metadata-refresher.js +92 -6
  70. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  71. package/daemon/dist/domain/resume-token-capture.d.ts +50 -0
  72. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -0
  73. package/daemon/dist/domain/resume-token-capture.js +63 -0
  74. package/daemon/dist/domain/resume-token-capture.js.map +1 -0
  75. package/daemon/dist/domain/rig-status-compose.d.ts +62 -0
  76. package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -0
  77. package/daemon/dist/domain/rig-status-compose.js +149 -0
  78. package/daemon/dist/domain/rig-status-compose.js.map +1 -0
  79. package/daemon/dist/domain/rig-teardown.d.ts +3 -1
  80. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  81. package/daemon/dist/domain/rig-teardown.js +4 -19
  82. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  83. package/daemon/dist/domain/route-timing-recorder.d.ts +42 -0
  84. package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -0
  85. package/daemon/dist/domain/route-timing-recorder.js +62 -0
  86. package/daemon/dist/domain/route-timing-recorder.js.map +1 -0
  87. package/daemon/dist/domain/scope/scope-audit.d.ts +3 -1
  88. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  89. package/daemon/dist/domain/scope/scope-audit.js +30 -1
  90. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  91. package/daemon/dist/domain/seat-handover-service.d.ts +50 -7
  92. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  93. package/daemon/dist/domain/seat-handover-service.js +273 -33
  94. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  95. package/daemon/dist/domain/seat-identity-reconciler.d.ts +59 -0
  96. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -0
  97. package/daemon/dist/domain/seat-identity-reconciler.js +207 -0
  98. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -0
  99. package/daemon/dist/domain/seat-identity-store.d.ts +27 -0
  100. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -0
  101. package/daemon/dist/domain/seat-identity-store.js +106 -0
  102. package/daemon/dist/domain/seat-identity-store.js.map +1 -0
  103. package/daemon/dist/domain/seat-switch-client-service.d.ts +57 -0
  104. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -0
  105. package/daemon/dist/domain/seat-switch-client-service.js +168 -0
  106. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -0
  107. package/daemon/dist/domain/self-attach-service.d.ts +8 -0
  108. package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
  109. package/daemon/dist/domain/self-attach-service.js +20 -7
  110. package/daemon/dist/domain/self-attach-service.js.map +1 -1
  111. package/daemon/dist/domain/session-registry.d.ts +35 -4
  112. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  113. package/daemon/dist/domain/session-registry.js +89 -10
  114. package/daemon/dist/domain/session-registry.js.map +1 -1
  115. package/daemon/dist/domain/session-transport.d.ts +8 -1
  116. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  117. package/daemon/dist/domain/session-transport.js +143 -37
  118. package/daemon/dist/domain/session-transport.js.map +1 -1
  119. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  120. package/daemon/dist/domain/startup-orchestrator.js +34 -2
  121. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  122. package/daemon/dist/domain/startup-proof.d.ts +63 -0
  123. package/daemon/dist/domain/startup-proof.d.ts.map +1 -0
  124. package/daemon/dist/domain/startup-proof.js +165 -0
  125. package/daemon/dist/domain/startup-proof.js.map +1 -0
  126. package/daemon/dist/domain/successor-session-launcher.d.ts +103 -0
  127. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -0
  128. package/daemon/dist/domain/successor-session-launcher.js +246 -0
  129. package/daemon/dist/domain/successor-session-launcher.js.map +1 -0
  130. package/daemon/dist/domain/types.d.ts +81 -0
  131. package/daemon/dist/domain/types.d.ts.map +1 -1
  132. package/daemon/dist/domain/types.js +8 -0
  133. package/daemon/dist/domain/types.js.map +1 -1
  134. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -2
  135. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  136. package/daemon/dist/domain/watchdog-jobs-repository.js +4 -0
  137. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  138. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  139. package/daemon/dist/domain/watchdog-policy-engine.js +19 -0
  140. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  141. package/daemon/dist/index.d.ts.map +1 -1
  142. package/daemon/dist/index.js +18 -1
  143. package/daemon/dist/index.js.map +1 -1
  144. package/daemon/dist/routes/activity.d.ts.map +1 -1
  145. package/daemon/dist/routes/activity.js +26 -0
  146. package/daemon/dist/routes/activity.js.map +1 -1
  147. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  148. package/daemon/dist/routes/agent-images.js +139 -0
  149. package/daemon/dist/routes/agent-images.js.map +1 -1
  150. package/daemon/dist/routes/compaction.d.ts +17 -0
  151. package/daemon/dist/routes/compaction.d.ts.map +1 -0
  152. package/daemon/dist/routes/compaction.js +125 -0
  153. package/daemon/dist/routes/compaction.js.map +1 -0
  154. package/daemon/dist/routes/restore-check.d.ts +10 -0
  155. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  156. package/daemon/dist/routes/restore-check.js +46 -37
  157. package/daemon/dist/routes/restore-check.js.map +1 -1
  158. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  159. package/daemon/dist/routes/rigs.js +70 -1
  160. package/daemon/dist/routes/rigs.js.map +1 -1
  161. package/daemon/dist/routes/seat.d.ts.map +1 -1
  162. package/daemon/dist/routes/seat.js +53 -2
  163. package/daemon/dist/routes/seat.js.map +1 -1
  164. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  165. package/daemon/dist/routes/sessions.js +44 -9
  166. package/daemon/dist/routes/sessions.js.map +1 -1
  167. package/daemon/dist/routes/snapshots.d.ts.map +1 -1
  168. package/daemon/dist/routes/snapshots.js +16 -1
  169. package/daemon/dist/routes/snapshots.js.map +1 -1
  170. package/daemon/dist/routes/transport.d.ts.map +1 -1
  171. package/daemon/dist/routes/transport.js +12 -5
  172. package/daemon/dist/routes/transport.js.map +1 -1
  173. package/daemon/dist/server.d.ts +32 -0
  174. package/daemon/dist/server.d.ts.map +1 -1
  175. package/daemon/dist/server.js +28 -1
  176. package/daemon/dist/server.js.map +1 -1
  177. package/daemon/dist/startup.d.ts +1 -0
  178. package/daemon/dist/startup.d.ts.map +1 -1
  179. package/daemon/dist/startup.js +91 -18
  180. package/daemon/dist/startup.js.map +1 -1
  181. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +1 -1
  182. package/dist/commands/compact.d.ts +15 -0
  183. package/dist/commands/compact.d.ts.map +1 -0
  184. package/dist/commands/compact.js +62 -0
  185. package/dist/commands/compact.js.map +1 -0
  186. package/dist/commands/daemon.d.ts.map +1 -1
  187. package/dist/commands/daemon.js +18 -2
  188. package/dist/commands/daemon.js.map +1 -1
  189. package/dist/commands/fork.d.ts +4 -0
  190. package/dist/commands/fork.d.ts.map +1 -0
  191. package/dist/commands/fork.js +101 -0
  192. package/dist/commands/fork.js.map +1 -0
  193. package/dist/commands/launch.d.ts.map +1 -1
  194. package/dist/commands/launch.js +34 -4
  195. package/dist/commands/launch.js.map +1 -1
  196. package/dist/commands/ps.d.ts.map +1 -1
  197. package/dist/commands/ps.js +14 -4
  198. package/dist/commands/ps.js.map +1 -1
  199. package/dist/commands/queue.d.ts +6 -0
  200. package/dist/commands/queue.d.ts.map +1 -1
  201. package/dist/commands/queue.js +78 -4
  202. package/dist/commands/queue.js.map +1 -1
  203. package/dist/commands/reconcile-session.d.ts.map +1 -1
  204. package/dist/commands/reconcile-session.js +2 -2
  205. package/dist/commands/reconcile-session.js.map +1 -1
  206. package/dist/commands/restore-check.d.ts.map +1 -1
  207. package/dist/commands/restore-check.js +93 -0
  208. package/dist/commands/restore-check.js.map +1 -1
  209. package/dist/commands/scope.d.ts.map +1 -1
  210. package/dist/commands/scope.js +51 -1
  211. package/dist/commands/scope.js.map +1 -1
  212. package/dist/commands/seat.d.ts +17 -0
  213. package/dist/commands/seat.d.ts.map +1 -1
  214. package/dist/commands/seat.js +145 -32
  215. package/dist/commands/seat.js.map +1 -1
  216. package/dist/commands/send.d.ts.map +1 -1
  217. package/dist/commands/send.js +151 -10
  218. package/dist/commands/send.js.map +1 -1
  219. package/dist/commands/start.d.ts +5 -0
  220. package/dist/commands/start.d.ts.map +1 -1
  221. package/dist/commands/start.js.map +1 -1
  222. package/dist/commands/startup-proof.d.ts +24 -0
  223. package/dist/commands/startup-proof.d.ts.map +1 -0
  224. package/dist/commands/startup-proof.js +100 -0
  225. package/dist/commands/startup-proof.js.map +1 -0
  226. package/dist/commands/unclaim.js +2 -2
  227. package/dist/commands/unclaim.js.map +1 -1
  228. package/dist/commands/up.d.ts.map +1 -1
  229. package/dist/commands/up.js +10 -0
  230. package/dist/commands/up.js.map +1 -1
  231. package/dist/commands/watchdog.js +2 -2
  232. package/dist/commands/watchdog.js.map +1 -1
  233. package/dist/daemon-lifecycle.d.ts +24 -0
  234. package/dist/daemon-lifecycle.d.ts.map +1 -1
  235. package/dist/daemon-lifecycle.js +85 -8
  236. package/dist/daemon-lifecycle.js.map +1 -1
  237. package/dist/index.d.ts +5 -0
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +8 -1
  240. package/dist/index.js.map +1 -1
  241. package/dist/lib/codex-auth.d.ts +24 -0
  242. package/dist/lib/codex-auth.d.ts.map +1 -1
  243. package/dist/lib/codex-auth.js +89 -17
  244. package/dist/lib/codex-auth.js.map +1 -1
  245. package/dist/lib/scope/scope-audit.d.ts +3 -1
  246. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  247. package/dist/lib/scope/scope-audit.js +30 -1
  248. package/dist/lib/scope/scope-audit.js.map +1 -1
  249. package/dist/lib/scope-templates/mission-placeholder.md +41 -0
  250. package/dist/lib/scope-templates/mission-progress.md +2 -0
  251. package/dist/lib/scope-templates/mission-release.md +41 -0
  252. package/dist/lib/scope-templates/placeholder.md +4 -0
  253. package/dist/lib/scope-templates/proof.md +2 -0
  254. package/dist/lib/scope-templates/slice-progress.md +2 -0
  255. package/dist/openrig-compat.d.ts +19 -0
  256. package/dist/openrig-compat.d.ts.map +1 -1
  257. package/dist/openrig-compat.js +31 -1
  258. package/dist/openrig-compat.js.map +1 -1
  259. package/package.json +1 -1
  260. package/ui/dist/assets/index-DYZniQcc.js +597 -0
  261. package/ui/dist/assets/index-trcb4Yf_.css +32 -0
  262. package/ui/dist/index.html +23 -2
  263. package/ui/dist/assets/index-CnqRX7A3.css +0 -32
  264. package/ui/dist/assets/index-CtL9jXFt.js +0 -582
@@ -1,6 +1,9 @@
1
1
  import { ulid } from "ulid";
2
2
  import { SeatStatusService } from "./seat-status-service.js";
3
3
  import { SeatHandoverPlanner, parseHandoverSource } from "./seat-handover-planner.js";
4
+ import { SuccessorSessionLauncher } from "./successor-session-launcher.js";
5
+ import { deriveResumeToken } from "./resume-token-capture.js";
6
+ import { validateResumeToken } from "./resume-token-validation.js";
4
7
  export class SeatHandoverService {
5
8
  db;
6
9
  statusService;
@@ -10,6 +13,8 @@ export class SeatHandoverService {
10
13
  discoveryRepo;
11
14
  eventBus;
12
15
  tmuxAdapter;
16
+ successorLauncher;
17
+ captureDeps;
13
18
  now;
14
19
  constructor(deps) {
15
20
  if (deps.db !== deps.rigRepo.db)
@@ -29,6 +34,17 @@ export class SeatHandoverService {
29
34
  this.now = deps.now ?? (() => new Date());
30
35
  this.statusService = new SeatStatusService({ rigRepo: deps.rigRepo });
31
36
  this.planner = new SeatHandoverPlanner({ rigRepo: deps.rigRepo });
37
+ this.successorLauncher = new SuccessorSessionLauncher(deps.tmuxAdapter, deps.discoveryRepo, {
38
+ sessionEnv: deps.sessionEnv,
39
+ newId: deps.newSuccessorId,
40
+ runtimeAdapters: deps.runtimeAdapters,
41
+ readinessTimeoutMs: deps.readinessTimeoutMs,
42
+ sleep: deps.sleep,
43
+ });
44
+ this.captureDeps = {
45
+ contextUsageStore: deps.contextUsageStore ?? null,
46
+ resumeTokenCapturer: deps.resumeTokenCapturer ?? null,
47
+ };
32
48
  }
33
49
  async handover(input) {
34
50
  if (input.dryRun) {
@@ -71,12 +87,21 @@ export class SeatHandoverService {
71
87
  if (!parsed.ok) {
72
88
  return parsed;
73
89
  }
74
- if (parsed.source.mode !== "discovered" || !parsed.source.ref) {
90
+ // B3 — v0 supports `fresh` (launch a live successor) and `discovered`
91
+ // (operator-prepared live session) ONLY. `fork` and `rebuild` are LOUDLY
92
+ // REJECTED here — before any successor is created — so a blank successor is
93
+ // never bound and never reported `complete`. Their population is a tracked
94
+ // follow-on (fork → slice-05 native-fork primitive; rebuild → apply
95
+ // session-source artifacts at create). Dry-run planning for all four modes
96
+ // still returns a plan above (mutates nothing).
97
+ if (parsed.source.mode === "fork" || parsed.source.mode === "rebuild") {
75
98
  return {
76
99
  ok: false,
77
- code: "successor_creation_not_implemented",
78
- message: `Seat handover mutation for source "${parsed.source.raw}" is not implemented in this slice.`,
79
- guidance: "For live mutation in this slice, provide an already-created successor with --source discovered:<id>.",
100
+ code: "source_not_supported",
101
+ message: `${parsed.source.mode} handover is not supported in v0; use --source fresh or --source discovered:<id>.`,
102
+ guidance: parsed.source.mode === "fork"
103
+ ? "fork handover depends on the native-fork primitive (not yet shipped). Use a fresh or discovered successor."
104
+ : "rebuild handover artifact population is deferred to a follow-on. Use a fresh or discovered successor.",
80
105
  };
81
106
  }
82
107
  const statusResult = this.statusService.getStatus(input.seatRef);
@@ -101,73 +126,263 @@ export class SeatHandoverService {
101
126
  guidance: "Inspect the seat with: rig seat status <seat>",
102
127
  };
103
128
  }
104
- const discovered = this.discoveryRepo.getDiscoveredSession(parsed.source.ref);
105
- if (!discovered) {
129
+ const operator = input.operator?.trim() || null;
130
+ // Already-created successor: route straight through the discovered->commit
131
+ // path with nothing to unwind (byte-identical to the shipped behavior).
132
+ if (parsed.source.mode === "discovered" && parsed.source.ref) {
133
+ return this.finalizeWithDiscovered({
134
+ seatRef: input.seatRef,
135
+ status: statusResult.status,
136
+ node,
137
+ latestSession,
138
+ discoveredRef: parsed.source.ref,
139
+ reportedSource: parsed.source,
140
+ reason,
141
+ operator,
142
+ contextDelivered: false,
143
+ launchToken: null,
144
+ cleanup: null,
145
+ });
146
+ }
147
+ // Full-cycle composer for fresh: capture -> create + LAUNCH a live successor
148
+ // -> deliver captured context -> verify continuity -> rebind. The original
149
+ // seat/binding is untouched until the commit inside finalizeWithDiscovered,
150
+ // which is the SOLE, LAST rebind. (fork/rebuild were rejected above;
151
+ // discovered was finalized above.)
152
+ // 1. Capture the departing seat's context BEFORE any successor exists.
153
+ const capturedContext = await this.captureDepartingContext(latestSession.session_name);
154
+ // 2. Create the UNMANAGED, discoverable successor and launch it into a LIVE,
155
+ // READY agent (§2.1b seam, B1): createSession -> resolve pane -> real
156
+ // runtime startup (launchHarness + readiness) -> upsertDiscoveredSession.
157
+ // The successor is a live agent, not a bare shell, before it can commit.
158
+ const launch = await this.successorLauncher.createSuccessor({
159
+ node: { id: node.id, runtime: node.runtime, cwd: node.cwd },
160
+ departingSessionName: latestSession.session_name,
161
+ });
162
+ if (!launch.ok) {
106
163
  return {
164
+ ok: false,
165
+ code: "successor_create_failed",
166
+ message: `Handover failed at step "${launch.step}": ${launch.message}`,
167
+ guidance: "No successor was created and the original seat/binding is untouched. Inspect tmux/daemon logs and retry.",
168
+ };
169
+ }
170
+ // 3. fresh: deliver the captured restore packet to the live successor BEFORE
171
+ // continuity verify (a blank occupant is a relaunch, not a handover).
172
+ // discovered is operator-prepared and needs no delivery.
173
+ let contextDelivered = false;
174
+ if (parsed.source.mode === "fresh") {
175
+ const delivered = await this.deliverRestorePacket(launch.tmuxSession, {
176
+ seatRef: input.seatRef,
177
+ reason,
178
+ departingSession: latestSession.session_name,
179
+ capturedContext,
180
+ });
181
+ if (!delivered.ok) {
182
+ // Partial: successor created but context never landed — unwind the
183
+ // unmanaged successor, leave the original binding intact (no false-green).
184
+ await this.successorLauncher.cleanup(launch.tmuxSession, launch.discoveredId);
185
+ return {
186
+ ok: false,
187
+ code: "context_delivery_failed",
188
+ message: `Handover failed at step "deliver-restore-packet": ${delivered.message}`,
189
+ guidance: "The created successor was unwound and the original seat/binding is untouched. Retry after tmux delivery is healthy.",
190
+ };
191
+ }
192
+ contextDelivered = true;
193
+ }
194
+ // 4. Verify continuity + rebind via the EXISTING discovered->commit path.
195
+ // On any failure, unwind the created successor (no binding to unwind).
196
+ return this.finalizeWithDiscovered({
197
+ seatRef: input.seatRef,
198
+ status: statusResult.status,
199
+ node,
200
+ latestSession,
201
+ discoveredRef: launch.discoveredId,
202
+ reportedSource: parsed.source,
203
+ reason,
204
+ operator,
205
+ contextDelivered,
206
+ // B2 (launched/fresh): the launch-scraped resume token captured by the
207
+ // successor launcher is persisted atomically at commit (provenance scrape).
208
+ launchToken: launch.resumeToken ? { token: launch.resumeToken, resumeType: launch.resumeType } : null,
209
+ cleanup: () => this.successorLauncher.cleanup(launch.tmuxSession, launch.discoveredId),
210
+ });
211
+ }
212
+ /**
213
+ * The shared discovered->commit path (validation + presence-verify + rebind).
214
+ * `cleanup` is invoked before returning ANY failure so a composer-created
215
+ * successor is unwound; the discovered-source caller passes null (nothing to
216
+ * unwind). The `hasSession` probe here is the continuity/presence verify that
217
+ * runs BEFORE the commit releases the original binding.
218
+ */
219
+ async finalizeWithDiscovered(input) {
220
+ const fail = async (result) => {
221
+ if (input.cleanup)
222
+ await input.cleanup();
223
+ return result;
224
+ };
225
+ const discovered = this.discoveryRepo.getDiscoveredSession(input.discoveredRef);
226
+ if (!discovered) {
227
+ return fail({
107
228
  ok: false,
108
229
  code: "discovered_not_found",
109
- message: `Discovery record "${parsed.source.ref}" not found.`,
230
+ message: `Discovery record "${input.discoveredRef}" not found.`,
110
231
  guidance: "Run discovery and list active discovered sessions before retrying.",
111
- };
232
+ });
112
233
  }
113
234
  if (discovered.status !== "active") {
114
- return {
235
+ return fail({
115
236
  ok: false,
116
237
  code: "discovered_not_active",
117
238
  message: `Discovery record "${discovered.id}" is ${discovered.status}, not active.`,
118
239
  guidance: "Use an active, unclaimed discovered successor session.",
119
- };
240
+ });
120
241
  }
121
- if (discovered.tmuxSession === latestSession.session_name) {
122
- return {
242
+ if (discovered.tmuxSession === input.latestSession.session_name) {
243
+ return fail({
123
244
  ok: false,
124
245
  code: "successor_is_current",
125
246
  message: "Discovered successor is already the current occupant for this seat.",
126
247
  guidance: "Use a distinct successor session.",
127
- };
248
+ });
128
249
  }
129
- const runtimeMismatch = this.checkRuntimeMismatch(node.runtime, discovered.runtimeHint);
250
+ const runtimeMismatch = this.checkRuntimeMismatch(input.node.runtime, discovered.runtimeHint);
130
251
  if (runtimeMismatch)
131
- return runtimeMismatch;
132
- const managedOwner = this.lookupManagedOwner(discovered.tmuxSession, node.id);
252
+ return fail(runtimeMismatch);
253
+ const managedOwner = this.lookupManagedOwner(discovered.tmuxSession, input.node.id);
133
254
  if (managedOwner) {
134
- return {
255
+ return fail({
135
256
  ok: false,
136
257
  code: "successor_already_managed",
137
258
  message: `Successor tmux session "${discovered.tmuxSession}" is already managed by ${managedOwner.logical_id}@${managedOwner.rig_name}.`,
138
259
  guidance: "Use an unclaimed discovered successor session.",
139
- };
260
+ });
140
261
  }
141
262
  let tmuxPresent;
142
263
  try {
143
264
  tmuxPresent = await this.tmuxAdapter.hasSession(discovered.tmuxSession);
144
265
  }
145
266
  catch (err) {
146
- return {
267
+ return fail({
147
268
  ok: false,
148
269
  code: "tmux_probe_failed",
149
270
  message: `Could not verify successor tmux session "${discovered.tmuxSession}": ${err instanceof Error ? err.message : String(err)}`,
150
271
  guidance: "Retry after tmux health is known; probe failures are not treated as absence.",
151
- };
272
+ });
152
273
  }
153
274
  if (!tmuxPresent) {
154
- return {
275
+ return fail({
155
276
  ok: false,
156
277
  code: "successor_tmux_absent",
157
278
  message: `Successor tmux session "${discovered.tmuxSession}" is not present.`,
158
279
  guidance: "Run discovery again or provide a live discovered successor session.",
159
- };
280
+ });
160
281
  }
161
- return this.commit({
282
+ const committed = this.commit({
162
283
  seatRef: input.seatRef,
163
- status: statusResult.status,
164
- node,
165
- latestSession,
166
- source: parsed.source,
167
- reason,
168
- operator: input.operator?.trim() || null,
284
+ status: input.status,
285
+ node: input.node,
286
+ latestSession: input.latestSession,
287
+ reportedSource: input.reportedSource,
288
+ reason: input.reason,
289
+ operator: input.operator,
169
290
  discovered,
291
+ contextDelivered: input.contextDelivered,
292
+ launchToken: input.launchToken,
170
293
  });
294
+ if (!committed.ok)
295
+ return fail(committed);
296
+ // B2 (discovered): the successor is an operator-prepared live session we did
297
+ // NOT launch, so no launch token was scraped. Best-effort capture its live
298
+ // resume token AT COMMIT — reusing the FR-3 pure derive-helper — so a crash
299
+ // right after handover can still resume (the window FR-3 closes elsewhere).
300
+ // Post-commit + non-blocking (mirrors FR-3): the async derivation cannot run
301
+ // inside better-sqlite3's synchronous transaction. Never logs the token.
302
+ if (input.reportedSource.mode === "discovered" && "result" in committed) {
303
+ await this.captureDiscoveredResumeToken({
304
+ rigId: input.status.rig_id,
305
+ nodeId: input.node.id,
306
+ sessionId: committed.result.newSessionId,
307
+ sessionName: discovered.tmuxSession,
308
+ runtime: input.node.runtime,
309
+ });
310
+ }
311
+ return committed;
312
+ }
313
+ /**
314
+ * B2 — best-effort discovered-mode resume-token capture at commit. Derives the
315
+ * live token via the shared FR-3 derive-helper (pure read), persists it with
316
+ * provenance "adoption" (the rank guard governs clobber), and emits the same
317
+ * captured/preserved/skipped events FR-3 uses. Honest failure = persist
318
+ * nothing + a redacted skip event. NEVER throws, never logs the token.
319
+ */
320
+ async captureDiscoveredResumeToken(input) {
321
+ try {
322
+ const derived = await deriveResumeToken({ runtime: input.runtime, sessionName: input.sessionName }, this.captureDeps);
323
+ if (derived.outcome === "exempt" || derived.outcome === "noop")
324
+ return;
325
+ const runtime = input.runtime; // non-null past exempt
326
+ if (derived.outcome === "skipped") {
327
+ this.emitCaptureSkip(input, runtime, derived.reason);
328
+ return;
329
+ }
330
+ const wrote = this.sessionRegistry.updateResumeToken(input.sessionId, derived.resumeType, derived.token, "adoption");
331
+ try {
332
+ this.eventBus.emit(wrote
333
+ ? {
334
+ type: "session.resume_token_captured",
335
+ rigId: input.rigId, nodeId: input.nodeId, sessionName: input.sessionName, sessionId: input.sessionId,
336
+ runtime, outcome: "captured", resumeType: derived.resumeType, provenance: "adoption", redacted: true,
337
+ }
338
+ : {
339
+ type: "session.resume_token_captured",
340
+ rigId: input.rigId, nodeId: input.nodeId, sessionName: input.sessionName, sessionId: input.sessionId,
341
+ runtime, outcome: "preserved", resumeType: derived.resumeType, reason: "higher_rank_present", redacted: true,
342
+ });
343
+ }
344
+ catch { /* best-effort */ }
345
+ }
346
+ catch {
347
+ // best-effort — capture never fails or blocks the handover
348
+ }
349
+ }
350
+ emitCaptureSkip(input, runtime, reason) {
351
+ try {
352
+ this.eventBus.emit({
353
+ type: "session.resume_token_captured",
354
+ rigId: input.rigId, nodeId: input.nodeId, sessionName: input.sessionName, sessionId: input.sessionId,
355
+ runtime, outcome: "skipped", reason, redacted: true,
356
+ });
357
+ }
358
+ catch { /* best-effort */ }
359
+ }
360
+ /** Best-effort capture of the departing seat's visible terminal before the
361
+ * successor is created. Never throws; an empty capture is honestly recorded
362
+ * as "no capture available" in the restore packet. */
363
+ async captureDepartingContext(departingSession) {
364
+ try {
365
+ const screen = await this.tmuxAdapter.capturePaneScreen(departingSession);
366
+ return screen ?? "";
367
+ }
368
+ catch {
369
+ return "";
370
+ }
371
+ }
372
+ /** Deliver the captured restore packet to a fresh successor via the shipped
373
+ * interactive-text transport (send_text + Enter), mirroring the startup
374
+ * orchestrator's initial-prompt delivery. */
375
+ async deliverRestorePacket(successorSession, info) {
376
+ const packet = buildRestorePacket({ ...info, handoverAt: this.now().toISOString() });
377
+ const sent = await this.tmuxAdapter.sendText(successorSession, packet);
378
+ if (!sent.ok) {
379
+ return { ok: false, message: sent.message ?? "send_text failed" };
380
+ }
381
+ const submit = await this.tmuxAdapter.sendKeys(successorSession, ["C-m"]);
382
+ if (!submit.ok) {
383
+ return { ok: false, message: submit.message ?? "submit failed" };
384
+ }
385
+ return { ok: true };
171
386
  }
172
387
  checkRuntimeMismatch(nodeRuntime, discoveredRuntime) {
173
388
  if (!nodeRuntime || discoveredRuntime === "unknown" || nodeRuntime === discoveredRuntime) {
@@ -181,7 +396,7 @@ export class SeatHandoverService {
181
396
  };
182
397
  }
183
398
  lookupNode(status) {
184
- return this.db.prepare("SELECT id, runtime FROM nodes WHERE rig_id = ? AND logical_id = ?").get(status.rig_id, status.logical_id);
399
+ return this.db.prepare("SELECT id, runtime, cwd FROM nodes WHERE rig_id = ? AND logical_id = ?").get(status.rig_id, status.logical_id);
185
400
  }
186
401
  lookupLatestSession(nodeId) {
187
402
  return this.db.prepare("SELECT id, session_name, status FROM sessions WHERE node_id = ? ORDER BY id DESC LIMIT 1").get(nodeId) ?? null;
@@ -221,6 +436,16 @@ export class SeatHandoverService {
221
436
  tmuxPane: input.discovered.tmuxPane,
222
437
  });
223
438
  const newSession = this.sessionRegistry.registerClaimedSession(input.node.id, input.discovered.tmuxSession);
439
+ // B2 (launched/fresh): persist the launch-scraped resume token atomically
440
+ // with the claim, provenance "scrape" (mirrors StartupOrchestrator's
441
+ // launch-token capture). Validity-guarded; a malformed token is dropped,
442
+ // never a bad write. The token is never logged.
443
+ if (input.launchToken) {
444
+ const validated = validateResumeToken(input.node.runtime, input.launchToken.token);
445
+ if (validated.ok) {
446
+ this.sessionRegistry.updateResumeToken(newSession.id, validated.resumeType, validated.token, "scrape");
447
+ }
448
+ }
224
449
  this.discoveryRepo.markClaimed(input.discovered.id, input.node.id);
225
450
  this.db.prepare(`
226
451
  UPDATE nodes SET
@@ -238,7 +463,7 @@ export class SeatHandoverService {
238
463
  logicalId: input.status.logical_id,
239
464
  previousOccupant: input.latestSession.session_name,
240
465
  currentOccupant: input.discovered.tmuxSession,
241
- source: input.source.raw,
466
+ source: input.reportedSource.raw,
242
467
  reason: input.reason,
243
468
  operator: input.operator,
244
469
  });
@@ -295,7 +520,7 @@ export class SeatHandoverService {
295
520
  podNamespace: input.status.pod_namespace,
296
521
  runtime: input.status.runtime,
297
522
  },
298
- source: input.source,
523
+ source: input.reportedSource,
299
524
  reason: input.reason,
300
525
  operator: input.operator,
301
526
  previousOccupant: input.latestSession.session_name,
@@ -313,7 +538,7 @@ export class SeatHandoverService {
313
538
  eventSeq: committed.event.seq,
314
539
  sideEffects: {
315
540
  departingSessionKilled: false,
316
- startupContextDelivered: false,
541
+ startupContextDelivered: input.contextDelivered,
317
542
  provenanceRecordWritten: false,
318
543
  },
319
544
  },
@@ -340,4 +565,19 @@ export class SeatHandoverService {
340
565
  `).run(ulid(), nodeId, fields.tmuxSession, fields.tmuxWindow, fields.tmuxPane);
341
566
  }
342
567
  }
568
+ /** Assemble the restore packet delivered to a fresh successor: seat identity +
569
+ * handover reason + predecessor session + the captured predecessor terminal. */
570
+ function buildRestorePacket(info) {
571
+ const captured = info.capturedContext.trim();
572
+ return [
573
+ "=== OpenRig seat handover — restore context ===",
574
+ `Seat: ${info.seatRef}`,
575
+ `Reason: ${info.reason}`,
576
+ `Predecessor session: ${info.departingSession}`,
577
+ `Handover at: ${info.handoverAt}`,
578
+ "",
579
+ "--- Predecessor terminal (captured) ---",
580
+ captured.length > 0 ? captured : "(no capture available)",
581
+ ].join("\n");
582
+ }
343
583
  //# sourceMappingURL=seat-handover-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seat-handover-service.js","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seat-handover-service.js","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { TmuxAdapter } from "../adapters/tmux.js";
3
+ /** Default identity-reconcile cadence: 5s. Process identity changes rarely
4
+ * (a seat's pane/process is stable for its whole life), and the check is
5
+ * more expensive than the 1Hz activity poll (per-seat pane PID + command
6
+ * tmux reads), so a slower cadence is the right cost/freshness trade. */
7
+ export declare const DEFAULT_IDENTITY_POLL_INTERVAL_MS = 5000;
8
+ /**
9
+ * Classify the pane's foreground command against the registered runtime.
10
+ *
11
+ * Deliberately LENIENT to preserve the slice-15 no-false-green-for-live-seats
12
+ * invariant: a genuinely-live claude/codex TUI usually reports its host
13
+ * process (`node`) as `pane_current_command`, NOT the literal runtime name, so
14
+ * we only declare `mismatch` on a POSITIVE contradiction — a different known
15
+ * agent runtime, or a bare shell where an agent was expected (the process
16
+ * died / an orphan shell squatted the pane). Ambiguous commands (`node`,
17
+ * `python`, empty) never down-rank.
18
+ *
19
+ * Mirrors SessionFingerprinter's Layer-1 process-command vocabulary; we do NOT
20
+ * run the full 4-layer scan (cmux query + pane-content capture) per poll — it
21
+ * is far more expensive at fleet scale and its content layer would not change
22
+ * the down-rank decision here (the reconcile only needs to distinguish
23
+ * "process contradicts the seat" from "no contradiction").
24
+ */
25
+ export declare function classifyPaneRuntimeMatch(command: string | null, expectedRuntime: string | null): "match" | "mismatch";
26
+ export interface SeatIdentityReconcilerDeps {
27
+ db: Database.Database;
28
+ tmux: Pick<TmuxAdapter, "listSessions" | "getPanePid" | "getPaneCommand">;
29
+ now?: () => Date;
30
+ }
31
+ /**
32
+ * OPR.0.4.3.19 — periodic reconciler for the liveness identity verdict (the
33
+ * THIRD axis). Mirrors SeatActivityService.start(): polls every running
34
+ * tmux-bound managed seat, reconciles the current pane PID/command against the
35
+ * registered seat, and persists the verdict to `seat_identity_verdicts`.
36
+ * Projections then read the cheap persisted verdict synchronously.
37
+ *
38
+ * Non-inference: this reconciler reads ONLY tmux pane process identity vs the
39
+ * registered binding. It NEVER reads queue/classifier/hook heartbeats, and it
40
+ * does NOT touch `terminalActive` / `hasAssignedWork`.
41
+ */
42
+ export declare class SeatIdentityReconciler {
43
+ private readonly db;
44
+ private readonly tmux;
45
+ private readonly now;
46
+ private readonly store;
47
+ private timer;
48
+ constructor(deps: SeatIdentityReconcilerDeps);
49
+ private runningSeats;
50
+ /** Reconcile every running tmux-bound seat once and persist the verdicts. */
51
+ reconcileAll(): Promise<void>;
52
+ private tmuxUnavailableVerdict;
53
+ private computeVerdict;
54
+ /** Start the scheduler. Idempotent — calling twice is a no-op. */
55
+ start(intervalMs?: number): void;
56
+ /** Stop the scheduler. Safe to call before start or multiple times. */
57
+ stop(): void;
58
+ }
59
+ //# sourceMappingURL=seat-identity-reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-identity-reconciler.d.ts","sourceRoot":"","sources":["../../src/domain/seat-identity-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD;;;0EAG0E;AAC1E,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAWtD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,OAAO,GAAG,UAAU,CAmBtB;AASD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,YAAY,GAAG,gBAAgB,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,KAAK,CAA+C;gBAEhD,IAAI,EAAE,0BAA0B;IAO5C,OAAO,CAAC,YAAY;IAcpB,6EAA6E;IACvE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCnC,OAAO,CAAC,sBAAsB;YAYhB,cAAc;IA2D5B,kEAAkE;IAClE,KAAK,CAAC,UAAU,GAAE,MAA0C,GAAG,IAAI;IAUnE,uEAAuE;IACvE,IAAI,IAAI,IAAI;CAMb"}