@openrig/cli 0.6.12 → 0.6.13
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/README.md +19 -12
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/README.md +9 -2
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +25 -9
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +7 -4
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +5 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +61 -16
- package/daemon/assets/skills/rigs/SKILL.md +8 -4
- package/daemon/context-packs/help/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +60 -12
- package/daemon/context-packs/reference/getting-started.md +44 -14
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +5 -5
- package/daemon/context-packs/reference/whats-new.md +90 -163
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +5 -0
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +61 -16
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/adapters/claude-code-adapter.d.ts +9 -1
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +110 -52
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +47 -6
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-resume.js +4 -1
- package/daemon/dist/adapters/pi-resume.js.map +1 -1
- package/daemon/dist/adapters/pi-runner-protocol.d.ts +9 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner-protocol.js +16 -0
- package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
- package/daemon/dist/adapters/pi-runner.d.ts +5 -2
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runner.js +72 -15
- package/daemon/dist/adapters/pi-runner.js.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js +2 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/stub-compaction.d.ts +1 -0
- package/daemon/dist/adapters/stub-compaction.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-compaction.js +2 -0
- package/daemon/dist/adapters/stub-compaction.js.map +1 -1
- package/daemon/dist/adapters/stub-refocus.d.ts +6 -0
- package/daemon/dist/adapters/stub-refocus.d.ts.map +1 -0
- package/daemon/dist/adapters/stub-refocus.js +22 -0
- package/daemon/dist/adapters/stub-refocus.js.map +1 -0
- package/daemon/dist/adapters/stub-runner.d.ts +6 -0
- package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-runner.js +18 -1
- package/daemon/dist/adapters/stub-runner.js.map +1 -1
- package/daemon/dist/adapters/stub-script.d.ts +2 -2
- package/daemon/dist/adapters/stub-script.d.ts.map +1 -1
- package/daemon/dist/adapters/stub-script.js +2 -2
- package/daemon/dist/adapters/stub-script.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +2 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/117_provider_account_readings.d.ts +3 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.d.ts.map +1 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.js +32 -0
- package/daemon/dist/db/migrations/117_provider_account_readings.js.map +1 -0
- package/daemon/dist/domain/claude-activity-hooks.d.ts +6 -0
- package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
- package/daemon/dist/domain/claude-activity-hooks.js +19 -1
- package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.d.ts +2 -0
- package/daemon/dist/domain/claude-core-plugin-env.d.ts.map +1 -1
- package/daemon/dist/domain/claude-core-plugin-env.js +6 -2
- package/daemon/dist/domain/claude-core-plugin-env.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +5 -0
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.js +48 -7
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
- package/daemon/dist/domain/claude-mcp-menu.d.ts +5 -0
- package/daemon/dist/domain/claude-mcp-menu.d.ts.map +1 -0
- package/daemon/dist/domain/claude-mcp-menu.js +25 -0
- package/daemon/dist/domain/claude-mcp-menu.js.map +1 -0
- package/daemon/dist/domain/fresh-occupant-relation.d.ts +7 -0
- package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -1
- package/daemon/dist/domain/fresh-occupant-relation.js +44 -0
- package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts +14 -2
- package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/channel-recovery.js +128 -89
- package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +5 -3
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/recovery-budget.d.ts +24 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.js +18 -0
- package/daemon/dist/domain/gateway/slack/recovery-budget.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.d.ts +104 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.js +236 -0
- package/daemon/dist/domain/gateway/slack/slack-recovery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +29 -6
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts +34 -0
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.js +67 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-recovery.d.ts +37 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.js +173 -0
- package/daemon/dist/domain/gateway/slack/thread-recovery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +8 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +6 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +4 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts +74 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.d.ts.map +1 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.js +246 -0
- package/daemon/dist/domain/model-divergence/current-model-reader.js.map +1 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +18 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/effective-model-readers.js +24 -8
- package/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +8 -1
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +40 -26
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +34 -8
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +84 -18
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/process-census.d.ts +1 -1
- package/daemon/dist/domain/process-census.d.ts.map +1 -1
- package/daemon/dist/domain/process-table.d.ts +26 -0
- package/daemon/dist/domain/process-table.d.ts.map +1 -0
- package/daemon/dist/domain/process-table.js +185 -0
- package/daemon/dist/domain/process-table.js.map +1 -0
- package/daemon/dist/domain/profile-resolver.d.ts +8 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +11 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/projection-planner.js +1 -1
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-windows.d.ts +3 -1
- package/daemon/dist/domain/provider/claude-usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-windows.js +48 -3
- package/daemon/dist/domain/provider/claude-usage-windows.js.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts +4 -1
- package/daemon/dist/domain/provider/codex-usage-reader.d.ts.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-reader.js +3 -0
- package/daemon/dist/domain/provider/codex-usage-reader.js.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts +3 -1
- package/daemon/dist/domain/provider/codex-usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/codex-usage-windows.js +1 -0
- package/daemon/dist/domain/provider/codex-usage-windows.js.map +1 -1
- package/daemon/dist/domain/provider/provider-account-readings.d.ts +42 -0
- package/daemon/dist/domain/provider/provider-account-readings.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-account-readings.js +132 -0
- package/daemon/dist/domain/provider/provider-account-readings.js.map +1 -0
- package/daemon/dist/domain/provider/provider-types.d.ts +29 -0
- package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-across-hosts.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-across-hosts.js +6 -0
- package/daemon/dist/domain/provider/usage-across-hosts.js.map +1 -1
- package/daemon/dist/domain/provider/usage-windows.d.ts +25 -0
- package/daemon/dist/domain/provider/usage-windows.d.ts.map +1 -1
- package/daemon/dist/domain/provider/usage-windows.js +100 -4
- package/daemon/dist/domain/provider/usage-windows.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +23 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +59 -1
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.js +47 -4
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +10 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +73 -10
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-guidance.d.ts +6 -0
- package/daemon/dist/domain/restore-guidance.d.ts.map +1 -1
- package/daemon/dist/domain/restore-guidance.js +21 -5
- package/daemon/dist/domain/restore-guidance.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +1 -1
- 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 +6 -29
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +3 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +6 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +4 -2
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +4 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +12 -2
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +11 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +13 -0
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +15 -1
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-cwd-preparation.d.ts +22 -0
- package/daemon/dist/domain/seat-cwd-preparation.d.ts.map +1 -0
- package/daemon/dist/domain/seat-cwd-preparation.js +107 -0
- package/daemon/dist/domain/seat-cwd-preparation.js.map +1 -0
- package/daemon/dist/domain/seat-effort.d.ts +4 -3
- package/daemon/dist/domain/seat-effort.d.ts.map +1 -1
- package/daemon/dist/domain/seat-effort.js +21 -3
- package/daemon/dist/domain/seat-effort.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +36 -2
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.js +206 -15
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.d.ts +14 -0
- package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -1
- package/daemon/dist/domain/seat-restart-in-place.js +59 -3
- package/daemon/dist/domain/seat-restart-in-place.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts +2 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +1 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts +7 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.js +9 -3
- package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
- package/daemon/dist/domain/session-name.d.ts +8 -0
- package/daemon/dist/domain/session-name.d.ts.map +1 -1
- package/daemon/dist/domain/session-name.js +12 -0
- package/daemon/dist/domain/session-name.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +78 -3
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +306 -15
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +1 -1
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +14 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/watchdog-delivery.d.ts +29 -0
- package/daemon/dist/domain/watchdog-delivery.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-delivery.js +113 -0
- package/daemon/dist/domain/watchdog-delivery.js.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +60 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +154 -28
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.js +6 -1
- package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +6 -2
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/routes/attention.d.ts.map +1 -1
- package/daemon/dist/routes/attention.js +41 -1
- package/daemon/dist/routes/attention.js.map +1 -1
- package/daemon/dist/routes/compaction.js +1 -1
- package/daemon/dist/routes/compaction.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +3 -1
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/restore-check.d.ts.map +1 -1
- package/daemon/dist/routes/restore-check.js +19 -1
- package/daemon/dist/routes/restore-check.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +15 -2
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +7 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +13 -2
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/server.d.ts +1 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +1 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +39 -113
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +84 -0
- package/daemon/docs/reference/getting-started.md +44 -14
- package/daemon/docs/reference/publishing-a-rig-bundle.md +5 -2
- package/daemon/docs/reference/refocus-channel.md +11 -1
- package/daemon/docs/reference/rig-spec.md +5 -5
- package/daemon/docs/reference/rosters.md +29 -2
- package/daemon/docs/reference/slack-app-setup.md +47 -17
- package/daemon/docs/reference/whats-new.md +90 -163
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -0
- package/daemon/specs/agents/development/qa/agent.yaml +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -0
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -0
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -0
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -0
- package/dist/build-info.js +3 -3
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +14 -0
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +3 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +8 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/grow.d.ts.map +1 -1
- package/dist/commands/grow.js +24 -7
- package/dist/commands/grow.js.map +1 -1
- package/dist/commands/provider.d.ts.map +1 -1
- package/dist/commands/provider.js +43 -7
- package/dist/commands/provider.js.map +1 -1
- package/dist/commands/ps.d.ts +2 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +12 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +20 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/roster.d.ts +2 -1
- package/dist/commands/roster.d.ts.map +1 -1
- package/dist/commands/roster.js +10 -5
- package/dist/commands/roster.js.map +1 -1
- package/dist/commands/scope.js +1 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +75 -8
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +14 -1
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +4 -3
- package/dist/commands/usage.js.map +1 -1
- package/dist/lib/model-observation.d.ts +13 -0
- package/dist/lib/model-observation.d.ts.map +1 -0
- package/dist/lib/model-observation.js +25 -0
- package/dist/lib/model-observation.js.map +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +1 -0
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
- package/tui/dist/attention/attention-model.js +6 -5
- package/tui/dist/attention/attention-model.js.map +1 -1
- package/tui/dist/attention/source-continuity.d.ts.map +1 -1
- package/tui/dist/attention/source-continuity.js +2 -0
- package/tui/dist/attention/source-continuity.js.map +1 -1
- package/tui/dist/terminals/open-window.d.ts +11 -1
- package/tui/dist/terminals/open-window.d.ts.map +1 -1
- package/tui/dist/terminals/open-window.js +47 -2
- package/tui/dist/terminals/open-window.js.map +1 -1
- package/tui/dist/usage/usage-model.d.ts +2 -0
- package/tui/dist/usage/usage-model.d.ts.map +1 -1
- package/tui/dist/usage/usage-model.js +38 -3
- package/tui/dist/usage/usage-model.js.map +1 -1
- package/ui/dist/assets/{index-Cfbtfd9G.js → index-CVgod3Pm.js} +1 -1
- package/ui/dist/index.html +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
-
import { accessSync, constants, realpathSync, statSync } from "node:fs";
|
|
2
|
+
import { accessSync, closeSync, constants, openSync, readSync, realpathSync, statSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { publicSeatEnvironment } from "./seat-launch-environment.js";
|
|
5
5
|
import { SEAT_ENV_KEYS_VAR, parseStoredSeatEnv, validateSeatEnvName } from "./seat-env.js";
|
|
@@ -8,12 +8,54 @@ import { shellQuote } from "../adapters/shell-quote.js";
|
|
|
8
8
|
import { claudeClassicRendererEnvPrefix } from "../adapters/yolo-mode.js";
|
|
9
9
|
import { parseClaudePermissionModes } from "./permission-drift.js";
|
|
10
10
|
import { validateNativePermissionSelection } from "./native-permission-selection.js";
|
|
11
|
+
/** The kernel runs a file as a script only when its first two bytes are `#!`. A managed launch's frozen executable is
|
|
12
|
+
* then not the process that ends up running, so its path can't prove the launched Claude. Nothing past those two bytes
|
|
13
|
+
* is read; an unreadable, empty or one-byte file is not a script. */
|
|
14
|
+
export function fileStartsWithShebang(file) {
|
|
15
|
+
let fd;
|
|
16
|
+
try {
|
|
17
|
+
fd = openSync(file, "r");
|
|
18
|
+
const head = Buffer.alloc(2);
|
|
19
|
+
return readSync(fd, head, 0, 2, 0) === 2 && head[0] === 0x23 && head[1] === 0x21;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
if (fd !== undefined)
|
|
26
|
+
try {
|
|
27
|
+
closeSync(fd);
|
|
28
|
+
}
|
|
29
|
+
catch { /* nothing to release */ }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
11
32
|
/** Dynamic choices use the managed launch environment, not an interactive shell's
|
|
12
33
|
* aliases or startup files. No cache and no persisted environment/credentials.
|
|
13
34
|
* The help child has only the capability environment. Launch adds the existing
|
|
14
35
|
* managed identity/auth channel by variable NAME, never secret values in text.
|
|
15
36
|
*/
|
|
16
37
|
const MANAGED_LAUNCH_KEYS = ["PATH", "HOME", "CLAUDE_CONFIG_DIR", "CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN"];
|
|
38
|
+
const PANE_TERMINAL_KEYS = ["TERM", "COLORTERM", "TERM_PROGRAM", "TERM_PROGRAM_VERSION", "LANG", "LC_ALL", "LC_CTYPE", "LC_MESSAGES",
|
|
39
|
+
"LC_COLLATE", "LC_NUMERIC", "LC_TIME", "LC_MONETARY"];
|
|
40
|
+
/** The person's editor and display session, so a managed seat behaves like a plain one for Claude's external-editor
|
|
41
|
+
* action (EDITOR, VISUAL; Claude falls back to VS Code without them) and for image paste, which runs
|
|
42
|
+
* `xclip || wl-paste` (DISPLAY with XAUTHORITY reach X11; WAYLAND_DISPLAY reaches the compositor, see below). Names only:
|
|
43
|
+
* the pane supplies the values. Left out: XDG_RUNTIME_DIR, because sd-bus, GDBus and libdbus fall back to
|
|
44
|
+
* $XDG_RUNTIME_DIR/bus when DBUS_SESSION_BUS_ADDRESS is unset, so it would hand the seat the session bus (keyring,
|
|
45
|
+
* `systemctl --user`) that the cleared environment keeps out; and DBUS_SESSION_BUS_ADDRESS, XDG_SESSION_TYPE and
|
|
46
|
+
* XDG_CURRENT_DESKTOP, which neither path reads. */
|
|
47
|
+
const PANE_SESSION_KEYS = ["EDITOR", "VISUAL", "DISPLAY", "XAUTHORITY"];
|
|
48
|
+
/** WAYLAND_DISPLAY without XDG_RUNTIME_DIR: a client resolves a relative socket name against XDG_RUNTIME_DIR, but an
|
|
49
|
+
* absolute path needs nothing else. The pane shell computes the value into a variable ahead of `env -i`: an absolute
|
|
50
|
+
* value is kept, a relative one is joined to the pane's XDG_RUNTIME_DIR, and a relative one with no XDG_RUNTIME_DIR (or
|
|
51
|
+
* an unset or empty one) leaves the variable empty, so the name is never forwarded. An assignment is not word-split or
|
|
52
|
+
* globbed, so a value with a space or a `*` arrives whole. The case patterns are balanced `(…)` so that shells that
|
|
53
|
+
* mis-parse an unbalanced `)` inside `$(…)` (bash before 4.0, a macOS /bin/sh) accept it. The variable stays in the
|
|
54
|
+
* shell that runs the command, which is a staged `/bin/sh` script for a managed launch; `env -i` does not pass it on. */
|
|
55
|
+
const WAYLAND_DISPLAY_VAR = "__openrig_wayland_display";
|
|
56
|
+
const WAYLAND_DISPLAY_ASSIGNMENT = `${WAYLAND_DISPLAY_VAR}=$(case "\${WAYLAND_DISPLAY-}" in (/*) printf %s "$WAYLAND_DISPLAY";; `
|
|
57
|
+
+ `(?*) if [ -n "\${XDG_RUNTIME_DIR-}" ]; then printf %s/%s "$XDG_RUNTIME_DIR" "$WAYLAND_DISPLAY"; fi;; esac)`;
|
|
58
|
+
const WAYLAND_DISPLAY_WORD = `\${${WAYLAND_DISPLAY_VAR}:+"WAYLAND_DISPLAY=$${WAYLAND_DISPLAY_VAR}"}`;
|
|
17
59
|
export class ClaudeManagedLaunch {
|
|
18
60
|
db;
|
|
19
61
|
sessionEnv;
|
|
@@ -127,7 +169,7 @@ export class ClaudeManagedLaunch {
|
|
|
127
169
|
const s = statSync(file);
|
|
128
170
|
return [realpathSync(file), s.dev, s.ino, s.mode, s.size, s.mtimeMs, s.ctimeMs];
|
|
129
171
|
};
|
|
130
|
-
return Object.freeze({ env: Object.freeze(env), configDir, executable,
|
|
172
|
+
return Object.freeze({ env: Object.freeze(env), configDir, executable, executableIsScript: fileStartsWithShebang(executable),
|
|
131
173
|
fileIdentity: Object.freeze(identity(executable)), cwdIdentity: Object.freeze(identity(cwd).slice(0, 3)) });
|
|
132
174
|
}
|
|
133
175
|
async prepare(request, mode) {
|
|
@@ -183,13 +225,12 @@ export class ClaudeManagedLaunch {
|
|
|
183
225
|
// inside tmux; without it Claude never asks tmux for extended keys, and Shift+Enter reaches it
|
|
184
226
|
// as a plain Enter. TMUX is left out on purpose: a bare `tmux` follows $TMUX ahead of
|
|
185
227
|
// TMUX_TMPDIR, so tools the seat runs (and any daemon it starts) would follow the seat's own tmux server.
|
|
186
|
-
const terminal = [
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
return Object.freeze({ assertCurrent, configDir: context.configDir, executable: context.executable, command: (args, launchEnv = {}) => {
|
|
228
|
+
const terminal = [...PANE_TERMINAL_KEYS, ...PANE_SESSION_KEYS].map(key => `\${${key}:+"${key}=$${key}"}`);
|
|
229
|
+
terminal.push(WAYLAND_DISPLAY_WORD);
|
|
230
|
+
return Object.freeze({ assertCurrent, configDir: context.configDir, executable: context.executable, executableIsScript: context.executableIsScript, command: (args, launchEnv = {}) => {
|
|
190
231
|
assertCurrent();
|
|
191
232
|
const launch = Object.entries(launchEnv).map(([key, value]) => shellQuote(`${key}=${value}`));
|
|
192
|
-
return
|
|
233
|
+
return `${WAYLAND_DISPLAY_ASSIGNMENT}; cd ${shellQuote(cwd)} && /usr/bin/env -i ${[...assignments, ...forwarded, ...seatForwarded, ...projectForwarded, ...terminal, ...launch, shellQuote(context.executable), ...args.map(shellQuote)].join(" ")}`;
|
|
193
234
|
} });
|
|
194
235
|
}
|
|
195
236
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-managed-launch.js","sourceRoot":"","sources":["../../src/domain/claude-managed-launch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-managed-launch.js","sourceRoot":"","sources":["../../src/domain/claude-managed-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Complete current MCP approval menus from supplied Claude captures. This is not
|
|
2
|
+
* a general checkbox detector: heading, instruction, warning, items and terminal
|
|
3
|
+
* footer must agree. A later composer (including a draft) ends this menu. */
|
|
4
|
+
export declare function currentClaudeMcpMenu(pane: string): string | null;
|
|
5
|
+
//# sourceMappingURL=claude-mcp-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-mcp-menu.d.ts","sourceRoot":"","sources":["../../src/domain/claude-mcp-menu.ts"],"names":[],"mappings":"AAAA;;6EAE6E;AAC7E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAehE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Complete current MCP approval menus from supplied Claude captures. This is not
|
|
2
|
+
* a general checkbox detector: heading, instruction, warning, items and terminal
|
|
3
|
+
* footer must agree. A later composer (including a draft) ends this menu. */
|
|
4
|
+
export function currentClaudeMcpMenu(pane) {
|
|
5
|
+
const lines = pane.split(/\r?\n/).map(line => line.trim()).filter(Boolean);
|
|
6
|
+
const footer = lines.at(-1);
|
|
7
|
+
if (footer !== "Space to select · Enter to confirm · Esc to reject all"
|
|
8
|
+
&& footer !== "Space to select · Esc to reject all")
|
|
9
|
+
return null;
|
|
10
|
+
const header = lines.map(line => /^\d+ new MCP servers found in (?:\.mcp\.json|this project)$/.test(line)).lastIndexOf(true);
|
|
11
|
+
if (header < 0 || lines[header + 1] !== "Select any you wish to enable.")
|
|
12
|
+
return null;
|
|
13
|
+
const item = /^(?:❯\s+)?\[(?:✔| )\]\s+\S.*$/;
|
|
14
|
+
const firstItem = lines.findIndex((line, i) => i > header + 1 && item.test(line));
|
|
15
|
+
if (firstItem < 0 || lines.slice(header + 2, firstItem).join(" ") !==
|
|
16
|
+
"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the MCP documentation.")
|
|
17
|
+
return null;
|
|
18
|
+
const choices = lines.slice(firstItem, -1);
|
|
19
|
+
if (/^(?:❯\s+)?Enable selected$/.test(choices.at(-1) ?? ""))
|
|
20
|
+
choices.pop();
|
|
21
|
+
if (!choices.length || !choices.every(line => item.test(line)))
|
|
22
|
+
return null;
|
|
23
|
+
return lines[header];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=claude-mcp-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-mcp-menu.js","sourceRoot":"","sources":["../../src/domain/claude-mcp-menu.ts"],"names":[],"mappings":"AAAA;;6EAE6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,wDAAwD;WAClE,MAAM,KAAK,qCAAqC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,6DAA6D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7H,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,gCAAgC;QAAE,OAAO,IAAI,CAAC;IACtF,MAAM,IAAI,GAAG,+BAA+B,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/D,gIAAgI;QAAE,OAAO,IAAI,CAAC;IAChJ,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3E,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,KAAK,CAAC,MAAM,CAAE,CAAC;AACxB,CAAC"}
|
|
@@ -5,4 +5,11 @@ import type Database from "better-sqlite3";
|
|
|
5
5
|
* guesses are unnecessary. No history or native identity is rewritten here.
|
|
6
6
|
*/
|
|
7
7
|
export declare function readFreshOccupantRelations(db: Database.Database, rigId: string): Record<string, string | null>;
|
|
8
|
+
/** The event seq of each node's current-generation fresh launch that reached
|
|
9
|
+
* ready. A restore attempt that started before it describes the retired
|
|
10
|
+
* occupant, not the current one. A launch that needed attention, failed,
|
|
11
|
+
* belongs to an older generation or contradicts another gives no fence, so
|
|
12
|
+
* the recorded restore outcome stands.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readReadyFreshLaunchFences(db: Database.Database, rigId?: string): Map<string, number>;
|
|
8
15
|
//# sourceMappingURL=fresh-occupant-relation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fresh-occupant-relation.d.ts","sourceRoot":"","sources":["../../src/domain/fresh-occupant-relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAqB9G"}
|
|
1
|
+
{"version":3,"file":"fresh-occupant-relation.d.ts","sourceRoot":"","sources":["../../src/domain/fresh-occupant-relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAqB9G;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BrG"}
|
|
@@ -28,4 +28,48 @@ export function readFreshOccupantRelations(db, rigId) {
|
|
|
28
28
|
}
|
|
29
29
|
return relation;
|
|
30
30
|
}
|
|
31
|
+
/** The event seq of each node's current-generation fresh launch that reached
|
|
32
|
+
* ready. A restore attempt that started before it describes the retired
|
|
33
|
+
* occupant, not the current one. A launch that needed attention, failed,
|
|
34
|
+
* belongs to an older generation or contradicts another gives no fence, so
|
|
35
|
+
* the recorded restore outcome stands.
|
|
36
|
+
*/
|
|
37
|
+
export function readReadyFreshLaunchFences(db, rigId) {
|
|
38
|
+
// Indexed: from each node's current tenure into that node's fresh-launch events
|
|
39
|
+
// (idx_events_node_type_seq), not every event of the type. `rig ps` runs this on every call.
|
|
40
|
+
const events = db.prepare(`
|
|
41
|
+
SELECT e.seq AS seq, e.payload AS payload, t.node_id AS nodeId, t.generation_uuid AS generation
|
|
42
|
+
FROM occupant_tenures t
|
|
43
|
+
JOIN nodes n ON n.id = t.node_id
|
|
44
|
+
JOIN events e ON e.node_id = t.node_id AND e.type = 'seat.fresh_launched'
|
|
45
|
+
WHERE t.generation_ordinal =
|
|
46
|
+
(SELECT MAX(t2.generation_ordinal) FROM occupant_tenures t2 WHERE t2.node_id = t.node_id)${rigId ? " AND n.rig_id = ?" : ""}
|
|
47
|
+
ORDER BY e.seq
|
|
48
|
+
`).all(...(rigId ? [rigId] : []));
|
|
49
|
+
const launches = new Map();
|
|
50
|
+
for (const row of events) {
|
|
51
|
+
let event;
|
|
52
|
+
try {
|
|
53
|
+
event = JSON.parse(row.payload);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (event.nodeId !== row.nodeId || event.newGeneration !== row.generation)
|
|
59
|
+
continue;
|
|
60
|
+
const sessionId = typeof event.sessionId === "string" && event.sessionId ? event.sessionId : null;
|
|
61
|
+
const prior = launches.get(row.nodeId);
|
|
62
|
+
if (prior === null)
|
|
63
|
+
continue;
|
|
64
|
+
launches.set(row.nodeId, prior && prior.sessionId !== sessionId
|
|
65
|
+
? null // contradictory current effects give no fence
|
|
66
|
+
: { seq: row.seq, sessionId, ready: event.status === "ready" && (prior?.ready ?? true) });
|
|
67
|
+
}
|
|
68
|
+
const fences = new Map();
|
|
69
|
+
for (const [nodeId, launch] of launches) {
|
|
70
|
+
if (launch?.sessionId && launch.ready)
|
|
71
|
+
fences.set(nodeId, launch.seq);
|
|
72
|
+
}
|
|
73
|
+
return fences;
|
|
74
|
+
}
|
|
31
75
|
//# sourceMappingURL=fresh-occupant-relation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fresh-occupant-relation.js","sourceRoot":"","sources":["../../src/domain/fresh-occupant-relation.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAqB,EAAE,KAAa;IAC7E,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAK9B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAkD,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,2FAA2F,CAAC;SACnH,GAAG,CAAC,KAAK,CAA+B,CAAC;IAC5C,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAA4B,CAAC;QACjE,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;eAC7D,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,SAAS;QACjE,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3F,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YAClG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,mDAAmD;QACpF,CAAC;;YAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"fresh-occupant-relation.js","sourceRoot":"","sources":["../../src/domain/fresh-occupant-relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type FetchImpl } from "./slack-api.js";
|
|
2
2
|
import { type InboundRouter } from "./inbound.js";
|
|
3
3
|
import { ChannelCoverageStore, type ChannelCoverage } from "./state-store.js";
|
|
4
|
+
import { MethodBackoff, type RecoveryBudget, type RecoverySource } from "./recovery-budget.js";
|
|
4
5
|
interface RecoveryOptions {
|
|
5
6
|
channel: string | null;
|
|
6
7
|
token: string | null;
|
|
@@ -9,13 +10,17 @@ interface RecoveryOptions {
|
|
|
9
10
|
fetchImpl?: FetchImpl;
|
|
10
11
|
store?: ChannelCoverageStore;
|
|
11
12
|
now?: () => number;
|
|
13
|
+
/** "adoption": a channel recovery newly adopts starts its coverage then. Absent: the configured
|
|
14
|
+
* channel's established seed, its newest retained accepted landing, else adoption. */
|
|
15
|
+
seed?: "adoption";
|
|
12
16
|
}
|
|
13
17
|
/** One owner across socket generations. Stop fences admission and checkpoint writes;
|
|
14
18
|
* already admitted I/O remains owned until it settles (no timeout/unlock race). */
|
|
15
|
-
export declare class ChannelRecovery {
|
|
19
|
+
export declare class ChannelRecovery implements RecoverySource {
|
|
16
20
|
private readonly opts;
|
|
17
21
|
private readonly store;
|
|
18
22
|
private readonly now;
|
|
23
|
+
private readonly backoff;
|
|
19
24
|
private coverage?;
|
|
20
25
|
private pass?;
|
|
21
26
|
private stopped;
|
|
@@ -25,6 +30,8 @@ export declare class ChannelRecovery {
|
|
|
25
30
|
private accepted;
|
|
26
31
|
private deadLettered;
|
|
27
32
|
constructor(opts: RecoveryOptions);
|
|
33
|
+
get key(): string;
|
|
34
|
+
get channel(): string | null;
|
|
28
35
|
initialize(): void;
|
|
29
36
|
status(): {
|
|
30
37
|
state: string;
|
|
@@ -37,9 +44,14 @@ export declare class ChannelRecovery {
|
|
|
37
44
|
limits: string[];
|
|
38
45
|
};
|
|
39
46
|
stop(): void;
|
|
47
|
+
/** A pass of this channel alone, with its own budget. */
|
|
40
48
|
run(): Promise<void>;
|
|
49
|
+
/** At most one history page within the pass's budget. "more": this channel has more history to
|
|
50
|
+
* scan now. "done": scanned, waiting, refused or backing off; its status says which. */
|
|
51
|
+
step(budget: RecoveryBudget, backoff: MethodBackoff): Promise<"more" | "done">;
|
|
52
|
+
private ready;
|
|
41
53
|
private save;
|
|
42
|
-
private
|
|
54
|
+
private page;
|
|
43
55
|
}
|
|
44
56
|
export {};
|
|
45
57
|
//# sourceMappingURL=channel-recovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-recovery.d.ts","sourceRoot":"","sources":["../../../../src/domain/gateway/slack/channel-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAkB,KAAK,aAAa,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA+B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-recovery.d.ts","sourceRoot":"","sources":["../../../../src/domain/gateway/slack/channel-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAkB,KAAK,aAAa,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA+B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAuB,aAAa,EAAqB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvI,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;2FACuF;IACvF,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;mFACmF;AACnF,qBAAa,eAAgB,YAAW,cAAc;IAaxC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,IAAI,CAAC,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAK;gBAEI,IAAI,EAAE,eAAe;IAKlD,IAAI,GAAG,IAAI,MAAM,CAAkD;IACnE,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAA8B;IAE1D,UAAU,IAAI,IAAI;IAalB,MAAM;;;;;;;;;;IAWN,IAAI,IAAI,IAAI;IAEZ,yDAAyD;IACzD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpB;6FACyF;IACnF,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAUpF,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;YAME,IAAI;CA2EnB"}
|
|
@@ -3,12 +3,14 @@ import path from "node:path";
|
|
|
3
3
|
import { callWebApi } from "./slack-api.js";
|
|
4
4
|
import { ingestDecision } from "./inbound.js";
|
|
5
5
|
import { ChannelCoverageStore, slackMicros, slackTimestamp } from "./state-store.js";
|
|
6
|
+
import { budgetLeft, HISTORY, MethodBackoff, newRecoveryBudget } from "./recovery-budget.js";
|
|
6
7
|
/** One owner across socket generations. Stop fences admission and checkpoint writes;
|
|
7
8
|
* already admitted I/O remains owned until it settles (no timeout/unlock race). */
|
|
8
9
|
export class ChannelRecovery {
|
|
9
10
|
opts;
|
|
10
11
|
store;
|
|
11
12
|
now;
|
|
13
|
+
backoff = new MethodBackoff();
|
|
12
14
|
coverage;
|
|
13
15
|
pass;
|
|
14
16
|
stopped = false;
|
|
@@ -22,6 +24,8 @@ export class ChannelRecovery {
|
|
|
22
24
|
this.now = opts.now ?? Date.now;
|
|
23
25
|
this.store = opts.store ?? new ChannelCoverageStore(path.join(opts.stateDir, "slack-channel-coverage.json"));
|
|
24
26
|
}
|
|
27
|
+
get key() { return `channel:${this.opts.channel ?? "-"}`; }
|
|
28
|
+
get channel() { return this.opts.channel; }
|
|
25
29
|
initialize() {
|
|
26
30
|
if (!this.opts.channel) {
|
|
27
31
|
this.state = "unavailable";
|
|
@@ -29,7 +33,10 @@ export class ChannelRecovery {
|
|
|
29
33
|
return;
|
|
30
34
|
}
|
|
31
35
|
try {
|
|
32
|
-
|
|
36
|
+
const at = slackTimestamp(BigInt(this.now()) * 1000n);
|
|
37
|
+
this.coverage = this.opts.seed === "adoption"
|
|
38
|
+
? this.store.initializeAtAdoption(this.opts.channel, at)
|
|
39
|
+
: this.store.initialize(this.opts.channel, at, path.join(this.opts.stateDir, "slack-inbound-seen.jsonl"), path.join(this.opts.stateDir, "slack-inbound-receipts.jsonl"));
|
|
33
40
|
this.state = this.opts.token ? "pending" : "unavailable";
|
|
34
41
|
this.reason = this.opts.token ? undefined : "bot-token-unresolved";
|
|
35
42
|
}
|
|
@@ -42,41 +49,61 @@ export class ChannelRecovery {
|
|
|
42
49
|
return { state: this.state, reason: this.reason, channel: this.opts.channel, lastScanAt: this.lastScanAt,
|
|
43
50
|
coverage: this.coverage ? structuredClone(this.coverage) : null,
|
|
44
51
|
acceptedThisProcess: this.accepted, deadLetteredThisProcess: this.deadLettered,
|
|
45
|
-
limits: ["older history unknown", "counts reset on connector rewire/restart", "
|
|
52
|
+
limits: ["older history unknown", "counts reset on connector rewire/restart", "this channel's history, including broadcast replies",
|
|
46
53
|
...(this.coverage?.historyLimited ? ["Slack plan limit excludes older history; only available messages were scanned"] : []),
|
|
47
54
|
"coverage means scanned available history; dead letters are custody, not delivery",
|
|
48
55
|
"five-second settle margin; larger clock skew or history visibility lag remains unverified",
|
|
49
56
|
"four pages / 100 entries / 15 seconds admission per pass; no global chronological ordering"] };
|
|
50
57
|
}
|
|
51
58
|
stop() { this.stopped = true; this.state = "stopped"; }
|
|
59
|
+
/** A pass of this channel alone, with its own budget. */
|
|
52
60
|
run() {
|
|
53
61
|
if (this.pass)
|
|
54
62
|
return this.pass;
|
|
55
|
-
if (
|
|
63
|
+
if (!this.ready())
|
|
56
64
|
return Promise.resolve();
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
this.state = "incomplete";
|
|
60
|
-
this.reason = "storage-or-routing-failed";
|
|
61
|
-
}
|
|
62
|
-
});
|
|
65
|
+
const budget = newRecoveryBudget(this.now());
|
|
66
|
+
const pass = (async () => { while (await this.step(budget, this.backoff) === "more") { /* next page */ } })();
|
|
63
67
|
this.pass = pass;
|
|
64
68
|
void pass.finally(() => { if (this.pass === pass)
|
|
65
69
|
this.pass = undefined; });
|
|
66
70
|
return pass;
|
|
67
71
|
}
|
|
72
|
+
/** At most one history page within the pass's budget. "more": this channel has more history to
|
|
73
|
+
* scan now. "done": scanned, waiting, refused or backing off; its status says which. */
|
|
74
|
+
async step(budget, backoff) {
|
|
75
|
+
if (!this.ready())
|
|
76
|
+
return "done";
|
|
77
|
+
try {
|
|
78
|
+
return await this.page(budget, backoff);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
if (!this.stopped) {
|
|
82
|
+
this.state = "incomplete";
|
|
83
|
+
this.reason = "storage-or-routing-failed";
|
|
84
|
+
}
|
|
85
|
+
return "done";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ready() {
|
|
89
|
+
return !this.stopped && !!this.coverage && !!this.opts.token && !!this.opts.channel;
|
|
90
|
+
}
|
|
68
91
|
save(next) {
|
|
69
92
|
if (this.stopped)
|
|
70
93
|
return;
|
|
71
94
|
this.store.save(this.opts.channel, next);
|
|
72
95
|
this.coverage = next; // publish only after the atomic write succeeds
|
|
73
96
|
}
|
|
74
|
-
async
|
|
97
|
+
async page(budget, backoff) {
|
|
98
|
+
if (backoff.blocked(HISTORY, this.now())) {
|
|
99
|
+
this.state = "backoff";
|
|
100
|
+
this.reason = "rate-limited";
|
|
101
|
+
return "done";
|
|
102
|
+
}
|
|
75
103
|
if (this.coverage.nextRetryAt && this.coverage.nextRetryAt > this.now()) {
|
|
76
104
|
this.state = "backoff";
|
|
77
|
-
return;
|
|
105
|
+
return "done";
|
|
78
106
|
}
|
|
79
|
-
const deadline = this.now() + 15_000;
|
|
80
107
|
this.lastScanAt = new Date(this.now()).toISOString();
|
|
81
108
|
this.state = "scanning";
|
|
82
109
|
this.reason = undefined;
|
|
@@ -86,92 +113,104 @@ export class ChannelRecovery {
|
|
|
86
113
|
const upper = slackTimestamp(BigInt(Math.max(0, this.now() - 5000)) * 1000n);
|
|
87
114
|
if (slackMicros(upper) <= slackMicros(this.coverage.coveredThrough)) {
|
|
88
115
|
this.state = "pending";
|
|
89
|
-
return;
|
|
116
|
+
return "done";
|
|
90
117
|
}
|
|
91
|
-
|
|
118
|
+
if (!budgetLeft(budget, this.now())) {
|
|
119
|
+
this.state = "incomplete";
|
|
120
|
+
this.reason = "pass-budget";
|
|
121
|
+
return "done";
|
|
122
|
+
}
|
|
123
|
+
this.save({ ...this.coverage, nextRetryAt: undefined, rateLimited: undefined, pending: { upper, nextLatest: upper } });
|
|
124
|
+
}
|
|
125
|
+
else if (!budgetLeft(budget, this.now())) {
|
|
126
|
+
this.state = "incomplete";
|
|
127
|
+
this.reason = "pass-budget";
|
|
128
|
+
return "done";
|
|
129
|
+
}
|
|
130
|
+
const c = { ...this.coverage };
|
|
131
|
+
const lower = slackMicros(c.coveredThrough);
|
|
132
|
+
const latest = slackMicros(c.pending.nextLatest);
|
|
133
|
+
budget.calls++;
|
|
134
|
+
const r = await callWebApi(HISTORY, this.opts.token, {
|
|
135
|
+
channel: this.opts.channel, oldest: slackTimestamp(lower > 0n ? lower - 1n : 0n),
|
|
136
|
+
latest: c.pending.nextLatest, inclusive: false, limit: Math.min(25, 100 - budget.entries),
|
|
137
|
+
}, this.opts.fetchImpl, Math.min(5000, budget.deadline - this.now()), "get-query");
|
|
138
|
+
if (this.stopped)
|
|
139
|
+
return "done";
|
|
140
|
+
if (!r.ok) {
|
|
141
|
+
const known = ["missing_scope", "not_in_channel", "channel_not_found", "invalid_auth", "token_revoked"];
|
|
142
|
+
this.reason = r.status === 429 ? "rate-limited" : known.includes(r.error ?? "") ? r.error : "history-api-unavailable";
|
|
143
|
+
const retrySeconds = r.retryAfterSeconds ?? (r.status === 0 || r.status >= 500 ? 5 : 300);
|
|
144
|
+
if (r.status === 429)
|
|
145
|
+
backoff.hold(HISTORY, this.now() + retrySeconds * 1000);
|
|
146
|
+
this.save({ ...c, nextRetryAt: this.now() + retrySeconds * 1000, rateLimited: r.status === 429 });
|
|
147
|
+
this.state = "backoff";
|
|
148
|
+
return "done";
|
|
149
|
+
}
|
|
150
|
+
const messages = r.json.messages;
|
|
151
|
+
const cursor = r.json.response_metadata?.next_cursor;
|
|
152
|
+
if (!Array.isArray(messages) || (r.json.has_more !== undefined && typeof r.json.has_more !== "boolean") ||
|
|
153
|
+
(r.json.has_more === undefined && cursor === undefined) ||
|
|
154
|
+
(cursor !== undefined && typeof cursor !== "string") || messages.length > 25 ||
|
|
155
|
+
messages.some(m => !m || typeof m !== "object" || slackMicros(m.ts) === null ||
|
|
156
|
+
slackMicros(m.ts) < lower || slackMicros(m.ts) >= latest)) {
|
|
157
|
+
this.state = "incomplete";
|
|
158
|
+
this.reason = "invalid-history-page";
|
|
159
|
+
return "done";
|
|
92
160
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
161
|
+
const ordered = [...messages].sort((a, b) => slackMicros(a.ts) < slackMicros(b.ts) ? -1 : 1);
|
|
162
|
+
const more = r.json.has_more === true || (typeof cursor === "string" && cursor.length > 0);
|
|
163
|
+
if (more && (!messages.length || slackMicros(ordered[0]?.ts) <= lower)) {
|
|
164
|
+
this.state = "incomplete";
|
|
165
|
+
this.reason = "history-page-no-progress";
|
|
166
|
+
return "done";
|
|
167
|
+
}
|
|
168
|
+
// The page is valid; the flag describes unreachable older history. Retain that
|
|
169
|
+
// qualification with the next durable page boundary rather than stalling forever.
|
|
170
|
+
if (r.json.is_limited === true)
|
|
171
|
+
c.historyLimited = true;
|
|
172
|
+
for (const message of ordered) {
|
|
102
173
|
if (this.stopped)
|
|
103
|
-
return;
|
|
104
|
-
if (
|
|
105
|
-
const known = ["missing_scope", "not_in_channel", "channel_not_found", "invalid_auth", "token_revoked"];
|
|
106
|
-
this.reason = r.status === 429 ? "rate-limited" : known.includes(r.error ?? "") ? r.error : "history-api-unavailable";
|
|
107
|
-
const retrySeconds = r.retryAfterSeconds ?? (r.status === 0 || r.status >= 500 ? 5 : 300);
|
|
108
|
-
this.save({ ...c, nextRetryAt: this.now() + retrySeconds * 1000 });
|
|
109
|
-
this.state = "backoff";
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const messages = r.json.messages;
|
|
113
|
-
const cursor = r.json.response_metadata?.next_cursor;
|
|
114
|
-
if (!Array.isArray(messages) || (r.json.has_more !== undefined && typeof r.json.has_more !== "boolean") ||
|
|
115
|
-
(r.json.has_more === undefined && cursor === undefined) ||
|
|
116
|
-
(cursor !== undefined && typeof cursor !== "string") || messages.length > 25 ||
|
|
117
|
-
messages.some(m => !m || typeof m !== "object" || slackMicros(m.ts) === null ||
|
|
118
|
-
slackMicros(m.ts) < lower || slackMicros(m.ts) >= latest)) {
|
|
174
|
+
return "done";
|
|
175
|
+
if (this.now() >= budget.deadline || budget.entries >= 100) {
|
|
119
176
|
this.state = "incomplete";
|
|
120
|
-
this.reason = "
|
|
121
|
-
return;
|
|
177
|
+
this.reason = "pass-budget";
|
|
178
|
+
return "done";
|
|
122
179
|
}
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
180
|
+
budget.entries++;
|
|
181
|
+
const ev = { ...message, channel: this.opts.channel, recoveredAfterGap: true };
|
|
182
|
+
// Broadcast replies are channel history too; preserve their thread routing.
|
|
183
|
+
if (ev.thread_ts && ev.thread_ts !== ev.ts && ev.subtype !== "thread_broadcast")
|
|
184
|
+
continue;
|
|
185
|
+
// In a channel this recovery newly covers, a broadcast reply lands late and never answers a decision, like a thread
|
|
186
|
+
// reply. The configured default channel keeps its established broadcast behaviour.
|
|
187
|
+
if (this.opts.seed === "adoption" && ev.thread_ts && ev.thread_ts !== ev.ts)
|
|
188
|
+
ev.recoveredThreadReply = true;
|
|
189
|
+
if (!ingestDecision(ev).ingest)
|
|
190
|
+
continue;
|
|
191
|
+
const landed = await this.opts.router.route(ev, 0, () => !this.stopped);
|
|
192
|
+
if (this.stopped)
|
|
193
|
+
return "done";
|
|
194
|
+
if (landed.reason === "inflight" || landed.reason === "inactive") {
|
|
126
195
|
this.state = "incomplete";
|
|
127
|
-
this.reason = "
|
|
128
|
-
return;
|
|
196
|
+
this.reason = "landing-in-progress";
|
|
197
|
+
return "done";
|
|
129
198
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
for (const message of ordered) {
|
|
135
|
-
if (this.stopped)
|
|
136
|
-
return;
|
|
137
|
-
if (this.now() >= deadline || entries >= 100) {
|
|
138
|
-
this.state = "incomplete";
|
|
139
|
-
this.reason = "pass-budget";
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
entries++;
|
|
143
|
-
const ev = { ...message, channel: this.opts.channel, recoveredAfterGap: true };
|
|
144
|
-
// Broadcast replies are channel history too; preserve their thread routing.
|
|
145
|
-
if (ev.thread_ts && ev.thread_ts !== ev.ts && ev.subtype !== "thread_broadcast")
|
|
146
|
-
continue;
|
|
147
|
-
if (!ingestDecision(ev).ingest)
|
|
148
|
-
continue;
|
|
149
|
-
const landed = await this.opts.router.route(ev, 0, () => !this.stopped);
|
|
150
|
-
if (this.stopped)
|
|
151
|
-
return;
|
|
152
|
-
if (landed.reason === "inflight" || landed.reason === "inactive") {
|
|
153
|
-
this.state = "incomplete";
|
|
154
|
-
this.reason = "landing-in-progress";
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
if (landed.disposition === "accepted")
|
|
158
|
-
this.accepted++;
|
|
159
|
-
if (landed.disposition === "dead-lettered")
|
|
160
|
-
this.deadLettered++;
|
|
161
|
-
}
|
|
162
|
-
if (!more) {
|
|
163
|
-
this.save({ ...c, coveredThrough: c.pending.upper, pending: undefined, nextRetryAt: undefined });
|
|
164
|
-
this.state = "scanned";
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
this.save({ ...c, pending: { upper: c.pending.upper, nextLatest: ordered[0].ts }, nextRetryAt: undefined });
|
|
168
|
-
if (entries >= 100)
|
|
169
|
-
break;
|
|
199
|
+
if (landed.disposition === "accepted")
|
|
200
|
+
this.accepted++;
|
|
201
|
+
if (landed.disposition === "dead-lettered")
|
|
202
|
+
this.deadLettered++;
|
|
170
203
|
}
|
|
171
|
-
if (!
|
|
172
|
-
this.
|
|
173
|
-
this.
|
|
204
|
+
if (!more) {
|
|
205
|
+
this.save({ ...c, coveredThrough: c.pending.upper, pending: undefined, nextRetryAt: undefined, rateLimited: undefined });
|
|
206
|
+
this.state = "scanned";
|
|
207
|
+
return "done";
|
|
174
208
|
}
|
|
209
|
+
this.save({ ...c, pending: { upper: c.pending.upper, nextLatest: ordered[0].ts }, nextRetryAt: undefined, rateLimited: undefined });
|
|
210
|
+
// More history waits for this pass's next turn, or the next pass.
|
|
211
|
+
this.state = "incomplete";
|
|
212
|
+
this.reason = "pass-budget";
|
|
213
|
+
return "more";
|
|
175
214
|
}
|
|
176
215
|
}
|
|
177
216
|
//# sourceMappingURL=channel-recovery.js.map
|