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/core/config.d.ts
CHANGED
|
@@ -98,16 +98,20 @@ export declare function pinnedBinName(projectRoot: string): string | null;
|
|
|
98
98
|
* `coordRoot` is resolved via `findCoordRoot()` when not passed.
|
|
99
99
|
*/
|
|
100
100
|
export declare function resolveHooksSetupHint(coordRoot?: string | null): string | null;
|
|
101
|
+
export interface CodexWindowsBridgeConfig {
|
|
102
|
+
/** Command name Windows-native Codex hooks hand off to, or null when not opted in. */
|
|
103
|
+
entryPoint: string | null;
|
|
104
|
+
/** Why the configured value was ignored, when it was. */
|
|
105
|
+
error: string | null;
|
|
106
|
+
}
|
|
101
107
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* The reminder must be one non-empty line of at most 500 characters. Invalid
|
|
108
|
-
* values fail closed to no reminder so a malformed optional setting cannot
|
|
109
|
-
* break the prompt hook.
|
|
108
|
+
* Per-project opt-in that routes Windows-native Codex hooks through a resident
|
|
109
|
+
* WSL bridge (ADR 0197). Read from the project config only: the value is
|
|
110
|
+
* written into the committed `.codex/hooks.json`, so a user-level setting
|
|
111
|
+
* would make `init` output differ between machines. An invalid value is
|
|
112
|
+
* ignored and reported rather than spliced into a shell command.
|
|
110
113
|
*/
|
|
114
|
+
export declare function codexWindowsBridgeConfig(projectRoot: string): CodexWindowsBridgeConfig;
|
|
111
115
|
export declare function hostPromptReminder(coordRoot?: string | null): string | null;
|
|
112
116
|
/**
|
|
113
117
|
* Project-owned prompt-context provider settings. The user-global config is
|
|
@@ -157,6 +161,26 @@ export declare function ripgrepAutoInstall(coordRoot?: string | null): boolean;
|
|
|
157
161
|
* `coordRoot` is resolved via `findCoordRoot()` when not passed.
|
|
158
162
|
*/
|
|
159
163
|
export declare function workflowSubscriptionOnly(coordRoot?: string | null): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* The host's raw worker full-access policy (ADR 0192), validated by
|
|
166
|
+
* `parseWorkerFullAccessPolicy` in the workflow layer, which knows each
|
|
167
|
+
* adapter's effort scale.
|
|
168
|
+
*
|
|
169
|
+
* `.harnery/config.jsonc`:
|
|
170
|
+
* `{ "workflow": { "workerFullAccess": { "enabled": true, "floors": { ... } } } }`
|
|
171
|
+
*
|
|
172
|
+
* This is a trust boundary, so it comes only from the project config, like
|
|
173
|
+
* `agents.finalizationRoots`: a user-global file cannot remove the sandbox from
|
|
174
|
+
* one project's workers. `HARNERY_WORKFLOW_WORKER_FULL_ACCESS=0` turns it off
|
|
175
|
+
* for one process. There is deliberately no `=1`: an environment variable can
|
|
176
|
+
* withdraw the grant but never supply it.
|
|
177
|
+
*/
|
|
178
|
+
export declare function workflowWorkerFullAccessConfig(coordRoot?: string | null): unknown;
|
|
179
|
+
/**
|
|
180
|
+
* How this project's `.harnery/` state is shared: `private` or `group`. `HARNERY_STORAGE_SHARING`
|
|
181
|
+
* overrides per process; an unrecognized value falls back to `private`, the safer reading.
|
|
182
|
+
*/
|
|
183
|
+
export declare function storageSharing(coordRoot?: string | null): "private" | "group";
|
|
160
184
|
/**
|
|
161
185
|
* Whether cross-machine presence (ADR 0016) is enabled for this repo.
|
|
162
186
|
* Default ON — the transport itself additionally gates on an origin remote
|
|
@@ -208,6 +232,15 @@ export declare function eventLedgerArchivePolicy(coordRoot?: string | null): Eve
|
|
|
208
232
|
* `.harnery/config.jsonc` `web.port`, then the mnemonic built-in default 4276.
|
|
209
233
|
*/
|
|
210
234
|
export declare function resolveWebPort(explicitPort?: string, coordRoot?: string | null): number;
|
|
235
|
+
/** The configured inclusive port range for one server type, or null. */
|
|
236
|
+
export declare function serverPortRange(type: string, coordRoot?: string | null): [number, number] | null;
|
|
237
|
+
/** Every configured server port range, keyed by type (invalid entries dropped). */
|
|
238
|
+
export declare function serverPortRanges(coordRoot?: string | null): Record<string, [number, number]>;
|
|
239
|
+
/** Configured `servers gc` windows; undefined fields use the built-in defaults. */
|
|
240
|
+
export declare function serverGcConfig(coordRoot?: string | null): {
|
|
241
|
+
idle_hours?: number;
|
|
242
|
+
owner_stale_hours?: number;
|
|
243
|
+
};
|
|
211
244
|
/** Policy for converging independent termination signals on one finalizer. */
|
|
212
245
|
export declare function sessionFinalizationConfig(coordRoot?: string | null): SessionFinalizationConfig;
|
|
213
246
|
/**
|
|
@@ -220,12 +253,41 @@ export declare function artifactDefaultRetentionDays(coordRoot?: string | null):
|
|
|
220
253
|
export declare function artifactMaxBytes(coordRoot?: string | null): number;
|
|
221
254
|
/** Size at which one bundle requires an explicit `artifacts create --big` acknowledgement. */
|
|
222
255
|
export declare function artifactMaxUnitBytes(coordRoot?: string | null): number;
|
|
256
|
+
/**
|
|
257
|
+
* How long an unexpired workspace must sit idle before a size rule (the
|
|
258
|
+
* per-bundle ceiling or the repository budget) may delete it. Idle means no
|
|
259
|
+
* change inside the workspace and no heartbeat from its owner. An agent waiting
|
|
260
|
+
* on a human reply looks idle, so a short window deletes work someone is still
|
|
261
|
+
* reviewing. Precedence: `HARNERY_ARTIFACT_IDLE_GRACE_HOURS` ->
|
|
262
|
+
* `artifacts.idle_grace_hours` -> 24. Expiry never waits for this grace.
|
|
263
|
+
*/
|
|
264
|
+
export declare function artifactIdleGraceHours(coordRoot?: string | null): number;
|
|
265
|
+
/**
|
|
266
|
+
* Default lifetime of an artifact hold. A hold that is not renewed lapses after
|
|
267
|
+
* this many days and the workspace returns to ordinary retention. Precedence:
|
|
268
|
+
* `HARNERY_ARTIFACT_HOLD_DAYS` -> `artifacts.hold_days` -> 14.
|
|
269
|
+
*/
|
|
270
|
+
export declare function artifactHoldDays(coordRoot?: string | null): number;
|
|
271
|
+
/**
|
|
272
|
+
* Advisory budget for held artifact bytes. Exceeding it produces warnings
|
|
273
|
+
* only: holds record owner intent, so cleanup never deletes held work.
|
|
274
|
+
* Precedence: `HARNERY_ARTIFACT_MAX_HELD_BYTES` -> `artifacts.max_held_bytes`
|
|
275
|
+
* -> 20 GiB.
|
|
276
|
+
*/
|
|
277
|
+
export declare function artifactMaxHeldBytes(coordRoot?: string | null): number;
|
|
278
|
+
/**
|
|
279
|
+
* Free-disk floor for the artifact store. Below it, artifact commands warn and
|
|
280
|
+
* `artifacts create --big` refuses unless `--allow-low-disk` is passed.
|
|
281
|
+
* Precedence: `HARNERY_ARTIFACT_MIN_FREE_BYTES` -> `artifacts.min_free_bytes`
|
|
282
|
+
* -> 20 GiB. Zero disables the floor.
|
|
283
|
+
*/
|
|
284
|
+
export declare function artifactMinFreeBytes(coordRoot?: string | null): number;
|
|
223
285
|
/**
|
|
224
286
|
* Whether opportunistic cleanup of expired artifact workspaces runs.
|
|
225
287
|
* Precedence: `HARNERY_ARTIFACT_AUTO_CLEAN` (0/false disables) ->
|
|
226
|
-
* `artifacts.auto_clean` -> enabled. The sweep
|
|
227
|
-
* `managed-expired`
|
|
228
|
-
* `artifacts clean --yes
|
|
288
|
+
* `artifacts.auto_clean` -> enabled. The sweep deletes the same
|
|
289
|
+
* `managed-expired`, `managed-oversize`, and `managed-over-budget` entries as
|
|
290
|
+
* `artifacts clean --yes`, through the same guarded classifier.
|
|
229
291
|
*/
|
|
230
292
|
export declare function artifactAutoCleanEnabled(coordRoot?: string | null): boolean;
|
|
231
293
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,wCAAwC,EAAE,MAAM,gCAAgC,CAAC;AAE1F,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAEvC,yFAAyF;AACzF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,2EAA2E;AAC3E,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,mCAAmC,EAAE,yBAMjD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,4BAA4B,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
|
@@ -292,6 +292,34 @@ export function resolveHooksSetupHint(coordRoot) {
|
|
|
292
292
|
* values fail closed to no reminder so a malformed optional setting cannot
|
|
293
293
|
* break the prompt hook.
|
|
294
294
|
*/
|
|
295
|
+
/** A plain Windows command name, so it is safe to splice into a PowerShell hook command. */
|
|
296
|
+
const CODEX_WINDOWS_BRIDGE_ENTRY_POINT = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
297
|
+
/**
|
|
298
|
+
* Per-project opt-in that routes Windows-native Codex hooks through a resident
|
|
299
|
+
* WSL bridge (ADR 0197). Read from the project config only: the value is
|
|
300
|
+
* written into the committed `.codex/hooks.json`, so a user-level setting
|
|
301
|
+
* would make `init` output differ between machines. An invalid value is
|
|
302
|
+
* ignored and reported rather than spliced into a shell command.
|
|
303
|
+
*/
|
|
304
|
+
export function codexWindowsBridgeConfig(projectRoot) {
|
|
305
|
+
const raw = readProjectConfig(projectRoot).hooks?.codexWindowsBridge;
|
|
306
|
+
if (raw === undefined)
|
|
307
|
+
return { entryPoint: null, error: null };
|
|
308
|
+
const entryPoint = isPlainObject(raw) ? raw.entryPoint : undefined;
|
|
309
|
+
if (typeof entryPoint !== "string") {
|
|
310
|
+
return {
|
|
311
|
+
entryPoint: null,
|
|
312
|
+
error: "hooks.codexWindowsBridge.entryPoint must be a command name",
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
if (!CODEX_WINDOWS_BRIDGE_ENTRY_POINT.test(entryPoint)) {
|
|
316
|
+
return {
|
|
317
|
+
entryPoint: null,
|
|
318
|
+
error: `hooks.codexWindowsBridge.entryPoint ${JSON.stringify(entryPoint)} is not a plain command name`,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
return { entryPoint, error: null };
|
|
322
|
+
}
|
|
295
323
|
export function hostPromptReminder(coordRoot) {
|
|
296
324
|
const root = coordRoot ?? findCoordRoot();
|
|
297
325
|
if (!root)
|
|
@@ -408,6 +436,42 @@ export function workflowSubscriptionOnly(coordRoot) {
|
|
|
408
436
|
return false;
|
|
409
437
|
return readConfig(root).workflow?.subscriptionOnly === true;
|
|
410
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* The host's raw worker full-access policy (ADR 0192), validated by
|
|
441
|
+
* `parseWorkerFullAccessPolicy` in the workflow layer, which knows each
|
|
442
|
+
* adapter's effort scale.
|
|
443
|
+
*
|
|
444
|
+
* `.harnery/config.jsonc`:
|
|
445
|
+
* `{ "workflow": { "workerFullAccess": { "enabled": true, "floors": { ... } } } }`
|
|
446
|
+
*
|
|
447
|
+
* This is a trust boundary, so it comes only from the project config, like
|
|
448
|
+
* `agents.finalizationRoots`: a user-global file cannot remove the sandbox from
|
|
449
|
+
* one project's workers. `HARNERY_WORKFLOW_WORKER_FULL_ACCESS=0` turns it off
|
|
450
|
+
* for one process. There is deliberately no `=1`: an environment variable can
|
|
451
|
+
* withdraw the grant but never supply it.
|
|
452
|
+
*/
|
|
453
|
+
export function workflowWorkerFullAccessConfig(coordRoot) {
|
|
454
|
+
if (coordEnv("WORKFLOW_WORKER_FULL_ACCESS") === "0")
|
|
455
|
+
return { enabled: false };
|
|
456
|
+
const root = coordRoot ?? findCoordRoot();
|
|
457
|
+
if (!root)
|
|
458
|
+
return undefined;
|
|
459
|
+
return readProjectConfig(root).workflow?.workerFullAccess;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* How this project's `.harnery/` state is shared: `private` or `group`. `HARNERY_STORAGE_SHARING`
|
|
463
|
+
* overrides per process; an unrecognized value falls back to `private`, the safer reading.
|
|
464
|
+
*/
|
|
465
|
+
export function storageSharing(coordRoot) {
|
|
466
|
+
const env = coordEnv("STORAGE_SHARING");
|
|
467
|
+
if (env === "group" || env === "private")
|
|
468
|
+
return env;
|
|
469
|
+
const root = coordRoot ?? findCoordRoot();
|
|
470
|
+
if (!root)
|
|
471
|
+
return "private";
|
|
472
|
+
// Project file only: a user-global "group" would loosen every project that user touches.
|
|
473
|
+
return readProjectConfig(root).storage?.sharing === "group" ? "group" : "private";
|
|
474
|
+
}
|
|
411
475
|
/**
|
|
412
476
|
* Whether cross-machine presence (ADR 0016) is enabled for this repo.
|
|
413
477
|
* Default ON — the transport itself additionally gates on an origin remote
|
|
@@ -528,6 +592,40 @@ export function resolveWebPort(explicitPort, coordRoot) {
|
|
|
528
592
|
}
|
|
529
593
|
return DEFAULT_WEB_PORT;
|
|
530
594
|
}
|
|
595
|
+
/** The configured inclusive port range for one server type, or null. */
|
|
596
|
+
export function serverPortRange(type, coordRoot) {
|
|
597
|
+
const root = coordRoot ?? findCoordRoot();
|
|
598
|
+
const value = root ? readConfig(root).servers?.port_ranges?.[type] : undefined;
|
|
599
|
+
if (!Array.isArray(value) || value.length !== 2)
|
|
600
|
+
return null;
|
|
601
|
+
const [low, high] = value;
|
|
602
|
+
const valid = (n) => Number.isInteger(n) && n > 0 && n < 65536;
|
|
603
|
+
return valid(low) && valid(high) && low <= high ? [low, high] : null;
|
|
604
|
+
}
|
|
605
|
+
/** Every configured server port range, keyed by type (invalid entries dropped). */
|
|
606
|
+
export function serverPortRanges(coordRoot) {
|
|
607
|
+
const root = coordRoot ?? findCoordRoot();
|
|
608
|
+
const ranges = root ? readConfig(root).servers?.port_ranges : undefined;
|
|
609
|
+
const out = {};
|
|
610
|
+
for (const type of Object.keys(ranges ?? {})) {
|
|
611
|
+
const range = serverPortRange(type, root);
|
|
612
|
+
if (range)
|
|
613
|
+
out[type] = range;
|
|
614
|
+
}
|
|
615
|
+
return out;
|
|
616
|
+
}
|
|
617
|
+
/** Configured `servers gc` windows; undefined fields use the built-in defaults. */
|
|
618
|
+
export function serverGcConfig(coordRoot) {
|
|
619
|
+
const root = coordRoot ?? findCoordRoot();
|
|
620
|
+
const configured = root ? readConfig(root).servers : undefined;
|
|
621
|
+
const positive = (n) => typeof n === "number" && Number.isFinite(n) && n > 0;
|
|
622
|
+
return {
|
|
623
|
+
...(positive(configured?.idle_hours) ? { idle_hours: configured.idle_hours } : {}),
|
|
624
|
+
...(positive(configured?.owner_stale_hours)
|
|
625
|
+
? { owner_stale_hours: configured.owner_stale_hours }
|
|
626
|
+
: {}),
|
|
627
|
+
};
|
|
628
|
+
}
|
|
531
629
|
/** Policy for converging independent termination signals on one finalizer. */
|
|
532
630
|
export function sessionFinalizationConfig(coordRoot) {
|
|
533
631
|
const root = coordRoot ?? findCoordRoot();
|
|
@@ -579,12 +677,53 @@ export function artifactMaxUnitBytes(coordRoot) {
|
|
|
579
677
|
const root = coordRoot ?? findCoordRoot();
|
|
580
678
|
return integerSetting(coordEnv("ARTIFACT_MAX_UNIT_BYTES"), root ? readConfig(root).artifacts?.max_unit_bytes : undefined, 16 * 1024 * 1024, 1024 * 1024 * 1024 * 1024, DEFAULT_ARTIFACT_MAX_UNIT_BYTES);
|
|
581
679
|
}
|
|
680
|
+
/**
|
|
681
|
+
* How long an unexpired workspace must sit idle before a size rule (the
|
|
682
|
+
* per-bundle ceiling or the repository budget) may delete it. Idle means no
|
|
683
|
+
* change inside the workspace and no heartbeat from its owner. An agent waiting
|
|
684
|
+
* on a human reply looks idle, so a short window deletes work someone is still
|
|
685
|
+
* reviewing. Precedence: `HARNERY_ARTIFACT_IDLE_GRACE_HOURS` ->
|
|
686
|
+
* `artifacts.idle_grace_hours` -> 24. Expiry never waits for this grace.
|
|
687
|
+
*/
|
|
688
|
+
export function artifactIdleGraceHours(coordRoot) {
|
|
689
|
+
const root = coordRoot ?? findCoordRoot();
|
|
690
|
+
return integerSetting(coordEnv("ARTIFACT_IDLE_GRACE_HOURS"), root ? readConfig(root).artifacts?.idle_grace_hours : undefined, 1, 24 * 365, 24);
|
|
691
|
+
}
|
|
692
|
+
/**
|
|
693
|
+
* Default lifetime of an artifact hold. A hold that is not renewed lapses after
|
|
694
|
+
* this many days and the workspace returns to ordinary retention. Precedence:
|
|
695
|
+
* `HARNERY_ARTIFACT_HOLD_DAYS` -> `artifacts.hold_days` -> 14.
|
|
696
|
+
*/
|
|
697
|
+
export function artifactHoldDays(coordRoot) {
|
|
698
|
+
const root = coordRoot ?? findCoordRoot();
|
|
699
|
+
return integerSetting(coordEnv("ARTIFACT_HOLD_DAYS"), root ? readConfig(root).artifacts?.hold_days : undefined, 1, 365, 14);
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* Advisory budget for held artifact bytes. Exceeding it produces warnings
|
|
703
|
+
* only: holds record owner intent, so cleanup never deletes held work.
|
|
704
|
+
* Precedence: `HARNERY_ARTIFACT_MAX_HELD_BYTES` -> `artifacts.max_held_bytes`
|
|
705
|
+
* -> 20 GiB.
|
|
706
|
+
*/
|
|
707
|
+
export function artifactMaxHeldBytes(coordRoot) {
|
|
708
|
+
const root = coordRoot ?? findCoordRoot();
|
|
709
|
+
return integerSetting(coordEnv("ARTIFACT_MAX_HELD_BYTES"), root ? readConfig(root).artifacts?.max_held_bytes : undefined, 64 * 1024 * 1024, 1024 * 1024 * 1024 * 1024, DEFAULT_ARTIFACT_MAX_BYTES);
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* Free-disk floor for the artifact store. Below it, artifact commands warn and
|
|
713
|
+
* `artifacts create --big` refuses unless `--allow-low-disk` is passed.
|
|
714
|
+
* Precedence: `HARNERY_ARTIFACT_MIN_FREE_BYTES` -> `artifacts.min_free_bytes`
|
|
715
|
+
* -> 20 GiB. Zero disables the floor.
|
|
716
|
+
*/
|
|
717
|
+
export function artifactMinFreeBytes(coordRoot) {
|
|
718
|
+
const root = coordRoot ?? findCoordRoot();
|
|
719
|
+
return integerSetting(coordEnv("ARTIFACT_MIN_FREE_BYTES"), root ? readConfig(root).artifacts?.min_free_bytes : undefined, 0, 1024 * 1024 * 1024 * 1024 * 1024, 20 * 1024 * 1024 * 1024);
|
|
720
|
+
}
|
|
582
721
|
/**
|
|
583
722
|
* Whether opportunistic cleanup of expired artifact workspaces runs.
|
|
584
723
|
* Precedence: `HARNERY_ARTIFACT_AUTO_CLEAN` (0/false disables) ->
|
|
585
|
-
* `artifacts.auto_clean` -> enabled. The sweep
|
|
586
|
-
* `managed-expired`
|
|
587
|
-
* `artifacts clean --yes
|
|
724
|
+
* `artifacts.auto_clean` -> enabled. The sweep deletes the same
|
|
725
|
+
* `managed-expired`, `managed-oversize`, and `managed-over-budget` entries as
|
|
726
|
+
* `artifacts clean --yes`, through the same guarded classifier.
|
|
588
727
|
*/
|
|
589
728
|
export function artifactAutoCleanEnabled(coordRoot) {
|
|
590
729
|
const env = coordEnv("ARTIFACT_AUTO_CLEAN");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AACjD,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAI3C,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AACjG,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AACnF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,uBAAuB,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,OAAO,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,OAAO,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,sBAAsB,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,2BAA2B,GACnC,aAAa,GAAG,IAAI,CAqDtB;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAcrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,CAoDzB;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5D,uBAAuB,GAAG,IAAI,CAqBhC;AAED,uFAAuF;AACvF,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC/C,sBAAsB,CAexB;AAED,kFAAkF;AAClF,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,sBAAsB,CAiBxB;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5D,oBAAoB,CAatB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,sBAAsB,GAAG,IAAI,CAE/B;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAIhG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CA+BjG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAoBtD"}
|
|
@@ -9,6 +9,7 @@ import { createHash, randomUUID } from "node:crypto";
|
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { readLiveCoordinationRow } from "../agents/state/live-coordination-view.js";
|
|
12
|
+
import { stateFileMode } from "../storage/modes.js";
|
|
12
13
|
export const CONTEXT_SCHEMA_VERSION = 1;
|
|
13
14
|
export const MAX_CAPSULE_BYTES = 32 * 1024;
|
|
14
15
|
const MAX_SNAPSHOT_PATHS = 15;
|
|
@@ -319,7 +320,7 @@ function writeBoundedJson(path, value, maxBytes) {
|
|
|
319
320
|
}
|
|
320
321
|
mkdirSync(dirname(path), { recursive: true });
|
|
321
322
|
const temp = `${path}.tmp.${process.pid}.${randomUUID()}`;
|
|
322
|
-
writeFileSync(temp, text, { encoding: "utf8", mode:
|
|
323
|
+
writeFileSync(temp, text, { encoding: "utf8", mode: stateFileMode() });
|
|
323
324
|
renameSync(temp, path);
|
|
324
325
|
}
|
|
325
326
|
function readJson(path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/core/conversations/archive.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/core/conversations/archive.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EACV,6BAA6B,EAC7B,uCAAuC,EACvC,2BAA2B,EAC3B,2BAA2B,EAC3B,iCAAiC,EAClC,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,oCAAoC,EAAG,kCAA2C,CAAC;AAEhG,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,OAAO,oCAAoC,CAAC;IACpD,cAAc,EAAE,yBAAyB,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,iCAAiC,CAAC,cAAc,CAAC,CAAC;IAChE,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,UAAU,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,uCAAuC,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,6BAA6B,CAAC;IAC3C,cAAc,EAAE,uCAAuC,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,CACN,QAAQ,EACJ,2BAA2B,GAC3B,qBAAqB,GACrB,yBAAyB,GACzB,wBAAwB,KACzB,IAAI,CAAC;CACX;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,kCAAkC,CAAC;CAC/C;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAoEpC;AAED,wBAAgB,uBAAuB,CACrC,oBAAoB,EAAE,MAAM,EAC5B,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,2BAA2B,EAAE,CAS/B;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,cAAc,EAAE,uCAAuC,CAAC;IACxD,GAAG,EAAE,IAAI,CAAC;CACX,GAAG,kCAAkC,CAcrC;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,kCAAkC,GAAG,SAAS,CAUhD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAIR"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
3
|
import { appendDurableHistoryRecord, readDurableHistorySync, } from "../storage/durable-history.js";
|
|
4
|
+
import { stateDirMode, stateFileMode } from "../storage/modes.js";
|
|
4
5
|
import { digest, normalizeConversationRecord } from "./normalize.js";
|
|
5
6
|
export const HARNERY_CONVERSATION_MANIFEST_SCHEMA = "harnery.conversation-manifest/v1";
|
|
6
7
|
export async function captureProviderConversation(provider, options) {
|
|
@@ -9,10 +10,10 @@ export async function captureProviderConversation(provider, options) {
|
|
|
9
10
|
if (options.access_mode === "source")
|
|
10
11
|
return result("source-only");
|
|
11
12
|
const objectDir = conversationArchiveDir(options.coord_root, provider.capabilities.provider_id, options.conversation_id);
|
|
12
|
-
mkdirSync(objectDir, { recursive: true, mode:
|
|
13
|
+
mkdirSync(objectDir, { recursive: true, mode: stateDirMode() });
|
|
13
14
|
const lease = join(objectDir, ".capture.lease");
|
|
14
15
|
try {
|
|
15
|
-
mkdirSync(lease, { mode:
|
|
16
|
+
mkdirSync(lease, { mode: stateDirMode() });
|
|
16
17
|
}
|
|
17
18
|
catch {
|
|
18
19
|
throw new Error(`conversation capture lease busy: ${options.conversation_id}`);
|
|
@@ -123,7 +124,7 @@ function manifestFor(records, snapshot, authorityMode, now) {
|
|
|
123
124
|
function publishManifest(objectDir, manifest) {
|
|
124
125
|
const path = join(objectDir, "manifest.json");
|
|
125
126
|
const temp = `${path}.tmp-${process.pid}`;
|
|
126
|
-
writeFileSync(temp, `${JSON.stringify(manifest, null, 2)}\n`, { mode:
|
|
127
|
+
writeFileSync(temp, `${JSON.stringify(manifest, null, 2)}\n`, { mode: stateFileMode() });
|
|
127
128
|
renameSync(temp, path);
|
|
128
129
|
}
|
|
129
130
|
function opaque(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/bundle.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/bundle.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AA0B/B,OAAO,EASL,KAAK,wBAAwB,EAG7B,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EAItB,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AA2BvB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACzD,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,4BAAiC,GACvC,wBAAwB,CAwG1B;AAkCD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,yBAAyB,CAsB3B;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,yBAAyB,CAK3B;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,yBAAyB,CAE7F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CA0BjF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,4BAA4B,EAAE,CA4C/F;AAqCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,OAAa,GACf,sBAAsB,CAgBxB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { chmodSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, } from "node:fs";
|
|
2
2
|
import { dirname, join, resolve, sep } from "node:path";
|
|
3
|
-
import { ARTIFACT_MANIFEST, artifactsRoot, configuredArtifactRetentionDays, createArtifact, inventoryArtifacts, parseArtifactManifest, releaseArtifact, resolveArtifactRef, } from "../artifacts/index.js";
|
|
3
|
+
import { ARTIFACT_MANIFEST, artifactHoldState, artifactsRoot, configuredArtifactRetentionDays, createArtifact, inventoryArtifacts, parseArtifactManifest, releaseArtifact, resolveArtifactRef, } from "../artifacts/index.js";
|
|
4
4
|
import { currentHarneryRuntimeBuild } from "../events/v3/runtime-build.js";
|
|
5
5
|
import { writePrivateJsonAtomic } from "../storage/atomic-json.js";
|
|
6
|
+
import { stateDirMode } from "../storage/modes.js";
|
|
6
7
|
import { SUPERVISOR_DIAGNOSTIC_LIMITS, SUPERVISOR_EXPLANATION_SCHEMA_VERSION, SUPERVISOR_FINDING_POLICY, SUPERVISOR_FINDING_SCHEMA_VERSION, SUPERVISOR_RESOURCE_BUDGET, SUPERVISOR_TIMELINE_SCHEMA_VERSION, } from "../supervisor/contract.js";
|
|
7
8
|
import { readWorkflowProof } from "../workflow/proof.js";
|
|
8
9
|
import { DIAGNOSTIC_ADVICE_SCHEMA_VERSION, DIAGNOSTIC_BUNDLE_FILES, DIAGNOSTIC_BUNDLE_SCHEMA_VERSION, DIAGNOSTIC_COMMAND_SCHEMA_VERSION, DIAGNOSTIC_EXPECTED_SCHEMA_VERSION, DIAGNOSTIC_INPUT_SCHEMA_VERSION, DIAGNOSTIC_SUMMARY_SCHEMA_VERSION, PRESSURE_ASSESSMENT_SCHEMA_VERSION, PRESSURE_POLICY, } from "./contract.js";
|
|
@@ -68,8 +69,8 @@ export function captureDiagnosticBundle(repoRootRaw, input = {}) {
|
|
|
68
69
|
now,
|
|
69
70
|
});
|
|
70
71
|
const inputsPath = join(created.path, "inputs");
|
|
71
|
-
mkdirSync(inputsPath, { recursive: true, mode:
|
|
72
|
-
tryChmod(inputsPath,
|
|
72
|
+
mkdirSync(inputsPath, { recursive: true, mode: stateDirMode() });
|
|
73
|
+
tryChmod(inputsPath, stateDirMode());
|
|
73
74
|
const payloads = {
|
|
74
75
|
"inputs/observations.json": observations,
|
|
75
76
|
"inputs/thresholds.json": thresholds,
|
|
@@ -286,7 +287,7 @@ function candidateArtifactId(artifactPath) {
|
|
|
286
287
|
}
|
|
287
288
|
}
|
|
288
289
|
function candidateClassification(manifest) {
|
|
289
|
-
if (manifest.
|
|
290
|
+
if (artifactHoldState(manifest).active.length > 0)
|
|
290
291
|
return "managed-held";
|
|
291
292
|
if (!manifest.released_at)
|
|
292
293
|
return "managed-active";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canary.d.ts","sourceRoot":"","sources":["../../../../src/core/events/legacy-storage/canary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canary.d.ts","sourceRoot":"","sources":["../../../../src/core/events/legacy-storage/canary.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,uBAAuB,EAAmC,MAAM,eAAe,CAAC;AAG9F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,IAAI,CAAC;IACvB,mBAAmB,EAAE,KAAK,CAAC;CAC5B;AAED,iFAAiF;AACjF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyFhC;AAED,wBAAgB,iCAAiC,IAAI,KAAK,CAEzD"}
|
|
@@ -4,6 +4,7 @@ import { chmod, lstat, mkdir, open, rename, rm } from "node:fs/promises";
|
|
|
4
4
|
import { basename, join, resolve } from "node:path";
|
|
5
5
|
import { pipeline } from "node:stream/promises";
|
|
6
6
|
import { createGzip } from "node:zlib";
|
|
7
|
+
import { stateDirMode, stateFileMode } from "../../storage/modes.js";
|
|
7
8
|
import { canonicalJsonV3 } from "../v3/canonical.js";
|
|
8
9
|
import { verifyLegacyV1HardFence } from "./fence.js";
|
|
9
10
|
import { validateLegacyV1SegmentManifest } from "./manifest.js";
|
|
@@ -29,15 +30,15 @@ export async function writeLegacyV1Canary(input) {
|
|
|
29
30
|
.digest("hex")
|
|
30
31
|
.slice(0, 32)}`;
|
|
31
32
|
const outputDirectory = resolve(input.output_directory);
|
|
32
|
-
await mkdir(outputDirectory, { recursive: true, mode:
|
|
33
|
-
await chmod(outputDirectory,
|
|
33
|
+
await mkdir(outputDirectory, { recursive: true, mode: stateDirMode() });
|
|
34
|
+
await chmod(outputDirectory, stateDirMode());
|
|
34
35
|
const payloadPath = join(outputDirectory, `${segmentId}.ndjson.gz`);
|
|
35
36
|
const manifestPath = join(outputDirectory, `${segmentId}.manifest.json`);
|
|
36
37
|
const partialPayload = `${payloadPath}.partial`;
|
|
37
38
|
const partialManifest = `${manifestPath}.partial`;
|
|
38
39
|
await rejectExisting([payloadPath, manifestPath, partialPayload, partialManifest]);
|
|
39
40
|
try {
|
|
40
|
-
await pipeline(createReadStream(source), createGzip({ level: 9 }), createWriteStream(partialPayload, { flags: "wx", mode:
|
|
41
|
+
await pipeline(createReadStream(source), createGzip({ level: 9 }), createWriteStream(partialPayload, { flags: "wx", mode: stateFileMode() }));
|
|
41
42
|
await rename(partialPayload, payloadPath);
|
|
42
43
|
const payloadStat = await lstat(payloadPath);
|
|
43
44
|
const manifest = validateLegacyV1SegmentManifest({
|
|
@@ -61,7 +62,7 @@ export async function writeLegacyV1Canary(input) {
|
|
|
61
62
|
minimum_harnery_version: input.minimum_harnery_version,
|
|
62
63
|
created_at: input.created_at,
|
|
63
64
|
});
|
|
64
|
-
const handle = await open(partialManifest, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL,
|
|
65
|
+
const handle = await open(partialManifest, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, stateFileMode());
|
|
65
66
|
try {
|
|
66
67
|
await handle.writeFile(`${canonicalJsonV3(manifest)}\n`, "utf8");
|
|
67
68
|
await handle.sync();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../../../src/core/events/legacy-storage/compression.ts"],"names":[],"mappings":"AAAA,+EAA+E;
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../../../src/core/events/legacy-storage/compression.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAY/E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CA0FrC"}
|
|
@@ -4,6 +4,7 @@ import { chmod, lstat, rename, rm } from "node:fs/promises";
|
|
|
4
4
|
import { basename } from "node:path";
|
|
5
5
|
import { pipeline } from "node:stream/promises";
|
|
6
6
|
import { createGzip } from "node:zlib";
|
|
7
|
+
import { stateFileMode } from "../../storage/modes.js";
|
|
7
8
|
import { verifyLegacyV1HardFence } from "./fence.js";
|
|
8
9
|
import { inventoryLegacyV1Segments } from "./inventory.js";
|
|
9
10
|
import { streamLegacyV1Rows } from "./reader.js";
|
|
@@ -66,7 +67,7 @@ export async function compressSealedLegacyV1Segments(coordRoot, opts = {}) {
|
|
|
66
67
|
if (error.code !== "ENOENT")
|
|
67
68
|
throw error;
|
|
68
69
|
}
|
|
69
|
-
await pipeline(createReadStream(row.path), createGzip({ level: 9 }), createWriteStream(temporary, { flags: "wx", mode:
|
|
70
|
+
await pipeline(createReadStream(row.path), createGzip({ level: 9 }), createWriteStream(temporary, { flags: "wx", mode: stateFileMode() }));
|
|
70
71
|
await proveRowParity(row.path, temporary);
|
|
71
72
|
const unchanged = (await inventoryLegacyV1Segments(coordRoot)).find((entry) => entry.path === row.path);
|
|
72
73
|
if (!unchanged ||
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Adapter, type AdapterFallbackOptions } from "../../adapter.js";
|
|
2
2
|
/** Harness identities that may produce or describe Event Ledger V3 evidence. */
|
|
3
3
|
export type EventAdapterIdV3 = Adapter | "openclaw";
|
|
4
4
|
/** Canonical event-adapter census. Workflow launch adapters remain in core/adapter.ts. */
|
|
5
|
-
export declare const EVENT_ADAPTER_IDS_V3: readonly ["claude-code", "codex", "cursor", "openclaw"];
|
|
5
|
+
export declare const EVENT_ADAPTER_IDS_V3: readonly ["claude-code", "codex", "cursor", "opencode", "openclaw"];
|
|
6
|
+
/** Strict event-adapter normalizer: a known id or `null`. */
|
|
7
|
+
export declare function normalizeEventAdapterIdV3(value: unknown): EventAdapterIdV3 | null;
|
|
8
|
+
/**
|
|
9
|
+
* Heartbeat `platform` to an event adapter id, substituting `DEFAULT_ADAPTER`
|
|
10
|
+
* and reporting the substitution. Use this wherever a row must be attributed
|
|
11
|
+
* to some adapter; use `normalizeEventAdapterIdV3` when `null` is acceptable.
|
|
12
|
+
*/
|
|
13
|
+
export declare function eventAdapterIdV3FromPlatform(value: unknown, options?: AdapterFallbackOptions): EventAdapterIdV3;
|
|
6
14
|
//# sourceMappingURL=adapter-id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-id.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/adapter-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"adapter-id.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/adapter-id.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAI5B,MAAM,kBAAkB,CAAC;AAE1B,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEpD,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,qEAMe,CAAC;AAMjD,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,sBAAsB,GAC/B,gBAAgB,CAElB"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
|
+
import { DEFAULT_ADAPTER, normalizeAdapterId, resolveAdapterId, } from "../../adapter.js";
|
|
1
2
|
/** Canonical event-adapter census. Workflow launch adapters remain in core/adapter.ts. */
|
|
2
3
|
export const EVENT_ADAPTER_IDS_V3 = [
|
|
3
4
|
"claude-code",
|
|
4
5
|
"codex",
|
|
5
6
|
"cursor",
|
|
7
|
+
"opencode",
|
|
6
8
|
"openclaw",
|
|
7
9
|
];
|
|
10
|
+
const eventAdapterIdsComplete = true;
|
|
11
|
+
void eventAdapterIdsComplete;
|
|
12
|
+
/** Strict event-adapter normalizer: a known id or `null`. */
|
|
13
|
+
export function normalizeEventAdapterIdV3(value) {
|
|
14
|
+
return normalizeAdapterId(value, EVENT_ADAPTER_IDS_V3);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Heartbeat `platform` to an event adapter id, substituting `DEFAULT_ADAPTER`
|
|
18
|
+
* and reporting the substitution. Use this wherever a row must be attributed
|
|
19
|
+
* to some adapter; use `normalizeEventAdapterIdV3` when `null` is acceptable.
|
|
20
|
+
*/
|
|
21
|
+
export function eventAdapterIdV3FromPlatform(value, options) {
|
|
22
|
+
return resolveAdapterId(value, EVENT_ADAPTER_IDS_V3, DEFAULT_ADAPTER, options);
|
|
23
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority-outbox.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/authority-outbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authority-outbox.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/authority-outbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { closeSync, existsSync, fsyncSync, linkSync, openSync, readdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
import { stateFileMode } from "../../storage/modes.js";
|
|
4
5
|
import { fsyncParentDirectory } from "../../workflow/durable-record.js";
|
|
5
6
|
import { canonicalJsonV3, sha256V3 } from "./canonical.js";
|
|
6
7
|
import { liveGenesisIdV3 } from "./control.js";
|
|
@@ -382,7 +383,7 @@ function publishExclusive(path, serialized) {
|
|
|
382
383
|
const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
|
|
383
384
|
let fd;
|
|
384
385
|
try {
|
|
385
|
-
fd = openSync(temporary, "wx",
|
|
386
|
+
fd = openSync(temporary, "wx", stateFileMode());
|
|
386
387
|
writeFileSync(fd, serialized, "utf8");
|
|
387
388
|
fsyncSync(fd);
|
|
388
389
|
closeSync(fd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/bootstrap.ts"],"names":[],"mappings":"AAuBA,OAAO,EAOL,KAAK,mBAAmB,EAEzB,MAAM,cAAc,CAAC;AAStB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,UAAU,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,sCAAsC;IACrD,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC5D;AAkBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAiC,GAChD,OAAO,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,CAenD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAE/B;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,GAChB,sCAAsC,CAgCxC;AAED,MAAM,WAAW,0CAA0C;IACzD,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,iFAAiF;AACjF,eAAO,MAAM,8CAA8C,EACzD,uCAAgD,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,GAChB,0CAA0C,CA6B5C;AAWD,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,SAAS,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,kCAAkC,CA8DpC"}
|