@openrig/cli 0.1.12 → 0.2.0
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/openrig-activity-hook-relay.cjs +104 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +14 -6
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +183 -65
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +5 -0
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +13 -0
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts +8 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +74 -5
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +9 -5
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +255 -28
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts +2 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.js +7 -1
- package/daemon/dist/adapters/terminal-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +53 -5
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts +3 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.js +37 -0
- package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.js +52 -0
- package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
- package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.js +27 -0
- package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
- package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
- package/daemon/dist/domain/agent-activity-store.js +177 -0
- package/daemon/dist/domain/agent-activity-store.js.map +1 -0
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +3 -0
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/agent-starter-resolver.d.ts +100 -0
- package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/agent-starter-resolver.js +200 -0
- package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.js +285 -0
- package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
- package/daemon/dist/domain/context-usage-store.d.ts +1 -1
- package/daemon/dist/domain/context-usage-store.js +1 -1
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
- package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
- package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
- package/daemon/dist/domain/inbox-handler.d.ts +68 -0
- package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/inbox-handler.js +177 -0
- package/daemon/dist/domain/inbox-handler.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +67 -0
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +29 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +160 -38
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +2 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +14 -2
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/outbox-handler.d.ts +48 -0
- package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/outbox-handler.js +106 -0
- package/daemon/dist/domain/outbox-handler.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
- package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
- package/daemon/dist/domain/policies/types.d.ts +51 -0
- package/daemon/dist/domain/policies/types.d.ts.map +1 -0
- package/daemon/dist/domain/policies/types.js +9 -0
- package/daemon/dist/domain/policies/types.js.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
- package/daemon/dist/domain/project-classifier.d.ts +75 -0
- package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
- package/daemon/dist/domain/project-classifier.js +132 -0
- package/daemon/dist/domain/project-classifier.js.map +1 -0
- package/daemon/dist/domain/projection-planner.d.ts +1 -0
- package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
- package/daemon/dist/domain/projection-planner.js +3 -0
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +31 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +38 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +322 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-repository.js +686 -0
- package/daemon/dist/domain/queue-repository.js.map +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
- package/daemon/dist/domain/queue-transition-log.js +52 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -0
- package/daemon/dist/domain/restore-check-service.d.ts +203 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
- package/daemon/dist/domain/restore-check-service.js +1047 -0
- package/daemon/dist/domain/restore-check-service.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +460 -62
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +13 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +17 -1
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +63 -5
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +13 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +2 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +61 -1
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +196 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +27 -2
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +5 -0
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
- package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-planner.js +188 -0
- package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
- package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-service.js +343 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -0
- package/daemon/dist/domain/seat-status-service.d.ts +50 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-status-service.js +66 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +30 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +322 -12
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +77 -0
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +31 -5
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/stream-store.d.ts +56 -0
- package/daemon/dist/domain/stream-store.d.ts.map +1 -0
- package/daemon/dist/domain/stream-store.js +108 -0
- package/daemon/dist/domain/stream-store.js.map +1 -0
- package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
- package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
- package/daemon/dist/domain/transcript-redaction.js +34 -0
- package/daemon/dist/domain/transcript-redaction.js.map +1 -0
- package/daemon/dist/domain/transcript-store.d.ts +15 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +57 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +316 -3
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
- package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
- package/daemon/dist/domain/view-event-bridge.js +92 -0
- package/daemon/dist/domain/view-event-bridge.js.map +1 -0
- package/daemon/dist/domain/view-projector.d.ts +83 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -0
- package/daemon/dist/domain/view-projector.js +296 -0
- package/daemon/dist/domain/view-projector.js.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.js +67 -0
- package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.js +112 -0
- package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.js +116 -0
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +64 -0
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-projector.js +424 -0
- package/daemon/dist/domain/workflow-projector.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-runtime.js +150 -0
- package/daemon/dist/domain/workflow-runtime.js.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts +35 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.js +171 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
- package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
- package/daemon/dist/domain/workflow-types.d.ts +108 -0
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-types.js +11 -0
- package/daemon/dist/domain/workflow-types.js.map +1 -0
- package/daemon/dist/domain/workflow-validator.d.ts +31 -0
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-validator.js +115 -0
- package/daemon/dist/domain/workflow-validator.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +21 -2
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts +3 -0
- package/daemon/dist/routes/activity.d.ts.map +1 -0
- package/daemon/dist/routes/activity.js +47 -0
- package/daemon/dist/routes/activity.js.map +1 -0
- package/daemon/dist/routes/projects.d.ts +12 -0
- package/daemon/dist/routes/projects.d.ts.map +1 -0
- package/daemon/dist/routes/projects.js +178 -0
- package/daemon/dist/routes/projects.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts +10 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -0
- package/daemon/dist/routes/queue.js +374 -0
- package/daemon/dist/routes/queue.js.map +1 -0
- package/daemon/dist/routes/restore-check.d.ts +3 -0
- package/daemon/dist/routes/restore-check.d.ts.map +1 -0
- package/daemon/dist/routes/restore-check.js +200 -0
- package/daemon/dist/routes/restore-check.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +60 -4
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts +3 -0
- package/daemon/dist/routes/seat.d.ts.map +1 -0
- package/daemon/dist/routes/seat.js +69 -0
- package/daemon/dist/routes/seat.js.map +1 -0
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +25 -4
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/snapshots.js +66 -29
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts +9 -0
- package/daemon/dist/routes/stream.d.ts.map +1 -0
- package/daemon/dist/routes/stream.js +119 -0
- package/daemon/dist/routes/stream.js.map +1 -0
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +38 -0
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +21 -0
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +24 -3
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/views.d.ts +13 -0
- package/daemon/dist/routes/views.d.ts.map +1 -0
- package/daemon/dist/routes/views.js +120 -0
- package/daemon/dist/routes/views.js.map +1 -0
- package/daemon/dist/routes/watchdog.d.ts +18 -0
- package/daemon/dist/routes/watchdog.d.ts.map +1 -0
- package/daemon/dist/routes/watchdog.js +148 -0
- package/daemon/dist/routes/watchdog.js.map +1 -0
- package/daemon/dist/routes/workflow.d.ts +20 -0
- package/daemon/dist/routes/workflow.d.ts.map +1 -0
- package/daemon/dist/routes/workflow.js +184 -0
- package/daemon/dist/routes/workflow.js.map +1 -0
- package/daemon/dist/server.d.ts +30 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +33 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +202 -8
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +12 -5
- package/daemon/docs/reference/agent-startup-guide.md +9 -9
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/shared/agent.yaml +17 -0
- package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
- package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
- package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +44 -1
- package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
- package/dist/bin-wrapper.js +0 -0
- package/dist/commands/capture.d.ts +7 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +59 -1
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/compact-plan.d.ts +9 -0
- package/dist/commands/compact-plan.d.ts.map +1 -0
- package/dist/commands/compact-plan.js +354 -0
- package/dist/commands/compact-plan.js.map +1 -0
- package/dist/commands/context.d.ts +9 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +220 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/expand.d.ts.map +1 -1
- package/dist/commands/expand.js +15 -4
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/heartbeat.d.ts +99 -0
- package/dist/commands/heartbeat.d.ts.map +1 -0
- package/dist/commands/heartbeat.js +393 -0
- package/dist/commands/heartbeat.js.map +1 -0
- package/dist/commands/project.d.ts +14 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +157 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/ps.d.ts +20 -3
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +455 -33
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +16 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +401 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/restore-check.d.ts +9 -0
- package/dist/commands/restore-check.d.ts.map +1 -0
- package/dist/commands/restore-check.js +234 -0
- package/dist/commands/restore-check.js.map +1 -0
- package/dist/commands/restore-packet.d.ts +9 -0
- package/dist/commands/restore-packet.d.ts.map +1 -0
- package/dist/commands/restore-packet.js +383 -0
- package/dist/commands/restore-packet.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +44 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/seat.d.ts +5 -0
- package/dist/commands/seat.d.ts.map +1 -0
- package/dist/commands/seat.js +170 -0
- package/dist/commands/seat.js.map +1 -0
- package/dist/commands/send.d.ts +12 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +93 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +99 -16
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/stream.d.ts +12 -0
- package/dist/commands/stream.d.ts.map +1 -0
- package/dist/commands/stream.js +111 -0
- package/dist/commands/stream.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +63 -3
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/view.d.ts +12 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +82 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/watchdog.d.ts +15 -0
- package/dist/commands/watchdog.d.ts.map +1 -0
- package/dist/commands/watchdog.js +120 -0
- package/dist/commands/watchdog.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +60 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow.d.ts +17 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +138 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/cross-host-cli-helpers.d.ts +12 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -0
- package/dist/cross-host-cli-helpers.js +48 -0
- package/dist/cross-host-cli-helpers.js.map +1 -0
- package/dist/cross-host-executor.d.ts +84 -0
- package/dist/cross-host-executor.d.ts.map +1 -0
- package/dist/cross-host-executor.js +138 -0
- package/dist/cross-host-executor.js.map +1 -0
- package/dist/host-registry.d.ts +50 -0
- package/dist/host-registry.d.ts.map +1 -0
- package/dist/host-registry.js +116 -0
- package/dist/host-registry.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +22 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
- package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
- package/dist/restore-packet/claude-transcript-parser.js +221 -0
- package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.js +159 -0
- package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
- package/dist/restore-packet/omitted-records.d.ts +60 -0
- package/dist/restore-packet/omitted-records.d.ts.map +1 -0
- package/dist/restore-packet/omitted-records.js +116 -0
- package/dist/restore-packet/omitted-records.js.map +1 -0
- package/dist/restore-packet/packet-writer.d.ts +59 -0
- package/dist/restore-packet/packet-writer.d.ts.map +1 -0
- package/dist/restore-packet/packet-writer.js +224 -0
- package/dist/restore-packet/packet-writer.js.map +1 -0
- package/dist/restore-packet/redaction.d.ts +30 -0
- package/dist/restore-packet/redaction.d.ts.map +1 -0
- package/dist/restore-packet/redaction.js +71 -0
- package/dist/restore-packet/redaction.js.map +1 -0
- package/dist/restore-packet/runtime-detect.d.ts +19 -0
- package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
- package/dist/restore-packet/runtime-detect.js +81 -0
- package/dist/restore-packet/runtime-detect.js.map +1 -0
- package/dist/restore-packet/schema-validator.d.ts +13 -0
- package/dist/restore-packet/schema-validator.d.ts.map +1 -0
- package/dist/restore-packet/schema-validator.js +245 -0
- package/dist/restore-packet/schema-validator.js.map +1 -0
- package/dist/restore-packet/types.d.ts +76 -0
- package/dist/restore-packet/types.d.ts.map +1 -0
- package/dist/restore-packet/types.js +15 -0
- package/dist/restore-packet/types.js.map +1 -0
- package/dist/schemas/restore-summary.schema.json +98 -0
- package/package.json +10 -3
- package/scripts/check-abi.mjs +123 -0
- package/ui/dist/assets/{index-DlMH-REm.css → index-Dec25siz.css} +1 -1
- package/ui/dist/assets/{index-Ccd-jwRN.js → index-GNYaWmBj.js} +2 -2
- package/ui/dist/index.html +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { readFileSync, existsSync } from "node:fs";
|
|
3
3
|
/** Freshness threshold: samples older than this are considered stale for compact displays. */
|
|
4
|
-
export const FRESHNESS_THRESHOLD_MS =
|
|
4
|
+
export const FRESHNESS_THRESHOLD_MS = 600_000; // 10 minutes per PM spec
|
|
5
5
|
export class ContextUsageStore {
|
|
6
6
|
db;
|
|
7
7
|
stateDir;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-usage-store.js","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGnD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"context-usage-store.js","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hot-potato strict-rejection contract (PL-004 Phase A).
|
|
3
|
+
*
|
|
4
|
+
* Load-bearing API contract: any code path that transitions a queue_item to
|
|
5
|
+
* `done` MUST pass a valid `closure_reason` from the 6-value enum below. This
|
|
6
|
+
* is enforced at this layer (NOT at the route, NOT at the CLI) so every
|
|
7
|
+
* surface that reaches the queue inherits the same guarantee.
|
|
8
|
+
*
|
|
9
|
+
* The 6 valid closure reasons:
|
|
10
|
+
* - handed_off_to : work continues with a different seat (closure_target = new owner)
|
|
11
|
+
* - blocked_on : work is parked pending another qitem (closure_target = blocker qitem_id)
|
|
12
|
+
* - denied : receiver rejected the work (closure_target = reason text)
|
|
13
|
+
* - canceled : sender or receiver withdrew (closure_target = note)
|
|
14
|
+
* - no-follow-on : terminal completion, nothing else needed
|
|
15
|
+
* - escalation : kicked up to higher tier (closure_target = escalation target)
|
|
16
|
+
*/
|
|
17
|
+
export declare const CLOSURE_REASONS: readonly ["handed_off_to", "blocked_on", "denied", "canceled", "no-follow-on", "escalation"];
|
|
18
|
+
export type ClosureReason = (typeof CLOSURE_REASONS)[number];
|
|
19
|
+
export interface ClosureRequest {
|
|
20
|
+
state: string;
|
|
21
|
+
closureReason?: string | null;
|
|
22
|
+
closureTarget?: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface ClosureValidationOk {
|
|
25
|
+
ok: true;
|
|
26
|
+
closureReason: ClosureReason | null;
|
|
27
|
+
closureTarget: string | null;
|
|
28
|
+
}
|
|
29
|
+
export interface ClosureValidationErr {
|
|
30
|
+
ok: false;
|
|
31
|
+
code: "missing_closure_reason" | "invalid_closure_reason" | "missing_closure_target";
|
|
32
|
+
message: string;
|
|
33
|
+
validReasons?: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export type ClosureValidation = ClosureValidationOk | ClosureValidationErr;
|
|
36
|
+
/**
|
|
37
|
+
* Validate a state transition's closure obligation.
|
|
38
|
+
* - If state !== "done": no closure_reason required; pass through any provided values.
|
|
39
|
+
* - If state === "done": closure_reason REQUIRED, must be in CLOSURE_REASONS.
|
|
40
|
+
* handed_off_to / blocked_on / escalation also require closure_target.
|
|
41
|
+
*/
|
|
42
|
+
export declare function validateClosure(req: ClosureRequest): ClosureValidation;
|
|
43
|
+
export declare function isClosureReason(value: unknown): value is ClosureReason;
|
|
44
|
+
export declare function computeClosureRequiredAt(claimedAt: string, tier: string | null): string | null;
|
|
45
|
+
//# sourceMappingURL=hot-potato-enforcer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hot-potato-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/hot-potato-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,eAAe,8FAOlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,wBAAwB,CAAC;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,iBAAiB,CA4CtE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAcD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAM9F"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hot-potato strict-rejection contract (PL-004 Phase A).
|
|
3
|
+
*
|
|
4
|
+
* Load-bearing API contract: any code path that transitions a queue_item to
|
|
5
|
+
* `done` MUST pass a valid `closure_reason` from the 6-value enum below. This
|
|
6
|
+
* is enforced at this layer (NOT at the route, NOT at the CLI) so every
|
|
7
|
+
* surface that reaches the queue inherits the same guarantee.
|
|
8
|
+
*
|
|
9
|
+
* The 6 valid closure reasons:
|
|
10
|
+
* - handed_off_to : work continues with a different seat (closure_target = new owner)
|
|
11
|
+
* - blocked_on : work is parked pending another qitem (closure_target = blocker qitem_id)
|
|
12
|
+
* - denied : receiver rejected the work (closure_target = reason text)
|
|
13
|
+
* - canceled : sender or receiver withdrew (closure_target = note)
|
|
14
|
+
* - no-follow-on : terminal completion, nothing else needed
|
|
15
|
+
* - escalation : kicked up to higher tier (closure_target = escalation target)
|
|
16
|
+
*/
|
|
17
|
+
export const CLOSURE_REASONS = [
|
|
18
|
+
"handed_off_to",
|
|
19
|
+
"blocked_on",
|
|
20
|
+
"denied",
|
|
21
|
+
"canceled",
|
|
22
|
+
"no-follow-on",
|
|
23
|
+
"escalation",
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Validate a state transition's closure obligation.
|
|
27
|
+
* - If state !== "done": no closure_reason required; pass through any provided values.
|
|
28
|
+
* - If state === "done": closure_reason REQUIRED, must be in CLOSURE_REASONS.
|
|
29
|
+
* handed_off_to / blocked_on / escalation also require closure_target.
|
|
30
|
+
*/
|
|
31
|
+
export function validateClosure(req) {
|
|
32
|
+
if (req.state !== "done") {
|
|
33
|
+
return {
|
|
34
|
+
ok: true,
|
|
35
|
+
closureReason: (req.closureReason ?? null),
|
|
36
|
+
closureTarget: req.closureTarget ?? null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (!req.closureReason) {
|
|
40
|
+
return {
|
|
41
|
+
ok: false,
|
|
42
|
+
code: "missing_closure_reason",
|
|
43
|
+
message: `state=done requires closure_reason; valid values: ${CLOSURE_REASONS.join(", ")}`,
|
|
44
|
+
validReasons: CLOSURE_REASONS,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!isClosureReason(req.closureReason)) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
code: "invalid_closure_reason",
|
|
51
|
+
message: `closure_reason=${req.closureReason} is not valid; valid values: ${CLOSURE_REASONS.join(", ")}`,
|
|
52
|
+
validReasons: CLOSURE_REASONS,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const requiresTarget = req.closureReason === "handed_off_to"
|
|
56
|
+
|| req.closureReason === "blocked_on"
|
|
57
|
+
|| req.closureReason === "escalation";
|
|
58
|
+
if (requiresTarget && !req.closureTarget) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
code: "missing_closure_target",
|
|
62
|
+
message: `closure_reason=${req.closureReason} requires closure_target`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
ok: true,
|
|
67
|
+
closureReason: req.closureReason,
|
|
68
|
+
closureTarget: req.closureTarget ?? null,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function isClosureReason(value) {
|
|
72
|
+
return typeof value === "string" && CLOSURE_REASONS.includes(value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compute closure_required_at given a claim time and a tier.
|
|
76
|
+
* Tier policies are intentionally simple in Phase A; the structure exists so
|
|
77
|
+
* Phase B/C can swap in operator-tunable SLAs without a contract change.
|
|
78
|
+
*/
|
|
79
|
+
const TIER_SLA_SECONDS = {
|
|
80
|
+
fast: 30 * 60,
|
|
81
|
+
routine: 4 * 60 * 60,
|
|
82
|
+
deep: 24 * 60 * 60,
|
|
83
|
+
critical: 15 * 60,
|
|
84
|
+
};
|
|
85
|
+
export function computeClosureRequiredAt(claimedAt, tier) {
|
|
86
|
+
if (!tier)
|
|
87
|
+
return null;
|
|
88
|
+
const slaSeconds = TIER_SLA_SECONDS[tier];
|
|
89
|
+
if (slaSeconds === undefined)
|
|
90
|
+
return null;
|
|
91
|
+
const claimed = new Date(claimedAt).getTime();
|
|
92
|
+
return new Date(claimed + slaSeconds * 1000).toISOString();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=hot-potato-enforcer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hot-potato-enforcer.js","sourceRoot":"","sources":["../../src/domain/hot-potato-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe;IACf,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,cAAc;IACd,YAAY;CACJ,CAAC;AAyBX;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB;IACjD,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAyB;YAClE,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;SACzC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,qDAAqD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1F,YAAY,EAAE,eAAe;SAC9B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,kBAAkB,GAAG,CAAC,aAAa,gCAAgC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxG,YAAY,EAAE,eAAe;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,aAAa,KAAK,eAAe;WACvD,GAAG,CAAC,aAAa,KAAK,YAAY;WAClC,GAAG,CAAC,aAAa,KAAK,YAAY,CAAC;IAExC,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,kBAAkB,GAAG,CAAC,aAAa,0BAA0B;SACvE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,MAAM,gBAAgB,GAA2B;IAC/C,IAAI,EAAE,EAAE,GAAG,EAAE;IACb,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;IACpB,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IAClB,QAAQ,EAAE,EAAE,GAAG,EAAE;CAClB,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,SAAiB,EAAE,IAAmB;IAC7E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { EventBus } from "./event-bus.js";
|
|
3
|
+
import { QueueRepository } from "./queue-repository.js";
|
|
4
|
+
export declare const INBOX_STATES: readonly ["pending", "absorbed", "denied"];
|
|
5
|
+
export type InboxState = (typeof INBOX_STATES)[number];
|
|
6
|
+
export interface InboxEntry {
|
|
7
|
+
inboxId: string;
|
|
8
|
+
destinationSession: string;
|
|
9
|
+
senderSession: string;
|
|
10
|
+
body: string;
|
|
11
|
+
tags: string[] | null;
|
|
12
|
+
urgency: string;
|
|
13
|
+
tsDropped: string;
|
|
14
|
+
state: InboxState;
|
|
15
|
+
absorbedAt: string | null;
|
|
16
|
+
absorbedQitemId: string | null;
|
|
17
|
+
deniedAt: string | null;
|
|
18
|
+
deniedReason: string | null;
|
|
19
|
+
auditPointer: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface InboxDropInput {
|
|
22
|
+
inboxId?: string;
|
|
23
|
+
destinationSession: string;
|
|
24
|
+
senderSession: string;
|
|
25
|
+
body: string;
|
|
26
|
+
tags?: string[];
|
|
27
|
+
urgency?: string;
|
|
28
|
+
auditPointer?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare class InboxHandlerError extends Error {
|
|
31
|
+
readonly code: string;
|
|
32
|
+
constructor(code: string, message: string);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Inbox mailbox handler. Authenticated drop-and-go path.
|
|
36
|
+
* Receiver chooses absorb (promote to queue_item) or deny (record reason).
|
|
37
|
+
*
|
|
38
|
+
* `authenticate` is the contract surface that lets routes plug in identity
|
|
39
|
+
* verification. Default is permissive (accept any sender_session); routes
|
|
40
|
+
* SHOULD verify against the calling principal.
|
|
41
|
+
*/
|
|
42
|
+
export declare class InboxHandler {
|
|
43
|
+
readonly db: Database.Database;
|
|
44
|
+
private readonly eventBus;
|
|
45
|
+
private readonly queueRepo;
|
|
46
|
+
private readonly authenticate;
|
|
47
|
+
constructor(db: Database.Database, eventBus: EventBus, queueRepo: QueueRepository, opts?: {
|
|
48
|
+
authenticate?: (sender: string, claimed: string) => boolean;
|
|
49
|
+
});
|
|
50
|
+
drop(input: InboxDropInput, authenticatedSender?: string): InboxEntry;
|
|
51
|
+
/**
|
|
52
|
+
* Receiver absorbs a pending inbox entry into their main queue.
|
|
53
|
+
* Idempotent on inbox_id: if already absorbed, returns the existing
|
|
54
|
+
* `absorbed_qitem_id` rather than creating a duplicate.
|
|
55
|
+
*/
|
|
56
|
+
absorb(inboxId: string, receiverSession: string): Promise<{
|
|
57
|
+
entry: InboxEntry;
|
|
58
|
+
qitemId: string;
|
|
59
|
+
}>;
|
|
60
|
+
deny(inboxId: string, receiverSession: string, reason: string): InboxEntry;
|
|
61
|
+
getById(inboxId: string): InboxEntry | null;
|
|
62
|
+
listPending(destinationSession: string): InboxEntry[];
|
|
63
|
+
listForDestination(destinationSession: string, limit?: number): InboxEntry[];
|
|
64
|
+
private getByIdRaw;
|
|
65
|
+
private getByIdOrThrow;
|
|
66
|
+
private rowToEntry;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=inbox-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-handler.d.ts","sourceRoot":"","sources":["../../src/domain/inbox-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,eAAO,MAAM,YAAY,4CAA6C,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAkBD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAQD;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+C;gBAG1E,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,eAAe,EAC1B,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE;IAQxE,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,UAAU;IAoCrE;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA2DvG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU;IA2C1E,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAK3C,WAAW,CAAC,kBAAkB,EAAE,MAAM,GAAG,UAAU,EAAE;IAWrD,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,UAAU,EAAE;IASzE,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,UAAU;CAiBnB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
export const INBOX_STATES = ["pending", "absorbed", "denied"];
|
|
2
|
+
export class InboxHandlerError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(code, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function newInboxId() {
|
|
10
|
+
const ts = new Date().toISOString().replace(/[-:T.Z]/g, "").slice(0, 14);
|
|
11
|
+
const hex = Math.floor(Math.random() * 0xffffffff).toString(16).padStart(8, "0");
|
|
12
|
+
return `inbox-${ts}-${hex}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Inbox mailbox handler. Authenticated drop-and-go path.
|
|
16
|
+
* Receiver chooses absorb (promote to queue_item) or deny (record reason).
|
|
17
|
+
*
|
|
18
|
+
* `authenticate` is the contract surface that lets routes plug in identity
|
|
19
|
+
* verification. Default is permissive (accept any sender_session); routes
|
|
20
|
+
* SHOULD verify against the calling principal.
|
|
21
|
+
*/
|
|
22
|
+
export class InboxHandler {
|
|
23
|
+
db;
|
|
24
|
+
eventBus;
|
|
25
|
+
queueRepo;
|
|
26
|
+
authenticate;
|
|
27
|
+
constructor(db, eventBus, queueRepo, opts) {
|
|
28
|
+
this.db = db;
|
|
29
|
+
this.eventBus = eventBus;
|
|
30
|
+
this.queueRepo = queueRepo;
|
|
31
|
+
this.authenticate = opts?.authenticate ?? (() => true);
|
|
32
|
+
}
|
|
33
|
+
drop(input, authenticatedSender) {
|
|
34
|
+
if (authenticatedSender !== undefined && !this.authenticate(authenticatedSender, input.senderSession)) {
|
|
35
|
+
throw new InboxHandlerError("auth_failed", `authenticated principal ${authenticatedSender} cannot send as ${input.senderSession}`);
|
|
36
|
+
}
|
|
37
|
+
const id = input.inboxId ?? newInboxId();
|
|
38
|
+
const existing = this.getByIdRaw(id);
|
|
39
|
+
if (existing)
|
|
40
|
+
return this.rowToEntry(existing);
|
|
41
|
+
const ts = new Date().toISOString();
|
|
42
|
+
const tags = input.tags ? JSON.stringify(input.tags) : null;
|
|
43
|
+
const urgency = input.urgency ?? "routine";
|
|
44
|
+
this.db
|
|
45
|
+
.prepare(`INSERT INTO inbox_entries (
|
|
46
|
+
inbox_id, destination_session, sender_session, body, tags, urgency, ts_dropped, audit_pointer
|
|
47
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
48
|
+
.run(id, input.destinationSession, input.senderSession, input.body, tags, urgency, ts, input.auditPointer ?? null);
|
|
49
|
+
return this.getByIdOrThrow(id);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Receiver absorbs a pending inbox entry into their main queue.
|
|
53
|
+
* Idempotent on inbox_id: if already absorbed, returns the existing
|
|
54
|
+
* `absorbed_qitem_id` rather than creating a duplicate.
|
|
55
|
+
*/
|
|
56
|
+
async absorb(inboxId, receiverSession) {
|
|
57
|
+
const entry = this.getById(inboxId);
|
|
58
|
+
if (!entry) {
|
|
59
|
+
throw new InboxHandlerError("inbox_not_found", `inbox ${inboxId} not found`);
|
|
60
|
+
}
|
|
61
|
+
if (entry.destinationSession !== receiverSession) {
|
|
62
|
+
throw new InboxHandlerError("absorb_destination_mismatch", `inbox ${inboxId} is destined for ${entry.destinationSession}, not ${receiverSession}`);
|
|
63
|
+
}
|
|
64
|
+
if (entry.state === "absorbed") {
|
|
65
|
+
return { entry, qitemId: entry.absorbedQitemId };
|
|
66
|
+
}
|
|
67
|
+
if (entry.state === "denied") {
|
|
68
|
+
throw new InboxHandlerError("inbox_already_denied", `inbox ${inboxId} was denied; cannot absorb`);
|
|
69
|
+
}
|
|
70
|
+
// Inbox-absorb suppresses the default queue create-time nudge: the inbox
|
|
71
|
+
// surface already had its own delivery (the original drop), so a second
|
|
72
|
+
// nudge on absorb is duplicative. The destination knows it absorbed.
|
|
73
|
+
const qitem = await this.queueRepo.create({
|
|
74
|
+
sourceSession: entry.senderSession,
|
|
75
|
+
destinationSession: entry.destinationSession,
|
|
76
|
+
body: entry.body,
|
|
77
|
+
tags: entry.tags ?? undefined,
|
|
78
|
+
priority: entry.urgency === "critical" ? "critical" : entry.urgency === "urgent" ? "urgent" : "routine",
|
|
79
|
+
nudge: false,
|
|
80
|
+
});
|
|
81
|
+
const ts = new Date().toISOString();
|
|
82
|
+
const txn = this.db.transaction(() => {
|
|
83
|
+
this.db
|
|
84
|
+
.prepare(`UPDATE inbox_entries
|
|
85
|
+
SET state = 'absorbed', absorbed_at = ?, absorbed_qitem_id = ?
|
|
86
|
+
WHERE inbox_id = ?`)
|
|
87
|
+
.run(ts, qitem.qitemId, inboxId);
|
|
88
|
+
return this.eventBus.persistWithinTransaction({
|
|
89
|
+
type: "inbox.absorbed",
|
|
90
|
+
inboxId,
|
|
91
|
+
destinationSession: entry.destinationSession,
|
|
92
|
+
senderSession: entry.senderSession,
|
|
93
|
+
promotedQitemId: qitem.qitemId,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
const persistedEvent = txn();
|
|
97
|
+
this.eventBus.notifySubscribers(persistedEvent);
|
|
98
|
+
return { entry: this.getByIdOrThrow(inboxId), qitemId: qitem.qitemId };
|
|
99
|
+
}
|
|
100
|
+
deny(inboxId, receiverSession, reason) {
|
|
101
|
+
const entry = this.getById(inboxId);
|
|
102
|
+
if (!entry) {
|
|
103
|
+
throw new InboxHandlerError("inbox_not_found", `inbox ${inboxId} not found`);
|
|
104
|
+
}
|
|
105
|
+
if (entry.destinationSession !== receiverSession) {
|
|
106
|
+
throw new InboxHandlerError("deny_destination_mismatch", `inbox ${inboxId} is destined for ${entry.destinationSession}, not ${receiverSession}`);
|
|
107
|
+
}
|
|
108
|
+
if (entry.state !== "pending") {
|
|
109
|
+
throw new InboxHandlerError("inbox_not_pending", `inbox ${inboxId} is in state ${entry.state}; only pending entries can be denied`);
|
|
110
|
+
}
|
|
111
|
+
const ts = new Date().toISOString();
|
|
112
|
+
const txn = this.db.transaction(() => {
|
|
113
|
+
this.db
|
|
114
|
+
.prepare(`UPDATE inbox_entries
|
|
115
|
+
SET state = 'denied', denied_at = ?, denied_reason = ?
|
|
116
|
+
WHERE inbox_id = ?`)
|
|
117
|
+
.run(ts, reason, inboxId);
|
|
118
|
+
return this.eventBus.persistWithinTransaction({
|
|
119
|
+
type: "inbox.denied",
|
|
120
|
+
inboxId,
|
|
121
|
+
destinationSession: entry.destinationSession,
|
|
122
|
+
senderSession: entry.senderSession,
|
|
123
|
+
reason,
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
const persistedEvent = txn();
|
|
127
|
+
this.eventBus.notifySubscribers(persistedEvent);
|
|
128
|
+
return this.getByIdOrThrow(inboxId);
|
|
129
|
+
}
|
|
130
|
+
getById(inboxId) {
|
|
131
|
+
const row = this.getByIdRaw(inboxId);
|
|
132
|
+
return row ? this.rowToEntry(row) : null;
|
|
133
|
+
}
|
|
134
|
+
listPending(destinationSession) {
|
|
135
|
+
const rows = this.db
|
|
136
|
+
.prepare(`SELECT * FROM inbox_entries
|
|
137
|
+
WHERE destination_session = ? AND state = 'pending'
|
|
138
|
+
ORDER BY ts_dropped ASC`)
|
|
139
|
+
.all(destinationSession);
|
|
140
|
+
return rows.map((r) => this.rowToEntry(r));
|
|
141
|
+
}
|
|
142
|
+
listForDestination(destinationSession, limit = 100) {
|
|
143
|
+
const rows = this.db
|
|
144
|
+
.prepare(`SELECT * FROM inbox_entries WHERE destination_session = ? ORDER BY ts_dropped DESC, rowid DESC LIMIT ?`)
|
|
145
|
+
.all(destinationSession, limit);
|
|
146
|
+
return rows.map((r) => this.rowToEntry(r));
|
|
147
|
+
}
|
|
148
|
+
getByIdRaw(inboxId) {
|
|
149
|
+
return this.db
|
|
150
|
+
.prepare("SELECT * FROM inbox_entries WHERE inbox_id = ?")
|
|
151
|
+
.get(inboxId);
|
|
152
|
+
}
|
|
153
|
+
getByIdOrThrow(inboxId) {
|
|
154
|
+
const entry = this.getById(inboxId);
|
|
155
|
+
if (!entry)
|
|
156
|
+
throw new InboxHandlerError("inbox_not_found", `inbox ${inboxId} not found after write`);
|
|
157
|
+
return entry;
|
|
158
|
+
}
|
|
159
|
+
rowToEntry(row) {
|
|
160
|
+
return {
|
|
161
|
+
inboxId: row.inbox_id,
|
|
162
|
+
destinationSession: row.destination_session,
|
|
163
|
+
senderSession: row.sender_session,
|
|
164
|
+
body: row.body,
|
|
165
|
+
tags: row.tags ? JSON.parse(row.tags) : null,
|
|
166
|
+
urgency: row.urgency,
|
|
167
|
+
tsDropped: row.ts_dropped,
|
|
168
|
+
state: row.state,
|
|
169
|
+
absorbedAt: row.absorbed_at,
|
|
170
|
+
absorbedQitemId: row.absorbed_qitem_id,
|
|
171
|
+
deniedAt: row.denied_at,
|
|
172
|
+
deniedReason: row.denied_reason,
|
|
173
|
+
auditPointer: row.audit_pointer,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=inbox-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-handler.js","sourceRoot":"","sources":["../../src/domain/inbox-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type NativeResumeProbeStatus = "resumed" | "failed" | "inconclusive";
|
|
1
|
+
export type NativeResumeProbeStatus = "resumed" | "failed" | "inconclusive" | "attention_required";
|
|
2
2
|
export interface NativeResumeProbeInput {
|
|
3
3
|
runtime: string | null;
|
|
4
4
|
paneCommand: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-resume-probe.d.ts","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native-resume-probe.d.ts","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAEnG,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAID,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,MAAM,GAAG,IAAI,CAUf;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,CA0IzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAItE"}
|
|
@@ -24,6 +24,13 @@ export function assessNativeResumeProbe(input) {
|
|
|
24
24
|
detail: "Claude reported that the requested session no longer exists.",
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
+
if (looksLikeClaudeResumeSelectionPrompt(paneContent)) {
|
|
28
|
+
return {
|
|
29
|
+
status: "attention_required",
|
|
30
|
+
code: "claude_resume_selection_prompt",
|
|
31
|
+
detail: "Claude is at a resume-selection prompt; an operator must choose the conversation to continue.",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
27
34
|
if (looksLikeClaudeTrustPrompt(paneContent)) {
|
|
28
35
|
return {
|
|
29
36
|
status: "inconclusive",
|
|
@@ -80,6 +87,13 @@ export function assessNativeResumeProbe(input) {
|
|
|
80
87
|
detail: "Codex reported that the requested saved session does not exist.",
|
|
81
88
|
};
|
|
82
89
|
}
|
|
90
|
+
if (looksLikeCodexAuthRefusal(paneContent)) {
|
|
91
|
+
return {
|
|
92
|
+
status: "attention_required",
|
|
93
|
+
code: "codex_auth_refusal",
|
|
94
|
+
detail: "Codex could not refresh the stored access token; an operator must sign in again before the session can resume.",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
83
97
|
if (looksLikeCodexTrustPrompt(paneContent)) {
|
|
84
98
|
return {
|
|
85
99
|
status: "inconclusive",
|
|
@@ -87,6 +101,13 @@ export function assessNativeResumeProbe(input) {
|
|
|
87
101
|
detail: "Codex is waiting for workspace trust approval before the session can become interactive.",
|
|
88
102
|
};
|
|
89
103
|
}
|
|
104
|
+
if (looksLikeCodexModelSelectionPrompt(paneContent)) {
|
|
105
|
+
return {
|
|
106
|
+
status: "inconclusive",
|
|
107
|
+
code: "model_selection_gate",
|
|
108
|
+
detail: "Codex is waiting for model selection before the session can become interactive.",
|
|
109
|
+
};
|
|
110
|
+
}
|
|
90
111
|
if (looksLikeCodexTui(paneContent)) {
|
|
91
112
|
return {
|
|
92
113
|
status: "resumed",
|
|
@@ -143,6 +164,27 @@ function looksLikeClaudeTrustPrompt(paneContent) {
|
|
|
143
164
|
return paneContent.includes("Accessing workspace:")
|
|
144
165
|
&& paneContent.includes("Yes, I trust this folder");
|
|
145
166
|
}
|
|
167
|
+
// Claude's resume-selection prompt appears when `claude --resume` finds multiple
|
|
168
|
+
// candidate conversations (or after a reboot when the conversation index is
|
|
169
|
+
// rebuilt). The prompt lists numbered options and asks the operator to pick.
|
|
170
|
+
//
|
|
171
|
+
// L3 invariant: do NOT auto-answer. Surface as `attention_required` and let an
|
|
172
|
+
// operator choose; later reconciliation upgrades to `operator_recovered` only
|
|
173
|
+
// when the operator reaches a usable state.
|
|
174
|
+
function looksLikeClaudeResumeSelectionPrompt(paneContent) {
|
|
175
|
+
// Stable substring is the explicit "Choose ... conversation" verb plus the
|
|
176
|
+
// numbered/arrow option marker that Claude prints. Both must be present so
|
|
177
|
+
// we don't false-positive on similar TUI strings.
|
|
178
|
+
const hasChooseVerb = paneContent.includes("Choose a conversation")
|
|
179
|
+
|| paneContent.includes("Choose the conversation")
|
|
180
|
+
|| paneContent.includes("Select a conversation");
|
|
181
|
+
if (!hasChooseVerb)
|
|
182
|
+
return false;
|
|
183
|
+
// Look for the numbered/arrow option marker in recent lines.
|
|
184
|
+
const recentLines = paneContent.split("\n").slice(-30);
|
|
185
|
+
const numberedOption = recentLines.some((line) => /^\s*(?:›\s*)?\d+\.\s+\S/.test(line));
|
|
186
|
+
return numberedOption;
|
|
187
|
+
}
|
|
146
188
|
function looksLikeClaudeLoginPrompt(paneContent) {
|
|
147
189
|
return paneContent.includes("Not logged in")
|
|
148
190
|
&& paneContent.includes("Run /login");
|
|
@@ -161,8 +203,33 @@ function looksLikeCodexTui(paneContent) {
|
|
|
161
203
|
const hasModelFooter = /(^|\n)\s{2,}gpt-[^\n]+ · [^\n]+(?:\n|$)/.test(recentLines);
|
|
162
204
|
return hasPromptLine && hasModelFooter;
|
|
163
205
|
}
|
|
206
|
+
// Codex prints these messages when its stored OAuth access token can no
|
|
207
|
+
// longer be refreshed — operator logged out elsewhere, account changed,
|
|
208
|
+
// device key revoked, etc. Operator recovers via `codex login`. Both
|
|
209
|
+
// anchors required: the access-token phrase distinguishes from generic
|
|
210
|
+
// errors; the operator-instruction phrase distinguishes from internal
|
|
211
|
+
// debug logs that may include the access-token phrase incidentally.
|
|
212
|
+
//
|
|
213
|
+
// Source verified at codex-cli 0.125.0 binary at
|
|
214
|
+
// /opt/homebrew/Caskroom/codex/0.125.0/codex-aarch64-apple-darwin:
|
|
215
|
+
// "Your access token could not be refreshed because you have since
|
|
216
|
+
// logged out or signed in to another account. Please sign in again."
|
|
217
|
+
// "Your access token could not be refreshed. Please log out and sign
|
|
218
|
+
// in again."
|
|
219
|
+
function looksLikeCodexAuthRefusal(paneContent) {
|
|
220
|
+
if (!paneContent.includes("access token could not be refreshed"))
|
|
221
|
+
return false;
|
|
222
|
+
return (paneContent.includes("Please sign in again")
|
|
223
|
+
|| paneContent.includes("Please log out and sign in again"));
|
|
224
|
+
}
|
|
164
225
|
function looksLikeCodexTrustPrompt(paneContent) {
|
|
165
226
|
return paneContent.includes("Do you trust the contents of this directory?")
|
|
166
227
|
&& paneContent.includes("Yes, continue");
|
|
167
228
|
}
|
|
229
|
+
function looksLikeCodexModelSelectionPrompt(paneContent) {
|
|
230
|
+
const recentLines = paneContent.split("\n").slice(-20);
|
|
231
|
+
const numberedModelOptions = recentLines.filter((line) => (/^\s*(?:›\s*)?\d+\.\s+/.test(line)
|
|
232
|
+
&& /\bgpt-[\w.-]+\b/i.test(line)));
|
|
233
|
+
return numberedModelOptions.length >= 2;
|
|
234
|
+
}
|
|
168
235
|
//# sourceMappingURL=native-resume-probe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-resume-probe.js","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"native-resume-probe.js","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import type Database from "better-sqlite3";
|
|
2
|
-
import type { NodeInventoryEntry, NodeDetailEntry } from "./types.js";
|
|
2
|
+
import type { NodeInventoryEntry, NodeDetailEntry, NodeRestoreOutcome, NodeLifecycleState, Snapshot } from "./types.js";
|
|
3
3
|
import type { RuntimeAdapter } from "./runtime-adapter.js";
|
|
4
4
|
import type { ContextUsageStore } from "./context-usage-store.js";
|
|
5
|
+
import type { AgentActivityStore } from "./agent-activity-store.js";
|
|
6
|
+
import type { TmuxAdapter } from "../adapters/tmux.js";
|
|
7
|
+
/**
|
|
8
|
+
* Derives per-node lifecycle state from session/restore truth plus the rig's latest
|
|
9
|
+
* usable snapshot.
|
|
10
|
+
*
|
|
11
|
+
* Priorities (post-L2):
|
|
12
|
+
* attention_required — restoreOutcome=failed AND tmux session is alive
|
|
13
|
+
* (v0 proxy for the Claude resume-prompt case; revisited in L3).
|
|
14
|
+
* running — sessionStatus=running.
|
|
15
|
+
* recoverable — non-running session AND the latest usable snapshot has a
|
|
16
|
+
* non-null resume token for THIS node.
|
|
17
|
+
* detached — anything else (no session, exited, detached without resume token).
|
|
18
|
+
*
|
|
19
|
+
* Permission/IO failures upstream (L1 fail-closed) leave sessionStatus unchanged, so
|
|
20
|
+
* the projection stays honest without misclassifying ambiguous probe failures.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deriveNodeLifecycleState(input: {
|
|
23
|
+
sessionStatus: string | null;
|
|
24
|
+
restoreOutcome: NodeRestoreOutcome;
|
|
25
|
+
nodeId: string;
|
|
26
|
+
usableSnapshot: Snapshot | null;
|
|
27
|
+
}): NodeLifecycleState;
|
|
5
28
|
/**
|
|
6
29
|
* Get the canonical node inventory for a rig.
|
|
7
30
|
* Single source of truth consumed by CLI, UI, and MCP.
|
|
@@ -30,4 +53,9 @@ export declare function getNodeInventoryWithContext(db: Database.Database, rigId
|
|
|
30
53
|
* Context-aware wrapper: returns node detail with context usage attached.
|
|
31
54
|
*/
|
|
32
55
|
export declare function getNodeDetailWithContext(db: Database.Database, rigId: string, logicalId: string, contextUsageStore: ContextUsageStore, opts?: Parameters<typeof getNodeDetail>[3]): NodeDetailEntry | null;
|
|
56
|
+
export declare function attachAgentActivity(entries: NodeInventoryEntry[], deps: {
|
|
57
|
+
tmuxAdapter: TmuxAdapter;
|
|
58
|
+
activityStore?: AgentActivityStore;
|
|
59
|
+
now?: Date;
|
|
60
|
+
}): Promise<NodeInventoryEntry[]>;
|
|
33
61
|
//# sourceMappingURL=node-inventory.d.ts.map
|