harnery 0.40.0 → 0.42.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/README.md +1 -1
- package/dist/commander.js +4 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +34 -20
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +113 -12
- package/dist/commands/browse-ai.d.ts.map +1 -1
- package/dist/commands/browse-ai.js +4 -0
- package/dist/commands/browse.d.ts +164 -0
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +388 -45
- package/dist/commands/checkpoint.js +8 -12
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +52 -0
- package/dist/commands/deinit.d.ts +1 -1
- package/dist/commands/deinit.d.ts.map +1 -1
- package/dist/commands/deinit.js +8 -4
- package/dist/commands/disk.d.ts +6 -0
- package/dist/commands/disk.d.ts.map +1 -0
- package/dist/commands/disk.js +80 -0
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +2 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +58 -3
- package/dist/commands/fetch.d.ts.map +1 -1
- package/dist/commands/fetch.js +10 -0
- package/dist/commands/files.d.ts +16 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +54 -2
- package/dist/commands/init.d.ts +21 -5
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +271 -109
- package/dist/commands/instructions.js +5 -4
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +2 -1
- package/dist/commands/rm.d.ts +4 -0
- package/dist/commands/rm.d.ts.map +1 -0
- package/dist/commands/rm.js +87 -0
- package/dist/commands/servers.d.ts +7 -0
- package/dist/commands/servers.d.ts.map +1 -0
- package/dist/commands/servers.js +394 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +82 -2
- package/dist/commands/webview.d.ts +4 -0
- package/dist/commands/webview.d.ts.map +1 -0
- package/dist/commands/webview.js +94 -0
- package/dist/core/adapter.d.ts +50 -1
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +59 -1
- package/dist/core/adapters/attestation.d.ts.map +1 -1
- package/dist/core/adapters/attestation.js +3 -2
- package/dist/core/adapters/profiles.d.ts +29 -3
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +53 -1
- package/dist/core/adapters/registry.d.ts.map +1 -1
- package/dist/core/adapters/registry.js +33 -0
- package/dist/core/adapters/types.d.ts +9 -0
- package/dist/core/adapters/types.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.d.ts +1 -1
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +2 -7
- package/dist/core/agents/cli.js +25 -16
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +7 -2
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +2 -0
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +3 -9
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +2 -8
- 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 +1 -1
- package/dist/core/agents/session-events.d.ts +6 -2
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +105 -26
- package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -1
- package/dist/core/agents/session-finalization-state-v3.js +2 -1
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -1
- package/dist/core/agents/session-finalizer-v3.js +5 -4
- package/dist/core/agents/session-name-display.d.ts +28 -0
- package/dist/core/agents/session-name-display.d.ts.map +1 -1
- package/dist/core/agents/session-name-display.js +43 -0
- package/dist/core/agents/state/heartbeat-reader.d.ts +7 -0
- package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.d.ts +10 -0
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +21 -2
- package/dist/core/agents/state/live-coordination-view.d.ts +20 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +61 -0
- package/dist/core/agents/state/live-coordination-writer.js +3 -0
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +2 -10
- package/dist/core/agents/turn-changes.d.ts +17 -0
- package/dist/core/agents/turn-changes.d.ts.map +1 -0
- package/dist/core/agents/turn-changes.js +76 -0
- package/dist/core/artifacts/delivery-card.d.ts.map +1 -1
- package/dist/core/artifacts/delivery-card.js +11 -3
- package/dist/core/artifacts/index.d.ts +140 -4
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +526 -52
- package/dist/core/config.d.ts +73 -11
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +142 -3
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +2 -1
- package/dist/core/conversations/archive.d.ts.map +1 -1
- package/dist/core/conversations/archive.js +4 -3
- package/dist/core/diagnostics/bundle.d.ts.map +1 -1
- package/dist/core/diagnostics/bundle.js +5 -4
- package/dist/core/events/legacy-storage/canary.d.ts.map +1 -1
- package/dist/core/events/legacy-storage/canary.js +5 -4
- package/dist/core/events/legacy-storage/compression.d.ts.map +1 -1
- package/dist/core/events/legacy-storage/compression.js +2 -1
- package/dist/core/events/v3/adapter-id.d.ts +10 -2
- package/dist/core/events/v3/adapter-id.d.ts.map +1 -1
- package/dist/core/events/v3/adapter-id.js +16 -0
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
- package/dist/core/events/v3/authority-outbox.js +2 -1
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
- package/dist/core/events/v3/bootstrap.js +5 -4
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +17 -0
- package/dist/core/events/v3/contract.d.ts +5 -0
- package/dist/core/events/v3/contract.d.ts.map +1 -1
- package/dist/core/events/v3/contract.js +7 -1
- package/dist/core/events/v3/control-witness.d.ts.map +1 -1
- package/dist/core/events/v3/control-witness.js +3 -2
- package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -1
- package/dist/core/events/v3/coordination-transaction-recovery.js +4 -3
- package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -1
- package/dist/core/events/v3/fingerprint-keys.js +7 -6
- package/dist/core/events/v3/generated.d.ts +1 -1
- package/dist/core/events/v3/generated.js +1 -1
- package/dist/core/events/v3/live-feed.d.ts.map +1 -1
- package/dist/core/events/v3/live-feed.js +5 -4
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/command-recorder.js +8 -7
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +8 -7
- package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -1
- package/dist/core/events/v3/producers/diagnostic-summaries.js +5 -4
- package/dist/core/events/v3/producers/hook-base.d.ts +1 -0
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +10 -4
- package/dist/core/events/v3/producers/hook.d.ts +2 -0
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook.js +16 -1
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +16 -6
- package/dist/core/events/v3/producers/recorder.d.ts +2 -4
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +125 -101
- package/dist/core/events/v3/projection.js +9 -1
- package/dist/core/events/v3/recovery.d.ts.map +1 -1
- package/dist/core/events/v3/recovery.js +4 -3
- package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/inventory.js +2 -1
- package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/maintenance.js +4 -3
- package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/pack-reader.js +4 -3
- package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/pack-writer.js +6 -5
- package/dist/core/events/v3/tool-line-changes.d.ts +8 -0
- package/dist/core/events/v3/tool-line-changes.d.ts.map +1 -0
- package/dist/core/events/v3/tool-line-changes.js +135 -0
- package/dist/core/events/v3/writer.d.ts.map +1 -1
- package/dist/core/events/v3/writer.js +8 -7
- package/dist/core/governor/planning.d.ts.map +1 -1
- package/dist/core/governor/planning.js +6 -5
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +12 -11
- package/dist/core/governor/state.d.ts.map +1 -1
- package/dist/core/governor/state.js +7 -6
- package/dist/core/guard/evaluator.js +1 -0
- package/dist/core/guard/storage.d.ts.map +1 -1
- package/dist/core/guard/storage.js +3 -2
- package/dist/core/hooks/adapter/behaviors/claude-code.d.ts +4 -0
- package/dist/core/hooks/adapter/behaviors/claude-code.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/claude-code.js +31 -0
- package/dist/core/hooks/adapter/behaviors/codex.d.ts +15 -0
- package/dist/core/hooks/adapter/behaviors/codex.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/codex.js +82 -0
- package/dist/core/hooks/adapter/behaviors/cursor.d.ts +7 -0
- package/dist/core/hooks/adapter/behaviors/cursor.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/cursor.js +35 -0
- package/dist/core/hooks/adapter/behaviors/index.d.ts +11 -0
- package/dist/core/hooks/adapter/behaviors/index.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/index.js +20 -0
- package/dist/core/hooks/adapter/behaviors/openclaw.d.ts +7 -0
- package/dist/core/hooks/adapter/behaviors/openclaw.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/openclaw.js +34 -0
- package/dist/core/hooks/adapter/behaviors/opencode.d.ts +7 -0
- package/dist/core/hooks/adapter/behaviors/opencode.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/opencode.js +34 -0
- package/dist/core/hooks/adapter/behaviors/types.d.ts +89 -0
- package/dist/core/hooks/adapter/behaviors/types.d.ts.map +1 -0
- package/dist/core/hooks/adapter/behaviors/types.js +1 -0
- package/dist/core/hooks/adapter/detect.d.ts +1 -1
- package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
- package/dist/core/hooks/adapter/detect.js +2 -3
- package/dist/core/hooks/adapter/events.d.ts +46 -1
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +36 -0
- package/dist/core/hooks/adapter/opencode-plugin.d.ts +60 -0
- package/dist/core/hooks/adapter/opencode-plugin.d.ts.map +1 -0
- package/dist/core/hooks/adapter/opencode-plugin.js +129 -0
- package/dist/core/hooks/adapter/output.d.ts +7 -0
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +8 -1
- package/dist/core/hooks/adapter/runtime-telemetry.js +3 -1
- package/dist/core/hooks/adapter/wiring.d.ts +52 -8
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +133 -12
- package/dist/core/hooks/cli.js +676 -531
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +2 -1
- package/dist/core/hooks/prompt-context/contract.d.ts.map +1 -1
- package/dist/core/hooks/prompt-context/contract.js +1 -0
- package/dist/core/hooks/resolve/transcript.d.ts +1 -1
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +35 -4
- package/dist/core/hooks/run-markers.d.ts +37 -0
- package/dist/core/hooks/run-markers.d.ts.map +1 -0
- package/dist/core/hooks/run-markers.js +109 -0
- package/dist/core/hooks/session-name-presence.d.ts +3 -1
- package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
- package/dist/core/hooks/session-name-presence.js +7 -2
- package/dist/core/hooks/shell-waiter.d.ts +2 -0
- package/dist/core/hooks/shell-waiter.d.ts.map +1 -0
- package/dist/core/hooks/shell-waiter.js +173 -0
- package/dist/core/resources/service.d.ts.map +1 -1
- package/dist/core/resources/service.js +5 -4
- package/dist/core/semantic/review.d.ts.map +1 -1
- package/dist/core/semantic/review.js +5 -4
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +15 -14
- package/dist/core/semantic/storage.d.ts.map +1 -1
- package/dist/core/semantic/storage.js +5 -4
- package/dist/core/servers/index.d.ts +211 -0
- package/dist/core/servers/index.d.ts.map +1 -0
- package/dist/core/servers/index.js +560 -0
- package/dist/core/servers/net.d.ts +58 -0
- package/dist/core/servers/net.d.ts.map +1 -0
- package/dist/core/servers/net.js +270 -0
- package/dist/core/servers/tunnels.d.ts +14 -0
- package/dist/core/servers/tunnels.d.ts.map +1 -0
- package/dist/core/servers/tunnels.js +33 -0
- package/dist/core/storage/atomic-json.d.ts.map +1 -1
- package/dist/core/storage/atomic-json.js +7 -3
- package/dist/core/storage/builtins.js +1 -0
- package/dist/core/storage/durable-history.d.ts.map +1 -1
- package/dist/core/storage/durable-history.js +6 -5
- package/dist/core/storage/maintenance-providers.d.ts.map +1 -1
- package/dist/core/storage/maintenance-providers.js +2 -1
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +7 -6
- package/dist/core/storage/metrics.d.ts.map +1 -1
- package/dist/core/storage/metrics.js +5 -1
- package/dist/core/storage/modes.d.ts +17 -0
- package/dist/core/storage/modes.d.ts.map +1 -0
- package/dist/core/storage/modes.js +47 -0
- package/dist/core/storage/process-log.d.ts.map +1 -1
- package/dist/core/storage/process-log.js +3 -2
- package/dist/core/storage/receipts.d.ts.map +1 -1
- package/dist/core/storage/receipts.js +4 -3
- package/dist/core/storage/segments.d.ts.map +1 -1
- package/dist/core/storage/segments.js +7 -6
- package/dist/core/supervisor/hook-health.d.ts +2 -1
- package/dist/core/supervisor/hook-health.d.ts.map +1 -1
- package/dist/core/supervisor/hook-health.js +4 -3
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/supervisor/service.js +7 -6
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +8 -7
- package/dist/core/workflow/adapters.d.ts +7 -0
- package/dist/core/workflow/adapters.d.ts.map +1 -1
- package/dist/core/workflow/adapters.js +9 -0
- package/dist/core/workflow/approvals.d.ts.map +1 -1
- package/dist/core/workflow/approvals.js +6 -5
- package/dist/core/workflow/billing.d.ts.map +1 -1
- package/dist/core/workflow/billing.js +33 -4
- package/dist/core/workflow/durable-record.d.ts.map +1 -1
- package/dist/core/workflow/durable-record.js +4 -3
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +30 -1
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +2 -3
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +3 -2
- package/dist/core/workflow/sandbox-projection.d.ts +13 -2
- package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
- package/dist/core/workflow/sandbox-projection.js +23 -0
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +6 -1
- package/dist/core/workflow/spawn-codex.d.ts +2 -0
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +20 -1
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +6 -1
- package/dist/core/workflow/spawn-opencode.d.ts +36 -0
- package/dist/core/workflow/spawn-opencode.d.ts.map +1 -0
- package/dist/core/workflow/spawn-opencode.js +135 -0
- package/dist/core/workflow/transcript.d.ts.map +1 -1
- package/dist/core/workflow/transcript.js +3 -2
- package/dist/core/workflow/types.d.ts +47 -2
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/worker-access.d.ts +92 -0
- package/dist/core/workflow/worker-access.d.ts.map +1 -0
- package/dist/core/workflow/worker-access.js +450 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +5 -4
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +3 -2
- package/dist/core/workflow/workspaces/paths.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/paths.js +2 -1
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +10 -9
- package/dist/lazy-commands.js +8 -1
- package/dist/lib/agent-browser/client.d.ts +9 -0
- package/dist/lib/agent-browser/client.d.ts.map +1 -1
- package/dist/lib/agent-browser/client.js +13 -0
- package/dist/lib/browser/batch-steps.d.ts +18 -0
- package/dist/lib/browser/batch-steps.d.ts.map +1 -0
- package/dist/lib/browser/batch-steps.js +82 -0
- package/dist/lib/browser/client.d.ts +35 -1
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +117 -8
- package/dist/lib/browser/collect/collector.d.ts +99 -0
- package/dist/lib/browser/collect/collector.d.ts.map +1 -0
- package/dist/lib/browser/collect/collector.js +202 -0
- package/dist/lib/browser/collect/fields.d.ts +31 -0
- package/dist/lib/browser/collect/fields.d.ts.map +1 -0
- package/dist/lib/browser/collect/fields.js +75 -0
- package/dist/lib/browser/collect/index.d.ts +6 -0
- package/dist/lib/browser/collect/index.d.ts.map +1 -0
- package/dist/lib/browser/collect/index.js +5 -0
- package/dist/lib/browser/collect/page-driver.d.ts +14 -0
- package/dist/lib/browser/collect/page-driver.d.ts.map +1 -0
- package/dist/lib/browser/collect/page-driver.js +306 -0
- package/dist/lib/browser/collect/presets.d.ts +52 -0
- package/dist/lib/browser/collect/presets.d.ts.map +1 -0
- package/dist/lib/browser/collect/presets.js +176 -0
- package/dist/lib/browser/collect/scroll-plan.d.ts +85 -0
- package/dist/lib/browser/collect/scroll-plan.d.ts.map +1 -0
- package/dist/lib/browser/collect/scroll-plan.js +118 -0
- package/dist/lib/browser/identity.d.ts +25 -0
- package/dist/lib/browser/identity.d.ts.map +1 -0
- package/dist/lib/browser/identity.js +66 -0
- package/dist/lib/browser/index.d.ts +3 -2
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -1
- package/dist/lib/browser/launch-args.d.ts +26 -0
- package/dist/lib/browser/launch-args.d.ts.map +1 -1
- package/dist/lib/browser/launch-args.js +41 -1
- package/dist/lib/browser/page-review-judge.d.ts +2 -0
- package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
- package/dist/lib/browser/page-review-judge.js +13 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +10 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.js +1 -0
- package/dist/lib/browser/user-agent.d.ts +53 -0
- package/dist/lib/browser/user-agent.d.ts.map +1 -0
- package/dist/lib/browser/user-agent.js +79 -0
- package/dist/lib/browser/windows-chrome.d.ts +59 -0
- package/dist/lib/browser/windows-chrome.d.ts.map +1 -0
- package/dist/lib/browser/windows-chrome.js +179 -0
- package/dist/lib/claude-desktop-share.d.ts +136 -0
- package/dist/lib/claude-desktop-share.d.ts.map +1 -0
- package/dist/lib/claude-desktop-share.js +394 -0
- package/dist/lib/disk-usage.d.ts +50 -0
- package/dist/lib/disk-usage.d.ts.map +1 -0
- package/dist/lib/disk-usage.js +303 -0
- package/dist/lib/docs-lint.d.ts +6 -0
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +8 -3
- package/dist/lib/docs-metadata-managed.d.ts +1 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -1
- package/dist/lib/docs-metadata-managed.js +17 -1
- package/dist/lib/guarded-remove.d.ts +34 -0
- package/dist/lib/guarded-remove.d.ts.map +1 -0
- package/dist/lib/guarded-remove.js +310 -0
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +4 -9
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +2 -0
- package/dist/lib/instructions/templates.js +8 -8
- package/dist/lib/pace/index.d.ts +2 -0
- package/dist/lib/pace/index.d.ts.map +1 -0
- package/dist/lib/pace/index.js +1 -0
- package/dist/lib/pace/pace.d.ts +95 -0
- package/dist/lib/pace/pace.d.ts.map +1 -0
- package/dist/lib/pace/pace.js +313 -0
- package/dist/lib/tunnel/error-page.d.ts +1 -1
- package/dist/lib/tunnel/error-page.d.ts.map +1 -1
- package/dist/lib/tunnel/error-page.js +19 -8
- package/dist/lib/tunnel/forward-headers.d.ts +11 -0
- package/dist/lib/tunnel/forward-headers.d.ts.map +1 -0
- package/dist/lib/tunnel/forward-headers.js +17 -0
- package/dist/lib/tunnel/gate.js +34 -10
- package/dist/lib/tunnel/path-scope.d.ts +22 -0
- package/dist/lib/tunnel/path-scope.d.ts.map +1 -0
- package/dist/lib/tunnel/path-scope.js +62 -0
- package/dist/lib/tunnel/state.d.ts +5 -0
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +17 -3
- package/dist/lib/webview/index.d.ts +2 -0
- package/dist/lib/webview/index.d.ts.map +1 -0
- package/dist/lib/webview/index.js +1 -0
- package/dist/lib/webview/webview.d.ts +116 -0
- package/dist/lib/webview/webview.d.ts.map +1 -0
- package/dist/lib/webview/webview.js +289 -0
- package/opencode-plugin/package.json +19 -0
- package/opencode-plugin/src/index.ts +791 -0
- package/package.json +16 -4
- package/schemas/config.schema.json +104 -0
- package/schemas/event-v3.schema.json +164 -0
- package/src/commander.ts +26 -0
- package/src/commands/agents.ts +47 -18
- package/src/commands/artifacts.ts +171 -19
- package/src/commands/browse-ai.ts +8 -0
- package/src/commands/browse.ts +570 -48
- package/src/commands/checkpoint.ts +7 -9
- package/src/commands/claude-desktop.ts +61 -0
- package/src/commands/deinit.ts +9 -4
- package/src/commands/disk.ts +114 -0
- package/src/commands/docs.ts +2 -0
- package/src/commands/doctor.ts +63 -3
- package/src/commands/fetch.ts +14 -0
- package/src/commands/files.ts +93 -2
- package/src/commands/init.ts +334 -122
- package/src/commands/instructions.ts +8 -4
- package/src/commands/ledger-v3.ts +2 -1
- package/src/commands/rm.ts +115 -0
- package/src/commands/servers.ts +506 -0
- package/src/commands/tunnel.ts +102 -2
- package/src/commands/webview.ts +159 -0
- package/src/core/adapter.ts +102 -1
- package/src/core/adapters/attestation.ts +3 -2
- package/src/core/adapters/profiles.ts +63 -1
- package/src/core/adapters/registry.ts +37 -0
- package/src/core/adapters/types.ts +10 -0
- package/src/core/agents/canonical-emit.ts +2 -5
- package/src/core/agents/cli.ts +26 -17
- package/src/core/agents/coord-client.ts +9 -3
- package/src/core/agents/render/session-context.ts +1 -0
- package/src/core/agents/rules/claim-conflict.ts +3 -8
- package/src/core/agents/rules/commit-conflict.ts +2 -7
- package/src/core/agents/rules/stop-hook.ts +3 -1
- package/src/core/agents/session-events.ts +120 -26
- package/src/core/agents/session-finalization-state-v3.ts +2 -1
- package/src/core/agents/session-finalizer-v3.ts +5 -4
- package/src/core/agents/session-name-display.ts +48 -0
- package/src/core/agents/state/heartbeat-reader.ts +7 -0
- package/src/core/agents/state/heartbeat-writer.ts +24 -2
- package/src/core/agents/state/live-coordination-view.ts +74 -0
- package/src/core/agents/state/live-coordination-writer.ts +3 -0
- package/src/core/agents/state/stale-sweep.ts +2 -9
- package/src/core/agents/turn-changes.ts +97 -0
- package/src/core/artifacts/delivery-card.ts +12 -3
- package/src/core/artifacts/index.ts +701 -47
- package/src/core/config.ts +206 -4
- package/src/core/context/index.ts +2 -1
- package/src/core/conversations/archive.ts +4 -3
- package/src/core/diagnostics/bundle.ts +5 -3
- package/src/core/events/legacy-storage/canary.ts +5 -4
- package/src/core/events/legacy-storage/compression.ts +2 -1
- package/src/core/events/v3/adapter-id.ts +29 -1
- package/src/core/events/v3/authority-outbox.ts +2 -1
- package/src/core/events/v3/bootstrap.ts +5 -4
- package/src/core/events/v3/capabilities.ts +17 -0
- package/src/core/events/v3/contract.ts +9 -1
- package/src/core/events/v3/control-witness.ts +3 -2
- package/src/core/events/v3/coordination-transaction-recovery.ts +4 -3
- package/src/core/events/v3/fingerprint-keys.ts +7 -6
- package/src/core/events/v3/generated.ts +1 -1
- package/src/core/events/v3/live-feed.ts +5 -4
- package/src/core/events/v3/producers/command-recorder.ts +8 -6
- package/src/core/events/v3/producers/coordination-recorder.ts +8 -7
- package/src/core/events/v3/producers/diagnostic-summaries.ts +5 -4
- package/src/core/events/v3/producers/hook-base.ts +11 -4
- package/src/core/events/v3/producers/hook.ts +19 -1
- package/src/core/events/v3/producers/intake.ts +18 -6
- package/src/core/events/v3/producers/recorder.ts +139 -114
- package/src/core/events/v3/projection.ts +11 -1
- package/src/core/events/v3/recovery.ts +4 -3
- package/src/core/events/v3/support-storage/inventory.ts +2 -1
- package/src/core/events/v3/support-storage/maintenance.ts +8 -3
- package/src/core/events/v3/support-storage/pack-reader.ts +4 -3
- package/src/core/events/v3/support-storage/pack-writer.ts +6 -5
- package/src/core/events/v3/tool-line-changes.ts +139 -0
- package/src/core/events/v3/writer.ts +8 -7
- package/src/core/governor/planning.ts +6 -5
- package/src/core/governor/service.ts +12 -11
- package/src/core/governor/state.ts +7 -6
- package/src/core/guard/evaluator.ts +1 -0
- package/src/core/guard/storage.ts +3 -2
- package/src/core/hooks/adapter/behaviors/claude-code.ts +33 -0
- package/src/core/hooks/adapter/behaviors/codex.ts +96 -0
- package/src/core/hooks/adapter/behaviors/cursor.ts +37 -0
- package/src/core/hooks/adapter/behaviors/index.ts +31 -0
- package/src/core/hooks/adapter/behaviors/openclaw.ts +36 -0
- package/src/core/hooks/adapter/behaviors/opencode.ts +36 -0
- package/src/core/hooks/adapter/behaviors/types.ts +110 -0
- package/src/core/hooks/adapter/detect.ts +2 -3
- package/src/core/hooks/adapter/events.ts +72 -1
- package/src/core/hooks/adapter/opencode-plugin.ts +177 -0
- package/src/core/hooks/adapter/output.ts +8 -1
- package/src/core/hooks/adapter/runtime-telemetry.ts +3 -1
- package/src/core/hooks/adapter/wiring.ts +198 -16
- package/src/core/hooks/cli.ts +776 -539
- package/src/core/hooks/effects/image-capture.ts +2 -1
- package/src/core/hooks/prompt-context/contract.ts +1 -0
- package/src/core/hooks/resolve/transcript.ts +42 -5
- package/src/core/hooks/run-markers.ts +132 -0
- package/src/core/hooks/session-name-presence.ts +10 -3
- package/src/core/hooks/shell-waiter.ts +166 -0
- package/src/core/resources/service.ts +5 -4
- package/src/core/semantic/review.ts +5 -4
- package/src/core/semantic/service.ts +15 -14
- package/src/core/semantic/storage.ts +5 -4
- package/src/core/servers/index.ts +712 -0
- package/src/core/servers/net.ts +283 -0
- package/src/core/servers/tunnels.ts +39 -0
- package/src/core/storage/atomic-json.ts +7 -3
- package/src/core/storage/builtins.ts +1 -0
- package/src/core/storage/durable-history.ts +6 -5
- package/src/core/storage/maintenance-providers.ts +2 -1
- package/src/core/storage/maintenance.ts +7 -6
- package/src/core/storage/metrics.ts +5 -1
- package/src/core/storage/modes.ts +53 -0
- package/src/core/storage/process-log.ts +3 -2
- package/src/core/storage/receipts.ts +4 -3
- package/src/core/storage/segments.ts +7 -6
- package/src/core/supervisor/hook-health.ts +4 -4
- package/src/core/supervisor/service.ts +7 -6
- package/src/core/work/state.ts +8 -7
- package/src/core/workflow/adapters.ts +15 -0
- package/src/core/workflow/approvals.ts +6 -5
- package/src/core/workflow/billing.ts +34 -4
- package/src/core/workflow/durable-record.ts +4 -3
- package/src/core/workflow/engine.ts +38 -1
- package/src/core/workflow/live-session-v3.ts +2 -3
- package/src/core/workflow/run-state.ts +3 -2
- package/src/core/workflow/sandbox-projection.ts +38 -2
- package/src/core/workflow/spawn-claude.ts +5 -1
- package/src/core/workflow/spawn-codex.ts +18 -1
- package/src/core/workflow/spawn-cursor.ts +5 -1
- package/src/core/workflow/spawn-opencode.ts +153 -0
- package/src/core/workflow/transcript.ts +3 -2
- package/src/core/workflow/types.ts +62 -2
- package/src/core/workflow/worker-access.ts +525 -0
- package/src/core/workflow/workspaces/leases.ts +5 -4
- package/src/core/workflow/workspaces/local-git.ts +3 -2
- package/src/core/workflow/workspaces/paths.ts +2 -1
- package/src/core/workflow/workspaces/state.ts +10 -9
- package/src/lazy-commands.ts +11 -1
- package/src/lib/agent-browser/client.ts +18 -0
- package/src/lib/browser/batch-steps.ts +79 -0
- package/src/lib/browser/client.ts +147 -9
- package/src/lib/browser/collect/collector.ts +306 -0
- package/src/lib/browser/collect/fields.ts +87 -0
- package/src/lib/browser/collect/index.ts +47 -0
- package/src/lib/browser/collect/page-driver.ts +327 -0
- package/src/lib/browser/collect/presets.ts +237 -0
- package/src/lib/browser/collect/scroll-plan.ts +179 -0
- package/src/lib/browser/identity.ts +64 -0
- package/src/lib/browser/index.ts +16 -1
- package/src/lib/browser/launch-args.ts +53 -1
- package/src/lib/browser/page-review-judge.ts +16 -0
- package/src/lib/browser/qa-run-contracts.ts +11 -0
- package/src/lib/browser/qa-run.ts +1 -0
- package/src/lib/browser/user-agent.ts +130 -0
- package/src/lib/browser/windows-chrome.ts +227 -0
- package/src/lib/claude-desktop-share.ts +511 -0
- package/src/lib/disk-usage.ts +347 -0
- package/src/lib/docs-lint.ts +8 -3
- package/src/lib/docs-metadata-managed.ts +21 -0
- package/src/lib/guarded-remove.ts +376 -0
- package/src/lib/identities/assume.ts +7 -7
- package/src/lib/instructions/apply.ts +2 -0
- package/src/lib/instructions/templates.ts +8 -8
- package/src/lib/pace/index.ts +14 -0
- package/src/lib/pace/pace.ts +370 -0
- package/src/lib/tunnel/error-page.ts +25 -9
- package/src/lib/tunnel/forward-headers.ts +16 -0
- package/src/lib/tunnel/gate.ts +39 -10
- package/src/lib/tunnel/path-scope.ts +73 -0
- package/src/lib/tunnel/state.ts +20 -3
- package/src/lib/webview/index.ts +13 -0
- package/src/lib/webview/webview.ts +457 -0
package/dist/commands/init.js
CHANGED
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
* null and every hook no-ops forever.
|
|
8
8
|
* 2. Register the agent-hook entries in the adapter settings file.
|
|
9
9
|
*
|
|
10
|
-
* Wires
|
|
11
|
-
* Cursor `.cursor/hooks.json`,
|
|
12
|
-
* file path, event list,
|
|
10
|
+
* Wires every adapter in the resolved set (Claude Code `.claude/settings.json`,
|
|
11
|
+
* Cursor `.cursor/hooks.json`, Codex `.codex/hooks.json`, or the OpenCode plugin
|
|
12
|
+
* directory `.opencode/plugins/harnery/`): the per-adapter file path, event list,
|
|
13
|
+
* and hook-entry shape all come from ADAPTER_SPECS. `--adapter` is repeatable (or
|
|
14
|
+
* comma-separated, or `all`); with no flag, init wires every adapter whose CLI is
|
|
15
|
+
* installed on this machine, plus any adapter the project already has wired, else
|
|
16
|
+
* claude-code.
|
|
13
17
|
*
|
|
14
18
|
* `harn init` does both, non-destructively: it merges hook entries into an
|
|
15
19
|
* existing settings file (preserving any other hooks) and skips entries that are
|
|
@@ -20,19 +24,132 @@ import { createHash } from "node:crypto";
|
|
|
20
24
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
21
25
|
import { dirname, relative, resolve } from "node:path";
|
|
22
26
|
import { fileURLToPath } from "node:url";
|
|
23
|
-
import { DEFAULT_BIN_NAME, pinnedBinName, stripJsonComments } from "../core/config.js";
|
|
27
|
+
import { codexWindowsBridgeConfig, DEFAULT_BIN_NAME, pinnedBinName, stripJsonComments, } from "../core/config.js";
|
|
24
28
|
import { canonicalJsonV3 } from "../core/events/v3/canonical.js";
|
|
25
29
|
import { ADAPTER_CAPABILITY_PROFILES_V3 } from "../core/events/v3/capabilities.js";
|
|
26
30
|
import { EVENT_V3_SCHEMA_DIGEST } from "../core/events/v3/generated.js";
|
|
27
31
|
import { initializeEventLedgerV3, readEventV3ControlState, sha256V3, } from "../core/events/v3/index.js";
|
|
28
32
|
import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
|
|
29
|
-
import {
|
|
33
|
+
import { checkOpenCodePlugin, installOpenCodePlugin, } from "../core/hooks/adapter/opencode-plugin.js";
|
|
34
|
+
import { agentHookPathForProject, applyCursorStopLoopLimit, CURSOR_STOP_FOLLOWUP_LOOP_LIMIT, commandWiresSubcommand, diffWiring, expectedCommandWindows, groupCommands, hookCommand, hookTimeoutFor, isAgentHookCommand, makeEntry, orderHandlerKeys, summarizeAdapterWiring, } from "../core/hooks/adapter/wiring.js";
|
|
35
|
+
import { detectInstalledAdapters } from "../core/workflow/adapters.js";
|
|
30
36
|
import { applyIndexerExclusions } from "../lib/indexer-exclusions.js";
|
|
31
37
|
import { applyInstructions, checkInstructions, } from "../lib/instructions/apply.js";
|
|
32
38
|
import { applyGitHooks, checkGitHooks } from "../lib/instructions/git-hooks.js";
|
|
33
39
|
import { HostAddendumError } from "../lib/instructions/host-addendum.js";
|
|
34
40
|
// This file is src/commands/init.ts → harnery package root is two levels up.
|
|
35
41
|
const HARNERY_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
42
|
+
const ADAPTER_IDS = Object.keys(ADAPTER_SPECS);
|
|
43
|
+
/** Parse explicit `--adapter` values; `all` expands and order is preserved, deduplicated. */
|
|
44
|
+
function parseAdapterIds(requested) {
|
|
45
|
+
const adapters = [];
|
|
46
|
+
for (const raw of requested) {
|
|
47
|
+
const ids = raw === "all" ? ADAPTER_IDS : [raw];
|
|
48
|
+
for (const id of ids) {
|
|
49
|
+
if (!(id in ADAPTER_SPECS)) {
|
|
50
|
+
return {
|
|
51
|
+
adapters: [],
|
|
52
|
+
error: `Unknown adapter '${raw}'. Expected: ${ADAPTER_IDS.join(" | ")} | all.`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (!adapters.includes(id))
|
|
56
|
+
adapters.push(id);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { adapters };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Which adapters `init` should wire. An explicit `--adapter` wins. Without one:
|
|
63
|
+
* every adapter whose CLI is installed on this machine, plus every adapter the
|
|
64
|
+
* project already has wired (committed wiring stays current on a box whose CLI is
|
|
65
|
+
* absent, e.g. CI). A machine with neither falls back to the historical
|
|
66
|
+
* claude-code default. `installed` is injectable so tests never key on the host's
|
|
67
|
+
* toolchain.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveInitAdapters(projectRoot, requested, installed) {
|
|
70
|
+
if (requested.length > 0)
|
|
71
|
+
return parseAdapterIds(requested);
|
|
72
|
+
const detected = installed ?? detectInstalledAdapters();
|
|
73
|
+
const wired = summarizeAdapterWiring(projectRoot).wired;
|
|
74
|
+
const adapters = ADAPTER_IDS.filter((id) => detected.includes(id) || wired.includes(id));
|
|
75
|
+
return { adapters: adapters.length > 0 ? adapters : ["claude-code"] };
|
|
76
|
+
}
|
|
77
|
+
/** Drift check for one adapter's runtime wiring (settings hooks or the OpenCode plugin). */
|
|
78
|
+
function checkAdapterHooks(projectRoot, adapter, bin) {
|
|
79
|
+
const spec = ADAPTER_SPECS[adapter];
|
|
80
|
+
const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
|
|
81
|
+
if (spec.installMode === "opencode-plugin") {
|
|
82
|
+
// No hooks map to diff: the plugin directory is the wiring.
|
|
83
|
+
const plugin = checkOpenCodePlugin(projectRoot, { binName: bin, agentHook });
|
|
84
|
+
if (plugin.status === "missing") {
|
|
85
|
+
return {
|
|
86
|
+
drift: true,
|
|
87
|
+
error: false,
|
|
88
|
+
issues: [`${spec.settingsFile}: missing (re-run \`init --adapter opencode\`)`],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (plugin.status === "foreign")
|
|
92
|
+
return { drift: false, error: true, issues: plugin.issues };
|
|
93
|
+
if (plugin.status === "stale")
|
|
94
|
+
return { drift: true, error: false, issues: plugin.issues };
|
|
95
|
+
return { drift: false, error: false, issues: [] };
|
|
96
|
+
}
|
|
97
|
+
const settingsPath = resolve(projectRoot, spec.settingsFile);
|
|
98
|
+
if (!existsSync(settingsPath)) {
|
|
99
|
+
return { drift: true, error: false, issues: [`${spec.settingsFile}: missing (re-run init)`] };
|
|
100
|
+
}
|
|
101
|
+
const issues = [];
|
|
102
|
+
let drift = false;
|
|
103
|
+
try {
|
|
104
|
+
const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
105
|
+
const hookDiff = diffWiring(settings, spec, {
|
|
106
|
+
agentHookPath: agentHook,
|
|
107
|
+
adapter,
|
|
108
|
+
windowsBridgeEntryPoint: codexWindowsBridgeConfig(projectRoot).entryPoint,
|
|
109
|
+
});
|
|
110
|
+
drift =
|
|
111
|
+
hookDiff.missing.length > 0 ||
|
|
112
|
+
hookDiff.stale.length > 0 ||
|
|
113
|
+
hookDiff.duplicates.length > 0 ||
|
|
114
|
+
hookDiff.misplaced.length > 0 ||
|
|
115
|
+
hookDiff.orphans.length > 0 ||
|
|
116
|
+
hookDiff.invalidTopLevelKeys.length > 0 ||
|
|
117
|
+
hookDiff.invalidEventKeys.length > 0;
|
|
118
|
+
if (hookDiff.missing.length > 0) {
|
|
119
|
+
issues.push(`${spec.settingsFile}: missing hooks (${hookDiff.missing.map((e) => e.settingsKey).join(", ")})`);
|
|
120
|
+
}
|
|
121
|
+
if (hookDiff.stale.length > 0) {
|
|
122
|
+
issues.push(`${spec.settingsFile}: stale hook commands (${hookDiff.stale.map((e) => e.settingsKey).join(", ")})`);
|
|
123
|
+
}
|
|
124
|
+
if (hookDiff.duplicates.length > 0) {
|
|
125
|
+
issues.push(`${spec.settingsFile}: duplicate hooks (${hookDiff.duplicates.map((e) => e.settingsKey).join(", ")})`);
|
|
126
|
+
}
|
|
127
|
+
if (hookDiff.misplaced.length > 0) {
|
|
128
|
+
issues.push(`${spec.settingsFile}: hooks under the wrong event (${hookDiff.misplaced.map((e) => e.subcommand).join(", ")})`);
|
|
129
|
+
}
|
|
130
|
+
if (hookDiff.orphans.length > 0) {
|
|
131
|
+
issues.push(`${spec.settingsFile}: obsolete hooks (${hookDiff.orphans.join(", ")})`);
|
|
132
|
+
}
|
|
133
|
+
if (hookDiff.invalidTopLevelKeys.length > 0) {
|
|
134
|
+
issues.push(`${spec.settingsFile}: invalid fields (${hookDiff.invalidTopLevelKeys.join(", ")})`);
|
|
135
|
+
}
|
|
136
|
+
if (hookDiff.invalidEventKeys.length > 0) {
|
|
137
|
+
issues.push(`${spec.settingsFile}: unsupported events (${hookDiff.invalidEventKeys.join(", ")})`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
drift: false,
|
|
143
|
+
error: true,
|
|
144
|
+
issues: [`${spec.settingsFile}: invalid JSON (${error.message})`],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return { drift, error: false, issues };
|
|
148
|
+
}
|
|
149
|
+
/** Preserve first-seen order while dropping repeats (one pass per adapter repeats lines). */
|
|
150
|
+
function dedupe(values) {
|
|
151
|
+
return [...new Set(values)];
|
|
152
|
+
}
|
|
36
153
|
export function registerInitCommand(program, emit, binName) {
|
|
37
154
|
program
|
|
38
155
|
.command("init")
|
|
@@ -40,19 +157,16 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
40
157
|
"hooks, and inject the agent-facing instructions block + skills " +
|
|
41
158
|
"(idempotent; safe to re-run). Use --dry-run to preview, --check to " +
|
|
42
159
|
"report drift without writing (exit 0 fresh / 2 drift / 1 error).")
|
|
43
|
-
.option("--adapter <id>", "claude-code | cursor | codex
|
|
160
|
+
.option("--adapter <id>", "claude-code | cursor | codex | opencode | all; repeatable or comma-separated. " +
|
|
161
|
+
"Default: every adapter installed on this machine plus every adapter already wired, else claude-code", (value, previous) => previous.concat(value
|
|
162
|
+
.split(",")
|
|
163
|
+
.map((id) => id.trim())
|
|
164
|
+
.filter(Boolean)), [])
|
|
44
165
|
.option("--dry-run", "Show what would change without writing")
|
|
45
166
|
.option("--check", "Report managed-surface drift without writing; exit 0/2/1")
|
|
46
167
|
.option("--instructions-only", "Refresh only AGENTS.md regions and Harnery-owned skills; leave runtime wiring untouched")
|
|
47
168
|
.option("--project-root <path>", "Project root (default: git toplevel, else cwd)")
|
|
48
169
|
.action((opts) => {
|
|
49
|
-
const adapter = opts.adapter;
|
|
50
|
-
const spec = ADAPTER_SPECS[adapter];
|
|
51
|
-
if (!spec) {
|
|
52
|
-
emit.text(`Unknown adapter '${opts.adapter}'. Expected: claude-code | cursor | codex.`);
|
|
53
|
-
emit.setExitCode(1);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
170
|
const projectRoot = resolve(opts.projectRoot ?? gitTopLevel() ?? process.cwd());
|
|
57
171
|
// A binName already pinned in this project's config.jsonc beats the
|
|
58
172
|
// invoking CLI's name: the pin is a committed, deliberate declaration;
|
|
@@ -66,6 +180,15 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
66
180
|
// before every coord-root, config, ledger, adapter-settings, and Git-hook
|
|
67
181
|
// operation so its no-runtime-writes contract is structural.
|
|
68
182
|
if (opts.instructionsOnly === true) {
|
|
183
|
+
// Narrow by design: host sync tooling depends on one deterministic
|
|
184
|
+
// guidance layout, so this mode stays single-adapter and never detects.
|
|
185
|
+
const parsed = parseAdapterIds(opts.adapter);
|
|
186
|
+
if (parsed.error) {
|
|
187
|
+
emit.text(parsed.error);
|
|
188
|
+
emit.setExitCode(1);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const adapter = parsed.adapters[0] ?? "claude-code";
|
|
69
192
|
if (opts.check === true) {
|
|
70
193
|
const { status, issues } = checkInstructions(projectRoot, { binName: bin, adapter });
|
|
71
194
|
const head = status === "fresh"
|
|
@@ -95,55 +218,31 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
95
218
|
emit.text(renderInstructionsOnly(projectRoot, bin, dryRun, applied.actions, applied.warnings));
|
|
96
219
|
return;
|
|
97
220
|
}
|
|
221
|
+
const resolved = resolveInitAdapters(projectRoot, opts.adapter);
|
|
222
|
+
if (resolved.error) {
|
|
223
|
+
emit.text(resolved.error);
|
|
224
|
+
emit.setExitCode(1);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const adapters = resolved.adapters;
|
|
98
228
|
// ── --check: read-only drift report on every init-managed surface ─────
|
|
99
229
|
if (opts.check === true) {
|
|
100
|
-
const
|
|
230
|
+
const issues = [];
|
|
231
|
+
let instructionStatus = "fresh";
|
|
101
232
|
let hookCheckError = false;
|
|
102
233
|
let hookDrift = false;
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
else {
|
|
110
|
-
try {
|
|
111
|
-
const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
112
|
-
const hookDiff = diffWiring(settings, spec, { agentHookPath: agentHook, adapter });
|
|
113
|
-
hookDrift =
|
|
114
|
-
hookDiff.missing.length > 0 ||
|
|
115
|
-
hookDiff.stale.length > 0 ||
|
|
116
|
-
hookDiff.duplicates.length > 0 ||
|
|
117
|
-
hookDiff.misplaced.length > 0 ||
|
|
118
|
-
hookDiff.orphans.length > 0 ||
|
|
119
|
-
hookDiff.invalidTopLevelKeys.length > 0 ||
|
|
120
|
-
hookDiff.invalidEventKeys.length > 0;
|
|
121
|
-
if (hookDiff.missing.length > 0) {
|
|
122
|
-
issues.push(`${spec.settingsFile}: missing hooks (${hookDiff.missing.map((e) => e.settingsKey).join(", ")})`);
|
|
123
|
-
}
|
|
124
|
-
if (hookDiff.stale.length > 0) {
|
|
125
|
-
issues.push(`${spec.settingsFile}: stale hook commands (${hookDiff.stale.map((e) => e.settingsKey).join(", ")})`);
|
|
126
|
-
}
|
|
127
|
-
if (hookDiff.duplicates.length > 0) {
|
|
128
|
-
issues.push(`${spec.settingsFile}: duplicate hooks (${hookDiff.duplicates.map((e) => e.settingsKey).join(", ")})`);
|
|
129
|
-
}
|
|
130
|
-
if (hookDiff.misplaced.length > 0) {
|
|
131
|
-
issues.push(`${spec.settingsFile}: hooks under the wrong event (${hookDiff.misplaced.map((e) => e.subcommand).join(", ")})`);
|
|
132
|
-
}
|
|
133
|
-
if (hookDiff.orphans.length > 0) {
|
|
134
|
-
issues.push(`${spec.settingsFile}: obsolete hooks (${hookDiff.orphans.join(", ")})`);
|
|
135
|
-
}
|
|
136
|
-
if (hookDiff.invalidTopLevelKeys.length > 0) {
|
|
137
|
-
issues.push(`${spec.settingsFile}: invalid fields (${hookDiff.invalidTopLevelKeys.join(", ")})`);
|
|
138
|
-
}
|
|
139
|
-
if (hookDiff.invalidEventKeys.length > 0) {
|
|
140
|
-
issues.push(`${spec.settingsFile}: unsupported events (${hookDiff.invalidEventKeys.join(", ")})`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (error) {
|
|
144
|
-
hookCheckError = true;
|
|
145
|
-
issues.push(`${spec.settingsFile}: invalid JSON (${error.message})`);
|
|
234
|
+
for (const adapter of adapters) {
|
|
235
|
+
const instructions = checkInstructions(projectRoot, { binName: bin, adapter });
|
|
236
|
+
if (instructions.status === "error")
|
|
237
|
+
instructionStatus = "error";
|
|
238
|
+
else if (instructions.status === "drift" && instructionStatus !== "error") {
|
|
239
|
+
instructionStatus = "drift";
|
|
146
240
|
}
|
|
241
|
+
issues.push(...instructions.issues);
|
|
242
|
+
const hooks = checkAdapterHooks(projectRoot, adapter, bin);
|
|
243
|
+
hookCheckError = hookCheckError || hooks.error;
|
|
244
|
+
hookDrift = hookDrift || hooks.drift;
|
|
245
|
+
issues.push(...hooks.issues);
|
|
147
246
|
}
|
|
148
247
|
const gitHooks = checkGitHooks(projectRoot);
|
|
149
248
|
if (gitHooks.status !== "fresh")
|
|
@@ -155,20 +254,25 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
155
254
|
if (ledgerRuntimeIssues.length > 0) {
|
|
156
255
|
issues.push(`event ledger V3 is runtime-stale (${ledgerRuntimeIssues.join(", ")})`);
|
|
157
256
|
}
|
|
158
|
-
const merged =
|
|
257
|
+
const merged = instructionStatus === "error" || hookCheckError
|
|
159
258
|
? "error"
|
|
160
259
|
: hookDrift ||
|
|
260
|
+
instructionStatus === "drift" ||
|
|
161
261
|
gitHooks.status !== "fresh" ||
|
|
162
262
|
ledger.state !== "active" ||
|
|
163
263
|
ledgerRuntimeIssues.length > 0
|
|
164
264
|
? "drift"
|
|
165
|
-
:
|
|
265
|
+
: "fresh";
|
|
166
266
|
const head = merged === "fresh"
|
|
167
267
|
? "harn init --check: hooks + instructions + skills + event ledger V3 are current"
|
|
168
268
|
: merged === "drift"
|
|
169
269
|
? "harn init --check: drift found (re-run `init` to refresh)"
|
|
170
270
|
: "harn init --check: error";
|
|
171
|
-
const lines = issues.length
|
|
271
|
+
const lines = issues.length
|
|
272
|
+
? `\n${dedupe(issues)
|
|
273
|
+
.map((i) => ` ✗ ${i}`)
|
|
274
|
+
.join("\n")}`
|
|
275
|
+
: "";
|
|
172
276
|
emit.text(`${head}${lines}`);
|
|
173
277
|
emit.setExitCode(merged === "fresh" ? 0 : merged === "drift" ? 2 : 1);
|
|
174
278
|
return;
|
|
@@ -247,63 +351,91 @@ export function registerInitCommand(program, emit, binName) {
|
|
|
247
351
|
: "· event ledger V3 already active");
|
|
248
352
|
}
|
|
249
353
|
// ── 2. adapter hooks ───────────────────────────────────────────────────
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
354
|
+
for (const adapter of adapters) {
|
|
355
|
+
const spec = ADAPTER_SPECS[adapter];
|
|
356
|
+
const settingsPath = resolve(projectRoot, spec.settingsFile);
|
|
357
|
+
const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
|
|
358
|
+
if (spec.installMode === "opencode-plugin") {
|
|
359
|
+
// OpenCode has no hooks map. Install the plugin directory instead; the
|
|
360
|
+
// instructions + skills step below still runs (AGENTS.md and
|
|
361
|
+
// .agents/skills are read natively, so no shim or mirror is needed).
|
|
362
|
+
const plugin = installOpenCodePlugin(projectRoot, { binName: bin, agentHook, dryRun });
|
|
363
|
+
if (plugin.error) {
|
|
364
|
+
emit.text(plugin.error);
|
|
365
|
+
emit.setExitCode(1);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
actions.push(...plugin.actions);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
let settings;
|
|
372
|
+
if (existsSync(settingsPath)) {
|
|
373
|
+
try {
|
|
374
|
+
settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
375
|
+
}
|
|
376
|
+
catch (err) {
|
|
377
|
+
emit.text(`✗ ${rel(projectRoot, settingsPath)} exists but isn't valid JSON; refusing to ` +
|
|
378
|
+
`overwrite. Fix it and re-run.\n (${err.message})`);
|
|
379
|
+
emit.setExitCode(1);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
settings = {};
|
|
385
|
+
}
|
|
386
|
+
const bridge = codexWindowsBridgeConfig(projectRoot);
|
|
387
|
+
if (bridge.error && spec.windowsBridgeHooks) {
|
|
388
|
+
actions.push(`⚠ ${bridge.error}; writing ${adapter} hooks without commandWindows`);
|
|
389
|
+
}
|
|
390
|
+
const { wired, already, removed, upgraded } = wireHooks(settings, spec, agentHook, adapter, { windowsBridgeEntryPoint: bridge.entryPoint });
|
|
391
|
+
if (wired === 0 && removed === 0 && upgraded === 0) {
|
|
392
|
+
actions.push(`· all ${spec.events.length} ${adapter} hooks already wired in ${rel(projectRoot, settingsPath)}`);
|
|
393
|
+
}
|
|
394
|
+
else if (dryRun) {
|
|
395
|
+
actions.push(`+ would wire ${wired} hook(s), upgrade ${upgraded} stale command(s), and remove ` +
|
|
396
|
+
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
mkdirSync(dirname(settingsPath), { recursive: true });
|
|
400
|
+
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`);
|
|
401
|
+
actions.push(`+ wired ${wired} hook(s), upgraded ${upgraded} stale command(s), and removed ` +
|
|
402
|
+
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
403
|
+
}
|
|
404
|
+
const authorizationReview = codexHookReviewAction(adapter);
|
|
405
|
+
if (authorizationReview)
|
|
406
|
+
actions.push(authorizationReview);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// ── 3. agent-facing instructions block + skills ────────────────────────
|
|
410
|
+
// Idempotent per adapter: the AGENTS.md block is adapter-independent, the
|
|
411
|
+
// harn-* skills land in each adapter's directory, and the CLAUDE.md shim and
|
|
412
|
+
// Cursor rule exist only for their own adapter. A misconfigured host addendum
|
|
413
|
+
// aborts here rather than half-writing: the apply step validates the
|
|
414
|
+
// configured source before it touches a file, so a bad path leaves the repo
|
|
415
|
+
// exactly as it found it.
|
|
416
|
+
const warnings = [];
|
|
417
|
+
for (const adapter of adapters) {
|
|
418
|
+
let applied;
|
|
254
419
|
try {
|
|
255
|
-
|
|
420
|
+
applied = applyInstructions(projectRoot, { binName: bin, adapter, dryRun });
|
|
256
421
|
}
|
|
257
422
|
catch (err) {
|
|
258
|
-
|
|
259
|
-
|
|
423
|
+
if (!(err instanceof HostAddendumError))
|
|
424
|
+
throw err;
|
|
425
|
+
emit.text(`${bin} init: ${err.message}`);
|
|
260
426
|
emit.setExitCode(1);
|
|
261
427
|
return;
|
|
262
428
|
}
|
|
429
|
+
actions.push(...applied.actions);
|
|
430
|
+
warnings.push(...applied.warnings);
|
|
263
431
|
}
|
|
264
|
-
else {
|
|
265
|
-
settings = {};
|
|
266
|
-
}
|
|
267
|
-
const { wired, already, removed, upgraded } = wireHooks(settings, spec, agentHook, adapter);
|
|
268
|
-
if (wired === 0 && removed === 0 && upgraded === 0) {
|
|
269
|
-
actions.push(`· all ${spec.events.length} ${adapter} hooks already wired in ${rel(projectRoot, settingsPath)}`);
|
|
270
|
-
}
|
|
271
|
-
else if (dryRun) {
|
|
272
|
-
actions.push(`+ would wire ${wired} hook(s), upgrade ${upgraded} stale command(s), and remove ` +
|
|
273
|
-
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
mkdirSync(dirname(settingsPath), { recursive: true });
|
|
277
|
-
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`);
|
|
278
|
-
actions.push(`+ wired ${wired} hook(s), upgraded ${upgraded} stale command(s), and removed ` +
|
|
279
|
-
`${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
|
|
280
|
-
}
|
|
281
|
-
const authorizationReview = codexHookReviewAction(adapter);
|
|
282
|
-
if (authorizationReview)
|
|
283
|
-
actions.push(authorizationReview);
|
|
284
|
-
// ── 3. agent-facing instructions block + skills ────────────────────────
|
|
285
|
-
// A misconfigured host addendum aborts here rather than half-writing: the
|
|
286
|
-
// apply step validates the configured source before it touches a file, so
|
|
287
|
-
// a bad path leaves the repo exactly as it found it.
|
|
288
|
-
let applied;
|
|
289
|
-
try {
|
|
290
|
-
applied = applyInstructions(projectRoot, { binName: bin, adapter, dryRun });
|
|
291
|
-
}
|
|
292
|
-
catch (err) {
|
|
293
|
-
if (!(err instanceof HostAddendumError))
|
|
294
|
-
throw err;
|
|
295
|
-
emit.text(`${bin} init: ${err.message}`);
|
|
296
|
-
emit.setExitCode(1);
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
actions.push(...applied.actions);
|
|
300
432
|
// ── 4. git-hook managed regions ────────────────────────────────────────
|
|
301
433
|
// Same lifecycle contract as the instructions block: the coordination
|
|
302
434
|
// content of the consumer's git hooks is machine-owned and versioned;
|
|
303
435
|
// everything else in those files belongs to the host.
|
|
304
436
|
const gitHooks = applyGitHooks(projectRoot, { dryRun });
|
|
305
437
|
actions.push(...gitHooks.actions);
|
|
306
|
-
emit.text(render(projectRoot, dryRun, actions, [...
|
|
438
|
+
emit.text(render(projectRoot, dryRun, dedupe(actions), dedupe([...warnings, ...gitHooks.warnings])));
|
|
307
439
|
});
|
|
308
440
|
}
|
|
309
441
|
function gitBuild(root) {
|
|
@@ -357,7 +489,7 @@ export function codexHookReviewAction(adapter) {
|
|
|
357
489
|
*
|
|
358
490
|
* Token-aware matching keeps `stop` from matching `stop-failure`.
|
|
359
491
|
*/
|
|
360
|
-
export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
492
|
+
export function wireHooks(settings, spec, agentHookPath, adapter, options) {
|
|
361
493
|
if (spec.rootVersion !== undefined && settings.version === undefined) {
|
|
362
494
|
settings.version = spec.rootVersion;
|
|
363
495
|
}
|
|
@@ -374,6 +506,13 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
374
506
|
}
|
|
375
507
|
for (const { settingsKey, subcommand } of spec.events) {
|
|
376
508
|
const command = hookCommand(spec, agentHookPath, subcommand, adapter);
|
|
509
|
+
const timeout = hookTimeoutFor(spec, subcommand);
|
|
510
|
+
const commandWindows = expectedCommandWindows(spec, agentHookPath, subcommand, adapter, options);
|
|
511
|
+
const handlerFields = {
|
|
512
|
+
timeout,
|
|
513
|
+
commandWindows,
|
|
514
|
+
windowsBridge: spec.windowsBridgeHooks === true,
|
|
515
|
+
};
|
|
377
516
|
let present = false;
|
|
378
517
|
for (const key of Object.keys(settings.hooks)) {
|
|
379
518
|
if (key === settingsKey)
|
|
@@ -383,7 +522,7 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
383
522
|
const groups = settings.hooks[settingsKey] ?? [];
|
|
384
523
|
const nextGroups = [];
|
|
385
524
|
for (const group of groups) {
|
|
386
|
-
const normalized = normalizeEventGroup(group, subcommand, command, present);
|
|
525
|
+
const normalized = normalizeEventGroup(group, subcommand, command, handlerFields, present);
|
|
387
526
|
if (normalized.found && !present)
|
|
388
527
|
present = true;
|
|
389
528
|
upgraded += normalized.upgraded;
|
|
@@ -400,7 +539,9 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
400
539
|
continue;
|
|
401
540
|
}
|
|
402
541
|
const current = settings.hooks[settingsKey] ?? [];
|
|
403
|
-
current.push(makeEntry(spec.entryShape, command
|
|
542
|
+
current.push(makeEntry(spec.entryShape, command, spec.entryShape === "cursor" && subcommand === "stop"
|
|
543
|
+
? { loop_limit: CURSOR_STOP_FOLLOWUP_LOOP_LIMIT }
|
|
544
|
+
: { timeout, commandWindows }));
|
|
404
545
|
settings.hooks[settingsKey] = current;
|
|
405
546
|
wired++;
|
|
406
547
|
}
|
|
@@ -416,7 +557,7 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
|
|
|
416
557
|
* that don't set the var. Only the env expansion is quoted so the
|
|
417
558
|
* `agent-hook <subcommand> ` wiring match stays byte-identical.
|
|
418
559
|
*/
|
|
419
|
-
function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
|
|
560
|
+
function normalizeEventGroup(group, subcommand, canonical, fields, alreadyFound) {
|
|
420
561
|
let found = false;
|
|
421
562
|
let upgraded = 0;
|
|
422
563
|
let removed = 0;
|
|
@@ -429,11 +570,14 @@ function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
|
|
|
429
570
|
group.command = canonical;
|
|
430
571
|
upgraded++;
|
|
431
572
|
}
|
|
573
|
+
if (applyCursorStopLoopLimit(group, subcommand))
|
|
574
|
+
upgraded++;
|
|
432
575
|
}
|
|
433
576
|
}
|
|
434
577
|
if ("hooks" in group && Array.isArray(group.hooks)) {
|
|
435
578
|
const kept = [];
|
|
436
|
-
for (const
|
|
579
|
+
for (const original of group.hooks) {
|
|
580
|
+
let hook = original;
|
|
437
581
|
if (typeof hook.command !== "string" || !commandWiresSubcommand(hook.command, subcommand)) {
|
|
438
582
|
kept.push(hook);
|
|
439
583
|
continue;
|
|
@@ -443,8 +587,26 @@ function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
|
|
|
443
587
|
continue;
|
|
444
588
|
}
|
|
445
589
|
found = true;
|
|
590
|
+
let changed = false;
|
|
446
591
|
if (hook.command !== canonical) {
|
|
447
592
|
hook.command = canonical;
|
|
593
|
+
changed = true;
|
|
594
|
+
}
|
|
595
|
+
if (fields.timeout !== undefined && hook.timeout !== fields.timeout) {
|
|
596
|
+
hook.timeout = fields.timeout;
|
|
597
|
+
changed = true;
|
|
598
|
+
}
|
|
599
|
+
// Harnery owns commandWindows on its own handlers for adapters that run
|
|
600
|
+
// it: write the opted-in command, or remove one a project opted out of.
|
|
601
|
+
if (fields.windowsBridge && hook.commandWindows !== fields.commandWindows) {
|
|
602
|
+
if (fields.commandWindows === undefined)
|
|
603
|
+
delete hook.commandWindows;
|
|
604
|
+
else
|
|
605
|
+
hook.commandWindows = fields.commandWindows;
|
|
606
|
+
changed = true;
|
|
607
|
+
}
|
|
608
|
+
if (changed) {
|
|
609
|
+
hook = orderHandlerKeys(hook);
|
|
448
610
|
upgraded++;
|
|
449
611
|
}
|
|
450
612
|
kept.push(hook);
|
|
@@ -11,7 +11,7 @@ export function registerInstructionsCommand(program, emit) {
|
|
|
11
11
|
command
|
|
12
12
|
.command("manifest [paths...]")
|
|
13
13
|
.description("Emit a machine-readable bundle manifest for one or more working paths")
|
|
14
|
-
.option("--adapter <adapter>", "claude-code, cursor, codex, or all", "all")
|
|
14
|
+
.option("--adapter <adapter>", "claude-code, cursor, codex, opencode, or all", "all")
|
|
15
15
|
.option("--format <type>", "Output format: json or table", "json")
|
|
16
16
|
.option("-o, --output <file>", "Write the complete JSON manifest to a file")
|
|
17
17
|
.action((paths, options) => {
|
|
@@ -49,10 +49,11 @@ export function registerInstructionsCommand(program, emit) {
|
|
|
49
49
|
}
|
|
50
50
|
function parseAdapters(value) {
|
|
51
51
|
if (value === "all")
|
|
52
|
-
return ["claude-code", "cursor", "codex"];
|
|
53
|
-
if (value === "claude-code" || value === "cursor" || value === "codex")
|
|
52
|
+
return ["claude-code", "cursor", "codex", "opencode"];
|
|
53
|
+
if (value === "claude-code" || value === "cursor" || value === "codex" || value === "opencode") {
|
|
54
54
|
return [value];
|
|
55
|
-
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`unsupported adapter '${value}' (expected claude-code, cursor, codex, opencode, or all)`);
|
|
56
57
|
}
|
|
57
58
|
function enrichBundle(bundle, coordRoot) {
|
|
58
59
|
const components = bundle.components.map((component) => enrichComponent(component, coordRoot));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAwC1E,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAgbN"}
|
|
@@ -5,6 +5,7 @@ import { resolve } from "node:path";
|
|
|
5
5
|
import { compressSealedLegacyV1Segments, inventoryLegacyV1Segments, streamLegacyV1Rows, verifyLegacyV1HardFence, writeLegacyV1Canary, } from "../core/events/legacy-storage/index.js";
|
|
6
6
|
import { cleanEventV3Archives, initializeEventLedgerV3, inventoryEventV3Archives, listHookProducerStateRecordsV3, readEventV3ControlState, recoverInvalidEventLedgerV3, sha256V3, } from "../core/events/v3/index.js";
|
|
7
7
|
import { authorizeEventV3SupportReplacement, inventoryEventV3Support, planEventV3SupportReplacement, planEventV3SupportTransaction, readEventV3SupportPackManifest, readEventV3SupportTransaction, streamEventV3SupportPackRecords, unpackEventV3SupportPack, verifyEventV3SupportTransactionShadow, writeEventV3SupportTransactionShadow, } from "../core/events/v3/support-storage/index.js";
|
|
8
|
+
import { stateDirMode } from "../core/storage/modes.js";
|
|
8
9
|
/** Inspect or initialize the universal V3 event ledger. */
|
|
9
10
|
export function registerLedgerV3Command(program, emit, context) {
|
|
10
11
|
const command = program
|
|
@@ -210,7 +211,7 @@ export function registerLedgerV3Command(program, emit, context) {
|
|
|
210
211
|
}
|
|
211
212
|
const root = resolve(options.root ?? coordRoot(context));
|
|
212
213
|
const transactions = transactionRoot(root);
|
|
213
|
-
mkdirSync(transactions, { recursive: true, mode:
|
|
214
|
+
mkdirSync(transactions, { recursive: true, mode: stateDirMode() });
|
|
214
215
|
emit.data(await planEventV3SupportTransaction({
|
|
215
216
|
transaction_root: transactions,
|
|
216
217
|
authority_root: resolve(options.authorityRoot),
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
3
|
+
export declare function registerRmCommand(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
|
|
4
|
+
//# sourceMappingURL=rm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../src/commands/rm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAU1E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAgFN"}
|