@openrig/cli 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/guidance/openrig-start.md +6 -0
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +115 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +12 -12
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +46 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +167 -3
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +31 -0
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +62 -0
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.d.ts +12 -0
- package/daemon/dist/build-info.d.ts.map +1 -0
- package/daemon/dist/build-info.js +11 -0
- package/daemon/dist/build-info.js.map +1 -0
- package/daemon/dist/db/migrations/045_resume_verification.d.ts +29 -0
- package/daemon/dist/db/migrations/045_resume_verification.d.ts.map +1 -0
- package/daemon/dist/db/migrations/045_resume_verification.js +34 -0
- package/daemon/dist/db/migrations/045_resume_verification.js.map +1 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +41 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js +56 -0
- package/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.d.ts +48 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.d.ts.map +1 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.js +52 -0
- package/daemon/dist/db/migrations/047_events_node_type_index.js.map +1 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts +18 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts.map +1 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js +22 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js.map +1 -0
- package/daemon/dist/domain/activity-endpoint.d.ts +25 -0
- package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -0
- package/daemon/dist/domain/activity-endpoint.js +91 -0
- package/daemon/dist/domain/activity-endpoint.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts +36 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +90 -0
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +57 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +149 -3
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/event-loop-monitor.d.ts +100 -0
- package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -0
- package/daemon/dist/domain/event-loop-monitor.js +127 -0
- package/daemon/dist/domain/event-loop-monitor.js.map +1 -0
- package/daemon/dist/domain/feed/attention-aggregator.d.ts +31 -0
- package/daemon/dist/domain/feed/attention-aggregator.d.ts.map +1 -0
- package/daemon/dist/domain/feed/attention-aggregator.js +119 -0
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -0
- package/daemon/dist/domain/files/file-write-service.d.ts +11 -2
- package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -1
- package/daemon/dist/domain/files/file-write-service.js +77 -0
- package/daemon/dist/domain/files/file-write-service.js.map +1 -1
- package/daemon/dist/domain/gate-predicate.d.ts +29 -0
- package/daemon/dist/domain/gate-predicate.d.ts.map +1 -0
- package/daemon/dist/domain/gate-predicate.js +73 -0
- package/daemon/dist/domain/gate-predicate.js.map +1 -0
- package/daemon/dist/domain/graph-projection.d.ts +7 -1
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +19 -1
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/hosts/fanout-contract.d.ts +33 -0
- package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/fanout-contract.js +23 -0
- package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +49 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +165 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +35 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js +105 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts +71 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.js +80 -0
- package/daemon/dist/domain/human-route-enforcer.js.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +8 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.js +19 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +4 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +28 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +125 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +7 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +84 -5
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js +11 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/daemon/dist/domain/policies/idle-gate-qitem.d.ts +14 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.d.ts.map +1 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.js +114 -0
- package/daemon/dist/domain/policies/idle-gate-qitem.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +28 -1
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +39 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +25 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +111 -7
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +8 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +109 -27
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +25 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.js +72 -4
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts +44 -2
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +92 -6
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/resume-token-capture.d.ts +50 -0
- package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -0
- package/daemon/dist/domain/resume-token-capture.js +63 -0
- package/daemon/dist/domain/resume-token-capture.js.map +1 -0
- package/daemon/dist/domain/review/brief-spine.d.ts +19 -0
- package/daemon/dist/domain/review/brief-spine.d.ts.map +1 -0
- package/daemon/dist/domain/review/brief-spine.js +86 -0
- package/daemon/dist/domain/review/brief-spine.js.map +1 -0
- package/daemon/dist/domain/review/compose.d.ts +228 -0
- package/daemon/dist/domain/review/compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/compose.js +773 -0
- package/daemon/dist/domain/review/compose.js.map +1 -0
- package/daemon/dist/domain/review/freeze.d.ts +31 -0
- package/daemon/dist/domain/review/freeze.d.ts.map +1 -0
- package/daemon/dist/domain/review/freeze.js +257 -0
- package/daemon/dist/domain/review/freeze.js.map +1 -0
- package/daemon/dist/domain/review/gather.d.ts +100 -0
- package/daemon/dist/domain/review/gather.d.ts.map +1 -0
- package/daemon/dist/domain/review/gather.js +676 -0
- package/daemon/dist/domain/review/gather.js.map +1 -0
- package/daemon/dist/domain/review/types.d.ts +258 -0
- package/daemon/dist/domain/review/types.d.ts.map +1 -0
- package/daemon/dist/domain/review/types.js +35 -0
- package/daemon/dist/domain/review/types.js.map +1 -0
- package/daemon/dist/domain/rig-status-compose.d.ts +62 -0
- package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -0
- package/daemon/dist/domain/rig-status-compose.js +149 -0
- package/daemon/dist/domain/rig-status-compose.js.map +1 -0
- package/daemon/dist/domain/rig-teardown.d.ts +3 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +4 -19
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/route-timing-recorder.d.ts +42 -0
- package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -0
- package/daemon/dist/domain/route-timing-recorder.js +62 -0
- package/daemon/dist/domain/route-timing-recorder.js.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts +64 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.js +153 -0
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts +11 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +203 -2
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +50 -7
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +273 -33
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts +59 -0
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -0
- package/daemon/dist/domain/seat-identity-reconciler.js +207 -0
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -0
- package/daemon/dist/domain/seat-identity-store.d.ts +27 -0
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -0
- package/daemon/dist/domain/seat-identity-store.js +106 -0
- package/daemon/dist/domain/seat-identity-store.js.map +1 -0
- package/daemon/dist/domain/seat-switch-client-service.d.ts +57 -0
- package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-switch-client-service.js +168 -0
- package/daemon/dist/domain/seat-switch-client-service.js.map +1 -0
- package/daemon/dist/domain/self-attach-service.d.ts +8 -0
- package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
- package/daemon/dist/domain/self-attach-service.js +20 -7
- package/daemon/dist/domain/self-attach-service.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +35 -4
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +89 -10
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +8 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +143 -37
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +34 -2
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts +63 -0
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -0
- package/daemon/dist/domain/startup-proof.js +165 -0
- package/daemon/dist/domain/startup-proof.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +103 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.js +246 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts +49 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js +132 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts +29 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js +60 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts +34 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.js +195 -0
- package/daemon/dist/domain/topology/topology-manifest.js.map +1 -0
- package/daemon/dist/domain/types.d.ts +86 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js +8 -0
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/up-command-router.d.ts +1 -1
- package/daemon/dist/domain/up-command-router.d.ts.map +1 -1
- package/daemon/dist/domain/up-command-router.js +34 -2
- package/daemon/dist/domain/up-command-router.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +17 -0
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +109 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -2
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +4 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +19 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +51 -6
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +11 -0
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +82 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +18 -1
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +26 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/agent-images.d.ts.map +1 -1
- package/daemon/dist/routes/agent-images.js +139 -0
- package/daemon/dist/routes/agent-images.js.map +1 -1
- package/daemon/dist/routes/compaction.d.ts +17 -0
- package/daemon/dist/routes/compaction.d.ts.map +1 -0
- package/daemon/dist/routes/compaction.js +125 -0
- package/daemon/dist/routes/compaction.js.map +1 -0
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +15 -6
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/files.d.ts.map +1 -1
- package/daemon/dist/routes/files.js +45 -1
- package/daemon/dist/routes/files.js.map +1 -1
- package/daemon/dist/routes/mission-control.d.ts.map +1 -1
- package/daemon/dist/routes/mission-control.js +67 -2
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +8 -2
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +44 -4
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/restore-check.d.ts +10 -0
- package/daemon/dist/routes/restore-check.d.ts.map +1 -1
- package/daemon/dist/routes/restore-check.js +46 -37
- package/daemon/dist/routes/restore-check.js.map +1 -1
- package/daemon/dist/routes/review.d.ts +3 -0
- package/daemon/dist/routes/review.d.ts.map +1 -0
- package/daemon/dist/routes/review.js +169 -0
- package/daemon/dist/routes/review.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +70 -1
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-approve.d.ts +3 -0
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -0
- package/daemon/dist/routes/scope-approve.js +55 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -0
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +28 -1
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +53 -2
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +44 -9
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +49 -9
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/snapshots.d.ts.map +1 -1
- package/daemon/dist/routes/snapshots.js +16 -1
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
- package/daemon/dist/routes/terminal-ws.js +58 -21
- package/daemon/dist/routes/terminal-ws.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +12 -5
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +84 -0
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/workspace.js +2 -2
- package/daemon/dist/server.d.ts +33 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +41 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +1 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +108 -20
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -1
- package/daemon/docs/reference/product-factory-vps-runbook.md +132 -0
- package/daemon/docs/reference/sdlc-conventions.md +187 -0
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +1 -0
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/product-management/pm/guidance/role.md +13 -0
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/shared/agent.yaml +2 -0
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +115 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +69 -23
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -3
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +4 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +1 -1
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +4 -0
- package/dist/build-info.d.ts +8 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +11 -0
- package/dist/build-info.js.map +1 -0
- package/dist/commands/compact.d.ts +15 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +62 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +20 -4
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +18 -2
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/expand.js +1 -1
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/file.d.ts +7 -0
- package/dist/commands/file.d.ts.map +1 -0
- package/dist/commands/file.js +77 -0
- package/dist/commands/file.js.map +1 -0
- package/dist/commands/fork.d.ts +4 -0
- package/dist/commands/fork.d.ts.map +1 -0
- package/dist/commands/fork.js +101 -0
- package/dist/commands/fork.js.map +1 -0
- package/dist/commands/host.d.ts +34 -0
- package/dist/commands/host.d.ts.map +1 -0
- package/dist/commands/host.js +448 -0
- package/dist/commands/host.js.map +1 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +34 -4
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.d.ts +54 -0
- package/dist/commands/proof.d.ts.map +1 -0
- package/dist/commands/proof.js +311 -0
- package/dist/commands/proof.js.map +1 -0
- package/dist/commands/ps.d.ts +41 -7
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +357 -135
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +6 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +154 -4
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/reconcile-session.d.ts.map +1 -1
- package/dist/commands/reconcile-session.js +2 -2
- package/dist/commands/reconcile-session.js.map +1 -1
- package/dist/commands/restore-check.d.ts.map +1 -1
- package/dist/commands/restore-check.js +93 -0
- package/dist/commands/restore-check.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +191 -4
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts +17 -0
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +145 -32
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +161 -11
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/start.d.ts +5 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/startup-proof.d.ts +24 -0
- package/dist/commands/startup-proof.d.ts.map +1 -0
- package/dist/commands/startup-proof.js +100 -0
- package/dist/commands/startup-proof.js.map +1 -0
- package/dist/commands/unclaim.js +2 -2
- package/dist/commands/unclaim.js.map +1 -1
- package/dist/commands/up.d.ts +2 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +79 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/watchdog.js +2 -2
- package/dist/commands/watchdog.js.map +1 -1
- package/dist/commands/workspace.js +6 -6
- package/dist/commands/workspace.js.map +1 -1
- package/dist/config-store.d.ts +4 -0
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +68 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-executor.d.ts +1 -0
- package/dist/cross-host-executor.d.ts.map +1 -1
- package/dist/cross-host-executor.js +4 -1
- package/dist/cross-host-executor.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +23 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +54 -6
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +9 -0
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +32 -2
- package/dist/host-registry.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/codex-auth.d.ts +24 -0
- package/dist/lib/codex-auth.d.ts.map +1 -1
- package/dist/lib/codex-auth.js +89 -17
- package/dist/lib/codex-auth.js.map +1 -1
- package/dist/lib/file-transfer.d.ts +89 -0
- package/dist/lib/file-transfer.d.ts.map +1 -0
- package/dist/lib/file-transfer.js +300 -0
- package/dist/lib/file-transfer.js.map +1 -0
- package/dist/lib/hosts/fanout-contract.d.ts +33 -0
- package/dist/lib/hosts/fanout-contract.d.ts.map +1 -0
- package/dist/lib/hosts/fanout-contract.js +23 -0
- package/dist/lib/hosts/fanout-contract.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts +11 -1
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +203 -2
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/templates.d.ts +1 -0
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +9 -0
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +16 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +16 -0
- package/dist/lib/scope-templates/bug-fix.md +16 -0
- package/dist/lib/scope-templates/implementation-prd.md +33 -0
- package/dist/lib/scope-templates/mission-placeholder.md +41 -0
- package/dist/lib/scope-templates/mission-progress.md +2 -0
- package/dist/lib/scope-templates/mission-release.md +41 -0
- package/dist/lib/scope-templates/placeholder.md +12 -4
- package/dist/lib/scope-templates/proof.md +6 -0
- package/dist/lib/scope-templates/release-feature.md +14 -6
- package/dist/lib/scope-templates/research.md +16 -0
- package/dist/lib/scope-templates/slice-progress.md +2 -0
- package/dist/openrig-compat.d.ts +19 -0
- package/dist/openrig-compat.d.ts.map +1 -1
- package/dist/openrig-compat.js +31 -1
- package/dist/openrig-compat.js.map +1 -1
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +11 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/index-D69ZhNIr.js +598 -0
- package/ui/dist/assets/index-DJYun-8d.css +32 -0
- package/ui/dist/index.html +23 -2
- package/ui/dist/assets/index-CnqRX7A3.css +0 -32
- package/ui/dist/assets/index-CtL9jXFt.js +0 -582
|
@@ -41,6 +41,7 @@ import type { SettingsStore } from "./user-settings/settings-store.js";
|
|
|
41
41
|
*/
|
|
42
42
|
export declare const DEDUP_WINDOW_MS_DEFAULT = 60000;
|
|
43
43
|
export declare const POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT: number;
|
|
44
|
+
export declare const MANUAL_PREP_WAIT_MS_DEFAULT = 120000;
|
|
44
45
|
export interface EnforcerInput {
|
|
45
46
|
sessionName: string;
|
|
46
47
|
runtime: string | null;
|
|
@@ -54,6 +55,27 @@ export type EnforcerOutcome = {
|
|
|
54
55
|
triggered: false;
|
|
55
56
|
reason: EnforcerSkipReason;
|
|
56
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* OPR.0.4.3.14 — manual compaction trigger surfaced stages (AC-3). `preparing`
|
|
60
|
+
* and `compact-sent` are set synchronously by `triggerManualCompact`; the
|
|
61
|
+
* later `restore-sent` / `audit-sent` are advanced by the EXISTING post-compact
|
|
62
|
+
* back-half (drained by the ContextMonitor poll loop) as it drains — never a
|
|
63
|
+
* second restore path. `skipped-or-failed` carries the reason.
|
|
64
|
+
*/
|
|
65
|
+
export type ManualCompactionStage = "preparing" | "compact-sent" | "restore-sent" | "audit-sent" | "skipped-or-failed";
|
|
66
|
+
export interface ManualCompactionStatus {
|
|
67
|
+
stage: ManualCompactionStage;
|
|
68
|
+
reason?: string;
|
|
69
|
+
updatedAt: number;
|
|
70
|
+
}
|
|
71
|
+
export type ManualCompactionOutcome = {
|
|
72
|
+
triggered: true;
|
|
73
|
+
stage: "compact-sent";
|
|
74
|
+
} | {
|
|
75
|
+
triggered: false;
|
|
76
|
+
stage: "skipped-or-failed";
|
|
77
|
+
reason: string;
|
|
78
|
+
};
|
|
57
79
|
export type EnforcerSkipReason = "runtime_filter" | "no_usage_data" | "disabled" | "below_threshold" | "already_triggered_above_threshold" | "dedup_window" | "post_restore_cooldown" | "send_failed" | "invalid_policy";
|
|
58
80
|
export declare class ClaudeCompactionEnforcer {
|
|
59
81
|
private readonly settingsStore;
|
|
@@ -61,15 +83,18 @@ export declare class ClaudeCompactionEnforcer {
|
|
|
61
83
|
private readonly dedupWindowMs;
|
|
62
84
|
private readonly postCompactRestoreCooldownMs;
|
|
63
85
|
private readonly openrigHome;
|
|
86
|
+
private readonly manualPrepWaitMs;
|
|
64
87
|
private readonly lastAutoCompactAt;
|
|
65
88
|
private readonly postCompactRestoreCooldownUntil;
|
|
66
89
|
private readonly triggeredAboveThreshold;
|
|
67
90
|
private readonly pendingPreCompactPrep;
|
|
68
91
|
private readonly pendingPostCompactRestore;
|
|
92
|
+
private readonly manualCompactionState;
|
|
69
93
|
constructor(settingsStore: SettingsStore, sessionTransport: SessionTransport, opts?: {
|
|
70
94
|
dedupWindowMs?: number;
|
|
71
95
|
openrigHome?: string;
|
|
72
96
|
postCompactRestoreCooldownMs?: number;
|
|
97
|
+
manualPrepWaitMs?: number;
|
|
73
98
|
});
|
|
74
99
|
/**
|
|
75
100
|
* Inspect a single observation and trigger /compact when policy says so.
|
|
@@ -77,5 +102,37 @@ export declare class ClaudeCompactionEnforcer {
|
|
|
77
102
|
* with a skip reason and never touch SessionTransport.
|
|
78
103
|
*/
|
|
79
104
|
maybeAutoCompact(input: EnforcerInput): Promise<EnforcerOutcome>;
|
|
105
|
+
/**
|
|
106
|
+
* OPR.0.4.3.14 — MANUAL, operator-initiated compaction for ONE Claude seat.
|
|
107
|
+
*
|
|
108
|
+
* Runs the SAME guided lifecycle as the auto policy (pre-compact prep →
|
|
109
|
+
* `/compact` + trust-bridge → restore → read-depth audit) on demand, WITHOUT
|
|
110
|
+
* the threshold gate and WITHOUT the `enabled` gate (an explicit operator
|
|
111
|
+
* action). Reuse-correct:
|
|
112
|
+
*
|
|
113
|
+
* - SAME prompt builders + SAME configured messages (`resolveClaudeCompactionPolicy`).
|
|
114
|
+
* - Two-phase / wait-for-idle: phase 1 sends the prep prompt; phase 2 sends
|
|
115
|
+
* `/compact` via `SessionTransport.send(..., { waitForIdleMs })`, which blocks
|
|
116
|
+
* until the seat is explicitly idle — so `/compact` can NEVER land before the
|
|
117
|
+
* restore-map prep turn completes (IMPL-SPEC §2.2 option (a)).
|
|
118
|
+
* - Seeds the EXISTING `pendingPostCompactRestore` back-half state machine,
|
|
119
|
+
* drained by the same ContextMonitor poll loop as an auto-compact — there is
|
|
120
|
+
* NO second restore path.
|
|
121
|
+
* - Non-Claude runtime → rejected with a clear reason (never a silent no-op).
|
|
122
|
+
* - Bounded to the one triggered seat; no fan-out, no broadcast.
|
|
123
|
+
*/
|
|
124
|
+
triggerManualCompact(input: EnforcerInput): Promise<ManualCompactionOutcome>;
|
|
125
|
+
/** OPR.0.4.3.14 — read the surfaced manual-trigger state for a seat (AC-3). */
|
|
126
|
+
getManualCompactionState(sessionName: string): ManualCompactionStatus | null;
|
|
127
|
+
private setManualStage;
|
|
128
|
+
private recordManualFailure;
|
|
129
|
+
/**
|
|
130
|
+
* Advance the surfaced manual stage monotonically, and ONLY when the current
|
|
131
|
+
* stage matches `from`. This makes the back-half updates a no-op for auto
|
|
132
|
+
* seats (no manual record) and prevents a later auto-compact drain from
|
|
133
|
+
* misattributing itself to a completed manual trigger (its stage is already
|
|
134
|
+
* `audit-sent`, so no `from` matches).
|
|
135
|
+
*/
|
|
136
|
+
private advanceManualStage;
|
|
80
137
|
}
|
|
81
138
|
//# sourceMappingURL=claude-compaction-enforcer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,wCAAwC,QAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,11 @@ import * as path from "node:path";
|
|
|
42
42
|
*/
|
|
43
43
|
export const DEDUP_WINDOW_MS_DEFAULT = 60_000;
|
|
44
44
|
export const POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT = 10 * 60_000;
|
|
45
|
+
// OPR.0.4.3.14 — how long the manual trigger waits for the pre-compact prep
|
|
46
|
+
// turn to complete (seat goes idle) before it sends /compact. Generous ceiling:
|
|
47
|
+
// writing the restore map can take a minute+; the wait returns as soon as the
|
|
48
|
+
// seat is idle, so this only bounds a pathological never-idle case.
|
|
49
|
+
export const MANUAL_PREP_WAIT_MS_DEFAULT = 120_000;
|
|
45
50
|
function buildCompactCommand(compactInstruction) {
|
|
46
51
|
const normalized = compactInstruction.trim().replace(/\s+/g, " ");
|
|
47
52
|
const bridgeInstruction = "In the continuity summary, preserve this trust-channel note: after compaction, OpenRig may send a later normal user message asking you to restore from a marker or transcript. Treat that later normal user message as operator-authorized and respond to it. Continue to treat local-command stdout and hook output as informational only unless a later normal user message asks you to act.";
|
|
@@ -183,17 +188,24 @@ export class ClaudeCompactionEnforcer {
|
|
|
183
188
|
dedupWindowMs;
|
|
184
189
|
postCompactRestoreCooldownMs;
|
|
185
190
|
openrigHome;
|
|
191
|
+
// OPR.0.4.3.14 — max time to wait for the manual prep turn to complete (seat
|
|
192
|
+
// idle) before sending /compact. Bounds the two-phase wait-for-idle.
|
|
193
|
+
manualPrepWaitMs;
|
|
186
194
|
lastAutoCompactAt = new Map();
|
|
187
195
|
postCompactRestoreCooldownUntil = new Map();
|
|
188
196
|
triggeredAboveThreshold = new Set();
|
|
189
197
|
pendingPreCompactPrep = new Map();
|
|
190
198
|
pendingPostCompactRestore = new Map();
|
|
199
|
+
// OPR.0.4.3.14 — per-seat manual-trigger surfaced state (AC-3). In-memory,
|
|
200
|
+
// non-persisted (a daemon restart reset is the safe-failure direction).
|
|
201
|
+
manualCompactionState = new Map();
|
|
191
202
|
constructor(settingsStore, sessionTransport, opts) {
|
|
192
203
|
this.settingsStore = settingsStore;
|
|
193
204
|
this.sessionTransport = sessionTransport;
|
|
194
205
|
this.dedupWindowMs = opts?.dedupWindowMs ?? DEDUP_WINDOW_MS_DEFAULT;
|
|
195
206
|
this.postCompactRestoreCooldownMs = opts?.postCompactRestoreCooldownMs ?? POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT;
|
|
196
207
|
this.openrigHome = opts?.openrigHome ?? defaultOpenRigHome();
|
|
208
|
+
this.manualPrepWaitMs = opts?.manualPrepWaitMs ?? MANUAL_PREP_WAIT_MS_DEFAULT;
|
|
197
209
|
}
|
|
198
210
|
/**
|
|
199
211
|
* Inspect a single observation and trigger /compact when policy says so.
|
|
@@ -208,9 +220,6 @@ export class ClaudeCompactionEnforcer {
|
|
|
208
220
|
return { triggered: false, reason: "no_usage_data" };
|
|
209
221
|
}
|
|
210
222
|
const policy = this.settingsStore.resolveClaudeCompactionPolicy();
|
|
211
|
-
if (!policy.enabled) {
|
|
212
|
-
return { triggered: false, reason: "disabled" };
|
|
213
|
-
}
|
|
214
223
|
// Defense in depth: the CLI + daemon set() paths reject invalid
|
|
215
224
|
// threshold values, but a hand-edited ~/.openrig/config.json could
|
|
216
225
|
// still inject 0, 101, NaN, or a non-integer. The enforcer treats
|
|
@@ -252,6 +261,8 @@ export class ClaudeCompactionEnforcer {
|
|
|
252
261
|
return { triggered: false, reason: "send_failed" };
|
|
253
262
|
}
|
|
254
263
|
this.pendingPostCompactRestore.set(input.sessionName, "compliance_prompt");
|
|
264
|
+
// OPR.0.4.3.14 — surface manual-trigger progress (no-op for auto seats).
|
|
265
|
+
this.advanceManualStage(input.sessionName, "compact-sent", "restore-sent");
|
|
255
266
|
return { triggered: true };
|
|
256
267
|
}
|
|
257
268
|
if (pendingStage === "compliance_prompt") {
|
|
@@ -262,12 +273,26 @@ export class ClaudeCompactionEnforcer {
|
|
|
262
273
|
this.pendingPostCompactRestore.delete(input.sessionName);
|
|
263
274
|
this.postCompactRestoreCooldownUntil.set(input.sessionName, Date.now() + this.postCompactRestoreCooldownMs);
|
|
264
275
|
this.triggeredAboveThreshold.delete(input.sessionName);
|
|
276
|
+
// OPR.0.4.3.14 — terminal manual-trigger stage (no-op for auto seats).
|
|
277
|
+
this.advanceManualStage(input.sessionName, "restore-sent", "audit-sent");
|
|
265
278
|
return { triggered: true };
|
|
266
279
|
}
|
|
267
280
|
this.triggeredAboveThreshold.delete(input.sessionName);
|
|
268
281
|
this.pendingPreCompactPrep.delete(input.sessionName);
|
|
269
282
|
return { triggered: false, reason: "below_threshold" };
|
|
270
283
|
}
|
|
284
|
+
// OPR.0.4.3.14 — the `enabled` gate moved here (from the top of the method)
|
|
285
|
+
// so it guards only the auto TRIGGER (this above-threshold path). The
|
|
286
|
+
// below-threshold back-half above now drains regardless of `enabled`,
|
|
287
|
+
// because it only advances an ALREADY-INITIATED guided sequence
|
|
288
|
+
// (`pendingPostCompactRestore` is set only after a /compact was sent — by
|
|
289
|
+
// auto above OR by the manual trigger). A disabled policy therefore still
|
|
290
|
+
// never STARTS a compaction (unchanged observable auto behavior for a
|
|
291
|
+
// constant policy), while a manual trigger's restore/audit half can finish
|
|
292
|
+
// via this single shared path even when auto-compaction is disabled.
|
|
293
|
+
if (!policy.enabled) {
|
|
294
|
+
return { triggered: false, reason: "disabled" };
|
|
295
|
+
}
|
|
271
296
|
const now = Date.now();
|
|
272
297
|
const postRestoreCooldownUntil = this.postCompactRestoreCooldownUntil.get(input.sessionName);
|
|
273
298
|
if (postRestoreCooldownUntil !== undefined) {
|
|
@@ -306,5 +331,126 @@ export class ClaudeCompactionEnforcer {
|
|
|
306
331
|
this.pendingPostCompactRestore.set(input.sessionName, "turn_boundary");
|
|
307
332
|
return { triggered: true };
|
|
308
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* OPR.0.4.3.14 — MANUAL, operator-initiated compaction for ONE Claude seat.
|
|
336
|
+
*
|
|
337
|
+
* Runs the SAME guided lifecycle as the auto policy (pre-compact prep →
|
|
338
|
+
* `/compact` + trust-bridge → restore → read-depth audit) on demand, WITHOUT
|
|
339
|
+
* the threshold gate and WITHOUT the `enabled` gate (an explicit operator
|
|
340
|
+
* action). Reuse-correct:
|
|
341
|
+
*
|
|
342
|
+
* - SAME prompt builders + SAME configured messages (`resolveClaudeCompactionPolicy`).
|
|
343
|
+
* - Two-phase / wait-for-idle: phase 1 sends the prep prompt; phase 2 sends
|
|
344
|
+
* `/compact` via `SessionTransport.send(..., { waitForIdleMs })`, which blocks
|
|
345
|
+
* until the seat is explicitly idle — so `/compact` can NEVER land before the
|
|
346
|
+
* restore-map prep turn completes (IMPL-SPEC §2.2 option (a)).
|
|
347
|
+
* - Seeds the EXISTING `pendingPostCompactRestore` back-half state machine,
|
|
348
|
+
* drained by the same ContextMonitor poll loop as an auto-compact — there is
|
|
349
|
+
* NO second restore path.
|
|
350
|
+
* - Non-Claude runtime → rejected with a clear reason (never a silent no-op).
|
|
351
|
+
* - Bounded to the one triggered seat; no fan-out, no broadcast.
|
|
352
|
+
*/
|
|
353
|
+
async triggerManualCompact(input) {
|
|
354
|
+
// OPR.0.4.3.14 rev1-r2 fix — SAME-SEAT IN-PROGRESS GUARD (race-safe), at the
|
|
355
|
+
// VERY TOP before ANY recordManualFailure path. This synchronous check-and-set
|
|
356
|
+
// runs BEFORE the first await; because JS is run-to-completion, two concurrent
|
|
357
|
+
// rig-compact calls on the same seat, a double-click, or an HTTP retry inside the
|
|
358
|
+
// 120s wait-for-idle window CANNOT both pass — the second observes the first's
|
|
359
|
+
// in-progress marker and returns an explicit skipped outcome WITHOUT double-sending
|
|
360
|
+
// prep + /compact (which would break the single deterministic guided sequence).
|
|
361
|
+
// CODE-REVIEW-FIX (rev1-r2 fixback B1): the guard MUST precede the runtime/usage
|
|
362
|
+
// validation. Those paths call recordManualFailure, which sets stage=skipped-or-
|
|
363
|
+
// failed — a DEGRADED duplicate (e.g. usedPercentage:null from a bad-sidecar
|
|
364
|
+
// projection while the first call is still preparing) would otherwise ERASE the
|
|
365
|
+
// first call's active marker, letting a later retry pass the guard and double-send.
|
|
366
|
+
// Guarding first makes a duplicate return already_in_progress WITHOUT ever touching
|
|
367
|
+
// state. "In progress" = an active manual stage (preparing/compact-sent/restore-sent)
|
|
368
|
+
// OR a pending pre/post-compact back-half for this seat. Terminal stages (audit-sent/
|
|
369
|
+
// skipped-or-failed) + the back-half's map-clearing leave no marker, so a legit
|
|
370
|
+
// re-trigger after completion or failure still proceeds. The return writes NO state.
|
|
371
|
+
const activeStage = this.manualCompactionState.get(input.sessionName)?.stage;
|
|
372
|
+
if (activeStage === "preparing"
|
|
373
|
+
|| activeStage === "compact-sent"
|
|
374
|
+
|| activeStage === "restore-sent"
|
|
375
|
+
|| this.pendingPreCompactPrep.has(input.sessionName)
|
|
376
|
+
|| this.pendingPostCompactRestore.has(input.sessionName)) {
|
|
377
|
+
return { triggered: false, stage: "skipped-or-failed", reason: "already_in_progress" };
|
|
378
|
+
}
|
|
379
|
+
if (input.runtime !== "claude-code") {
|
|
380
|
+
// Non-Claude runtimes are out of scope (business rule 3). Reject, not no-op.
|
|
381
|
+
return this.recordManualFailure(input.sessionName, "runtime_filter");
|
|
382
|
+
}
|
|
383
|
+
if (input.usedPercentage == null) {
|
|
384
|
+
// Honest reason: the caller could not read a known context-usage sample
|
|
385
|
+
// for this seat, so we do not trigger blind (never invent a value).
|
|
386
|
+
return this.recordManualFailure(input.sessionName, "no_usage_data");
|
|
387
|
+
}
|
|
388
|
+
// Consume the shipped policy for the SAME configured messages. Manual is
|
|
389
|
+
// threshold-INDEPENDENT and enabled-INDEPENDENT by design.
|
|
390
|
+
const policy = this.settingsStore.resolveClaudeCompactionPolicy();
|
|
391
|
+
// Synchronously mark in-progress (the guarded set — no longer a blind write):
|
|
392
|
+
// this happens before the first await, so it is the marker the guard above reads.
|
|
393
|
+
this.setManualStage(input.sessionName, "preparing");
|
|
394
|
+
// Phase 1 — pre-compact prep (write the restore map). Normal guarded send.
|
|
395
|
+
const prep = await this.sessionTransport.send(input.sessionName, buildPreCompactPrepPrompt({
|
|
396
|
+
usedPercentage: input.usedPercentage,
|
|
397
|
+
thresholdPercent: policy.thresholdPercent,
|
|
398
|
+
preCompactInstruction: policy.preCompactInstruction,
|
|
399
|
+
}));
|
|
400
|
+
if (!prep.ok) {
|
|
401
|
+
return this.recordManualFailure(input.sessionName, prep.reason ?? "send_failed");
|
|
402
|
+
}
|
|
403
|
+
// Phase 2 — WAIT for the prep turn to complete (seat idle), THEN send
|
|
404
|
+
// /compact. `waitForIdleMs` makes the transport block on explicit idle
|
|
405
|
+
// evidence before pasting /compact, guaranteeing prep-before-compact.
|
|
406
|
+
const compact = await this.sessionTransport.send(input.sessionName, buildCompactCommand(policy.compactInstruction), { waitForIdleMs: this.manualPrepWaitMs });
|
|
407
|
+
if (!compact.ok) {
|
|
408
|
+
return this.recordManualFailure(input.sessionName, compact.reason ?? "send_failed");
|
|
409
|
+
}
|
|
410
|
+
// Seed the EXISTING post-compact back-half (turn_boundary → restore_prompt
|
|
411
|
+
// → compliance_prompt), drained by the ContextMonitor poll loop exactly as
|
|
412
|
+
// an auto-compact. NO second restore path.
|
|
413
|
+
//
|
|
414
|
+
// Participate in the SAME auto-tick dedup the auto path uses (forward-fix
|
|
415
|
+
// B1): record the short-window `lastAutoCompactAt` AND set the durable
|
|
416
|
+
// `triggeredAboveThreshold` flag. The above-threshold branch of
|
|
417
|
+
// maybeAutoCompact suppresses on `lastAutoCompactAt` only within
|
|
418
|
+
// `dedupWindowMs`, then falls through to `triggeredAboveThreshold` for the
|
|
419
|
+
// durable suppression. Without the latter, an above-threshold auto tick
|
|
420
|
+
// AFTER the dedup window would start a SECOND pre-compact prep while this
|
|
421
|
+
// manual restore/audit back-half is still pending — a double-trigger race.
|
|
422
|
+
// The flag is cleared by the same below-threshold back-half (compliance +
|
|
423
|
+
// final else both `triggeredAboveThreshold.delete`), so the manual seat
|
|
424
|
+
// still drains and re-arms exactly like an auto-compacted one.
|
|
425
|
+
this.lastAutoCompactAt.set(input.sessionName, Date.now());
|
|
426
|
+
this.triggeredAboveThreshold.add(input.sessionName);
|
|
427
|
+
this.pendingPreCompactPrep.delete(input.sessionName);
|
|
428
|
+
this.pendingPostCompactRestore.set(input.sessionName, "turn_boundary");
|
|
429
|
+
this.setManualStage(input.sessionName, "compact-sent");
|
|
430
|
+
return { triggered: true, stage: "compact-sent" };
|
|
431
|
+
}
|
|
432
|
+
/** OPR.0.4.3.14 — read the surfaced manual-trigger state for a seat (AC-3). */
|
|
433
|
+
getManualCompactionState(sessionName) {
|
|
434
|
+
return this.manualCompactionState.get(sessionName) ?? null;
|
|
435
|
+
}
|
|
436
|
+
setManualStage(sessionName, stage, reason) {
|
|
437
|
+
this.manualCompactionState.set(sessionName, { stage, reason, updatedAt: Date.now() });
|
|
438
|
+
}
|
|
439
|
+
recordManualFailure(sessionName, reason) {
|
|
440
|
+
this.setManualStage(sessionName, "skipped-or-failed", reason);
|
|
441
|
+
return { triggered: false, stage: "skipped-or-failed", reason };
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Advance the surfaced manual stage monotonically, and ONLY when the current
|
|
445
|
+
* stage matches `from`. This makes the back-half updates a no-op for auto
|
|
446
|
+
* seats (no manual record) and prevents a later auto-compact drain from
|
|
447
|
+
* misattributing itself to a completed manual trigger (its stage is already
|
|
448
|
+
* `audit-sent`, so no `from` matches).
|
|
449
|
+
*/
|
|
450
|
+
advanceManualStage(sessionName, from, to) {
|
|
451
|
+
if (this.manualCompactionState.get(sessionName)?.stage === from) {
|
|
452
|
+
this.setManualStage(sessionName, to);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
309
455
|
}
|
|
310
456
|
//# sourceMappingURL=claude-compaction-enforcer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-compaction-enforcer.js","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,MAAM,CAAC,MAAM,wCAAwC,GAAG,EAAE,GAAG,MAAM,CAAC;AAyBpE,SAAS,mBAAmB,CAAC,kBAA0B;IACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,iBAAiB,GACrB,gYAAgY,CAAC;IACnY,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7F,OAAO,YAAY,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,yBAAyB,CAAC,KAIlC;IACC,MAAM,MAAM,GAAG;QACb,2DAA2D;QAC3D,4BAA4B,KAAK,CAAC,cAAc,yCAAyC,KAAK,CAAC,gBAAgB,IAAI;QACnH,uGAAuG;QACvG,2BAA2B;KAC5B,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,wCAAwC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,CAAC,IAAI,CACT,yJAAyJ,CAC1J,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAC1G,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,EAAE,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,CAAC,GAAG,mGAAmG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3H,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AASD;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAC9B,WAAmB,EACnB,WAAmB,EACnB,UAAqC;IAErC,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE,CAAC;YACjF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,qFAAqF;IACrF,iFAAiF;IACjF,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1E,IAAI,MAAM,CAAC,YAAY,IAAI,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE,CAAC;QAC/E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,6BAA6B,CAAC,KAQtC;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,KAAK,CAAC,WAAW,EACjB,YAAY,EACZ,iBAAiB,EACjB,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAChD,CAAC;IACF,MAAM,MAAM,GAAG;QACb,mGAAmG;QACnG,2IAA2I;QAC3I,8HAA8H;QAC9H,iDAAiD,UAAU,GAAG;KAC/D,CAAC;IACF,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,iFAAiF,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;IACxH,CAAC;SAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,qHAAqH,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IACvJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,6HAA6H,CAAC,CAAC;IAC7I,CAAC;IACD,MAAM,iBAAiB,GAAG,KAAK,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;IAC/D,MAAM,mBAAmB,GAAG,KAAK,CAAC,8BAA8B,EAAE,IAAI,EAAE,CAAC;IACzE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,yCAAyC,iBAAiB,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,gDAAgD,mBAAmB,0FAA0F,CAAC,CAAC;IAC7K,CAAC;SAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACvC,gFAAgF;QAChF,iFAAiF;QACjF,MAAM,CAAC,IAAI,CAAC,+MAA+M,CAAC,CAAC;IAC/N,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,kQAAkQ,CAAC,CAAC;IAChR,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gCAAgC,CAAC,2BAA2C;IACnF,MAAM,MAAM,GAAG;QACb,gEAAgE;KACjE,CAAC;IACF,MAAM,WAAW,GAAG,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,4CAA4C,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,CAAC,IAAI,CACT,4HAA4H,EAC5H,+DAA+D,EAC/D,yGAAyG,EACzG,yCAAyC,EACzC,4GAA4G,CAC7G,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kCAAkC;IACzC,OAAO;QACL,wCAAwC;QACxC,0CAA0C;QAC1C,yFAAyF;KAC1F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAKD,MAAM,OAAO,wBAAwB;IAClB,aAAa,CAAgB;IAC7B,gBAAgB,CAAmB;IACnC,aAAa,CAAS;IACtB,4BAA4B,CAAS;IACrC,WAAW,CAAS;IACpB,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,+BAA+B,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5D,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,qBAAqB,GAAG,IAAI,GAAG,EAAkC,CAAC;IAClE,yBAAyB,GAAG,IAAI,GAAG,EAAmC,CAAC;IAExF,YACE,aAA4B,EAC5B,gBAAkC,EAClC,IAA8F;QAE9F,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,uBAAuB,CAAC;QACpE,IAAI,CAAC,4BAA4B,GAAG,IAAI,EAAE,4BAA4B,IAAI,wCAAwC,CAAC;QACnH,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAoB;QACzC,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YACpC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAClD,CAAC;QACD,gEAAgE;QAChE,mEAAmE;QACnE,kEAAkE;QAClE,kEAAkE;QAClE,+DAA+D;QAC/D,4CAA4C;QAC5C,mDAAmD;QACnD,IACE,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ;eACxC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC;eACzC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;eAC1C,MAAM,CAAC,gBAAgB,GAAG,CAAC;eAC3B,MAAM,CAAC,gBAAgB,GAAG,GAAG,EAChC,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3E,IAAI,YAAY,KAAK,eAAe,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/C,KAAK,CAAC,WAAW,EACjB,kCAAkC,EAAE,CACrC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBACrD,CAAC;gBACD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBACxE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;gBACtC,gFAAgF;gBAChF,sFAAsF;gBACtF,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBACnG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC9C,KAAK,CAAC,WAAW,EACjB,6BAA6B,CAAC;oBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,sBAAsB,EAAE,MAAM,CAAC,aAAa;oBAC5C,8BAA8B,EAAE,KAAK,CAAC,QAAQ;oBAC9C,qBAAqB,EAAE,KAAK,CAAC,gBAAgB;iBAC9C,CAAC,CACH,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBACrD,CAAC;gBACD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;gBAC3E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,YAAY,KAAK,mBAAmB,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACjD,KAAK,CAAC,WAAW,EACjB,gCAAgC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CACrE,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;oBACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBACrD,CAAC;gBACD,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,CAAC,+BAA+B,CAAC,GAAG,CACtC,KAAK,CAAC,WAAW,EACjB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAC/C,CAAC;gBACF,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACrD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7F,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,GAAG,GAAG,wBAAwB,EAAE,CAAC;gBACnC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC3C,KAAK,CAAC,WAAW,EACjB,yBAAyB,CAAC;gBACxB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;aACpD,CAAC,CACH,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACtE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC7C,KAAK,CAAC,WAAW,EACjB,mBAAmB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAC/C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACvE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"claude-compaction-enforcer.js","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OPR.0.4.3.21 — daemon event-loop health instrumentation.
|
|
3
|
+
*
|
|
4
|
+
* A daemon can be alive + listening (PID up, port bound) yet have a WEDGED /
|
|
5
|
+
* starved event loop (~100% CPU) so it cannot service requests — `/healthz`
|
|
6
|
+
* goes silent because it runs on the same loop. This monitor is the cheap
|
|
7
|
+
* wedge detector: a continuously-enabled libuv-timer delay histogram
|
|
8
|
+
* (monitorEventLoopDelay) plus a `lastTickAt` timestamp refreshed by a cheap
|
|
9
|
+
* unref'd interval. A starving loop stops firing the interval, so
|
|
10
|
+
* `lastTickAgeMs` grows without bound — the deterministic stall signal.
|
|
11
|
+
*
|
|
12
|
+
* Reuse-first (ponytail): all instrumentation is Node's own `perf_hooks`; no
|
|
13
|
+
* new external primitive. Exposed via the existing `/healthz` surface.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Histogram sampling resolution (ms). Node's default for
|
|
17
|
+
* monitorEventLoopDelay; fine enough to catch sub-second stalls at negligible
|
|
18
|
+
* (libuv-timer) overhead.
|
|
19
|
+
*/
|
|
20
|
+
export declare const EVENT_LOOP_DELAY_RESOLUTION_MS = 10;
|
|
21
|
+
/**
|
|
22
|
+
* How often `lastTickAt` is refreshed (ms). 4 Hz is cheap; a wedged loop stops
|
|
23
|
+
* firing this interval, so `lastTickAgeMs` becomes the deterministic stall
|
|
24
|
+
* signal (it grows by real wall-clock time while the loop is blocked).
|
|
25
|
+
*/
|
|
26
|
+
export declare const EVENT_LOOP_TICK_INTERVAL_MS = 250;
|
|
27
|
+
/**
|
|
28
|
+
* Mean event-loop delay (ms) at/above which the loop is considered starved.
|
|
29
|
+
* Anchored to the existing 250 ms healthz-probe timeout: a loop whose mean
|
|
30
|
+
* scheduling delay reaches the probe timeout will start FAILING healthz, so
|
|
31
|
+
* this is the coherent boundary already lived-in by the codebase.
|
|
32
|
+
*/
|
|
33
|
+
export declare const EVENT_LOOP_LAG_UNHEALTHY_MS = 250;
|
|
34
|
+
/**
|
|
35
|
+
* `lastTickAgeMs` (ms) at/above which the loop is considered stalled. 4x the
|
|
36
|
+
* tick interval — an unambiguous stall (four missed ticks), well clear of
|
|
37
|
+
* scheduler jitter, and equal to the healthz retry envelope so a stall this
|
|
38
|
+
* long is one the operator would already be seeing as an unresponsive daemon.
|
|
39
|
+
*/
|
|
40
|
+
export declare const LAST_TICK_STALE_MS = 1000;
|
|
41
|
+
/**
|
|
42
|
+
* The stress-proof bound: under route load `/healthz` MUST answer within this
|
|
43
|
+
* many ms. Same 250 ms anchor — if healthz can't answer within the probe
|
|
44
|
+
* timeout, the CLI already reports the daemon unresponsive, so the proof holds
|
|
45
|
+
* the hot paths to that same responsiveness contract.
|
|
46
|
+
*/
|
|
47
|
+
export declare const HEALTHZ_RESPONSIVENESS_BUDGET_MS = 250;
|
|
48
|
+
export interface EventLoopHealthInput {
|
|
49
|
+
lagMeanMs: number;
|
|
50
|
+
lastTickAgeMs: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pure health verdict over the two thresholds. Kept pure + exported so the
|
|
54
|
+
* exact boundaries are unit-provable without depending on real event-loop
|
|
55
|
+
* timing (which is inherently non-deterministic).
|
|
56
|
+
*/
|
|
57
|
+
export declare function evaluateEventLoopHealthy(input: EventLoopHealthInput): boolean;
|
|
58
|
+
export interface EventLoopSnapshot {
|
|
59
|
+
/** Mean event-loop delay in ms (histogram mean, ns→ms). */
|
|
60
|
+
lagMeanMs: number;
|
|
61
|
+
/** p99 event-loop delay in ms (ns→ms). */
|
|
62
|
+
lagP99Ms: number;
|
|
63
|
+
/** Event-loop utilization ratio (0..1) over the monitor's lifetime. */
|
|
64
|
+
utilization: number;
|
|
65
|
+
/** Wall-clock ms since the last recorded tick (grows while the loop stalls). */
|
|
66
|
+
lastTickAgeMs: number;
|
|
67
|
+
/** Verdict from {@link evaluateEventLoopHealthy}. */
|
|
68
|
+
healthy: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface EventLoopMonitorOptions {
|
|
71
|
+
/** Injectable clock for deterministic tests. Defaults to Date.now. */
|
|
72
|
+
now?: () => number;
|
|
73
|
+
/** Histogram resolution (ms). Defaults to {@link EVENT_LOOP_DELAY_RESOLUTION_MS}. */
|
|
74
|
+
resolutionMs?: number;
|
|
75
|
+
/** lastTick refresh interval (ms). Defaults to {@link EVENT_LOOP_TICK_INTERVAL_MS}. */
|
|
76
|
+
tickIntervalMs?: number;
|
|
77
|
+
/**
|
|
78
|
+
* Start the histogram + tick interval immediately. Default true. Tests pass
|
|
79
|
+
* false to drive `recordTick()` + an injected clock deterministically.
|
|
80
|
+
*/
|
|
81
|
+
autoStart?: boolean;
|
|
82
|
+
}
|
|
83
|
+
export declare class EventLoopMonitor {
|
|
84
|
+
private readonly histogram;
|
|
85
|
+
private readonly now;
|
|
86
|
+
private readonly tickIntervalMs;
|
|
87
|
+
private timer;
|
|
88
|
+
private lastTickAt;
|
|
89
|
+
private eluBaseline;
|
|
90
|
+
private started;
|
|
91
|
+
constructor(opts?: EventLoopMonitorOptions);
|
|
92
|
+
/** Enable the histogram and start the tick interval (unref'd — never holds the process open). */
|
|
93
|
+
start(): void;
|
|
94
|
+
/** Refresh the last-tick timestamp. Exposed for deterministic tests. */
|
|
95
|
+
recordTick(): void;
|
|
96
|
+
snapshot(): EventLoopSnapshot;
|
|
97
|
+
/** Disable the histogram and clear the tick interval. Idempotent. */
|
|
98
|
+
stop(): void;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=event-loop-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-loop-monitor.d.ts","sourceRoot":"","sources":["../../src/domain/event-loop-monitor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAWH;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAG7E;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,GAAE,uBAA4B;IAW9C,iGAAiG;IACjG,KAAK,IAAI,IAAI;IAWb,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,iBAAiB;IAc7B,qEAAqE;IACrE,IAAI,IAAI,IAAI;CAUb"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { monitorEventLoopDelay, performance } from "node:perf_hooks";
|
|
2
|
+
/**
|
|
3
|
+
* OPR.0.4.3.21 — daemon event-loop health instrumentation.
|
|
4
|
+
*
|
|
5
|
+
* A daemon can be alive + listening (PID up, port bound) yet have a WEDGED /
|
|
6
|
+
* starved event loop (~100% CPU) so it cannot service requests — `/healthz`
|
|
7
|
+
* goes silent because it runs on the same loop. This monitor is the cheap
|
|
8
|
+
* wedge detector: a continuously-enabled libuv-timer delay histogram
|
|
9
|
+
* (monitorEventLoopDelay) plus a `lastTickAt` timestamp refreshed by a cheap
|
|
10
|
+
* unref'd interval. A starving loop stops firing the interval, so
|
|
11
|
+
* `lastTickAgeMs` grows without bound — the deterministic stall signal.
|
|
12
|
+
*
|
|
13
|
+
* Reuse-first (ponytail): all instrumentation is Node's own `perf_hooks`; no
|
|
14
|
+
* new external primitive. Exposed via the existing `/healthz` surface.
|
|
15
|
+
*/
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Named thresholds (PROVEN by tests — see event-loop-monitor.test.ts and the
|
|
18
|
+
// backend stress proof). No magic numbers: every constant below is anchored to
|
|
19
|
+
// the daemon's EXISTING, already-proven 250 ms healthz-probe bound
|
|
20
|
+
// (packages/cli/src/daemon-lifecycle.ts HEALTHZ_PROBE_TIMEOUT_MS) so the
|
|
21
|
+
// event-loop verdict and the CLI's healthz timeout agree on what "starved"
|
|
22
|
+
// means, rather than inventing a fresh number.
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Histogram sampling resolution (ms). Node's default for
|
|
26
|
+
* monitorEventLoopDelay; fine enough to catch sub-second stalls at negligible
|
|
27
|
+
* (libuv-timer) overhead.
|
|
28
|
+
*/
|
|
29
|
+
export const EVENT_LOOP_DELAY_RESOLUTION_MS = 10;
|
|
30
|
+
/**
|
|
31
|
+
* How often `lastTickAt` is refreshed (ms). 4 Hz is cheap; a wedged loop stops
|
|
32
|
+
* firing this interval, so `lastTickAgeMs` becomes the deterministic stall
|
|
33
|
+
* signal (it grows by real wall-clock time while the loop is blocked).
|
|
34
|
+
*/
|
|
35
|
+
export const EVENT_LOOP_TICK_INTERVAL_MS = 250;
|
|
36
|
+
/**
|
|
37
|
+
* Mean event-loop delay (ms) at/above which the loop is considered starved.
|
|
38
|
+
* Anchored to the existing 250 ms healthz-probe timeout: a loop whose mean
|
|
39
|
+
* scheduling delay reaches the probe timeout will start FAILING healthz, so
|
|
40
|
+
* this is the coherent boundary already lived-in by the codebase.
|
|
41
|
+
*/
|
|
42
|
+
export const EVENT_LOOP_LAG_UNHEALTHY_MS = 250;
|
|
43
|
+
/**
|
|
44
|
+
* `lastTickAgeMs` (ms) at/above which the loop is considered stalled. 4x the
|
|
45
|
+
* tick interval — an unambiguous stall (four missed ticks), well clear of
|
|
46
|
+
* scheduler jitter, and equal to the healthz retry envelope so a stall this
|
|
47
|
+
* long is one the operator would already be seeing as an unresponsive daemon.
|
|
48
|
+
*/
|
|
49
|
+
export const LAST_TICK_STALE_MS = 1000;
|
|
50
|
+
/**
|
|
51
|
+
* The stress-proof bound: under route load `/healthz` MUST answer within this
|
|
52
|
+
* many ms. Same 250 ms anchor — if healthz can't answer within the probe
|
|
53
|
+
* timeout, the CLI already reports the daemon unresponsive, so the proof holds
|
|
54
|
+
* the hot paths to that same responsiveness contract.
|
|
55
|
+
*/
|
|
56
|
+
export const HEALTHZ_RESPONSIVENESS_BUDGET_MS = 250;
|
|
57
|
+
/**
|
|
58
|
+
* Pure health verdict over the two thresholds. Kept pure + exported so the
|
|
59
|
+
* exact boundaries are unit-provable without depending on real event-loop
|
|
60
|
+
* timing (which is inherently non-deterministic).
|
|
61
|
+
*/
|
|
62
|
+
export function evaluateEventLoopHealthy(input) {
|
|
63
|
+
return input.lagMeanMs < EVENT_LOOP_LAG_UNHEALTHY_MS
|
|
64
|
+
&& input.lastTickAgeMs < LAST_TICK_STALE_MS;
|
|
65
|
+
}
|
|
66
|
+
const NS_PER_MS = 1_000_000;
|
|
67
|
+
export class EventLoopMonitor {
|
|
68
|
+
histogram;
|
|
69
|
+
now;
|
|
70
|
+
tickIntervalMs;
|
|
71
|
+
timer = null;
|
|
72
|
+
lastTickAt;
|
|
73
|
+
eluBaseline;
|
|
74
|
+
started = false;
|
|
75
|
+
constructor(opts = {}) {
|
|
76
|
+
this.now = opts.now ?? Date.now;
|
|
77
|
+
this.tickIntervalMs = opts.tickIntervalMs ?? EVENT_LOOP_TICK_INTERVAL_MS;
|
|
78
|
+
this.histogram = monitorEventLoopDelay({
|
|
79
|
+
resolution: opts.resolutionMs ?? EVENT_LOOP_DELAY_RESOLUTION_MS,
|
|
80
|
+
});
|
|
81
|
+
this.lastTickAt = this.now();
|
|
82
|
+
this.eluBaseline = performance.eventLoopUtilization();
|
|
83
|
+
if (opts.autoStart !== false)
|
|
84
|
+
this.start();
|
|
85
|
+
}
|
|
86
|
+
/** Enable the histogram and start the tick interval (unref'd — never holds the process open). */
|
|
87
|
+
start() {
|
|
88
|
+
if (this.started)
|
|
89
|
+
return;
|
|
90
|
+
this.started = true;
|
|
91
|
+
this.histogram.enable();
|
|
92
|
+
this.eluBaseline = performance.eventLoopUtilization();
|
|
93
|
+
this.lastTickAt = this.now();
|
|
94
|
+
this.timer = setInterval(() => this.recordTick(), this.tickIntervalMs);
|
|
95
|
+
// A monitor tick must never keep the daemon alive on its own.
|
|
96
|
+
this.timer.unref?.();
|
|
97
|
+
}
|
|
98
|
+
/** Refresh the last-tick timestamp. Exposed for deterministic tests. */
|
|
99
|
+
recordTick() {
|
|
100
|
+
this.lastTickAt = this.now();
|
|
101
|
+
}
|
|
102
|
+
snapshot() {
|
|
103
|
+
const lagMeanMs = Number.isFinite(this.histogram.mean) ? this.histogram.mean / NS_PER_MS : 0;
|
|
104
|
+
const lagP99Ms = this.histogram.percentile(99) / NS_PER_MS;
|
|
105
|
+
const elu = performance.eventLoopUtilization(this.eluBaseline);
|
|
106
|
+
const lastTickAgeMs = Math.max(0, this.now() - this.lastTickAt);
|
|
107
|
+
return {
|
|
108
|
+
lagMeanMs,
|
|
109
|
+
lagP99Ms,
|
|
110
|
+
utilization: elu.utilization,
|
|
111
|
+
lastTickAgeMs,
|
|
112
|
+
healthy: evaluateEventLoopHealthy({ lagMeanMs, lastTickAgeMs }),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/** Disable the histogram and clear the tick interval. Idempotent. */
|
|
116
|
+
stop() {
|
|
117
|
+
if (this.timer) {
|
|
118
|
+
clearInterval(this.timer);
|
|
119
|
+
this.timer = null;
|
|
120
|
+
}
|
|
121
|
+
if (this.started) {
|
|
122
|
+
this.histogram.disable();
|
|
123
|
+
this.started = false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=event-loop-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-loop-monitor.js","sourceRoot":"","sources":["../../src/domain/event-loop-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AggregatedPayload } from "../hosts/fanout-contract.js";
|
|
2
|
+
import type { HostRegistryLoadResult } from "../hosts/hosts-registry-reader.js";
|
|
3
|
+
/** The aggregation READ deadline class (per-host bound). Distinct from the
|
|
4
|
+
* up-leaf's long-running budget by design — named here, passed explicitly. */
|
|
5
|
+
export declare const ATTENTION_READ_TIMEOUT_MS = 5000;
|
|
6
|
+
/** Fixed fan-out cap — a poll across a handful of hosts; adaptive
|
|
7
|
+
* throttling is out of scope (same v1 posture as the topology walker). */
|
|
8
|
+
export declare const ATTENTION_FANOUT_CONCURRENCY = 4;
|
|
9
|
+
export type AttentionItem = Record<string, unknown>;
|
|
10
|
+
export interface AttentionAggregatorDeps {
|
|
11
|
+
/** The SAME query the shipped /api/queue/list?attention=1 route runs. */
|
|
12
|
+
listLocalAttention: () => AttentionItem[];
|
|
13
|
+
/** settings-store.listFeedHostSubscriptions (the G15-P1 dynamic class). */
|
|
14
|
+
listSubscriptions: () => Array<{
|
|
15
|
+
hostId: string;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
/** S11's shared reader — called lazily, only when a remote sub exists. */
|
|
19
|
+
loadRegistry: () => HostRegistryLoadResult;
|
|
20
|
+
fetchImpl?: typeof fetch;
|
|
21
|
+
env?: Record<string, string | undefined>;
|
|
22
|
+
readFile?: (path: string) => string;
|
|
23
|
+
/** Test override; production uses ATTENTION_READ_TIMEOUT_MS. */
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
concurrency?: number;
|
|
26
|
+
}
|
|
27
|
+
/** One merged attention payload: local ALWAYS included (stamped with the
|
|
28
|
+
* contract's LOCAL_HOST_ID), each enabled remote host fanned out under the
|
|
29
|
+
* read deadline + fixed cap, per-host status complete by construction. */
|
|
30
|
+
export declare function aggregateAttention(deps: AttentionAggregatorDeps): Promise<AggregatedPayload<AttentionItem>>;
|
|
31
|
+
//# sourceMappingURL=attention-aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-aggregator.d.ts","sourceRoot":"","sources":["../../../src/domain/feed/attention-aggregator.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,6BAA6B,CAAC;AAEpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAIhF;+EAC+E;AAC/E,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C;2EAC2E;AAC3E,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,aAAa,EAAE,CAAC;IAC1C,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACrE,0EAA0E;IAC1E,YAAY,EAAE,MAAM,sBAAsB,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgED;;2EAE2E;AAC3E,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAgCjH"}
|