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
|
@@ -9,7 +9,8 @@ import type { CookieJar } from "../cookies/index.js";
|
|
|
9
9
|
* Used by the `fetch` command and other tooling that wants to share session
|
|
10
10
|
* state with `browse`.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export type FetchResponseType = "text" | "bytes";
|
|
13
|
+
export interface FetchOptions<TResponseType extends FetchResponseType = "text"> {
|
|
13
14
|
/** HTTP method. Default GET. */
|
|
14
15
|
method?: string;
|
|
15
16
|
/** Request body. Strings/Buffers/Streams pass through to fetch directly. */
|
|
@@ -35,22 +36,27 @@ export interface FetchOptions {
|
|
|
35
36
|
* only land when the key isn't already set.
|
|
36
37
|
*/
|
|
37
38
|
extraHeaders?: (url: string) => Record<string, string>;
|
|
39
|
+
/** Response body representation. Default `text`; use `bytes` for lossless file output. */
|
|
40
|
+
responseType?: TResponseType;
|
|
38
41
|
}
|
|
39
|
-
|
|
42
|
+
type FetchBody<TResponseType extends FetchResponseType> = TResponseType extends "bytes" ? Uint8Array : string;
|
|
43
|
+
export interface FetchResult<TBody = string> {
|
|
40
44
|
status: number;
|
|
41
45
|
statusText: string;
|
|
42
46
|
url: string;
|
|
43
47
|
headers: Record<string, string>;
|
|
44
|
-
body:
|
|
48
|
+
body: TBody;
|
|
45
49
|
/** Number of cookies persisted back into the jar (0 if no jar passed). */
|
|
46
50
|
cookiesSaved: number;
|
|
47
51
|
}
|
|
48
52
|
/**
|
|
49
53
|
* Fetch a URL with optional cookie-jar attach + persist.
|
|
50
54
|
*
|
|
51
|
-
* Returns the response body as
|
|
55
|
+
* Returns the response body as text by default (callers handle JSON parsing).
|
|
56
|
+
* Pass `responseType: "bytes"` when the caller must preserve the body exactly.
|
|
52
57
|
* Streams aren't supported; this is a CLI helper, not a streaming HTTP
|
|
53
58
|
* client. Use Bun's `fetch` directly for streaming workloads.
|
|
54
59
|
*/
|
|
55
|
-
export declare function fetchWithJar(url: string, opts?: FetchOptions): Promise<FetchResult
|
|
60
|
+
export declare function fetchWithJar<TResponseType extends FetchResponseType = "text">(url: string, opts?: FetchOptions<TResponseType>): Promise<FetchResult<FetchBody<TResponseType>>>;
|
|
61
|
+
export {};
|
|
56
62
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/http/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/http/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;GASG;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,YAAY,CAAC,aAAa,SAAS,iBAAiB,GAAG,MAAM;IAC5E,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,0FAA0F;IAC1F,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,KAAK,SAAS,CAAC,aAAa,SAAS,iBAAiB,IAAI,aAAa,SAAS,OAAO,GACnF,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,MAAM;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,aAAa,SAAS,iBAAiB,GAAG,MAAM,EACjF,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,YAAY,CAAC,aAAa,CAAM,GACrC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CA8EhD"}
|
package/dist/lib/http/client.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetch a URL with optional cookie-jar attach + persist.
|
|
3
3
|
*
|
|
4
|
-
* Returns the response body as
|
|
4
|
+
* Returns the response body as text by default (callers handle JSON parsing).
|
|
5
|
+
* Pass `responseType: "bytes"` when the caller must preserve the body exactly.
|
|
5
6
|
* Streams aren't supported; this is a CLI helper, not a streaming HTTP
|
|
6
7
|
* client. Use Bun's `fetch` directly for streaming workloads.
|
|
7
8
|
*/
|
|
@@ -21,13 +22,27 @@ export async function fetchWithJar(url, opts = {}) {
|
|
|
21
22
|
headers[k] = v;
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
+
// Byte mode is a download boundary, so keep the HTTP representation bytes
|
|
26
|
+
// aligned with the response headers. Bun otherwise decompresses the body
|
|
27
|
+
// while retaining Content-Encoding and the encoded Content-Length.
|
|
28
|
+
if (opts.responseType === "bytes" && !headers["Accept-Encoding"] && !headers["accept-encoding"]) {
|
|
29
|
+
headers["Accept-Encoding"] = "identity";
|
|
30
|
+
}
|
|
31
|
+
const fetchInit = {
|
|
25
32
|
method: opts.method ?? "GET",
|
|
26
33
|
body: opts.body,
|
|
27
34
|
headers,
|
|
28
35
|
redirect: opts.redirect ?? "follow",
|
|
29
36
|
signal: opts.signal,
|
|
30
|
-
}
|
|
37
|
+
};
|
|
38
|
+
if (opts.responseType === "bytes")
|
|
39
|
+
fetchInit.decompress = false;
|
|
40
|
+
const response = await fetch(url, fetchInit);
|
|
41
|
+
if (opts.responseType === "bytes" &&
|
|
42
|
+
typeof Bun === "undefined" &&
|
|
43
|
+
response.headers.has("content-encoding")) {
|
|
44
|
+
throw new Error("cannot preserve a content-encoded response under the Node fallback; install Bun or request identity encoding");
|
|
45
|
+
}
|
|
31
46
|
let cookiesSaved = 0;
|
|
32
47
|
if (opts.jar) {
|
|
33
48
|
const setCookieHeaders = collectSetCookie(response.headers);
|
|
@@ -46,12 +61,15 @@ export async function fetchWithJar(url, opts = {}) {
|
|
|
46
61
|
response.headers.forEach((value, key) => {
|
|
47
62
|
headerObj[key] = value;
|
|
48
63
|
});
|
|
64
|
+
const body = opts.responseType === "bytes"
|
|
65
|
+
? new Uint8Array(await response.arrayBuffer())
|
|
66
|
+
: await response.text();
|
|
49
67
|
return {
|
|
50
68
|
status: response.status,
|
|
51
69
|
statusText: response.statusText,
|
|
52
70
|
url: response.url,
|
|
53
71
|
headers: headerObj,
|
|
54
|
-
body:
|
|
72
|
+
body: body,
|
|
55
73
|
cookiesSaved,
|
|
56
74
|
};
|
|
57
75
|
}
|
package/dist/lib/http/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,cAAc,cAAc,CAAC"}
|
package/dist/lib/http/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { fetchWithJar } from "./client.js";
|
|
1
|
+
export { fetchWithJar, } from "./client.js";
|
|
2
2
|
export * from "./request.js";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-indexer exclusions for the `.harnery/` coord root.
|
|
3
|
+
*
|
|
4
|
+
* `harn init` already writes `.harnery/.gitignore`, which keeps git-aware
|
|
5
|
+
* tools out of runtime state. Two high-traffic editor surfaces ignore
|
|
6
|
+
* gitignore, though: Cursor's codebase indexer (governed by a repo-root
|
|
7
|
+
* `.cursorindexingignore`) and the VS Code/Cursor file watcher (governed by
|
|
8
|
+
* `files.watcherExclude` in `.vscode/settings.json`). A busy coord root holds
|
|
9
|
+
* tens of thousands of ledger events plus working artifacts, so on
|
|
10
|
+
* session-heavy hosts the missing exclusions turn editor startup into an
|
|
11
|
+
* indexing storm over machine-local state no editor needs to see.
|
|
12
|
+
*
|
|
13
|
+
* `applyIndexerExclusions` is idempotent and non-destructive: it appends a
|
|
14
|
+
* managed entry to `.cursorindexingignore` (or creates the file) and merges a
|
|
15
|
+
* single key into `.vscode/settings.json` (or creates it). A settings file it
|
|
16
|
+
* cannot merge safely (comments, malformed JSON, or a non-object
|
|
17
|
+
* `files.watcherExclude`) is left byte-identical and reported as a manual
|
|
18
|
+
* step. `removeIndexerExclusions` reverses exactly what apply wrote: it never
|
|
19
|
+
* removes a `.harnery/` ignore entry the consumer added themselves (detected
|
|
20
|
+
* by the absence of the managed comment) and never edits a settings file it
|
|
21
|
+
* could not have written into.
|
|
22
|
+
*/
|
|
23
|
+
/** Ensure both editor exclusions exist. Returns init-style action lines. */
|
|
24
|
+
export declare function applyIndexerExclusions(projectRoot: string, dryRun: boolean): string[];
|
|
25
|
+
/** Reverse exactly what apply wrote. Returns action lines; silent when nothing is ours. */
|
|
26
|
+
export declare function removeIndexerExclusions(projectRoot: string, dryRun: boolean): string[];
|
|
27
|
+
//# sourceMappingURL=indexer-exclusions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer-exclusions.d.ts","sourceRoot":"","sources":["../../src/lib/indexer-exclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA4IH,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAErF;AAED,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAKtF"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-indexer exclusions for the `.harnery/` coord root.
|
|
3
|
+
*
|
|
4
|
+
* `harn init` already writes `.harnery/.gitignore`, which keeps git-aware
|
|
5
|
+
* tools out of runtime state. Two high-traffic editor surfaces ignore
|
|
6
|
+
* gitignore, though: Cursor's codebase indexer (governed by a repo-root
|
|
7
|
+
* `.cursorindexingignore`) and the VS Code/Cursor file watcher (governed by
|
|
8
|
+
* `files.watcherExclude` in `.vscode/settings.json`). A busy coord root holds
|
|
9
|
+
* tens of thousands of ledger events plus working artifacts, so on
|
|
10
|
+
* session-heavy hosts the missing exclusions turn editor startup into an
|
|
11
|
+
* indexing storm over machine-local state no editor needs to see.
|
|
12
|
+
*
|
|
13
|
+
* `applyIndexerExclusions` is idempotent and non-destructive: it appends a
|
|
14
|
+
* managed entry to `.cursorindexingignore` (or creates the file) and merges a
|
|
15
|
+
* single key into `.vscode/settings.json` (or creates it). A settings file it
|
|
16
|
+
* cannot merge safely (comments, malformed JSON, or a non-object
|
|
17
|
+
* `files.watcherExclude`) is left byte-identical and reported as a manual
|
|
18
|
+
* step. `removeIndexerExclusions` reverses exactly what apply wrote: it never
|
|
19
|
+
* removes a `.harnery/` ignore entry the consumer added themselves (detected
|
|
20
|
+
* by the absence of the managed comment) and never edits a settings file it
|
|
21
|
+
* could not have written into.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, mkdirSync, readFileSync, rmdirSync, rmSync, writeFileSync } from "node:fs";
|
|
24
|
+
import { resolve } from "node:path";
|
|
25
|
+
const CURSOR_IGNORE = ".cursorindexingignore";
|
|
26
|
+
const MANAGED_COMMENT = "# .harnery/ is machine-local harnery runtime state (entry managed by init)";
|
|
27
|
+
const MANAGED_ENTRY = ".harnery/";
|
|
28
|
+
const VSCODE_DIR = ".vscode";
|
|
29
|
+
const VSCODE_SETTINGS = ".vscode/settings.json";
|
|
30
|
+
const WATCHER_KEY = "files.watcherExclude";
|
|
31
|
+
const WATCHER_GLOB = "**/.harnery/**";
|
|
32
|
+
/** True when a `.cursorindexingignore` line already excludes the coord root. */
|
|
33
|
+
function coversCoordRoot(line) {
|
|
34
|
+
const t = line.trim();
|
|
35
|
+
return (t === ".harnery" ||
|
|
36
|
+
t === ".harnery/" ||
|
|
37
|
+
t === "/.harnery" ||
|
|
38
|
+
t === "/.harnery/" ||
|
|
39
|
+
t === ".harnery/**" ||
|
|
40
|
+
t === "/.harnery/**");
|
|
41
|
+
}
|
|
42
|
+
function applyCursorIgnore(projectRoot, dryRun) {
|
|
43
|
+
const path = resolve(projectRoot, CURSOR_IGNORE);
|
|
44
|
+
if (existsSync(path)) {
|
|
45
|
+
const raw = readFileSync(path, "utf8");
|
|
46
|
+
if (raw.split("\n").some(coversCoordRoot)) {
|
|
47
|
+
return `· ${CURSOR_IGNORE} already excludes .harnery/`;
|
|
48
|
+
}
|
|
49
|
+
if (dryRun)
|
|
50
|
+
return `+ would append .harnery/ to ${CURSOR_IGNORE}`;
|
|
51
|
+
const sep = raw === "" || raw.endsWith("\n") ? "" : "\n";
|
|
52
|
+
writeFileSync(path, `${raw}${sep}${MANAGED_COMMENT}\n${MANAGED_ENTRY}\n`);
|
|
53
|
+
return `+ appended .harnery/ to ${CURSOR_IGNORE}`;
|
|
54
|
+
}
|
|
55
|
+
if (dryRun)
|
|
56
|
+
return `+ would create ${CURSOR_IGNORE} (excludes .harnery/ from Cursor indexing)`;
|
|
57
|
+
writeFileSync(path, `${MANAGED_COMMENT}\n${MANAGED_ENTRY}\n`);
|
|
58
|
+
return `+ created ${CURSOR_IGNORE} (excludes .harnery/ from Cursor indexing)`;
|
|
59
|
+
}
|
|
60
|
+
function applyVscodeWatcherExclude(projectRoot, dryRun) {
|
|
61
|
+
const path = resolve(projectRoot, VSCODE_SETTINGS);
|
|
62
|
+
if (!existsSync(path)) {
|
|
63
|
+
if (dryRun)
|
|
64
|
+
return `+ would create ${VSCODE_SETTINGS} (file watcher excludes .harnery/)`;
|
|
65
|
+
mkdirSync(resolve(projectRoot, VSCODE_DIR), { recursive: true });
|
|
66
|
+
const body = JSON.stringify({ [WATCHER_KEY]: { [WATCHER_GLOB]: true } }, null, 2);
|
|
67
|
+
writeFileSync(path, `${body}\n`);
|
|
68
|
+
return `+ created ${VSCODE_SETTINGS} (file watcher excludes .harnery/)`;
|
|
69
|
+
}
|
|
70
|
+
const raw = readFileSync(path, "utf8");
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = JSON.parse(raw);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// JSONC (comments, trailing commas) or malformed. A rewrite would drop the
|
|
77
|
+
// consumer's comments, so leave the file alone and name the one-key merge.
|
|
78
|
+
return `! ${VSCODE_SETTINGS} is not plain JSON; add "${WATCHER_KEY}": {"${WATCHER_GLOB}": true} manually`;
|
|
79
|
+
}
|
|
80
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
81
|
+
return `! ${VSCODE_SETTINGS} is not a settings object; add "${WATCHER_KEY}": {"${WATCHER_GLOB}": true} manually`;
|
|
82
|
+
}
|
|
83
|
+
const settings = parsed;
|
|
84
|
+
const watcher = settings[WATCHER_KEY];
|
|
85
|
+
if (watcher !== undefined &&
|
|
86
|
+
(typeof watcher !== "object" || watcher === null || Array.isArray(watcher))) {
|
|
87
|
+
return `! ${VSCODE_SETTINGS} has a non-object "${WATCHER_KEY}"; add "${WATCHER_GLOB}": true manually`;
|
|
88
|
+
}
|
|
89
|
+
const map = watcher ?? {};
|
|
90
|
+
if (map[WATCHER_GLOB] === true) {
|
|
91
|
+
return `· ${VSCODE_SETTINGS} file watcher already excludes .harnery/`;
|
|
92
|
+
}
|
|
93
|
+
if (dryRun)
|
|
94
|
+
return `+ would add ${WATCHER_GLOB} to ${WATCHER_KEY} in ${VSCODE_SETTINGS}`;
|
|
95
|
+
map[WATCHER_GLOB] = true;
|
|
96
|
+
settings[WATCHER_KEY] = map;
|
|
97
|
+
writeFileSync(path, `${JSON.stringify(settings, null, 2)}\n`);
|
|
98
|
+
return `+ added ${WATCHER_GLOB} to ${WATCHER_KEY} in ${VSCODE_SETTINGS}`;
|
|
99
|
+
}
|
|
100
|
+
function removeCursorIgnore(projectRoot, dryRun) {
|
|
101
|
+
const path = resolve(projectRoot, CURSOR_IGNORE);
|
|
102
|
+
if (!existsSync(path))
|
|
103
|
+
return null;
|
|
104
|
+
const raw = readFileSync(path, "utf8");
|
|
105
|
+
const lines = raw.split("\n");
|
|
106
|
+
// Only the managed pair is ours. A bare `.harnery/` line without the managed
|
|
107
|
+
// comment is a consumer's own entry and stays.
|
|
108
|
+
if (!lines.some((line) => line.trim() === MANAGED_COMMENT))
|
|
109
|
+
return null;
|
|
110
|
+
if (dryRun)
|
|
111
|
+
return `+ would remove the managed .harnery/ entry from ${CURSOR_IGNORE}`;
|
|
112
|
+
const kept = lines.filter((line) => {
|
|
113
|
+
const t = line.trim();
|
|
114
|
+
return t !== MANAGED_COMMENT && t !== MANAGED_ENTRY;
|
|
115
|
+
});
|
|
116
|
+
if (kept.every((line) => line.trim() === "")) {
|
|
117
|
+
rmSync(path);
|
|
118
|
+
return `+ removed ${CURSOR_IGNORE} (was harnery-only)`;
|
|
119
|
+
}
|
|
120
|
+
let out = kept.join("\n");
|
|
121
|
+
if (!out.endsWith("\n"))
|
|
122
|
+
out += "\n";
|
|
123
|
+
writeFileSync(path, out);
|
|
124
|
+
return `+ removed the managed .harnery/ entry from ${CURSOR_IGNORE}`;
|
|
125
|
+
}
|
|
126
|
+
function removeVscodeWatcherExclude(projectRoot, dryRun) {
|
|
127
|
+
const path = resolve(projectRoot, VSCODE_SETTINGS);
|
|
128
|
+
if (!existsSync(path))
|
|
129
|
+
return null;
|
|
130
|
+
let parsed;
|
|
131
|
+
try {
|
|
132
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Not plain JSON, so apply never wrote into it.
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
139
|
+
return null;
|
|
140
|
+
const settings = parsed;
|
|
141
|
+
const watcher = settings[WATCHER_KEY];
|
|
142
|
+
if (typeof watcher !== "object" || watcher === null || Array.isArray(watcher))
|
|
143
|
+
return null;
|
|
144
|
+
const map = watcher;
|
|
145
|
+
if (!(WATCHER_GLOB in map))
|
|
146
|
+
return null;
|
|
147
|
+
if (dryRun)
|
|
148
|
+
return `+ would remove ${WATCHER_GLOB} from ${VSCODE_SETTINGS}`;
|
|
149
|
+
delete map[WATCHER_GLOB];
|
|
150
|
+
if (Object.keys(map).length === 0)
|
|
151
|
+
delete settings[WATCHER_KEY];
|
|
152
|
+
if (Object.keys(settings).length === 0) {
|
|
153
|
+
rmSync(path);
|
|
154
|
+
try {
|
|
155
|
+
// Drop the .vscode/ directory too when the settings file was all it held.
|
|
156
|
+
rmdirSync(resolve(projectRoot, VSCODE_DIR));
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Non-empty or shared; leave it.
|
|
160
|
+
}
|
|
161
|
+
return `+ removed ${VSCODE_SETTINGS} (was harnery-only)`;
|
|
162
|
+
}
|
|
163
|
+
writeFileSync(path, `${JSON.stringify(settings, null, 2)}\n`);
|
|
164
|
+
return `+ removed ${WATCHER_GLOB} from ${VSCODE_SETTINGS}`;
|
|
165
|
+
}
|
|
166
|
+
/** Ensure both editor exclusions exist. Returns init-style action lines. */
|
|
167
|
+
export function applyIndexerExclusions(projectRoot, dryRun) {
|
|
168
|
+
return [applyCursorIgnore(projectRoot, dryRun), applyVscodeWatcherExclude(projectRoot, dryRun)];
|
|
169
|
+
}
|
|
170
|
+
/** Reverse exactly what apply wrote. Returns action lines; silent when nothing is ours. */
|
|
171
|
+
export function removeIndexerExclusions(projectRoot, dryRun) {
|
|
172
|
+
return [
|
|
173
|
+
removeCursorIgnore(projectRoot, dryRun),
|
|
174
|
+
removeVscodeWatcherExclude(projectRoot, dryRun),
|
|
175
|
+
].filter((line) => line !== null);
|
|
176
|
+
}
|
|
@@ -7,13 +7,15 @@
|
|
|
7
7
|
* writes, and deletes so init/deinit stay thin and this stays integration-
|
|
8
8
|
* testable against a temp dir.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Three files, one dir:
|
|
11
11
|
* - `AGENTS.md` — the always-on orientation block (a managed region; the
|
|
12
12
|
* consumer owns the rest of the file).
|
|
13
13
|
* - `CLAUDE.md` — claude-code only; Claude Code reads CLAUDE.md, not AGENTS.md,
|
|
14
14
|
* so a fresh consumer gets a CLAUDE.md whose managed region imports
|
|
15
15
|
* `@AGENTS.md`. A CLAUDE.md that already imports AGENTS.md or already carries
|
|
16
16
|
* the block (a host that generates CLAUDE.md from AGENTS.md) is left alone.
|
|
17
|
+
* - `.cursor/rules/harnery-turn-ritual.mdc` — cursor only; an Always Apply
|
|
18
|
+
* rule that makes the Stop-enforced status footer visible in reply text.
|
|
17
19
|
* - `<adapter-skill-dir>/<skill>/SKILL.md` — fully-owned files, honoring
|
|
18
20
|
* `skills.exclude` in `.harnery/config.jsonc`. Claude Code uses
|
|
19
21
|
* `.claude/skills/`; Cursor and Codex use `.agents/skills/`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/lib/instructions/apply.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/lib/instructions/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAyFH,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAYlE;AAmBD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAoInF;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,WAAW,CA8FrF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC,WAAW,CA2Db"}
|
|
@@ -7,25 +7,28 @@
|
|
|
7
7
|
* writes, and deletes so init/deinit stay thin and this stays integration-
|
|
8
8
|
* testable against a temp dir.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Three files, one dir:
|
|
11
11
|
* - `AGENTS.md` — the always-on orientation block (a managed region; the
|
|
12
12
|
* consumer owns the rest of the file).
|
|
13
13
|
* - `CLAUDE.md` — claude-code only; Claude Code reads CLAUDE.md, not AGENTS.md,
|
|
14
14
|
* so a fresh consumer gets a CLAUDE.md whose managed region imports
|
|
15
15
|
* `@AGENTS.md`. A CLAUDE.md that already imports AGENTS.md or already carries
|
|
16
16
|
* the block (a host that generates CLAUDE.md from AGENTS.md) is left alone.
|
|
17
|
+
* - `.cursor/rules/harnery-turn-ritual.mdc` — cursor only; an Always Apply
|
|
18
|
+
* rule that makes the Stop-enforced status footer visible in reply text.
|
|
17
19
|
* - `<adapter-skill-dir>/<skill>/SKILL.md` — fully-owned files, honoring
|
|
18
20
|
* `skills.exclude` in `.harnery/config.jsonc`. Claude Code uses
|
|
19
21
|
* `.claude/skills/`; Cursor and Codex use `.agents/skills/`.
|
|
20
22
|
*/
|
|
21
23
|
import { existsSync, mkdirSync, readdirSync, readFileSync, rmdirSync, rmSync, writeFileSync, } from "node:fs";
|
|
22
24
|
import { dirname, join } from "node:path";
|
|
23
|
-
import { stripJsonComments } from "../../core/config.js";
|
|
25
|
+
import { endOfTurnStatusCommand, stripJsonComments } from "../../core/config.js";
|
|
24
26
|
import { readHostAddendum } from "./host-addendum.js";
|
|
25
|
-
import { checkOwnedSkill, checkRegion, isOwnedFile, removeRegion, spliceRegion, } from "./splice.js";
|
|
27
|
+
import { checkOwnedSkill, checkRegion, isOwnedFile, removeRegion, shortHash, spliceRegion, } from "./splice.js";
|
|
26
28
|
import { HOST_ADDENDUM_REGION, IMPORT_REGION, INSTRUCTIONS_REGION, renderInstructionsBlock, SKILLS, } from "./templates.js";
|
|
27
29
|
const AGENTS_FILE = "AGENTS.md";
|
|
28
30
|
const CLAUDE_FILE = "CLAUDE.md";
|
|
31
|
+
const CURSOR_RULE_FILE = join(".cursor", "rules", "harnery-turn-ritual.mdc");
|
|
29
32
|
const ADAPTER_SKILLS_DIR = {
|
|
30
33
|
"claude-code": join(".claude", "skills"),
|
|
31
34
|
cursor: join(".agents", "skills"),
|
|
@@ -43,6 +46,36 @@ function skillBody(render, binName) {
|
|
|
43
46
|
const content = render(binName);
|
|
44
47
|
return content.slice(content.indexOf("-->") + 3).trim();
|
|
45
48
|
}
|
|
49
|
+
function cursorRuleBody(projectRoot, binName) {
|
|
50
|
+
const statusCommand = endOfTurnStatusCommand(projectRoot);
|
|
51
|
+
return [
|
|
52
|
+
"# Harnery turn ritual",
|
|
53
|
+
"",
|
|
54
|
+
"On every turn that uses tools:",
|
|
55
|
+
"",
|
|
56
|
+
`1. Run \`${binName} agents set-task "<short focus>"\` during the turn, even when the focus is unchanged.`,
|
|
57
|
+
`2. Make \`${statusCommand}\` your final tool call.`,
|
|
58
|
+
"3. Append that command's stdout verbatim in a fenced code block at the bottom of the same substantive reply.",
|
|
59
|
+
"",
|
|
60
|
+
"Cursor Stop enforces all three signals. A missing signal produces one follow-up that names every repair needed.",
|
|
61
|
+
].join("\n");
|
|
62
|
+
}
|
|
63
|
+
function cursorRuleContent(projectRoot, binName) {
|
|
64
|
+
const body = cursorRuleBody(projectRoot, binName);
|
|
65
|
+
const marker = `<!-- harnery:generated cursor-turn-ritual v=${shortHash(body)}; machine-owned; ` +
|
|
66
|
+
`regenerated by \`${binName} init\`, removed by \`${binName} deinit\`. ` +
|
|
67
|
+
"Edit the harnery template, not this file. -->";
|
|
68
|
+
return [
|
|
69
|
+
"---",
|
|
70
|
+
"description: Harnery end-of-turn coordination ritual",
|
|
71
|
+
"alwaysApply: true",
|
|
72
|
+
"---",
|
|
73
|
+
marker,
|
|
74
|
+
"",
|
|
75
|
+
body,
|
|
76
|
+
"",
|
|
77
|
+
].join("\n");
|
|
78
|
+
}
|
|
46
79
|
/** Read `skills.exclude` from `.harnery/config.jsonc` (absent/unparseable → none). */
|
|
47
80
|
export function readSkillsExclude(projectRoot) {
|
|
48
81
|
const p = join(projectRoot, ".harnery", "config.jsonc");
|
|
@@ -157,6 +190,26 @@ export function applyInstructions(projectRoot, opts) {
|
|
|
157
190
|
}
|
|
158
191
|
}
|
|
159
192
|
}
|
|
193
|
+
// ── Cursor Always Apply rule ────────────────────────────────────────────
|
|
194
|
+
if (opts.adapter === "cursor") {
|
|
195
|
+
const rulePath = join(projectRoot, CURSOR_RULE_FILE);
|
|
196
|
+
const content = cursorRuleContent(projectRoot, opts.binName);
|
|
197
|
+
const before = existsSync(rulePath) ? readFileSync(rulePath, "utf8") : null;
|
|
198
|
+
if (before === content) {
|
|
199
|
+
actions.push(`· ${CURSOR_RULE_FILE} already current`);
|
|
200
|
+
}
|
|
201
|
+
else if (before !== null && !isOwnedFile(before)) {
|
|
202
|
+
warnings.push(`left ${CURSOR_RULE_FILE} (hand-edited; no harnery ownership marker)`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
if (!opts.dryRun) {
|
|
206
|
+
mkdirSync(dirname(rulePath), { recursive: true });
|
|
207
|
+
writeFileSync(rulePath, content);
|
|
208
|
+
}
|
|
209
|
+
const fresh = before === null;
|
|
210
|
+
actions.push(`${fresh ? "+" : "~"} ${verbed(fresh ? "write" : "update", fresh ? "wrote" : "updated")} ${CURSOR_RULE_FILE}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
160
213
|
// ── shipped skills ───────────────────────────────────────────────────────
|
|
161
214
|
if (skillsDir) {
|
|
162
215
|
const exclude = readSkillsExclude(projectRoot);
|
|
@@ -239,6 +292,19 @@ export function removeInstructions(projectRoot, opts) {
|
|
|
239
292
|
}
|
|
240
293
|
}
|
|
241
294
|
}
|
|
295
|
+
if (opts.adapter === "cursor") {
|
|
296
|
+
const rulePath = join(projectRoot, CURSOR_RULE_FILE);
|
|
297
|
+
if (existsSync(rulePath)) {
|
|
298
|
+
if (!isOwnedFile(readFileSync(rulePath, "utf8"))) {
|
|
299
|
+
warnings.push(`left ${CURSOR_RULE_FILE} (hand-edited; no harnery ownership marker)`);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
if (!opts.dryRun)
|
|
303
|
+
rmSync(rulePath);
|
|
304
|
+
actions.push(`+ ${opts.dryRun ? "would delete" : "deleted"} ${CURSOR_RULE_FILE}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
242
308
|
// ── shipped skills ───────────────────────────────────────────────────────
|
|
243
309
|
if (skillsDir) {
|
|
244
310
|
for (const skill of SKILLS) {
|
|
@@ -305,6 +371,11 @@ export function checkInstructions(projectRoot, opts) {
|
|
|
305
371
|
note(`skill ${skill.id}`, checkOwnedSkill(c, skillBody(skill.render, opts.binName)));
|
|
306
372
|
}
|
|
307
373
|
}
|
|
374
|
+
if (opts.adapter === "cursor") {
|
|
375
|
+
const rulePath = join(projectRoot, CURSOR_RULE_FILE);
|
|
376
|
+
const content = existsSync(rulePath) ? readFileSync(rulePath, "utf8") : "";
|
|
377
|
+
note(`${CURSOR_RULE_FILE} rule`, checkOwnedSkill(content, cursorRuleBody(projectRoot, opts.binName)));
|
|
378
|
+
}
|
|
308
379
|
}
|
|
309
380
|
catch (err) {
|
|
310
381
|
errored = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/lib/instructions/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,sEAAsE;AACtE,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,GAAG,EAAE,OAAO,CAAC;IACb,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,WAAoE,GAC3E,MAAM,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/lib/instructions/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,sEAAsE;AACtE,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,GAAG,EAAE,OAAO,CAAC;IACb,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,WAAoE,GAC3E,MAAM,CAgHR;AAID,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAmVD,eAAO,MAAM,MAAM,EAAE,aAAa,EAiDjC,CAAC"}
|
|
@@ -113,6 +113,12 @@ coordination ledger (\`.harnery/ledgers/v3/\`). Lead a shell command with a
|
|
|
113
113
|
carries a reason instead of \`(no intent)\`; the [tool-intent
|
|
114
114
|
guide](https://harnery.com/guides/tool-intent/) owns the details.
|
|
115
115
|
|
|
116
|
+
**Messaging another agent.** \`${b} agents ping <name> "<message>"\` reaches an
|
|
117
|
+
agent by name whether or not they are running: a live agent sees it on their next
|
|
118
|
+
prompt, and a dormant name holds it until a session of that name next starts.
|
|
119
|
+
Send it as your first and only step. Do not check who is live first, and do not
|
|
120
|
+
hunt for somewhere else to leave it. Only a never-used name is refused.
|
|
121
|
+
|
|
116
122
|
**Journal.** \`${b} journal add <category> "<text>"\` (category = ${journalCats})
|
|
117
123
|
leaves breadcrumbs that survive context compaction;
|
|
118
124
|
\`${b} journal read\` reads yours, \`${b} journal read --name <peer>\` reads a peer's.
|
|
@@ -125,6 +131,11 @@ returned path, then run \`${b} artifacts release <id>\` when active work is done
|
|
|
125
131
|
Do not create a repo-root temp directory; \`${b} artifacts clean\` previews
|
|
126
132
|
expired cleanup and requires \`--yes\` to delete anything.
|
|
127
133
|
|
|
134
|
+
**Local file links.** When the operator should open a local repo file, mint the
|
|
135
|
+
URL with \`${b} files url <repo-relative-path>\` instead of guessing it. HTML opens
|
|
136
|
+
as a real page with working scripts and relative assets; other files open in the
|
|
137
|
+
dashboard viewer. Use localhost links only when the operator shares this machine.
|
|
138
|
+
|
|
128
139
|
**Decision docket.** When you would otherwise stop to ask a human a decision you
|
|
129
140
|
can't resolve from the repo, file it instead. \`${b} decision file "<question>"\`
|
|
130
141
|
records it and lets you proceed on a stated default; \`${b} decision search "<terms>"\`
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Mnemonic dashboard port: 4276 spells HARN on a phone keypad. */
|
|
2
|
+
export declare const DEFAULT_WEB_PORT = 4276;
|
|
3
|
+
/** Cookie-isolated host for navigable repo files. */
|
|
4
|
+
export declare const FILES_ORIGIN_HOST = "harnery-files.localhost";
|
|
5
|
+
/** Encode each repo-path segment while preserving slash-based URL resolution. */
|
|
6
|
+
export declare function encodedRepoPath(relPath: string): string;
|
|
7
|
+
export declare function localFilesOriginUrl(relPath: string, port?: number | string, protocol?: string): string;
|
|
8
|
+
export declare function localFileViewerUrl(relPath: string, port?: number | string): string;
|
|
9
|
+
//# sourceMappingURL=local-file-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file-url.d.ts","sourceRoot":"","sources":["../../src/lib/local-file-url.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,GAAG,MAAyB,EACxC,QAAQ,SAAU,GACjB,MAAM,CAGR;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,GAAG,MAAyB,GACvC,MAAM,CAER"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Mnemonic dashboard port: 4276 spells HARN on a phone keypad. */
|
|
2
|
+
export const DEFAULT_WEB_PORT = 4276;
|
|
3
|
+
/** Cookie-isolated host for navigable repo files. */
|
|
4
|
+
export const FILES_ORIGIN_HOST = "harnery-files.localhost";
|
|
5
|
+
/** Encode each repo-path segment while preserving slash-based URL resolution. */
|
|
6
|
+
export function encodedRepoPath(relPath) {
|
|
7
|
+
return relPath
|
|
8
|
+
.replace(/^\/+/, "")
|
|
9
|
+
.split("/")
|
|
10
|
+
.filter(Boolean)
|
|
11
|
+
.map((segment) => encodeURIComponent(segment))
|
|
12
|
+
.join("/");
|
|
13
|
+
}
|
|
14
|
+
export function localFilesOriginUrl(relPath, port = DEFAULT_WEB_PORT, protocol = "http:") {
|
|
15
|
+
const portPart = String(port) === "" ? "" : `:${port}`;
|
|
16
|
+
return `${protocol}//${FILES_ORIGIN_HOST}${portPart}/${encodedRepoPath(relPath)}`;
|
|
17
|
+
}
|
|
18
|
+
export function localFileViewerUrl(relPath, port = DEFAULT_WEB_PORT) {
|
|
19
|
+
return `http://localhost:${port}/files?path=${encodeURIComponent(relPath)}`;
|
|
20
|
+
}
|