@openrig/cli 0.3.3 → 0.3.4

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 (132) hide show
  1. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  2. package/daemon/dist/adapters/claude-code-adapter.js +19 -0
  3. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  4. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  5. package/daemon/dist/adapters/codex-runtime-adapter.js +52 -30
  6. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  7. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  8. package/daemon/dist/domain/bootstrap-orchestrator.js +3 -1
  9. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  10. package/daemon/dist/domain/claim-service.d.ts +79 -0
  11. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  12. package/daemon/dist/domain/claim-service.js +214 -0
  13. package/daemon/dist/domain/claim-service.js.map +1 -1
  14. package/daemon/dist/domain/codex-profile-preflight.d.ts +8 -0
  15. package/daemon/dist/domain/codex-profile-preflight.d.ts.map +1 -0
  16. package/daemon/dist/domain/codex-profile-preflight.js +43 -0
  17. package/daemon/dist/domain/codex-profile-preflight.js.map +1 -0
  18. package/daemon/dist/domain/graph-projection.d.ts +2 -0
  19. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  20. package/daemon/dist/domain/graph-projection.js +2 -0
  21. package/daemon/dist/domain/graph-projection.js.map +1 -1
  22. package/daemon/dist/domain/node-cmux-service.d.ts +3 -1
  23. package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
  24. package/daemon/dist/domain/node-cmux-service.js +25 -8
  25. package/daemon/dist/domain/node-cmux-service.js.map +1 -1
  26. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  27. package/daemon/dist/domain/node-inventory.js +68 -28
  28. package/daemon/dist/domain/node-inventory.js.map +1 -1
  29. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +21 -0
  30. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -0
  31. package/daemon/dist/domain/periodic-snapshot-scheduler.js +65 -0
  32. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -0
  33. package/daemon/dist/domain/ps-projection.d.ts +9 -0
  34. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  35. package/daemon/dist/domain/ps-projection.js +11 -1
  36. package/daemon/dist/domain/ps-projection.js.map +1 -1
  37. package/daemon/dist/domain/restore-orchestrator.d.ts +42 -0
  38. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  39. package/daemon/dist/domain/restore-orchestrator.js +204 -36
  40. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  41. package/daemon/dist/domain/restore-plan-preview.d.ts +43 -0
  42. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -0
  43. package/daemon/dist/domain/restore-plan-preview.js +85 -0
  44. package/daemon/dist/domain/restore-plan-preview.js.map +1 -0
  45. package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -0
  46. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  47. package/daemon/dist/domain/rigspec-instantiator.js +7 -4
  48. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  49. package/daemon/dist/domain/rigspec-preflight.d.ts +15 -2
  50. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  51. package/daemon/dist/domain/rigspec-preflight.js +37 -2
  52. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  53. package/daemon/dist/domain/seat-attention-reconciler.d.ts +54 -0
  54. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -0
  55. package/daemon/dist/domain/seat-attention-reconciler.js +176 -0
  56. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -0
  57. package/daemon/dist/domain/snapshot-repository.d.ts +15 -7
  58. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  59. package/daemon/dist/domain/snapshot-repository.js +33 -8
  60. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  61. package/daemon/dist/domain/topology-converge.d.ts +27 -5
  62. package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
  63. package/daemon/dist/domain/topology-converge.js +25 -7
  64. package/daemon/dist/domain/topology-converge.js.map +1 -1
  65. package/daemon/dist/domain/types.d.ts +37 -2
  66. package/daemon/dist/domain/types.d.ts.map +1 -1
  67. package/daemon/dist/domain/types.js.map +1 -1
  68. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  69. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  70. package/daemon/dist/domain/user-settings/settings-store.js +28 -0
  71. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  72. package/daemon/dist/index.d.ts +15 -0
  73. package/daemon/dist/index.d.ts.map +1 -1
  74. package/daemon/dist/index.js +21 -0
  75. package/daemon/dist/index.js.map +1 -1
  76. package/daemon/dist/routes/rig-cmux.d.ts.map +1 -1
  77. package/daemon/dist/routes/rig-cmux.js +99 -40
  78. package/daemon/dist/routes/rig-cmux.js.map +1 -1
  79. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  80. package/daemon/dist/routes/rigs.js +20 -2
  81. package/daemon/dist/routes/rigs.js.map +1 -1
  82. package/daemon/dist/routes/rigspec.js +3 -1
  83. package/daemon/dist/routes/rigspec.js.map +1 -1
  84. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  85. package/daemon/dist/routes/sessions.js +93 -5
  86. package/daemon/dist/routes/sessions.js.map +1 -1
  87. package/daemon/dist/routes/up.d.ts.map +1 -1
  88. package/daemon/dist/routes/up.js +19 -2
  89. package/daemon/dist/routes/up.js.map +1 -1
  90. package/daemon/dist/server.d.ts +2 -0
  91. package/daemon/dist/server.d.ts.map +1 -1
  92. package/daemon/dist/server.js +1 -0
  93. package/daemon/dist/server.js.map +1 -1
  94. package/daemon/dist/startup.d.ts.map +1 -1
  95. package/daemon/dist/startup.js +23 -1
  96. package/daemon/dist/startup.js.map +1 -1
  97. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +131 -0
  98. package/dist/commands/config.d.ts.map +1 -1
  99. package/dist/commands/config.js +1 -0
  100. package/dist/commands/config.js.map +1 -1
  101. package/dist/commands/launch.d.ts.map +1 -1
  102. package/dist/commands/launch.js +51 -2
  103. package/dist/commands/launch.js.map +1 -1
  104. package/dist/commands/ps.d.ts.map +1 -1
  105. package/dist/commands/ps.js +2 -1
  106. package/dist/commands/ps.js.map +1 -1
  107. package/dist/commands/reconcile-session.d.ts +4 -0
  108. package/dist/commands/reconcile-session.d.ts.map +1 -0
  109. package/dist/commands/reconcile-session.js +79 -0
  110. package/dist/commands/reconcile-session.js.map +1 -0
  111. package/dist/commands/seat.d.ts.map +1 -1
  112. package/dist/commands/seat.js +40 -0
  113. package/dist/commands/seat.js.map +1 -1
  114. package/dist/commands/start.d.ts +35 -0
  115. package/dist/commands/start.d.ts.map +1 -0
  116. package/dist/commands/start.js +483 -0
  117. package/dist/commands/start.js.map +1 -0
  118. package/dist/commands/up.d.ts +3 -0
  119. package/dist/commands/up.d.ts.map +1 -1
  120. package/dist/commands/up.js +125 -10
  121. package/dist/commands/up.js.map +1 -1
  122. package/dist/config-store.d.ts +8 -1
  123. package/dist/config-store.d.ts.map +1 -1
  124. package/dist/config-store.js +39 -0
  125. package/dist/config-store.js.map +1 -1
  126. package/dist/index.d.ts +3 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +4 -0
  129. package/dist/index.js.map +1 -1
  130. package/package.json +1 -1
  131. package/ui/dist/assets/{index-CrJgCmkX.js → index-De6vv0yO.js} +85 -85
  132. package/ui/dist/index.html +1 -1
@@ -108,7 +108,7 @@ const SUPPORTED_RUNTIMES = new Set(["claude-code", "codex", "terminal"]);
108
108
  * @param input - rig spec YAML, rig root, and filesystem ops
109
109
  * @returns PreflightResult
110
110
  */
111
- export function rigPreflight(input) {
111
+ export async function rigPreflight(input) {
112
112
  // FRONT-END (OPR.0.3.3.24): YAML is only the input adapter. Parse + validate +
113
113
  // normalize, then delegate every actual check to the structured core so
114
114
  // callers holding an already-parsed+validated spec (expand / add_member)
@@ -130,6 +130,7 @@ export function rigPreflight(input) {
130
130
  cwdOverride: input.cwdOverride,
131
131
  fsOps: input.fsOps,
132
132
  rigNameOverride: input.rigNameOverride,
133
+ exec: input.exec,
133
134
  });
134
135
  }
135
136
  /**
@@ -139,7 +140,7 @@ export function rigPreflight(input) {
139
140
  * checks/order/error-strings so expand/add_member preflight a structured spec
140
141
  * with no YAML round-trip; rigPreflight(yaml) is the parse/normalize front over it.
141
142
  */
142
- export function preflightValidatedSpec(rigSpec, preflightCtx) {
143
+ export async function preflightValidatedSpec(rigSpec, preflightCtx) {
143
144
  const errors = [];
144
145
  const warnings = [];
145
146
  // 2. Validate session name components for all pod members
@@ -223,6 +224,40 @@ export function preflightValidatedSpec(rigSpec, preflightCtx) {
223
224
  }
224
225
  }
225
226
  }
227
+ // OPR.0.3.4.7 — Codex profile-LOAD probe, integrated into preflight.
228
+ // Runs only when exec is provided and the sync checks passed.
229
+ if (errors.length === 0 && preflightCtx.exec) {
230
+ const profileErrors = await verifyCodexProfiles(rigSpec, preflightCtx.exec);
231
+ errors.push(...profileErrors);
232
+ }
226
233
  return { ready: errors.length === 0, errors, warnings };
227
234
  }
235
+ /**
236
+ * OPR.0.3.4.7 — async post-preflight probe: verify Codex profile-v2 LOADS
237
+ * for all Codex nodes with a non-empty codex_config_profile. Called AFTER
238
+ * the synchronous preflight passes (codex --version already verified).
239
+ * Returns errors to append to the preflight result; empty = all profiles load.
240
+ */
241
+ export async function verifyCodexProfiles(rigSpec, exec) {
242
+ const { verifyCodexProfileLoads } = await import("./codex-profile-preflight.js");
243
+ const errors = [];
244
+ const checkedProfiles = new Set();
245
+ for (const pod of rigSpec.pods) {
246
+ for (const member of pod.members) {
247
+ if (member.runtime !== "codex")
248
+ continue;
249
+ const profile = member.codexConfigProfile?.trim();
250
+ if (!profile)
251
+ continue;
252
+ if (checkedProfiles.has(profile))
253
+ continue;
254
+ checkedProfiles.add(profile);
255
+ const result = await verifyCodexProfileLoads(profile, exec);
256
+ if (!result.ok) {
257
+ errors.push(`${pod.id}.${member.id}: ${result.error}${result.migrationHint ? ` Fix: ${result.migrationHint}` : ""}`);
258
+ }
259
+ }
260
+ }
261
+ return errors;
262
+ }
228
263
  //# sourceMappingURL=rigspec-preflight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rigspec-preflight.js","sourceRoot":"","sources":["../../src/domain/rigspec-preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rigspec-preflight.js","sourceRoot":"","sources":["../../src/domain/rigspec-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { SessionRegistry } from "./session-registry.js";
2
+ import type { EventBus } from "./event-bus.js";
3
+ import type { AgentActivityStore } from "./agent-activity-store.js";
4
+ export interface ClearAttentionResult {
5
+ ok: boolean;
6
+ code?: "not_in_attention" | "not_demonstrably_responsive" | "cleared";
7
+ from?: string;
8
+ to?: string;
9
+ clearedBy?: "evidence" | "operator_attestation";
10
+ evidence?: {
11
+ kind: string;
12
+ state?: string;
13
+ reason?: string;
14
+ };
15
+ reason?: string;
16
+ detail?: string;
17
+ previousError?: string | null;
18
+ }
19
+ export interface SendVerifyFn {
20
+ (sessionName: string, text: string, opts?: {
21
+ verify?: boolean;
22
+ }): Promise<{
23
+ ok: boolean;
24
+ outcome?: string;
25
+ verified?: boolean;
26
+ }>;
27
+ }
28
+ export interface CaptureFn {
29
+ (sessionName: string, opts?: {
30
+ lines?: number;
31
+ }): Promise<{
32
+ ok: boolean;
33
+ sessionName: string;
34
+ content?: string;
35
+ error?: string;
36
+ }>;
37
+ }
38
+ interface ClearAttentionDeps {
39
+ sessionRegistry: SessionRegistry;
40
+ eventBus: EventBus;
41
+ agentActivityStore: AgentActivityStore;
42
+ sendVerify?: SendVerifyFn;
43
+ capture?: CaptureFn;
44
+ }
45
+ export declare class SeatAttentionReconciler {
46
+ private deps;
47
+ constructor(deps: ClearAttentionDeps);
48
+ clearAttention(sessionName: string, opts?: {
49
+ reason?: string;
50
+ }): Promise<ClearAttentionResult>;
51
+ private findLatestSessionByName;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=seat-attention-reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-attention-reconciler.d.ts","sourceRoot":"","sources":["../../src/domain/seat-attention-reconciler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,kBAAkB,GAAG,6BAA6B,GAAG,SAAS,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAAC;IAChD,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClI;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnI;AAED,UAAU,kBAAkB;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAID,qBAAa,uBAAuB;IAClC,OAAO,CAAC,IAAI,CAAqB;gBAErB,IAAI,EAAE,kBAAkB;IAI9B,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,OAAO,CAAC,oBAAoB,CAAC;IAmJhC,OAAO,CAAC,uBAAuB;CA0ChC"}
@@ -0,0 +1,176 @@
1
+ // OPR.0.3.4.10 — seat attention reconciler: evidence-gated clear of stuck
2
+ // startup_status=attention_required. Managed writer + append-only audit.
3
+ const POSITIVE_STATES = new Set(["running", "idle"]);
4
+ export class SeatAttentionReconciler {
5
+ deps;
6
+ constructor(deps) {
7
+ this.deps = deps;
8
+ }
9
+ async clearAttention(sessionName, opts) {
10
+ const { sessionRegistry, eventBus, agentActivityStore } = this.deps;
11
+ // Resolve session -> node + current startup_status.
12
+ const session = this.findLatestSessionByName(sessionName);
13
+ if (!session) {
14
+ return { ok: false, code: "not_in_attention", detail: `Session '${sessionName}' not found` };
15
+ }
16
+ if (session.startupStatus !== "attention_required" && session.startupStatus !== "failed") {
17
+ return { ok: false, code: "not_in_attention", detail: `Session startup_status is '${session.startupStatus}', not attention_required/failed` };
18
+ }
19
+ const previousError = session.latestError ?? null;
20
+ // Operator attestation override (--reason).
21
+ if (opts?.reason) {
22
+ sessionRegistry.updateStartupStatus(session.id, "ready", new Date().toISOString());
23
+ eventBus.emit({
24
+ type: "seat.attention_cleared",
25
+ rigId: session.rigId,
26
+ nodeId: session.nodeId,
27
+ sessionName,
28
+ from: session.startupStatus,
29
+ to: "ready",
30
+ clearedBy: "operator_attestation",
31
+ reason: opts.reason,
32
+ previousError,
33
+ });
34
+ return {
35
+ ok: true,
36
+ code: "cleared",
37
+ from: session.startupStatus,
38
+ to: "ready",
39
+ clearedBy: "operator_attestation",
40
+ reason: opts.reason,
41
+ previousError,
42
+ };
43
+ }
44
+ // Evidence-gated clear.
45
+ const activity = agentActivityStore.getLatestForNode({
46
+ nodeId: session.nodeId,
47
+ sessionName,
48
+ });
49
+ if (activity && activity.stale !== true && POSITIVE_STATES.has(activity.state)) {
50
+ sessionRegistry.updateStartupStatus(session.id, "ready", new Date().toISOString());
51
+ eventBus.emit({
52
+ type: "seat.attention_cleared",
53
+ rigId: session.rigId,
54
+ nodeId: session.nodeId,
55
+ sessionName,
56
+ from: session.startupStatus,
57
+ to: "ready",
58
+ clearedBy: "evidence",
59
+ evidence: { kind: "fresh_activity", state: activity.state, reason: activity.reason },
60
+ previousError,
61
+ });
62
+ return {
63
+ ok: true,
64
+ code: "cleared",
65
+ from: session.startupStatus,
66
+ to: "ready",
67
+ clearedBy: "evidence",
68
+ evidence: { kind: "fresh_activity", state: activity.state, reason: activity.reason },
69
+ previousError,
70
+ };
71
+ }
72
+ // Second evidence path: active send-verify round-trip.
73
+ if (this.deps.sendVerify) {
74
+ try {
75
+ const probeText = `# OpenRig attention-clear liveness probe ${Date.now()}`;
76
+ const sendResult = await this.deps.sendVerify(sessionName, probeText, { verify: true });
77
+ if (sendResult.ok && (sendResult.outcome === "delivered" || sendResult.verified === true)) {
78
+ sessionRegistry.updateStartupStatus(session.id, "ready", new Date().toISOString());
79
+ eventBus.emit({
80
+ type: "seat.attention_cleared",
81
+ rigId: session.rigId,
82
+ nodeId: session.nodeId,
83
+ sessionName,
84
+ from: session.startupStatus,
85
+ to: "ready",
86
+ clearedBy: "evidence",
87
+ evidence: { kind: "send_verify_roundtrip", state: sendResult.outcome ?? "delivered" },
88
+ previousError,
89
+ });
90
+ return {
91
+ ok: true,
92
+ code: "cleared",
93
+ from: session.startupStatus,
94
+ to: "ready",
95
+ clearedBy: "evidence",
96
+ evidence: { kind: "send_verify_roundtrip", state: sendResult.outcome ?? "delivered" },
97
+ previousError,
98
+ };
99
+ }
100
+ // rendered-unconfirmed: text landed but verify raced a TUI redraw.
101
+ // Attempt capture-confirmation if capture dep is available.
102
+ if (sendResult.ok && sendResult.outcome === "rendered-unconfirmed" && this.deps.capture) {
103
+ try {
104
+ const captureResult = await this.deps.capture(sessionName, { lines: 50 });
105
+ if (captureResult.ok && captureResult.content && captureResult.content.includes(probeText)) {
106
+ sessionRegistry.updateStartupStatus(session.id, "ready", new Date().toISOString());
107
+ eventBus.emit({
108
+ type: "seat.attention_cleared",
109
+ rigId: session.rigId,
110
+ nodeId: session.nodeId,
111
+ sessionName,
112
+ from: session.startupStatus,
113
+ to: "ready",
114
+ clearedBy: "evidence",
115
+ evidence: { kind: "send_verify_capture_confirmed", state: "rendered-unconfirmed" },
116
+ previousError,
117
+ });
118
+ return {
119
+ ok: true,
120
+ code: "cleared",
121
+ from: session.startupStatus,
122
+ to: "ready",
123
+ clearedBy: "evidence",
124
+ evidence: { kind: "send_verify_capture_confirmed", state: "rendered-unconfirmed" },
125
+ previousError,
126
+ };
127
+ }
128
+ }
129
+ catch {
130
+ // Capture failed — transport error. Do not clear on capture failure.
131
+ }
132
+ }
133
+ // No capture dep, or capture didn't confirm: could-not-confirm, NOT dead.
134
+ // failed: transport did not land. Neither clears.
135
+ }
136
+ catch {
137
+ // Send failed — transport error. Do not clear.
138
+ }
139
+ }
140
+ return {
141
+ ok: false,
142
+ code: "not_demonstrably_responsive",
143
+ detail: activity
144
+ ? `Latest activity: state='${activity.state}', stale=${activity.stale ?? false}, reason='${activity.reason}' -- not positive evidence; send-verify also not confirmed`
145
+ : "No recent agent activity found; send-verify also not confirmed",
146
+ };
147
+ }
148
+ findLatestSessionByName(sessionName) {
149
+ const row = this.deps.sessionRegistry.db.prepare(`SELECT s.id, s.node_id, n.rig_id, s.startup_status,
150
+ (SELECT e.payload FROM events e WHERE e.node_id = s.node_id AND e.type IN ('node.startup_attention_required','node.startup_failed') ORDER BY e.seq DESC LIMIT 1) as latest_error_payload
151
+ FROM sessions s
152
+ JOIN nodes n ON n.id = s.node_id
153
+ WHERE s.session_name = ?
154
+ ORDER BY s.created_at DESC, s.id DESC LIMIT 1`).get(sessionName);
155
+ if (!row)
156
+ return null;
157
+ let latestError = null;
158
+ if (row.latest_error_payload) {
159
+ try {
160
+ const parsed = JSON.parse(row.latest_error_payload);
161
+ latestError = parsed.error ?? parsed.message ?? row.latest_error_payload;
162
+ }
163
+ catch {
164
+ latestError = row.latest_error_payload;
165
+ }
166
+ }
167
+ return {
168
+ id: row.id,
169
+ nodeId: row.node_id,
170
+ rigId: row.rig_id,
171
+ startupStatus: row.startup_status ?? "pending",
172
+ latestError,
173
+ };
174
+ }
175
+ }
176
+ //# sourceMappingURL=seat-attention-reconciler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-attention-reconciler.js","sourceRoot":"","sources":["../../src/domain/seat-attention-reconciler.ts"],"names":[],"mappings":"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"}
@@ -11,15 +11,19 @@ export declare class SnapshotRepository {
11
11
  getSnapshot(id: string): Snapshot | null;
12
12
  findLatestAutoPreDown(rigId: string): Snapshot | null;
13
13
  /**
14
- * L3b: returns the latest snapshot whose persisted `data` carries the minimum
14
+ * Returns the latest snapshot whose persisted `data` carries the minimum
15
15
  * structural metadata `RestoreOrchestrator.restore`'s pre-validation requires.
16
- * Prefers `auto-pre-down` over other kinds when both are present.
17
16
  *
18
- * The single SQL query orders snapshots by `(kind = 'auto-pre-down') DESC,
19
- * created_at DESC, id DESC` so an auto-pre-down candidate always comes first
20
- * if any exists. The in-memory loop then validates each candidate and skips
21
- * snapshots with corrupted JSON or missing topology metadata, returning the
22
- * first usable row. Returns null when no usable snapshot exists.
17
+ * OPR.0.3.4.9 Option Y: prefers the most-recent of the crash-insurance tier
18
+ * {auto-pre-down, auto-periodic} -- the freshest of the two wins. A newer
19
+ * auto-periodic beats a stale auto-pre-down (the crash fix); a genuinely-
20
+ * fresher auto-pre-down still wins (graceful-cycle preserved). Manual,
21
+ * pre_restore, and auto-rehydrate remain below the tier (unchanged).
22
+ *
23
+ * The SQL query orders by `(kind IN ('auto-pre-down','auto-periodic')) DESC,
24
+ * created_at DESC, id DESC`. The in-memory loop validates each candidate and
25
+ * skips snapshots with corrupted JSON or missing topology metadata, returning
26
+ * the first usable row. Returns null when no usable snapshot exists.
23
27
  *
24
28
  * Distinct from `findLatestUsableSnapshot` (rig-repository.ts, L2): that
25
29
  * helper requires at least one persisted resume token and is consumed by
@@ -31,6 +35,10 @@ export declare class SnapshotRepository {
31
35
  getLatestSnapshot(rigId: string): Snapshot | null;
32
36
  listSnapshots(rigId: string, opts?: ListOptions): Snapshot[];
33
37
  pruneSnapshots(rigId: string, keepCount: number): number;
38
+ /** OPR.0.3.4.9 — kind-scoped retention. Keeps the newest `keepCount` rows
39
+ * of the given kind and deletes only older rows of THAT kind. Never touches
40
+ * other kinds. Hard floor: keepCount >= 1 (never prune to zero). */
41
+ pruneSnapshotsByKind(rigId: string, kind: string, keepCount: number): number;
34
42
  private rowToSnapshot;
35
43
  }
36
44
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-repository.d.ts","sourceRoot":"","sources":["../../src/domain/snapshot-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAEnB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ;IAazE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAOxC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IASrD;;;;;;;;;;;;;;;;OAgBG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAoBvD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IASjD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,EAAE;IAoB5D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IA2BxD,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"snapshot-repository.d.ts","sourceRoot":"","sources":["../../src/domain/snapshot-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAEnB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ;IAazE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAOxC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IASrD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAoBvD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IASjD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,EAAE;IAoB5D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IA2BxD;;yEAEqE;IACrE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAyB5E,OAAO,CAAC,aAAa;CAUtB"}
@@ -24,15 +24,19 @@ export class SnapshotRepository {
24
24
  return row ? this.rowToSnapshot(row) : null;
25
25
  }
26
26
  /**
27
- * L3b: returns the latest snapshot whose persisted `data` carries the minimum
27
+ * Returns the latest snapshot whose persisted `data` carries the minimum
28
28
  * structural metadata `RestoreOrchestrator.restore`'s pre-validation requires.
29
- * Prefers `auto-pre-down` over other kinds when both are present.
30
29
  *
31
- * The single SQL query orders snapshots by `(kind = 'auto-pre-down') DESC,
32
- * created_at DESC, id DESC` so an auto-pre-down candidate always comes first
33
- * if any exists. The in-memory loop then validates each candidate and skips
34
- * snapshots with corrupted JSON or missing topology metadata, returning the
35
- * first usable row. Returns null when no usable snapshot exists.
30
+ * OPR.0.3.4.9 Option Y: prefers the most-recent of the crash-insurance tier
31
+ * {auto-pre-down, auto-periodic} -- the freshest of the two wins. A newer
32
+ * auto-periodic beats a stale auto-pre-down (the crash fix); a genuinely-
33
+ * fresher auto-pre-down still wins (graceful-cycle preserved). Manual,
34
+ * pre_restore, and auto-rehydrate remain below the tier (unchanged).
35
+ *
36
+ * The SQL query orders by `(kind IN ('auto-pre-down','auto-periodic')) DESC,
37
+ * created_at DESC, id DESC`. The in-memory loop validates each candidate and
38
+ * skips snapshots with corrupted JSON or missing topology metadata, returning
39
+ * the first usable row. Returns null when no usable snapshot exists.
36
40
  *
37
41
  * Distinct from `findLatestUsableSnapshot` (rig-repository.ts, L2): that
38
42
  * helper requires at least one persisted resume token and is consumed by
@@ -42,7 +46,7 @@ export class SnapshotRepository {
42
46
  */
43
47
  findLatestRestoreUsable(rigId) {
44
48
  const rows = this.db
45
- .prepare("SELECT * FROM snapshots WHERE rig_id = ? ORDER BY (kind = 'auto-pre-down') DESC, created_at DESC, id DESC")
49
+ .prepare("SELECT * FROM snapshots WHERE rig_id = ? ORDER BY (kind IN ('auto-pre-down', 'auto-periodic')) DESC, created_at DESC, id DESC")
46
50
  .all(rigId);
47
51
  for (const row of rows) {
48
52
  let data;
@@ -98,6 +102,27 @@ export class SnapshotRepository {
98
102
  .run(...toDelete.map((r) => r.id));
99
103
  return toDelete.length;
100
104
  }
105
+ /** OPR.0.3.4.9 — kind-scoped retention. Keeps the newest `keepCount` rows
106
+ * of the given kind and deletes only older rows of THAT kind. Never touches
107
+ * other kinds. Hard floor: keepCount >= 1 (never prune to zero). */
108
+ pruneSnapshotsByKind(rigId, kind, keepCount) {
109
+ const effectiveKeep = Math.max(1, keepCount);
110
+ const keepers = this.db
111
+ .prepare("SELECT id FROM snapshots WHERE rig_id = ? AND kind = ? ORDER BY created_at DESC LIMIT ?")
112
+ .all(rigId, kind, effectiveKeep);
113
+ const keepIds = new Set(keepers.map((r) => r.id));
114
+ const all = this.db
115
+ .prepare("SELECT id FROM snapshots WHERE rig_id = ? AND kind = ?")
116
+ .all(rigId, kind);
117
+ const toDelete = all.filter((r) => !keepIds.has(r.id));
118
+ if (toDelete.length === 0)
119
+ return 0;
120
+ const placeholders = toDelete.map(() => "?").join(",");
121
+ this.db
122
+ .prepare(`DELETE FROM snapshots WHERE id IN (${placeholders})`)
123
+ .run(...toDelete.map((r) => r.id));
124
+ return toDelete.length;
125
+ }
101
126
  rowToSnapshot(row) {
102
127
  return {
103
128
  id: row.id,
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-repository.js","sourceRoot":"","sources":["../../src/domain/snapshot-repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-repository.js","sourceRoot":"","sources":["../../src/domain/snapshot-repository.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { PodRigInstantiator, AddMemberOutcome } from "./rigspec-instantiator.js";
2
+ import type { ClaimService, ReconcileSessionOutcome } from "./claim-service.js";
2
3
  /**
3
4
  * Topology-mutation converge spine (OPR.0.3.3.24, AC-6 scaffold).
4
5
  *
@@ -25,6 +26,11 @@ export type TopologyOp = {
25
26
  to: string;
26
27
  kind: string;
27
28
  }>;
29
+ } | {
30
+ kind: "reconcile_session";
31
+ sessionName: string;
32
+ rigId?: string;
33
+ logicalId?: string;
28
34
  } | {
29
35
  kind: "remove_member";
30
36
  logicalId: string;
@@ -51,6 +57,10 @@ export type ConvergeResult = {
51
57
  kind: "add_member";
52
58
  supported: true;
53
59
  outcome: AddMemberOutcome;
60
+ } | {
61
+ kind: "reconcile_session";
62
+ supported: true;
63
+ outcome: ReconcileSessionOutcome;
54
64
  } | {
55
65
  kind: TopologyOpKind;
56
66
  detected: true;
@@ -84,14 +94,26 @@ export interface LiveMember {
84
94
  * classifies them honestly when handed one directly.
85
95
  */
86
96
  export declare function diffTopology(declared: DeclaredMember[], live: LiveMember[]): TopologyOp[];
97
+ /** The domain services the converge boundary composes per op kind (OPR.0.3.4.3:
98
+ * the spine grew a second implemented op, so convergeOp takes a deps object —
99
+ * add_member runs on the instantiator, reconcile_session on the claim service's
100
+ * no-input reconcile binding). */
101
+ export interface ConvergeDeps {
102
+ instantiator: PodRigInstantiator;
103
+ /** Required for reconcile_session ops; add_member-only callers may omit it. */
104
+ claimService?: ClaimService;
105
+ }
87
106
  /**
88
107
  * Apply a single topology op. `add_member` runs the extracted create-node +
89
- * launch-binding seam via PodRigInstantiator.addMemberToPod. Every other kind is
90
- * reported honestly as detected-but-unsupported (NEVER silently skipped). The
91
- * agent-ergonomics (json + honest 3-part errors) the CLI and MCP expose live ON
92
- * this converge boundary, so future verbs inherit human/agent parity.
108
+ * launch-binding seam via PodRigInstantiator.addMemberToPod; `reconcile_session`
109
+ * runs ClaimService.reconcileSession the NO-LAUNCH, NO-INPUT adopt of a live
110
+ * hand-resumed session into its persisted node (never reaches NodeLauncher.
111
+ * launchNode or any pane-input primitive). Every other kind is reported honestly
112
+ * as detected-but-unsupported (NEVER silently skipped). The agent-ergonomics
113
+ * (json + honest 3-part errors) the CLI and MCP expose live ON this converge
114
+ * boundary, so future verbs inherit human/agent parity.
93
115
  */
94
- export declare function convergeOp(instantiator: PodRigInstantiator, rigId: string, op: TopologyOp, rigRoot: string, opts?: {
116
+ export declare function convergeOp(deps: ConvergeDeps, rigId: string, op: TopologyOp, rigRoot: string, opts?: {
95
117
  cwdOverride?: string;
96
118
  }): Promise<ConvergeResult>;
97
119
  //# sourceMappingURL=topology-converge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topology-converge.d.ts","sourceRoot":"","sources":["../../src/domain/topology-converge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEtF;;;;;;;;;;;;;;;GAeG;AAEH,kDAAkD;AAClD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC/H;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAEhD,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAmB,CAAC;AAE5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAE/D;AAED,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,gDAAgD,CAAC;AAEhF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAsBzF;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,YAAY,EAAE,kBAAkB,EAChC,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
1
+ {"version":3,"file":"topology-converge.d.ts","sourceRoot":"","sources":["../../src/domain/topology-converge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** The op-kinds converge() implements this release. The rest are classified-deferred. */
2
- export const SUPPORTED_OP_KINDS = ["add_member"];
2
+ export const SUPPORTED_OP_KINDS = ["add_member", "reconcile_session"];
3
3
  export function isSupportedOpKind(kind) {
4
4
  return SUPPORTED_OP_KINDS.includes(kind);
5
5
  }
@@ -42,20 +42,38 @@ export function diffTopology(declared, live) {
42
42
  }
43
43
  /**
44
44
  * Apply a single topology op. `add_member` runs the extracted create-node +
45
- * launch-binding seam via PodRigInstantiator.addMemberToPod. Every other kind is
46
- * reported honestly as detected-but-unsupported (NEVER silently skipped). The
47
- * agent-ergonomics (json + honest 3-part errors) the CLI and MCP expose live ON
48
- * this converge boundary, so future verbs inherit human/agent parity.
45
+ * launch-binding seam via PodRigInstantiator.addMemberToPod; `reconcile_session`
46
+ * runs ClaimService.reconcileSession the NO-LAUNCH, NO-INPUT adopt of a live
47
+ * hand-resumed session into its persisted node (never reaches NodeLauncher.
48
+ * launchNode or any pane-input primitive). Every other kind is reported honestly
49
+ * as detected-but-unsupported (NEVER silently skipped). The agent-ergonomics
50
+ * (json + honest 3-part errors) the CLI and MCP expose live ON this converge
51
+ * boundary, so future verbs inherit human/agent parity.
49
52
  */
50
- export async function convergeOp(instantiator, rigId, op, rigRoot, opts) {
53
+ export async function convergeOp(deps, rigId, op, rigRoot, opts) {
51
54
  switch (op.kind) {
52
55
  case "add_member": {
53
- const outcome = await instantiator.addMemberToPod(rigId, op.pod, op.member, rigRoot, {
56
+ const outcome = await deps.instantiator.addMemberToPod(rigId, op.pod, op.member, rigRoot, {
54
57
  cwdOverride: opts?.cwdOverride,
55
58
  edges: op.edges,
56
59
  });
57
60
  return { kind: "add_member", supported: true, outcome };
58
61
  }
62
+ case "reconcile_session": {
63
+ if (!deps.claimService) {
64
+ return {
65
+ kind: "reconcile_session",
66
+ supported: true,
67
+ outcome: { ok: false, code: "reconcile_error", message: "Claim service unavailable; cannot reconcile." },
68
+ };
69
+ }
70
+ const outcome = await deps.claimService.reconcileSession({
71
+ sessionName: op.sessionName,
72
+ rigId: op.rigId,
73
+ logicalId: op.logicalId,
74
+ });
75
+ return { kind: "reconcile_session", supported: true, outcome };
76
+ }
59
77
  case "remove_member":
60
78
  case "move_member":
61
79
  case "fork_member":