@openrig/cli 0.1.11 → 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 +192 -60
- 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 +15 -2
- 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 +11 -6
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +322 -34
- 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/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +44 -15
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +12 -7
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +51 -3
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- 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 +89 -4
- 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 +208 -31
- 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 +50 -2
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +476 -24
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +27 -7
- package/daemon/dist/domain/resume-metadata-refresher.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 +63 -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 +30 -1
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +14 -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 +27 -3
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +125 -40
- 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 +76 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +323 -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 +41 -5
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/snapshots.js +66 -17
- 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/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/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +19 -8
- package/dist/commands/doctor.js.map +1 -1
- 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/import.d.ts.map +1 -1
- package/dist/commands/import.js +2 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/preflight.js +1 -1
- package/dist/commands/preflight.js.map +1 -1
- 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 +69 -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.d.ts.map +1 -1
- package/dist/commands/setup.js +20 -8
- 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 +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +65 -4
- 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/dist/system-preflight.d.ts.map +1 -1
- package/dist/system-preflight.js +16 -5
- package/dist/system-preflight.js.map +1 -1
- package/dist/tmux-health.d.ts +16 -0
- package/dist/tmux-health.d.ts.map +1 -0
- package/dist/tmux-health.js +105 -0
- package/dist/tmux-health.js.map +1 -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-lEO-zBxz.js → index-GNYaWmBj.js} +9 -9
- package/ui/dist/index.html +2 -2
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// omitted-records.ts — classifies a parsed source record into one of the
|
|
2
|
+
// 4 omitted-class enums (per M1 contract § 5) or accepts it as a kept
|
|
3
|
+
// user-visible message.
|
|
4
|
+
//
|
|
5
|
+
// v0 generator excludes the following record classes from
|
|
6
|
+
// transcript-latest.md and transcript.md:
|
|
7
|
+
//
|
|
8
|
+
// - reasoning_records: internal reasoning records that the runtime emitted
|
|
9
|
+
// but were not user-visible messages.
|
|
10
|
+
// - raw_tool_outputs: full raw tool execution output (often verbose; may
|
|
11
|
+
// contain transient state).
|
|
12
|
+
// - function_call_output: function-call result records that are not
|
|
13
|
+
// user-visible.
|
|
14
|
+
// - redacted_secrets: applied to any matched credential patterns per the
|
|
15
|
+
// redaction policy. (This class counts records whose content matched
|
|
16
|
+
// a secret pattern AND was therefore redacted.)
|
|
17
|
+
//
|
|
18
|
+
// `omitted_classes` in the summary enumerates the classes ACTUALLY
|
|
19
|
+
// excluded for THIS packet (not all available classes); the validator
|
|
20
|
+
// checks each name is one of the 4 enum values.
|
|
21
|
+
import { emptyOmittedCounts } from "./types.js";
|
|
22
|
+
import { hasSecretPattern } from "./redaction.js";
|
|
23
|
+
/**
|
|
24
|
+
* Classify a Codex JSONL record (the parsed JSON object) into kept /
|
|
25
|
+
* omitted. Caller is responsible for passing only `response_item`-class
|
|
26
|
+
* records; session_meta and compacted are handled separately by the
|
|
27
|
+
* Codex parser.
|
|
28
|
+
*
|
|
29
|
+
* Codex semantics (per Velocity prior art):
|
|
30
|
+
* - response_item with payload.type === "function_call" → function_call_output
|
|
31
|
+
* - response_item with payload.type === "custom_tool_call" → raw_tool_outputs
|
|
32
|
+
* - response_item with payload.type === "reasoning" → reasoning_records
|
|
33
|
+
* - response_item with payload.type === "message" + role in {developer,user,assistant}
|
|
34
|
+
* → kept (after secret-pattern check)
|
|
35
|
+
* - everything else → reasoning_records (catch-all for non-message non-tool
|
|
36
|
+
* payload types)
|
|
37
|
+
*/
|
|
38
|
+
export function classifyCodexRecord(record) {
|
|
39
|
+
const payloadType = typeof record.payload?.type === "string" ? record.payload.type : "";
|
|
40
|
+
switch (payloadType) {
|
|
41
|
+
case "function_call":
|
|
42
|
+
return { kind: "omitted", reason: "function_call_output" };
|
|
43
|
+
case "custom_tool_call":
|
|
44
|
+
return { kind: "omitted", reason: "raw_tool_outputs" };
|
|
45
|
+
case "reasoning":
|
|
46
|
+
return { kind: "omitted", reason: "reasoning_records" };
|
|
47
|
+
case "message": {
|
|
48
|
+
const role = typeof record.payload?.role === "string" ? record.payload.role : "";
|
|
49
|
+
if (role !== "developer" && role !== "user" && role !== "assistant") {
|
|
50
|
+
return { kind: "omitted", reason: "reasoning_records" };
|
|
51
|
+
}
|
|
52
|
+
return { kind: "kept" };
|
|
53
|
+
}
|
|
54
|
+
default:
|
|
55
|
+
return { kind: "omitted", reason: "reasoning_records" };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Classify a Claude transcript record. Claude shape carries the role
|
|
60
|
+
* directly at `record.type` (user / assistant / system / attachment /
|
|
61
|
+
* summary etc). Per the M2b dispatch's "emit the same structured
|
|
62
|
+
* representation as the Codex parser" requirement, the omitted-class
|
|
63
|
+
* mapping mirrors Codex.
|
|
64
|
+
*/
|
|
65
|
+
export function classifyClaudeRecord(record) {
|
|
66
|
+
const type = typeof record.type === "string" ? record.type : "";
|
|
67
|
+
switch (type) {
|
|
68
|
+
case "user":
|
|
69
|
+
case "assistant":
|
|
70
|
+
return { kind: "kept" };
|
|
71
|
+
case "attachment":
|
|
72
|
+
// Attachments are tool-result-class records (file content the user
|
|
73
|
+
// attached or tool output). Map to raw_tool_outputs.
|
|
74
|
+
return { kind: "omitted", reason: "raw_tool_outputs" };
|
|
75
|
+
case "summary":
|
|
76
|
+
// System/summary records are non-user-visible meta; map to
|
|
77
|
+
// reasoning_records.
|
|
78
|
+
return { kind: "omitted", reason: "reasoning_records" };
|
|
79
|
+
default:
|
|
80
|
+
// Everything else (sessionId-only, agentInfo, permissionMode meta,
|
|
81
|
+
// etc.) is metadata, not a user-visible message.
|
|
82
|
+
return { kind: "omitted", reason: "reasoning_records" };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** State holder for accumulating omitted-class counts during parsing. */
|
|
86
|
+
export class OmittedCounter {
|
|
87
|
+
counts = emptyOmittedCounts();
|
|
88
|
+
recordOmission(reason) {
|
|
89
|
+
this.counts[reason] += 1;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Mark that a kept message had secret content (was redacted). Increments
|
|
93
|
+
* `redacted_secrets` per occurrence. Caller checks `hasSecretPattern`
|
|
94
|
+
* BEFORE redaction to decide whether to record this.
|
|
95
|
+
*/
|
|
96
|
+
recordRedaction() {
|
|
97
|
+
this.counts.redacted_secrets += 1;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns the list of omitted classes that have at least one record.
|
|
101
|
+
* Used to populate `summary.omitted_classes` per contract § 5.
|
|
102
|
+
* Order: stable (the enum order from the type definition).
|
|
103
|
+
*/
|
|
104
|
+
activeClasses() {
|
|
105
|
+
const order = [
|
|
106
|
+
"reasoning_records",
|
|
107
|
+
"raw_tool_outputs",
|
|
108
|
+
"function_call_output",
|
|
109
|
+
"redacted_secrets",
|
|
110
|
+
];
|
|
111
|
+
return order.filter((cls) => this.counts[cls] > 0);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Re-export for convenience. */
|
|
115
|
+
export { hasSecretPattern };
|
|
116
|
+
//# sourceMappingURL=omitted-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omitted-records.js","sourceRoot":"","sources":["../../src/restore-packet/omitted-records.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { StructuredTranscript, SourceRuntime } from "./types.js";
|
|
2
|
+
export interface WritePacketOptions {
|
|
3
|
+
/** Absolute path of the target packet directory. MUST NOT exist. */
|
|
4
|
+
targetDir: string;
|
|
5
|
+
/** Parsed source structured representation. */
|
|
6
|
+
structured: StructuredTranscript;
|
|
7
|
+
/** Runtime kind of the source seat. */
|
|
8
|
+
sourceRuntime: SourceRuntime;
|
|
9
|
+
/** Target rig name (operator-supplied). */
|
|
10
|
+
targetRig: string;
|
|
11
|
+
/** Target runtime kind (operator-supplied). */
|
|
12
|
+
targetRuntime: SourceRuntime;
|
|
13
|
+
/** Target workspace root (absolute path). */
|
|
14
|
+
targetWorkspaceRoot: string;
|
|
15
|
+
/** Default target repo (absolute path or null). */
|
|
16
|
+
defaultTargetRepo: string | null;
|
|
17
|
+
/** Path/URI to role guidance for the restored seat. */
|
|
18
|
+
rolePointer: string;
|
|
19
|
+
/** One-paragraph human-readable summary of current work. */
|
|
20
|
+
currentWorkSummary: string;
|
|
21
|
+
/** Who the restored seat hands off to next; "self" if continuing. */
|
|
22
|
+
nextOwner: string;
|
|
23
|
+
/** Caveats list (cross-runtime quirks, redaction notes, etc.). */
|
|
24
|
+
caveats: string[];
|
|
25
|
+
/** Explicit statement of restored-seat authority. */
|
|
26
|
+
authorityBoundaries: string;
|
|
27
|
+
/** Ordered source-trust ranking (subset of contract enum). */
|
|
28
|
+
sourceTrustRanking: string[];
|
|
29
|
+
/** Source session id. */
|
|
30
|
+
sourceSessionId: string;
|
|
31
|
+
/**
|
|
32
|
+
* Source rig name. Per M2c-CLI R2: passed explicitly by the CLI adapter
|
|
33
|
+
* (computed from parsed session_meta `<seat>@<rig>` split or operator
|
|
34
|
+
* --source-rig-override). The writer does NOT derive this from
|
|
35
|
+
* sourceSessionId — that hidden derivation was the M2c-CLI R1 bug.
|
|
36
|
+
*/
|
|
37
|
+
sourceRig: string;
|
|
38
|
+
/** Source cwd (absolute path). */
|
|
39
|
+
sourceCwd: string;
|
|
40
|
+
/** Generator version identifier (e.g., "rig-restore-packet@0.1.0"). */
|
|
41
|
+
generatorVersion: string;
|
|
42
|
+
/** Whether to include the full transcript.md file. */
|
|
43
|
+
includeFullTranscript: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface WritePacketResult {
|
|
46
|
+
targetDir: string;
|
|
47
|
+
files: string[];
|
|
48
|
+
summaryPath: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Write a v0 restore packet directory atomically.
|
|
52
|
+
*
|
|
53
|
+
* Atomic guarantee: if any step fails (including schema validation of
|
|
54
|
+
* restore-summary.json), the targetDir is never created and any
|
|
55
|
+
* intermediate tempdir is removed. Operators see either a complete
|
|
56
|
+
* valid packet at targetDir, or no packet at all.
|
|
57
|
+
*/
|
|
58
|
+
export declare function writePacket(opts: WritePacketOptions): Promise<WritePacketResult>;
|
|
59
|
+
//# sourceMappingURL=packet-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packet-writer.d.ts","sourceRoot":"","sources":["../../src/restore-packet/packet-writer.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAItE,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,UAAU,EAAE,oBAAoB,CAAC;IACjC,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,aAAa,EAAE,aAAa,CAAC;IAC7B,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,yBAAyB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAiJD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoFtF"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// packet-writer.ts — assembles + atomically writes a v0 restore packet
|
|
2
|
+
// directory.
|
|
3
|
+
//
|
|
4
|
+
// Per M1 contract § 1: emits 4 required files (restore-instructions.md,
|
|
5
|
+
// transcript-latest.md, touched-files.md, restore-summary.json) plus
|
|
6
|
+
// optional transcript.md (when full transcript material is available;
|
|
7
|
+
// presence in lockstep with `full_transcript` summary key).
|
|
8
|
+
//
|
|
9
|
+
// Atomic emission via tempdir-then-rename:
|
|
10
|
+
// 1. Write all files into a sibling tempdir (`<targetDir>.tmp-<rand>/`).
|
|
11
|
+
// 2. Validate the tempdir's restore-summary.json against the embedded
|
|
12
|
+
// JSON Schema (RESTORE_SUMMARY_SCHEMA from schema-validator.ts).
|
|
13
|
+
// 3. If valid: rename tempdir → targetDir (single fs.rename; atomic on
|
|
14
|
+
// same filesystem).
|
|
15
|
+
// 4. If validation fails OR any write step fails: rmSync the tempdir;
|
|
16
|
+
// propagate the error. The targetDir is NEVER created in this case.
|
|
17
|
+
//
|
|
18
|
+
// Pre-condition: targetDir MUST NOT exist (operator must supply a fresh
|
|
19
|
+
// path). Reject with explicit error otherwise.
|
|
20
|
+
import { writeFileSync, existsSync, renameSync, rmSync, mkdtempSync } from "node:fs";
|
|
21
|
+
import { dirname, basename, join } from "node:path";
|
|
22
|
+
import { validateRestoreSummary, } from "./schema-validator.js";
|
|
23
|
+
const TRANSCRIPT_BOUND = 120;
|
|
24
|
+
function transcriptMarkdownFromMessages(title, session, messages, note) {
|
|
25
|
+
const body = messages
|
|
26
|
+
.map((m, i) => {
|
|
27
|
+
const ts = m.timestamp ? ` ${m.timestamp}` : "";
|
|
28
|
+
return `## ${i + 1}. ${m.role}${ts}\n\n${m.text}\n`;
|
|
29
|
+
})
|
|
30
|
+
.join("\n");
|
|
31
|
+
return `# ${title}\n\nSource session: \`${session}\`\n\n${note}\n\n${body}`;
|
|
32
|
+
}
|
|
33
|
+
function buildTranscriptLatest(structured, sourceSessionId) {
|
|
34
|
+
const latest = structured.messages.slice(-TRANSCRIPT_BOUND);
|
|
35
|
+
return transcriptMarkdownFromMessages("Bounded Latest Transcript", sourceSessionId, latest, `This bounded transcript contains the latest ${latest.length} extracted messages for normal restore. Use transcript.md only when deeper forensic recovery is needed.`);
|
|
36
|
+
}
|
|
37
|
+
function buildTranscriptFull(structured, sourceSessionId) {
|
|
38
|
+
return transcriptMarkdownFromMessages("Full Transcript", sourceSessionId, structured.messages, "This transcript contains developer/user/assistant messages extracted from the source. Reasoning records, tool calls, and tool outputs are omitted by design (see restore-summary.json `omitted_classes`).");
|
|
39
|
+
}
|
|
40
|
+
function buildTouchedFiles(structured) {
|
|
41
|
+
const rows = structured.paths.length > 0
|
|
42
|
+
? structured.paths.map((entry) => `- \`${entry.path}\` (${entry.count})`).join("\n")
|
|
43
|
+
: "- No paths detected in extracted messages or tool arguments.";
|
|
44
|
+
return `# Touched Files And Path Inventory\n\nBest-effort path inventory from messages and tool arguments. This is a triage aid, not a complete proof of all files read or written.\n\n${rows}\n`;
|
|
45
|
+
}
|
|
46
|
+
function buildRestoreInstructions(opts) {
|
|
47
|
+
return `# Restore Instructions
|
|
48
|
+
|
|
49
|
+
You are a restored seat in \`${opts.targetRig}\`. This packet records the cross-runtime context for resuming work from \`${opts.sourceSessionId}\`.
|
|
50
|
+
|
|
51
|
+
## Identity
|
|
52
|
+
|
|
53
|
+
1. Run \`rig whoami --json\`.
|
|
54
|
+
2. Trust the current rig identity over the source-session transcript.
|
|
55
|
+
3. Current workspace root: \`${opts.targetWorkspaceRoot}\`.
|
|
56
|
+
4. Default target repo: \`${opts.defaultTargetRepo ?? "(none)"}\`.
|
|
57
|
+
5. Role guidance pointer: \`${opts.rolePointer}\`.
|
|
58
|
+
|
|
59
|
+
## Restore Steps
|
|
60
|
+
|
|
61
|
+
1. Read this file.
|
|
62
|
+
2. Read \`touched-files.md\`.
|
|
63
|
+
3. Read \`transcript-latest.md\` for bounded current context.
|
|
64
|
+
4. Use \`transcript.md\` only if the bounded transcript is insufficient.
|
|
65
|
+
5. State: "restored from packet generated by ${opts.generatorVersion}; current rig is ${opts.targetRig}; default target repo is ${opts.defaultTargetRepo ?? "none"}."
|
|
66
|
+
6. Name any caveats before resuming work.
|
|
67
|
+
7. Hand off to next owner: \`${opts.nextOwner}\` (or "self" to continue).
|
|
68
|
+
|
|
69
|
+
## Current Work
|
|
70
|
+
|
|
71
|
+
${opts.currentWorkSummary}
|
|
72
|
+
|
|
73
|
+
## Authority Boundaries
|
|
74
|
+
|
|
75
|
+
${opts.authorityBoundaries}
|
|
76
|
+
|
|
77
|
+
## Caveats
|
|
78
|
+
|
|
79
|
+
${opts.caveats.length > 0 ? opts.caveats.map((c) => `- ${c}`).join("\n") : "- (none recorded)"}
|
|
80
|
+
|
|
81
|
+
## Packet Stats
|
|
82
|
+
|
|
83
|
+
- Source runtime: \`${opts.sourceRuntime}\`
|
|
84
|
+
- Target runtime: \`${opts.targetRuntime}\`
|
|
85
|
+
- JSONL/transcript lines processed: ${opts.structured.lineCount}
|
|
86
|
+
- Extracted messages: ${opts.structured.messageCount}
|
|
87
|
+
- Compaction records: ${opts.structured.compactedCount}
|
|
88
|
+
- Source cwd: \`${opts.sourceCwd}\`
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
function buildSummary(opts) {
|
|
92
|
+
const omittedClassesActive = [];
|
|
93
|
+
for (const k of ["reasoning_records", "raw_tool_outputs", "function_call_output", "redacted_secrets"]) {
|
|
94
|
+
if (opts.structured.omittedCounts[k] > 0)
|
|
95
|
+
omittedClassesActive.push(k);
|
|
96
|
+
}
|
|
97
|
+
const messageCount = Math.min(opts.structured.messages.length, TRANSCRIPT_BOUND);
|
|
98
|
+
const summary = {
|
|
99
|
+
source_session_id: opts.sourceSessionId,
|
|
100
|
+
source_rig: opts.sourceRig,
|
|
101
|
+
source_runtime: opts.sourceRuntime,
|
|
102
|
+
source_cwd: opts.sourceCwd,
|
|
103
|
+
target_rig: opts.targetRig,
|
|
104
|
+
target_runtime: opts.targetRuntime,
|
|
105
|
+
target_workspace_root: opts.targetWorkspaceRoot,
|
|
106
|
+
default_target_repo: opts.defaultTargetRepo,
|
|
107
|
+
role_pointer: opts.rolePointer,
|
|
108
|
+
bounded_latest_transcript: {
|
|
109
|
+
path: "transcript-latest.md",
|
|
110
|
+
message_count: messageCount,
|
|
111
|
+
bound: TRANSCRIPT_BOUND,
|
|
112
|
+
},
|
|
113
|
+
touched_files: {
|
|
114
|
+
path: "touched-files.md",
|
|
115
|
+
top_paths: opts.structured.paths.slice(0, 30),
|
|
116
|
+
},
|
|
117
|
+
durable_pointers: {
|
|
118
|
+
queue_pointers: [],
|
|
119
|
+
progress_pointers: [],
|
|
120
|
+
field_note_pointers: [],
|
|
121
|
+
artifact_pointers: [],
|
|
122
|
+
},
|
|
123
|
+
current_work_summary: opts.currentWorkSummary,
|
|
124
|
+
next_owner: opts.nextOwner,
|
|
125
|
+
caveats: opts.caveats,
|
|
126
|
+
authority_boundaries: opts.authorityBoundaries,
|
|
127
|
+
omitted_classes: omittedClassesActive,
|
|
128
|
+
redaction_policy_id: "openrig-v0",
|
|
129
|
+
source_trust_ranking: opts.sourceTrustRanking,
|
|
130
|
+
generator_version: opts.generatorVersion,
|
|
131
|
+
generated_at: new Date().toISOString(),
|
|
132
|
+
};
|
|
133
|
+
if (opts.includeFullTranscript) {
|
|
134
|
+
summary.full_transcript = {
|
|
135
|
+
path: "transcript.md",
|
|
136
|
+
line_count: opts.structured.messages.length,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return summary;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Write a v0 restore packet directory atomically.
|
|
143
|
+
*
|
|
144
|
+
* Atomic guarantee: if any step fails (including schema validation of
|
|
145
|
+
* restore-summary.json), the targetDir is never created and any
|
|
146
|
+
* intermediate tempdir is removed. Operators see either a complete
|
|
147
|
+
* valid packet at targetDir, or no packet at all.
|
|
148
|
+
*/
|
|
149
|
+
export async function writePacket(opts) {
|
|
150
|
+
if (existsSync(opts.targetDir)) {
|
|
151
|
+
throw new Error(`restore-packet write: target directory already exists: ${opts.targetDir}`);
|
|
152
|
+
}
|
|
153
|
+
// Build all file contents BEFORE creating any disk state. This way if
|
|
154
|
+
// an in-memory step throws (unlikely, but defensive), no tempdir was
|
|
155
|
+
// created.
|
|
156
|
+
const summary = buildSummary(opts);
|
|
157
|
+
const validation = validateRestoreSummary(summary);
|
|
158
|
+
if (!validation.valid) {
|
|
159
|
+
const errSummary = validation.errors
|
|
160
|
+
.slice(0, 5)
|
|
161
|
+
.map((e) => `${e.field}: ${e.rule}`)
|
|
162
|
+
.join("; ");
|
|
163
|
+
throw new Error(`restore-packet write: schema validation failed before atomic rename: ${errSummary}`);
|
|
164
|
+
}
|
|
165
|
+
const restoreInstructions = buildRestoreInstructions(opts);
|
|
166
|
+
const transcriptLatest = buildTranscriptLatest(opts.structured, opts.sourceSessionId);
|
|
167
|
+
const touchedFiles = buildTouchedFiles(opts.structured);
|
|
168
|
+
const transcriptFull = opts.includeFullTranscript
|
|
169
|
+
? buildTranscriptFull(opts.structured, opts.sourceSessionId)
|
|
170
|
+
: null;
|
|
171
|
+
// Create tempdir as a sibling of targetDir using mkdtemp for race-free
|
|
172
|
+
// unique name. The dirname() must exist and be writable; we don't
|
|
173
|
+
// mkdir the parent for the operator (operator authority bedrock).
|
|
174
|
+
const parentDir = dirname(opts.targetDir);
|
|
175
|
+
const tempPrefix = `${basename(opts.targetDir)}.tmp-restore-packet-`;
|
|
176
|
+
const tempDir = mkdtempSync(join(parentDir, tempPrefix));
|
|
177
|
+
try {
|
|
178
|
+
writeFileSync(join(tempDir, "restore-instructions.md"), restoreInstructions, "utf-8");
|
|
179
|
+
writeFileSync(join(tempDir, "transcript-latest.md"), transcriptLatest, "utf-8");
|
|
180
|
+
writeFileSync(join(tempDir, "touched-files.md"), touchedFiles, "utf-8");
|
|
181
|
+
writeFileSync(join(tempDir, "restore-summary.json"), JSON.stringify(summary, null, 2), "utf-8");
|
|
182
|
+
if (transcriptFull !== null) {
|
|
183
|
+
writeFileSync(join(tempDir, "transcript.md"), transcriptFull, "utf-8");
|
|
184
|
+
}
|
|
185
|
+
// Re-validate by parsing the on-disk summary (round-trip self-check).
|
|
186
|
+
// This catches any structural divergence between buildSummary's
|
|
187
|
+
// in-memory shape and the JSON.stringify() serialization.
|
|
188
|
+
const onDisk = JSON.parse(
|
|
189
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
190
|
+
(await import("node:fs")).readFileSync(join(tempDir, "restore-summary.json"), "utf-8"));
|
|
191
|
+
const recheck = validateRestoreSummary(onDisk);
|
|
192
|
+
if (!recheck.valid) {
|
|
193
|
+
throw new Error(`restore-packet write: on-disk schema recheck failed: ${recheck.errors.slice(0, 5).map((e) => `${e.field}: ${e.rule}`).join("; ")}`);
|
|
194
|
+
}
|
|
195
|
+
// Atomic rename tempdir → targetDir. fs.rename is atomic when source
|
|
196
|
+
// and destination are on the same filesystem; we keep them sibling
|
|
197
|
+
// so this holds.
|
|
198
|
+
renameSync(tempDir, opts.targetDir);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
// Clean up tempdir on any failure; do NOT leave a partial packet.
|
|
202
|
+
try {
|
|
203
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Best-effort cleanup; original error takes precedence.
|
|
207
|
+
}
|
|
208
|
+
throw err;
|
|
209
|
+
}
|
|
210
|
+
const files = [
|
|
211
|
+
"restore-instructions.md",
|
|
212
|
+
"transcript-latest.md",
|
|
213
|
+
"touched-files.md",
|
|
214
|
+
"restore-summary.json",
|
|
215
|
+
];
|
|
216
|
+
if (transcriptFull !== null)
|
|
217
|
+
files.push("transcript.md");
|
|
218
|
+
return {
|
|
219
|
+
targetDir: opts.targetDir,
|
|
220
|
+
files,
|
|
221
|
+
summaryPath: join(opts.targetDir, "restore-summary.json"),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=packet-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packet-writer.js","sourceRoot":"","sources":["../../src/restore-packet/packet-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0 secret-pattern list. Mirrors Velocity prior art `:34-48` exactly:
|
|
3
|
+
*
|
|
4
|
+
* 1. /\bsk-[A-Za-z0-9_-]{16,}\b/g — OpenAI-style secret tokens.
|
|
5
|
+
* 2. /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g — GitHub personal/OAuth tokens.
|
|
6
|
+
* 3. /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g — GitHub fine-grained PATs.
|
|
7
|
+
* 4. /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g — generic Bearer tokens.
|
|
8
|
+
* 5. /\b[A-Za-z0-9+/]{40,}={0,2}\b/g — base64-shaped strings ≥40 chars.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SECRET_PATTERNS: readonly RegExp[];
|
|
11
|
+
/**
|
|
12
|
+
* Apply the openrig-v0 redaction policy to a string. Returns the input
|
|
13
|
+
* with each match of the secret patterns replaced by the literal
|
|
14
|
+
* string `[REDACTED]`. Pure function; no side effects.
|
|
15
|
+
*
|
|
16
|
+
* The redaction is non-destructive at the structural level — only the
|
|
17
|
+
* matched substrings are replaced. Surrounding characters are kept.
|
|
18
|
+
*/
|
|
19
|
+
export declare function redact(text: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if at least one secret pattern matches the input.
|
|
22
|
+
* Used by the omitted-records counter to track how many records had
|
|
23
|
+
* their content redacted (for the `redacted_secrets` omitted-class
|
|
24
|
+
* count in summary).
|
|
25
|
+
*
|
|
26
|
+
* Note: a SINGLE record may match multiple patterns; this returns true
|
|
27
|
+
* after the first match for efficiency.
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasSecretPattern(text: string): boolean;
|
|
30
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/restore-packet/redaction.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQtD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// redaction.ts — applies the v0 redaction policy.
|
|
2
|
+
//
|
|
3
|
+
// Per M1 contract § 4: v0 defines two named policies:
|
|
4
|
+
// - `velocity-v1`: mirrors the Velocity generator's token patterns at
|
|
5
|
+
// field-notes/2026-04-27-velocity-claude-from-codex-restore/tools/
|
|
6
|
+
// codex-jsonl-to-restore-packet.mjs:34-48 (sk-*, gh[pousr]_*,
|
|
7
|
+
// github_pat_*, Bearer *, base64 ≥40 chars).
|
|
8
|
+
// - `openrig-v0`: the productized v0 policy, identical patterns to
|
|
9
|
+
// `velocity-v1` but with the canonical name. v0 generator emits
|
|
10
|
+
// `redaction_policy_id: "openrig-v0"`.
|
|
11
|
+
//
|
|
12
|
+
// Redaction is applied to:
|
|
13
|
+
// - transcript content in transcript-latest.md and transcript.md.
|
|
14
|
+
// - body content in restore-instructions.md if it quotes transcript
|
|
15
|
+
// material.
|
|
16
|
+
// - top_paths / touched-files entries are NOT redacted (paths are not
|
|
17
|
+
// credential material).
|
|
18
|
+
//
|
|
19
|
+
// The validator does NOT scan content for residual credential patterns
|
|
20
|
+
// (per § 4 + § 8: enforcement is generator-side at write time).
|
|
21
|
+
/**
|
|
22
|
+
* v0 secret-pattern list. Mirrors Velocity prior art `:34-48` exactly:
|
|
23
|
+
*
|
|
24
|
+
* 1. /\bsk-[A-Za-z0-9_-]{16,}\b/g — OpenAI-style secret tokens.
|
|
25
|
+
* 2. /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g — GitHub personal/OAuth tokens.
|
|
26
|
+
* 3. /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g — GitHub fine-grained PATs.
|
|
27
|
+
* 4. /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g — generic Bearer tokens.
|
|
28
|
+
* 5. /\b[A-Za-z0-9+/]{40,}={0,2}\b/g — base64-shaped strings ≥40 chars.
|
|
29
|
+
*/
|
|
30
|
+
export const SECRET_PATTERNS = [
|
|
31
|
+
/\bsk-[A-Za-z0-9_-]{16,}\b/g,
|
|
32
|
+
/\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g,
|
|
33
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,
|
|
34
|
+
/\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g,
|
|
35
|
+
/\b[A-Za-z0-9+/]{40,}={0,2}\b/g,
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Apply the openrig-v0 redaction policy to a string. Returns the input
|
|
39
|
+
* with each match of the secret patterns replaced by the literal
|
|
40
|
+
* string `[REDACTED]`. Pure function; no side effects.
|
|
41
|
+
*
|
|
42
|
+
* The redaction is non-destructive at the structural level — only the
|
|
43
|
+
* matched substrings are replaced. Surrounding characters are kept.
|
|
44
|
+
*/
|
|
45
|
+
export function redact(text) {
|
|
46
|
+
let out = text;
|
|
47
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
48
|
+
out = out.replace(pattern, "[REDACTED]");
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns true if at least one secret pattern matches the input.
|
|
54
|
+
* Used by the omitted-records counter to track how many records had
|
|
55
|
+
* their content redacted (for the `redacted_secrets` omitted-class
|
|
56
|
+
* count in summary).
|
|
57
|
+
*
|
|
58
|
+
* Note: a SINGLE record may match multiple patterns; this returns true
|
|
59
|
+
* after the first match for efficiency.
|
|
60
|
+
*/
|
|
61
|
+
export function hasSecretPattern(text) {
|
|
62
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
63
|
+
// Non-global test: cannot reuse the global `g` regex without resetting
|
|
64
|
+
// lastIndex, so build a fresh non-global RegExp from source.
|
|
65
|
+
const probe = new RegExp(pattern.source);
|
|
66
|
+
if (probe.test(text))
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/restore-packet/redaction.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,sDAAsD;AACtD,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,+CAA+C;AAC/C,mEAAmE;AACnE,kEAAkE;AAClE,yCAAyC;AACzC,EAAE;AACF,2BAA2B;AAC3B,kEAAkE;AAClE,oEAAoE;AACpE,cAAc;AACd,sEAAsE;AACtE,0BAA0B;AAC1B,EAAE;AACF,uEAAuE;AACvE,gEAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,4BAA4B;IAC5B,kCAAkC;IAClC,mCAAmC;IACnC,uCAAuC;IACvC,+BAA+B;CAChC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SourceRuntime } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Detect the source runtime from a sample of JSONL lines.
|
|
4
|
+
*
|
|
5
|
+
* Returns:
|
|
6
|
+
* - "codex" — at least one line has `type: "response_item"` OR
|
|
7
|
+
* `type: "session_meta"` OR `type: "compacted"`.
|
|
8
|
+
* - "claude-code" — at least one line has `type: "user"` or
|
|
9
|
+
* `type: "assistant"` AND no Codex markers seen.
|
|
10
|
+
* - null — input is empty / non-JSONL / ambiguous (e.g., neither
|
|
11
|
+
* marker class appears).
|
|
12
|
+
*
|
|
13
|
+
* Detection is non-greedy: walks the input lines until a definitive
|
|
14
|
+
* marker is found. Bias toward Codex markers if both shape classes
|
|
15
|
+
* appear (extremely unlikely in practice; would indicate a malformed
|
|
16
|
+
* mixed source).
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectRuntime(content: string): SourceRuntime | null;
|
|
19
|
+
//# sourceMappingURL=runtime-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-detect.d.ts","sourceRoot":"","sources":["../../src/restore-packet/runtime-detect.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA6CnE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// runtime-detect.ts — auto-detect the source runtime from a JSONL/transcript
|
|
2
|
+
// shape.
|
|
3
|
+
//
|
|
4
|
+
// Per M1 contract § 3.4: source-runtime resolution for `--source-jsonl` is
|
|
5
|
+
// auto-detected from the JSONL shape (Codex JSONL has `payload.type`
|
|
6
|
+
// markers; Claude transcript has different shape). If auto-detect is
|
|
7
|
+
// ambiguous, fail with clear error and prompt for `--source-runtime`
|
|
8
|
+
// flag.
|
|
9
|
+
//
|
|
10
|
+
// Detection is by content shape, NOT file extension or filename
|
|
11
|
+
// (per dispatch's "Do NOT use file extensions or filenames as the
|
|
12
|
+
// detection key. Detect by content shape.").
|
|
13
|
+
//
|
|
14
|
+
// Codex shape: each line is JSON with `type` field; the discriminating
|
|
15
|
+
// markers are `type: "session_meta"`, `type: "response_item"`, or
|
|
16
|
+
// `type: "compacted"`. response_item records carry a `payload` object
|
|
17
|
+
// with a `type` sub-field.
|
|
18
|
+
//
|
|
19
|
+
// Claude shape: each line is JSON with `type` field; values include
|
|
20
|
+
// `user`, `assistant`, `system`, `attachment`, `summary`, etc. NO
|
|
21
|
+
// `payload` wrapper; the message content is directly under `message`
|
|
22
|
+
// or `attachment`.
|
|
23
|
+
/**
|
|
24
|
+
* Detect the source runtime from a sample of JSONL lines.
|
|
25
|
+
*
|
|
26
|
+
* Returns:
|
|
27
|
+
* - "codex" — at least one line has `type: "response_item"` OR
|
|
28
|
+
* `type: "session_meta"` OR `type: "compacted"`.
|
|
29
|
+
* - "claude-code" — at least one line has `type: "user"` or
|
|
30
|
+
* `type: "assistant"` AND no Codex markers seen.
|
|
31
|
+
* - null — input is empty / non-JSONL / ambiguous (e.g., neither
|
|
32
|
+
* marker class appears).
|
|
33
|
+
*
|
|
34
|
+
* Detection is non-greedy: walks the input lines until a definitive
|
|
35
|
+
* marker is found. Bias toward Codex markers if both shape classes
|
|
36
|
+
* appear (extremely unlikely in practice; would indicate a malformed
|
|
37
|
+
* mixed source).
|
|
38
|
+
*/
|
|
39
|
+
export function detectRuntime(content) {
|
|
40
|
+
if (typeof content !== "string" || content.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
let sawCodexMarker = false;
|
|
43
|
+
let sawClaudeMarker = false;
|
|
44
|
+
for (const rawLine of content.split("\n")) {
|
|
45
|
+
const line = rawLine.trim();
|
|
46
|
+
if (!line)
|
|
47
|
+
continue;
|
|
48
|
+
let record;
|
|
49
|
+
try {
|
|
50
|
+
record = JSON.parse(line);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Skip malformed JSON lines; they don't affect detection.
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const recordType = typeof record.type === "string" ? record.type : "";
|
|
57
|
+
// Codex discriminators: type values + payload wrapper presence.
|
|
58
|
+
if (recordType === "response_item" ||
|
|
59
|
+
recordType === "session_meta" ||
|
|
60
|
+
recordType === "compacted") {
|
|
61
|
+
sawCodexMarker = true;
|
|
62
|
+
// Early-return on the strongest Codex marker; ambiguity bias
|
|
63
|
+
// toward Codex if Claude markers also appear is intentional
|
|
64
|
+
// (Codex's response_item is structurally distinct from any
|
|
65
|
+
// Claude record; if it's present, the content is Codex JSONL).
|
|
66
|
+
return "codex";
|
|
67
|
+
}
|
|
68
|
+
// Claude discriminators: top-level type as a user/assistant marker.
|
|
69
|
+
if (recordType === "user" || recordType === "assistant") {
|
|
70
|
+
sawClaudeMarker = true;
|
|
71
|
+
// Don't early-return on Claude alone — keep looking for any
|
|
72
|
+
// Codex marker (defensive against the unlikely mixed-shape case).
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (sawCodexMarker)
|
|
76
|
+
return "codex";
|
|
77
|
+
if (sawClaudeMarker)
|
|
78
|
+
return "claude-code";
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=runtime-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-detect.js","sourceRoot":"","sources":["../../src/restore-packet/runtime-detect.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,SAAS;AACT,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,QAAQ;AACR,EAAE;AACF,gEAAgE;AAChE,kEAAkE;AAClE,6CAA6C;AAC7C,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,sEAAsE;AACtE,2BAA2B;AAC3B,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,mBAAmB;AAInB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErE,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,IAAI,MAAwD,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtE,gEAAgE;QAChE,IACE,UAAU,KAAK,eAAe;YAC9B,UAAU,KAAK,cAAc;YAC7B,UAAU,KAAK,WAAW,EAC1B,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,6DAA6D;YAC7D,4DAA4D;YAC5D,2DAA2D;YAC3D,+DAA+D;YAC/D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,oEAAoE;QACpE,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YACxD,eAAe,GAAG,IAAI,CAAC;YACvB,4DAA4D;YAC5D,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,eAAe;QAAE,OAAO,aAAa,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC"}
|