@openrig/cli 0.4.2 → 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.
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +87 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +46 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +167 -3
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +31 -0
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +62 -0
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/045_resume_verification.d.ts +29 -0
- package/daemon/dist/db/migrations/045_resume_verification.d.ts.map +1 -0
- package/daemon/dist/db/migrations/045_resume_verification.js +34 -0
- package/daemon/dist/db/migrations/045_resume_verification.js.map +1 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +41 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js +56 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.d.ts +48 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.d.ts.map +1 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.js +52 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.js.map +1 -0
- package/daemon/dist/domain/activity-endpoint.d.ts +25 -0
- package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -0
- package/daemon/dist/domain/activity-endpoint.js +91 -0
- package/daemon/dist/domain/activity-endpoint.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts +36 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +90 -0
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +57 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +149 -3
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/event-loop-monitor.d.ts +100 -0
- package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -0
- package/daemon/dist/domain/event-loop-monitor.js +127 -0
- package/daemon/dist/domain/event-loop-monitor.js.map +1 -0
- package/daemon/dist/domain/gate-predicate.d.ts +29 -0
- package/daemon/dist/domain/gate-predicate.d.ts.map +1 -0
- package/daemon/dist/domain/gate-predicate.js +73 -0
- package/daemon/dist/domain/gate-predicate.js.map +1 -0
- package/daemon/dist/domain/graph-projection.d.ts +7 -1
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +19 -1
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +7 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +84 -5
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js +11 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/daemon/dist/domain/policies/idle-gate-qitem.d.ts +14 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.d.ts.map +1 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.js +114 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +8 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +109 -27
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +25 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.js +72 -4
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts +44 -2
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +92 -6
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/resume-token-capture.d.ts +50 -0
- package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -0
- package/daemon/dist/domain/resume-token-capture.js +63 -0
- package/daemon/dist/domain/resume-token-capture.js.map +1 -0
- package/daemon/dist/domain/rig-status-compose.d.ts +62 -0
- package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -0
- package/daemon/dist/domain/rig-status-compose.js +149 -0
- package/daemon/dist/domain/rig-status-compose.js.map +1 -0
- package/daemon/dist/domain/rig-teardown.d.ts +3 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +4 -19
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/route-timing-recorder.d.ts +42 -0
- package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -0
- package/daemon/dist/domain/route-timing-recorder.js +62 -0
- package/daemon/dist/domain/route-timing-recorder.js.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts +3 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +30 -1
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +50 -7
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +273 -33
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts +59 -0
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -0
- package/daemon/dist/domain/seat-identity-reconciler.js +207 -0
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -0
- package/daemon/dist/domain/seat-identity-store.d.ts +27 -0
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -0
- package/daemon/dist/domain/seat-identity-store.js +106 -0
- package/daemon/dist/domain/seat-identity-store.js.map +1 -0
- package/daemon/dist/domain/seat-switch-client-service.d.ts +57 -0
- package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-switch-client-service.js +168 -0
- package/daemon/dist/domain/seat-switch-client-service.js.map +1 -0
- package/daemon/dist/domain/self-attach-service.d.ts +8 -0
- package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
- package/daemon/dist/domain/self-attach-service.js +20 -7
- package/daemon/dist/domain/self-attach-service.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +35 -4
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +89 -10
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +8 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +143 -37
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +34 -2
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts +63 -0
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -0
- package/daemon/dist/domain/startup-proof.js +165 -0
- package/daemon/dist/domain/startup-proof.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +103 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.js +246 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -0
- package/daemon/dist/domain/types.d.ts +81 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +8 -0
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -2
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +4 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +19 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +18 -1
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +26 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/agent-images.d.ts.map +1 -1
- package/daemon/dist/routes/agent-images.js +139 -0
- package/daemon/dist/routes/agent-images.js.map +1 -1
- package/daemon/dist/routes/compaction.d.ts +17 -0
- package/daemon/dist/routes/compaction.d.ts.map +1 -0
- package/daemon/dist/routes/compaction.js +125 -0
- package/daemon/dist/routes/compaction.js.map +1 -0
- package/daemon/dist/routes/restore-check.d.ts +10 -0
- package/daemon/dist/routes/restore-check.d.ts.map +1 -1
- package/daemon/dist/routes/restore-check.js +46 -37
- package/daemon/dist/routes/restore-check.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +70 -1
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +53 -2
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +44 -9
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/snapshots.d.ts.map +1 -1
- package/daemon/dist/routes/snapshots.js +16 -1
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +12 -5
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/server.d.ts +32 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +28 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +1 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +91 -18
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +1 -1
- package/dist/commands/compact.d.ts +15 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +62 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +18 -2
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/fork.d.ts +4 -0
- package/dist/commands/fork.d.ts.map +1 -0
- package/dist/commands/fork.js +101 -0
- package/dist/commands/fork.js.map +1 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +34 -4
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +14 -4
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +6 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +78 -4
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/reconcile-session.d.ts.map +1 -1
- package/dist/commands/reconcile-session.js +2 -2
- package/dist/commands/reconcile-session.js.map +1 -1
- package/dist/commands/restore-check.d.ts.map +1 -1
- package/dist/commands/restore-check.js +93 -0
- package/dist/commands/restore-check.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +51 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts +17 -0
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +145 -32
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +151 -10
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/start.d.ts +5 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/startup-proof.d.ts +24 -0
- package/dist/commands/startup-proof.d.ts.map +1 -0
- package/dist/commands/startup-proof.js +100 -0
- package/dist/commands/startup-proof.js.map +1 -0
- package/dist/commands/unclaim.js +2 -2
- package/dist/commands/unclaim.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +10 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/watchdog.js +2 -2
- package/dist/commands/watchdog.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +23 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +50 -5
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/codex-auth.d.ts +24 -0
- package/dist/lib/codex-auth.d.ts.map +1 -1
- package/dist/lib/codex-auth.js +89 -17
- package/dist/lib/codex-auth.js.map +1 -1
- package/dist/lib/scope/scope-audit.d.ts +3 -1
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +30 -1
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope-templates/mission-placeholder.md +41 -0
- package/dist/lib/scope-templates/mission-progress.md +2 -0
- package/dist/lib/scope-templates/mission-release.md +41 -0
- package/dist/lib/scope-templates/placeholder.md +4 -0
- package/dist/lib/scope-templates/proof.md +2 -0
- package/dist/lib/scope-templates/slice-progress.md +2 -0
- package/dist/openrig-compat.d.ts +19 -0
- package/dist/openrig-compat.d.ts.map +1 -1
- package/dist/openrig-compat.js +31 -1
- package/dist/openrig-compat.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/index-DYZniQcc.js +597 -0
- package/ui/dist/assets/index-trcb4Yf_.css +32 -0
- package/ui/dist/index.html +23 -2
- package/ui/dist/assets/index-CnqRX7A3.css +0 -32
- package/ui/dist/assets/index-CtL9jXFt.js +0 -582
|
@@ -145,26 +145,11 @@ export class RigTeardownOrchestrator {
|
|
|
145
145
|
type: "rig.deleted", rigId, seq: persistedSeq, createdAt: persistedAt,
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
|
-
/** Get latest session per node, filtered to live statuses
|
|
148
|
+
/** Get latest session per node, filtered to live statuses.
|
|
149
|
+
* OPR.0.4.3.20 FR-4 — delegates to the shared SessionRegistry method so the
|
|
150
|
+
* teardown pre-down path and the periodic/manual snapshot refresh share ONE query. */
|
|
149
151
|
getLatestLiveSessions(rigId) {
|
|
150
|
-
|
|
151
|
-
SELECT n.id as node_id, s.id as session_id, s.session_name, s.status, n.runtime, n.cwd, s.resume_type, s.resume_token
|
|
152
|
-
FROM nodes n
|
|
153
|
-
JOIN sessions s ON s.node_id = n.id
|
|
154
|
-
WHERE n.rig_id = ?
|
|
155
|
-
AND s.id = (SELECT s2.id FROM sessions s2 WHERE s2.node_id = n.id ORDER BY s2.created_at DESC, s2.id DESC LIMIT 1)
|
|
156
|
-
AND s.status IN ('running', 'idle', 'unknown')
|
|
157
|
-
`).all(rigId);
|
|
158
|
-
return rows.map((r) => ({
|
|
159
|
-
nodeId: r.node_id,
|
|
160
|
-
sessionId: r.session_id,
|
|
161
|
-
sessionName: r.session_name,
|
|
162
|
-
status: r.status,
|
|
163
|
-
runtime: r.runtime,
|
|
164
|
-
resumeType: r.resume_type,
|
|
165
|
-
resumeToken: r.resume_token,
|
|
166
|
-
cwd: r.cwd,
|
|
167
|
-
}));
|
|
152
|
+
return this.deps.sessionRegistry.getLatestLiveSessions(rigId);
|
|
168
153
|
}
|
|
169
154
|
cleanupManagedGuidanceFiles(rigId) {
|
|
170
155
|
const rows = this.db.prepare(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rig-teardown.js","sourceRoot":"","sources":["../../src/domain/rig-teardown.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rig-teardown.js","sourceRoot":"","sources":["../../src/domain/rig-teardown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
/**
|
|
3
|
+
* OPR.0.4.3.21 — request-duration accounting for the EXPENSIVE topology
|
|
4
|
+
* routes only (rigs summary/graph, per-rig nodes, ps). These are the densest
|
|
5
|
+
* synchronous-CPU handlers (per-rig getNodeInventory fan-out, tmux
|
|
6
|
+
* attachAgentActivity) and are the prime suspects when the event loop starves.
|
|
7
|
+
*
|
|
8
|
+
* Reuse-first (ponytail): one lightweight `app.use` middleware, in-memory
|
|
9
|
+
* rolling last/max per route label, surfaced on the existing `/healthz`
|
|
10
|
+
* payload. No new route, no new store, no persistence. Cheap routes are NOT
|
|
11
|
+
* measured (label === null → the middleware is a no-op for them).
|
|
12
|
+
*/
|
|
13
|
+
export interface RouteTiming {
|
|
14
|
+
/** Duration of the most recent request to this route (ms). */
|
|
15
|
+
lastMs: number;
|
|
16
|
+
/** Largest duration observed for this route (ms) since boot. */
|
|
17
|
+
maxMs: number;
|
|
18
|
+
/** Number of requests observed for this route since boot. */
|
|
19
|
+
count: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Classify a request into a stable expensive-route label, or null when the
|
|
23
|
+
* route is not one we account for. Pure so the labeling is unit-provable.
|
|
24
|
+
*
|
|
25
|
+
* Grounded at 719a059e (IMPL-SPEC §1.4):
|
|
26
|
+
* - GET /api/rigs/summary (rigs.ts:163 per-rig getNodeInventory)
|
|
27
|
+
* - GET /api/rigs/:id/graph (rigs.ts:205 attachAgentActivity tmux fan-out)
|
|
28
|
+
* - GET /api/rigs/:id/nodes (sessions.ts:82 per-node enrichment)
|
|
29
|
+
* - GET /api/ps (ps-projection.ts:151 N+1 inventory)
|
|
30
|
+
*/
|
|
31
|
+
export declare function expensiveRouteLabel(method: string, path: string): string | null;
|
|
32
|
+
export declare class RouteTimingRecorder {
|
|
33
|
+
private readonly timings;
|
|
34
|
+
record(label: string, durationMs: number): void;
|
|
35
|
+
snapshot(): Record<string, RouteTiming>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The single timing middleware. Measures wall-clock around `next()` and
|
|
39
|
+
* records ONLY when the request maps to an expensive route label.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createRouteTimingMiddleware(recorder: RouteTimingRecorder): MiddlewareHandler;
|
|
42
|
+
//# sourceMappingURL=route-timing-recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-timing-recorder.d.ts","sourceRoot":"","sources":["../../src/domain/route-timing-recorder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS/E;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAW/C,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;CAKxC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,iBAAiB,CAc5F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
/**
|
|
3
|
+
* Classify a request into a stable expensive-route label, or null when the
|
|
4
|
+
* route is not one we account for. Pure so the labeling is unit-provable.
|
|
5
|
+
*
|
|
6
|
+
* Grounded at 719a059e (IMPL-SPEC §1.4):
|
|
7
|
+
* - GET /api/rigs/summary (rigs.ts:163 per-rig getNodeInventory)
|
|
8
|
+
* - GET /api/rigs/:id/graph (rigs.ts:205 attachAgentActivity tmux fan-out)
|
|
9
|
+
* - GET /api/rigs/:id/nodes (sessions.ts:82 per-node enrichment)
|
|
10
|
+
* - GET /api/ps (ps-projection.ts:151 N+1 inventory)
|
|
11
|
+
*/
|
|
12
|
+
export function expensiveRouteLabel(method, path) {
|
|
13
|
+
if (method !== "GET")
|
|
14
|
+
return null;
|
|
15
|
+
if (path === "/api/ps")
|
|
16
|
+
return "GET /api/ps";
|
|
17
|
+
if (path === "/api/rigs/summary")
|
|
18
|
+
return "GET /api/rigs/summary";
|
|
19
|
+
// /api/rigs/:id/graph and /api/rigs/:id/nodes — a single dynamic segment
|
|
20
|
+
// between /api/rigs/ and the trailing verb.
|
|
21
|
+
const rigsMatch = /^\/api\/rigs\/[^/]+\/(graph|nodes)$/.exec(path);
|
|
22
|
+
if (rigsMatch)
|
|
23
|
+
return `GET /api/rigs/:id/${rigsMatch[1]}`;
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
export class RouteTimingRecorder {
|
|
27
|
+
timings = new Map();
|
|
28
|
+
record(label, durationMs) {
|
|
29
|
+
const existing = this.timings.get(label);
|
|
30
|
+
if (!existing) {
|
|
31
|
+
this.timings.set(label, { lastMs: durationMs, maxMs: durationMs, count: 1 });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
existing.lastMs = durationMs;
|
|
35
|
+
existing.maxMs = Math.max(existing.maxMs, durationMs);
|
|
36
|
+
existing.count += 1;
|
|
37
|
+
}
|
|
38
|
+
snapshot() {
|
|
39
|
+
return Object.fromEntries([...this.timings.entries()].map(([label, t]) => [label, { ...t }]));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The single timing middleware. Measures wall-clock around `next()` and
|
|
44
|
+
* records ONLY when the request maps to an expensive route label.
|
|
45
|
+
*/
|
|
46
|
+
export function createRouteTimingMiddleware(recorder) {
|
|
47
|
+
return async (c, next) => {
|
|
48
|
+
const label = expensiveRouteLabel(c.req.method, c.req.path);
|
|
49
|
+
if (!label) {
|
|
50
|
+
await next();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const startedAt = performance.now();
|
|
54
|
+
try {
|
|
55
|
+
await next();
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
recorder.record(label, performance.now() - startedAt);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=route-timing-recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-timing-recorder.js","sourceRoot":"","sources":["../../src/domain/route-timing-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAwB9C;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,IAAY;IAC9D,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,uBAAuB,CAAC;IACjE,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,SAAS,GAAG,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,SAAS;QAAE,OAAO,qBAAqB,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,mBAAmB;IACb,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE1D,MAAM,CAAC,KAAa,EAAE,UAAkB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtD,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAA6B;IACvE,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type RailStatus = "present" | "missing" | "malformed" | "readme-only";
|
|
2
2
|
export type FindingSeverity = "high" | "medium" | "low" | "info";
|
|
3
|
-
export type FindingKind = "missing_progress" | "registration_ghost" | "missing_id" | "id_convention_violation" | "orphan_progress" | "missing_mission_brief" | "malformed_mission_brief" | "missing_mission_notes" | "missing_proof";
|
|
3
|
+
export type FindingKind = "missing_progress" | "registration_ghost" | "missing_id" | "id_convention_violation" | "orphan_progress" | "missing_mission_brief" | "malformed_mission_brief" | "missing_mission_notes" | "missing_proof" | "progress_not_updated_on_commit";
|
|
4
4
|
export interface AuditFinding {
|
|
5
5
|
kind: FindingKind;
|
|
6
6
|
severity: FindingSeverity;
|
|
@@ -28,6 +28,8 @@ export interface ScopeAuditInput {
|
|
|
28
28
|
proofDirHasEntries?: boolean;
|
|
29
29
|
hasProofPacket?: boolean;
|
|
30
30
|
sliceStatus?: string | null;
|
|
31
|
+
sliceTouchedByRecentCommit?: boolean;
|
|
32
|
+
progressTouchedByRecentCommit?: boolean;
|
|
31
33
|
}
|
|
32
34
|
export interface ScopeAuditResult {
|
|
33
35
|
railStatus: RailStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-audit.d.ts","sourceRoot":"","sources":["../../../src/domain/scope/scope-audit.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,YAAY,GACZ,yBAAyB,GACzB,iBAAiB,GACjB,uBAAuB,GACvB,yBAAyB,GACzB,uBAAuB,GACvB,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-audit.d.ts","sourceRoot":"","sources":["../../../src/domain/scope/scope-audit.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,YAAY,GACZ,yBAAyB,GACzB,iBAAiB,GACjB,uBAAuB,GACvB,yBAAyB,GACzB,uBAAuB,GACvB,eAAe,GACf,gCAAgC,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAQ5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA2DD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAwK1E"}
|
|
@@ -44,6 +44,18 @@ function statusRequiresProof(status) {
|
|
|
44
44
|
|| normalized.includes("proven")
|
|
45
45
|
|| normalized.includes("promoted");
|
|
46
46
|
}
|
|
47
|
+
// A mission is ACTIVE unless its status names a terminal / archived state.
|
|
48
|
+
// The SOP wants missing_mission_notes to fire for an ACTIVE mission only — a
|
|
49
|
+
// shipped/archived mission no longer needs a live continuity file. No status
|
|
50
|
+
// => treat as active (still flag), which preserves the pre-tighten behavior for
|
|
51
|
+
// the common status-less mission.
|
|
52
|
+
function missionIsActive(status) {
|
|
53
|
+
if (!status)
|
|
54
|
+
return true;
|
|
55
|
+
const normalized = status.toLowerCase();
|
|
56
|
+
const terminal = ["archiv", "complete", "done", "shipped", "closed", "historical", "superseded", "abandoned"];
|
|
57
|
+
return !terminal.some((token) => normalized.includes(token));
|
|
58
|
+
}
|
|
47
59
|
export function classifyScopeItem(input) {
|
|
48
60
|
const findings = [];
|
|
49
61
|
let frontmatterError = null;
|
|
@@ -157,7 +169,8 @@ export function classifyScopeItem(input) {
|
|
|
157
169
|
remediation: missionBriefFix(),
|
|
158
170
|
});
|
|
159
171
|
}
|
|
160
|
-
if (input.missionNotesExists === false
|
|
172
|
+
if (input.missionNotesExists === false
|
|
173
|
+
&& missionIsActive(parseStatusFromFrontmatter(input.readmeFrontmatterRaw))) {
|
|
161
174
|
const notesPath = input.missionNotesPath ?? childPath(input.path, "MISSION_NOTES.md");
|
|
162
175
|
findings.push({
|
|
163
176
|
kind: "missing_mission_notes",
|
|
@@ -185,6 +198,22 @@ export function classifyScopeItem(input) {
|
|
|
185
198
|
remediation: "Add PROOF.md at the slice root and put verification artifacts under proof/ per the slice-closeout SOP.",
|
|
186
199
|
});
|
|
187
200
|
}
|
|
201
|
+
// committed-without-PROGRESS. Fires only on POSITIVE evidence: the most
|
|
202
|
+
// recent commit (HEAD) touched this slice AND definitively did NOT touch its
|
|
203
|
+
// PROGRESS.md. Inputs are git-derived and CLI-only; when git context is
|
|
204
|
+
// unavailable they are left undefined and this branch is inert (no
|
|
205
|
+
// false-green, no false-positive). See ScopeAuditInput.
|
|
206
|
+
if (input.sliceTouchedByRecentCommit === true
|
|
207
|
+
&& input.progressTouchedByRecentCommit === false) {
|
|
208
|
+
const progressPath = childPath(input.path, "PROGRESS.md");
|
|
209
|
+
findings.push({
|
|
210
|
+
kind: "progress_not_updated_on_commit",
|
|
211
|
+
severity: "medium",
|
|
212
|
+
path: progressPath,
|
|
213
|
+
message: "The most recent commit (HEAD) touched this slice but did not update PROGRESS.md.",
|
|
214
|
+
remediation: "Update PROGRESS.md to reflect the committed change (one line per outcome) and amend or add a follow-up commit. Per the mission-slice-sop, PROGRESS.md is updated on every commit — fix the flag, do not suppress it.",
|
|
215
|
+
});
|
|
216
|
+
}
|
|
188
217
|
}
|
|
189
218
|
return { railStatus, findings, frontmatterError };
|
|
190
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-audit.js","sourceRoot":"","sources":["../../../src/domain/scope/scope-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-audit.js","sourceRoot":"","sources":["../../../src/domain/scope/scope-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,16 +6,15 @@ import type { EventBus } from "./event-bus.js";
|
|
|
6
6
|
import type { TmuxAdapter } from "../adapters/tmux.js";
|
|
7
7
|
import { type SeatStatusResult } from "./seat-status-service.js";
|
|
8
8
|
import { type SeatHandoverPlan, type SeatHandoverSource } from "./seat-handover-planner.js";
|
|
9
|
+
import { type ResumeTokenCaptureDeps } from "./resume-token-capture.js";
|
|
10
|
+
import type { RuntimeAdapter } from "./runtime-adapter.js";
|
|
9
11
|
export interface SeatHandoverMutationResult {
|
|
10
12
|
ok: true;
|
|
11
13
|
dryRun: false;
|
|
12
14
|
mutated: true;
|
|
13
15
|
continuityTransferred: false;
|
|
14
16
|
seat: SeatHandoverPlan["seat"];
|
|
15
|
-
source: SeatHandoverSource
|
|
16
|
-
mode: "discovered";
|
|
17
|
-
ref: string;
|
|
18
|
-
};
|
|
17
|
+
source: SeatHandoverSource;
|
|
19
18
|
reason: string;
|
|
20
19
|
operator: string | null;
|
|
21
20
|
previousOccupant: string;
|
|
@@ -33,7 +32,7 @@ export interface SeatHandoverMutationResult {
|
|
|
33
32
|
eventSeq: number;
|
|
34
33
|
sideEffects: {
|
|
35
34
|
departingSessionKilled: false;
|
|
36
|
-
startupContextDelivered:
|
|
35
|
+
startupContextDelivered: boolean;
|
|
37
36
|
provenanceRecordWritten: false;
|
|
38
37
|
};
|
|
39
38
|
}
|
|
@@ -45,7 +44,7 @@ export type SeatHandoverResult = {
|
|
|
45
44
|
result: SeatHandoverMutationResult;
|
|
46
45
|
} | {
|
|
47
46
|
ok: false;
|
|
48
|
-
code: "missing_reason" | "invalid_source" | "successor_creation_not_implemented";
|
|
47
|
+
code: "missing_reason" | "invalid_source" | "successor_creation_not_implemented" | "source_not_supported";
|
|
49
48
|
message: string;
|
|
50
49
|
guidance: string;
|
|
51
50
|
} | {
|
|
@@ -60,7 +59,7 @@ export type SeatHandoverResult = {
|
|
|
60
59
|
guidance: string;
|
|
61
60
|
} | {
|
|
62
61
|
ok: false;
|
|
63
|
-
code: "tmux_probe_failed" | "handover_commit_failed";
|
|
62
|
+
code: "tmux_probe_failed" | "handover_commit_failed" | "successor_create_failed" | "context_delivery_failed";
|
|
64
63
|
message: string;
|
|
65
64
|
guidance: string;
|
|
66
65
|
} | Extract<SeatStatusResult, {
|
|
@@ -74,6 +73,23 @@ interface SeatHandoverServiceDeps {
|
|
|
74
73
|
eventBus: EventBus;
|
|
75
74
|
tmuxAdapter: TmuxAdapter;
|
|
76
75
|
now?: () => Date;
|
|
76
|
+
/** OpenRig identity/activity env stamped onto a created successor session,
|
|
77
|
+
* mirroring the launch identity env. Defaults to {} (the three core identity
|
|
78
|
+
* vars are always derived internally). */
|
|
79
|
+
sessionEnv?: Record<string, string | undefined>;
|
|
80
|
+
/** Injectable id source for the successor session name (tests). */
|
|
81
|
+
newSuccessorId?: () => string;
|
|
82
|
+
/** Runtime adapters keyed by runtime — used to launch a fresh successor into
|
|
83
|
+
* a LIVE agent (B1) before commit. Absent → fresh handover cannot launch. */
|
|
84
|
+
runtimeAdapters?: Record<string, RuntimeAdapter>;
|
|
85
|
+
/** Claude sidecar reader for discovered-mode resume-token capture (B2). */
|
|
86
|
+
contextUsageStore?: ResumeTokenCaptureDeps["contextUsageStore"];
|
|
87
|
+
/** Codex thread-id capturer for discovered-mode resume-token capture (B2). */
|
|
88
|
+
resumeTokenCapturer?: ResumeTokenCaptureDeps["resumeTokenCapturer"];
|
|
89
|
+
/** Readiness timeout for the successor launch (tests shorten it). */
|
|
90
|
+
readinessTimeoutMs?: number;
|
|
91
|
+
/** Injectable sleep for the successor readiness backoff (tests). */
|
|
92
|
+
sleep?: (ms: number) => Promise<void>;
|
|
77
93
|
}
|
|
78
94
|
export declare class SeatHandoverService {
|
|
79
95
|
private db;
|
|
@@ -84,6 +100,8 @@ export declare class SeatHandoverService {
|
|
|
84
100
|
private discoveryRepo;
|
|
85
101
|
private eventBus;
|
|
86
102
|
private tmuxAdapter;
|
|
103
|
+
private successorLauncher;
|
|
104
|
+
private captureDeps;
|
|
87
105
|
private now;
|
|
88
106
|
constructor(deps: SeatHandoverServiceDeps);
|
|
89
107
|
handover(input: {
|
|
@@ -93,6 +111,31 @@ export declare class SeatHandoverService {
|
|
|
93
111
|
operator?: string | null;
|
|
94
112
|
dryRun?: boolean;
|
|
95
113
|
}): Promise<SeatHandoverResult>;
|
|
114
|
+
/**
|
|
115
|
+
* The shared discovered->commit path (validation + presence-verify + rebind).
|
|
116
|
+
* `cleanup` is invoked before returning ANY failure so a composer-created
|
|
117
|
+
* successor is unwound; the discovered-source caller passes null (nothing to
|
|
118
|
+
* unwind). The `hasSession` probe here is the continuity/presence verify that
|
|
119
|
+
* runs BEFORE the commit releases the original binding.
|
|
120
|
+
*/
|
|
121
|
+
private finalizeWithDiscovered;
|
|
122
|
+
/**
|
|
123
|
+
* B2 — best-effort discovered-mode resume-token capture at commit. Derives the
|
|
124
|
+
* live token via the shared FR-3 derive-helper (pure read), persists it with
|
|
125
|
+
* provenance "adoption" (the rank guard governs clobber), and emits the same
|
|
126
|
+
* captured/preserved/skipped events FR-3 uses. Honest failure = persist
|
|
127
|
+
* nothing + a redacted skip event. NEVER throws, never logs the token.
|
|
128
|
+
*/
|
|
129
|
+
private captureDiscoveredResumeToken;
|
|
130
|
+
private emitCaptureSkip;
|
|
131
|
+
/** Best-effort capture of the departing seat's visible terminal before the
|
|
132
|
+
* successor is created. Never throws; an empty capture is honestly recorded
|
|
133
|
+
* as "no capture available" in the restore packet. */
|
|
134
|
+
private captureDepartingContext;
|
|
135
|
+
/** Deliver the captured restore packet to a fresh successor via the shipped
|
|
136
|
+
* interactive-text transport (send_text + Enter), mirroring the startup
|
|
137
|
+
* orchestrator's initial-prompt delivery. */
|
|
138
|
+
private deliverRestorePacket;
|
|
96
139
|
private checkRuntimeMismatch;
|
|
97
140
|
private lookupNode;
|
|
98
141
|
private lookupLatestSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-handover-service.d.ts","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAA4C,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"seat-handover-service.d.ts","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"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"}
|