@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.
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +19 -0
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +52 -30
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js +3 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/daemon/dist/domain/claim-service.d.ts +79 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +214 -0
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/codex-profile-preflight.d.ts +8 -0
- package/daemon/dist/domain/codex-profile-preflight.d.ts.map +1 -0
- package/daemon/dist/domain/codex-profile-preflight.js +43 -0
- package/daemon/dist/domain/codex-profile-preflight.js.map +1 -0
- package/daemon/dist/domain/graph-projection.d.ts +2 -0
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +2 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/node-cmux-service.d.ts +3 -1
- package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
- package/daemon/dist/domain/node-cmux-service.js +25 -8
- package/daemon/dist/domain/node-cmux-service.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +68 -28
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +21 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.js +65 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +9 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +11 -1
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +42 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +204 -36
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +43 -0
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -0
- package/daemon/dist/domain/restore-plan-preview.js +85 -0
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +7 -4
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +15 -2
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +37 -2
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +54 -0
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -0
- package/daemon/dist/domain/seat-attention-reconciler.js +176 -0
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -0
- package/daemon/dist/domain/snapshot-repository.d.ts +15 -7
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +33 -8
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/topology-converge.d.ts +27 -5
- package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
- package/daemon/dist/domain/topology-converge.js +25 -7
- package/daemon/dist/domain/topology-converge.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +37 -2
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +28 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/index.d.ts +15 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +21 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/rig-cmux.d.ts.map +1 -1
- package/daemon/dist/routes/rig-cmux.js +99 -40
- package/daemon/dist/routes/rig-cmux.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +20 -2
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +3 -1
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +93 -5
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +19 -2
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/server.d.ts +2 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +1 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +23 -1
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +131 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +51 -2
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +2 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/reconcile-session.d.ts +4 -0
- package/dist/commands/reconcile-session.d.ts.map +1 -0
- package/dist/commands/reconcile-session.js +79 -0
- package/dist/commands/reconcile-session.js.map +1 -0
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +40 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/start.d.ts +35 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +483 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +125 -10
- package/dist/commands/up.js.map +1 -1
- package/dist/config-store.d.ts +8 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +39 -0
- package/dist/config-store.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/{index-CrJgCmkX.js → index-De6vv0yO.js} +85 -85
- 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
|
-
*
|
|
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
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
|
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":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,MAAM,OAAO,kBAAkB;IACpB,EAAE,CAAoB;IAE/B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,IAAY,EAAE,IAAkB;QAC5D,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN,oEAAoE,CACrE;aACA,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC,aAAa,CACvB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAgB,CAC/E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,sCAAsC,CAAC;aAC/C,GAAG,CAAC,EAAE,CAA4B,CAAC;QACtC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,qBAAqB,CAAC,KAAa;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN,sGAAsG,CACvG;aACA,GAAG,CAAC,KAAK,CAA4B,CAAC;QACzC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED
|
|
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
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
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(
|
|
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;
|
|
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
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
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(
|
|
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":
|