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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ParsedPayload } from "../parse.js";
|
|
2
|
+
import type { AdapterBehavior } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Privacy-safe environment and recovery provenance for Codex mid-flight
|
|
5
|
+
* onboarding. WSLENV values are never recorded, only normalized variable
|
|
6
|
+
* names, and the native session identifier itself remains fingerprinted.
|
|
7
|
+
*/
|
|
8
|
+
export declare function codexMidFlightDiagnosticContext(payload: ParsedPayload, env?: NodeJS.ProcessEnv): Record<string, string | boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Codex: hook payloads omit `transcript_path`, so the rollout is discovered by
|
|
11
|
+
* session id; effort is probed from the rollout; a Windows-native Codex over a
|
|
12
|
+
* WSL UNC workspace is the one bridged deployment Harnery knows about.
|
|
13
|
+
*/
|
|
14
|
+
export declare const codexBehavior: AdapterBehavior;
|
|
15
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/codex.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,aAAa,EACtB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CA0BlC;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,eA0C3B,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { resolveBinName } from "../../../config.js";
|
|
2
|
+
import { codexWslFileLinkTelemetry, inspectCodexWslBridge, isWslUncPath, renderCodexWslFileLinkContext, } from "../../codex-wsl-bridge.js";
|
|
3
|
+
import { unsafeCrossShellReason } from "../../unsafe-cross-shell.js";
|
|
4
|
+
import { discoverCodexSessionTranscript } from "../runtime-telemetry.js";
|
|
5
|
+
/**
|
|
6
|
+
* Privacy-safe environment and recovery provenance for Codex mid-flight
|
|
7
|
+
* onboarding. WSLENV values are never recorded, only normalized variable
|
|
8
|
+
* names, and the native session identifier itself remains fingerprinted.
|
|
9
|
+
*/
|
|
10
|
+
export function codexMidFlightDiagnosticContext(payload, env = process.env) {
|
|
11
|
+
const wslenv = env.WSLENV?.trim() ?? "";
|
|
12
|
+
const wslenvNames = [
|
|
13
|
+
...new Set(wslenv
|
|
14
|
+
.split(":")
|
|
15
|
+
.map((entry) => entry.split("/", 1)[0]?.trim() ?? "")
|
|
16
|
+
.filter((name) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(name))),
|
|
17
|
+
]
|
|
18
|
+
.sort()
|
|
19
|
+
.join(":")
|
|
20
|
+
.slice(0, 512);
|
|
21
|
+
const identityRecoverySource = payload.session_id
|
|
22
|
+
? "native_session_id"
|
|
23
|
+
: payload.conversation_id
|
|
24
|
+
? "native_conversation_id"
|
|
25
|
+
: payload.agent_id
|
|
26
|
+
? "native_agent_id"
|
|
27
|
+
: "unavailable";
|
|
28
|
+
return {
|
|
29
|
+
thread_id_present: Boolean(env.CODEX_THREAD_ID?.trim()),
|
|
30
|
+
wslenv_present: wslenv.length > 0,
|
|
31
|
+
wslenv_names: wslenvNames,
|
|
32
|
+
identity_recovery_source: identityRecoverySource,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Codex: hook payloads omit `transcript_path`, so the rollout is discovered by
|
|
37
|
+
* session id; effort is probed from the rollout; a Windows-native Codex over a
|
|
38
|
+
* WSL UNC workspace is the one bridged deployment Harnery knows about.
|
|
39
|
+
*/
|
|
40
|
+
export const codexBehavior = {
|
|
41
|
+
id: "codex",
|
|
42
|
+
sessionStartPlatformLabel: "Codex",
|
|
43
|
+
soundEffects: false,
|
|
44
|
+
journalMaintenance: false,
|
|
45
|
+
sessionTelemetrySync: false,
|
|
46
|
+
promptPresenceDetection: false,
|
|
47
|
+
promptContextNudges: {
|
|
48
|
+
taskNudge: true,
|
|
49
|
+
hostPromptReminder: true,
|
|
50
|
+
statusFooterNudge: true,
|
|
51
|
+
turnRitualNudge: undefined,
|
|
52
|
+
},
|
|
53
|
+
completedResponseEvent: undefined,
|
|
54
|
+
sessionIdentityOnStartOnly: false,
|
|
55
|
+
nativeTurnIdOptional: false,
|
|
56
|
+
tracksExecutionMode: false,
|
|
57
|
+
shellOperationDedup: false,
|
|
58
|
+
promptMayPrecedeSessionStart: false,
|
|
59
|
+
promptContinuesOpenTurn: false,
|
|
60
|
+
turnRecovery: true,
|
|
61
|
+
nativeTelemetryOnly: false,
|
|
62
|
+
runtimeContextTranscriptOptional: false,
|
|
63
|
+
runtimeContextRetry: true,
|
|
64
|
+
effortAttestation: "rollout-probe",
|
|
65
|
+
transcriptTuningRefresh: false,
|
|
66
|
+
modelProvider: "openai",
|
|
67
|
+
runtimeContextAvailable: () => true,
|
|
68
|
+
bridgeFor: (cwd) => (isWslUncPath(cwd) ? "codex-wsl" : undefined),
|
|
69
|
+
discoverTranscript: (nativeSessionId, candidate, options) => discoverCodexSessionTranscript(nativeSessionId, candidate, options),
|
|
70
|
+
midFlightDiagnosticContext: (payload) => codexMidFlightDiagnosticContext(payload),
|
|
71
|
+
fileLinkTelemetry: (coordRoot, cwd, lastAssistantMessage) => codexWslFileLinkTelemetry(coordRoot, cwd, lastAssistantMessage),
|
|
72
|
+
fileLinkContext: (coordRoot, cwd) => renderCodexWslFileLinkContext(coordRoot, cwd),
|
|
73
|
+
bridgeWarning: (coordRoot, cwd) => {
|
|
74
|
+
if (!isWslUncPath(cwd))
|
|
75
|
+
return undefined;
|
|
76
|
+
const bridge = inspectCodexWslBridge(process.env, { expected: true });
|
|
77
|
+
if (!bridge || bridge.ok)
|
|
78
|
+
return undefined;
|
|
79
|
+
return `Harnery hybrid warning: ${bridge.detail}. Run \`${resolveBinName(coordRoot)} doctor\` for the repair hint.`;
|
|
80
|
+
},
|
|
81
|
+
unsafeCrossShellReason: (input) => unsafeCrossShellReason({ adapter: "codex", ...input }),
|
|
82
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdapterBehavior } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cursor: no exit-code enforcement, a separate afterAgentResponse hook carries
|
|
4
|
+
* the completed reply, and cloud mode has no readable runtime context.
|
|
5
|
+
*/
|
|
6
|
+
export declare const cursorBehavior: AdapterBehavior;
|
|
7
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,eA8B5B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor: no exit-code enforcement, a separate afterAgentResponse hook carries
|
|
3
|
+
* the completed reply, and cloud mode has no readable runtime context.
|
|
4
|
+
*/
|
|
5
|
+
export const cursorBehavior = {
|
|
6
|
+
id: "cursor",
|
|
7
|
+
sessionStartPlatformLabel: "Cursor",
|
|
8
|
+
soundEffects: false,
|
|
9
|
+
journalMaintenance: false,
|
|
10
|
+
sessionTelemetrySync: false,
|
|
11
|
+
promptPresenceDetection: false,
|
|
12
|
+
promptContextNudges: {
|
|
13
|
+
taskNudge: true,
|
|
14
|
+
hostPromptReminder: true,
|
|
15
|
+
statusFooterNudge: false,
|
|
16
|
+
turnRitualNudge: undefined,
|
|
17
|
+
},
|
|
18
|
+
completedResponseEvent: "after-agent-response",
|
|
19
|
+
sessionIdentityOnStartOnly: true,
|
|
20
|
+
nativeTurnIdOptional: true,
|
|
21
|
+
tracksExecutionMode: true,
|
|
22
|
+
shellOperationDedup: true,
|
|
23
|
+
promptMayPrecedeSessionStart: true,
|
|
24
|
+
promptContinuesOpenTurn: true,
|
|
25
|
+
turnRecovery: true,
|
|
26
|
+
nativeTelemetryOnly: false,
|
|
27
|
+
runtimeContextTranscriptOptional: true,
|
|
28
|
+
runtimeContextRetry: false,
|
|
29
|
+
effortAttestation: "payload",
|
|
30
|
+
transcriptTuningRefresh: false,
|
|
31
|
+
modelProvider: "cursor",
|
|
32
|
+
runtimeContextAvailable: (mode) => mode !== "cloud",
|
|
33
|
+
bridgeFor: () => undefined,
|
|
34
|
+
inlineAssistantText: (payload) => payload?.agent_message,
|
|
35
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventAdapterIdV3 } from "../../../events/v3/adapter-id.js";
|
|
2
|
+
import type { AdapterBehavior } from "./types.js";
|
|
3
|
+
export type { AdapterBehavior, CrossShellInput, EffortAttestationSource, PromptContextNudges, } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* One behavior per adapter id. The `Record` type makes a new adapter id a
|
|
6
|
+
* compile error here until its module exists.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ADAPTER_BEHAVIORS: Record<EventAdapterIdV3, AdapterBehavior>;
|
|
9
|
+
/** The single lookup the hook CLI and the V3 producer use instead of branching. */
|
|
10
|
+
export declare function adapterBehavior(adapter: EventAdapterIdV3): AdapterBehavior;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EACV,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAMvE,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAE1E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { claudeCodeBehavior } from "./claude-code.js";
|
|
2
|
+
import { codexBehavior } from "./codex.js";
|
|
3
|
+
import { cursorBehavior } from "./cursor.js";
|
|
4
|
+
import { openclawBehavior } from "./openclaw.js";
|
|
5
|
+
import { opencodeBehavior } from "./opencode.js";
|
|
6
|
+
/**
|
|
7
|
+
* One behavior per adapter id. The `Record` type makes a new adapter id a
|
|
8
|
+
* compile error here until its module exists.
|
|
9
|
+
*/
|
|
10
|
+
export const ADAPTER_BEHAVIORS = {
|
|
11
|
+
"claude-code": claudeCodeBehavior,
|
|
12
|
+
cursor: cursorBehavior,
|
|
13
|
+
codex: codexBehavior,
|
|
14
|
+
opencode: opencodeBehavior,
|
|
15
|
+
openclaw: openclawBehavior,
|
|
16
|
+
};
|
|
17
|
+
/** The single lookup the hook CLI and the V3 producer use instead of branching. */
|
|
18
|
+
export function adapterBehavior(adapter) {
|
|
19
|
+
return ADAPTER_BEHAVIORS[adapter];
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdapterBehavior } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw: event-only. Its plugin bundles the V3 producer and never runs the
|
|
4
|
+
* hook CLI, so every hook-process effect is off and telemetry is native only.
|
|
5
|
+
*/
|
|
6
|
+
export declare const openclawBehavior: AdapterBehavior;
|
|
7
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA6B9B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw: event-only. Its plugin bundles the V3 producer and never runs the
|
|
3
|
+
* hook CLI, so every hook-process effect is off and telemetry is native only.
|
|
4
|
+
*/
|
|
5
|
+
export const openclawBehavior = {
|
|
6
|
+
id: "openclaw",
|
|
7
|
+
sessionStartPlatformLabel: undefined,
|
|
8
|
+
soundEffects: false,
|
|
9
|
+
journalMaintenance: false,
|
|
10
|
+
sessionTelemetrySync: false,
|
|
11
|
+
promptPresenceDetection: false,
|
|
12
|
+
promptContextNudges: {
|
|
13
|
+
taskNudge: false,
|
|
14
|
+
hostPromptReminder: false,
|
|
15
|
+
statusFooterNudge: false,
|
|
16
|
+
turnRitualNudge: undefined,
|
|
17
|
+
},
|
|
18
|
+
completedResponseEvent: undefined,
|
|
19
|
+
sessionIdentityOnStartOnly: false,
|
|
20
|
+
nativeTurnIdOptional: false,
|
|
21
|
+
tracksExecutionMode: false,
|
|
22
|
+
shellOperationDedup: false,
|
|
23
|
+
promptMayPrecedeSessionStart: false,
|
|
24
|
+
promptContinuesOpenTurn: false,
|
|
25
|
+
turnRecovery: true,
|
|
26
|
+
nativeTelemetryOnly: true,
|
|
27
|
+
runtimeContextTranscriptOptional: false,
|
|
28
|
+
runtimeContextRetry: false,
|
|
29
|
+
effortAttestation: "none",
|
|
30
|
+
transcriptTuningRefresh: false,
|
|
31
|
+
modelProvider: "openclaw",
|
|
32
|
+
runtimeContextAvailable: () => false,
|
|
33
|
+
bridgeFor: () => undefined,
|
|
34
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdapterBehavior } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenCode: events arrive through the Harnery plugin bridging to agent-hook.
|
|
4
|
+
* No host-side effects, no exit-code enforcement, no effort dial.
|
|
5
|
+
*/
|
|
6
|
+
export declare const opencodeBehavior: AdapterBehavior;
|
|
7
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA6B9B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode: events arrive through the Harnery plugin bridging to agent-hook.
|
|
3
|
+
* No host-side effects, no exit-code enforcement, no effort dial.
|
|
4
|
+
*/
|
|
5
|
+
export const opencodeBehavior = {
|
|
6
|
+
id: "opencode",
|
|
7
|
+
sessionStartPlatformLabel: "OpenCode",
|
|
8
|
+
soundEffects: false,
|
|
9
|
+
journalMaintenance: false,
|
|
10
|
+
sessionTelemetrySync: false,
|
|
11
|
+
promptPresenceDetection: false,
|
|
12
|
+
promptContextNudges: {
|
|
13
|
+
taskNudge: false,
|
|
14
|
+
hostPromptReminder: false,
|
|
15
|
+
statusFooterNudge: false,
|
|
16
|
+
turnRitualNudge: undefined,
|
|
17
|
+
},
|
|
18
|
+
completedResponseEvent: undefined,
|
|
19
|
+
sessionIdentityOnStartOnly: false,
|
|
20
|
+
nativeTurnIdOptional: false,
|
|
21
|
+
tracksExecutionMode: false,
|
|
22
|
+
shellOperationDedup: false,
|
|
23
|
+
promptMayPrecedeSessionStart: false,
|
|
24
|
+
promptContinuesOpenTurn: false,
|
|
25
|
+
turnRecovery: false,
|
|
26
|
+
nativeTelemetryOnly: false,
|
|
27
|
+
runtimeContextTranscriptOptional: false,
|
|
28
|
+
runtimeContextRetry: false,
|
|
29
|
+
effortAttestation: "none",
|
|
30
|
+
transcriptTuningRefresh: false,
|
|
31
|
+
modelProvider: "opencode",
|
|
32
|
+
runtimeContextAvailable: () => true,
|
|
33
|
+
bridgeFor: () => undefined,
|
|
34
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Adapter } from "../../../adapter.js";
|
|
2
|
+
import type { EventAdapterIdV3 } from "../../../events/v3/adapter-id.js";
|
|
3
|
+
import type { CodexWslFileLinkTelemetry } from "../../codex-wsl-bridge.js";
|
|
4
|
+
import type { ParsedPayload } from "../parse.js";
|
|
5
|
+
import type { RuntimeTelemetryOptions } from "../runtime-telemetry.js";
|
|
6
|
+
/** Flags passed to the prompt-context renderer on every user prompt. */
|
|
7
|
+
export interface PromptContextNudges {
|
|
8
|
+
taskNudge: boolean;
|
|
9
|
+
hostPromptReminder: boolean;
|
|
10
|
+
statusFooterNudge: boolean;
|
|
11
|
+
turnRitualNudge: Adapter | undefined;
|
|
12
|
+
}
|
|
13
|
+
/** Inputs for the cross-shell safety inspection on a tool request. */
|
|
14
|
+
export interface CrossShellInput {
|
|
15
|
+
cwd: unknown;
|
|
16
|
+
toolName: string | undefined;
|
|
17
|
+
toolInput: unknown;
|
|
18
|
+
}
|
|
19
|
+
/** Where a producer learns the effective effort/speed dial from. */
|
|
20
|
+
export type EffortAttestationSource = "payload" | "rollout-probe" | "none";
|
|
21
|
+
/**
|
|
22
|
+
* Everything the hook CLI and the V3 producer decide per adapter. Each
|
|
23
|
+
* adapter owns one module under this directory; `adapterBehavior(id)` is the
|
|
24
|
+
* only lookup, so the middle of the pipeline never branches on an adapter id.
|
|
25
|
+
*
|
|
26
|
+
* Every field is a decision the shared code used to make with an equality
|
|
27
|
+
* check. Booleans are effect gates, strings are labels, and the optional
|
|
28
|
+
* methods are adapter-native helpers that only exist for that adapter.
|
|
29
|
+
*/
|
|
30
|
+
export interface AdapterBehavior {
|
|
31
|
+
readonly id: EventAdapterIdV3;
|
|
32
|
+
/** Label shown in the session-start context; `undefined` means the host default. */
|
|
33
|
+
readonly sessionStartPlatformLabel: string | undefined;
|
|
34
|
+
/** The hook process plays notification sounds (kill-switch independent). */
|
|
35
|
+
readonly soundEffects: boolean;
|
|
36
|
+
/** Journal janitor at start, recovery cue in the start context, archive at end. */
|
|
37
|
+
readonly journalMaintenance: boolean;
|
|
38
|
+
/** Session telemetry sync extension at session end and on stop. */
|
|
39
|
+
readonly sessionTelemetrySync: boolean;
|
|
40
|
+
/** Presence (mobile vs office) is inferred from the submitted prompt text. */
|
|
41
|
+
readonly promptPresenceDetection: boolean;
|
|
42
|
+
readonly promptContextNudges: PromptContextNudges;
|
|
43
|
+
/** Hook event that carries the completed assistant reply, when stop lacks it. */
|
|
44
|
+
readonly completedResponseEvent: string | undefined;
|
|
45
|
+
/** Native session identity arrives only on the start signal; later hooks join by instance. */
|
|
46
|
+
readonly sessionIdentityOnStartOnly: boolean;
|
|
47
|
+
/** A terminal or telemetry probe may proceed without a native turn id. */
|
|
48
|
+
readonly nativeTurnIdOptional: boolean;
|
|
49
|
+
/** The producer tracks a native execution mode (local/cloud) in its state. */
|
|
50
|
+
readonly tracksExecutionMode: boolean;
|
|
51
|
+
/** Shell hooks may deliver the same command twice; dedupe by a command fingerprint. */
|
|
52
|
+
readonly shellOperationDedup: boolean;
|
|
53
|
+
/** The native prompt signal can arrive before session start and is a trusted boundary. */
|
|
54
|
+
readonly promptMayPrecedeSessionStart: boolean;
|
|
55
|
+
/** A prompt signal inside an open turn continues that turn instead of starting a new one. */
|
|
56
|
+
readonly promptContinuesOpenTurn: boolean;
|
|
57
|
+
/** Missed hook signals may be recovered into derived turns and spans. */
|
|
58
|
+
readonly turnRecovery: boolean;
|
|
59
|
+
/** Turn telemetry comes only from the native payload; no runtime transcript read. */
|
|
60
|
+
readonly nativeTelemetryOnly: boolean;
|
|
61
|
+
/** Runtime context telemetry does not require a transcript path. */
|
|
62
|
+
readonly runtimeContextTranscriptOptional: boolean;
|
|
63
|
+
/** Late runtime-context samples are retried after stop (rollout flush lag). */
|
|
64
|
+
readonly runtimeContextRetry: boolean;
|
|
65
|
+
readonly effortAttestation: EffortAttestationSource;
|
|
66
|
+
/** After a payload effort change, refresh speed and model from the transcript row. */
|
|
67
|
+
readonly transcriptTuningRefresh: boolean;
|
|
68
|
+
/** Provider label attached to attested model identity. */
|
|
69
|
+
readonly modelProvider: string;
|
|
70
|
+
/** Whether runtime context can be read at all under the given execution mode. */
|
|
71
|
+
runtimeContextAvailable(executionMode: string | undefined): boolean;
|
|
72
|
+
/** Bridge descriptor stamped on events when the payload cwd shows a bridged deployment. */
|
|
73
|
+
bridgeFor(cwd: unknown): "codex-wsl" | undefined;
|
|
74
|
+
/** Locate (or verify) the session transcript when hook payloads omit `transcript_path`. */
|
|
75
|
+
discoverTranscript?(nativeSessionId: string, candidate?: string, options?: RuntimeTelemetryOptions): string | undefined;
|
|
76
|
+
/** Privacy-safe environment provenance recorded when a session onboards mid-flight. */
|
|
77
|
+
midFlightDiagnosticContext?(payload: ParsedPayload): Record<string, string | boolean>;
|
|
78
|
+
/** Completed-reply text supplied inline on tool hooks (no transcript needed). */
|
|
79
|
+
inlineAssistantText?(payload: ParsedPayload | null): string | undefined;
|
|
80
|
+
/** Extra turn.completed telemetry about file links under a bridged deployment. */
|
|
81
|
+
fileLinkTelemetry?(coordRoot: string, cwd: unknown, lastAssistantMessage: string): CodexWslFileLinkTelemetry | null;
|
|
82
|
+
/** Context block teaching the agent how file links resolve under a bridge. */
|
|
83
|
+
fileLinkContext?(coordRoot: string, cwd: unknown): string;
|
|
84
|
+
/** Warning appended to the session-start context when the bridge is misconfigured. */
|
|
85
|
+
bridgeWarning?(coordRoot: string, cwd: unknown): string | undefined;
|
|
86
|
+
/** Deny reason for a tool call whose shell shape is unsafe under the bridge. */
|
|
87
|
+
unsafeCrossShellReason?(input: CrossShellInput): string | null;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/hooks/adapter/behaviors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAE3E;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAG9B,oFAAoF;IACpF,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAGlD,iFAAiF;IACjF,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,8FAA8F;IAC9F,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,0EAA0E;IAC1E,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,uFAAuF;IACvF,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,0FAA0F;IAC1F,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;IAC/C,6FAA6F;IAC7F,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAG/B,qFAAqF;IACrF,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,oEAAoE;IACpE,QAAQ,CAAC,gCAAgC,EAAE,OAAO,CAAC;IACnD,+EAA+E;IAC/E,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IACpD,sFAAsF;IACtF,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAGpE,2FAA2F;IAC3F,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAGjD,2FAA2F;IAC3F,kBAAkB,CAAC,CACjB,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,GAAG,SAAS,CAAC;IACtB,uFAAuF;IACvF,0BAA0B,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACtF,iFAAiF;IACjF,mBAAmB,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE,kFAAkF;IAClF,iBAAiB,CAAC,CAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,EACZ,oBAAoB,EAAE,MAAM,GAC3B,yBAAyB,GAAG,IAAI,CAAC;IACpC,8EAA8E;IAC9E,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1D,sFAAsF;IACtF,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,gFAAgF;IAChF,sBAAsB,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/detect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAoB,MAAM,kBAAkB,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAWrE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAS1F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { coordEnv } from "../../../lib/env.js";
|
|
2
|
+
import { normalizeAdapter } from "../../adapter.js";
|
|
2
3
|
/**
|
|
3
4
|
* Resolve the adapter firing the hook. The dispatcher binary is always
|
|
4
5
|
* invoked with `--adapter <name>` per the current wiring in each adapter's
|
|
@@ -18,9 +19,7 @@ export function detectAdapter(argv) {
|
|
|
18
19
|
return validate(coordEnv("AGENT_COORD_ADAPTER"));
|
|
19
20
|
}
|
|
20
21
|
function validate(v) {
|
|
21
|
-
|
|
22
|
-
return v;
|
|
23
|
-
return null;
|
|
22
|
+
return normalizeAdapter(v);
|
|
24
23
|
}
|
|
25
24
|
/**
|
|
26
25
|
* On a host wired for multiple adapters, Cursor also executes the Claude Code
|
|
@@ -22,13 +22,32 @@ export interface HookEvent {
|
|
|
22
22
|
* - `cursor`: `[{ command }]` (Cursor: flat entry, no inner `hooks` array)
|
|
23
23
|
*/
|
|
24
24
|
export type HookEntryShape = "claude" | "cursor";
|
|
25
|
+
/**
|
|
26
|
+
* How `harn init` installs this adapter's lifecycle capture:
|
|
27
|
+
* - `settings-hooks` (default): merge `agent-hook <subcommand>` command hooks
|
|
28
|
+
* into a settings file's `hooks` map (Claude Code, Codex, Cursor).
|
|
29
|
+
* - `opencode-plugin`: OpenCode V2 has no command-hook file; interception is an
|
|
30
|
+
* in-process plugin. `init` copies the Harnery plugin into the auto-discovered
|
|
31
|
+
* `.opencode/plugins/harnery/` directory (entry `index.ts` + `harnery.json`),
|
|
32
|
+
* and wiring inspection checks that owned file rather than a `hooks` map. The
|
|
33
|
+
* plugin bridges each lifecycle hook to `agent-hook <subcommand> --adapter
|
|
34
|
+
* opencode`, so `events` still names the subcommands it delivers.
|
|
35
|
+
*/
|
|
36
|
+
export type AdapterInstallMode = "settings-hooks" | "opencode-plugin";
|
|
25
37
|
export interface AdapterSpec {
|
|
26
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Settings file to wire, relative to the project root. For the
|
|
40
|
+
* `opencode-plugin` install mode this is the installed plugin entry file.
|
|
41
|
+
*/
|
|
27
42
|
settingsFile: string;
|
|
28
43
|
/** Events this adapter fires, mapped to agent-hook subcommands. */
|
|
29
44
|
events: HookEvent[];
|
|
30
45
|
/** Per-entry encoding under the root `hooks` object. */
|
|
31
46
|
entryShape: HookEntryShape;
|
|
47
|
+
/** Install mechanism; absent means the default settings-file command hooks. */
|
|
48
|
+
installMode?: AdapterInstallMode;
|
|
49
|
+
/** For `opencode-plugin`: the plugin id OpenCode reports for the installed plugin. */
|
|
50
|
+
pluginId?: string;
|
|
32
51
|
/** When set, ensure this top-level `version` key in the file (Cursor requires `1`). */
|
|
33
52
|
rootVersion?: number;
|
|
34
53
|
/** Adapter-owned entries from older specs that `init` should remove during migration. */
|
|
@@ -44,6 +63,23 @@ export interface AdapterSpec {
|
|
|
44
63
|
* wandered (the session shell `cd`ing into a subdirectory or off-repo).
|
|
45
64
|
*/
|
|
46
65
|
projectDirEnv?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Per-handler `timeout` (seconds) written on every Harnery hook entry. Without
|
|
68
|
+
* one, an adapter's own default applies (Codex: 600 seconds), so a stalled
|
|
69
|
+
* hook can hold a tool call for ten minutes. `bySubcommand` overrides
|
|
70
|
+
* `default` for one event.
|
|
71
|
+
*/
|
|
72
|
+
hookTimeouts?: {
|
|
73
|
+
default: number;
|
|
74
|
+
bySubcommand?: Record<string, number>;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* The adapter runs a handler's `commandWindows` instead of `command` on
|
|
78
|
+
* Windows. A project that opts in (`hooks.codexWindowsBridge`) gets one that
|
|
79
|
+
* hands the hook to a resident WSL bridge (ADR 0197); otherwise init leaves
|
|
80
|
+
* the field off.
|
|
81
|
+
*/
|
|
82
|
+
windowsBridgeHooks?: boolean;
|
|
47
83
|
}
|
|
48
84
|
/** Claude Code: `.claude/settings.json`. */
|
|
49
85
|
export declare const CLAUDE_CODE_EVENTS: HookEvent[];
|
|
@@ -59,6 +95,15 @@ export declare const CURSOR_EVENTS: HookEvent[];
|
|
|
59
95
|
export declare const CODEX_EVENTS: HookEvent[];
|
|
60
96
|
/** Entries written by harnery before Codex adopted a strict native hook schema. */
|
|
61
97
|
export declare const LEGACY_CODEX_EVENTS: HookEvent[];
|
|
98
|
+
/**
|
|
99
|
+
* OpenCode V2: delivered by the Harnery OpenCode plugin, which registers
|
|
100
|
+
* in-process hooks and bridges each to `agent-hook <subcommand> --adapter
|
|
101
|
+
* opencode`. There is no settings-file `hooks` map; `settingsKey` here is the
|
|
102
|
+
* originating OpenCode plugin hook, kept for documentation. `post-compact` is
|
|
103
|
+
* omitted because OpenCode post-compaction recovery is not yet certified. The
|
|
104
|
+
* plugin source (`opencode-plugin/src/index.ts`) carries the same map.
|
|
105
|
+
*/
|
|
106
|
+
export declare const OPENCODE_EVENTS: HookEvent[];
|
|
62
107
|
/** Every hook key accepted by Codex's current native hook schema. */
|
|
63
108
|
export declare const CODEX_ALLOWED_EVENT_KEYS: string[];
|
|
64
109
|
/** Every supported adapter, fully wireable by `harn init`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,wDAAwD;IACxD,UAAU,EAAE,cAAc,CAAC;IAC3B,+EAA+E;IAC/E,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC1E;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAczC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,EAcpC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,YAAY,EAAE,SAAS,EAYnC,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAG1C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,EAatC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,UAYpC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAmCxD,CAAC"}
|
|
@@ -65,6 +65,28 @@ export const LEGACY_CODEX_EVENTS = [
|
|
|
65
65
|
{ settingsKey: "PostToolUseFailure", subcommand: "post-tool-use-failure" },
|
|
66
66
|
{ settingsKey: "StopFailure", subcommand: "stop-failure" },
|
|
67
67
|
];
|
|
68
|
+
/**
|
|
69
|
+
* OpenCode V2: delivered by the Harnery OpenCode plugin, which registers
|
|
70
|
+
* in-process hooks and bridges each to `agent-hook <subcommand> --adapter
|
|
71
|
+
* opencode`. There is no settings-file `hooks` map; `settingsKey` here is the
|
|
72
|
+
* originating OpenCode plugin hook, kept for documentation. `post-compact` is
|
|
73
|
+
* omitted because OpenCode post-compaction recovery is not yet certified. The
|
|
74
|
+
* plugin source (`opencode-plugin/src/index.ts`) carries the same map.
|
|
75
|
+
*/
|
|
76
|
+
export const OPENCODE_EVENTS = [
|
|
77
|
+
{ settingsKey: "event:session.created", subcommand: "session-start" },
|
|
78
|
+
{ settingsKey: "session.hook:prompt", subcommand: "user-prompt-submit" },
|
|
79
|
+
{ settingsKey: "tool.hook:execute.before", subcommand: "pre-tool-use" },
|
|
80
|
+
{ settingsKey: "tool.hook:execute.after", subcommand: "post-tool-use" },
|
|
81
|
+
{ settingsKey: "tool.hook:execute.after:error", subcommand: "post-tool-use-failure" },
|
|
82
|
+
{ settingsKey: "permission.hook:evaluate", subcommand: "permission-request" },
|
|
83
|
+
{ settingsKey: "event:session.created:child", subcommand: "sub-agent-start" },
|
|
84
|
+
{ settingsKey: "event:session.execution.*:child", subcommand: "sub-agent-stop" },
|
|
85
|
+
{ settingsKey: "event:session.execution.succeeded", subcommand: "stop" },
|
|
86
|
+
{ settingsKey: "event:session.execution.failed|interrupted", subcommand: "stop-failure" },
|
|
87
|
+
{ settingsKey: "event:session.deleted", subcommand: "session-end" },
|
|
88
|
+
{ settingsKey: "session.hook:compaction", subcommand: "pre-compact" },
|
|
89
|
+
];
|
|
68
90
|
/** Every hook key accepted by Codex's current native hook schema. */
|
|
69
91
|
export const CODEX_ALLOWED_EVENT_KEYS = [
|
|
70
92
|
"SessionStart",
|
|
@@ -100,5 +122,19 @@ export const ADAPTER_SPECS = {
|
|
|
100
122
|
legacyEvents: LEGACY_CODEX_EVENTS,
|
|
101
123
|
allowedTopLevelKeys: ["description", "hooks"],
|
|
102
124
|
allowedEventKeys: CODEX_ALLOWED_EVENT_KEYS,
|
|
125
|
+
// A Codex hook that times out fails open: the run is marked failed and
|
|
126
|
+
// the tool proceeds. Codex clamps SessionEnd to 3 seconds and defaults it
|
|
127
|
+
// to 1, which is too short for a cold hook start.
|
|
128
|
+
hookTimeouts: { default: 20, bySubcommand: { "session-end": 3 } },
|
|
129
|
+
windowsBridgeHooks: true,
|
|
130
|
+
},
|
|
131
|
+
opencode: {
|
|
132
|
+
settingsFile: ".opencode/plugins/harnery/index.ts",
|
|
133
|
+
events: OPENCODE_EVENTS,
|
|
134
|
+
// entryShape is unused for the plugin install mode but required by the type;
|
|
135
|
+
// the plugin, not a hooks-map entry, carries the wiring.
|
|
136
|
+
entryShape: "claude",
|
|
137
|
+
installMode: "opencode-plugin",
|
|
138
|
+
pluginId: "harnery",
|
|
103
139
|
},
|
|
104
140
|
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install-side owner of the OpenCode plugin files: what `harn init --adapter
|
|
3
|
+
* opencode` writes, what `--check`/`doctor` compare against, and what `deinit`
|
|
4
|
+
* removes. The plugin itself lives in `opencode-plugin/src/index.ts` and is
|
|
5
|
+
* copied verbatim under a hash-stamped ownership header, the same fully-owned
|
|
6
|
+
* file contract as the shipped skills (`lib/instructions/splice.ts`).
|
|
7
|
+
*
|
|
8
|
+
* Layout under the project root (`ADAPTER_SPECS.opencode.settingsFile` names
|
|
9
|
+
* the entry file):
|
|
10
|
+
*
|
|
11
|
+
* .opencode/plugins/harnery/index.ts # the plugin, header + verbatim source
|
|
12
|
+
* .opencode/plugins/harnery/harnery.json # { schema, agentHook } written by init
|
|
13
|
+
*
|
|
14
|
+
* OpenCode auto-discovers every directory under `.opencode/plugins/`, so no
|
|
15
|
+
* `opencode.json` edit is needed and a configured-plugin entry is never
|
|
16
|
+
* written (OpenCode also refuses a configured local *file*; only directories
|
|
17
|
+
* load that way).
|
|
18
|
+
*/
|
|
19
|
+
export declare const OPENCODE_PLUGIN_ENTRY: string;
|
|
20
|
+
export declare const OPENCODE_PLUGIN_DIR: string;
|
|
21
|
+
export declare const OPENCODE_PLUGIN_CONFIG: string;
|
|
22
|
+
export declare const OPENCODE_PLUGIN_CONFIG_SCHEMA = "harnery-opencode-plugin/v1";
|
|
23
|
+
/** The plugin source as shipped, trimmed so header + body hashing is stable. */
|
|
24
|
+
export declare function openCodePluginSource(): string;
|
|
25
|
+
/** Render the installed entry file: ownership header, then the verbatim source. */
|
|
26
|
+
export declare function renderOpenCodePluginEntry(binName: string, source?: string): string;
|
|
27
|
+
/** Render the sibling config the plugin reads to find the `agent-hook` launcher. */
|
|
28
|
+
export declare function renderOpenCodePluginConfig(agentHook: string): string;
|
|
29
|
+
/** True when the content carries harnery's plugin ownership header. */
|
|
30
|
+
export declare function isOwnedOpenCodePlugin(content: string): boolean;
|
|
31
|
+
export type OpenCodePluginStatus = "missing" | "fresh" | "stale" | "foreign";
|
|
32
|
+
export interface OpenCodePluginCheck {
|
|
33
|
+
status: OpenCodePluginStatus;
|
|
34
|
+
/** Human-readable drift reasons, one per problem; empty when fresh or missing. */
|
|
35
|
+
issues: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compare the installed plugin files with what init would write now. Pure
|
|
39
|
+
* except for reads; never writes. `foreign` means an entry file exists at the
|
|
40
|
+
* harnery path without harnery's header, which init refuses to overwrite.
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkOpenCodePlugin(projectRoot: string, expected: {
|
|
43
|
+
binName: string;
|
|
44
|
+
agentHook: string;
|
|
45
|
+
source?: string;
|
|
46
|
+
}): OpenCodePluginCheck;
|
|
47
|
+
export interface OpenCodePluginInstall {
|
|
48
|
+
actions: string[];
|
|
49
|
+
/** Set when init must stop: a foreign file sits at the harnery path. */
|
|
50
|
+
error?: string;
|
|
51
|
+
}
|
|
52
|
+
/** Write (or refresh) the plugin directory. Idempotent; a fresh install is a no-op. */
|
|
53
|
+
export declare function installOpenCodePlugin(projectRoot: string, opts: {
|
|
54
|
+
binName: string;
|
|
55
|
+
agentHook: string;
|
|
56
|
+
dryRun: boolean;
|
|
57
|
+
}): OpenCodePluginInstall;
|
|
58
|
+
/** Remove the plugin directory when harnery owns it. Leaves a foreign file alone. */
|
|
59
|
+
export declare function removeOpenCodePlugin(projectRoot: string, dryRun: boolean): string[];
|
|
60
|
+
//# sourceMappingURL=opencode-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-plugin.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/opencode-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,eAAO,MAAM,qBAAqB,QAAsC,CAAC;AACzE,eAAO,MAAM,mBAAmB,QAAiC,CAAC;AAClE,eAAO,MAAM,sBAAsB,QAAwC,CAAC;AAC5E,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAgB1E,gFAAgF;AAChF,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,MAAM,SAAyB,GAC9B,MAAM,CAOR;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,kFAAkF;IAClF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,mBAAmB,CAwBrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC5D,qBAAqB,CAqCvB;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAYnF"}
|