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
|
@@ -6,9 +6,13 @@ import {
|
|
|
6
6
|
type ArtifactActor,
|
|
7
7
|
type ArtifactDeliveryManifest,
|
|
8
8
|
adoptUnmanagedArtifactFiles,
|
|
9
|
+
allowBigArtifact,
|
|
9
10
|
artifactCapabilities,
|
|
11
|
+
artifactQuickUsage,
|
|
10
12
|
artifactReviewGuidance,
|
|
11
13
|
artifactsRoot,
|
|
14
|
+
artifactUsageReport,
|
|
15
|
+
assertArtifactDiskFloor,
|
|
12
16
|
autoCleanArtifacts,
|
|
13
17
|
cleanArtifacts,
|
|
14
18
|
createArtifact,
|
|
@@ -17,7 +21,9 @@ import {
|
|
|
17
21
|
inventoryArtifacts,
|
|
18
22
|
migrateArtifacts,
|
|
19
23
|
parseArtifactDeliverySpec,
|
|
24
|
+
readArtifactDeletions,
|
|
20
25
|
releaseArtifact,
|
|
26
|
+
removeArtifact,
|
|
21
27
|
renderArtifactDeliveryCard,
|
|
22
28
|
renewArtifact,
|
|
23
29
|
repairArtifactActivity,
|
|
@@ -28,7 +34,10 @@ import {
|
|
|
28
34
|
} from "../core/artifacts/index.ts";
|
|
29
35
|
import {
|
|
30
36
|
artifactDefaultRetentionDays,
|
|
37
|
+
artifactIdleGraceHours,
|
|
38
|
+
artifactMaxUnitBytes,
|
|
31
39
|
coordFreshnessSeconds,
|
|
40
|
+
resolveBinName,
|
|
32
41
|
reviewPackAutoCleanEnabled,
|
|
33
42
|
} from "../core/config.ts";
|
|
34
43
|
import { deleteExpiredPacks } from "../lib/browser/page-review-pack.ts";
|
|
@@ -50,8 +59,16 @@ export function registerArtifactsCommand(
|
|
|
50
59
|
.option("--days <n>", "Retention in days (default from artifacts.default_retention_days)")
|
|
51
60
|
.option("--minutes <n>", "Retention in minutes; cannot be combined with --days")
|
|
52
61
|
.option("--big", "Acknowledge that this workspace may exceed the per-bundle size ceiling")
|
|
62
|
+
.option(
|
|
63
|
+
"--allow-low-disk",
|
|
64
|
+
"Create a --big workspace even though free disk is below artifacts.min_free_bytes",
|
|
65
|
+
)
|
|
53
66
|
.option("--hold <id>", "Create the workspace with this hold already present")
|
|
54
67
|
.option("--hold-reason <text>", "Why the initial hold is required")
|
|
68
|
+
.option(
|
|
69
|
+
"--hold-persistent",
|
|
70
|
+
"Make the initial hold persistent: it never lapses and counts toward the held budget. Only for a hold that mirrors an external lease, such as an open checkout with unsynchronized work",
|
|
71
|
+
)
|
|
55
72
|
.option("--actor <instance-id>", "Stable owner identity for the initial hold")
|
|
56
73
|
.action(
|
|
57
74
|
(
|
|
@@ -61,8 +78,10 @@ export function registerArtifactsCommand(
|
|
|
61
78
|
days?: string;
|
|
62
79
|
minutes?: string;
|
|
63
80
|
big?: boolean;
|
|
81
|
+
allowLowDisk?: boolean;
|
|
64
82
|
hold?: string;
|
|
65
83
|
holdReason?: string;
|
|
84
|
+
holdPersistent?: boolean;
|
|
66
85
|
actor?: string;
|
|
67
86
|
},
|
|
68
87
|
) => {
|
|
@@ -73,6 +92,8 @@ export function registerArtifactsCommand(
|
|
|
73
92
|
const actor = opts.actor ? { instance_id: opts.actor } : currentActor(repoRoot);
|
|
74
93
|
if (!!opts.hold !== !!opts.holdReason)
|
|
75
94
|
throw new Error("--hold and --hold-reason must be used together");
|
|
95
|
+
if (opts.holdPersistent && !opts.hold)
|
|
96
|
+
throw new Error("--hold-persistent requires --hold");
|
|
76
97
|
const retentionDays = opts.days
|
|
77
98
|
? parseDays(opts.days)
|
|
78
99
|
: artifactDefaultRetentionDays(repoRoot);
|
|
@@ -86,6 +107,7 @@ export function registerArtifactsCommand(
|
|
|
86
107
|
"warn",
|
|
87
108
|
);
|
|
88
109
|
}
|
|
110
|
+
if (opts.big && !opts.allowLowDisk) assertArtifactDiskFloor(repoRoot);
|
|
89
111
|
const created = createArtifact(repoRoot, {
|
|
90
112
|
slug,
|
|
91
113
|
purpose: opts.purpose,
|
|
@@ -93,7 +115,15 @@ export function registerArtifactsCommand(
|
|
|
93
115
|
retentionMinutes,
|
|
94
116
|
actor,
|
|
95
117
|
big: opts.big,
|
|
96
|
-
holds: opts.hold
|
|
118
|
+
holds: opts.hold
|
|
119
|
+
? [
|
|
120
|
+
{
|
|
121
|
+
id: opts.hold,
|
|
122
|
+
reason: opts.holdReason!,
|
|
123
|
+
...(opts.holdPersistent ? { persistent: true } : {}),
|
|
124
|
+
},
|
|
125
|
+
]
|
|
126
|
+
: [],
|
|
97
127
|
});
|
|
98
128
|
emit.data({
|
|
99
129
|
path: created.path,
|
|
@@ -101,6 +131,13 @@ export function registerArtifactsCommand(
|
|
|
101
131
|
expires_at: created.manifest.retention.expires_at,
|
|
102
132
|
owner_instance_id: actor?.instance_id ?? null,
|
|
103
133
|
holds: created.manifest.holds,
|
|
134
|
+
...usageFields(emit, repoRoot),
|
|
135
|
+
...(opts.big
|
|
136
|
+
? {}
|
|
137
|
+
: {
|
|
138
|
+
size_ceiling_bytes: artifactMaxUnitBytes(repoRoot),
|
|
139
|
+
size_note: `Cleanup deletes this workspace before it expires if it grows past ${artifactMaxUnitBytes(repoRoot)} bytes on disk and then sits idle for ${artifactIdleGraceHours(repoRoot)}h. Create it with --big, or run ${resolveBinName(repoRoot)} artifacts allow-big later, if it will grow that large.`,
|
|
140
|
+
}),
|
|
104
141
|
after_review: artifactReviewGuidance(repoRoot, created.manifest.artifact_id),
|
|
105
142
|
});
|
|
106
143
|
});
|
|
@@ -144,7 +181,14 @@ export function registerArtifactsCommand(
|
|
|
144
181
|
const rows = inventoryArtifacts(repoRoot, {
|
|
145
182
|
freshnessSeconds: coordFreshnessSeconds(repoRoot),
|
|
146
183
|
});
|
|
147
|
-
|
|
184
|
+
const recentDeletions = readArtifactDeletions(repoRoot, {
|
|
185
|
+
since: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
|
|
186
|
+
});
|
|
187
|
+
emit.data({
|
|
188
|
+
rows,
|
|
189
|
+
meta: inventoryMeta(emit, repoRoot, rows),
|
|
190
|
+
recent_deletions: recentDeletions,
|
|
191
|
+
});
|
|
148
192
|
});
|
|
149
193
|
});
|
|
150
194
|
|
|
@@ -154,11 +198,21 @@ export function registerArtifactsCommand(
|
|
|
154
198
|
.action((ref: string) => {
|
|
155
199
|
run(emit, () => {
|
|
156
200
|
const repoRoot = requireRepoRoot(context);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
201
|
+
try {
|
|
202
|
+
emit.data(
|
|
203
|
+
showArtifact(repoRoot, ref, {
|
|
204
|
+
freshnessSeconds: coordFreshnessSeconds(repoRoot),
|
|
205
|
+
}),
|
|
206
|
+
);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
const deleted = readArtifactDeletions(repoRoot)
|
|
209
|
+
.reverse()
|
|
210
|
+
.find((record) => [record.artifact_id, record.name].includes(ref));
|
|
211
|
+
if (!deleted) throw error;
|
|
212
|
+
throw new Error(
|
|
213
|
+
`artifact "${ref}" was deleted by cleanup at ${deleted.deleted_at} as ${deleted.classification}: ${deleted.reason}`,
|
|
214
|
+
);
|
|
215
|
+
}
|
|
162
216
|
});
|
|
163
217
|
});
|
|
164
218
|
|
|
@@ -221,6 +275,18 @@ export function registerArtifactsCommand(
|
|
|
221
275
|
});
|
|
222
276
|
});
|
|
223
277
|
|
|
278
|
+
root
|
|
279
|
+
.command("allow-big <ref>")
|
|
280
|
+
.description(
|
|
281
|
+
"Exempt an existing workspace from the per-bundle size ceiling, as create --big would; expiry still applies.",
|
|
282
|
+
)
|
|
283
|
+
.action((ref: string) => {
|
|
284
|
+
run(emit, () => {
|
|
285
|
+
const repoRoot = requireRepoRoot(context);
|
|
286
|
+
emit.data(allowBigArtifact(repoRoot, ref, { actor: currentActor(repoRoot) }));
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
224
290
|
root
|
|
225
291
|
.command("release <ref>")
|
|
226
292
|
.description("Release active-owner protection without shortening retention.")
|
|
@@ -251,6 +317,20 @@ export function registerArtifactsCommand(
|
|
|
251
317
|
});
|
|
252
318
|
});
|
|
253
319
|
|
|
320
|
+
root
|
|
321
|
+
.command("remove <ref>")
|
|
322
|
+
.description("Preview immediate removal of one owned artifact; --yes permanently deletes it.")
|
|
323
|
+
.requiredOption("--reason <text>", "Why these reviewed files are no longer needed")
|
|
324
|
+
.option("--yes", "Permanently delete this one workspace after safety checks")
|
|
325
|
+
.action((ref: string, opts: { reason: string; yes?: boolean }) => {
|
|
326
|
+
run(emit, () => {
|
|
327
|
+
const repoRoot = requireRepoRoot(context);
|
|
328
|
+
emit.data(
|
|
329
|
+
removeArtifact(repoRoot, ref, opts.reason, { ...opts, actor: currentActor(repoRoot) }),
|
|
330
|
+
);
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
|
|
254
334
|
root
|
|
255
335
|
.command("capabilities")
|
|
256
336
|
.description("Report artifact schema and hold capabilities for embedding clients.")
|
|
@@ -278,21 +358,46 @@ export function registerArtifactsCommand(
|
|
|
278
358
|
|
|
279
359
|
root
|
|
280
360
|
.command("hold <ref>")
|
|
281
|
-
.description(
|
|
361
|
+
.description(
|
|
362
|
+
"Protect an artifact from cleanup until the hold lapses or its owner removes it; repeating the same id and reason renews it.",
|
|
363
|
+
)
|
|
282
364
|
.requiredOption("--id <id>", "Unique hold id within this artifact")
|
|
283
365
|
.requiredOption("--reason <text>", "Why cleanup must retain these files")
|
|
284
366
|
.option("--actor <instance-id>", "Stable hold owner; defaults to the current agent")
|
|
285
|
-
.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
367
|
+
.option("--days <n>", "Hold lifetime in days, 1 to 365 (default from artifacts.hold_days)")
|
|
368
|
+
.option("--minutes <n>", "Hold lifetime in minutes; cannot be combined with --days")
|
|
369
|
+
.option(
|
|
370
|
+
"--persistent",
|
|
371
|
+
"Never lapse; counts toward the held budget. Only for a hold that mirrors an external lease, such as an open checkout with unsynchronized work",
|
|
372
|
+
)
|
|
373
|
+
.action(
|
|
374
|
+
(
|
|
375
|
+
ref: string,
|
|
376
|
+
opts: {
|
|
377
|
+
id: string;
|
|
378
|
+
reason: string;
|
|
379
|
+
actor?: string;
|
|
380
|
+
days?: string;
|
|
381
|
+
minutes?: string;
|
|
382
|
+
persistent?: boolean;
|
|
383
|
+
},
|
|
384
|
+
) =>
|
|
385
|
+
run(emit, () => {
|
|
386
|
+
const repoRoot = requireRepoRoot(context);
|
|
387
|
+
if (opts.days !== undefined && opts.minutes !== undefined)
|
|
388
|
+
throw new Error("choose either --days or --minutes");
|
|
389
|
+
if (opts.persistent && (opts.days !== undefined || opts.minutes !== undefined))
|
|
390
|
+
throw new Error("--persistent cannot be combined with --days or --minutes");
|
|
391
|
+
const manifest = holdArtifact(repoRoot, ref, {
|
|
290
392
|
id: opts.id,
|
|
291
393
|
reason: opts.reason,
|
|
292
394
|
actor: requireHoldActor(repoRoot, opts.actor),
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
395
|
+
...(opts.days !== undefined ? { days: parseHoldDays(opts.days) } : {}),
|
|
396
|
+
...(opts.minutes !== undefined ? { minutes: parseHoldMinutes(opts.minutes) } : {}),
|
|
397
|
+
...(opts.persistent ? { persistent: true } : {}),
|
|
398
|
+
});
|
|
399
|
+
emit.data({ ...manifest, ...usageFields(emit, repoRoot) });
|
|
400
|
+
}),
|
|
296
401
|
);
|
|
297
402
|
|
|
298
403
|
root
|
|
@@ -325,7 +430,7 @@ export function registerArtifactsCommand(
|
|
|
325
430
|
: undefined;
|
|
326
431
|
emit.data({
|
|
327
432
|
rows,
|
|
328
|
-
meta:
|
|
433
|
+
meta: inventoryMeta(emit, repoRoot, rows),
|
|
329
434
|
...(reviewPacks ? { review_packs: reviewPacks } : {}),
|
|
330
435
|
});
|
|
331
436
|
});
|
|
@@ -370,20 +475,67 @@ function parseMinutes(value: string): number {
|
|
|
370
475
|
return parsed;
|
|
371
476
|
}
|
|
372
477
|
|
|
478
|
+
function parseHoldDays(value: string): number {
|
|
479
|
+
const parsed = Number(value);
|
|
480
|
+
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 365)
|
|
481
|
+
throw new Error("--days must be between 1 and 365 for a hold");
|
|
482
|
+
return parsed;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function parseHoldMinutes(value: string): number {
|
|
486
|
+
const parsed = Number(value);
|
|
487
|
+
if (!Number.isInteger(parsed) || parsed < 1 || parsed > 525600)
|
|
488
|
+
throw new Error("--minutes must be between 1 and 525600 for a hold");
|
|
489
|
+
return parsed;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/** Cheap usage for create and hold: cached held bytes plus live free disk. */
|
|
493
|
+
function usageFields(
|
|
494
|
+
emit: EmitContext,
|
|
495
|
+
repoRoot: string,
|
|
496
|
+
): { usage: ReturnType<typeof artifactQuickUsage>["usage"]; warnings: string[] } {
|
|
497
|
+
const quick = artifactQuickUsage(repoRoot);
|
|
498
|
+
for (const warning of quick.warnings) emit.log(warning, "warn");
|
|
499
|
+
return { usage: quick.usage, warnings: quick.warnings };
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/** Summary plus held budget and free disk for a full inventory; warnings also go to stderr. */
|
|
503
|
+
function inventoryMeta(
|
|
504
|
+
emit: EmitContext,
|
|
505
|
+
repoRoot: string,
|
|
506
|
+
rows: Parameters<typeof artifactUsageReport>[1],
|
|
507
|
+
): Record<string, unknown> {
|
|
508
|
+
const report = artifactUsageReport(repoRoot, rows);
|
|
509
|
+
for (const warning of report.warnings) emit.log(warning, "warn");
|
|
510
|
+
return { ...summarize(rows), ...report };
|
|
511
|
+
}
|
|
512
|
+
|
|
373
513
|
function collect(value: string, previous: string[]): string[] {
|
|
374
514
|
return [...previous, value];
|
|
375
515
|
}
|
|
376
516
|
|
|
377
517
|
function summarize(
|
|
378
|
-
rows: {
|
|
518
|
+
rows: {
|
|
519
|
+
classification: string;
|
|
520
|
+
action: string;
|
|
521
|
+
bytes?: number | null;
|
|
522
|
+
apparent_bytes?: number | null;
|
|
523
|
+
warning?: string | null;
|
|
524
|
+
}[],
|
|
379
525
|
): Record<string, unknown> {
|
|
380
526
|
const classifications: Record<string, number> = {};
|
|
381
527
|
for (const row of rows) {
|
|
382
528
|
classifications[row.classification] = (classifications[row.classification] ?? 0) + 1;
|
|
383
529
|
}
|
|
530
|
+
const bytes = rows.reduce((sum, row) => sum + (row.bytes ?? 0), 0);
|
|
384
531
|
return {
|
|
385
532
|
total: rows.length,
|
|
386
|
-
|
|
533
|
+
// Disk use. `apparent_bytes` is the sum of file lengths; a large gap
|
|
534
|
+
// between the two means sparse or hard-linked files.
|
|
535
|
+
bytes,
|
|
536
|
+
apparent_bytes: rows.reduce((sum, row) => sum + (row.apparent_bytes ?? 0), 0),
|
|
537
|
+
// Rows carrying a per-row `warning`; `warnings` holds store-level sentences.
|
|
538
|
+
row_warnings: rows.filter((row) => row.warning).length,
|
|
387
539
|
classifications,
|
|
388
540
|
would_delete: rows.filter((row) => row.action === "would-delete").length,
|
|
389
541
|
deleted: rows.filter((row) => row.action === "deleted").length,
|
|
@@ -4,6 +4,7 @@ import type { Command } from "commander";
|
|
|
4
4
|
import type { EmitContext, HarneryProgramContext } from "../commander.ts";
|
|
5
5
|
import { AgentBrowser, type ExecResult } from "../lib/agent-browser/index.ts";
|
|
6
6
|
import { applyExtraCookies, CookieJar } from "../lib/cookies/index.ts";
|
|
7
|
+
import { commandPaceGate } from "../lib/pace/index.ts";
|
|
7
8
|
|
|
8
9
|
// Module-scoped emit assigned by registerBrowseAiCommand. Same pattern as
|
|
9
10
|
// cookies/read/browse: helper functions close over `emit` so action
|
|
@@ -46,6 +47,7 @@ interface BrowseAiOpts {
|
|
|
46
47
|
networkHar?: string;
|
|
47
48
|
store?: string;
|
|
48
49
|
cookies?: boolean;
|
|
50
|
+
pace?: boolean;
|
|
49
51
|
json?: boolean;
|
|
50
52
|
timeout: string;
|
|
51
53
|
}
|
|
@@ -85,6 +87,11 @@ export function registerBrowseAiCommand(
|
|
|
85
87
|
)
|
|
86
88
|
.option("--network-har <path>", "Record a HAR file from open() through end of run")
|
|
87
89
|
.option("--no-cookies", "Skip cookie-jar attach and persist")
|
|
90
|
+
.option(
|
|
91
|
+
"--no-pace",
|
|
92
|
+
"Skip the human-pace gap (3 to 9 s) between page loads of the same site for this run. " +
|
|
93
|
+
"HARNERY_PACE=off disables it machine-wide; local and private hosts never wait.",
|
|
94
|
+
)
|
|
88
95
|
.option("--store <path>", `Cookie store path (default ${DEFAULT_STORE})`)
|
|
89
96
|
.option("--json", "Emit a JSON envelope (snapshot, screenshot path, step results)")
|
|
90
97
|
.option("--timeout <ms>", "Per-step timeout in ms", "60000")
|
|
@@ -108,6 +115,7 @@ function runBrowseAi(url: string, opts: BrowseAiOpts, context?: HarneryProgramCo
|
|
|
108
115
|
const ab = new AgentBrowser({
|
|
109
116
|
jar,
|
|
110
117
|
timeoutMs: Number.parseInt(opts.timeout, 10),
|
|
118
|
+
pace: commandPaceGate(opts.pace !== false, (message) => emit.log(message, "info")),
|
|
111
119
|
});
|
|
112
120
|
|
|
113
121
|
const stepLog: { step: string; ok: boolean; output: string }[] = [];
|