harnery 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commander.d.ts +30 -5
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +128 -96
- package/dist/commands/agents.d.ts +23 -3
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +464 -242
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +26 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +10 -10
- package/dist/commands/browse-session.d.ts.map +1 -1
- package/dist/commands/browse-session.js +12 -0
- package/dist/commands/browse.d.ts +1 -1
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +16 -4
- package/dist/commands/conversations.d.ts +10 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +201 -0
- package/dist/commands/deinit.d.ts.map +1 -1
- package/dist/commands/deinit.js +5 -0
- package/dist/commands/diagnostics.d.ts +4 -0
- package/dist/commands/diagnostics.d.ts.map +1 -0
- package/dist/commands/diagnostics.js +229 -0
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +13 -2
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +51 -7
- package/dist/commands/fetch.js +6 -5
- package/dist/commands/files.d.ts +34 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +166 -0
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +18 -12
- package/dist/commands/inbox.d.ts +5 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +57 -0
- package/dist/commands/init.d.ts +4 -5
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +63 -13
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +417 -2
- package/dist/commands/logs.d.ts +4 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +169 -0
- package/dist/commands/messages.d.ts +5 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +45 -0
- package/dist/commands/outline.d.ts +1 -1
- package/dist/commands/outline.d.ts.map +1 -1
- package/dist/commands/outline.js +2 -2
- package/dist/commands/qa-run.d.ts +4 -0
- package/dist/commands/qa-run.d.ts.map +1 -0
- package/dist/commands/qa-run.js +141 -0
- package/dist/commands/read.d.ts +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +2 -2
- package/dist/commands/resources.d.ts +4 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +29 -0
- package/dist/commands/semantic.d.ts.map +1 -1
- package/dist/commands/semantic.js +54 -2
- package/dist/commands/storage.d.ts +4 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +238 -0
- package/dist/commands/supervisor.d.ts +4 -0
- package/dist/commands/supervisor.d.ts.map +1 -0
- package/dist/commands/supervisor.js +101 -0
- package/dist/commands/tunnel.d.ts +5 -1
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +44 -31
- package/dist/commands/web.d.ts +3 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +84 -7
- package/dist/commands/work.js +3 -3
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +17 -13
- package/dist/core/adapters/profiles.d.ts +1 -1
- package/dist/core/agents/cli.js +215 -41
- package/dist/core/agents/health.d.ts +17 -0
- package/dist/core/agents/health.d.ts.map +1 -0
- package/dist/core/agents/health.js +109 -0
- package/dist/core/agents/live-authority-v3.d.ts +47 -1
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +244 -10
- package/dist/core/agents/live-lifecycle-v3.js +6 -1
- package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
- package/dist/core/agents/live-observation-v3.js +6 -1
- package/dist/core/agents/mailbox.d.ts +92 -0
- package/dist/core/agents/mailbox.d.ts.map +1 -0
- package/dist/core/agents/mailbox.js +325 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts +44 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts.map +1 -0
- package/dist/core/agents/reconcile-coordination-v3.js +58 -0
- package/dist/core/agents/render/prompt-context.d.ts +14 -3
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +54 -16
- package/dist/core/agents/render/session-context.d.ts +8 -0
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +34 -3
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +50 -1
- package/dist/core/agents/rules/stop-hook.d.ts +2 -0
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +93 -16
- package/dist/core/agents/rules/verdict.d.ts +1 -0
- package/dist/core/agents/rules/verdict.d.ts.map +1 -1
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +4 -0
- package/dist/core/agents/session-finalization-state-v3.js +1 -1
- package/dist/core/agents/session-finalizer-v3.js +9 -2
- package/dist/core/agents/state/activity-log.d.ts +3 -0
- package/dist/core/agents/state/activity-log.d.ts.map +1 -1
- package/dist/core/agents/state/activity-log.js +6 -3
- package/dist/core/agents/state/heartbeat-writer.d.ts +6 -0
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +18 -0
- package/dist/core/agents/state/live-coordination-view.d.ts +5 -7
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +15 -90
- package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
- package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
- package/dist/core/agents/state/live-coordination-writer.js +92 -0
- package/dist/core/artifacts/index.d.ts +47 -1
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +191 -6
- package/dist/core/config.d.ts +74 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +141 -4
- package/dist/core/conversations/archive.d.ts +49 -0
- package/dist/core/conversations/archive.d.ts.map +1 -0
- package/dist/core/conversations/archive.js +136 -0
- package/dist/core/conversations/catalog.d.ts +10 -0
- package/dist/core/conversations/catalog.d.ts.map +1 -0
- package/dist/core/conversations/catalog.js +72 -0
- package/dist/core/conversations/context-pack.d.ts +6 -0
- package/dist/core/conversations/context-pack.d.ts.map +1 -0
- package/dist/core/conversations/context-pack.js +60 -0
- package/dist/core/conversations/contract.d.ts +155 -0
- package/dist/core/conversations/contract.d.ts.map +1 -0
- package/dist/core/conversations/contract.js +1 -0
- package/dist/core/conversations/evaluation.d.ts +16 -0
- package/dist/core/conversations/evaluation.d.ts.map +1 -0
- package/dist/core/conversations/evaluation.js +9 -0
- package/dist/core/conversations/index.d.ts +10 -0
- package/dist/core/conversations/index.d.ts.map +1 -0
- package/dist/core/conversations/index.js +9 -0
- package/dist/core/conversations/lifecycle.d.ts +28 -0
- package/dist/core/conversations/lifecycle.d.ts.map +1 -0
- package/dist/core/conversations/lifecycle.js +29 -0
- package/dist/core/conversations/normalize.d.ts +14 -0
- package/dist/core/conversations/normalize.d.ts.map +1 -0
- package/dist/core/conversations/normalize.js +82 -0
- package/dist/core/conversations/query.d.ts +8 -0
- package/dist/core/conversations/query.d.ts.map +1 -0
- package/dist/core/conversations/query.js +280 -0
- package/dist/core/conversations/search-index.d.ts +9 -0
- package/dist/core/conversations/search-index.d.ts.map +1 -0
- package/dist/core/conversations/search-index.js +29 -0
- package/dist/core/diagnostics/advice.d.ts +9 -0
- package/dist/core/diagnostics/advice.d.ts.map +1 -0
- package/dist/core/diagnostics/advice.js +112 -0
- package/dist/core/diagnostics/bundle.d.ts +35 -0
- package/dist/core/diagnostics/bundle.d.ts.map +1 -0
- package/dist/core/diagnostics/bundle.js +874 -0
- package/dist/core/diagnostics/comparison.d.ts +5 -0
- package/dist/core/diagnostics/comparison.d.ts.map +1 -0
- package/dist/core/diagnostics/comparison.js +444 -0
- package/dist/core/diagnostics/contract.d.ts +245 -0
- package/dist/core/diagnostics/contract.d.ts.map +1 -0
- package/dist/core/diagnostics/contract.js +18 -0
- package/dist/core/diagnostics/identity.d.ts +3 -0
- package/dist/core/diagnostics/identity.d.ts.map +1 -0
- package/dist/core/diagnostics/identity.js +10 -0
- package/dist/core/diagnostics/index.d.ts +8 -0
- package/dist/core/diagnostics/index.d.ts.map +1 -0
- package/dist/core/diagnostics/index.js +7 -0
- package/dist/core/diagnostics/replay.d.ts +8 -0
- package/dist/core/diagnostics/replay.d.ts.map +1 -0
- package/dist/core/diagnostics/replay.js +213 -0
- package/dist/core/diagnostics/sanitize.d.ts +9 -0
- package/dist/core/diagnostics/sanitize.d.ts.map +1 -0
- package/dist/core/diagnostics/sanitize.js +84 -0
- package/dist/core/events/legacy-storage/canary.d.ts +18 -0
- package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/canary.js +150 -0
- package/dist/core/events/legacy-storage/compression.d.ts +13 -0
- package/dist/core/events/legacy-storage/compression.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/compression.js +107 -0
- package/dist/core/events/legacy-storage/fence.d.ts +15 -0
- package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/fence.js +115 -0
- package/dist/core/events/legacy-storage/index.d.ts +7 -0
- package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/index.js +6 -0
- package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
- package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/inventory.js +40 -0
- package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
- package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/manifest.js +108 -0
- package/dist/core/events/legacy-storage/reader.d.ts +15 -0
- package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/reader.js +154 -0
- package/dist/core/events/v3/archive-retention.d.ts +33 -0
- package/dist/core/events/v3/archive-retention.d.ts.map +1 -0
- package/dist/core/events/v3/archive-retention.js +195 -0
- package/dist/core/events/v3/authority-outbox.d.ts +7 -2
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
- package/dist/core/events/v3/authority-outbox.js +16 -3
- package/dist/core/events/v3/base-contract.d.ts +81 -41
- package/dist/core/events/v3/base-contract.d.ts.map +1 -1
- package/dist/core/events/v3/base-contract.js +17 -7
- package/dist/core/events/v3/bootstrap.d.ts +39 -0
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
- package/dist/core/events/v3/bootstrap.js +167 -3
- package/dist/core/events/v3/capabilities.d.ts +1 -1
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +4 -3
- package/dist/core/events/v3/control-witness.d.ts +44 -0
- package/dist/core/events/v3/control-witness.d.ts.map +1 -0
- package/dist/core/events/v3/control-witness.js +233 -0
- package/dist/core/events/v3/control-writer.d.ts +4 -0
- package/dist/core/events/v3/control-writer.d.ts.map +1 -0
- package/dist/core/events/v3/control-writer.js +16 -0
- package/dist/core/events/v3/control.d.ts +8 -2
- package/dist/core/events/v3/control.d.ts.map +1 -1
- package/dist/core/events/v3/control.js +46 -18
- package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
- package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
- package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
- package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
- package/dist/core/events/v3/coordination-view.js +16 -1
- package/dist/core/events/v3/generated.d.ts +1 -1
- package/dist/core/events/v3/generated.js +1 -1
- package/dist/core/events/v3/index.d.ts +5 -2
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +4 -1
- package/dist/core/events/v3/live-route-observer.d.ts +31 -0
- package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
- package/dist/core/events/v3/live-route-observer.js +58 -0
- package/dist/core/events/v3/live-routing.d.ts +13 -21
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +46 -41
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +76 -10
- package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
- package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
- package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +1 -1
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +14 -3
- package/dist/core/events/v3/producers/intake.d.ts +7 -0
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +26 -2
- package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
- package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
- package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
- package/dist/core/events/v3/producers/recorder.d.ts +71 -1
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +441 -25
- package/dist/core/events/v3/reader.d.ts +51 -0
- package/dist/core/events/v3/reader.d.ts.map +1 -1
- package/dist/core/events/v3/reader.js +181 -1
- package/dist/core/events/v3/rotation-config.d.ts +9 -0
- package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
- package/dist/core/events/v3/rotation-config.js +91 -0
- package/dist/core/events/v3/runtime-build.d.ts +11 -0
- package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
- package/dist/core/events/v3/runtime-build.js +39 -0
- package/dist/core/events/v3/runtime-identity.d.ts +5 -0
- package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
- package/dist/core/events/v3/runtime-identity.js +18 -0
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +6 -5
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/runtime-telemetry-capabilities.js +1 -1
- package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
- package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/classify.js +149 -0
- package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
- package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/eligibility.js +35 -0
- package/dist/core/events/v3/support-storage/index.d.ts +10 -0
- package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/index.js +9 -0
- package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
- package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/inventory.js +94 -0
- package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
- package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
- package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
- package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/maintenance.js +352 -0
- package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
- package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
- package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
- package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
- package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
- package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
- package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
- package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
- package/dist/core/events/v3/support-storage/recovery.js +22 -0
- package/dist/core/events/v3/turn-telemetry.d.ts +14 -8
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
- package/dist/core/events/v3/turn-telemetry.js +32 -2
- package/dist/core/events/v3/writer.d.ts +13 -1
- package/dist/core/events/v3/writer.d.ts.map +1 -1
- package/dist/core/events/v3/writer.js +126 -12
- package/dist/core/governor/plan-read.d.ts.map +1 -1
- package/dist/core/governor/plan-read.js +5 -21
- package/dist/core/governor/planning.js +6 -8
- package/dist/core/governor/service-read.d.ts +12 -0
- package/dist/core/governor/service-read.d.ts.map +1 -1
- package/dist/core/governor/service-read.js +266 -2
- package/dist/core/governor/service.d.ts +1 -0
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +53 -18
- package/dist/core/guard/evidence-v3.d.ts.map +1 -1
- package/dist/core/guard/evidence-v3.js +2 -0
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +1 -0
- package/dist/core/hooks/adapter/output.d.ts +12 -2
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +23 -5
- package/dist/core/hooks/adapter/runtime-telemetry.d.ts +27 -4
- package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -1
- package/dist/core/hooks/adapter/runtime-telemetry.js +307 -6
- package/dist/core/hooks/cli.js +380 -207
- package/dist/core/hooks/effects/image-capture.d.ts +1 -1
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +4 -2
- package/dist/core/hooks/health.d.ts +59 -0
- package/dist/core/hooks/health.d.ts.map +1 -0
- package/dist/core/hooks/health.js +84 -0
- package/dist/core/hooks/remediation-cap.d.ts +8 -3
- package/dist/core/hooks/remediation-cap.d.ts.map +1 -1
- package/dist/core/hooks/remediation-cap.js +3 -11
- package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
- package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
- package/dist/core/hooks/resolve/coord-root.js +92 -11
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +5 -0
- package/dist/core/hooks/resolve/transcript.d.ts +8 -0
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +11 -0
- package/dist/core/inbox/contract.d.ts +64 -0
- package/dist/core/inbox/contract.d.ts.map +1 -0
- package/dist/core/inbox/contract.js +13 -0
- package/dist/core/inbox/index.d.ts +5 -0
- package/dist/core/inbox/index.d.ts.map +1 -0
- package/dist/core/inbox/index.js +4 -0
- package/dist/core/inbox/lifecycle.d.ts +22 -0
- package/dist/core/inbox/lifecycle.d.ts.map +1 -0
- package/dist/core/inbox/lifecycle.js +41 -0
- package/dist/core/inbox/service.d.ts +36 -0
- package/dist/core/inbox/service.d.ts.map +1 -0
- package/dist/core/inbox/service.js +210 -0
- package/dist/core/inbox/watcher.d.ts +7 -0
- package/dist/core/inbox/watcher.d.ts.map +1 -0
- package/dist/core/inbox/watcher.js +26 -0
- package/dist/core/presence/codec-digest.d.ts.map +1 -1
- package/dist/core/presence/codec-digest.js +14 -3
- package/dist/core/presence/relay-client.d.ts +1 -0
- package/dist/core/presence/relay-client.d.ts.map +1 -1
- package/dist/core/presence/relay-client.js +52 -8
- package/dist/core/resources/contract.d.ts +90 -0
- package/dist/core/resources/contract.d.ts.map +1 -0
- package/dist/core/resources/contract.js +2 -0
- package/dist/core/resources/index.d.ts +6 -0
- package/dist/core/resources/index.d.ts.map +1 -0
- package/dist/core/resources/index.js +5 -0
- package/dist/core/resources/sampler.d.ts +27 -0
- package/dist/core/resources/sampler.d.ts.map +1 -0
- package/dist/core/resources/sampler.js +357 -0
- package/dist/core/resources/service-status.d.ts +3 -0
- package/dist/core/resources/service-status.d.ts.map +1 -0
- package/dist/core/resources/service-status.js +48 -0
- package/dist/core/resources/service.d.ts +26 -0
- package/dist/core/resources/service.d.ts.map +1 -0
- package/dist/core/resources/service.js +292 -0
- package/dist/core/resources/storage.d.ts +13 -0
- package/dist/core/resources/storage.d.ts.map +1 -0
- package/dist/core/resources/storage.js +30 -0
- package/dist/core/semantic/adapters.d.ts +11 -8
- package/dist/core/semantic/adapters.d.ts.map +1 -1
- package/dist/core/semantic/adapters.js +169 -31
- package/dist/core/semantic/contract.d.ts +532 -48
- package/dist/core/semantic/contract.d.ts.map +1 -1
- package/dist/core/semantic/contract.js +104 -3
- package/dist/core/semantic/index.d.ts +7 -3
- package/dist/core/semantic/index.d.ts.map +1 -1
- package/dist/core/semantic/index.js +7 -3
- package/dist/core/semantic/once.d.ts +6 -1
- package/dist/core/semantic/once.d.ts.map +1 -1
- package/dist/core/semantic/once.js +80 -9
- package/dist/core/semantic/prompt.d.ts.map +1 -1
- package/dist/core/semantic/prompt.js +14 -1
- package/dist/core/semantic/review.d.ts +144 -0
- package/dist/core/semantic/review.d.ts.map +1 -0
- package/dist/core/semantic/review.js +544 -0
- package/dist/core/semantic/routes.d.ts +10 -0
- package/dist/core/semantic/routes.d.ts.map +1 -0
- package/dist/core/semantic/routes.js +21 -0
- package/dist/core/semantic/scheduler.d.ts +14 -3
- package/dist/core/semantic/scheduler.d.ts.map +1 -1
- package/dist/core/semantic/scheduler.js +30 -6
- package/dist/core/semantic/service-status.d.ts +20 -0
- package/dist/core/semantic/service-status.d.ts.map +1 -1
- package/dist/core/semantic/service-status.js +60 -4
- package/dist/core/semantic/service.d.ts +1 -0
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +104 -15
- package/dist/core/semantic/soak.d.ts +75 -0
- package/dist/core/semantic/soak.d.ts.map +1 -0
- package/dist/core/semantic/soak.js +476 -0
- package/dist/core/semantic/storage.d.ts +11 -1
- package/dist/core/semantic/storage.d.ts.map +1 -1
- package/dist/core/semantic/storage.js +4 -3
- package/dist/core/semantic/usage.d.ts +43 -0
- package/dist/core/semantic/usage.d.ts.map +1 -0
- package/dist/core/semantic/usage.js +193 -0
- package/dist/core/semantic/validate.d.ts +3 -1
- package/dist/core/semantic/validate.d.ts.map +1 -1
- package/dist/core/semantic/validate.js +34 -1
- package/dist/core/storage/atomic-json.d.ts +3 -0
- package/dist/core/storage/atomic-json.d.ts.map +1 -0
- package/dist/core/storage/atomic-json.js +15 -0
- package/dist/core/storage/buffer.d.ts +28 -0
- package/dist/core/storage/buffer.d.ts.map +1 -0
- package/dist/core/storage/buffer.js +101 -0
- package/dist/core/storage/builtins.d.ts +3 -0
- package/dist/core/storage/builtins.d.ts.map +1 -0
- package/dist/core/storage/builtins.js +722 -0
- package/dist/core/storage/catalog.d.ts +19 -0
- package/dist/core/storage/catalog.d.ts.map +1 -0
- package/dist/core/storage/catalog.js +365 -0
- package/dist/core/storage/config.d.ts +16 -0
- package/dist/core/storage/config.d.ts.map +1 -0
- package/dist/core/storage/config.js +311 -0
- package/dist/core/storage/contract.d.ts +275 -0
- package/dist/core/storage/contract.d.ts.map +1 -0
- package/dist/core/storage/contract.js +3 -0
- package/dist/core/storage/durable-history.d.ts +36 -0
- package/dist/core/storage/durable-history.d.ts.map +1 -0
- package/dist/core/storage/durable-history.js +606 -0
- package/dist/core/storage/health.d.ts +4 -0
- package/dist/core/storage/health.d.ts.map +1 -0
- package/dist/core/storage/health.js +65 -0
- package/dist/core/storage/index.d.ts +16 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +15 -0
- package/dist/core/storage/inventory.d.ts +25 -0
- package/dist/core/storage/inventory.d.ts.map +1 -0
- package/dist/core/storage/inventory.js +666 -0
- package/dist/core/storage/jsonl.d.ts +52 -0
- package/dist/core/storage/jsonl.d.ts.map +1 -0
- package/dist/core/storage/jsonl.js +156 -0
- package/dist/core/storage/log-retention.d.ts +52 -0
- package/dist/core/storage/log-retention.d.ts.map +1 -0
- package/dist/core/storage/log-retention.js +419 -0
- package/dist/core/storage/logger.d.ts +84 -0
- package/dist/core/storage/logger.d.ts.map +1 -0
- package/dist/core/storage/logger.js +413 -0
- package/dist/core/storage/maintenance-providers.d.ts +26 -0
- package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
- package/dist/core/storage/maintenance-providers.js +141 -0
- package/dist/core/storage/maintenance.d.ts +125 -0
- package/dist/core/storage/maintenance.d.ts.map +1 -0
- package/dist/core/storage/maintenance.js +609 -0
- package/dist/core/storage/metrics.d.ts +60 -0
- package/dist/core/storage/metrics.d.ts.map +1 -0
- package/dist/core/storage/metrics.js +134 -0
- package/dist/core/storage/policy.d.ts +7 -0
- package/dist/core/storage/policy.d.ts.map +1 -0
- package/dist/core/storage/policy.js +110 -0
- package/dist/core/storage/process-log.d.ts +38 -0
- package/dist/core/storage/process-log.d.ts.map +1 -0
- package/dist/core/storage/process-log.js +165 -0
- package/dist/core/storage/query.d.ts +48 -0
- package/dist/core/storage/query.d.ts.map +1 -0
- package/dist/core/storage/query.js +346 -0
- package/dist/core/storage/receipts.d.ts +23 -0
- package/dist/core/storage/receipts.d.ts.map +1 -0
- package/dist/core/storage/receipts.js +117 -0
- package/dist/core/storage/segments.d.ts +84 -0
- package/dist/core/storage/segments.d.ts.map +1 -0
- package/dist/core/storage/segments.js +542 -0
- package/dist/core/storage/sink-graph.d.ts +65 -0
- package/dist/core/storage/sink-graph.d.ts.map +1 -0
- package/dist/core/storage/sink-graph.js +213 -0
- package/dist/core/storage/storm-control.d.ts +23 -0
- package/dist/core/storage/storm-control.d.ts.map +1 -0
- package/dist/core/storage/storm-control.js +59 -0
- package/dist/core/supervisor/activity.d.ts +4 -0
- package/dist/core/supervisor/activity.d.ts.map +1 -0
- package/dist/core/supervisor/activity.js +141 -0
- package/dist/core/supervisor/contract.d.ts +268 -0
- package/dist/core/supervisor/contract.d.ts.map +1 -0
- package/dist/core/supervisor/contract.js +35 -0
- package/dist/core/supervisor/explanations.d.ts +4 -0
- package/dist/core/supervisor/explanations.d.ts.map +1 -0
- package/dist/core/supervisor/explanations.js +71 -0
- package/dist/core/supervisor/findings.d.ts +20 -0
- package/dist/core/supervisor/findings.d.ts.map +1 -0
- package/dist/core/supervisor/findings.js +399 -0
- package/dist/core/supervisor/history.d.ts +9 -0
- package/dist/core/supervisor/history.d.ts.map +1 -0
- package/dist/core/supervisor/history.js +46 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts +14 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-alerts.js +70 -0
- package/dist/core/supervisor/hook-health-storage.d.ts +5 -0
- package/dist/core/supervisor/hook-health-storage.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-storage.js +24 -0
- package/dist/core/supervisor/hook-health.d.ts +72 -0
- package/dist/core/supervisor/hook-health.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health.js +203 -0
- package/dist/core/supervisor/hooks.d.ts +10 -0
- package/dist/core/supervisor/hooks.d.ts.map +1 -0
- package/dist/core/supervisor/hooks.js +28 -0
- package/dist/core/supervisor/index.d.ts +15 -0
- package/dist/core/supervisor/index.d.ts.map +1 -0
- package/dist/core/supervisor/index.js +14 -0
- package/dist/core/supervisor/log-feed.d.ts +9 -0
- package/dist/core/supervisor/log-feed.d.ts.map +1 -0
- package/dist/core/supervisor/log-feed.js +103 -0
- package/dist/core/supervisor/service.d.ts +29 -0
- package/dist/core/supervisor/service.d.ts.map +1 -0
- package/dist/core/supervisor/service.js +450 -0
- package/dist/core/supervisor/services.d.ts +11 -0
- package/dist/core/supervisor/services.d.ts.map +1 -0
- package/dist/core/supervisor/services.js +155 -0
- package/dist/core/supervisor/status.d.ts +3 -0
- package/dist/core/supervisor/status.d.ts.map +1 -0
- package/dist/core/supervisor/status.js +48 -0
- package/dist/core/supervisor/storage.d.ts +30 -0
- package/dist/core/supervisor/storage.d.ts.map +1 -0
- package/dist/core/supervisor/storage.js +73 -0
- package/dist/core/supervisor/timeline.d.ts +3 -0
- package/dist/core/supervisor/timeline.d.ts.map +1 -0
- package/dist/core/supervisor/timeline.js +87 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +10 -14
- package/dist/core/workflow/admission.d.ts +23 -0
- package/dist/core/workflow/admission.d.ts.map +1 -0
- package/dist/core/workflow/admission.js +136 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +77 -2
- package/dist/core/workflow/index.d.ts +3 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +2 -1
- package/dist/core/workflow/proof.d.ts +2 -1
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +39 -1
- package/dist/core/workflow/run-state.d.ts +3 -2
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +8 -1
- package/dist/core/workflow/types.d.ts +33 -1
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +2 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lazy-commands.d.ts +26 -0
- package/dist/lazy-commands.d.ts.map +1 -0
- package/dist/lazy-commands.js +210 -0
- package/dist/lib/browser/client.d.ts +5 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +1 -0
- package/dist/lib/browser/index.d.ts +2 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +173 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -0
- package/dist/lib/browser/qa-run-contracts.js +226 -0
- package/dist/lib/browser/qa-run.d.ts +51 -0
- package/dist/lib/browser/qa-run.d.ts.map +1 -0
- package/dist/lib/browser/qa-run.js +684 -0
- package/dist/lib/coord-root-id.d.ts +9 -0
- package/dist/lib/coord-root-id.d.ts.map +1 -0
- package/dist/lib/coord-root-id.js +17 -0
- package/dist/lib/docs-lint.d.ts +2 -0
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +45 -80
- package/dist/lib/docs-metadata-audit.d.ts +3 -0
- package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
- package/dist/lib/docs-metadata-audit.js +13 -23
- package/dist/lib/docs-metadata-sync.d.ts +1 -0
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
- package/dist/lib/docs-metadata-sync.js +28 -10
- package/dist/lib/docs-repository-view.d.ts +22 -0
- package/dist/lib/docs-repository-view.d.ts.map +1 -0
- package/dist/lib/docs-repository-view.js +185 -0
- package/dist/lib/http/client.d.ts +11 -5
- package/dist/lib/http/client.d.ts.map +1 -1
- package/dist/lib/http/client.js +22 -4
- package/dist/lib/http/index.d.ts +1 -1
- package/dist/lib/http/index.d.ts.map +1 -1
- package/dist/lib/http/index.js +1 -1
- package/dist/lib/indexer-exclusions.d.ts +27 -0
- package/dist/lib/indexer-exclusions.d.ts.map +1 -0
- package/dist/lib/indexer-exclusions.js +176 -0
- package/dist/lib/instructions/apply.d.ts +3 -1
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +74 -3
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +11 -0
- package/dist/lib/local-file-url.d.ts +9 -0
- package/dist/lib/local-file-url.d.ts.map +1 -0
- package/dist/lib/local-file-url.js +20 -0
- package/dist/lib/web-performance.d.ts +118 -0
- package/dist/lib/web-performance.d.ts.map +1 -0
- package/dist/lib/web-performance.js +192 -0
- package/package.json +40 -2
- package/schemas/config.schema.json +58 -0
- package/schemas/event-v3.schema.json +324 -112
- package/src/commander.ts +488 -95
- package/src/commands/agents.ts +617 -237
- package/src/commands/artifacts.ts +40 -2
- package/src/commands/backup.ts +18 -14
- package/src/commands/browse-session.ts +12 -0
- package/src/commands/browse.ts +21 -7
- package/src/commands/conversations.ts +279 -0
- package/src/commands/deinit.ts +6 -0
- package/src/commands/diagnostics.ts +271 -0
- package/src/commands/docs.ts +25 -6
- package/src/commands/doctor.ts +75 -9
- package/src/commands/fetch.ts +7 -6
- package/src/commands/files.ts +243 -0
- package/src/commands/governor.ts +21 -12
- package/src/commands/inbox.ts +61 -0
- package/src/commands/init.ts +78 -16
- package/src/commands/ledger-v3.ts +503 -1
- package/src/commands/logs.ts +224 -0
- package/src/commands/messages.ts +61 -0
- package/src/commands/outline.ts +6 -2
- package/src/commands/qa-run.ts +184 -0
- package/src/commands/read.ts +6 -2
- package/src/commands/resources.ts +38 -0
- package/src/commands/semantic.ts +66 -1
- package/src/commands/storage.ts +310 -0
- package/src/commands/supervisor.ts +141 -0
- package/src/commands/tunnel.ts +66 -52
- package/src/commands/web.ts +96 -7
- package/src/commands/work.ts +3 -3
- package/src/commands/workflow.ts +21 -13
- package/src/core/agents/cli.ts +265 -55
- package/src/core/agents/health.ts +142 -0
- package/src/core/agents/live-authority-v3.ts +341 -10
- package/src/core/agents/live-lifecycle-v3.ts +6 -1
- package/src/core/agents/live-observation-v3.ts +6 -1
- package/src/core/agents/mailbox.ts +373 -0
- package/src/core/agents/reconcile-coordination-v3.ts +77 -0
- package/src/core/agents/render/prompt-context.ts +66 -15
- package/src/core/agents/render/session-context.ts +37 -3
- package/src/core/agents/rules/commit-conflict.ts +58 -1
- package/src/core/agents/rules/stop-hook.ts +105 -20
- package/src/core/agents/rules/verdict.ts +1 -0
- package/src/core/agents/session-events.ts +4 -0
- package/src/core/agents/session-finalization-state-v3.ts +1 -1
- package/src/core/agents/session-finalizer-v3.ts +8 -2
- package/src/core/agents/state/activity-log.ts +7 -2
- package/src/core/agents/state/heartbeat-writer.ts +27 -0
- package/src/core/agents/state/live-coordination-view.ts +16 -105
- package/src/core/agents/state/live-coordination-writer.ts +141 -0
- package/src/core/artifacts/index.ts +260 -11
- package/src/core/config.ts +235 -5
- package/src/core/conversations/archive.ts +237 -0
- package/src/core/conversations/catalog.ts +79 -0
- package/src/core/conversations/context-pack.ts +72 -0
- package/src/core/conversations/contract.ts +178 -0
- package/src/core/conversations/evaluation.ts +30 -0
- package/src/core/conversations/index.ts +9 -0
- package/src/core/conversations/lifecycle.ts +63 -0
- package/src/core/conversations/normalize.ts +105 -0
- package/src/core/conversations/query.ts +318 -0
- package/src/core/conversations/search-index.ts +48 -0
- package/src/core/diagnostics/advice.ts +147 -0
- package/src/core/diagnostics/bundle.ts +1142 -0
- package/src/core/diagnostics/comparison.ts +565 -0
- package/src/core/diagnostics/contract.ts +311 -0
- package/src/core/diagnostics/identity.ts +11 -0
- package/src/core/diagnostics/index.ts +7 -0
- package/src/core/diagnostics/replay.ts +314 -0
- package/src/core/diagnostics/sanitize.ts +97 -0
- package/src/core/events/legacy-storage/canary.ts +177 -0
- package/src/core/events/legacy-storage/compression.ts +130 -0
- package/src/core/events/legacy-storage/fence.ts +129 -0
- package/src/core/events/legacy-storage/index.ts +6 -0
- package/src/core/events/legacy-storage/inventory.ts +51 -0
- package/src/core/events/legacy-storage/manifest.ts +136 -0
- package/src/core/events/legacy-storage/reader.ts +178 -0
- package/src/core/events/v3/archive-retention.ts +251 -0
- package/src/core/events/v3/authority-outbox.ts +22 -1
- package/src/core/events/v3/base-contract.ts +17 -7
- package/src/core/events/v3/bootstrap.ts +195 -2
- package/src/core/events/v3/capabilities.ts +5 -3
- package/src/core/events/v3/control-witness.ts +339 -0
- package/src/core/events/v3/control-writer.ts +16 -0
- package/src/core/events/v3/control.ts +54 -18
- package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
- package/src/core/events/v3/coordination-view.ts +17 -1
- package/src/core/events/v3/generated.ts +1 -1
- package/src/core/events/v3/index.ts +14 -2
- package/src/core/events/v3/live-route-observer.ts +80 -0
- package/src/core/events/v3/live-routing.ts +65 -46
- package/src/core/events/v3/producers/coordination-recorder.ts +95 -10
- package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
- package/src/core/events/v3/producers/hook-base.ts +15 -3
- package/src/core/events/v3/producers/intake.ts +31 -2
- package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
- package/src/core/events/v3/producers/recorder.ts +681 -34
- package/src/core/events/v3/reader.ts +243 -2
- package/src/core/events/v3/rotation-config.ts +98 -0
- package/src/core/events/v3/runtime-build.ts +41 -0
- package/src/core/events/v3/runtime-identity.ts +16 -0
- package/src/core/events/v3/runtime-telemetry-capabilities.ts +14 -8
- package/src/core/events/v3/support-storage/classify.ts +209 -0
- package/src/core/events/v3/support-storage/eligibility.ts +58 -0
- package/src/core/events/v3/support-storage/index.ts +9 -0
- package/src/core/events/v3/support-storage/inventory.ts +135 -0
- package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
- package/src/core/events/v3/support-storage/maintenance.ts +501 -0
- package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
- package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
- package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
- package/src/core/events/v3/support-storage/recovery.ts +43 -0
- package/src/core/events/v3/turn-telemetry.ts +58 -7
- package/src/core/events/v3/writer.ts +168 -16
- package/src/core/governor/plan-read.ts +5 -18
- package/src/core/governor/planning.ts +5 -8
- package/src/core/governor/service-read.ts +320 -2
- package/src/core/governor/service.ts +49 -22
- package/src/core/guard/evidence-v3.ts +1 -0
- package/src/core/hooks/adapter/events.ts +1 -0
- package/src/core/hooks/adapter/output.ts +23 -5
- package/src/core/hooks/adapter/runtime-telemetry.ts +408 -13
- package/src/core/hooks/cli.ts +404 -233
- package/src/core/hooks/effects/image-capture.ts +4 -1
- package/src/core/hooks/health.ts +146 -0
- package/src/core/hooks/remediation-cap.ts +12 -6
- package/src/core/hooks/resolve/coord-root.ts +91 -11
- package/src/core/hooks/resolve/owner.ts +4 -0
- package/src/core/hooks/resolve/transcript.ts +18 -0
- package/src/core/inbox/contract.ts +81 -0
- package/src/core/inbox/index.ts +4 -0
- package/src/core/inbox/lifecycle.ts +104 -0
- package/src/core/inbox/service.ts +305 -0
- package/src/core/inbox/watcher.ts +36 -0
- package/src/core/presence/codec-digest.ts +15 -9
- package/src/core/presence/relay-client.ts +55 -7
- package/src/core/resources/contract.ts +98 -0
- package/src/core/resources/index.ts +5 -0
- package/src/core/resources/sampler.ts +458 -0
- package/src/core/resources/service-status.ts +62 -0
- package/src/core/resources/service.ts +337 -0
- package/src/core/resources/storage.ts +44 -0
- package/src/core/semantic/adapters.ts +200 -41
- package/src/core/semantic/contract.ts +135 -3
- package/src/core/semantic/index.ts +76 -2
- package/src/core/semantic/once.ts +93 -7
- package/src/core/semantic/prompt.ts +13 -1
- package/src/core/semantic/review.ts +803 -0
- package/src/core/semantic/routes.ts +30 -0
- package/src/core/semantic/scheduler.ts +49 -5
- package/src/core/semantic/service-status.ts +99 -5
- package/src/core/semantic/service.ts +116 -15
- package/src/core/semantic/soak.ts +638 -0
- package/src/core/semantic/storage.ts +20 -6
- package/src/core/semantic/usage.ts +272 -0
- package/src/core/semantic/validate.ts +31 -0
- package/src/core/storage/atomic-json.ts +15 -0
- package/src/core/storage/buffer.ts +124 -0
- package/src/core/storage/builtins.ts +972 -0
- package/src/core/storage/catalog.ts +467 -0
- package/src/core/storage/config.ts +423 -0
- package/src/core/storage/contract.ts +342 -0
- package/src/core/storage/durable-history.ts +738 -0
- package/src/core/storage/health.ts +76 -0
- package/src/core/storage/index.ts +15 -0
- package/src/core/storage/inventory.ts +859 -0
- package/src/core/storage/jsonl.ts +213 -0
- package/src/core/storage/log-retention.ts +555 -0
- package/src/core/storage/logger.ts +548 -0
- package/src/core/storage/maintenance-providers.ts +200 -0
- package/src/core/storage/maintenance.ts +929 -0
- package/src/core/storage/metrics.ts +199 -0
- package/src/core/storage/policy.ts +141 -0
- package/src/core/storage/process-log.ts +203 -0
- package/src/core/storage/query.ts +418 -0
- package/src/core/storage/receipts.ts +162 -0
- package/src/core/storage/segments.ts +721 -0
- package/src/core/storage/sink-graph.ts +343 -0
- package/src/core/storage/storm-control.ts +91 -0
- package/src/core/supervisor/activity.ts +193 -0
- package/src/core/supervisor/contract.ts +312 -0
- package/src/core/supervisor/explanations.ts +104 -0
- package/src/core/supervisor/findings.ts +788 -0
- package/src/core/supervisor/history.ts +61 -0
- package/src/core/supervisor/hook-health-alerts.ts +108 -0
- package/src/core/supervisor/hook-health-storage.ts +25 -0
- package/src/core/supervisor/hook-health.ts +301 -0
- package/src/core/supervisor/hooks.ts +35 -0
- package/src/core/supervisor/index.ts +14 -0
- package/src/core/supervisor/log-feed.ts +131 -0
- package/src/core/supervisor/service.ts +511 -0
- package/src/core/supervisor/services.ts +203 -0
- package/src/core/supervisor/status.ts +59 -0
- package/src/core/supervisor/storage.ts +126 -0
- package/src/core/supervisor/timeline.ts +133 -0
- package/src/core/work/state.ts +12 -21
- package/src/core/workflow/admission.ts +215 -0
- package/src/core/workflow/engine.ts +93 -1
- package/src/core/workflow/index.ts +10 -0
- package/src/core/workflow/live-session-v3.ts +2 -4
- package/src/core/workflow/proof.ts +54 -1
- package/src/core/workflow/run-state.ts +13 -1
- package/src/core/workflow/types.ts +39 -1
- package/src/index.ts +2 -0
- package/src/lazy-commands.ts +294 -0
- package/src/lib/browser/client.ts +6 -0
- package/src/lib/browser/index.ts +29 -0
- package/src/lib/browser/qa-run-contracts.ts +380 -0
- package/src/lib/browser/qa-run.ts +784 -0
- package/src/lib/coord-root-id.ts +23 -0
- package/src/lib/docs-lint.ts +58 -77
- package/src/lib/docs-metadata-audit.ts +26 -21
- package/src/lib/docs-metadata-sync.ts +32 -9
- package/src/lib/docs-repository-view.ts +220 -0
- package/src/lib/http/client.ts +44 -8
- package/src/lib/http/index.ts +6 -1
- package/src/lib/indexer-exclusions.ts +173 -0
- package/src/lib/instructions/apply.ts +81 -2
- package/src/lib/instructions/templates.ts +11 -0
- package/src/lib/local-file-url.ts +31 -0
- package/src/lib/web-performance.ts +335 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coord-root-id.d.ts","sourceRoot":"","sources":["../../src/lib/coord-root-id.ts"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAM,GAAG,MAAyB,EACxC,QAAQ,SAAU,GACjB,MAAM,CAGR"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { realpathSync } from "node:fs";
|
|
3
|
+
import { DEFAULT_WEB_PORT } from "./local-file-url.js";
|
|
4
|
+
/** Local-only endpoint used to prove that a dashboard serves the caller's repo. */
|
|
5
|
+
export const COORD_ROOT_ID_PATH = "/api/coord-root";
|
|
6
|
+
/**
|
|
7
|
+
* Opaque identity for a canonical coordination root. The path stays local;
|
|
8
|
+
* only its digest crosses the dashboard boundary.
|
|
9
|
+
*/
|
|
10
|
+
export function coordRootId(root) {
|
|
11
|
+
const canonical = realpathSync(root);
|
|
12
|
+
return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
|
|
13
|
+
}
|
|
14
|
+
export function localCoordRootIdUrl(port = DEFAULT_WEB_PORT, protocol = "http:") {
|
|
15
|
+
const portPart = String(port) === "" ? "" : `:${port}`;
|
|
16
|
+
return `${protocol}//127.0.0.1${portPart}${COORD_ROOT_ID_PATH}`;
|
|
17
|
+
}
|
package/dist/lib/docs-lint.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare function initDocsContext(opts: {
|
|
|
4
4
|
extraExcludedPrefixes?: readonly string[];
|
|
5
5
|
docsRootAllowlist?: readonly string[];
|
|
6
6
|
}): void;
|
|
7
|
+
import { type DocsRepositorySource } from "./docs-repository-view.js";
|
|
7
8
|
/**
|
|
8
9
|
* Documentation linter. Enforces the docs directory-layout + naming contract.
|
|
9
10
|
*
|
|
@@ -22,6 +23,7 @@ export interface Violation {
|
|
|
22
23
|
export interface LintOpts {
|
|
23
24
|
fast?: boolean;
|
|
24
25
|
repo?: string;
|
|
26
|
+
source?: DocsRepositorySource;
|
|
25
27
|
}
|
|
26
28
|
/** Detect whether a file carries lifecycle status in leading YAML frontmatter. */
|
|
27
29
|
export declare function hasStatusHeader(path: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-lint.d.ts","sourceRoot":"","sources":["../../src/lib/docs-lint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docs-lint.d.ts","sourceRoot":"","sources":["../../src/lib/docs-lint.ts"],"names":[],"mappings":"AAiBA,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,GAAG,IAAI,CAMP;AAYD,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,2BAA2B,CAAC;AAEnC;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AA0GD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AA8ND,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkClE"}
|
package/dist/lib/docs-lint.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { existsSync as __existsSyncForDocs } from "node:fs";
|
|
2
2
|
import { resolve as __resolveForDocs } from "node:path";
|
|
3
3
|
import { hasYamlStatus } from "./docs-frontmatter.js";
|
|
4
|
-
import { initDocsMetadataAuditContext,
|
|
5
|
-
import { sh } from "./exec.js";
|
|
4
|
+
import { auditDocsMetadataRepository, initDocsMetadataAuditContext, } from "./docs-metadata-audit.js";
|
|
6
5
|
// Module-level docs context, initialized by initDocsContext() before any
|
|
7
6
|
// other function in this file is called. Consumers pass repo metadata
|
|
8
7
|
// + an optional list of extra excluded path prefixes for project-specific
|
|
@@ -24,8 +23,9 @@ function submodulePath(name) {
|
|
|
24
23
|
function isSubmoduleInitialized(name) {
|
|
25
24
|
return __existsSyncForDocs(__resolveForDocs(REPO_ROOT, name, ".git"));
|
|
26
25
|
}
|
|
27
|
-
import {
|
|
26
|
+
import { readFileSync } from "node:fs";
|
|
28
27
|
import { basename, join } from "node:path";
|
|
28
|
+
import { createDocsRepositoryView, } from "./docs-repository-view.js";
|
|
29
29
|
/** Files allowed at a submodule root level. Includes:
|
|
30
30
|
* - In-repo conventions: README.md, CLAUDE.md, LLM-BRIEFING.md, AGENTS.md
|
|
31
31
|
* - GitHub OSS conventions: CHANGELOG.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md,
|
|
@@ -104,16 +104,9 @@ function getTargetRepos(opts) {
|
|
|
104
104
|
}
|
|
105
105
|
return all;
|
|
106
106
|
}
|
|
107
|
-
/**
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
*/
|
|
111
|
-
async function findMarkdownFiles(root) {
|
|
112
|
-
const result = await sh('git ls-files --cached "**/*.md" "*.md"', { cwd: root });
|
|
113
|
-
if (result.exitCode !== 0 || !result.stdout)
|
|
114
|
-
return [];
|
|
115
|
-
return result.stdout
|
|
116
|
-
.split("\n")
|
|
107
|
+
/** Select tracked Markdown from the coherent repository view. */
|
|
108
|
+
function findMarkdownFiles(view) {
|
|
109
|
+
return view.trackedPaths
|
|
117
110
|
.filter((f) => f.endsWith(".md"))
|
|
118
111
|
.filter((f) =>
|
|
119
112
|
// Framework dirs are excluded at any depth, not just repo root;
|
|
@@ -121,19 +114,9 @@ async function findMarkdownFiles(root) {
|
|
|
121
114
|
!EXCLUDED_PREFIXES.some((p) => f.startsWith(p) || f.includes(`/${p}`)) &&
|
|
122
115
|
!EXTRA_EXCLUDED_PREFIXES.some((p) => f.startsWith(p) || f.includes(`/${p}`)));
|
|
123
116
|
}
|
|
124
|
-
/** Read first N lines of a file for header inspection */
|
|
125
|
-
function readHead(path, lines = 20) {
|
|
126
|
-
try {
|
|
127
|
-
const content = readFileSync(path, "utf8");
|
|
128
|
-
return content.split("\n").slice(0, lines).join("\n");
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
return "";
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
117
|
/** Detect whether a file declares itself an intentional monolith */
|
|
135
|
-
function isDeclaredMonolith(
|
|
136
|
-
const head =
|
|
118
|
+
function isDeclaredMonolith(content) {
|
|
119
|
+
const head = content.split("\n").slice(0, 10).join("\n");
|
|
137
120
|
return /INTENTIONAL-MONOLITH/i.test(head);
|
|
138
121
|
}
|
|
139
122
|
/** Detect whether a file carries lifecycle status in leading YAML frontmatter. */
|
|
@@ -147,10 +130,10 @@ export function hasStatusHeader(path) {
|
|
|
147
130
|
}
|
|
148
131
|
// --- Individual checks ---
|
|
149
132
|
/** Entry tier files exist at the repo root */
|
|
150
|
-
function checkEntryTier(repoName,
|
|
133
|
+
function checkEntryTier(repoName, view, isSubmodule) {
|
|
151
134
|
const violations = [];
|
|
152
135
|
// README.md is required for any repo
|
|
153
|
-
if (!
|
|
136
|
+
if (!view.has("README.md")) {
|
|
154
137
|
violations.push({
|
|
155
138
|
severity: "error",
|
|
156
139
|
repo: repoName,
|
|
@@ -160,7 +143,7 @@ function checkEntryTier(repoName, repoPath, isSubmodule) {
|
|
|
160
143
|
});
|
|
161
144
|
}
|
|
162
145
|
// CLAUDE.md required for submodules (primary LLM context)
|
|
163
|
-
if (isSubmodule && !
|
|
146
|
+
if (isSubmodule && !view.has("CLAUDE.md")) {
|
|
164
147
|
violations.push({
|
|
165
148
|
severity: "error",
|
|
166
149
|
repo: repoName,
|
|
@@ -172,15 +155,9 @@ function checkEntryTier(repoName, repoPath, isSubmodule) {
|
|
|
172
155
|
return violations;
|
|
173
156
|
}
|
|
174
157
|
/** No forbidden root-level files */
|
|
175
|
-
function checkRootAllowlist(repoName,
|
|
158
|
+
function checkRootAllowlist(repoName, view) {
|
|
176
159
|
const violations = [];
|
|
177
|
-
|
|
178
|
-
try {
|
|
179
|
-
entries = readdirSync(repoPath);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return violations;
|
|
183
|
-
}
|
|
160
|
+
const entries = view.directFileNames(".");
|
|
184
161
|
for (const entry of entries) {
|
|
185
162
|
if (!entry.endsWith(".md"))
|
|
186
163
|
continue;
|
|
@@ -214,32 +191,15 @@ function checkRootAllowlist(repoName, repoPath) {
|
|
|
214
191
|
* a no-op unless the host supplies `docsRootAllowlist`. Parent-repo only:
|
|
215
192
|
* submodule `docs/` roots have their own entry tiers, not this one.
|
|
216
193
|
*/
|
|
217
|
-
function checkDocsRootAllowlist(repoName,
|
|
194
|
+
function checkDocsRootAllowlist(repoName, view) {
|
|
218
195
|
const violations = [];
|
|
219
196
|
if (DOCS_ROOT_ALLOWLIST.length === 0)
|
|
220
197
|
return violations; // opt-in
|
|
221
198
|
if (repoName !== "(root)")
|
|
222
199
|
return violations; // parent repo only
|
|
223
200
|
const allow = new Set(DOCS_ROOT_ALLOWLIST);
|
|
224
|
-
const
|
|
225
|
-
let entries;
|
|
226
|
-
try {
|
|
227
|
-
entries = readdirSync(docsDir);
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
return violations; // no docs/ dir — nothing to check
|
|
231
|
-
}
|
|
201
|
+
const entries = view.directFileNames("docs");
|
|
232
202
|
for (const entry of entries) {
|
|
233
|
-
// Subdirs are the intended home for topic docs; only loose files matter.
|
|
234
|
-
let isFile;
|
|
235
|
-
try {
|
|
236
|
-
isFile = statSync(join(docsDir, entry)).isFile();
|
|
237
|
-
}
|
|
238
|
-
catch {
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
if (!isFile)
|
|
242
|
-
continue;
|
|
243
203
|
if (!(entry.endsWith(".md") || entry.endsWith(".json")))
|
|
244
204
|
continue;
|
|
245
205
|
if (allow.has(entry))
|
|
@@ -354,9 +314,10 @@ function checkChangelogNames(repoName, _repoPath, files) {
|
|
|
354
314
|
return violations;
|
|
355
315
|
}
|
|
356
316
|
/** Intentional monoliths >30KB need a declaration banner */
|
|
357
|
-
function checkMonolithDeclaration(repoName,
|
|
317
|
+
async function checkMonolithDeclaration(repoName, view, files) {
|
|
358
318
|
const violations = [];
|
|
359
319
|
const SIZE_THRESHOLD = 30 * 1024;
|
|
320
|
+
const candidatePaths = [];
|
|
360
321
|
for (const rel of files) {
|
|
361
322
|
// Only flag top-level docs/ files, not per-repo entry tier (LLM-BRIEFING
|
|
362
323
|
// files are monoliths by convention, no banner needed).
|
|
@@ -372,17 +333,20 @@ function checkMonolithDeclaration(repoName, repoPath, files) {
|
|
|
372
333
|
continue;
|
|
373
334
|
if (rel.startsWith("docs/changelogs/"))
|
|
374
335
|
continue;
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
try {
|
|
378
|
-
size = statSync(full).size;
|
|
379
|
-
}
|
|
380
|
-
catch {
|
|
336
|
+
const size = await view.byteLength(rel);
|
|
337
|
+
if (size === null)
|
|
381
338
|
continue;
|
|
382
|
-
}
|
|
383
339
|
if (size < SIZE_THRESHOLD)
|
|
384
340
|
continue;
|
|
385
|
-
|
|
341
|
+
candidatePaths.push(rel);
|
|
342
|
+
}
|
|
343
|
+
const texts = await view.readTexts(candidatePaths);
|
|
344
|
+
for (const rel of candidatePaths) {
|
|
345
|
+
const content = texts.get(rel);
|
|
346
|
+
if (content === undefined || isDeclaredMonolith(content))
|
|
347
|
+
continue;
|
|
348
|
+
const size = await view.byteLength(rel);
|
|
349
|
+
if (size === null)
|
|
386
350
|
continue;
|
|
387
351
|
violations.push({
|
|
388
352
|
severity: "warning",
|
|
@@ -399,27 +363,28 @@ export async function runLint(opts) {
|
|
|
399
363
|
const violations = [];
|
|
400
364
|
const repos = getTargetRepos(opts);
|
|
401
365
|
for (const { name, path, isSubmodule } of repos) {
|
|
402
|
-
|
|
403
|
-
violations.push(...
|
|
404
|
-
violations.push(...
|
|
405
|
-
|
|
366
|
+
const view = await createDocsRepositoryView(path, opts.source ?? "worktree");
|
|
367
|
+
violations.push(...checkEntryTier(name, view, isSubmodule));
|
|
368
|
+
violations.push(...checkRootAllowlist(name, view));
|
|
369
|
+
violations.push(...checkDocsRootAllowlist(name, view));
|
|
370
|
+
const files = findMarkdownFiles(view);
|
|
406
371
|
violations.push(...checkNamingConvention(name, path, files));
|
|
407
372
|
violations.push(...checkDatedDirs(name, path, files));
|
|
408
373
|
violations.push(...checkChangelogNames(name, path, files));
|
|
409
374
|
if (!opts.fast) {
|
|
410
|
-
violations.push(...checkMonolithDeclaration(name,
|
|
375
|
+
violations.push(...(await checkMonolithDeclaration(name, view, files)));
|
|
411
376
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
}
|
|
377
|
+
const metadataRows = await auditDocsMetadataRepository(name, view);
|
|
378
|
+
for (const row of metadataRows) {
|
|
379
|
+
for (const issue of row.issues.filter((entry) => entry.severity === "error")) {
|
|
380
|
+
violations.push({
|
|
381
|
+
severity: "error",
|
|
382
|
+
repo: row.repo,
|
|
383
|
+
path: row.path,
|
|
384
|
+
rule: `metadata-v2:${issue.code}`,
|
|
385
|
+
message: issue.field ? `${issue.field}: ${issue.message}` : issue.message,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
423
388
|
}
|
|
424
389
|
}
|
|
425
390
|
return violations;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { type DocsMetadataProfile, type DocsMetadataValidationIssue } from "./docs-metadata-v2.js";
|
|
2
|
+
import { type DocsRepositorySource, type DocsRepositoryView } from "./docs-repository-view.js";
|
|
2
3
|
export declare function initDocsMetadataAuditContext(opts: {
|
|
3
4
|
repoRoot: string;
|
|
4
5
|
submodules: readonly string[];
|
|
5
6
|
}): void;
|
|
6
7
|
export interface DocsMetadataAuditOpts {
|
|
7
8
|
repo?: string;
|
|
9
|
+
source?: DocsRepositorySource;
|
|
8
10
|
}
|
|
9
11
|
export type DocsMetadataAuditState = "valid" | "invalid" | "legacy" | "missing";
|
|
10
12
|
export interface DocsMetadataAuditRow {
|
|
@@ -14,6 +16,7 @@ export interface DocsMetadataAuditRow {
|
|
|
14
16
|
profile: DocsMetadataProfile | null;
|
|
15
17
|
issues: DocsMetadataValidationIssue[];
|
|
16
18
|
}
|
|
19
|
+
export declare function auditDocsMetadataRepository(repoName: string, view: DocsRepositoryView): Promise<DocsMetadataAuditRow[]>;
|
|
17
20
|
export declare function runDocsMetadataAudit(opts: DocsMetadataAuditOpts): Promise<DocsMetadataAuditRow[]>;
|
|
18
21
|
export declare function auditDocsMetadataText(content: string, path: string): DocsMetadataAuditRow | null;
|
|
19
22
|
//# sourceMappingURL=docs-metadata-audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-metadata-audit.d.ts","sourceRoot":"","sources":["../../src/lib/docs-metadata-audit.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAIjC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"docs-metadata-audit.d.ts","sourceRoot":"","sources":["../../src/lib/docs-metadata-audit.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAIjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAKnC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,GAAG,IAAI,CAGP;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,2BAA2B,EAAE,CAAC;CACvC;AA+DD,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAMjC;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAkBjC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAiChG"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
2
|
import { join, relative, resolve } from "node:path";
|
|
3
3
|
import { parseFrontmatter } from "./docs-frontmatter.js";
|
|
4
4
|
import { isManagedDocsMetadataFile, managedDocsMetadataType } from "./docs-metadata-managed.js";
|
|
5
5
|
import { docsMetadataProfileForType, isDocsMetadataV2, validateDocsMetadataV2, } from "./docs-metadata-v2.js";
|
|
6
|
-
import {
|
|
6
|
+
import { createDocsRepositoryView, } from "./docs-repository-view.js";
|
|
7
7
|
let REPO_ROOT = "";
|
|
8
8
|
let SUBMODULES = [];
|
|
9
9
|
export function initDocsMetadataAuditContext(opts) {
|
|
@@ -13,21 +13,8 @@ export function initDocsMetadataAuditContext(opts) {
|
|
|
13
13
|
function isInitializedRepo(path) {
|
|
14
14
|
return existsSync(join(path, ".git"));
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (result.exitCode !== 0 || !result.stdout.trim())
|
|
19
|
-
return [];
|
|
20
|
-
return result.stdout
|
|
21
|
-
.trim()
|
|
22
|
-
.split("\n")
|
|
23
|
-
.filter((path) => path.endsWith(".md"));
|
|
24
|
-
}
|
|
25
|
-
function auditFile(repoName, repoPath, path) {
|
|
26
|
-
let content;
|
|
27
|
-
try {
|
|
28
|
-
content = readFileSync(join(repoPath, path), "utf8");
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
16
|
+
function auditFile(repoName, path, content) {
|
|
17
|
+
if (content === undefined) {
|
|
31
18
|
return {
|
|
32
19
|
repo: repoName,
|
|
33
20
|
path: join(repoName === "(root)" ? "" : repoName, path),
|
|
@@ -76,6 +63,13 @@ function auditFile(repoName, repoPath, path) {
|
|
|
76
63
|
],
|
|
77
64
|
};
|
|
78
65
|
}
|
|
66
|
+
export async function auditDocsMetadataRepository(repoName, view) {
|
|
67
|
+
const files = view.trackedPaths.filter((path) => path.endsWith(".md"));
|
|
68
|
+
const texts = await view.readTexts(files);
|
|
69
|
+
return files
|
|
70
|
+
.map((path) => auditFile(repoName, path, texts.get(path)))
|
|
71
|
+
.filter((row) => row !== null);
|
|
72
|
+
}
|
|
79
73
|
export async function runDocsMetadataAudit(opts) {
|
|
80
74
|
const targets = [
|
|
81
75
|
{ name: "(root)", path: REPO_ROOT },
|
|
@@ -87,12 +81,8 @@ export async function runDocsMetadataAudit(opts) {
|
|
|
87
81
|
throw new Error(`Unknown repository: ${opts.repo}`);
|
|
88
82
|
const rows = [];
|
|
89
83
|
for (const target of selected) {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
const row = auditFile(target.name, target.path, path);
|
|
93
|
-
if (row)
|
|
94
|
-
rows.push(row);
|
|
95
|
-
}
|
|
84
|
+
const view = await createDocsRepositoryView(target.path, opts.source ?? "worktree");
|
|
85
|
+
rows.push(...(await auditDocsMetadataRepository(target.name, view)));
|
|
96
86
|
}
|
|
97
87
|
return rows.sort((a, b) => a.path.localeCompare(b.path));
|
|
98
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-metadata-sync.d.ts","sourceRoot":"","sources":["../../src/lib/docs-metadata-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docs-metadata-sync.d.ts","sourceRoot":"","sources":["../../src/lib/docs-metadata-sync.ts"],"names":[],"mappings":"AAYA,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,GAAG,IAAI,CAGP;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqFD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAkKhC"}
|
|
@@ -4,6 +4,7 @@ import { dump as dumpYaml, JSON_SCHEMA } from "js-yaml";
|
|
|
4
4
|
import { parseFrontmatter } from "./docs-frontmatter.js";
|
|
5
5
|
import { managedDocsMetadataType } from "./docs-metadata-managed.js";
|
|
6
6
|
import { isDocsMetadataV2, validateDocsMetadataV2 } from "./docs-metadata-v2.js";
|
|
7
|
+
import { createDocsRepositoryView } from "./docs-repository-view.js";
|
|
7
8
|
import { sh } from "./exec.js";
|
|
8
9
|
let REPO_ROOT = "";
|
|
9
10
|
let SUBMODULES = [];
|
|
@@ -25,16 +26,24 @@ function targets(repo) {
|
|
|
25
26
|
throw new Error(`Unknown repository: ${repo}`);
|
|
26
27
|
return selected;
|
|
27
28
|
}
|
|
28
|
-
async function
|
|
29
|
-
|
|
30
|
-
return explicit;
|
|
31
|
-
const result = await sh("git diff --cached --name-only --diff-filter=ACMR -- '*.md'", {
|
|
32
|
-
cwd: target.path,
|
|
33
|
-
});
|
|
29
|
+
async function gitMarkdownPaths(target, command) {
|
|
30
|
+
const result = await sh(command, { cwd: target.path });
|
|
34
31
|
if (result.exitCode !== 0)
|
|
35
|
-
throw new Error(result.stderr ||
|
|
32
|
+
throw new Error(result.stderr || `${command} failed`);
|
|
36
33
|
return result.stdout.split("\n").filter(Boolean);
|
|
37
34
|
}
|
|
35
|
+
async function changedFiles(target, explicit, check) {
|
|
36
|
+
if (explicit.length > 0)
|
|
37
|
+
return explicit;
|
|
38
|
+
const staged = await gitMarkdownPaths(target, "git diff --cached --name-only --diff-filter=ACMR -- '*.md'");
|
|
39
|
+
if (check)
|
|
40
|
+
return staged;
|
|
41
|
+
const [unstaged, untracked] = await Promise.all([
|
|
42
|
+
gitMarkdownPaths(target, "git diff --name-only --diff-filter=ACMR -- '*.md'"),
|
|
43
|
+
gitMarkdownPaths(target, "git ls-files --others --exclude-standard -- '*.md'"),
|
|
44
|
+
]);
|
|
45
|
+
return [...new Set([...staged, ...unstaged, ...untracked])];
|
|
46
|
+
}
|
|
38
47
|
async function headContent(target, path) {
|
|
39
48
|
const result = await sh(`git show HEAD:${JSON.stringify(path)}`, { cwd: target.path });
|
|
40
49
|
return result.exitCode === 0 ? result.stdout : null;
|
|
@@ -73,14 +82,23 @@ function addDays(value, days) {
|
|
|
73
82
|
return date.toISOString().replace(".000Z", "Z");
|
|
74
83
|
}
|
|
75
84
|
export async function runDocsMetadataSync(opts) {
|
|
85
|
+
if (opts.cached && !opts.check) {
|
|
86
|
+
throw new Error("--cached requires --check because Git index validation is read-only");
|
|
87
|
+
}
|
|
76
88
|
const now = opts.now ?? new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
77
89
|
const rows = [];
|
|
78
90
|
for (const target of targets(opts.repo)) {
|
|
79
|
-
|
|
91
|
+
const paths = await changedFiles(target, opts.files ?? [], opts.check ?? false);
|
|
92
|
+
const cachedView = opts.cached ? await createDocsRepositoryView(target.path, "index") : null;
|
|
93
|
+
const cachedTexts = cachedView ? await cachedView.readTexts(paths) : null;
|
|
94
|
+
for (const path of paths) {
|
|
80
95
|
const full = join(target.path, path);
|
|
81
|
-
if (!existsSync(full))
|
|
96
|
+
if (cachedView ? !cachedView.has(path) : !existsSync(full))
|
|
82
97
|
continue;
|
|
83
|
-
const currentText = readFileSync(full, "utf8");
|
|
98
|
+
const currentText = cachedView ? cachedTexts?.get(path) : readFileSync(full, "utf8");
|
|
99
|
+
if (currentText === undefined) {
|
|
100
|
+
throw new Error(`Git index content could not be read for ${path}`);
|
|
101
|
+
}
|
|
84
102
|
const current = parseFrontmatter(currentText);
|
|
85
103
|
if (!managedDocsMetadataType(path, current.data, current.raw !== null))
|
|
86
104
|
continue;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type DocsRepositorySource = "worktree" | "index";
|
|
2
|
+
/**
|
|
3
|
+
* One coherent repository view for documentation commands.
|
|
4
|
+
*
|
|
5
|
+
* Worktree mode preserves the interactive commands' existing behavior. Index
|
|
6
|
+
* mode reads both path membership and file bytes through Git, so a pre-commit
|
|
7
|
+
* hook validates the exact index Git handed to it. During a path-scoped commit,
|
|
8
|
+
* Git exposes its temporary partial-commit index through GIT_INDEX_FILE; the
|
|
9
|
+
* view deliberately inherits that environment instead of rediscovering the
|
|
10
|
+
* shared working tree.
|
|
11
|
+
*/
|
|
12
|
+
export interface DocsRepositoryView {
|
|
13
|
+
readonly root: string;
|
|
14
|
+
readonly source: DocsRepositorySource;
|
|
15
|
+
readonly trackedPaths: readonly string[];
|
|
16
|
+
has(path: string): boolean;
|
|
17
|
+
directFileNames(directory: string): string[];
|
|
18
|
+
readTexts(paths: readonly string[]): Promise<Map<string, string>>;
|
|
19
|
+
byteLength(path: string): Promise<number | null>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createDocsRepositoryView(root: string, source?: DocsRepositorySource): Promise<DocsRepositoryView>;
|
|
22
|
+
//# sourceMappingURL=docs-repository-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-repository-view.d.ts","sourceRoot":"","sources":["../../src/lib/docs-repository-view.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAC;AAOxD;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClD;AAkHD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,oBAAiC,GACxC,OAAO,CAAC,kBAAkB,CAAC,CAwE7B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { basename, dirname, join } from "node:path";
|
|
4
|
+
import { exec } from "./exec.js";
|
|
5
|
+
function normalize(path) {
|
|
6
|
+
return path.replaceAll("\\", "/").replace(/^\.\//, "");
|
|
7
|
+
}
|
|
8
|
+
function trackedPathList(stdout) {
|
|
9
|
+
return stdout.split("\0").map(normalize).filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
async function worktreePaths(root) {
|
|
12
|
+
const result = await exec(["git", "ls-files", "--cached", "-z"], { cwd: root, trim: false });
|
|
13
|
+
if (result.exitCode !== 0) {
|
|
14
|
+
// Worktree lint historically supports non-repository fixtures and simply
|
|
15
|
+
// has no tracked-file checks to run there. Index mode remains strict.
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return trackedPathList(result.stdout);
|
|
19
|
+
}
|
|
20
|
+
async function indexEntries(root) {
|
|
21
|
+
const result = await exec(["git", "ls-files", "--cached", "--stage", "-z"], {
|
|
22
|
+
cwd: root,
|
|
23
|
+
trim: false,
|
|
24
|
+
});
|
|
25
|
+
if (result.exitCode !== 0) {
|
|
26
|
+
throw new Error(result.stderr || "git ls-files --stage failed");
|
|
27
|
+
}
|
|
28
|
+
const entries = new Map();
|
|
29
|
+
for (const record of result.stdout.split("\0").filter(Boolean)) {
|
|
30
|
+
const tab = record.indexOf("\t");
|
|
31
|
+
if (tab === -1)
|
|
32
|
+
throw new Error(`invalid git ls-files --stage record: ${record}`);
|
|
33
|
+
const [mode, oid, stageText] = record.slice(0, tab).split(" ");
|
|
34
|
+
const path = normalize(record.slice(tab + 1));
|
|
35
|
+
const stage = Number.parseInt(stageText ?? "", 10);
|
|
36
|
+
if (!mode || !oid || !Number.isInteger(stage)) {
|
|
37
|
+
throw new Error(`invalid git ls-files --stage record for ${path}`);
|
|
38
|
+
}
|
|
39
|
+
if (stage !== 0) {
|
|
40
|
+
throw new Error(`cannot validate an index with unmerged entry: ${path}`);
|
|
41
|
+
}
|
|
42
|
+
entries.set(path, { oid, stage });
|
|
43
|
+
}
|
|
44
|
+
return entries;
|
|
45
|
+
}
|
|
46
|
+
function parseBatch(stdout, requested) {
|
|
47
|
+
const blobs = new Map();
|
|
48
|
+
let offset = 0;
|
|
49
|
+
for (const oid of requested) {
|
|
50
|
+
const newline = stdout.indexOf(0x0a, offset);
|
|
51
|
+
if (newline === -1)
|
|
52
|
+
throw new Error(`git cat-file omitted the header for ${oid}`);
|
|
53
|
+
const header = stdout.subarray(offset, newline).toString("utf8");
|
|
54
|
+
offset = newline + 1;
|
|
55
|
+
const [reportedOid, type, sizeText] = header.split(" ");
|
|
56
|
+
const size = Number.parseInt(sizeText ?? "", 10);
|
|
57
|
+
if (reportedOid !== oid || type !== "blob" || !Number.isInteger(size) || size < 0) {
|
|
58
|
+
throw new Error(`git cat-file returned an invalid blob header for ${oid}: ${header}`);
|
|
59
|
+
}
|
|
60
|
+
const end = offset + size;
|
|
61
|
+
if (end > stdout.length)
|
|
62
|
+
throw new Error(`git cat-file truncated blob ${oid}`);
|
|
63
|
+
blobs.set(oid, stdout.subarray(offset, end));
|
|
64
|
+
offset = end;
|
|
65
|
+
if (stdout[offset] !== 0x0a)
|
|
66
|
+
throw new Error(`git cat-file omitted the separator for ${oid}`);
|
|
67
|
+
offset += 1;
|
|
68
|
+
}
|
|
69
|
+
return blobs;
|
|
70
|
+
}
|
|
71
|
+
function readIndexBlobs(root, oids) {
|
|
72
|
+
const unique = [...new Set(oids)];
|
|
73
|
+
if (unique.length === 0)
|
|
74
|
+
return Promise.resolve(new Map());
|
|
75
|
+
return new Promise((resolveResult, rejectResult) => {
|
|
76
|
+
const process = spawn("git", ["cat-file", "--batch"], {
|
|
77
|
+
cwd: root,
|
|
78
|
+
env: { ...globalThis.process.env },
|
|
79
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
80
|
+
});
|
|
81
|
+
const stdout = [];
|
|
82
|
+
const stderr = [];
|
|
83
|
+
const timer = setTimeout(() => process.kill(), 30_000);
|
|
84
|
+
process.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
85
|
+
process.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
86
|
+
process.on("error", (error) => {
|
|
87
|
+
clearTimeout(timer);
|
|
88
|
+
rejectResult(error);
|
|
89
|
+
});
|
|
90
|
+
process.on("close", (code) => {
|
|
91
|
+
clearTimeout(timer);
|
|
92
|
+
if (code !== 0) {
|
|
93
|
+
rejectResult(new Error(Buffer.concat(stderr).toString("utf8").trim() || "git cat-file failed"));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
resolveResult(parseBatch(Buffer.concat(stdout), unique));
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
rejectResult(error);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
process.stdin.end(`${unique.join("\n")}\n`);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function directIndexFiles(paths, directory) {
|
|
107
|
+
const normalizedDirectory = normalize(directory).replace(/\/$/, "");
|
|
108
|
+
return paths
|
|
109
|
+
.filter((path) => normalize(dirname(path)) === normalizedDirectory)
|
|
110
|
+
.map((path) => basename(path));
|
|
111
|
+
}
|
|
112
|
+
export async function createDocsRepositoryView(root, source = "worktree") {
|
|
113
|
+
if (source === "worktree") {
|
|
114
|
+
const trackedPaths = await worktreePaths(root);
|
|
115
|
+
return {
|
|
116
|
+
root,
|
|
117
|
+
source,
|
|
118
|
+
trackedPaths,
|
|
119
|
+
has: (path) => existsSync(join(root, path)),
|
|
120
|
+
directFileNames: (directory) => {
|
|
121
|
+
try {
|
|
122
|
+
return readdirSync(join(root, directory)).filter((entry) => {
|
|
123
|
+
try {
|
|
124
|
+
return statSync(join(root, directory, entry)).isFile();
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
readTexts: async (paths) => {
|
|
136
|
+
const texts = new Map();
|
|
137
|
+
for (const path of paths) {
|
|
138
|
+
try {
|
|
139
|
+
texts.set(path, readFileSync(join(root, path), "utf8"));
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// The caller decides whether a missing tracked path is a finding.
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return texts;
|
|
146
|
+
},
|
|
147
|
+
byteLength: async (path) => {
|
|
148
|
+
try {
|
|
149
|
+
return statSync(join(root, path)).size;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const entries = await indexEntries(root);
|
|
158
|
+
const trackedPaths = [...entries.keys()];
|
|
159
|
+
const textCache = new Map();
|
|
160
|
+
const loadTexts = async (paths) => {
|
|
161
|
+
const wanted = [...new Set(paths.map(normalize))].filter((path) => entries.has(path));
|
|
162
|
+
const missing = wanted.filter((path) => !textCache.has(path));
|
|
163
|
+
const oids = missing.map((path) => entries.get(path).oid);
|
|
164
|
+
const blobs = await readIndexBlobs(root, oids);
|
|
165
|
+
for (const path of missing) {
|
|
166
|
+
const blob = blobs.get(entries.get(path).oid);
|
|
167
|
+
if (blob)
|
|
168
|
+
textCache.set(path, blob.toString("utf8"));
|
|
169
|
+
}
|
|
170
|
+
return new Map(wanted.flatMap((path) => (textCache.has(path) ? [[path, textCache.get(path)]] : [])));
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
root,
|
|
174
|
+
source,
|
|
175
|
+
trackedPaths,
|
|
176
|
+
has: (path) => entries.has(normalize(path)),
|
|
177
|
+
directFileNames: (directory) => directIndexFiles(trackedPaths, directory),
|
|
178
|
+
readTexts: loadTexts,
|
|
179
|
+
byteLength: async (path) => {
|
|
180
|
+
const normalized = normalize(path);
|
|
181
|
+
const text = (await loadTexts([normalized])).get(normalized);
|
|
182
|
+
return text === undefined ? null : Buffer.byteLength(text, "utf8");
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|