@openrig/cli 0.6.8 → 0.6.10
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 +2 -2
- package/daemon/assets/onboarding/02-self-and-competent-action.md +4 -3
- 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/hooks/scripts/activity-relay.cjs +42 -2
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +41 -2
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +12 -4
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +7 -1
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +218 -7
- package/daemon/assets/skills/rigs/SKILL.md +6 -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 +51 -16
- package/daemon/context-packs/reference/getting-started.md +10 -6
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/whats-new.md +145 -74
- 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/SKILL.md +1 -0
- 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/SKILL.md +12 -4
- 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/SKILL.md +2 -2
- 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/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/SKILL.md +7 -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 +218 -7
- 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.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +16 -7
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume-launch.d.ts +4 -0
- package/daemon/dist/adapters/claude-resume-launch.d.ts.map +1 -0
- package/daemon/dist/adapters/claude-resume-launch.js +13 -0
- package/daemon/dist/adapters/claude-resume-launch.js.map +1 -0
- package/daemon/dist/adapters/claude-resume.d.ts +2 -1
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +9 -4
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/tmux-server.d.ts +15 -0
- package/daemon/dist/adapters/tmux-server.d.ts.map +1 -0
- package/daemon/dist/adapters/tmux-server.js +58 -0
- package/daemon/dist/adapters/tmux-server.js.map +1 -0
- package/daemon/dist/adapters/tmux.d.ts +3 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +4 -2
- package/daemon/dist/adapters/tmux.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 +6 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts +3 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts.map +1 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js +12 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js.map +1 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts +3 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.d.ts.map +1 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js +19 -0
- package/daemon/dist/db/migrations/099_queue_items_recovery_tags.js.map +1 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts +3 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.d.ts.map +1 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.js +19 -0
- package/daemon/dist/db/migrations/101_claude_resume_rotation.js.map +1 -0
- package/daemon/dist/domain/agent-activity-store.js +3 -0
- package/daemon/dist/domain/agent-activity-store.js.map +1 -1
- package/daemon/dist/domain/bootstrap-repository.js +1 -1
- package/daemon/dist/domain/bootstrap-repository.js.map +1 -1
- package/daemon/dist/domain/chat-repository.d.ts +3 -0
- package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
- package/daemon/dist/domain/chat-repository.js +15 -4
- package/daemon/dist/domain/chat-repository.js.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts +1 -1
- package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
- package/daemon/dist/domain/claude-managed-launch.js +3 -2
- package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.js +2 -1
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
- package/daemon/dist/domain/codex-git-add-dirs.js +1 -1
- package/daemon/dist/domain/codex-git-add-dirs.js.map +1 -1
- package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
- package/daemon/dist/domain/context-usage-store.js +6 -1
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.js +3 -1
- package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
- package/daemon/dist/domain/current-work.d.ts +74 -0
- package/daemon/dist/domain/current-work.d.ts.map +1 -1
- package/daemon/dist/domain/current-work.js +165 -0
- package/daemon/dist/domain/current-work.js.map +1 -1
- package/daemon/dist/domain/files/file-read.d.ts.map +1 -1
- package/daemon/dist/domain/files/file-read.js +11 -3
- package/daemon/dist/domain/files/file-read.js.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts +3 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.js +3 -1
- package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.js +3 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts +21 -2
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +70 -11
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +3 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +5 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +81 -23
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +37 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.js +281 -38
- package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts +14 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.js +16 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/daemon/dist/domain/history-query.d.ts.map +1 -1
- package/daemon/dist/domain/history-query.js +8 -6
- package/daemon/dist/domain/history-query.js.map +1 -1
- package/daemon/dist/domain/human-questions.d.ts +16 -4
- package/daemon/dist/domain/human-questions.d.ts.map +1 -1
- package/daemon/dist/domain/human-questions.js +10 -5
- package/daemon/dist/domain/human-questions.js.map +1 -1
- package/daemon/dist/domain/install-engine.js +2 -2
- package/daemon/dist/domain/install-engine.js.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts +20 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.js +66 -14
- package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -1
- package/daemon/dist/domain/kernel-boot.d.ts +4 -0
- package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot.js +26 -1
- package/daemon/dist/domain/kernel-boot.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts +52 -4
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +254 -34
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
- package/daemon/dist/domain/node-cmux-service.js +2 -1
- package/daemon/dist/domain/node-cmux-service.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +58 -13
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/progress/progress-indexer.js +19 -0
- package/daemon/dist/domain/progress/progress-indexer.js.map +1 -1
- package/daemon/dist/domain/provider/codex-limit-banner.d.ts +40 -0
- package/daemon/dist/domain/provider/codex-limit-banner.d.ts.map +1 -0
- package/daemon/dist/domain/provider/codex-limit-banner.js +121 -0
- package/daemon/dist/domain/provider/codex-limit-banner.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +3 -2
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
- package/daemon/dist/domain/queue-recovery.js +10 -3
- package/daemon/dist/domain/queue-recovery.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +78 -13
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +103 -41
- 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 +5 -2
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +12 -4
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +24 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.d.ts +17 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.js +49 -3
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
- package/daemon/dist/domain/restore-guidance.d.ts +39 -0
- package/daemon/dist/domain/restore-guidance.d.ts.map +1 -0
- package/daemon/dist/domain/restore-guidance.js +163 -0
- package/daemon/dist/domain/restore-guidance.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +6 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +160 -6
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +2 -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/scope/scope-approve.d.ts +21 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +48 -4
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +5 -7
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +5 -2
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +18 -4
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js +7 -2
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts +2 -1
- 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 +9 -1
- package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-structural-activity-service.js +28 -4
- package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-switch-client-service.js +2 -1
- package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +46 -0
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +86 -4
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +13 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +101 -5
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +8 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +37 -1
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts +5 -1
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/terminal-service.js +30 -4
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.d.ts +6 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/view-composer.js +2 -1
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
- package/daemon/dist/domain/transcript-store.js +1 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +9 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +5 -0
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/usage-series.d.ts.map +1 -1
- package/daemon/dist/domain/usage-series.js +9 -4
- package/daemon/dist/domain/usage-series.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +13 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +4 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +19 -4
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +33 -1
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/chat.d.ts.map +1 -1
- package/daemon/dist/routes/chat.js +6 -2
- package/daemon/dist/routes/chat.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +2 -0
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/kernel-status.js +3 -1
- package/daemon/dist/routes/kernel-status.js.map +1 -1
- package/daemon/dist/routes/projects.d.ts.map +1 -1
- package/daemon/dist/routes/projects.js +5 -1
- package/daemon/dist/routes/projects.js.map +1 -1
- package/daemon/dist/routes/query-limit.d.ts +19 -0
- package/daemon/dist/routes/query-limit.d.ts.map +1 -0
- package/daemon/dist/routes/query-limit.js +24 -0
- package/daemon/dist/routes/query-limit.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +35 -9
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rig-cmux.js +8 -10
- package/daemon/dist/routes/rig-cmux.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +6 -4
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
- package/daemon/dist/routes/scope-approve.js +3 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts.map +1 -1
- package/daemon/dist/routes/stream.js +5 -1
- package/daemon/dist/routes/stream.js.map +1 -1
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +2 -1
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/views.d.ts.map +1 -1
- package/daemon/dist/routes/views.js +7 -1
- package/daemon/dist/routes/views.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +19 -0
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/getting-started.md +10 -6
- package/daemon/docs/reference/refocus-channel.md +33 -0
- package/daemon/docs/reference/slack-app-setup.md +19 -0
- package/daemon/docs/reference/whats-new.md +145 -74
- package/daemon/specs/agents/development/qa/guidance/role.md +9 -0
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +1 -0
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +12 -4
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +2 -2
- package/daemon/specs/rigs/launch/factory/CULTURE.md +13 -0
- package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +18 -5
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +20 -1
- package/daemon/specs/rigs/launch/starter/CULTURE.md +13 -0
- package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +18 -5
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts.map +1 -1
- package/dist/cli-error.js +2 -0
- package/dist/cli-error.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +55 -4
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +93 -41
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/chatroom.d.ts.map +1 -1
- package/dist/commands/chatroom.js +25 -5
- package/dist/commands/chatroom.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +37 -3
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +1 -50
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +6 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/heartbeat.js +2 -2
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/ps.d.ts +3 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +8 -3
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +39 -6
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +130 -33
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +10 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +6 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +23 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +100 -44
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/slack.d.ts +17 -0
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +41 -0
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +5 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +5 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +10 -5
- package/dist/commands/usage.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +8 -8
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +2 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +14 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-types.d.ts +1 -1
- package/dist/cross-host-types.d.ts.map +1 -1
- package/dist/daemon-lifecycle.d.ts +4 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +16 -4
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/lib/scope/capability-delta.d.ts.map +1 -1
- package/dist/lib/scope/capability-delta.js +8 -0
- package/dist/lib/scope/capability-delta.js.map +1 -1
- package/dist/lib/scope/progress-edit.js +1 -1
- package/dist/lib/scope/progress-edit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +13 -0
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +31 -7
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/remote-host-ops.d.ts +4 -0
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +20 -2
- package/dist/remote-host-ops.js.map +1 -1
- package/dist/rig-handle.d.ts +45 -0
- package/dist/rig-handle.d.ts.map +1 -0
- package/dist/rig-handle.js +51 -0
- package/dist/rig-handle.js.map +1 -0
- package/dist/system-preflight.d.ts +5 -0
- package/dist/system-preflight.d.ts.map +1 -1
- package/dist/system-preflight.js +8 -0
- package/dist/system-preflight.js.map +1 -1
- package/dist/terminal-window.d.ts.map +1 -1
- package/dist/terminal-window.js +3 -1
- package/dist/terminal-window.js.map +1 -1
- package/package.json +1 -1
- package/tui/dist/config/config-model.d.ts.map +1 -1
- package/tui/dist/config/config-model.js +1 -0
- package/tui/dist/config/config-model.js.map +1 -1
- package/tui/dist/connections/connections-model.d.ts +5 -0
- package/tui/dist/connections/connections-model.d.ts.map +1 -1
- package/tui/dist/connections/connections-model.js +16 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/daemon-client.d.ts +3 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +4 -1
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/detail.d.ts.map +1 -1
- package/tui/dist/detail.js +6 -1
- package/tui/dist/detail.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +19 -17
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/input.d.ts.map +1 -1
- package/tui/dist/input.js +15 -4
- package/tui/dist/input.js.map +1 -1
- package/tui/dist/local-reading.js +2 -2
- package/tui/dist/local-reading.js.map +1 -1
- package/tui/dist/reading.d.ts.map +1 -1
- package/tui/dist/reading.js +14 -3
- package/tui/dist/reading.js.map +1 -1
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
"""Render topology and work context by ascending directory paths only."""
|
|
3
3
|
|
|
4
4
|
import argparse
|
|
5
|
+
import datetime
|
|
5
6
|
import json
|
|
6
7
|
import os
|
|
7
8
|
import re
|
|
8
9
|
import subprocess
|
|
10
|
+
import sys
|
|
9
11
|
from pathlib import Path
|
|
10
12
|
|
|
11
13
|
SHELVES = {"rigs", "pods", "seats", "missions", "slices"}
|
|
@@ -148,7 +150,82 @@ def light_learned(text):
|
|
|
148
150
|
return body[:boundary if boundary > 0 else 800].rstrip() + "\n[… use --depth full for the rest]"
|
|
149
151
|
|
|
150
152
|
|
|
151
|
-
|
|
153
|
+
# OPR.0.7.0.12 — the refocus packet (--packet). Duties and notes are carried as text by
|
|
154
|
+
# conventional section, with an honest "not found" and a bounded excerpt otherwise; nobody is
|
|
155
|
+
# asked to add headings. Old files are named with their measured age as a cue, not a verdict.
|
|
156
|
+
DUTY_HEADINGS = ("my job here", "standing duties")
|
|
157
|
+
NOTES_STATE_HEADINGS = ("current state",)
|
|
158
|
+
HEADING = re.compile(r"^(#{1,6})\s+(.*?)\s*#*\s*$")
|
|
159
|
+
DEFAULT_NOTES_MAX_AGE_DAYS = 14
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def heading_sections(text, wanted):
|
|
163
|
+
"""[(title, body)] for each Markdown heading whose title starts with a wanted phrase."""
|
|
164
|
+
lines = re.sub(r"^---\s*\n.*?\n---\s*\n", "", text or "", count=1, flags=re.S).splitlines()
|
|
165
|
+
found = []
|
|
166
|
+
for index, line in enumerate(lines):
|
|
167
|
+
match = HEADING.match(line)
|
|
168
|
+
if not match or not match.group(2).strip().lower().startswith(wanted):
|
|
169
|
+
continue
|
|
170
|
+
level = len(match.group(1))
|
|
171
|
+
body = []
|
|
172
|
+
for later in lines[index + 1:]:
|
|
173
|
+
heading = HEADING.match(later)
|
|
174
|
+
if heading and len(heading.group(1)) <= level:
|
|
175
|
+
break
|
|
176
|
+
body.append(later)
|
|
177
|
+
found.append((match.group(2).strip(), "\n".join(body).strip()))
|
|
178
|
+
return found
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def by_section(text, wanted, path):
|
|
182
|
+
found = heading_sections(text, wanted)
|
|
183
|
+
shown = "\n\n".join(f"{title}\n{body}" if body else title for title, body in found)
|
|
184
|
+
missing = [phrase for phrase in wanted if not any(title.lower().startswith(phrase) for title, _ in found)]
|
|
185
|
+
if not missing:
|
|
186
|
+
return shown
|
|
187
|
+
if not found:
|
|
188
|
+
names = " or ".join(f'"{phrase.upper()}"' for phrase in wanted)
|
|
189
|
+
return f"SECTION NOT FOUND — no {names} heading in {path}; bounded excerpt follows\n{light_learned(text)}"
|
|
190
|
+
# Some sections matched: name each one that did not, with the same bounded excerpt, so text
|
|
191
|
+
# kept under another heading is not silently dropped.
|
|
192
|
+
names = ", ".join(f'"{phrase.upper()}"' for phrase in missing)
|
|
193
|
+
return f"{shown}\n\nSECTION NOT FOUND — no {names} heading in {path}; bounded excerpt follows\n{light_learned(text)}"
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def notes_max_age_days():
|
|
197
|
+
try:
|
|
198
|
+
value = float(os.environ.get("OPENRIG_REFOCUS_NOTES_MAX_AGE_DAYS", DEFAULT_NOTES_MAX_AGE_DAYS))
|
|
199
|
+
except ValueError:
|
|
200
|
+
return DEFAULT_NOTES_MAX_AGE_DAYS
|
|
201
|
+
return value if value > 0 else DEFAULT_NOTES_MAX_AGE_DAYS
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def age_cue(path, text):
|
|
205
|
+
"""An OLD NOTES line when the file is past the threshold, measured from `updated:` or mtime."""
|
|
206
|
+
threshold = notes_max_age_days()
|
|
207
|
+
updated, source = None, "mtime"
|
|
208
|
+
match = re.match(r"^---\s*\n(.*?)\n---", text or "", re.S)
|
|
209
|
+
if match:
|
|
210
|
+
found = re.search(r"^updated:\s*[\"']?(\d{4}-\d{2}-\d{2})", match.group(1), re.M)
|
|
211
|
+
if found:
|
|
212
|
+
try:
|
|
213
|
+
updated = datetime.datetime.strptime(found.group(1), "%Y-%m-%d").replace(tzinfo=datetime.timezone.utc)
|
|
214
|
+
source = "updated"
|
|
215
|
+
except ValueError:
|
|
216
|
+
updated = None
|
|
217
|
+
if updated is None:
|
|
218
|
+
try:
|
|
219
|
+
updated = datetime.datetime.fromtimestamp(path.stat().st_mtime, datetime.timezone.utc)
|
|
220
|
+
except OSError:
|
|
221
|
+
return None
|
|
222
|
+
age = (datetime.datetime.now(datetime.timezone.utc) - updated).total_seconds() / 86400
|
|
223
|
+
if age <= threshold:
|
|
224
|
+
return None
|
|
225
|
+
return f"OLD NOTES — {path}, {age:.0f} days old, source {source}, threshold {threshold:g} days"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def render_topology(start, root, depth, failures, packet=False):
|
|
152
229
|
output = ["## TOPOLOGY TRACE", f"root: {root}", f"start: {start}"]
|
|
153
230
|
nodes, error = ascent(start, root)
|
|
154
231
|
if error:
|
|
@@ -161,12 +238,21 @@ def render_topology(start, root, depth, failures):
|
|
|
161
238
|
if text is None:
|
|
162
239
|
output.append(f"\n### {label}\nMISSING LINK — {chain_file}")
|
|
163
240
|
continue
|
|
164
|
-
|
|
241
|
+
if depth == "full":
|
|
242
|
+
body = text.strip()
|
|
243
|
+
elif packet and node == nodes[-1]:
|
|
244
|
+
# The seat's own file: its job and standing duties as text.
|
|
245
|
+
body = by_section(text, DUTY_HEADINGS, chain_file)
|
|
246
|
+
else:
|
|
247
|
+
body = light_learned(text)
|
|
165
248
|
output.append(f"\n### {label} · LEARNED.md\n{body}")
|
|
249
|
+
cue = age_cue(chain_file, text) if packet else None
|
|
250
|
+
if cue:
|
|
251
|
+
output.append(cue)
|
|
166
252
|
return "\n".join(output)
|
|
167
253
|
|
|
168
254
|
|
|
169
|
-
def render_work(start, root, depth, failures, fallback=None):
|
|
255
|
+
def render_work(start, root, depth, failures, fallback=None, packet=False):
|
|
170
256
|
output = ["## WORK TRACE", f"root: {root}", f"start: {start}"]
|
|
171
257
|
if fallback:
|
|
172
258
|
output.append(f"FALLBACK — {fallback}")
|
|
@@ -201,6 +287,19 @@ def render_work(start, root, depth, failures, fallback=None):
|
|
|
201
287
|
output.append(f"NOTES RESOLUTION GAP — resolved {notes_name} became unreadable at {notes_path}")
|
|
202
288
|
else:
|
|
203
289
|
output.append(f"\nNOTES · {notes_name}\n{notes_text.strip()}")
|
|
290
|
+
cue = age_cue(notes_path, notes_text) if packet else None
|
|
291
|
+
if cue:
|
|
292
|
+
output.append(cue)
|
|
293
|
+
elif packet:
|
|
294
|
+
notes_text = read(notes_path)
|
|
295
|
+
if notes_text is None:
|
|
296
|
+
failures.append(f"unreadable notes: {notes_path}")
|
|
297
|
+
output.append(f"NOTES RESOLUTION GAP — resolved {notes_name} became unreadable at {notes_path}")
|
|
298
|
+
else:
|
|
299
|
+
output.append(f"\nNOTES · {notes_name}\n{by_section(notes_text, NOTES_STATE_HEADINGS, notes_path)}")
|
|
300
|
+
cue = age_cue(notes_path, notes_text)
|
|
301
|
+
if cue:
|
|
302
|
+
output.append(cue)
|
|
204
303
|
else:
|
|
205
304
|
try:
|
|
206
305
|
size = notes_path.stat().st_size
|
|
@@ -211,9 +310,107 @@ def render_work(start, root, depth, failures, fallback=None):
|
|
|
211
310
|
output.append(f"NOTES · {notes_name} · {size} bytes · {notes_path}")
|
|
212
311
|
else:
|
|
213
312
|
output.append(f"NOTES GAP — no readable mission notes at {node}")
|
|
313
|
+
|
|
314
|
+
# The SDLC convention keeps a node's current delivery state in PROGRESS.md; carry it
|
|
315
|
+
# as text when present. Its absence is not a gap: many nodes have no PROGRESS.md.
|
|
316
|
+
progress_path = node / "PROGRESS.md"
|
|
317
|
+
progress_text = read(progress_path) if packet else None
|
|
318
|
+
if progress_text is not None:
|
|
319
|
+
progress_body = progress_text.strip() if depth == "full" else by_section(progress_text, NOTES_STATE_HEADINGS, progress_path)
|
|
320
|
+
output.append(f"\nPROGRESS · PROGRESS.md\n{progress_body}")
|
|
321
|
+
cue = age_cue(progress_path, progress_text)
|
|
322
|
+
if cue:
|
|
323
|
+
output.append(cue)
|
|
324
|
+
return "\n".join(output)
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def candidate_line(candidate):
|
|
328
|
+
name = candidate.get("mission") or "?"
|
|
329
|
+
if candidate.get("slice"):
|
|
330
|
+
name += f" / {candidate['slice']}"
|
|
331
|
+
intent_text = candidate.get("intent") or "no readable intent"
|
|
332
|
+
line = f"- {name} — {intent_text} — source: {candidate.get('source') or 'unknown'}"
|
|
333
|
+
if candidate.get("unresolved"):
|
|
334
|
+
line += f" — UNRESOLVED ON THIS HOST: {candidate['unresolved']}"
|
|
335
|
+
return line
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def render_held_and_next(evidence):
|
|
339
|
+
output = []
|
|
340
|
+
held = evidence.get("held") or []
|
|
341
|
+
if held:
|
|
342
|
+
output.append("HELD WORK (blocked; this is not next):")
|
|
343
|
+
for row in held:
|
|
344
|
+
output.append(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'} — "
|
|
345
|
+
f"blocked on {row.get('blockedOn') or 'unknown'} — "
|
|
346
|
+
f"continuation: {row.get('continuation') or 'none recorded'}")
|
|
347
|
+
following = evidence.get("next") or []
|
|
348
|
+
if following:
|
|
349
|
+
output.append("POSSIBLE NEXT WORK (pending; no order implied):")
|
|
350
|
+
for row in following:
|
|
351
|
+
missions = ", ".join(row.get("missions") or [])
|
|
352
|
+
output.append(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'}"
|
|
353
|
+
+ (f" [mission: {missions}]" if missions else ""))
|
|
354
|
+
if evidence.get("heldAndNextTruncated"):
|
|
355
|
+
output.append("(held and next lists were cut; `rig queue list` has the rest)")
|
|
214
356
|
return "\n".join(output)
|
|
215
357
|
|
|
216
358
|
|
|
359
|
+
def render_candidates(evidence, root, depth, failures):
|
|
360
|
+
"""The work section from labelled queue evidence. One direct, resolved tag is shown as the
|
|
361
|
+
work with its source; anything less certain lists every candidate and asks the agent."""
|
|
362
|
+
candidates = evidence.get("candidates") or []
|
|
363
|
+
unknown = evidence.get("unknown") or []
|
|
364
|
+
if (len(candidates) == 1 and not unknown and candidates[0].get("kind") == "tag"
|
|
365
|
+
and candidates[0].get("workNodePath") and not candidates[0].get("unresolved")):
|
|
366
|
+
only = candidates[0]
|
|
367
|
+
notes = [f"WORK FROM QUEUE EVIDENCE — {only.get('source')}. If this is stale, say what you are actually doing."]
|
|
368
|
+
if not only.get("slice"):
|
|
369
|
+
notes.append("no slice named")
|
|
370
|
+
traced = render_work(Path(only["workNodePath"]), root, depth, failures, packet=True)
|
|
371
|
+
head, _, rest = traced.partition("\n")
|
|
372
|
+
return "\n".join([head, *notes, rest])
|
|
373
|
+
|
|
374
|
+
missions_root = evidence.get("missionsRoot") or str(root / "missions")
|
|
375
|
+
output = ["## WORK — name it"]
|
|
376
|
+
if not candidates and not unknown:
|
|
377
|
+
output.append("No in-progress queue row names your work. If you are working from messages, "
|
|
378
|
+
"name the mission they belong to; if you have no current work, say so.")
|
|
379
|
+
elif len(candidates) > 1:
|
|
380
|
+
output.append(f"{len(candidates)} candidates are in flight. Say which mission you are actually working on.")
|
|
381
|
+
else:
|
|
382
|
+
output.append("The queue evidence does not settle your work. Confirm a candidate or name your mission.")
|
|
383
|
+
if candidates:
|
|
384
|
+
output.append("Candidates (evidence, not a verdict; none is adopted for you):")
|
|
385
|
+
output.extend(candidate_line(candidate) for candidate in candidates)
|
|
386
|
+
if unknown:
|
|
387
|
+
output.append("In-progress rows the queue cannot place:")
|
|
388
|
+
output.extend(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'}: {row.get('reason')}"
|
|
389
|
+
for row in unknown)
|
|
390
|
+
if not candidates:
|
|
391
|
+
names = evidence.get("missionsOnHost") or []
|
|
392
|
+
if names:
|
|
393
|
+
listing = ", ".join(names) + (", …" if evidence.get("missionsOnHostTruncated") else "")
|
|
394
|
+
output.append(f"Missions on this host: {listing}")
|
|
395
|
+
output.append("Then read that mission's current intent as text:")
|
|
396
|
+
output.append(f" python3 {Path(__file__).resolve()} --trees work --packet --work-start {missions_root}/<mission>")
|
|
397
|
+
orientation = render_work(root, root, "light", failures, packet=True)
|
|
398
|
+
_, _, rest = orientation.partition("\n")
|
|
399
|
+
output.append("\n## ORIENTATION — the project-level chain, not your work\n" + rest.lstrip("\n"))
|
|
400
|
+
return "\n".join(output)
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def read_candidates(source):
|
|
404
|
+
try:
|
|
405
|
+
raw = sys.stdin.read() if source == "-" else Path(source).read_text(encoding="utf8")
|
|
406
|
+
evidence = json.loads(raw)
|
|
407
|
+
except (OSError, json.JSONDecodeError) as error:
|
|
408
|
+
return None, f"work candidates unreadable: {error}"
|
|
409
|
+
if not isinstance(evidence, dict) or not isinstance(evidence.get("candidates", []), list):
|
|
410
|
+
return None, "work candidates have an invalid shape"
|
|
411
|
+
return evidence, None
|
|
412
|
+
|
|
413
|
+
|
|
217
414
|
def canonical_seat(session):
|
|
218
415
|
"""(member, rig) for a canonical session name, else None so the caller asks `rig whoami`.
|
|
219
416
|
|
|
@@ -279,6 +476,8 @@ def main():
|
|
|
279
476
|
parser.add_argument("--work-basis", help="the daemon's reason no current work node was named")
|
|
280
477
|
parser.add_argument("--work-unknown", help="why the current work node could not be read")
|
|
281
478
|
parser.add_argument("--check", action="store_true", help="exit nonzero on trace or notes resolution failure; rendered text is unchanged")
|
|
479
|
+
parser.add_argument("--packet", action="store_true", help="carry duties and notes as text by section, with old-notes cues")
|
|
480
|
+
parser.add_argument("--work-candidates", help="labelled work evidence as JSON (a path, or - for stdin), from `rig queue whoami --work-candidates`")
|
|
282
481
|
args = parser.parse_args()
|
|
283
482
|
|
|
284
483
|
sections = []
|
|
@@ -293,7 +492,7 @@ def main():
|
|
|
293
492
|
sections.append(gap("## TOPOLOGY TRACE\nTRACE GAP — topology.root is unresolved"))
|
|
294
493
|
else:
|
|
295
494
|
start = Path(args.topology_start) if args.topology_start else derive_topology_start(root)
|
|
296
|
-
sections.append(render_topology(start, root, args.depth, failures) if start else
|
|
495
|
+
sections.append(render_topology(start, root, args.depth, failures, packet=args.packet) if start else
|
|
297
496
|
gap("## TOPOLOGY TRACE\nTRACE GAP — current topology node is unresolved; pass --topology-start with a literal absolute path (or configure OPENRIG_REFOCUS_TOPOLOGY_NODE separately)"))
|
|
298
497
|
|
|
299
498
|
if args.trees in {"work", "both"}:
|
|
@@ -304,10 +503,19 @@ def main():
|
|
|
304
503
|
# Precedence: an explicit start wins; then the hook's daemon answer (basis or unknown);
|
|
305
504
|
# only a standalone run with neither falls back to inferring from the working directory.
|
|
306
505
|
explicit = args.work_start or os.environ.get("OPENRIG_REFOCUS_WORK_NODE")
|
|
506
|
+
evidence = None
|
|
507
|
+
if args.work_candidates:
|
|
508
|
+
evidence, error = read_candidates(args.work_candidates)
|
|
509
|
+
if error:
|
|
510
|
+
sections.append(gap(f"## WORK TRACE\nTRACE GAP — {error}"))
|
|
307
511
|
if explicit:
|
|
308
|
-
sections.append(render_work(Path(explicit), root, args.depth, failures))
|
|
512
|
+
sections.append(render_work(Path(explicit), root, args.depth, failures, packet=args.packet))
|
|
513
|
+
elif evidence is not None:
|
|
514
|
+
sections.append(render_candidates(evidence, root, args.depth, failures))
|
|
515
|
+
elif args.work_candidates:
|
|
516
|
+
pass # the unreadable-evidence gap above is the answer; never fall back to the root
|
|
309
517
|
elif args.work_basis == NO_CURRENT_BATON_BASIS:
|
|
310
|
-
sections.append(render_work(root, root, args.depth, failures, fallback=(
|
|
518
|
+
sections.append(render_work(root, root, args.depth, failures, packet=args.packet, fallback=(
|
|
311
519
|
f"no current typed baton ({args.work_basis}). Showing the project-level chain from the work root: "
|
|
312
520
|
"a broad orientation, not evidence of a current mission")))
|
|
313
521
|
elif args.work_basis:
|
|
@@ -316,8 +524,11 @@ def main():
|
|
|
316
524
|
sections.append(gap(f"## WORK TRACE\nTRACE GAP — current work node UNKNOWN: {args.work_unknown}"))
|
|
317
525
|
else:
|
|
318
526
|
start = derive_work_start(root)
|
|
319
|
-
sections.append(render_work(start, root, args.depth, failures) if start else
|
|
527
|
+
sections.append(render_work(start, root, args.depth, failures, packet=args.packet) if start else
|
|
320
528
|
gap("## WORK TRACE\nTRACE GAP — current work node is unresolved; pass --work-start with a literal absolute path (or configure OPENRIG_REFOCUS_WORK_NODE separately)"))
|
|
529
|
+
held_and_next = render_held_and_next(evidence) if evidence else ""
|
|
530
|
+
if held_and_next:
|
|
531
|
+
sections.append(held_and_next)
|
|
321
532
|
|
|
322
533
|
print("\n\n".join(sections))
|
|
323
534
|
return 1 if args.check and failures else 0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
|
|
2
2
|
# Package-time projection of a canonical skill; regenerated every build.
|
|
3
3
|
name: "retiring-and-inheriting-a-seat"
|
|
4
|
-
version: "0.6.
|
|
4
|
+
version: "0.6.10"
|
|
5
5
|
taxonomy: "skills"
|
|
6
6
|
purpose: "Use when you are a sitting agent near your context threshold (~85%) and a PLANNED seat transition is due — retire deliberately and hand your seat to a fresh successor primed from a packet, rather than let compaction degrade you. Covers the handover packet, the append-only lineage ledger (one row per tenure), physical-seat continuity, the do-not-over-inherit framing, the optional warm-handoff window, and wake-v0 (consulting a retired predecessor). NOT for unplanned compaction/crash recovery (sess"
|
|
7
7
|
files:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
|
|
2
2
|
# Package-time projection of a canonical skill; regenerated every build.
|
|
3
3
|
name: "seat-continuity-and-handover"
|
|
4
|
-
version: "0.6.
|
|
4
|
+
version: "0.6.10"
|
|
5
5
|
taxonomy: "skills"
|
|
6
6
|
purpose: "Use when replacing a seat's occupant (rebuild/handover/swap), reasoning about stable-seat-identity vs fluid-occupant-identity, choosing an old-occupant disposition (retire/advise/shadow), or recording provenance for an occupant change. Two independent outcomes (continuityOutcome + seatBindingOutcome) and the 5 failure modes that prevent silent dishonesty."
|
|
7
7
|
files:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
|
|
2
2
|
# Package-time projection of a canonical skill; regenerated every build.
|
|
3
3
|
name: "session-compaction-and-restore"
|
|
4
|
-
version: "0.6.
|
|
4
|
+
version: "0.6.10"
|
|
5
5
|
taxonomy: "skills"
|
|
6
6
|
purpose: "Use when reasoning about what survives compaction/context-loss/restart/seat-refresh, designing a high-fidelity restore packet, or distinguishing native runtime resume vs fork vs artifact-backed mental-model rebuild. Covers the 4 failure modes that prevent honest restore (compacted seat drops hot potato; restore packet preserves details but loses product intent; runtime resume mistaken for handover or fork; rebuilt seat starts with stale instructions)."
|
|
7
7
|
files:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
|
|
2
2
|
# Package-time projection of a canonical skill; regenerated every build.
|
|
3
3
|
name: "software-for-agents"
|
|
4
|
-
version: "0.6.
|
|
4
|
+
version: "0.6.10"
|
|
5
5
|
taxonomy: "skills"
|
|
6
6
|
purpose: "Use when older OpenRig instructions name software-for-agents or describe agent-in-the-middle or studio software under the former skill name."
|
|
7
7
|
files:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,KAAK,EACV,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAChD,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAC3E,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,iCAAiC,CAAC;AAEvF,OAAO,
|
|
1
|
+
{"version":3,"file":"claude-code-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { resolveConcreteHint } from "../domain/runtime-adapter.js";
|
|
|
7
7
|
import { assessNativeResumeProbe } from "../domain/native-resume-probe.js";
|
|
8
8
|
import { observeClaudePaneProcess } from "../domain/native-process-lineage.js";
|
|
9
9
|
import { mergeManagedBlock, DEFAULT_CLAUDE_MANAGED_BLOCK_FILE } from "../domain/managed-blocks.js";
|
|
10
|
+
import { claudeResumeLaunchEnv, claudeResumeLaunchPrefix } from "./claude-resume-launch.js";
|
|
10
11
|
import { shellQuote } from "./shell-quote.js";
|
|
11
12
|
import { validateClaudeActivityHookDelivery, claudeActivityRelayPath, CLAUDE_ACTIVITY_RELAY_RELATIVE_PATH } from "../domain/claude-activity-hooks.js";
|
|
12
13
|
import { observeClaudePermission } from "../domain/permission-drift.js";
|
|
@@ -271,8 +272,8 @@ export class ClaudeCodeAdapter {
|
|
|
271
272
|
}
|
|
272
273
|
const generatedSessionId = opts.resumeToken ? null : this.sessionIdFactory();
|
|
273
274
|
const cmd = managed ? managed.command(["--permission-mode", binding.permissionMode, ...operationalLaunchArgs(this.runtime, binding), ...(model ? ["--model", model] : []), ...(effort ? ["--effort", effort] : []),
|
|
274
|
-
...(opts.resumeToken ? ["--resume", opts.resumeToken] : ["--session-id", generatedSessionId]), "--name", opts.name]) : opts.resumeToken
|
|
275
|
-
? `${rendererPrefix}claude ${permissionMode}${modelArg}${effortArg} --resume ${shellQuote(opts.resumeToken)} --name ${opts.name}`
|
|
275
|
+
...(opts.resumeToken ? ["--resume", opts.resumeToken] : ["--session-id", generatedSessionId]), "--name", opts.name], opts.resumeToken ? claudeResumeLaunchEnv(opts.resumeToken) : undefined) : opts.resumeToken
|
|
276
|
+
? `${claudeResumeLaunchPrefix(opts.resumeToken)}${rendererPrefix}claude ${permissionMode}${modelArg}${effortArg} --resume ${shellQuote(opts.resumeToken)} --name ${opts.name}`
|
|
276
277
|
: `${rendererPrefix}claude ${permissionMode}${modelArg}${effortArg} --session-id ${generatedSessionId} --name ${opts.name}`;
|
|
277
278
|
const textResult = managed ? await this.tmux.sendShellCommand(binding.tmuxSession, cmd, managed.assertCurrent)
|
|
278
279
|
: this.seatLaunchEnvironment
|
|
@@ -286,12 +287,15 @@ export class ClaudeCodeAdapter {
|
|
|
286
287
|
if (!enterResult.ok) {
|
|
287
288
|
return { ok: false, error: `Failed to send Enter: ${enterResult.message}` };
|
|
288
289
|
}
|
|
289
|
-
|
|
290
|
+
const launch = { binding, token: opts.resumeToken ?? generatedSessionId, executable: managed?.executable };
|
|
291
|
+
this.autoLaunches.set(binding.nodeId, launch);
|
|
290
292
|
if (opts.resumeToken) {
|
|
291
293
|
const verification = await this.verifyResumeLaunch(binding);
|
|
294
|
+
// The process readiness pinned first, if it observed one: the caller records it, not a later read.
|
|
295
|
+
const launchedProcess = launch.process ? { launchedProcess: { ...launch.process } } : {};
|
|
292
296
|
if (!verification.ok)
|
|
293
|
-
return verification;
|
|
294
|
-
return { ok: true, resumeToken: opts.resumeToken, resumeType: "claude_id", appliedLaunch };
|
|
297
|
+
return { ...verification, ...launchedProcess };
|
|
298
|
+
return { ok: true, resumeToken: opts.resumeToken, resumeType: "claude_id", appliedLaunch, ...launchedProcess };
|
|
295
299
|
}
|
|
296
300
|
// Fresh launches already have an explicit --session-id. A same-name file
|
|
297
301
|
// can belong to another seat sharing the Claude config directory.
|
|
@@ -347,8 +351,13 @@ export class ClaudeCodeAdapter {
|
|
|
347
351
|
const first = await observeClaudePaneProcess(observation);
|
|
348
352
|
if (!first)
|
|
349
353
|
return probe;
|
|
350
|
-
// Pin the first exact process for this launch; retries cannot adopt a replacement.
|
|
351
|
-
launch
|
|
354
|
+
// Pin the first exact process for this launch; retries cannot adopt a replacement. It is also
|
|
355
|
+
// the launch's record of the process it started (#1077).
|
|
356
|
+
if (!launch.fingerprint) {
|
|
357
|
+
launch.fingerprint = first.fingerprint;
|
|
358
|
+
if (first.process.startedAt)
|
|
359
|
+
launch.process = { pid: first.process.pid, startedAt: first.process.startedAt };
|
|
360
|
+
}
|
|
352
361
|
if (first.fingerprint !== launch.fingerprint)
|
|
353
362
|
return probe;
|
|
354
363
|
const native = await observeClaudePaneProcess(observation);
|