@pentoshi/clai 4.11.5 → 4.11.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/compaction/summary-execution.d.ts +32 -0
- package/dist/agent/compaction/summary-execution.js +407 -0
- package/dist/agent/compaction/summary-execution.js.map +1 -0
- package/dist/agent/compaction-attempt.d.ts +5 -1
- package/dist/agent/compaction-attempt.js +22 -12
- package/dist/agent/compaction-attempt.js.map +1 -1
- package/dist/agent/compaction-executor.d.ts +5 -53
- package/dist/agent/compaction-executor.js +11 -442
- package/dist/agent/compaction-executor.js.map +1 -1
- package/dist/agent/compaction-summary.d.ts +0 -25
- package/dist/agent/compaction-summary.js +0 -20
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/confirm-port.d.ts +0 -6
- package/dist/agent/confirm-port.js +0 -11
- package/dist/agent/confirm-port.js.map +1 -1
- package/dist/agent/context/compact-with-summary.d.ts +34 -0
- package/dist/agent/context/compact-with-summary.js +381 -0
- package/dist/agent/context/compact-with-summary.js.map +1 -0
- package/dist/agent/context-breakdown.d.ts +0 -12
- package/dist/agent/context-breakdown.js +0 -16
- package/dist/agent/context-breakdown.js.map +1 -1
- package/dist/agent/context-manager.d.ts +4 -90
- package/dist/agent/context-manager.js +6 -464
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/continue-orient.d.ts +0 -19
- package/dist/agent/continue-orient.js +0 -24
- package/dist/agent/continue-orient.js.map +1 -1
- package/dist/agent/durable-blocks.d.ts +5 -0
- package/dist/agent/durable-blocks.js +16 -0
- package/dist/agent/durable-blocks.js.map +1 -0
- package/dist/agent/durable-envelope.d.ts +0 -2
- package/dist/agent/durable-envelope.js +0 -16
- package/dist/agent/durable-envelope.js.map +1 -1
- package/dist/agent/events.d.ts +6 -17
- package/dist/agent/evidence/task-classification.d.ts +25 -0
- package/dist/agent/evidence/task-classification.js +124 -0
- package/dist/agent/evidence/task-classification.js.map +1 -0
- package/dist/agent/evidence/task-selection.d.ts +29 -0
- package/dist/agent/evidence/task-selection.js +148 -0
- package/dist/agent/evidence/task-selection.js.map +1 -0
- package/dist/agent/evidence/tool-budgets.d.ts +12 -0
- package/dist/agent/evidence/tool-budgets.js +82 -0
- package/dist/agent/evidence/tool-budgets.js.map +1 -0
- package/dist/agent/evidence-governor.d.ts +0 -3
- package/dist/agent/evidence-governor.js.map +1 -1
- package/dist/agent/injected-blocks.d.ts +1 -0
- package/dist/agent/injected-blocks.js +14 -4
- package/dist/agent/injected-blocks.js.map +1 -1
- package/dist/agent/message-slim.d.ts +2 -0
- package/dist/agent/message-slim.js +45 -2
- package/dist/agent/message-slim.js.map +1 -1
- package/dist/agent/outcomes.d.ts +0 -1
- package/dist/agent/outcomes.js +0 -11
- package/dist/agent/outcomes.js.map +1 -1
- package/dist/agent/parser/arg-formatting.d.ts +3 -0
- package/dist/agent/parser/arg-formatting.js +99 -0
- package/dist/agent/parser/arg-formatting.js.map +1 -0
- package/dist/agent/parser/bare-recognition.d.ts +6 -0
- package/dist/agent/parser/bare-recognition.js +106 -0
- package/dist/agent/parser/bare-recognition.js.map +1 -0
- package/dist/agent/parser/parse-entry.d.ts +9 -0
- package/dist/agent/parser/parse-entry.js +198 -0
- package/dist/agent/parser/parse-entry.js.map +1 -0
- package/dist/agent/parser/repetition.d.ts +1 -0
- package/dist/agent/parser/repetition.js +72 -0
- package/dist/agent/parser/repetition.js.map +1 -0
- package/dist/agent/parser/salvage.d.ts +8 -0
- package/dist/agent/parser/salvage.js +100 -0
- package/dist/agent/parser/salvage.js.map +1 -0
- package/dist/agent/parser/vendor-protocols.d.ts +21 -0
- package/dist/agent/parser/vendor-protocols.js +265 -0
- package/dist/agent/parser/vendor-protocols.js.map +1 -0
- package/dist/agent/parser/xml-protocol.d.ts +7 -0
- package/dist/agent/parser/xml-protocol.js +455 -0
- package/dist/agent/parser/xml-protocol.js.map +1 -0
- package/dist/agent/plan/actions/plan-clear.d.ts +4 -0
- package/dist/agent/plan/actions/plan-clear.js +46 -0
- package/dist/agent/plan/actions/plan-clear.js.map +1 -0
- package/dist/agent/plan/actions/plan-create.d.ts +4 -0
- package/dist/agent/plan/actions/plan-create.js +371 -0
- package/dist/agent/plan/actions/plan-create.js.map +1 -0
- package/dist/agent/plan/actions/task-add.d.ts +5 -0
- package/dist/agent/plan/actions/task-add.js +131 -0
- package/dist/agent/plan/actions/task-add.js.map +1 -0
- package/dist/agent/plan/actions/task-move.d.ts +5 -0
- package/dist/agent/plan/actions/task-move.js +72 -0
- package/dist/agent/plan/actions/task-move.js.map +1 -0
- package/dist/agent/plan/context-message.d.ts +2 -0
- package/dist/agent/plan/context-message.js +91 -0
- package/dist/agent/plan/context-message.js.map +1 -0
- package/dist/agent/plan/handle-plan-tool.d.ts +24 -0
- package/dist/agent/plan/handle-plan-tool.js +310 -0
- package/dist/agent/plan/handle-plan-tool.js.map +1 -0
- package/dist/agent/plan/normalization.d.ts +19 -0
- package/dist/agent/plan/normalization.js +175 -0
- package/dist/agent/plan/normalization.js.map +1 -0
- package/dist/agent/plan-implement-compact.d.ts +0 -20
- package/dist/agent/plan-implement-compact.js +0 -21
- package/dist/agent/plan-implement-compact.js.map +1 -1
- package/dist/agent/plan-mode-reminders.d.ts +0 -24
- package/dist/agent/plan-mode-reminders.js +0 -21
- package/dist/agent/plan-mode-reminders.js.map +1 -1
- package/dist/agent/plan-tool.d.ts +5 -60
- package/dist/agent/plan-tool.js +7 -1235
- package/dist/agent/plan-tool.js.map +1 -1
- package/dist/agent/progress-pause-policy.d.ts +0 -1
- package/dist/agent/progress-pause-policy.js +1 -5
- package/dist/agent/progress-pause-policy.js.map +1 -1
- package/dist/agent/progress.d.ts +0 -5
- package/dist/agent/progress.js +0 -14
- package/dist/agent/progress.js.map +1 -1
- package/dist/agent/project-root.d.ts +0 -21
- package/dist/agent/project-root.js +0 -36
- package/dist/agent/project-root.js.map +1 -1
- package/dist/agent/prompt-composer.d.ts +0 -1
- package/dist/agent/prompt-composer.js +0 -2
- package/dist/agent/prompt-composer.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +0 -38
- package/dist/agent/reliability-policy.js +0 -39
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/request-accounting.d.ts +0 -30
- package/dist/agent/request-accounting.js +2 -26
- package/dist/agent/request-accounting.js.map +1 -1
- package/dist/agent/request-budget.d.ts +0 -2
- package/dist/agent/request-budget.js +0 -13
- package/dist/agent/request-budget.js.map +1 -1
- package/dist/agent/responder-context.js +14 -3
- package/dist/agent/responder-context.js.map +1 -1
- package/dist/agent/responder-parent.d.ts +0 -10
- package/dist/agent/responder-parent.js +0 -12
- package/dist/agent/responder-parent.js.map +1 -1
- package/dist/agent/runner.d.ts +0 -30
- package/dist/agent/runner.js +404 -5057
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/scope-context.d.ts +0 -1
- package/dist/agent/scope-context.js +0 -1
- package/dist/agent/scope-context.js.map +1 -1
- package/dist/agent/scratch-write.d.ts +0 -1
- package/dist/agent/scratch-write.js +0 -1
- package/dist/agent/scratch-write.js.map +1 -1
- package/dist/agent/session-policy.d.ts +0 -28
- package/dist/agent/session-policy.js +0 -34
- package/dist/agent/session-policy.js.map +1 -1
- package/dist/agent/session-state.d.ts +0 -38
- package/dist/agent/session-state.js +4 -41
- package/dist/agent/session-state.js.map +1 -1
- package/dist/agent/step-budget.d.ts +0 -4
- package/dist/agent/step-budget.js +0 -4
- package/dist/agent/step-budget.js.map +1 -1
- package/dist/agent/stop-summary.d.ts +0 -5
- package/dist/agent/stop-summary.js +0 -8
- package/dist/agent/stop-summary.js.map +1 -1
- package/dist/agent/stream-recovery.d.ts +1 -54
- package/dist/agent/stream-recovery.js +4 -53
- package/dist/agent/stream-recovery.js.map +1 -1
- package/dist/agent/task-evidence.d.ts +10 -159
- package/dist/agent/task-evidence.js +10 -477
- package/dist/agent/task-evidence.js.map +1 -1
- package/dist/agent/task-plan.d.ts +0 -8
- package/dist/agent/task-plan.js +0 -6
- package/dist/agent/task-plan.js.map +1 -1
- package/dist/agent/task-sync.d.ts +0 -25
- package/dist/agent/task-sync.js +0 -31
- package/dist/agent/task-sync.js.map +1 -1
- package/dist/agent/tool-call-parser.d.ts +10 -205
- package/dist/agent/tool-call-parser.js +13 -1716
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/tool-history-projection.d.ts +7 -0
- package/dist/agent/tool-history-projection.js +455 -0
- package/dist/agent/tool-history-projection.js.map +1 -0
- package/dist/agent/tool-history.d.ts +8 -67
- package/dist/agent/tool-history.js +156 -219
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/tool-output-formatting.d.ts +0 -18
- package/dist/agent/tool-output-formatting.js +0 -28
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/agent/turn/automatic-compaction-execution.d.ts +14 -0
- package/dist/agent/turn/automatic-compaction-execution.js +19 -0
- package/dist/agent/turn/automatic-compaction-execution.js.map +1 -0
- package/dist/agent/turn/compaction-admission.d.ts +25 -0
- package/dist/agent/turn/compaction-admission.js +40 -0
- package/dist/agent/turn/compaction-admission.js.map +1 -0
- package/dist/agent/turn/compaction-candidate.d.ts +10 -0
- package/dist/agent/turn/compaction-candidate.js +12 -0
- package/dist/agent/turn/compaction-candidate.js.map +1 -0
- package/dist/agent/turn/compaction-coordinator.d.ts +42 -0
- package/dist/agent/turn/compaction-coordinator.js +169 -0
- package/dist/agent/turn/compaction-coordinator.js.map +1 -0
- package/dist/agent/turn/compaction-durable-envelope.d.ts +24 -0
- package/dist/agent/turn/compaction-durable-envelope.js +54 -0
- package/dist/agent/turn/compaction-durable-envelope.js.map +1 -0
- package/dist/agent/turn/compaction-final-fit.d.ts +10 -0
- package/dist/agent/turn/compaction-final-fit.js +14 -0
- package/dist/agent/turn/compaction-final-fit.js.map +1 -0
- package/dist/agent/turn/compaction-messages.d.ts +6 -0
- package/dist/agent/turn/compaction-messages.js +15 -0
- package/dist/agent/turn/compaction-messages.js.map +1 -0
- package/dist/agent/turn/compaction-replay-selection.d.ts +10 -0
- package/dist/agent/turn/compaction-replay-selection.js +27 -0
- package/dist/agent/turn/compaction-replay-selection.js.map +1 -0
- package/dist/agent/turn/compaction-request-estimator.d.ts +7 -0
- package/dist/agent/turn/compaction-request-estimator.js +13 -0
- package/dist/agent/turn/compaction-request-estimator.js.map +1 -0
- package/dist/agent/turn/compaction-summarizer.d.ts +21 -0
- package/dist/agent/turn/compaction-summarizer.js +41 -0
- package/dist/agent/turn/compaction-summarizer.js.map +1 -0
- package/dist/agent/turn/continuation-overlap.d.ts +1 -0
- package/dist/agent/turn/continuation-overlap.js +35 -0
- package/dist/agent/turn/continuation-overlap.js.map +1 -0
- package/dist/agent/turn/contracts.d.ts +25 -0
- package/dist/agent/turn/contracts.js +2 -0
- package/dist/agent/turn/contracts.js.map +1 -0
- package/dist/agent/turn/event-emitter.d.ts +21 -0
- package/dist/agent/turn/event-emitter.js +116 -0
- package/dist/agent/turn/event-emitter.js.map +1 -0
- package/dist/agent/turn/evidence-flags.d.ts +16 -0
- package/dist/agent/turn/evidence-flags.js +44 -0
- package/dist/agent/turn/evidence-flags.js.map +1 -0
- package/dist/agent/turn/finalizer.d.ts +28 -0
- package/dist/agent/turn/finalizer.js +44 -0
- package/dist/agent/turn/finalizer.js.map +1 -0
- package/dist/agent/turn/history-writer.d.ts +17 -0
- package/dist/agent/turn/history-writer.js +72 -0
- package/dist/agent/turn/history-writer.js.map +1 -0
- package/dist/agent/turn/inserted-text.d.ts +1 -0
- package/dist/agent/turn/inserted-text.js +2 -0
- package/dist/agent/turn/inserted-text.js.map +1 -0
- package/dist/agent/turn/loop/answer-assessment.d.ts +22 -0
- package/dist/agent/turn/loop/answer-assessment.js +30 -0
- package/dist/agent/turn/loop/answer-assessment.js.map +1 -0
- package/dist/agent/turn/loop/answer-path.d.ts +20 -0
- package/dist/agent/turn/loop/answer-path.js +92 -0
- package/dist/agent/turn/loop/answer-path.js.map +1 -0
- package/dist/agent/turn/loop/call-binding.d.ts +17 -0
- package/dist/agent/turn/loop/call-binding.js +42 -0
- package/dist/agent/turn/loop/call-binding.js.map +1 -0
- package/dist/agent/turn/loop/canonicalize-turn-call.d.ts +5 -0
- package/dist/agent/turn/loop/canonicalize-turn-call.js +12 -0
- package/dist/agent/turn/loop/canonicalize-turn-call.js.map +1 -0
- package/dist/agent/turn/loop/completion-interpretation.d.ts +34 -0
- package/dist/agent/turn/loop/completion-interpretation.js +71 -0
- package/dist/agent/turn/loop/completion-interpretation.js.map +1 -0
- package/dist/agent/turn/loop/deps.d.ts +98 -0
- package/dist/agent/turn/loop/deps.js +2 -0
- package/dist/agent/turn/loop/deps.js.map +1 -0
- package/dist/agent/turn/loop/empty-response.d.ts +22 -0
- package/dist/agent/turn/loop/empty-response.js +51 -0
- package/dist/agent/turn/loop/empty-response.js.map +1 -0
- package/dist/agent/turn/loop/final-outcome.d.ts +15 -0
- package/dist/agent/turn/loop/final-outcome.js +49 -0
- package/dist/agent/turn/loop/final-outcome.js.map +1 -0
- package/dist/agent/turn/loop/group-execution.d.ts +14 -0
- package/dist/agent/turn/loop/group-execution.js +44 -0
- package/dist/agent/turn/loop/group-execution.js.map +1 -0
- package/dist/agent/turn/loop/model-only-rounds.d.ts +31 -0
- package/dist/agent/turn/loop/model-only-rounds.js +49 -0
- package/dist/agent/turn/loop/model-only-rounds.js.map +1 -0
- package/dist/agent/turn/loop/native-tool-calls.d.ts +12 -0
- package/dist/agent/turn/loop/native-tool-calls.js +57 -0
- package/dist/agent/turn/loop/native-tool-calls.js.map +1 -0
- package/dist/agent/turn/loop/native-write-salvage.d.ts +18 -0
- package/dist/agent/turn/loop/native-write-salvage.js +92 -0
- package/dist/agent/turn/loop/native-write-salvage.js.map +1 -0
- package/dist/agent/turn/loop/output-budget.d.ts +40 -0
- package/dist/agent/turn/loop/output-budget.js +76 -0
- package/dist/agent/turn/loop/output-budget.js.map +1 -0
- package/dist/agent/turn/loop/plan-call-deferral.d.ts +12 -0
- package/dist/agent/turn/loop/plan-call-deferral.js +32 -0
- package/dist/agent/turn/loop/plan-call-deferral.js.map +1 -0
- package/dist/agent/turn/loop/request-assembly.d.ts +32 -0
- package/dist/agent/turn/loop/request-assembly.js +97 -0
- package/dist/agent/turn/loop/request-assembly.js.map +1 -0
- package/dist/agent/turn/loop/round-closeout.d.ts +56 -0
- package/dist/agent/turn/loop/round-closeout.js +77 -0
- package/dist/agent/turn/loop/round-closeout.js.map +1 -0
- package/dist/agent/turn/loop/round-recorder.d.ts +38 -0
- package/dist/agent/turn/loop/round-recorder.js +71 -0
- package/dist/agent/turn/loop/round-recorder.js.map +1 -0
- package/dist/agent/turn/loop/round-request.d.ts +19 -0
- package/dist/agent/turn/loop/round-request.js +169 -0
- package/dist/agent/turn/loop/round-request.js.map +1 -0
- package/dist/agent/turn/loop/round-state.d.ts +11 -0
- package/dist/agent/turn/loop/round-state.js +11 -0
- package/dist/agent/turn/loop/round-state.js.map +1 -0
- package/dist/agent/turn/loop/run-rounds.d.ts +5 -0
- package/dist/agent/turn/loop/run-rounds.js +664 -0
- package/dist/agent/turn/loop/run-rounds.js.map +1 -0
- package/dist/agent/turn/loop/sequence-suppression.d.ts +54 -0
- package/dist/agent/turn/loop/sequence-suppression.js +112 -0
- package/dist/agent/turn/loop/sequence-suppression.js.map +1 -0
- package/dist/agent/turn/loop/state.d.ts +38 -0
- package/dist/agent/turn/loop/state.js +29 -0
- package/dist/agent/turn/loop/state.js.map +1 -0
- package/dist/agent/turn/loop/stream-failure.d.ts +55 -0
- package/dist/agent/turn/loop/stream-failure.js +149 -0
- package/dist/agent/turn/loop/stream-failure.js.map +1 -0
- package/dist/agent/turn/loop/stream-request.d.ts +16 -0
- package/dist/agent/turn/loop/stream-request.js +21 -0
- package/dist/agent/turn/loop/stream-request.js.map +1 -0
- package/dist/agent/turn/loop/stream-session.d.ts +41 -0
- package/dist/agent/turn/loop/stream-session.js +136 -0
- package/dist/agent/turn/loop/stream-session.js.map +1 -0
- package/dist/agent/turn/loop/tool-call-recovery.d.ts +25 -0
- package/dist/agent/turn/loop/tool-call-recovery.js +162 -0
- package/dist/agent/turn/loop/tool-call-recovery.js.map +1 -0
- package/dist/agent/turn/loop/unrun-calls.d.ts +12 -0
- package/dist/agent/turn/loop/unrun-calls.js +27 -0
- package/dist/agent/turn/loop/unrun-calls.js.map +1 -0
- package/dist/agent/turn/loop/wire-occurrences.d.ts +31 -0
- package/dist/agent/turn/loop/wire-occurrences.js +45 -0
- package/dist/agent/turn/loop/wire-occurrences.js.map +1 -0
- package/dist/agent/turn/mcp-agent-tools.d.ts +17 -0
- package/dist/agent/turn/mcp-agent-tools.js +69 -0
- package/dist/agent/turn/mcp-agent-tools.js.map +1 -0
- package/dist/agent/turn/message-assembly.d.ts +14 -0
- package/dist/agent/turn/message-assembly.js +22 -0
- package/dist/agent/turn/message-assembly.js.map +1 -0
- package/dist/agent/turn/outcome-accounting.d.ts +27 -0
- package/dist/agent/turn/outcome-accounting.js +91 -0
- package/dist/agent/turn/outcome-accounting.js.map +1 -0
- package/dist/agent/turn/plan-mode-gate.d.ts +16 -0
- package/dist/agent/turn/plan-mode-gate.js +36 -0
- package/dist/agent/turn/plan-mode-gate.js.map +1 -0
- package/dist/agent/turn/plan-persistence.d.ts +28 -0
- package/dist/agent/turn/plan-persistence.js +56 -0
- package/dist/agent/turn/plan-persistence.js.map +1 -0
- package/dist/agent/turn/prompt-sections.d.ts +9 -0
- package/dist/agent/turn/prompt-sections.js +67 -0
- package/dist/agent/turn/prompt-sections.js.map +1 -0
- package/dist/agent/turn/responder-claims.d.ts +16 -0
- package/dist/agent/turn/responder-claims.js +37 -0
- package/dist/agent/turn/responder-claims.js.map +1 -0
- package/dist/agent/turn/responder-dependency.d.ts +3 -0
- package/dist/agent/turn/responder-dependency.js +36 -0
- package/dist/agent/turn/responder-dependency.js.map +1 -0
- package/dist/agent/turn/responder-inbox.d.ts +28 -0
- package/dist/agent/turn/responder-inbox.js +57 -0
- package/dist/agent/turn/responder-inbox.js.map +1 -0
- package/dist/agent/turn/responder-job-linkage.d.ts +30 -0
- package/dist/agent/turn/responder-job-linkage.js +124 -0
- package/dist/agent/turn/responder-job-linkage.js.map +1 -0
- package/dist/agent/turn/responder-read-tool.d.ts +26 -0
- package/dist/agent/turn/responder-read-tool.js +83 -0
- package/dist/agent/turn/responder-read-tool.js.map +1 -0
- package/dist/agent/turn/scaffold-outcome.d.ts +7 -0
- package/dist/agent/turn/scaffold-outcome.js +93 -0
- package/dist/agent/turn/scaffold-outcome.js.map +1 -0
- package/dist/agent/turn/scaffold-preflight.d.ts +8 -0
- package/dist/agent/turn/scaffold-preflight.js +31 -0
- package/dist/agent/turn/scaffold-preflight.js.map +1 -0
- package/dist/agent/turn/session-state-projection.d.ts +18 -0
- package/dist/agent/turn/session-state-projection.js +46 -0
- package/dist/agent/turn/session-state-projection.js.map +1 -0
- package/dist/agent/turn/setup/compaction-services.d.ts +55 -0
- package/dist/agent/turn/setup/compaction-services.js +69 -0
- package/dist/agent/turn/setup/compaction-services.js.map +1 -0
- package/dist/agent/turn/setup/evidence-rehydration.d.ts +3 -0
- package/dist/agent/turn/setup/evidence-rehydration.js +22 -0
- package/dist/agent/turn/setup/evidence-rehydration.js.map +1 -0
- package/dist/agent/turn/setup/mcp-agent-ports.d.ts +29 -0
- package/dist/agent/turn/setup/mcp-agent-ports.js +26 -0
- package/dist/agent/turn/setup/mcp-agent-ports.js.map +1 -0
- package/dist/agent/turn/setup/prompt-classification.d.ts +10 -0
- package/dist/agent/turn/setup/prompt-classification.js +18 -0
- package/dist/agent/turn/setup/prompt-classification.js.map +1 -0
- package/dist/agent/turn/setup/responder-wake.d.ts +16 -0
- package/dist/agent/turn/setup/responder-wake.js +18 -0
- package/dist/agent/turn/setup/responder-wake.js.map +1 -0
- package/dist/agent/turn/setup/session-state.d.ts +20 -0
- package/dist/agent/turn/setup/session-state.js +23 -0
- package/dist/agent/turn/setup/session-state.js.map +1 -0
- package/dist/agent/turn/setup/task-gate-setup.d.ts +19 -0
- package/dist/agent/turn/setup/task-gate-setup.js +21 -0
- package/dist/agent/turn/setup/task-gate-setup.js.map +1 -0
- package/dist/agent/turn/setup/turn-budget.d.ts +19 -0
- package/dist/agent/turn/setup/turn-budget.js +34 -0
- package/dist/agent/turn/setup/turn-budget.js.map +1 -0
- package/dist/agent/turn/setup/turn-messages.d.ts +25 -0
- package/dist/agent/turn/setup/turn-messages.js +38 -0
- package/dist/agent/turn/setup/turn-messages.js.map +1 -0
- package/dist/agent/turn/setup/turn-state-machine.d.ts +13 -0
- package/dist/agent/turn/setup/turn-state-machine.js +52 -0
- package/dist/agent/turn/setup/turn-state-machine.js.map +1 -0
- package/dist/agent/turn/system-sections.d.ts +36 -0
- package/dist/agent/turn/system-sections.js +157 -0
- package/dist/agent/turn/system-sections.js.map +1 -0
- package/dist/agent/turn/task-autostart.d.ts +12 -0
- package/dist/agent/turn/task-autostart.js +35 -0
- package/dist/agent/turn/task-autostart.js.map +1 -0
- package/dist/agent/turn/task-batch-guard.d.ts +18 -0
- package/dist/agent/turn/task-batch-guard.js +83 -0
- package/dist/agent/turn/task-batch-guard.js.map +1 -0
- package/dist/agent/turn/task-credit.d.ts +15 -0
- package/dist/agent/turn/task-credit.js +49 -0
- package/dist/agent/turn/task-credit.js.map +1 -0
- package/dist/agent/turn/task-gate.d.ts +13 -0
- package/dist/agent/turn/task-gate.js +34 -0
- package/dist/agent/turn/task-gate.js.map +1 -0
- package/dist/agent/turn/task-update-gate.d.ts +13 -0
- package/dist/agent/turn/task-update-gate.js +40 -0
- package/dist/agent/turn/task-update-gate.js.map +1 -0
- package/dist/agent/turn/task-work-signals.d.ts +3 -0
- package/dist/agent/turn/task-work-signals.js +44 -0
- package/dist/agent/turn/task-work-signals.js.map +1 -0
- package/dist/agent/turn/tool-call-preparation.d.ts +20 -0
- package/dist/agent/turn/tool-call-preparation.js +67 -0
- package/dist/agent/turn/tool-call-preparation.js.map +1 -0
- package/dist/agent/turn/tool-evidence-signals.d.ts +22 -0
- package/dist/agent/turn/tool-evidence-signals.js +101 -0
- package/dist/agent/turn/tool-evidence-signals.js.map +1 -0
- package/dist/agent/turn/tool-execution/authorization.d.ts +32 -0
- package/dist/agent/turn/tool-execution/authorization.js +100 -0
- package/dist/agent/turn/tool-execution/authorization.js.map +1 -0
- package/dist/agent/turn/tool-execution/deps.d.ts +74 -0
- package/dist/agent/turn/tool-execution/deps.js +2 -0
- package/dist/agent/turn/tool-execution/deps.js.map +1 -0
- package/dist/agent/turn/tool-execution/dispatch.d.ts +27 -0
- package/dist/agent/turn/tool-execution/dispatch.js +76 -0
- package/dist/agent/turn/tool-execution/dispatch.js.map +1 -0
- package/dist/agent/turn/tool-execution/engagement-checkpoint.d.ts +7 -0
- package/dist/agent/turn/tool-execution/engagement-checkpoint.js +32 -0
- package/dist/agent/turn/tool-execution/engagement-checkpoint.js.map +1 -0
- package/dist/agent/turn/tool-execution/engagement-gate.d.ts +16 -0
- package/dist/agent/turn/tool-execution/engagement-gate.js +55 -0
- package/dist/agent/turn/tool-execution/engagement-gate.js.map +1 -0
- package/dist/agent/turn/tool-execution/gates.d.ts +21 -0
- package/dist/agent/turn/tool-execution/gates.js +45 -0
- package/dist/agent/turn/tool-execution/gates.js.map +1 -0
- package/dist/agent/turn/tool-execution/guards.d.ts +42 -0
- package/dist/agent/turn/tool-execution/guards.js +62 -0
- package/dist/agent/turn/tool-execution/guards.js.map +1 -0
- package/dist/agent/turn/tool-execution/meta-tools.d.ts +50 -0
- package/dist/agent/turn/tool-execution/meta-tools.js +114 -0
- package/dist/agent/turn/tool-execution/meta-tools.js.map +1 -0
- package/dist/agent/turn/tool-execution/plan-tool-ledger.d.ts +10 -0
- package/dist/agent/turn/tool-execution/plan-tool-ledger.js +50 -0
- package/dist/agent/turn/tool-execution/plan-tool-ledger.js.map +1 -0
- package/dist/agent/turn/tool-execution/result-framing.d.ts +36 -0
- package/dist/agent/turn/tool-execution/result-framing.js +54 -0
- package/dist/agent/turn/tool-execution/result-framing.js.map +1 -0
- package/dist/agent/turn/tool-execution/run-setup.d.ts +29 -0
- package/dist/agent/turn/tool-execution/run-setup.js +64 -0
- package/dist/agent/turn/tool-execution/run-setup.js.map +1 -0
- package/dist/agent/turn/tool-execution/single-tool.d.ts +4 -0
- package/dist/agent/turn/tool-execution/single-tool.js +613 -0
- package/dist/agent/turn/tool-execution/single-tool.js.map +1 -0
- package/dist/agent/turn/tool-execution/state.d.ts +19 -0
- package/dist/agent/turn/tool-execution/state.js +13 -0
- package/dist/agent/turn/tool-execution/state.js.map +1 -0
- package/dist/agent/turn/tool-execution/supervision.d.ts +20 -0
- package/dist/agent/turn/tool-execution/supervision.js +44 -0
- package/dist/agent/turn/tool-execution/supervision.js.map +1 -0
- package/dist/agent/turn/tool-result-recorder.d.ts +26 -0
- package/dist/agent/turn/tool-result-recorder.js +54 -0
- package/dist/agent/turn/tool-result-recorder.js.map +1 -0
- package/dist/agent/turn/tool-routing.d.ts +23 -0
- package/dist/agent/turn/tool-routing.js +58 -0
- package/dist/agent/turn/tool-routing.js.map +1 -0
- package/dist/agent/turn/tool-watchdog.d.ts +22 -0
- package/dist/agent/turn/tool-watchdog.js +135 -0
- package/dist/agent/turn/tool-watchdog.js.map +1 -0
- package/dist/agent/turn/turn-counters.d.ts +9 -0
- package/dist/agent/turn/turn-counters.js +13 -0
- package/dist/agent/turn/turn-counters.js.map +1 -0
- package/dist/agent/turn/workspace-setup.d.ts +29 -0
- package/dist/agent/turn/workspace-setup.js +74 -0
- package/dist/agent/turn/workspace-setup.js.map +1 -0
- package/dist/agent/workspace-orient.d.ts +0 -45
- package/dist/agent/workspace-orient.js +3 -69
- package/dist/agent/workspace-orient.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.d.ts +0 -1
- package/dist/app/adapters/agent-event-adapter.js +1 -4
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-interactive-sessions-adapter.d.ts +0 -1
- package/dist/app/adapters/current-interactive-sessions-adapter.js +0 -1
- package/dist/app/adapters/current-interactive-sessions-adapter.js.map +1 -1
- package/dist/app/adapters/current-jobs-adapter.d.ts +0 -1
- package/dist/app/adapters/current-jobs-adapter.js +0 -1
- package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
- package/dist/app/adapters/current-store-adapter.d.ts +0 -1
- package/dist/app/adapters/current-store-adapter.js +0 -1
- package/dist/app/adapters/current-store-adapter.js.map +1 -1
- package/dist/app/adapters/quiet-meta-tools.d.ts +0 -11
- package/dist/app/adapters/quiet-meta-tools.js +0 -11
- package/dist/app/adapters/quiet-meta-tools.js.map +1 -1
- package/dist/app/commands/catalog.d.ts +0 -8
- package/dist/app/commands/catalog.js +10 -32
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/commands/command.d.ts +0 -4
- package/dist/app/commands/command.js.map +1 -1
- package/dist/app/commands/registry.d.ts +0 -3
- package/dist/app/commands/registry.js +1 -7
- package/dist/app/commands/registry.js.map +1 -1
- package/dist/app/confirm-prompt-text.d.ts +0 -6
- package/dist/app/confirm-prompt-text.js +0 -6
- package/dist/app/confirm-prompt-text.js.map +1 -1
- package/dist/app/controllers/cancel-all-result.d.ts +0 -5
- package/dist/app/controllers/cancel-all-result.js +0 -5
- package/dist/app/controllers/cancel-all-result.js.map +1 -1
- package/dist/app/controllers/plan-controller.d.ts +0 -6
- package/dist/app/controllers/plan-controller.js +0 -11
- package/dist/app/controllers/plan-controller.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +0 -9
- package/dist/app/controllers/session-compact-helper.js +14 -21
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +0 -11
- package/dist/app/controllers/session-context-usage.js +22 -30
- package/dist/app/controllers/session-context-usage.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +1 -38
- package/dist/app/controllers/session-controller.js +11 -49
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-naming.d.ts +0 -4
- package/dist/app/controllers/session-naming.js +0 -4
- package/dist/app/controllers/session-naming.js.map +1 -1
- package/dist/app/controllers/session-persistence.d.ts +0 -6
- package/dist/app/controllers/session-persistence.js +0 -10
- package/dist/app/controllers/session-persistence.js.map +1 -1
- package/dist/app/controllers/session-responder.js +0 -4
- package/dist/app/controllers/session-responder.js.map +1 -1
- package/dist/app/controllers/session-turn-request.d.ts +0 -1
- package/dist/app/controllers/session-turn-request.js +0 -1
- package/dist/app/controllers/session-turn-request.js.map +1 -1
- package/dist/app/controllers/session-usage-ledger.d.ts +6 -1
- package/dist/app/controllers/session-usage-ledger.js +43 -3
- package/dist/app/controllers/session-usage-ledger.js.map +1 -1
- package/dist/app/controllers/turn-controller.js +2 -6
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +1 -11
- package/dist/app/events/app-event.js +0 -1
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/events/event-buffer.d.ts +0 -6
- package/dist/app/events/event-buffer.js +0 -6
- package/dist/app/events/event-buffer.js.map +1 -1
- package/dist/app/events/sequencer.d.ts +0 -2
- package/dist/app/events/sequencer.js +0 -1
- package/dist/app/events/sequencer.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +0 -19
- package/dist/app/ports/interactive-sessions-port.d.ts +0 -13
- package/dist/app/ports/interactive-sessions-port.js +0 -7
- package/dist/app/ports/interactive-sessions-port.js.map +1 -1
- package/dist/app/ports/persistence-port.d.ts +0 -14
- package/dist/app/ports/updates-port.d.ts +0 -5
- package/dist/classic/app/ClassicApp.js +0 -2
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/action-handlers.js +0 -4
- package/dist/classic/app/action-handlers.js.map +1 -1
- package/dist/classic/app/git-branch.js +0 -1
- package/dist/classic/app/git-branch.js.map +1 -1
- package/dist/classic/app/use-feed.d.ts +0 -7
- package/dist/classic/app/use-feed.js +0 -5
- package/dist/classic/app/use-feed.js.map +1 -1
- package/dist/classic/app/wiring-interactions.js +0 -2
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/blocks/assistant-lines.d.ts +0 -1
- package/dist/classic/blocks/assistant-lines.js +0 -1
- package/dist/classic/blocks/assistant-lines.js.map +1 -1
- package/dist/classic/blocks/batch-lines.d.ts +0 -1
- package/dist/classic/blocks/batch-lines.js +0 -1
- package/dist/classic/blocks/batch-lines.js.map +1 -1
- package/dist/classic/blocks/block-context.d.ts +0 -7
- package/dist/classic/blocks/block-context.js +0 -1
- package/dist/classic/blocks/block-context.js.map +1 -1
- package/dist/classic/blocks/compacted-lines.d.ts +0 -1
- package/dist/classic/blocks/compacted-lines.js +0 -1
- package/dist/classic/blocks/compacted-lines.js.map +1 -1
- package/dist/classic/blocks/diff-lines.d.ts +0 -3
- package/dist/classic/blocks/diff-lines.js +0 -4
- package/dist/classic/blocks/diff-lines.js.map +1 -1
- package/dist/classic/blocks/intro-lines.d.ts +0 -5
- package/dist/classic/blocks/intro-lines.js +0 -5
- package/dist/classic/blocks/intro-lines.js.map +1 -1
- package/dist/classic/blocks/notice-lines.d.ts +0 -4
- package/dist/classic/blocks/notice-lines.js +0 -6
- package/dist/classic/blocks/notice-lines.js.map +1 -1
- package/dist/classic/blocks/thinking-lines.d.ts +0 -1
- package/dist/classic/blocks/thinking-lines.js +0 -1
- package/dist/classic/blocks/thinking-lines.js.map +1 -1
- package/dist/classic/blocks/tool-lines.d.ts +0 -7
- package/dist/classic/blocks/tool-lines.js +0 -10
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/blocks/user-lines.d.ts +0 -1
- package/dist/classic/blocks/user-lines.js +0 -1
- package/dist/classic/blocks/user-lines.js.map +1 -1
- package/dist/classic/bootstrap/osc52-renderer.js +0 -1
- package/dist/classic/bootstrap/osc52-renderer.js.map +1 -1
- package/dist/classic/chrome/Chrome.d.ts +0 -1
- package/dist/classic/chrome/Chrome.js.map +1 -1
- package/dist/classic/chrome/Composer.d.ts +0 -5
- package/dist/classic/chrome/Composer.js +0 -5
- package/dist/classic/chrome/Composer.js.map +1 -1
- package/dist/classic/chrome/composer-controller.js +0 -4
- package/dist/classic/chrome/composer-controller.js.map +1 -1
- package/dist/classic/chrome/composer-frame.d.ts +0 -3
- package/dist/classic/chrome/composer-frame.js +0 -3
- package/dist/classic/chrome/composer-frame.js.map +1 -1
- package/dist/classic/chrome/directory-row.d.ts +0 -7
- package/dist/classic/chrome/directory-row.js +0 -7
- package/dist/classic/chrome/directory-row.js.map +1 -1
- package/dist/classic/chrome/row-budget.d.ts +0 -2
- package/dist/classic/chrome/row-budget.js +0 -8
- package/dist/classic/chrome/row-budget.js.map +1 -1
- package/dist/classic/chrome/status-rows.d.ts +0 -12
- package/dist/classic/chrome/status-rows.js +0 -16
- package/dist/classic/chrome/status-rows.js.map +1 -1
- package/dist/classic/chrome/toast-rows.d.ts +0 -4
- package/dist/classic/chrome/toast-rows.js +0 -9
- package/dist/classic/chrome/toast-rows.js.map +1 -1
- package/dist/classic/feed/Feed.d.ts +0 -5
- package/dist/classic/feed/Feed.js +0 -4
- package/dist/classic/feed/Feed.js.map +1 -1
- package/dist/classic/feed/FeedStatic.d.ts +0 -8
- package/dist/classic/feed/FeedStatic.js +0 -8
- package/dist/classic/feed/FeedStatic.js.map +1 -1
- package/dist/classic/feed/ScrollbarGutter.js +0 -1
- package/dist/classic/feed/ScrollbarGutter.js.map +1 -1
- package/dist/classic/feed/block-height.d.ts +0 -7
- package/dist/classic/feed/block-height.js +0 -7
- package/dist/classic/feed/block-height.js.map +1 -1
- package/dist/classic/feed/commit-ledger.d.ts +0 -12
- package/dist/classic/feed/commit-ledger.js +0 -10
- package/dist/classic/feed/commit-ledger.js.map +1 -1
- package/dist/classic/feed/feed-blocks.d.ts +0 -8
- package/dist/classic/feed/feed-blocks.js +0 -6
- package/dist/classic/feed/feed-blocks.js.map +1 -1
- package/dist/classic/feed/live-tail-policy.d.ts +0 -13
- package/dist/classic/feed/live-tail-policy.js +0 -11
- package/dist/classic/feed/live-tail-policy.js.map +1 -1
- package/dist/classic/feed/scrollbar-rows.d.ts +0 -1
- package/dist/classic/feed/scrollbar-rows.js +0 -1
- package/dist/classic/feed/scrollbar-rows.js.map +1 -1
- package/dist/classic/feed/transcript-window.d.ts +0 -10
- package/dist/classic/feed/transcript-window.js +0 -6
- package/dist/classic/feed/transcript-window.js.map +1 -1
- package/dist/classic/input/input-router.js +0 -2
- package/dist/classic/input/input-router.js.map +1 -1
- package/dist/classic/panels/completion-rows.js +2 -1
- package/dist/classic/panels/completion-rows.js.map +1 -1
- package/dist/classic/panels/keys-panel.d.ts +0 -1
- package/dist/classic/panels/keys-panel.js +0 -1
- package/dist/classic/panels/keys-panel.js.map +1 -1
- package/dist/classic/panels/pager-panel.d.ts +0 -5
- package/dist/classic/panels/pager-panel.js +0 -11
- package/dist/classic/panels/pager-panel.js.map +1 -1
- package/dist/classic/panels/panel-controller.d.ts +0 -2
- package/dist/classic/panels/panel-controller.js +0 -2
- package/dist/classic/panels/panel-controller.js.map +1 -1
- package/dist/classic/panels/panel-frame.js +0 -2
- package/dist/classic/panels/panel-frame.js.map +1 -1
- package/dist/classic/panels/panel-wheel.d.ts +0 -5
- package/dist/classic/panels/panel-wheel.js +0 -5
- package/dist/classic/panels/panel-wheel.js.map +1 -1
- package/dist/classic/panels/secret-panel.d.ts +0 -1
- package/dist/classic/panels/secret-panel.js +0 -1
- package/dist/classic/panels/secret-panel.js.map +1 -1
- package/dist/classic/panels/text-editor-panel.d.ts +0 -1
- package/dist/classic/panels/text-editor-panel.js +0 -1
- package/dist/classic/panels/text-editor-panel.js.map +1 -1
- package/dist/classic/render/ansi-text.d.ts +0 -19
- package/dist/classic/render/ansi-text.js +0 -19
- package/dist/classic/render/ansi-text.js.map +1 -1
- package/dist/classic/render/glyphs.d.ts +0 -4
- package/dist/classic/render/glyphs.js +0 -4
- package/dist/classic/render/glyphs.js.map +1 -1
- package/dist/classic/render/ink-theme.d.ts +0 -10
- package/dist/classic/render/ink-theme.js +0 -6
- package/dist/classic/render/ink-theme.js.map +1 -1
- package/dist/classic/render/measure.d.ts +0 -12
- package/dist/classic/render/measure.js +0 -12
- package/dist/classic/render/measure.js.map +1 -1
- package/dist/classic/render/shell-width.d.ts +0 -8
- package/dist/classic/render/shell-width.js +0 -8
- package/dist/classic/render/shell-width.js.map +1 -1
- package/dist/classic/render/wrap.d.ts +0 -11
- package/dist/classic/render/wrap.js +0 -8
- package/dist/classic/render/wrap.js.map +1 -1
- package/dist/commands/doctor.js +0 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/providers.d.ts +0 -1
- package/dist/commands/providers.js +0 -22
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/search-providers.d.ts +0 -1
- package/dist/commands/search-providers.js +0 -4
- package/dist/commands/search-providers.js.map +1 -1
- package/dist/commands/update/installers.d.ts +61 -0
- package/dist/commands/update/installers.js +505 -0
- package/dist/commands/update/installers.js.map +1 -0
- package/dist/commands/update-install.d.ts +4 -65
- package/dist/commands/update-install.js +6 -506
- package/dist/commands/update-install.js.map +1 -1
- package/dist/commands/update.d.ts +0 -6
- package/dist/commands/update.js +1 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +3 -10
- package/dist/index.js.map +1 -1
- package/dist/interactive-session/artifact-writer.d.ts +0 -1
- package/dist/interactive-session/artifact-writer.js +0 -1
- package/dist/interactive-session/artifact-writer.js.map +1 -1
- package/dist/interactive-session/cleanup.d.ts +0 -10
- package/dist/interactive-session/cleanup.js +0 -13
- package/dist/interactive-session/cleanup.js.map +1 -1
- package/dist/interactive-session/config.d.ts +0 -16
- package/dist/interactive-session/config.js +0 -13
- package/dist/interactive-session/config.js.map +1 -1
- package/dist/interactive-session/manager.d.ts +0 -27
- package/dist/interactive-session/manager.js +0 -42
- package/dist/interactive-session/manager.js.map +1 -1
- package/dist/interactive-session/output-store.d.ts +0 -6
- package/dist/interactive-session/output-store.js +0 -5
- package/dist/interactive-session/output-store.js.map +1 -1
- package/dist/interactive-session/output-view.d.ts +0 -4
- package/dist/interactive-session/output-view.js +0 -12
- package/dist/interactive-session/output-view.js.map +1 -1
- package/dist/interactive-session/recovery-journal.d.ts +0 -7
- package/dist/interactive-session/recovery-journal.js +0 -7
- package/dist/interactive-session/recovery-journal.js.map +1 -1
- package/dist/interactive-session/registry.d.ts +0 -25
- package/dist/interactive-session/registry.js +0 -27
- package/dist/interactive-session/registry.js.map +1 -1
- package/dist/interactive-session/runtime.d.ts +0 -30
- package/dist/interactive-session/runtime.js +0 -23
- package/dist/interactive-session/runtime.js.map +1 -1
- package/dist/interactive-session/session-runtime.d.ts +0 -9
- package/dist/interactive-session/session-runtime.js +0 -10
- package/dist/interactive-session/session-runtime.js.map +1 -1
- package/dist/interactive-session/streaming-redactor.d.ts +0 -14
- package/dist/interactive-session/streaming-redactor.js +0 -18
- package/dist/interactive-session/streaming-redactor.js.map +1 -1
- package/dist/interactive-session/telemetry.d.ts +0 -8
- package/dist/interactive-session/telemetry.js +0 -7
- package/dist/interactive-session/telemetry.js.map +1 -1
- package/dist/interactive-session/transport-factory.d.ts +0 -5
- package/dist/interactive-session/transport-factory.js +0 -5
- package/dist/interactive-session/transport-factory.js.map +1 -1
- package/dist/interactive-session/transport-pipe.d.ts +0 -7
- package/dist/interactive-session/transport-pipe.js +0 -14
- package/dist/interactive-session/transport-pipe.js.map +1 -1
- package/dist/interactive-session/transport.d.ts +0 -26
- package/dist/interactive-session/transport.js +0 -20
- package/dist/interactive-session/transport.js.map +1 -1
- package/dist/interactive-session/types.d.ts +0 -19
- package/dist/interactive-session/types.js +0 -22
- package/dist/interactive-session/types.js.map +1 -1
- package/dist/llm/adapters/anthropic-stream-events.d.ts +38 -0
- package/dist/llm/adapters/anthropic-stream-events.js +144 -0
- package/dist/llm/adapters/anthropic-stream-events.js.map +1 -0
- package/dist/llm/adapters/anthropic-tools.d.ts +5 -55
- package/dist/llm/adapters/anthropic-tools.js +6 -208
- package/dist/llm/adapters/anthropic-tools.js.map +1 -1
- package/dist/llm/adapters/anthropic-wire-blocks.d.ts +9 -0
- package/dist/llm/adapters/anthropic-wire-blocks.js +59 -0
- package/dist/llm/adapters/anthropic-wire-blocks.js.map +1 -0
- package/dist/llm/adapters/gemini-tools.d.ts +0 -6
- package/dist/llm/adapters/gemini-tools.js +0 -24
- package/dist/llm/adapters/gemini-tools.js.map +1 -1
- package/dist/llm/adapters/ollama-tools.js +0 -5
- package/dist/llm/adapters/ollama-tools.js.map +1 -1
- package/dist/llm/adapters/openai-tools.d.ts +0 -4
- package/dist/llm/adapters/openai-tools.js +2 -11
- package/dist/llm/adapters/openai-tools.js.map +1 -1
- package/dist/llm/agentrouter.d.ts +0 -9
- package/dist/llm/agentrouter.js +10 -60
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.d.ts +0 -7
- package/dist/llm/anthropic.js +2 -30
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/artifacts/legacy-blocks.d.ts +3 -0
- package/dist/llm/artifacts/legacy-blocks.js +109 -0
- package/dist/llm/artifacts/legacy-blocks.js.map +1 -0
- package/dist/llm/artifacts/replay-selection.d.ts +9 -0
- package/dist/llm/artifacts/replay-selection.js +48 -0
- package/dist/llm/artifacts/replay-selection.js.map +1 -0
- package/dist/llm/aws-mantle.js +2 -4
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +2 -0
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/cache-affinity.d.ts +1 -0
- package/dist/llm/cache-affinity.js +6 -0
- package/dist/llm/cache-affinity.js.map +1 -1
- package/dist/llm/capabilities.d.ts +7 -36
- package/dist/llm/capabilities.js +11 -502
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/capability/state.d.ts +25 -0
- package/dist/llm/capability/state.js +125 -0
- package/dist/llm/capability/state.js.map +1 -0
- package/dist/llm/capability/tool-dialect.d.ts +3 -0
- package/dist/llm/capability/tool-dialect.js +78 -0
- package/dist/llm/capability/tool-dialect.js.map +1 -0
- package/dist/llm/capability/vision-patterns.d.ts +4 -0
- package/dist/llm/capability/vision-patterns.js +188 -0
- package/dist/llm/capability/vision-patterns.js.map +1 -0
- package/dist/llm/capability/vision-registry.d.ts +20 -0
- package/dist/llm/capability/vision-registry.js +112 -0
- package/dist/llm/capability/vision-registry.js.map +1 -0
- package/dist/llm/context-snapshot.d.ts +0 -18
- package/dist/llm/context-snapshot.js +1 -8
- package/dist/llm/context-snapshot.js.map +1 -1
- package/dist/llm/context-windows.d.ts +0 -6
- package/dist/llm/context-windows.js +0 -30
- package/dist/llm/context-windows.js.map +1 -1
- package/dist/llm/custom-provider-profile.d.ts +4 -23
- package/dist/llm/custom-provider-profile.js +4 -515
- package/dist/llm/custom-provider-profile.js.map +1 -1
- package/dist/llm/custom-providers.d.ts +0 -23
- package/dist/llm/custom-providers.js +2 -27
- package/dist/llm/custom-providers.js.map +1 -1
- package/dist/llm/effort-fallback.d.ts +0 -38
- package/dist/llm/effort-fallback.js +0 -38
- package/dist/llm/effort-fallback.js.map +1 -1
- package/dist/llm/fireworks.js +2 -0
- package/dist/llm/fireworks.js.map +1 -1
- package/dist/llm/free.js +7 -2
- package/dist/llm/free.js.map +1 -1
- package/dist/llm/gemini.d.ts +0 -1
- package/dist/llm/gemini.js +2 -19
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/hetzner.js +2 -0
- package/dist/llm/hetzner.js.map +1 -1
- package/dist/llm/http.d.ts +24 -251
- package/dist/llm/http.js +19 -2021
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/key-rotation.d.ts +0 -32
- package/dist/llm/key-rotation.js +6 -37
- package/dist/llm/key-rotation.js.map +1 -1
- package/dist/llm/lightning.d.ts +0 -8
- package/dist/llm/lightning.js +3 -18
- package/dist/llm/lightning.js.map +1 -1
- package/dist/llm/merge-gateway.d.ts +0 -9
- package/dist/llm/merge-gateway.js +2 -44
- package/dist/llm/merge-gateway.js.map +1 -1
- package/dist/llm/modal.js +3 -15
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-families.d.ts +0 -5
- package/dist/llm/model-families.js +0 -5
- package/dist/llm/model-families.js.map +1 -1
- package/dist/llm/model-layers/model-patterns.d.ts +7 -0
- package/dist/llm/model-layers/model-patterns.js +30 -0
- package/dist/llm/model-layers/model-patterns.js.map +1 -0
- package/dist/llm/model-layers/model-rules.d.ts +8 -0
- package/dist/llm/model-layers/model-rules.js +221 -0
- package/dist/llm/model-layers/model-rules.js.map +1 -0
- package/dist/llm/model-layers/nvidia-layer.d.ts +2 -0
- package/dist/llm/model-layers/nvidia-layer.js +135 -0
- package/dist/llm/model-layers/nvidia-layer.js.map +1 -0
- package/dist/llm/nvidia.js +3 -11
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +2 -11
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +2 -0
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +3 -1
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/operation-ledger.d.ts +0 -6
- package/dist/llm/operation-ledger.js +0 -6
- package/dist/llm/operation-ledger.js.map +1 -1
- package/dist/llm/operation-usage.d.ts +2 -0
- package/dist/llm/operation-usage.js +27 -0
- package/dist/llm/operation-usage.js.map +1 -1
- package/dist/llm/orcarouter.d.ts +0 -4
- package/dist/llm/orcarouter.js +3 -26
- package/dist/llm/orcarouter.js.map +1 -1
- package/dist/llm/profile/control-rejections.d.ts +14 -0
- package/dist/llm/profile/control-rejections.js +75 -0
- package/dist/llm/profile/control-rejections.js.map +1 -0
- package/dist/llm/profile/custom-layer.d.ts +3 -0
- package/dist/llm/profile/custom-layer.js +83 -0
- package/dist/llm/profile/custom-layer.js.map +1 -0
- package/dist/llm/profile/layer-merge.d.ts +3 -0
- package/dist/llm/profile/layer-merge.js +185 -0
- package/dist/llm/profile/layer-merge.js.map +1 -0
- package/dist/llm/profile/spec-validation.d.ts +5 -0
- package/dist/llm/profile/spec-validation.js +289 -0
- package/dist/llm/profile/spec-validation.js.map +1 -0
- package/dist/llm/profile/spec-vocabulary.d.ts +21 -0
- package/dist/llm/profile/spec-vocabulary.js +142 -0
- package/dist/llm/profile/spec-vocabulary.js.map +1 -0
- package/dist/llm/provider-identity.d.ts +5 -0
- package/dist/llm/provider-identity.js +130 -0
- package/dist/llm/provider-identity.js.map +1 -0
- package/dist/llm/provider-info-text.d.ts +1 -0
- package/dist/llm/provider-info-text.js +587 -0
- package/dist/llm/provider-info-text.js.map +1 -0
- package/dist/llm/provider-model-layers.d.ts +2 -0
- package/dist/llm/provider-model-layers.js +6 -380
- package/dist/llm/provider-model-layers.js.map +1 -1
- package/dist/llm/provider-profile-layers.js +0 -2
- package/dist/llm/provider-profile-layers.js.map +1 -1
- package/dist/llm/provider-profile.d.ts +10 -12
- package/dist/llm/provider-profile.js +6 -265
- package/dist/llm/provider-profile.js.map +1 -1
- package/dist/llm/provider.d.ts +4 -16
- package/dist/llm/provider.js +6 -760
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/qwen-cloud.js +2 -4
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/reasoning-artifacts.d.ts +5 -50
- package/dist/llm/reasoning-artifacts.js +11 -198
- package/dist/llm/reasoning-artifacts.js.map +1 -1
- package/dist/llm/reasoning-capability.js +0 -16
- package/dist/llm/reasoning-capability.js.map +1 -1
- package/dist/llm/request-fingerprint.d.ts +0 -4
- package/dist/llm/request-fingerprint.js +0 -4
- package/dist/llm/request-fingerprint.js.map +1 -1
- package/dist/llm/request-plan.d.ts +0 -14
- package/dist/llm/request-plan.js +0 -23
- package/dist/llm/request-plan.js.map +1 -1
- package/dist/llm/responses/item-events.d.ts +3 -0
- package/dist/llm/responses/item-events.js +93 -0
- package/dist/llm/responses/item-events.js.map +1 -0
- package/dist/llm/responses-complete.d.ts +1 -1
- package/dist/llm/responses-complete.js +2 -1
- package/dist/llm/responses-complete.js.map +1 -1
- package/dist/llm/responses-config.js.map +1 -1
- package/dist/llm/responses-http.d.ts +1 -0
- package/dist/llm/responses-http.js +3 -1
- package/dist/llm/responses-http.js.map +1 -1
- package/dist/llm/responses-parse.d.ts +3 -0
- package/dist/llm/responses-parse.js +19 -6
- package/dist/llm/responses-parse.js.map +1 -1
- package/dist/llm/responses-request.d.ts +2 -1
- package/dist/llm/responses-request.js +7 -2
- package/dist/llm/responses-request.js.map +1 -1
- package/dist/llm/responses-shape.d.ts +5 -0
- package/dist/llm/responses-shape.js +16 -0
- package/dist/llm/responses-shape.js.map +1 -0
- package/dist/llm/responses-stream-accumulator.d.ts +1 -1
- package/dist/llm/responses-stream-accumulator.js +8 -9
- package/dist/llm/responses-stream-accumulator.js.map +1 -1
- package/dist/llm/responses-stream-events.d.ts +2 -0
- package/dist/llm/responses-stream-events.js +34 -102
- package/dist/llm/responses-stream-events.js.map +1 -1
- package/dist/llm/responses-stream-watchdog.js.map +1 -1
- package/dist/llm/responses-stream.js +9 -4
- package/dist/llm/responses-stream.js.map +1 -1
- package/dist/llm/router.d.ts +7 -44
- package/dist/llm/router.js +24 -1145
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/routing/attempt-complete.d.ts +3 -0
- package/dist/llm/routing/attempt-complete.js +120 -0
- package/dist/llm/routing/attempt-complete.js.map +1 -0
- package/dist/llm/routing/attempt-request.d.ts +21 -0
- package/dist/llm/routing/attempt-request.js +99 -0
- package/dist/llm/routing/attempt-request.js.map +1 -0
- package/dist/llm/routing/attempt-stream.d.ts +3 -0
- package/dist/llm/routing/attempt-stream.js +256 -0
- package/dist/llm/routing/attempt-stream.js.map +1 -0
- package/dist/llm/routing/error-classification.d.ts +15 -0
- package/dist/llm/routing/error-classification.js +151 -0
- package/dist/llm/routing/error-classification.js.map +1 -0
- package/dist/llm/routing/failure-report.d.ts +22 -0
- package/dist/llm/routing/failure-report.js +128 -0
- package/dist/llm/routing/failure-report.js.map +1 -0
- package/dist/llm/routing/key-rotation.d.ts +21 -0
- package/dist/llm/routing/key-rotation.js +207 -0
- package/dist/llm/routing/key-rotation.js.map +1 -0
- package/dist/llm/routing/provider-selection.d.ts +8 -0
- package/dist/llm/routing/provider-selection.js +119 -0
- package/dist/llm/routing/provider-selection.js.map +1 -0
- package/dist/llm/sampling.d.ts +0 -15
- package/dist/llm/sampling.js +0 -9
- package/dist/llm/sampling.js.map +1 -1
- package/dist/llm/session-affinity.d.ts +2 -0
- package/dist/llm/session-affinity.js +9 -0
- package/dist/llm/session-affinity.js.map +1 -0
- package/dist/llm/stream-progress.d.ts +0 -1
- package/dist/llm/stream-progress.js +0 -15
- package/dist/llm/stream-progress.js.map +1 -1
- package/dist/llm/system-messages.d.ts +0 -22
- package/dist/llm/system-messages.js +6 -22
- package/dist/llm/system-messages.js.map +1 -1
- package/dist/llm/token-estimate-calibration.d.ts +0 -6
- package/dist/llm/token-estimate-calibration.js +0 -26
- package/dist/llm/token-estimate-calibration.js.map +1 -1
- package/dist/llm/token-usage.d.ts +8 -69
- package/dist/llm/token-usage.js +10 -257
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tokenrouter.d.ts +0 -12
- package/dist/llm/tokenrouter.js +3 -14
- package/dist/llm/tokenrouter.js.map +1 -1
- package/dist/llm/tool-protocol.d.ts +3 -22
- package/dist/llm/tool-protocol.js +20 -155
- package/dist/llm/tool-protocol.js.map +1 -1
- package/dist/llm/tool-wire/argument-repair.d.ts +4 -0
- package/dist/llm/tool-wire/argument-repair.js +174 -0
- package/dist/llm/tool-wire/argument-repair.js.map +1 -0
- package/dist/llm/transport-events.d.ts +12 -0
- package/dist/llm/transport-events.js +29 -0
- package/dist/llm/transport-events.js.map +1 -0
- package/dist/llm/usage/provider-parsers.d.ts +11 -0
- package/dist/llm/usage/provider-parsers.js +220 -0
- package/dist/llm/usage/provider-parsers.js.map +1 -0
- package/dist/llm/wire/abort-race.d.ts +1 -0
- package/dist/llm/wire/abort-race.js +34 -0
- package/dist/llm/wire/abort-race.js.map +1 -0
- package/dist/llm/wire/capability-errors.d.ts +11 -0
- package/dist/llm/wire/capability-errors.js +92 -0
- package/dist/llm/wire/capability-errors.js.map +1 -0
- package/dist/llm/wire/chat-body.d.ts +40 -0
- package/dist/llm/wire/chat-body.js +172 -0
- package/dist/llm/wire/chat-body.js.map +1 -0
- package/dist/llm/wire/model-catalog.d.ts +4 -0
- package/dist/llm/wire/model-catalog.js +34 -0
- package/dist/llm/wire/model-catalog.js.map +1 -0
- package/dist/llm/wire/openai-complete.d.ts +27 -0
- package/dist/llm/wire/openai-complete.js +138 -0
- package/dist/llm/wire/openai-complete.js.map +1 -0
- package/dist/llm/wire/openai-stream.d.ts +36 -0
- package/dist/llm/wire/openai-stream.js +665 -0
- package/dist/llm/wire/openai-stream.js.map +1 -0
- package/dist/llm/wire/reasoning-artifacts.d.ts +45 -0
- package/dist/llm/wire/reasoning-artifacts.js +140 -0
- package/dist/llm/wire/reasoning-artifacts.js.map +1 -0
- package/dist/llm/wire/reasoning-payload.d.ts +9 -0
- package/dist/llm/wire/reasoning-payload.js +212 -0
- package/dist/llm/wire/reasoning-payload.js.map +1 -0
- package/dist/llm/wire/response-errors.d.ts +5 -0
- package/dist/llm/wire/response-errors.js +182 -0
- package/dist/llm/wire/response-errors.js.map +1 -0
- package/dist/llm/wire/responses-first.d.ts +30 -0
- package/dist/llm/wire/responses-first.js +335 -0
- package/dist/llm/wire/responses-first.js.map +1 -0
- package/dist/llm/wire/stream-framing.d.ts +38 -0
- package/dist/llm/wire/stream-framing.js +217 -0
- package/dist/llm/wire/stream-framing.js.map +1 -0
- package/dist/mcp/runtime.d.ts +0 -15
- package/dist/mcp/runtime.js +0 -8
- package/dist/mcp/runtime.js.map +1 -1
- package/dist/modes/ask.d.ts +0 -3
- package/dist/modes/ask.js +0 -22
- package/dist/modes/ask.js.map +1 -1
- package/dist/noninteractive/blocks/tool-blocks.d.ts +35 -0
- package/dist/noninteractive/blocks/tool-blocks.js +206 -0
- package/dist/noninteractive/blocks/tool-blocks.js.map +1 -0
- package/dist/noninteractive/readline-prompts.d.ts +0 -21
- package/dist/noninteractive/readline-prompts.js +0 -31
- package/dist/noninteractive/readline-prompts.js.map +1 -1
- package/dist/noninteractive/stdio-confirm-port.d.ts +0 -9
- package/dist/noninteractive/stdio-confirm-port.js +0 -9
- package/dist/noninteractive/stdio-confirm-port.js.map +1 -1
- package/dist/noninteractive/stream-blocks.d.ts +3 -49
- package/dist/noninteractive/stream-blocks.js +14 -234
- package/dist/noninteractive/stream-blocks.js.map +1 -1
- package/dist/noninteractive/stream-renderer.d.ts +0 -10
- package/dist/noninteractive/stream-renderer.js +0 -10
- package/dist/noninteractive/stream-renderer.js.map +1 -1
- package/dist/noninteractive/stream-spinner.d.ts +0 -8
- package/dist/noninteractive/stream-spinner.js +0 -8
- package/dist/noninteractive/stream-spinner.js.map +1 -1
- package/dist/os/bun-runtime.d.ts +0 -15
- package/dist/os/bun-runtime.js +0 -33
- package/dist/os/bun-runtime.js.map +1 -1
- package/dist/os/command.d.ts +0 -6
- package/dist/os/command.js +0 -13
- package/dist/os/command.js.map +1 -1
- package/dist/os/cwd.d.ts +0 -5
- package/dist/os/cwd.js +0 -6
- package/dist/os/cwd.js.map +1 -1
- package/dist/os/permissions.d.ts +0 -11
- package/dist/os/permissions.js +0 -13
- package/dist/os/permissions.js.map +1 -1
- package/dist/os/process-identity.d.ts +0 -22
- package/dist/os/process-identity.js +0 -23
- package/dist/os/process-identity.js.map +1 -1
- package/dist/os/process-tree.d.ts +0 -7
- package/dist/os/process-tree.js +0 -8
- package/dist/os/process-tree.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.d.ts +0 -36
- package/dist/prompts/index.js +2 -47
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +2 -2
- package/dist/safety/classifier.d.ts +5 -26
- package/dist/safety/classifier.js +5 -573
- package/dist/safety/classifier.js.map +1 -1
- package/dist/safety/engagement-policy.d.ts +0 -13
- package/dist/safety/engagement-policy.js +0 -32
- package/dist/safety/engagement-policy.js.map +1 -1
- package/dist/safety/patterns.d.ts +0 -108
- package/dist/safety/patterns.js +0 -159
- package/dist/safety/patterns.js.map +1 -1
- package/dist/safety/shell-classification.d.ts +19 -0
- package/dist/safety/shell-classification.js +215 -0
- package/dist/safety/shell-classification.js.map +1 -0
- package/dist/safety/tool-classification.d.ts +4 -0
- package/dist/safety/tool-classification.js +260 -0
- package/dist/safety/tool-classification.js.map +1 -0
- package/dist/store/config/endpoints.d.ts +85 -0
- package/dist/store/config/endpoints.js +298 -0
- package/dist/store/config/endpoints.js.map +1 -0
- package/dist/store/config/settings.d.ts +11 -0
- package/dist/store/config/settings.js +52 -0
- package/dist/store/config/settings.js.map +1 -0
- package/dist/store/config.d.ts +6 -169
- package/dist/store/config.js +4 -411
- package/dist/store/config.js.map +1 -1
- package/dist/store/engagement.d.ts +0 -1
- package/dist/store/engagement.js +0 -3
- package/dist/store/engagement.js.map +1 -1
- package/dist/store/history/jsonl-backend.d.ts +7 -0
- package/dist/store/history/jsonl-backend.js +151 -0
- package/dist/store/history/jsonl-backend.js.map +1 -0
- package/dist/store/history/jsonl-lock.d.ts +2 -0
- package/dist/store/history/jsonl-lock.js +100 -0
- package/dist/store/history/jsonl-lock.js.map +1 -0
- package/dist/store/history/lifecycle.d.ts +14 -0
- package/dist/store/history/lifecycle.js +316 -0
- package/dist/store/history/lifecycle.js.map +1 -0
- package/dist/store/history/recovery.d.ts +62 -0
- package/dist/store/history/recovery.js +253 -0
- package/dist/store/history/recovery.js.map +1 -0
- package/dist/store/history/session-queries.d.ts +9 -0
- package/dist/store/history/session-queries.js +142 -0
- package/dist/store/history/session-queries.js.map +1 -0
- package/dist/store/history/sqlite-backend.d.ts +25 -0
- package/dist/store/history/sqlite-backend.js +209 -0
- package/dist/store/history/sqlite-backend.js.map +1 -0
- package/dist/store/history-index.d.ts +0 -5
- package/dist/store/history-index.js +0 -10
- package/dist/store/history-index.js.map +1 -1
- package/dist/store/history.d.ts +12 -97
- package/dist/store/history.js +12 -1214
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys/search-providers.d.ts +33 -0
- package/dist/store/keys/search-providers.js +211 -0
- package/dist/store/keys/search-providers.js.map +1 -0
- package/dist/store/keys/secret-store.d.ts +40 -0
- package/dist/store/keys/secret-store.js +249 -0
- package/dist/store/keys/secret-store.js.map +1 -0
- package/dist/store/keys.d.ts +8 -95
- package/dist/store/keys.js +7 -537
- package/dist/store/keys.js.map +1 -1
- package/dist/store/logs.d.ts +0 -1
- package/dist/store/logs.js +1 -7
- package/dist/store/logs.js.map +1 -1
- package/dist/store/paths.d.ts +0 -12
- package/dist/store/paths.js +0 -12
- package/dist/store/paths.js.map +1 -1
- package/dist/store/plan/jsonl-backend.d.ts +7 -0
- package/dist/store/plan/jsonl-backend.js +115 -0
- package/dist/store/plan/jsonl-backend.js.map +1 -0
- package/dist/store/plan/mutation.d.ts +25 -0
- package/dist/store/plan/mutation.js +270 -0
- package/dist/store/plan/mutation.js.map +1 -0
- package/dist/store/plan/sqlite-backend.d.ts +66 -0
- package/dist/store/plan/sqlite-backend.js +66 -0
- package/dist/store/plan/sqlite-backend.js.map +1 -0
- package/dist/store/plan/task-normalization.d.ts +8 -0
- package/dist/store/plan/task-normalization.js +165 -0
- package/dist/store/plan/task-normalization.js.map +1 -0
- package/dist/store/plan.d.ts +9 -176
- package/dist/store/plan.js +11 -742
- package/dist/store/plan.js.map +1 -1
- package/dist/store/project.js +0 -5
- package/dist/store/project.js.map +1 -1
- package/dist/store/responder-settlement.d.ts +0 -1
- package/dist/store/responder-settlement.js +0 -3
- package/dist/store/responder-settlement.js.map +1 -1
- package/dist/store/scope.d.ts +0 -16
- package/dist/store/scope.js +0 -22
- package/dist/store/scope.js.map +1 -1
- package/dist/store/session-workspace.d.ts +0 -51
- package/dist/store/session-workspace.js +0 -57
- package/dist/store/session-workspace.js.map +1 -1
- package/dist/store/task-transitions.d.ts +0 -7
- package/dist/store/task-transitions.js +0 -6
- package/dist/store/task-transitions.js.map +1 -1
- package/dist/tools/batch/batch-parsing.d.ts +11 -0
- package/dist/tools/batch/batch-parsing.js +78 -0
- package/dist/tools/batch/batch-parsing.js.map +1 -0
- package/dist/tools/batch/limits.d.ts +6 -0
- package/dist/tools/batch/limits.js +17 -0
- package/dist/tools/batch/limits.js.map +1 -0
- package/dist/tools/batch/run-batch.d.ts +3 -0
- package/dist/tools/batch/run-batch.js +402 -0
- package/dist/tools/batch/run-batch.js.map +1 -0
- package/dist/tools/batch-fail-policy.d.ts +0 -29
- package/dist/tools/batch-fail-policy.js +0 -31
- package/dist/tools/batch-fail-policy.js.map +1 -1
- package/dist/tools/call-normalization.d.ts +2 -0
- package/dist/tools/call-normalization.js +165 -0
- package/dist/tools/call-normalization.js.map +1 -0
- package/dist/tools/capabilities.d.ts +0 -1
- package/dist/tools/capabilities.js +0 -28
- package/dist/tools/capabilities.js.map +1 -1
- package/dist/tools/command-intent.d.ts +0 -19
- package/dist/tools/command-intent.js +0 -65
- package/dist/tools/command-intent.js.map +1 -1
- package/dist/tools/definitions/aggregate.d.ts +2 -0
- package/dist/tools/definitions/aggregate.js +263 -0
- package/dist/tools/definitions/aggregate.js.map +1 -0
- package/dist/tools/definitions/context-1.d.ts +2 -0
- package/dist/tools/definitions/context-1.js +8 -0
- package/dist/tools/definitions/context-1.js.map +1 -0
- package/dist/tools/definitions/context-2.d.ts +2 -0
- package/dist/tools/definitions/context-2.js +90 -0
- package/dist/tools/definitions/context-2.js.map +1 -0
- package/dist/tools/definitions/define.d.ts +7 -0
- package/dist/tools/definitions/define.js +53 -0
- package/dist/tools/definitions/define.js.map +1 -0
- package/dist/tools/definitions/files.d.ts +2 -0
- package/dist/tools/definitions/files.js +193 -0
- package/dist/tools/definitions/files.js.map +1 -0
- package/dist/tools/definitions/network-1.d.ts +2 -0
- package/dist/tools/definitions/network-1.js +72 -0
- package/dist/tools/definitions/network-1.js.map +1 -0
- package/dist/tools/definitions/network-2.d.ts +2 -0
- package/dist/tools/definitions/network-2.js +22 -0
- package/dist/tools/definitions/network-2.js.map +1 -0
- package/dist/tools/definitions/orchestration.d.ts +2 -0
- package/dist/tools/definitions/orchestration.js +122 -0
- package/dist/tools/definitions/orchestration.js.map +1 -0
- package/dist/tools/definitions/pentest.d.ts +2 -0
- package/dist/tools/definitions/pentest.js +91 -0
- package/dist/tools/definitions/pentest.js.map +1 -0
- package/dist/tools/definitions/selection.d.ts +9 -0
- package/dist/tools/definitions/selection.js +84 -0
- package/dist/tools/definitions/selection.js.map +1 -0
- package/dist/tools/definitions/shell.d.ts +2 -0
- package/dist/tools/definitions/shell.js +83 -0
- package/dist/tools/definitions/shell.js.map +1 -0
- package/dist/tools/definitions/terminal.d.ts +2 -0
- package/dist/tools/definitions/terminal.js +91 -0
- package/dist/tools/definitions/terminal.js.map +1 -0
- package/dist/tools/definitions/web-1.d.ts +2 -0
- package/dist/tools/definitions/web-1.js +68 -0
- package/dist/tools/definitions/web-1.js.map +1 -0
- package/dist/tools/definitions/web-2.d.ts +2 -0
- package/dist/tools/definitions/web-2.js +59 -0
- package/dist/tools/definitions/web-2.js.map +1 -0
- package/dist/tools/definitions.d.ts +3 -16
- package/dist/tools/definitions.js +8 -1238
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/diff/line-ops.d.ts +34 -0
- package/dist/tools/diff/line-ops.js +218 -0
- package/dist/tools/diff/line-ops.js.map +1 -0
- package/dist/tools/dns-native.d.ts +0 -5
- package/dist/tools/dns-native.js +0 -16
- package/dist/tools/dns-native.js.map +1 -1
- package/dist/tools/external-tools.d.ts +0 -8
- package/dist/tools/external-tools.js.map +1 -1
- package/dist/tools/file-diff.d.ts +3 -78
- package/dist/tools/file-diff.js +2 -271
- package/dist/tools/file-diff.js.map +1 -1
- package/dist/tools/fs/internals-2.d.ts +1 -0
- package/dist/tools/fs/internals-2.js +6 -0
- package/dist/tools/fs/internals-2.js.map +1 -0
- package/dist/tools/fs/internals.d.ts +4 -0
- package/dist/tools/fs/internals.js +23 -0
- package/dist/tools/fs/internals.js.map +1 -0
- package/dist/tools/fs/mutations.d.ts +17 -0
- package/dist/tools/fs/mutations.js +396 -0
- package/dist/tools/fs/mutations.js.map +1 -0
- package/dist/tools/fs/read-window.d.ts +14 -0
- package/dist/tools/fs/read-window.js +288 -0
- package/dist/tools/fs/read-window.js.map +1 -0
- package/dist/tools/fs/read.d.ts +7 -0
- package/dist/tools/fs/read.js +164 -0
- package/dist/tools/fs/read.js.map +1 -0
- package/dist/tools/fs/search.d.ts +13 -0
- package/dist/tools/fs/search.js +125 -0
- package/dist/tools/fs/search.js.map +1 -0
- package/dist/tools/fs.d.ts +4 -79
- package/dist/tools/fs.js +26 -1115
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/handlers/args.d.ts +8 -0
- package/dist/tools/handlers/args.js +50 -0
- package/dist/tools/handlers/args.js.map +1 -0
- package/dist/tools/handlers/context-1.d.ts +2 -0
- package/dist/tools/handlers/context-1.js +7 -0
- package/dist/tools/handlers/context-1.js.map +1 -0
- package/dist/tools/handlers/context-2.d.ts +2 -0
- package/dist/tools/handlers/context-2.js +14 -0
- package/dist/tools/handlers/context-2.js.map +1 -0
- package/dist/tools/handlers/files-1.d.ts +2 -0
- package/dist/tools/handlers/files-1.js +51 -0
- package/dist/tools/handlers/files-1.js.map +1 -0
- package/dist/tools/handlers/files-2.d.ts +2 -0
- package/dist/tools/handlers/files-2.js +31 -0
- package/dist/tools/handlers/files-2.js.map +1 -0
- package/dist/tools/handlers/network-1.d.ts +2 -0
- package/dist/tools/handlers/network-1.js +52 -0
- package/dist/tools/handlers/network-1.js.map +1 -0
- package/dist/tools/handlers/network-2.d.ts +2 -0
- package/dist/tools/handlers/network-2.js +32 -0
- package/dist/tools/handlers/network-2.js.map +1 -0
- package/dist/tools/handlers/network-3.d.ts +2 -0
- package/dist/tools/handlers/network-3.js +17 -0
- package/dist/tools/handlers/network-3.js.map +1 -0
- package/dist/tools/handlers/nmap-preparation.d.ts +13 -0
- package/dist/tools/handlers/nmap-preparation.js +66 -0
- package/dist/tools/handlers/nmap-preparation.js.map +1 -0
- package/dist/tools/handlers/orchestration-1.d.ts +2 -0
- package/dist/tools/handlers/orchestration-1.js +7 -0
- package/dist/tools/handlers/orchestration-1.js.map +1 -0
- package/dist/tools/handlers/orchestration-2.d.ts +2 -0
- package/dist/tools/handlers/orchestration-2.js +16 -0
- package/dist/tools/handlers/orchestration-2.js.map +1 -0
- package/dist/tools/handlers/pentest.d.ts +2 -0
- package/dist/tools/handlers/pentest.js +208 -0
- package/dist/tools/handlers/pentest.js.map +1 -0
- package/dist/tools/handlers/responder-job-options.d.ts +3 -0
- package/dist/tools/handlers/responder-job-options.js +16 -0
- package/dist/tools/handlers/responder-job-options.js.map +1 -0
- package/dist/tools/handlers/shell-1.d.ts +2 -0
- package/dist/tools/handlers/shell-1.js +94 -0
- package/dist/tools/handlers/shell-1.js.map +1 -0
- package/dist/tools/handlers/shell-2.d.ts +2 -0
- package/dist/tools/handlers/shell-2.js +49 -0
- package/dist/tools/handlers/shell-2.js.map +1 -0
- package/dist/tools/handlers/shell-3.d.ts +2 -0
- package/dist/tools/handlers/shell-3.js +47 -0
- package/dist/tools/handlers/shell-3.js.map +1 -0
- package/dist/tools/handlers/web.d.ts +2 -0
- package/dist/tools/handlers/web.js +168 -0
- package/dist/tools/handlers/web.js.map +1 -0
- package/dist/tools/http/agents.d.ts +10 -0
- package/dist/tools/http/agents.js +63 -0
- package/dist/tools/http/agents.js.map +1 -0
- package/dist/tools/http/evidence-format.d.ts +37 -0
- package/dist/tools/http/evidence-format.js +181 -0
- package/dist/tools/http/evidence-format.js.map +1 -0
- package/dist/tools/http/fetch.d.ts +31 -0
- package/dist/tools/http/fetch.js +480 -0
- package/dist/tools/http/fetch.js.map +1 -0
- package/dist/tools/http/retry-policy.d.ts +14 -0
- package/dist/tools/http/retry-policy.js +144 -0
- package/dist/tools/http/retry-policy.js.map +1 -0
- package/dist/tools/http.d.ts +1 -45
- package/dist/tools/http.js +1 -920
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/image.d.ts +0 -15
- package/dist/tools/image.js +0 -21
- package/dist/tools/image.js.map +1 -1
- package/dist/tools/interactive-session-tools.d.ts +0 -7
- package/dist/tools/interactive-session-tools.js +0 -13
- package/dist/tools/interactive-session-tools.js.map +1 -1
- package/dist/tools/jobs/helpers.d.ts +6 -0
- package/dist/tools/jobs/helpers.js +63 -0
- package/dist/tools/jobs/helpers.js.map +1 -0
- package/dist/tools/jobs/limits.d.ts +20 -0
- package/dist/tools/jobs/limits.js +21 -0
- package/dist/tools/jobs/limits.js.map +1 -0
- package/dist/tools/jobs/polling-policy.d.ts +11 -0
- package/dist/tools/jobs/polling-policy.js +33 -0
- package/dist/tools/jobs/polling-policy.js.map +1 -0
- package/dist/tools/jobs/process-identity.d.ts +5 -0
- package/dist/tools/jobs/process-identity.js +80 -0
- package/dist/tools/jobs/process-identity.js.map +1 -0
- package/dist/tools/jobs/redacted-writer.d.ts +25 -0
- package/dist/tools/jobs/redacted-writer.js +134 -0
- package/dist/tools/jobs/redacted-writer.js.map +1 -0
- package/dist/tools/jobs/types.d.ts +152 -0
- package/dist/tools/jobs/types.js +2 -0
- package/dist/tools/jobs/types.js.map +1 -0
- package/dist/tools/jobs.d.ts +8 -210
- package/dist/tools/jobs.js +13 -453
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/net-ping-sweep.d.ts +0 -8
- package/dist/tools/net-ping-sweep.js +0 -22
- package/dist/tools/net-ping-sweep.js.map +1 -1
- package/dist/tools/network-context.d.ts +0 -4
- package/dist/tools/network-context.js +0 -8
- package/dist/tools/network-context.js.map +1 -1
- package/dist/tools/nmap-runner.d.ts +0 -21
- package/dist/tools/nmap-runner.js +0 -43
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/output-selection.d.ts +0 -1
- package/dist/tools/output-selection.js +0 -3
- package/dist/tools/output-selection.js.map +1 -1
- package/dist/tools/package-binary.js +0 -7
- package/dist/tools/package-binary.js.map +1 -1
- package/dist/tools/pdf/read.d.ts +6 -0
- package/dist/tools/pdf/read.js +529 -0
- package/dist/tools/pdf/read.js.map +1 -0
- package/dist/tools/pdf.d.ts +2 -6
- package/dist/tools/pdf.js +1 -528
- package/dist/tools/pdf.js.map +1 -1
- package/dist/tools/pentest-workflows.js +0 -12
- package/dist/tools/pentest-workflows.js.map +1 -1
- package/dist/tools/policies/output-policy.d.ts +0 -17
- package/dist/tools/policies/output-policy.js +0 -18
- package/dist/tools/policies/output-policy.js.map +1 -1
- package/dist/tools/reducers/ffuf.d.ts +0 -5
- package/dist/tools/reducers/ffuf.js +0 -8
- package/dist/tools/reducers/ffuf.js.map +1 -1
- package/dist/tools/reducers/gobuster.js +0 -1
- package/dist/tools/reducers/gobuster.js.map +1 -1
- package/dist/tools/reducers/httpx.js +0 -1
- package/dist/tools/reducers/httpx.js.map +1 -1
- package/dist/tools/reducers/nmap.d.ts +0 -5
- package/dist/tools/reducers/nmap.js +0 -5
- package/dist/tools/reducers/nmap.js.map +1 -1
- package/dist/tools/reducers/nuclei.js +0 -1
- package/dist/tools/reducers/nuclei.js.map +1 -1
- package/dist/tools/reducers/subdomains.d.ts +0 -4
- package/dist/tools/reducers/subdomains.js +0 -4
- package/dist/tools/reducers/subdomains.js.map +1 -1
- package/dist/tools/reducers/types.d.ts +0 -5
- package/dist/tools/registry.d.ts +4 -20
- package/dist/tools/registry.js +42 -1636
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell/artifact-name.d.ts +1 -0
- package/dist/tools/shell/artifact-name.js +6 -0
- package/dist/tools/shell/artifact-name.js.map +1 -0
- package/dist/tools/shell/capture.d.ts +31 -0
- package/dist/tools/shell/capture.js +135 -0
- package/dist/tools/shell/capture.js.map +1 -0
- package/dist/tools/shell/exec-attempt.d.ts +10 -0
- package/dist/tools/shell/exec-attempt.js +288 -0
- package/dist/tools/shell/exec-attempt.js.map +1 -0
- package/dist/tools/shell/internals-2.d.ts +16 -0
- package/dist/tools/shell/internals-2.js +48 -0
- package/dist/tools/shell/internals-2.js.map +1 -0
- package/dist/tools/shell/internals.d.ts +10 -0
- package/dist/tools/shell/internals.js +51 -0
- package/dist/tools/shell/internals.js.map +1 -0
- package/dist/tools/shell/spawn-argv.d.ts +17 -0
- package/dist/tools/shell/spawn-argv.js +248 -0
- package/dist/tools/shell/spawn-argv.js.map +1 -0
- package/dist/tools/shell-quoting.d.ts +1 -0
- package/dist/tools/shell-quoting.js +7 -0
- package/dist/tools/shell-quoting.js.map +1 -0
- package/dist/tools/shell.d.ts +4 -82
- package/dist/tools/shell.js +7 -845
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/sudo-session.d.ts +0 -41
- package/dist/tools/sudo-session.js +0 -44
- package/dist/tools/sudo-session.js.map +1 -1
- package/dist/tools/tool-types.d.ts +0 -7
- package/dist/tools/validate.d.ts +0 -35
- package/dist/tools/validate.js +2 -67
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/web/audit.d.ts +0 -74
- package/dist/tools/web/audit.js +0 -39
- package/dist/tools/web/audit.js.map +1 -1
- package/dist/tools/web/budget.d.ts +0 -35
- package/dist/tools/web/budget.js +0 -75
- package/dist/tools/web/budget.js.map +1 -1
- package/dist/tools/web/capture.d.ts +0 -106
- package/dist/tools/web/capture.js +0 -148
- package/dist/tools/web/capture.js.map +1 -1
- package/dist/tools/web/decode.d.ts +0 -8
- package/dist/tools/web/decode.js +0 -9
- package/dist/tools/web/decode.js.map +1 -1
- package/dist/tools/web/fetch-core.d.ts +2 -32
- package/dist/tools/web/fetch-core.js +4 -1058
- package/dist/tools/web/fetch-core.js.map +1 -1
- package/dist/tools/web/fetch.d.ts +0 -29
- package/dist/tools/web/fetch.js +0 -46
- package/dist/tools/web/fetch.js.map +1 -1
- package/dist/tools/web/issue-hop.d.ts +57 -0
- package/dist/tools/web/issue-hop.js +396 -0
- package/dist/tools/web/issue-hop.js.map +1 -0
- package/dist/tools/web/providers/brave.d.ts +0 -40
- package/dist/tools/web/providers/brave.js +1 -100
- package/dist/tools/web/providers/brave.js.map +1 -1
- package/dist/tools/web/providers/duckduckgo.d.ts +0 -41
- package/dist/tools/web/providers/duckduckgo.js +0 -104
- package/dist/tools/web/providers/duckduckgo.js.map +1 -1
- package/dist/tools/web/providers/exa.d.ts +0 -43
- package/dist/tools/web/providers/exa.js +1 -102
- package/dist/tools/web/providers/exa.js.map +1 -1
- package/dist/tools/web/providers/provider.d.ts +0 -69
- package/dist/tools/web/providers/provider.js +0 -28
- package/dist/tools/web/providers/provider.js.map +1 -1
- package/dist/tools/web/providers/tavily.d.ts +0 -46
- package/dist/tools/web/providers/tavily.js +1 -111
- package/dist/tools/web/providers/tavily.js.map +1 -1
- package/dist/tools/web/readable.d.ts +0 -62
- package/dist/tools/web/readable.js +1 -132
- package/dist/tools/web/readable.js.map +1 -1
- package/dist/tools/web/redact.d.ts +0 -26
- package/dist/tools/web/redact.js +0 -2
- package/dist/tools/web/redact.js.map +1 -1
- package/dist/tools/web/request-loop.d.ts +38 -0
- package/dist/tools/web/request-loop.js +172 -0
- package/dist/tools/web/request-loop.js.map +1 -0
- package/dist/tools/web/response-body.d.ts +41 -0
- package/dist/tools/web/response-body.js +174 -0
- package/dist/tools/web/response-body.js.map +1 -0
- package/dist/tools/web/search-attempts.d.ts +20 -0
- package/dist/tools/web/search-attempts.js +303 -0
- package/dist/tools/web/search-attempts.js.map +1 -0
- package/dist/tools/web/search.d.ts +0 -33
- package/dist/tools/web/search.js +3 -396
- package/dist/tools/web/search.js.map +1 -1
- package/dist/tools/web/ssrf-guard.d.ts +0 -42
- package/dist/tools/web/ssrf-guard.js +0 -57
- package/dist/tools/web/ssrf-guard.js.map +1 -1
- package/dist/tools/web/types.d.ts +0 -197
- package/dist/tools/web/types.js +0 -41
- package/dist/tools/web/types.js.map +1 -1
- package/dist/tools/web/validate-args.d.ts +11 -0
- package/dist/tools/web/validate-args.js +107 -0
- package/dist/tools/web/validate-args.js.map +1 -0
- package/dist/tools/whois-native.d.ts +0 -4
- package/dist/tools/whois-native.js +0 -6
- package/dist/tools/whois-native.js.map +1 -1
- package/dist/tools/wordlists.js +0 -32
- package/dist/tools/wordlists.js.map +1 -1
- package/dist/tui-v2/app/App.d.ts +0 -10
- package/dist/tui-v2/app/App.js +67 -112
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/bootstrap/pager-export.d.ts +0 -8
- package/dist/tui-v2/bootstrap/pager-export.js +0 -11
- package/dist/tui-v2/bootstrap/pager-export.js.map +1 -1
- package/dist/tui-v2/bootstrap/patch-opentui-text.d.ts +0 -5
- package/dist/tui-v2/bootstrap/patch-opentui-text.js +0 -5
- package/dist/tui-v2/bootstrap/patch-opentui-text.js.map +1 -1
- package/dist/tui-v2/bootstrap/resize-repaint.d.ts +16 -20
- package/dist/tui-v2/bootstrap/resize-repaint.js +34 -13
- package/dist/tui-v2/bootstrap/resize-repaint.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +0 -7
- package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -27
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/completion/completion-menu.d.ts +0 -4
- package/dist/tui-v2/components/completion/completion-menu.js +2 -6
- package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
- package/dist/tui-v2/components/composer/composer-input-box.d.ts +0 -4
- package/dist/tui-v2/components/composer/composer-input-box.js +1 -10
- package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
- package/dist/tui-v2/components/composer/paste-chip.d.ts +0 -7
- package/dist/tui-v2/components/composer/paste-chip.js +0 -7
- package/dist/tui-v2/components/composer/paste-chip.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.d.ts +0 -12
- package/dist/tui-v2/components/jobs/jobs-panel.js +0 -34
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/modal/confirm-modal.d.ts +0 -8
- package/dist/tui-v2/components/modal/confirm-modal.js +0 -4
- package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/keys-modal.d.ts +0 -11
- package/dist/tui-v2/components/modal/keys-modal.js +0 -24
- package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +0 -6
- package/dist/tui-v2/components/modal/prompt-actions-modal.js +4 -13
- package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/scope-modal.d.ts +0 -5
- package/dist/tui-v2/components/modal/scope-modal.js +0 -12
- package/dist/tui-v2/components/modal/scope-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/secret-modal.d.ts +0 -8
- package/dist/tui-v2/components/modal/secret-modal.js +0 -17
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/text-editor-modal.d.ts +0 -6
- package/dist/tui-v2/components/modal/text-editor-modal.js +0 -6
- package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.d.ts +0 -14
- package/dist/tui-v2/components/overlay/overlay-host.js +0 -2
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-line.d.ts +0 -5
- package/dist/tui-v2/components/pager/pager-line.js +0 -10
- package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.d.ts +0 -14
- package/dist/tui-v2/components/pager/pager.js +3 -58
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/picker/picker.d.ts +0 -6
- package/dist/tui-v2/components/picker/picker.js +3 -12
- package/dist/tui-v2/components/picker/picker.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-pane-anim.d.ts +0 -25
- package/dist/tui-v2/components/plan/plan-pane-anim.js +0 -23
- package/dist/tui-v2/components/plan/plan-pane-anim.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.d.ts +0 -7
- package/dist/tui-v2/components/plan/plan-view.js +0 -20
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/plan/use-pane-presence.d.ts +0 -9
- package/dist/tui-v2/components/plan/use-pane-presence.js +0 -9
- package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
- package/dist/tui-v2/components/queue/queue-panel.d.ts +0 -12
- package/dist/tui-v2/components/queue/queue-panel.js +2 -4
- package/dist/tui-v2/components/queue/queue-panel.js.map +1 -1
- package/dist/tui-v2/components/status/status-line.d.ts +0 -17
- package/dist/tui-v2/components/status/status-line.js +0 -10
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-anim.d.ts +0 -20
- package/dist/tui-v2/components/toast/toast-anim.js +0 -15
- package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.d.ts +0 -12
- package/dist/tui-v2/components/toast/toast-host.js +1 -29
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.d.ts +0 -11
- package/dist/tui-v2/components/transcript/assistant-message.js +3 -24
- package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.d.ts +0 -6
- package/dist/tui-v2/components/transcript/compacted-row.js +2 -6
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/file-diff-card.d.ts +0 -9
- package/dist/tui-v2/components/transcript/file-diff-card.js +0 -16
- package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.d.ts +0 -9
- package/dist/tui-v2/components/transcript/intro-card.js +2 -13
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/linkable-text.d.ts +0 -16
- package/dist/tui-v2/components/transcript/linkable-text.js +0 -11
- package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
- package/dist/tui-v2/components/transcript/notice-row.d.ts +0 -7
- package/dist/tui-v2/components/transcript/notice-row.js +2 -18
- package/dist/tui-v2/components/transcript/notice-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/search-bar.d.ts +0 -10
- package/dist/tui-v2/components/transcript/search-bar.js +0 -3
- package/dist/tui-v2/components/transcript/search-bar.js.map +1 -1
- package/dist/tui-v2/components/transcript/selectable-line.d.ts +0 -16
- package/dist/tui-v2/components/transcript/selectable-line.js +0 -9
- package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-block.d.ts +0 -18
- package/dist/tui-v2/components/transcript/thinking-block.js +2 -40
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.d.ts +0 -19
- package/dist/tui-v2/components/transcript/tool-card.js +2 -42
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.d.ts +0 -14
- package/dist/tui-v2/components/transcript/transcript-row.js +0 -13
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +0 -32
- package/dist/tui-v2/components/transcript/transcript-scroll-port.js +0 -22
- package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.d.ts +0 -9
- package/dist/tui-v2/components/transcript/transcript-view.js +4 -67
- package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-click-without-drag.d.ts +0 -7
- package/dist/tui-v2/components/transcript/use-click-without-drag.js +1 -11
- package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-native-selection-copy.d.ts +0 -7
- package/dist/tui-v2/components/transcript/use-native-selection-copy.js +0 -9
- package/dist/tui-v2/components/transcript/use-native-selection-copy.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-transcript-selection.d.ts +0 -1
- package/dist/tui-v2/components/transcript/use-transcript-selection.js +0 -14
- package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -1
- package/dist/tui-v2/components/transcript/user-message.d.ts +0 -2
- package/dist/tui-v2/components/transcript/user-message.js +2 -7
- package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.d.ts +0 -20
- package/dist/tui-v2/composer/composer-editor.js +0 -61
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/composer/composer-wheel.d.ts +0 -17
- package/dist/tui-v2/composer/composer-wheel.js +0 -17
- package/dist/tui-v2/composer/composer-wheel.js.map +1 -1
- package/dist/tui-v2/composer/disable-native-textarea-scroll.d.ts +0 -12
- package/dist/tui-v2/composer/disable-native-textarea-scroll.js +0 -13
- package/dist/tui-v2/composer/disable-native-textarea-scroll.js.map +1 -1
- package/dist/tui-v2/composer/textarea-keybindings.d.ts +0 -19
- package/dist/tui-v2/composer/textarea-keybindings.js +0 -34
- package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -1
- package/dist/tui-v2/composer/use-draft-actions.d.ts +0 -10
- package/dist/tui-v2/composer/use-draft-actions.js +0 -5
- package/dist/tui-v2/composer/use-draft-actions.js.map +1 -1
- package/dist/tui-v2/hooks/terminal-dimensions.d.ts +6 -0
- package/dist/tui-v2/hooks/terminal-dimensions.js +14 -0
- package/dist/tui-v2/hooks/terminal-dimensions.js.map +1 -0
- package/dist/tui-v2/input/chord-from-opentui-key.d.ts +0 -17
- package/dist/tui-v2/input/chord-from-opentui-key.js +0 -17
- package/dist/tui-v2/input/chord-from-opentui-key.js.map +1 -1
- package/dist/tui-v2/rendering/ansi-to-styled.d.ts +0 -12
- package/dist/tui-v2/rendering/ansi-to-styled.js +0 -10
- package/dist/tui-v2/rendering/ansi-to-styled.js.map +1 -1
- package/dist/tui-v2/rendering/pager-markdown.d.ts +0 -18
- package/dist/tui-v2/rendering/pager-markdown.js +0 -14
- package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
- package/dist/types.d.ts +2 -135
- package/dist/types.js +0 -3
- package/dist/types.js.map +1 -1
- package/dist/ui/mentions/expand.d.ts +26 -0
- package/dist/ui/mentions/expand.js +308 -0
- package/dist/ui/mentions/expand.js.map +1 -0
- package/dist/ui/mentions/file-suggestions.d.ts +7 -0
- package/dist/ui/mentions/file-suggestions.js +106 -0
- package/dist/ui/mentions/file-suggestions.js.map +1 -0
- package/dist/ui/mentions.d.ts +6 -70
- package/dist/ui/mentions.js +8 -482
- package/dist/ui/mentions.js.map +1 -1
- package/dist/ui/plan-pane.d.ts +0 -15
- package/dist/ui/plan-pane.js +1 -16
- package/dist/ui/plan-pane.js.map +1 -1
- package/dist/ui/thinking.d.ts +0 -8
- package/dist/ui/thinking.js +0 -13
- package/dist/ui/thinking.js.map +1 -1
- package/dist/ui-core/actions/action-id.d.ts +0 -8
- package/dist/ui-core/actions/action-id.js +0 -25
- package/dist/ui-core/actions/action-id.js.map +1 -1
- package/dist/ui-core/actions/action-router.d.ts +0 -10
- package/dist/ui-core/actions/action-router.js +0 -16
- package/dist/ui-core/actions/action-router.js.map +1 -1
- package/dist/ui-core/actions/cancel-timing.d.ts +0 -3
- package/dist/ui-core/actions/cancel-timing.js +0 -3
- package/dist/ui-core/actions/cancel-timing.js.map +1 -1
- package/dist/ui-core/actions/format-shortcuts.d.ts +0 -9
- package/dist/ui-core/actions/format-shortcuts.js +0 -9
- package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
- package/dist/ui-core/actions/keymap.d.ts +0 -9
- package/dist/ui-core/actions/keymap.js +0 -39
- package/dist/ui-core/actions/keymap.js.map +1 -1
- package/dist/ui-core/actions/mode-cycle.d.ts +0 -2
- package/dist/ui-core/actions/mode-cycle.js +0 -4
- package/dist/ui-core/actions/mode-cycle.js.map +1 -1
- package/dist/ui-core/bootstrap/can-use-tui.d.ts +0 -6
- package/dist/ui-core/bootstrap/can-use-tui.js +0 -9
- package/dist/ui-core/bootstrap/can-use-tui.js.map +1 -1
- package/dist/ui-core/bootstrap/capabilities.d.ts +0 -8
- package/dist/ui-core/bootstrap/capabilities.js +1 -8
- package/dist/ui-core/bootstrap/capabilities.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.d.ts +0 -17
- package/dist/ui-core/bootstrap/composition-root.js +30 -19
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/bootstrap/console-guard.d.ts +0 -15
- package/dist/ui-core/bootstrap/console-guard.js +32 -0
- package/dist/ui-core/bootstrap/console-guard.js.map +1 -1
- package/dist/ui-core/bootstrap/console-suppress.js +2 -7
- package/dist/ui-core/bootstrap/console-suppress.js.map +1 -1
- package/dist/ui-core/bootstrap/exit-epilogue.d.ts +0 -6
- package/dist/ui-core/bootstrap/exit-epilogue.js +0 -5
- package/dist/ui-core/bootstrap/exit-epilogue.js.map +1 -1
- package/dist/ui-core/bootstrap/lifecycle.d.ts +0 -42
- package/dist/ui-core/bootstrap/lifecycle.js +0 -31
- package/dist/ui-core/bootstrap/lifecycle.js.map +1 -1
- package/dist/ui-core/bootstrap/overlay-ports.d.ts +0 -11
- package/dist/ui-core/bootstrap/overlay-ports.js +0 -13
- package/dist/ui-core/bootstrap/overlay-ports.js.map +1 -1
- package/dist/ui-core/bootstrap/theme-mode-cache.js +0 -5
- package/dist/ui-core/bootstrap/theme-mode-cache.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.d.ts +0 -6
- package/dist/ui-core/commands/command-handlers.js +0 -6
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/config-commands.d.ts +0 -3
- package/dist/ui-core/commands/config-commands.js +0 -7
- package/dist/ui-core/commands/config-commands.js.map +1 -1
- package/dist/ui-core/commands/key-commands.d.ts +2 -0
- package/dist/ui-core/commands/key-commands.js +79 -213
- package/dist/ui-core/commands/key-commands.js.map +1 -1
- package/dist/ui-core/commands/keys/editors.d.ts +15 -0
- package/dist/ui-core/commands/keys/editors.js +127 -0
- package/dist/ui-core/commands/keys/editors.js.map +1 -0
- package/dist/ui-core/commands/mcp-commands.js +0 -6
- package/dist/ui-core/commands/mcp-commands.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.d.ts +3 -14
- package/dist/ui-core/commands/picker-commands.js +6 -694
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/pickers/custom-provider.d.ts +3 -0
- package/dist/ui-core/commands/pickers/custom-provider.js +170 -0
- package/dist/ui-core/commands/pickers/custom-provider.js.map +1 -0
- package/dist/ui-core/commands/pickers/history.d.ts +3 -0
- package/dist/ui-core/commands/pickers/history.js +185 -0
- package/dist/ui-core/commands/pickers/history.js.map +1 -0
- package/dist/ui-core/commands/pickers/output-pager.d.ts +5 -0
- package/dist/ui-core/commands/pickers/output-pager.js +90 -0
- package/dist/ui-core/commands/pickers/output-pager.js.map +1 -0
- package/dist/ui-core/commands/pickers/search-reasoning.d.ts +4 -0
- package/dist/ui-core/commands/pickers/search-reasoning.js +184 -0
- package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -0
- package/dist/ui-core/commands/session-commands.d.ts +0 -4
- package/dist/ui-core/commands/session-commands.js +23 -17
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/commands/startup-update.d.ts +0 -6
- package/dist/ui-core/commands/startup-update.js +0 -6
- package/dist/ui-core/commands/startup-update.js.map +1 -1
- package/dist/ui-core/composer/arrow-intent.d.ts +0 -10
- package/dist/ui-core/composer/arrow-intent.js +0 -14
- package/dist/ui-core/composer/arrow-intent.js.map +1 -1
- package/dist/ui-core/composer/completion.d.ts +0 -9
- package/dist/ui-core/composer/completion.js +1 -13
- package/dist/ui-core/composer/completion.js.map +1 -1
- package/dist/ui-core/composer/composer-action-port.d.ts +0 -10
- package/dist/ui-core/composer/composer-action-port.js +0 -10
- package/dist/ui-core/composer/composer-action-port.js.map +1 -1
- package/dist/ui-core/composer/composer-height.d.ts +0 -12
- package/dist/ui-core/composer/composer-height.js +0 -12
- package/dist/ui-core/composer/composer-height.js.map +1 -1
- package/dist/ui-core/composer/composer-wheel.d.ts +0 -17
- package/dist/ui-core/composer/composer-wheel.js +0 -17
- package/dist/ui-core/composer/composer-wheel.js.map +1 -1
- package/dist/ui-core/composer/draft-actions.d.ts +0 -14
- package/dist/ui-core/composer/draft-actions.js +0 -13
- package/dist/ui-core/composer/draft-actions.js.map +1 -1
- package/dist/ui-core/composer/history-nav.d.ts +0 -9
- package/dist/ui-core/composer/history-nav.js +0 -9
- package/dist/ui-core/composer/history-nav.js.map +1 -1
- package/dist/ui-core/composer/input-history.d.ts +0 -1
- package/dist/ui-core/composer/input-history.js +0 -1
- package/dist/ui-core/composer/input-history.js.map +1 -1
- package/dist/ui-core/composer/newline-hint.d.ts +0 -7
- package/dist/ui-core/composer/newline-hint.js +0 -9
- package/dist/ui-core/composer/newline-hint.js.map +1 -1
- package/dist/ui-core/composer/paste-placeholder.d.ts +0 -23
- package/dist/ui-core/composer/paste-placeholder.js +0 -21
- package/dist/ui-core/composer/paste-placeholder.js.map +1 -1
- package/dist/ui-core/composer/prompt-history.d.ts +0 -11
- package/dist/ui-core/composer/prompt-history.js +0 -11
- package/dist/ui-core/composer/prompt-history.js.map +1 -1
- package/dist/ui-core/composer/secret-buffer.d.ts +0 -8
- package/dist/ui-core/composer/secret-buffer.js +0 -8
- package/dist/ui-core/composer/secret-buffer.js.map +1 -1
- package/dist/ui-core/composer/textarea-keybindings.d.ts +0 -15
- package/dist/ui-core/composer/textarea-keybindings.js +0 -30
- package/dist/ui-core/composer/textarea-keybindings.js.map +1 -1
- package/dist/ui-core/controllers/focus-controller.d.ts +0 -11
- package/dist/ui-core/controllers/focus-controller.js +0 -11
- package/dist/ui-core/controllers/focus-controller.js.map +1 -1
- package/dist/ui-core/controllers/interruptible-controller.d.ts +0 -6
- package/dist/ui-core/controllers/interruptible-controller.js +0 -6
- package/dist/ui-core/controllers/interruptible-controller.js.map +1 -1
- package/dist/ui-core/controllers/overlay-controller.d.ts +1 -81
- package/dist/ui-core/controllers/overlay-controller.js +1 -48
- package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
- package/dist/ui-core/controllers/selection-controller.d.ts +0 -9
- package/dist/ui-core/controllers/selection-controller.js +0 -7
- package/dist/ui-core/controllers/selection-controller.js.map +1 -1
- package/dist/ui-core/controllers/toast-controller.d.ts +0 -24
- package/dist/ui-core/controllers/toast-controller.js +0 -15
- package/dist/ui-core/controllers/toast-controller.js.map +1 -1
- package/dist/ui-core/layout/compute-layout.d.ts +0 -19
- package/dist/ui-core/layout/compute-layout.js +0 -32
- package/dist/ui-core/layout/compute-layout.js.map +1 -1
- package/dist/ui-core/motion/ease.d.ts +0 -6
- package/dist/ui-core/motion/ease.js +0 -6
- package/dist/ui-core/motion/ease.js.map +1 -1
- package/dist/ui-core/notify.d.ts +0 -8
- package/dist/ui-core/notify.js +0 -8
- package/dist/ui-core/notify.js.map +1 -1
- package/dist/ui-core/plan/plan-lifecycle.d.ts +0 -27
- package/dist/ui-core/plan/plan-lifecycle.js +0 -45
- package/dist/ui-core/plan/plan-lifecycle.js.map +1 -1
- package/dist/ui-core/ports/clipboard-osc52.d.ts +0 -8
- package/dist/ui-core/ports/clipboard-osc52.js +0 -7
- package/dist/ui-core/ports/clipboard-osc52.js.map +1 -1
- package/dist/ui-core/ports/pager-export-port.js +0 -2
- package/dist/ui-core/ports/pager-export-port.js.map +1 -1
- package/dist/ui-core/ports/renderer-port.d.ts +0 -6
- package/dist/ui-core/react/providers.d.ts +0 -7
- package/dist/ui-core/react/providers.js +0 -7
- package/dist/ui-core/react/providers.js.map +1 -1
- package/dist/ui-core/react/use-has-draft.d.ts +0 -5
- package/dist/ui-core/react/use-has-draft.js +0 -5
- package/dist/ui-core/react/use-has-draft.js.map +1 -1
- package/dist/ui-core/react/use-overlay.d.ts +0 -1
- package/dist/ui-core/react/use-overlay.js +0 -1
- package/dist/ui-core/react/use-overlay.js.map +1 -1
- package/dist/ui-core/react/use-plan.d.ts +0 -1
- package/dist/ui-core/react/use-plan.js +0 -1
- package/dist/ui-core/react/use-plan.js.map +1 -1
- package/dist/ui-core/react/use-toast.d.ts +0 -1
- package/dist/ui-core/react/use-toast.js +0 -3
- package/dist/ui-core/react/use-toast.js.map +1 -1
- package/dist/ui-core/react/use-transcript-store.d.ts +0 -7
- package/dist/ui-core/react/use-transcript-store.js +0 -7
- package/dist/ui-core/react/use-transcript-store.js.map +1 -1
- package/dist/ui-core/rendering/artifact-pager-source.d.ts +0 -7
- package/dist/ui-core/rendering/artifact-pager-source.js +0 -3
- package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
- package/dist/ui-core/rendering/batch-sections.d.ts +0 -38
- package/dist/ui-core/rendering/batch-sections.js +1 -47
- package/dist/ui-core/rendering/batch-sections.js.map +1 -1
- package/dist/ui-core/rendering/code-block.d.ts +0 -25
- package/dist/ui-core/rendering/code-block.js +0 -47
- package/dist/ui-core/rendering/code-block.js.map +1 -1
- package/dist/ui-core/rendering/context-limit.js +0 -2
- package/dist/ui-core/rendering/context-limit.js.map +1 -1
- package/dist/ui-core/rendering/duration.js +0 -3
- package/dist/ui-core/rendering/duration.js.map +1 -1
- package/dist/ui-core/rendering/exit-summary/table.d.ts +23 -0
- package/dist/ui-core/rendering/exit-summary/table.js +194 -0
- package/dist/ui-core/rendering/exit-summary/table.js.map +1 -0
- package/dist/ui-core/rendering/exit-summary.js +1 -210
- package/dist/ui-core/rendering/exit-summary.js.map +1 -1
- package/dist/ui-core/rendering/file-diff-view.d.ts +0 -27
- package/dist/ui-core/rendering/file-diff-view.js +0 -29
- package/dist/ui-core/rendering/file-diff-view.js.map +1 -1
- package/dist/ui-core/rendering/format-help.d.ts +0 -13
- package/dist/ui-core/rendering/format-help.js +0 -18
- package/dist/ui-core/rendering/format-help.js.map +1 -1
- package/dist/ui-core/rendering/format-keys.js +0 -2
- package/dist/ui-core/rendering/format-keys.js.map +1 -1
- package/dist/ui-core/rendering/format-usage.js +18 -5
- package/dist/ui-core/rendering/format-usage.js.map +1 -1
- package/dist/ui-core/rendering/incremental-strip.js +0 -13
- package/dist/ui-core/rendering/incremental-strip.js.map +1 -1
- package/dist/ui-core/rendering/intro-header.js +0 -1
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/job-tail-source.d.ts +0 -9
- package/dist/ui-core/rendering/job-tail-source.js +0 -9
- package/dist/ui-core/rendering/job-tail-source.js.map +1 -1
- package/dist/ui-core/rendering/link-detector.d.ts +0 -8
- package/dist/ui-core/rendering/link-detector.js +0 -10
- package/dist/ui-core/rendering/link-detector.js.map +1 -1
- package/dist/ui-core/rendering/markdown/tables.d.ts +8 -0
- package/dist/ui-core/rendering/markdown/tables.js +276 -0
- package/dist/ui-core/rendering/markdown/tables.js.map +1 -0
- package/dist/ui-core/rendering/markdown.d.ts +4 -9
- package/dist/ui-core/rendering/markdown.js +224 -593
- package/dist/ui-core/rendering/markdown.js.map +1 -1
- package/dist/ui-core/rendering/open-tool-output.d.ts +0 -30
- package/dist/ui-core/rendering/open-tool-output.js +0 -39
- package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
- package/dist/ui-core/rendering/pager-chrome.d.ts +0 -20
- package/dist/ui-core/rendering/pager-chrome.js +0 -24
- package/dist/ui-core/rendering/pager-chrome.js.map +1 -1
- package/dist/ui-core/rendering/pager-source.d.ts +0 -17
- package/dist/ui-core/rendering/pager-source.js +0 -27
- package/dist/ui-core/rendering/pager-source.js.map +1 -1
- package/dist/ui-core/rendering/pager-text.d.ts +0 -21
- package/dist/ui-core/rendering/pager-text.js +0 -31
- package/dist/ui-core/rendering/pager-text.js.map +1 -1
- package/dist/ui-core/rendering/pager-view-policy.d.ts +0 -24
- package/dist/ui-core/rendering/pager-view-policy.js +0 -31
- package/dist/ui-core/rendering/pager-view-policy.js.map +1 -1
- package/dist/ui-core/rendering/picker-filter.d.ts +0 -11
- package/dist/ui-core/rendering/picker-filter.js +0 -11
- package/dist/ui-core/rendering/picker-filter.js.map +1 -1
- package/dist/ui-core/rendering/plan-view.d.ts +0 -39
- package/dist/ui-core/rendering/plan-view.js +0 -37
- package/dist/ui-core/rendering/plan-view.js.map +1 -1
- package/dist/ui-core/rendering/prompt-preview.d.ts +0 -5
- package/dist/ui-core/rendering/prompt-preview.js +0 -5
- package/dist/ui-core/rendering/prompt-preview.js.map +1 -1
- package/dist/ui-core/rendering/sanitize-display.d.ts +0 -10
- package/dist/ui-core/rendering/sanitize-display.js +0 -14
- package/dist/ui-core/rendering/sanitize-display.js.map +1 -1
- package/dist/ui-core/rendering/status-segments.js +3 -3
- package/dist/ui-core/rendering/status-segments.js.map +1 -1
- package/dist/ui-core/rendering/streaming-markdown.js +0 -11
- package/dist/ui-core/rendering/streaming-markdown.js.map +1 -1
- package/dist/ui-core/rendering/syntax/clike.d.ts +22 -0
- package/dist/ui-core/rendering/syntax/clike.js +168 -0
- package/dist/ui-core/rendering/syntax/clike.js.map +1 -0
- package/dist/ui-core/rendering/syntax/keywords.d.ts +24 -0
- package/dist/ui-core/rendering/syntax/keywords.js +169 -0
- package/dist/ui-core/rendering/syntax/keywords.js.map +1 -0
- package/dist/ui-core/rendering/syntax/language-highlighters.d.ts +18 -0
- package/dist/ui-core/rendering/syntax/language-highlighters.js +538 -0
- package/dist/ui-core/rendering/syntax/language-highlighters.js.map +1 -0
- package/dist/ui-core/rendering/syntax/language-table.d.ts +3 -0
- package/dist/ui-core/rendering/syntax/language-table.js +244 -0
- package/dist/ui-core/rendering/syntax/language-table.js.map +1 -0
- package/dist/ui-core/rendering/syntax-highlight.d.ts +6 -28
- package/dist/ui-core/rendering/syntax-highlight.js +5 -1177
- package/dist/ui-core/rendering/syntax-highlight.js.map +1 -1
- package/dist/ui-core/rendering/text-format.d.ts +0 -3
- package/dist/ui-core/rendering/text-format.js +0 -3
- package/dist/ui-core/rendering/text-format.js.map +1 -1
- package/dist/ui-core/rendering/text-width.d.ts +0 -26
- package/dist/ui-core/rendering/text-width.js +0 -26
- package/dist/ui-core/rendering/text-width.js.map +1 -1
- package/dist/ui-core/rendering/theme.d.ts +0 -65
- package/dist/ui-core/rendering/theme.js +0 -24
- package/dist/ui-core/rendering/theme.js.map +1 -1
- package/dist/ui-core/rendering/thinking-tail.js +0 -3
- package/dist/ui-core/rendering/thinking-tail.js.map +1 -1
- package/dist/ui-core/rendering/tool-presenter.d.ts +0 -41
- package/dist/ui-core/rendering/tool-presenter.js +1 -67
- package/dist/ui-core/rendering/tool-presenter.js.map +1 -1
- package/dist/ui-core/rendering/transcript-semantic.d.ts +0 -8
- package/dist/ui-core/rendering/transcript-semantic.js +0 -13
- package/dist/ui-core/rendering/transcript-semantic.js.map +1 -1
- package/dist/ui-core/rendering/user-message-wrap.d.ts +0 -16
- package/dist/ui-core/rendering/user-message-wrap.js +0 -16
- package/dist/ui-core/rendering/user-message-wrap.js.map +1 -1
- package/dist/ui-core/rendering/wordmark.d.ts +0 -8
- package/dist/ui-core/rendering/wordmark.js +0 -21
- package/dist/ui-core/rendering/wordmark.js.map +1 -1
- package/dist/ui-core/state/hydrate/classic-transcript.d.ts +8 -0
- package/dist/ui-core/state/hydrate/classic-transcript.js +168 -0
- package/dist/ui-core/state/hydrate/classic-transcript.js.map +1 -0
- package/dist/ui-core/state/hydrate/from-messages.d.ts +6 -0
- package/dist/ui-core/state/hydrate/from-messages.js +237 -0
- package/dist/ui-core/state/hydrate/from-messages.js.map +1 -0
- package/dist/ui-core/state/pager-search.d.ts +0 -9
- package/dist/ui-core/state/pager-search.js +1 -8
- package/dist/ui-core/state/pager-search.js.map +1 -1
- package/dist/ui-core/state/semantic-document.d.ts +0 -8
- package/dist/ui-core/state/semantic-document.js +0 -8
- package/dist/ui-core/state/semantic-document.js.map +1 -1
- package/dist/ui-core/state/thinking-copy.d.ts +0 -8
- package/dist/ui-core/state/thinking-copy.js +0 -8
- package/dist/ui-core/state/thinking-copy.js.map +1 -1
- package/dist/ui-core/state/transcript/apply-app-event.d.ts +8 -0
- package/dist/ui-core/state/transcript/apply-app-event.js +406 -0
- package/dist/ui-core/state/transcript/apply-app-event.js.map +1 -0
- package/dist/ui-core/state/transcript/message-lifecycle.d.ts +7 -0
- package/dist/ui-core/state/transcript/message-lifecycle.js +285 -0
- package/dist/ui-core/state/transcript/message-lifecycle.js.map +1 -0
- package/dist/ui-core/state/transcript-compaction.d.ts +0 -19
- package/dist/ui-core/state/transcript-compaction.js +0 -21
- package/dist/ui-core/state/transcript-compaction.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.d.ts +6 -52
- package/dist/ui-core/state/transcript-hydrate.js +5 -470
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-reducer.d.ts +1 -15
- package/dist/ui-core/state/transcript-reducer.js +1 -708
- package/dist/ui-core/state/transcript-reducer.js.map +1 -1
- package/dist/ui-core/state/transcript-search.d.ts +0 -8
- package/dist/ui-core/state/transcript-search.js +0 -8
- package/dist/ui-core/state/transcript-search.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +0 -26
- package/dist/ui-core/state/transcript-store.js +0 -28
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +0 -33
- package/dist/ui-core/state/transcript-types.js +0 -17
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/ui-core/state/transcript-window.d.ts +0 -8
- package/dist/ui-core/state/transcript-window.js +0 -8
- package/dist/ui-core/state/transcript-window.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +19 -2
- package/dist/agent/finalize-gate.d.ts +0 -54
- package/dist/agent/finalize-gate.js +0 -97
- package/dist/agent/finalize-gate.js.map +0 -1
- package/dist/agent/must-continue.d.ts +0 -36
- package/dist/agent/must-continue.js +0 -172
- package/dist/agent/must-continue.js.map +0 -1
package/dist/store/history.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
-
import {
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { isInternalChatMessage, } from "../types.js";
|
|
2
|
+
import { isInternalChatMessage } from "../types.js";
|
|
5
3
|
import { imageBudgetFor, } from "../attachments/image-content.js";
|
|
6
4
|
import { prepareImageForModel } from "../attachments/image-prepare.js";
|
|
7
5
|
import { redactSecrets } from "../llm/provider.js";
|
|
@@ -9,52 +7,18 @@ import { canonicalizeChatMessageReasoningArtifacts } from "../llm/reasoning-arti
|
|
|
9
7
|
import { redactSecretsCached } from "./redaction-cache.js";
|
|
10
8
|
import { getConfig } from "./config.js";
|
|
11
9
|
import { safeCwd } from "../os/cwd.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
function jsonlFilePath() {
|
|
24
|
-
return join(historyDirPath(), "history.jsonl");
|
|
25
|
-
}
|
|
26
|
-
function jsonlIndexFilePath() {
|
|
27
|
-
return join(historyDirPath(), "history.index.json");
|
|
28
|
-
}
|
|
29
|
-
function jsonlLockFilePath() {
|
|
30
|
-
return join(historyDirPath(), "history.jsonl.lock");
|
|
31
|
-
}
|
|
32
|
-
function jsonlLockReaperPath() {
|
|
33
|
-
return join(historyDirPath(), "history.jsonl.lock.reaper");
|
|
34
|
-
}
|
|
35
|
-
/** Sessions pruned by retention land here — never hard-deleted on autosave. */
|
|
36
|
-
function archiveFilePath() {
|
|
37
|
-
return join(historyDirPath(), "history-archive.jsonl");
|
|
38
|
-
}
|
|
39
|
-
/** Rolling pre-write snapshots of the active history file. */
|
|
40
|
-
function backupDirPath() {
|
|
41
|
-
return join(historyDirPath(), "history-backups");
|
|
42
|
-
}
|
|
43
|
-
/** Max rolling backups kept under history-backups/. */
|
|
44
|
-
const MAX_HISTORY_BACKUPS = 12;
|
|
45
|
-
const sqliteModuleName = "better-sqlite3";
|
|
46
|
-
function sessionModelFields(selection, fallback) {
|
|
47
|
-
const provider = selection?.provider ?? fallback?.provider;
|
|
48
|
-
const model = selection?.model ?? fallback?.model;
|
|
49
|
-
return {
|
|
50
|
-
...(provider ? { provider } : {}),
|
|
51
|
-
...(model ? { model } : {}),
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/** Snapshot the active session workspace for history persistence. */
|
|
10
|
+
import { getActiveSessionWorkspace } from "./session-workspace.js";
|
|
11
|
+
import { backupDirPath, compareHistoryFreshness, dedupeHistoryById, historyRevision, invalidateSessionListCache, jsonlFilePath, sortHistoryByUpdatedDesc } from "./history/recovery.js";
|
|
12
|
+
import { archiveFilePath, enforceSqliteRetention, loadDatabase, sessionModelFields, upsertSqlite } from "./history/sqlite-backend.js";
|
|
13
|
+
import { upsertJsonl } from "./history/jsonl-backend.js";
|
|
14
|
+
import { getSession } from "./history/session-queries.js";
|
|
15
|
+
export { clearAllHistory, deleteSession, purgeSession } from "./history/lifecycle.js";
|
|
16
|
+
export { listSessionSummaries, listSessions } from "./history/session-queries.js";
|
|
17
|
+
export { getSession };
|
|
18
|
+
export { partitionByRetention } from "./history/jsonl-backend.js";
|
|
19
|
+
export { recoverOrphanedHistory } from "./history/recovery.js";
|
|
20
|
+
export { compareHistoryFreshness, dedupeHistoryById, sortHistoryByUpdatedDesc };
|
|
55
21
|
function workspaceFieldsFromActive(existing) {
|
|
56
|
-
// Prefer the already-persisted folder so rebinding mid-session never
|
|
57
|
-
// renames a live workspace out from under open artifact paths.
|
|
58
22
|
if (existing?.workspaceFolder) {
|
|
59
23
|
return {
|
|
60
24
|
workspaceFolder: existing.workspaceFolder,
|
|
@@ -70,93 +34,9 @@ function workspaceFieldsFromActive(existing) {
|
|
|
70
34
|
}
|
|
71
35
|
return {};
|
|
72
36
|
}
|
|
73
|
-
let cachedDb;
|
|
74
|
-
let sqliteUnavailable = false;
|
|
75
|
-
let cachedSessionList;
|
|
76
|
-
let sessionListGeneration = 0;
|
|
77
|
-
/** Keep repeated /history opens fast while bounding cross-process staleness. */
|
|
78
|
-
const SESSION_LIST_CACHE_TTL_MS = 1_000;
|
|
79
|
-
function invalidateSessionListCache() {
|
|
80
|
-
sessionListGeneration += 1;
|
|
81
|
-
cachedSessionList = undefined;
|
|
82
|
-
}
|
|
83
|
-
async function loadDatabase() {
|
|
84
|
-
if (cachedDb)
|
|
85
|
-
return cachedDb;
|
|
86
|
-
if (sqliteUnavailable)
|
|
87
|
-
return undefined;
|
|
88
|
-
try {
|
|
89
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
90
|
-
await fixOwner(historyDirPath());
|
|
91
|
-
const imported = (await import(sqliteModuleName));
|
|
92
|
-
const Ctor = imported.default ?? imported;
|
|
93
|
-
cachedDb = new Ctor(dbFilePath());
|
|
94
|
-
fixOwnerSync(dbFilePath());
|
|
95
|
-
cachedDb.exec(`
|
|
96
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
97
|
-
id TEXT PRIMARY KEY,
|
|
98
|
-
name TEXT,
|
|
99
|
-
created_at TEXT NOT NULL,
|
|
100
|
-
updated_at TEXT NOT NULL,
|
|
101
|
-
writer_generation TEXT,
|
|
102
|
-
revision INTEGER NOT NULL DEFAULT 0,
|
|
103
|
-
cwd TEXT NOT NULL,
|
|
104
|
-
message_count INTEGER NOT NULL DEFAULT 0,
|
|
105
|
-
item_count INTEGER NOT NULL DEFAULT 0,
|
|
106
|
-
has_images INTEGER NOT NULL DEFAULT 0,
|
|
107
|
-
messages_json TEXT NOT NULL
|
|
108
|
-
);
|
|
109
|
-
CREATE TABLE IF NOT EXISTS tool_calls (
|
|
110
|
-
id TEXT PRIMARY KEY,
|
|
111
|
-
session_id TEXT NOT NULL,
|
|
112
|
-
created_at TEXT NOT NULL,
|
|
113
|
-
name TEXT NOT NULL,
|
|
114
|
-
args_json TEXT NOT NULL,
|
|
115
|
-
ok INTEGER NOT NULL,
|
|
116
|
-
exit_code INTEGER,
|
|
117
|
-
output TEXT NOT NULL,
|
|
118
|
-
FOREIGN KEY(session_id) REFERENCES sessions(id)
|
|
119
|
-
);
|
|
120
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_updated_at ON sessions(updated_at);
|
|
121
|
-
CREATE INDEX IF NOT EXISTS idx_tool_calls_session_id ON tool_calls(session_id);
|
|
122
|
-
`);
|
|
123
|
-
const sessionColumns = cachedDb
|
|
124
|
-
.prepare("PRAGMA table_info(sessions)")
|
|
125
|
-
.all();
|
|
126
|
-
if (!sessionColumns.some((column) => column.name === "writer_generation")) {
|
|
127
|
-
cachedDb.exec("ALTER TABLE sessions ADD COLUMN writer_generation TEXT;");
|
|
128
|
-
}
|
|
129
|
-
if (!sessionColumns.some((column) => column.name === "revision")) {
|
|
130
|
-
cachedDb.exec("ALTER TABLE sessions ADD COLUMN revision INTEGER NOT NULL DEFAULT 0;");
|
|
131
|
-
}
|
|
132
|
-
if (!sessionColumns.some((column) => column.name === "message_count")) {
|
|
133
|
-
cachedDb.exec("ALTER TABLE sessions ADD COLUMN message_count INTEGER NOT NULL DEFAULT 0;");
|
|
134
|
-
}
|
|
135
|
-
if (!sessionColumns.some((column) => column.name === "item_count")) {
|
|
136
|
-
cachedDb.exec("ALTER TABLE sessions ADD COLUMN item_count INTEGER NOT NULL DEFAULT 0;");
|
|
137
|
-
}
|
|
138
|
-
if (!sessionColumns.some((column) => column.name === "has_images")) {
|
|
139
|
-
cachedDb.exec("ALTER TABLE sessions ADD COLUMN has_images INTEGER NOT NULL DEFAULT 0;");
|
|
140
|
-
}
|
|
141
|
-
return cachedDb;
|
|
142
|
-
}
|
|
143
|
-
catch (err) {
|
|
144
|
-
if (err && err.code === "EACCES") {
|
|
145
|
-
handlePermissionError(err);
|
|
146
|
-
}
|
|
147
|
-
sqliteUnavailable = true;
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
37
|
function newId() {
|
|
152
38
|
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
153
39
|
}
|
|
154
|
-
function hydrateHistoryRecord(record) {
|
|
155
|
-
return {
|
|
156
|
-
...record,
|
|
157
|
-
messages: record.messages.map(canonicalizeChatMessageReasoningArtifacts),
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
40
|
function scrubMessages(messages) {
|
|
161
41
|
return messages.map((message) => {
|
|
162
42
|
const { images, ...rest } = message;
|
|
@@ -226,7 +106,6 @@ function isSettledItem(item) {
|
|
|
226
106
|
function scrubTranscript(items) {
|
|
227
107
|
if (!items)
|
|
228
108
|
return undefined;
|
|
229
|
-
// Drop UI chrome notices — they must never bloat saved history item counts.
|
|
230
109
|
const durable = items.filter((item) => item.kind !== "notice");
|
|
231
110
|
return durable.map((item) => {
|
|
232
111
|
const reusable = isSettledItem(item);
|
|
@@ -271,503 +150,11 @@ function scrubTranscriptItem(item) {
|
|
|
271
150
|
done: true,
|
|
272
151
|
};
|
|
273
152
|
default: {
|
|
274
|
-
// notice already filtered; keep exhaustiveness for future kinds
|
|
275
153
|
return item;
|
|
276
154
|
}
|
|
277
155
|
}
|
|
278
156
|
}
|
|
279
|
-
const JSONL_LOCK_STALE_MS = 60_000;
|
|
280
|
-
const JSONL_LOCK_RETRIES = 200;
|
|
281
|
-
/** Serialize stale-lock reclamation and recheck the owner while holding it. */
|
|
282
|
-
async function reapStaleJsonlLock() {
|
|
283
|
-
let reaper;
|
|
284
|
-
const reaperToken = `${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
285
|
-
try {
|
|
286
|
-
reaper = await open(jsonlLockReaperPath(), "wx", 0o600);
|
|
287
|
-
try {
|
|
288
|
-
await reaper.writeFile(reaperToken);
|
|
289
|
-
}
|
|
290
|
-
catch (error) {
|
|
291
|
-
await reaper.close().catch(() => undefined);
|
|
292
|
-
await rm(jsonlLockReaperPath(), { force: true }).catch(() => undefined);
|
|
293
|
-
throw error;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
if (error?.code !== "EEXIST")
|
|
298
|
-
throw error;
|
|
299
|
-
const existingToken = await readFile(jsonlLockReaperPath(), "utf8").catch(() => undefined);
|
|
300
|
-
const reaperStat = await stat(jsonlLockReaperPath()).catch(() => undefined);
|
|
301
|
-
if (!reaperStat ||
|
|
302
|
-
Date.now() - reaperStat.mtimeMs <= JSONL_LOCK_STALE_MS) {
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
const confirmed = await readFile(jsonlLockReaperPath(), "utf8").catch(() => undefined);
|
|
306
|
-
if (confirmed !== undefined && confirmed === existingToken) {
|
|
307
|
-
await rm(jsonlLockReaperPath(), { force: true }).catch(() => undefined);
|
|
308
|
-
}
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
try {
|
|
312
|
-
const token = await readFile(jsonlLockFilePath(), "utf8").catch(() => undefined);
|
|
313
|
-
const lockStat = await stat(jsonlLockFilePath()).catch(() => undefined);
|
|
314
|
-
if (!lockStat || Date.now() - lockStat.mtimeMs <= JSONL_LOCK_STALE_MS) {
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
// The live owner refreshes mtime periodically. A stale marker—including
|
|
318
|
-
// an empty marker left between open/write—is therefore safe to reclaim.
|
|
319
|
-
const confirmed = await readFile(jsonlLockFilePath(), "utf8").catch(() => undefined);
|
|
320
|
-
if (confirmed !== undefined && confirmed === token) {
|
|
321
|
-
await rm(jsonlLockFilePath(), { force: true });
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
finally {
|
|
325
|
-
await reaper.close().catch(() => undefined);
|
|
326
|
-
const currentReaper = await readFile(jsonlLockReaperPath(), "utf8").catch(() => undefined);
|
|
327
|
-
if (currentReaper === reaperToken) {
|
|
328
|
-
await rm(jsonlLockReaperPath(), { force: true }).catch(() => undefined);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Cross-process lock around JSONL read/modify/rename. Atomic rename protects
|
|
334
|
-
* readers, but without this lock two clai processes can both read the same
|
|
335
|
-
* base file and then each replace it, dropping whichever session they did not
|
|
336
|
-
* observe. The lock is transient and stale crash leftovers self-heal.
|
|
337
|
-
*/
|
|
338
|
-
async function acquireJsonlWriteLock() {
|
|
339
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
340
|
-
for (let attempt = 0; attempt < JSONL_LOCK_RETRIES; attempt += 1) {
|
|
341
|
-
try {
|
|
342
|
-
const token = `${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
343
|
-
const handle = await open(jsonlLockFilePath(), "wx", 0o600);
|
|
344
|
-
try {
|
|
345
|
-
await handle.writeFile(token);
|
|
346
|
-
}
|
|
347
|
-
catch (error) {
|
|
348
|
-
await handle.close().catch(() => undefined);
|
|
349
|
-
await rm(jsonlLockFilePath(), { force: true }).catch(() => undefined);
|
|
350
|
-
throw error;
|
|
351
|
-
}
|
|
352
|
-
const heartbeat = setInterval(() => {
|
|
353
|
-
const now = new Date();
|
|
354
|
-
void utimes(jsonlLockFilePath(), now, now).catch(() => undefined);
|
|
355
|
-
}, JSONL_LOCK_STALE_MS / 3);
|
|
356
|
-
heartbeat.unref();
|
|
357
|
-
return async () => {
|
|
358
|
-
clearInterval(heartbeat);
|
|
359
|
-
await handle.close().catch(() => undefined);
|
|
360
|
-
const currentToken = await readFile(jsonlLockFilePath(), "utf8").catch(() => undefined);
|
|
361
|
-
if (currentToken === token) {
|
|
362
|
-
await rm(jsonlLockFilePath(), { force: true }).catch(() => undefined);
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
catch (error) {
|
|
367
|
-
if (error?.code !== "EEXIST")
|
|
368
|
-
throw error;
|
|
369
|
-
await reapStaleJsonlLock();
|
|
370
|
-
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
throw new Error("timed out waiting for history write lock");
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Serializes every JSONL mutation through a single promise chain so concurrent
|
|
377
|
-
* autosaves never interleave a read with another writer's truncating write.
|
|
378
|
-
* Without this, a reader could observe a half-written (or momentarily empty)
|
|
379
|
-
* file and then persist back only its own record, wiping every other session.
|
|
380
|
-
*/
|
|
381
|
-
let jsonlWriteChain = Promise.resolve();
|
|
382
|
-
/** Shared one-time orphan/archive recovery; writes await it, UI listings may not. */
|
|
383
|
-
let recoveryPromise;
|
|
384
|
-
/** Queue a locked JSONL section; the chain survives individual failures. */
|
|
385
|
-
function queueJsonlWrite(operation, fallback) {
|
|
386
|
-
invalidateSessionListCache();
|
|
387
|
-
const run = jsonlWriteChain.then(async () => {
|
|
388
|
-
try {
|
|
389
|
-
await ensureHistoryRecovered();
|
|
390
|
-
const releaseLock = await acquireJsonlWriteLock();
|
|
391
|
-
try {
|
|
392
|
-
return await operation();
|
|
393
|
-
}
|
|
394
|
-
finally {
|
|
395
|
-
await releaseLock();
|
|
396
|
-
// A list may have been loaded after the pre-write invalidation but
|
|
397
|
-
// before the atomic rename completed. Never leave that snapshot cached.
|
|
398
|
-
invalidateSessionListCache();
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
catch (err) {
|
|
402
|
-
handlePermissionError(err);
|
|
403
|
-
return fallback();
|
|
404
|
-
}
|
|
405
|
-
});
|
|
406
|
-
jsonlWriteChain = run.then(() => undefined, () => undefined);
|
|
407
|
-
return run;
|
|
408
|
-
}
|
|
409
|
-
function mutateJsonl(update) {
|
|
410
|
-
return queueJsonlWrite(async () => {
|
|
411
|
-
const current = await readJsonlRecordsFrom(jsonlFilePath());
|
|
412
|
-
await writeJsonlAtomic(update(current), current.length);
|
|
413
|
-
}, () => undefined);
|
|
414
|
-
}
|
|
415
|
-
function updatedAtMs(record) {
|
|
416
|
-
const t = Date.parse(record.updatedAt || record.createdAt || "");
|
|
417
|
-
return Number.isFinite(t) ? t : 0;
|
|
418
|
-
}
|
|
419
|
-
function historyRevision(record) {
|
|
420
|
-
const revision = record?.revision;
|
|
421
|
-
return typeof revision === "number" &&
|
|
422
|
-
Number.isSafeInteger(revision) &&
|
|
423
|
-
revision > 0
|
|
424
|
-
? revision
|
|
425
|
-
: 0;
|
|
426
|
-
}
|
|
427
|
-
function historyWriterGeneration(record) {
|
|
428
|
-
const generation = record?.writerGeneration;
|
|
429
|
-
return typeof generation === "string" && generation.length > 0
|
|
430
|
-
? generation
|
|
431
|
-
: undefined;
|
|
432
|
-
}
|
|
433
|
-
/**
|
|
434
|
-
* Compare snapshots by writer generation, then capture revision. Legacy rows
|
|
435
|
-
* without a generation retain revision/timestamp fallback for compatibility.
|
|
436
|
-
*/
|
|
437
|
-
export function compareHistoryFreshness(left, right) {
|
|
438
|
-
const leftGeneration = historyWriterGeneration(left);
|
|
439
|
-
const rightGeneration = historyWriterGeneration(right);
|
|
440
|
-
if (leftGeneration || rightGeneration) {
|
|
441
|
-
if (!leftGeneration)
|
|
442
|
-
return -1;
|
|
443
|
-
if (!rightGeneration)
|
|
444
|
-
return 1;
|
|
445
|
-
const generationDelta = leftGeneration.localeCompare(rightGeneration);
|
|
446
|
-
if (generationDelta !== 0)
|
|
447
|
-
return generationDelta;
|
|
448
|
-
}
|
|
449
|
-
const revisionDelta = historyRevision(left) - historyRevision(right);
|
|
450
|
-
if (revisionDelta !== 0)
|
|
451
|
-
return revisionDelta;
|
|
452
|
-
if (historyRevision(left) > 0)
|
|
453
|
-
return 0;
|
|
454
|
-
return updatedAtMs(left) - updatedAtMs(right);
|
|
455
|
-
}
|
|
456
|
-
/** Keep the newest captured version of each session id. */
|
|
457
|
-
export function dedupeHistoryById(records) {
|
|
458
|
-
const byId = new Map();
|
|
459
|
-
for (const record of records) {
|
|
460
|
-
if (!record?.id)
|
|
461
|
-
continue;
|
|
462
|
-
const prev = byId.get(record.id);
|
|
463
|
-
// Preserve the first source on an exact tie. JSONL is passed first during
|
|
464
|
-
// cross-backend merge and is the durable canonical copy.
|
|
465
|
-
if (!prev || compareHistoryFreshness(record, prev) > 0) {
|
|
466
|
-
byId.set(record.id, record);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
return [...byId.values()];
|
|
470
|
-
}
|
|
471
|
-
export function sortHistoryByUpdatedDesc(records) {
|
|
472
|
-
return [...records].sort((a, b) => updatedAtMs(b) - updatedAtMs(a));
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* Apply retention by *recency* (not file order). Pruned sessions are returned
|
|
476
|
-
* separately so callers can archive them — never silently destroy history.
|
|
477
|
-
* limit <= 0 means unlimited (keep everything).
|
|
478
|
-
*/
|
|
479
|
-
export function partitionByRetention(records, limit) {
|
|
480
|
-
const unique = sortHistoryByUpdatedDesc(dedupeHistoryById(records));
|
|
481
|
-
if (!limit || limit <= 0 || unique.length <= limit) {
|
|
482
|
-
return { kept: unique, pruned: [] };
|
|
483
|
-
}
|
|
484
|
-
return {
|
|
485
|
-
kept: unique.slice(0, limit),
|
|
486
|
-
pruned: unique.slice(limit),
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
/** Read and parse all valid JSONL records from any path. */
|
|
490
|
-
async function readJsonlRecordsFrom(path) {
|
|
491
|
-
if (!(await safeExists(path)))
|
|
492
|
-
return [];
|
|
493
|
-
try {
|
|
494
|
-
const raw = await readFile(path, "utf8");
|
|
495
|
-
return raw
|
|
496
|
-
.split("\n")
|
|
497
|
-
.filter(Boolean)
|
|
498
|
-
.map((line) => {
|
|
499
|
-
try {
|
|
500
|
-
return JSON.parse(line);
|
|
501
|
-
}
|
|
502
|
-
catch {
|
|
503
|
-
return null;
|
|
504
|
-
}
|
|
505
|
-
})
|
|
506
|
-
.filter((record) => record !== null)
|
|
507
|
-
.map(hydrateHistoryRecord);
|
|
508
|
-
}
|
|
509
|
-
catch (err) {
|
|
510
|
-
if (err && err.code === "EACCES")
|
|
511
|
-
handlePermissionError(err);
|
|
512
|
-
return [];
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
/** Session count without parsing the whole file when the index is valid. */
|
|
516
|
-
async function countJsonlSessions() {
|
|
517
|
-
const entries = await readValidatedHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
518
|
-
if (entries)
|
|
519
|
-
return entries.length;
|
|
520
|
-
return (await readJsonlRecordsFrom(jsonlFilePath())).length;
|
|
521
|
-
}
|
|
522
|
-
async function appendRecordsToFile(path, records) {
|
|
523
|
-
if (records.length === 0)
|
|
524
|
-
return;
|
|
525
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
526
|
-
await fixOwner(historyDirPath());
|
|
527
|
-
const chunk = `${records.map((r) => JSON.stringify(r)).join("\n")}\n`;
|
|
528
|
-
// Append is best-effort durable; archive growth is unbounded by design so
|
|
529
|
-
// retention never permanently loses a conversation.
|
|
530
|
-
await appendFile(path, chunk, { mode: 0o600 });
|
|
531
|
-
await fixOwner(path).catch(() => undefined);
|
|
532
|
-
}
|
|
533
|
-
async function backupActiveHistory() {
|
|
534
|
-
if (!(await safeExists(jsonlFilePath())))
|
|
535
|
-
return;
|
|
536
|
-
try {
|
|
537
|
-
await mkdir(backupDirPath(), { recursive: true });
|
|
538
|
-
await fixOwner(backupDirPath());
|
|
539
|
-
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
540
|
-
const dest = join(backupDirPath(), `history-${stamp}.jsonl`);
|
|
541
|
-
await copyFile(jsonlFilePath(), dest);
|
|
542
|
-
await fixOwner(dest).catch(() => undefined);
|
|
543
|
-
// Keep only the newest N backups.
|
|
544
|
-
const names = (await readdir(backupDirPath()))
|
|
545
|
-
.filter((n) => n.startsWith("history-") && n.endsWith(".jsonl"))
|
|
546
|
-
.sort()
|
|
547
|
-
.reverse();
|
|
548
|
-
for (const old of names.slice(MAX_HISTORY_BACKUPS)) {
|
|
549
|
-
await rm(join(backupDirPath(), old), { force: true }).catch(() => undefined);
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
catch {
|
|
553
|
-
// Backup is best-effort; never block the autosave path.
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
// Restore backups only for a missing/corrupt active file, then merge orphan write temps.
|
|
557
|
-
export async function recoverOrphanedHistory() {
|
|
558
|
-
const sources = [];
|
|
559
|
-
const tempSources = [];
|
|
560
|
-
const releaseLock = await acquireJsonlWriteLock();
|
|
561
|
-
try {
|
|
562
|
-
const activePath = jsonlFilePath();
|
|
563
|
-
const activeExists = await safeExists(activePath);
|
|
564
|
-
const tempNames = await readdir(historyDirPath())
|
|
565
|
-
.then((names) => names.filter((name) => name.startsWith("history.jsonl.") && name.endsWith(".tmp")))
|
|
566
|
-
.catch(() => []);
|
|
567
|
-
if (activeExists && tempNames.length === 0) {
|
|
568
|
-
const indexed = await readValidatedHistoryIndex(activePath, jsonlIndexFilePath());
|
|
569
|
-
if (indexed)
|
|
570
|
-
return { recovered: 0, sources };
|
|
571
|
-
const rebuilt = await rebuildHistoryIndexWithStatus(activePath, jsonlIndexFilePath());
|
|
572
|
-
if (!rebuilt.malformed)
|
|
573
|
-
return { recovered: 0, sources };
|
|
574
|
-
}
|
|
575
|
-
let activeCorrupt = false;
|
|
576
|
-
let active = [];
|
|
577
|
-
if (activeExists) {
|
|
578
|
-
try {
|
|
579
|
-
const raw = await readFile(activePath, "utf8");
|
|
580
|
-
const lines = raw.split("\n").filter((line) => line.trim().length > 0);
|
|
581
|
-
for (const line of lines) {
|
|
582
|
-
try {
|
|
583
|
-
active.push(hydrateHistoryRecord(JSON.parse(line)));
|
|
584
|
-
}
|
|
585
|
-
catch {
|
|
586
|
-
activeCorrupt = true;
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
catch (error) {
|
|
591
|
-
if (error?.code === "EACCES")
|
|
592
|
-
handlePermissionError(error);
|
|
593
|
-
activeCorrupt = true;
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
const backupRecords = [];
|
|
597
|
-
if (!activeExists || activeCorrupt) {
|
|
598
|
-
try {
|
|
599
|
-
const backups = (await readdir(backupDirPath()))
|
|
600
|
-
.filter((name) => name.startsWith("history-") && name.endsWith(".jsonl"))
|
|
601
|
-
.sort()
|
|
602
|
-
.reverse();
|
|
603
|
-
for (const name of backups) {
|
|
604
|
-
const rows = await readJsonlRecordsFrom(join(backupDirPath(), name));
|
|
605
|
-
if (rows.length === 0)
|
|
606
|
-
continue;
|
|
607
|
-
backupRecords.push(...rows);
|
|
608
|
-
sources.push(`history-backups/${name}`);
|
|
609
|
-
break;
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
catch {
|
|
613
|
-
// No usable backup directory.
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
const extras = [];
|
|
617
|
-
try {
|
|
618
|
-
const names = await readdir(historyDirPath());
|
|
619
|
-
for (const name of names) {
|
|
620
|
-
if (!name.startsWith("history.jsonl.") || !name.endsWith(".tmp")) {
|
|
621
|
-
continue;
|
|
622
|
-
}
|
|
623
|
-
const path = join(historyDirPath(), name);
|
|
624
|
-
const rows = await readJsonlRecordsFrom(path);
|
|
625
|
-
if (rows.length === 0) {
|
|
626
|
-
await rm(path, { force: true }).catch(() => undefined);
|
|
627
|
-
continue;
|
|
628
|
-
}
|
|
629
|
-
extras.push(...rows);
|
|
630
|
-
sources.push(name);
|
|
631
|
-
tempSources.push(name);
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
catch {
|
|
635
|
-
// History directory may not exist yet.
|
|
636
|
-
}
|
|
637
|
-
const activeById = new Map(active.map((record) => [record.id, record]));
|
|
638
|
-
const merged = dedupeHistoryById([...active, ...backupRecords, ...extras]);
|
|
639
|
-
const recoveredCount = merged.filter((record) => {
|
|
640
|
-
const previous = activeById.get(record.id);
|
|
641
|
-
return !previous || compareHistoryFreshness(record, previous) > 0;
|
|
642
|
-
}).length;
|
|
643
|
-
const needsRewrite = activeCorrupt ||
|
|
644
|
-
(!activeExists && backupRecords.length > 0) ||
|
|
645
|
-
recoveredCount > 0;
|
|
646
|
-
if (!needsRewrite)
|
|
647
|
-
return { recovered: 0, sources };
|
|
648
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
649
|
-
await fixOwner(historyDirPath());
|
|
650
|
-
if (activeExists && !activeCorrupt)
|
|
651
|
-
await backupActiveHistory();
|
|
652
|
-
const sorted = sortHistoryByUpdatedDesc(merged);
|
|
653
|
-
sorted.reverse();
|
|
654
|
-
await writeIndexedJsonl(activePath, jsonlIndexFilePath(), sorted);
|
|
655
|
-
await Promise.all([
|
|
656
|
-
fixOwner(activePath),
|
|
657
|
-
fixOwner(jsonlIndexFilePath()),
|
|
658
|
-
]);
|
|
659
|
-
for (const name of tempSources) {
|
|
660
|
-
await rm(join(historyDirPath(), name), { force: true }).catch(() => undefined);
|
|
661
|
-
}
|
|
662
|
-
return { recovered: recoveredCount, sources };
|
|
663
|
-
}
|
|
664
|
-
finally {
|
|
665
|
-
await releaseLock();
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
function startHistoryRecovery() {
|
|
669
|
-
if (!recoveryPromise) {
|
|
670
|
-
recoveryPromise = recoverOrphanedHistory()
|
|
671
|
-
.then(() => undefined, () => undefined)
|
|
672
|
-
.finally(() => {
|
|
673
|
-
// A background recovery may have merged archive/temp records after a
|
|
674
|
-
// picker list was published; force the next /history to refresh.
|
|
675
|
-
invalidateSessionListCache();
|
|
676
|
-
});
|
|
677
|
-
}
|
|
678
|
-
return recoveryPromise;
|
|
679
|
-
}
|
|
680
|
-
async function ensureHistoryRecovered() {
|
|
681
|
-
await startHistoryRecovery();
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* Apply retention (archive pruned sessions) and write the active file
|
|
685
|
-
* atomically. Never hard-deletes pruned chats — they go to history-archive.jsonl.
|
|
686
|
-
*/
|
|
687
|
-
async function writeJsonlAtomic(records, knownExistingCount) {
|
|
688
|
-
invalidateSessionListCache();
|
|
689
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
690
|
-
await fixOwner(historyDirPath());
|
|
691
|
-
const limit = getConfig().historyRetentionLimit;
|
|
692
|
-
const { kept, pruned } = partitionByRetention(records, limit);
|
|
693
|
-
if (pruned.length > 0) {
|
|
694
|
-
// Durable archive before the active file shrinks.
|
|
695
|
-
await appendRecordsToFile(archiveFilePath(), pruned);
|
|
696
|
-
}
|
|
697
|
-
// If we would shrink (or replace) the on-disk set, snapshot first.
|
|
698
|
-
if (await safeExists(jsonlFilePath())) {
|
|
699
|
-
const existingCount = knownExistingCount ?? (await countJsonlSessions());
|
|
700
|
-
if (kept.length < existingCount || pruned.length > 0) {
|
|
701
|
-
await backupActiveHistory();
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
// Refuse to write an empty file over a non-empty one unless the caller
|
|
705
|
-
// intentionally has zero records (e.g. clear after archiving).
|
|
706
|
-
if (kept.length === 0 && (await safeExists(jsonlFilePath()))) {
|
|
707
|
-
const existing = await readJsonlRecordsFrom(jsonlFilePath());
|
|
708
|
-
if (existing.length > 0 && records.length > 0) {
|
|
709
|
-
// Something went wrong in partitioning — keep the safer set.
|
|
710
|
-
const safe = sortHistoryByUpdatedDesc(dedupeHistoryById(existing));
|
|
711
|
-
safe.reverse();
|
|
712
|
-
await writeIndexedJsonl(jsonlFilePath(), jsonlIndexFilePath(), safe);
|
|
713
|
-
await Promise.all([
|
|
714
|
-
fixOwner(jsonlFilePath()),
|
|
715
|
-
fixOwner(jsonlIndexFilePath()),
|
|
716
|
-
]);
|
|
717
|
-
return;
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
// File order: oldest → newest (matches classic append style).
|
|
721
|
-
const ordered = sortHistoryByUpdatedDesc(kept);
|
|
722
|
-
ordered.reverse();
|
|
723
|
-
await writeIndexedJsonl(jsonlFilePath(), jsonlIndexFilePath(), ordered);
|
|
724
|
-
await Promise.all([
|
|
725
|
-
fixOwner(jsonlFilePath()),
|
|
726
|
-
fixOwner(jsonlIndexFilePath()),
|
|
727
|
-
]);
|
|
728
|
-
}
|
|
729
|
-
function serializeSessionPayload(record) {
|
|
730
|
-
return JSON.stringify({
|
|
731
|
-
messages: record.messages,
|
|
732
|
-
transcript: record.transcript,
|
|
733
|
-
...(record.contextUsage ? { contextUsage: record.contextUsage } : {}),
|
|
734
|
-
...(record.previousTurn ? { previousTurn: record.previousTurn } : {}),
|
|
735
|
-
...sessionModelFields(record),
|
|
736
|
-
...(record.workspaceFolder
|
|
737
|
-
? {
|
|
738
|
-
workspaceFolder: record.workspaceFolder,
|
|
739
|
-
workspaceCode: record.workspaceCode,
|
|
740
|
-
}
|
|
741
|
-
: {}),
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
/** SQLite mirror write with atomic generation/revision rejection. */
|
|
745
|
-
function upsertSqlite(db, record) {
|
|
746
|
-
const summary = historySummary(record);
|
|
747
|
-
db.prepare(`INSERT INTO sessions
|
|
748
|
-
(id, name, created_at, updated_at, writer_generation, revision, cwd,
|
|
749
|
-
message_count, item_count, has_images, messages_json)
|
|
750
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
751
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
752
|
-
name = excluded.name,
|
|
753
|
-
created_at = excluded.created_at,
|
|
754
|
-
updated_at = excluded.updated_at,
|
|
755
|
-
writer_generation = excluded.writer_generation,
|
|
756
|
-
revision = excluded.revision,
|
|
757
|
-
cwd = excluded.cwd,
|
|
758
|
-
message_count = excluded.message_count,
|
|
759
|
-
item_count = excluded.item_count,
|
|
760
|
-
has_images = excluded.has_images,
|
|
761
|
-
messages_json = excluded.messages_json
|
|
762
|
-
WHERE (sessions.writer_generation IS NULL AND excluded.writer_generation IS NOT NULL)
|
|
763
|
-
OR excluded.writer_generation > sessions.writer_generation
|
|
764
|
-
OR (excluded.writer_generation = sessions.writer_generation
|
|
765
|
-
AND excluded.revision >= sessions.revision)
|
|
766
|
-
OR (sessions.writer_generation IS NULL AND excluded.writer_generation IS NULL
|
|
767
|
-
AND excluded.revision >= sessions.revision)`).run(record.id, record.name ?? null, record.createdAt, record.updatedAt, historyWriterGeneration(record) ?? null, historyRevision(record), record.cwd, summary.messageCount, summary.itemCount, summary.hasImages ? 1 : 0, serializeSessionPayload(record));
|
|
768
|
-
}
|
|
769
157
|
export async function saveSession(messages, name, transcript, contextUsage, revision, writerGeneration, previousTurn, sessionModel) {
|
|
770
|
-
// Auto-derive a readable name from the first real user message if none provided
|
|
771
158
|
if (!name) {
|
|
772
159
|
const firstUser = messages.find((m) => m.role === "user" && !isInternalChatMessage(m));
|
|
773
160
|
if (firstUser) {
|
|
@@ -794,8 +181,6 @@ export async function saveSession(messages, name, transcript, contextUsage, revi
|
|
|
794
181
|
...sessionModelFields(sessionModel),
|
|
795
182
|
...workspace,
|
|
796
183
|
};
|
|
797
|
-
// Private mode: never persist chat content. Caller still gets a record
|
|
798
|
-
// back (so /save echoes a usable id) but nothing hits disk.
|
|
799
184
|
if (getConfig().privateMode)
|
|
800
185
|
return record;
|
|
801
186
|
invalidateSessionListCache();
|
|
@@ -864,90 +249,6 @@ export async function upsertSession(id, messages, name, transcript, contextUsage
|
|
|
864
249
|
}
|
|
865
250
|
return canonical;
|
|
866
251
|
}
|
|
867
|
-
async function enforceSqliteRetention(db) {
|
|
868
|
-
const limit = getConfig().historyRetentionLimit;
|
|
869
|
-
if (!limit || limit <= 0)
|
|
870
|
-
return;
|
|
871
|
-
// Archive rows about to be deleted, then delete — never hard-drop without
|
|
872
|
-
// a JSONL archive copy.
|
|
873
|
-
try {
|
|
874
|
-
const doomed = db
|
|
875
|
-
.prepare(`SELECT id, name, created_at, updated_at, writer_generation, revision, cwd, messages_json FROM sessions
|
|
876
|
-
WHERE id NOT IN (SELECT id FROM sessions ORDER BY updated_at DESC LIMIT ?)`)
|
|
877
|
-
.all(Math.floor(limit));
|
|
878
|
-
const records = doomed.map(rowToSession);
|
|
879
|
-
if (records.length > 0)
|
|
880
|
-
await appendRecordsToFile(archiveFilePath(), records);
|
|
881
|
-
}
|
|
882
|
-
catch {
|
|
883
|
-
/* archive best-effort */
|
|
884
|
-
}
|
|
885
|
-
db.exec(`DELETE FROM sessions WHERE id NOT IN (SELECT id FROM sessions ORDER BY updated_at DESC LIMIT ${Math.floor(limit)});`);
|
|
886
|
-
}
|
|
887
|
-
/** Below this size a full rewrite is cheap enough to skip compaction. */
|
|
888
|
-
const HISTORY_COMPACT_MIN_BYTES = 1_000_000;
|
|
889
|
-
/** Compact once dead (superseded) lines dominate the active file. */
|
|
890
|
-
const HISTORY_COMPACT_LIVE_RATIO = 0.6;
|
|
891
|
-
function summaryFreshness(summary) {
|
|
892
|
-
return {
|
|
893
|
-
id: summary.id,
|
|
894
|
-
writerGeneration: summary.writerGeneration,
|
|
895
|
-
revision: summary.revision,
|
|
896
|
-
createdAt: summary.createdAt,
|
|
897
|
-
updatedAt: summary.updatedAt,
|
|
898
|
-
cwd: summary.cwd,
|
|
899
|
-
messages: [],
|
|
900
|
-
};
|
|
901
|
-
}
|
|
902
|
-
function shouldCompactHistory(result) {
|
|
903
|
-
const limit = getConfig().historyRetentionLimit;
|
|
904
|
-
if (limit > 0 && result.entries.length > limit)
|
|
905
|
-
return true;
|
|
906
|
-
if (result.fileSize < HISTORY_COMPACT_MIN_BYTES)
|
|
907
|
-
return false;
|
|
908
|
-
return result.liveBytes / result.fileSize < HISTORY_COMPACT_LIVE_RATIO;
|
|
909
|
-
}
|
|
910
|
-
async function compactJsonlUnderLock() {
|
|
911
|
-
const records = await readJsonlRecordsFrom(jsonlFilePath());
|
|
912
|
-
await writeJsonlAtomic(records, records.length);
|
|
913
|
-
}
|
|
914
|
-
async function upsertJsonlUnderLock(record) {
|
|
915
|
-
await mkdir(historyDirPath(), { recursive: true });
|
|
916
|
-
await fixOwner(historyDirPath());
|
|
917
|
-
const entries = await readValidatedHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
918
|
-
if (!entries) {
|
|
919
|
-
const current = await readJsonlRecordsFrom(jsonlFilePath());
|
|
920
|
-
const index = current.findIndex((item) => item.id === record.id);
|
|
921
|
-
const existing = index >= 0 ? current[index] : undefined;
|
|
922
|
-
if (existing && compareHistoryFreshness(record, existing) <= 0) {
|
|
923
|
-
return existing;
|
|
924
|
-
}
|
|
925
|
-
if (index >= 0)
|
|
926
|
-
current[index] = record;
|
|
927
|
-
else
|
|
928
|
-
current.push(record);
|
|
929
|
-
await writeJsonlAtomic(current, current.length);
|
|
930
|
-
return record;
|
|
931
|
-
}
|
|
932
|
-
const existingEntry = entries.find((entry) => entry.id === record.id);
|
|
933
|
-
if (existingEntry &&
|
|
934
|
-
compareHistoryFreshness(record, summaryFreshness(existingEntry.summary)) <= 0) {
|
|
935
|
-
const stored = await readIndexedHistoryRecord(jsonlFilePath(), existingEntry);
|
|
936
|
-
if (stored)
|
|
937
|
-
return hydrateHistoryRecord(stored);
|
|
938
|
-
}
|
|
939
|
-
const result = await appendIndexedHistoryRecord(jsonlFilePath(), jsonlIndexFilePath(), entries, record);
|
|
940
|
-
await Promise.all([
|
|
941
|
-
fixOwner(jsonlFilePath()).catch(() => undefined),
|
|
942
|
-
fixOwner(jsonlIndexFilePath()).catch(() => undefined),
|
|
943
|
-
]);
|
|
944
|
-
if (shouldCompactHistory(result))
|
|
945
|
-
await compactJsonlUnderLock();
|
|
946
|
-
return record;
|
|
947
|
-
}
|
|
948
|
-
async function upsertJsonl(record) {
|
|
949
|
-
return queueJsonlWrite(() => upsertJsonlUnderLock(record), () => record);
|
|
950
|
-
}
|
|
951
252
|
export async function saveToolCall(sessionId, call, result) {
|
|
952
253
|
const record = {
|
|
953
254
|
id: newId(),
|
|
@@ -966,512 +267,9 @@ export async function saveToolCall(sessionId, call, result) {
|
|
|
966
267
|
}
|
|
967
268
|
return record;
|
|
968
269
|
}
|
|
969
|
-
function rowToSession(row) {
|
|
970
|
-
const data = row;
|
|
971
|
-
const parsed = JSON.parse(data.messages_json);
|
|
972
|
-
let payload = {};
|
|
973
|
-
let messages;
|
|
974
|
-
if (Array.isArray(parsed)) {
|
|
975
|
-
messages = parsed;
|
|
976
|
-
}
|
|
977
|
-
else {
|
|
978
|
-
payload = parsed;
|
|
979
|
-
messages = parsed.messages ?? [];
|
|
980
|
-
}
|
|
981
|
-
return hydrateHistoryRecord({
|
|
982
|
-
id: data.id,
|
|
983
|
-
writerGeneration: data.writer_generation ?? undefined,
|
|
984
|
-
revision: typeof data.revision === "number" && data.revision > 0
|
|
985
|
-
? data.revision
|
|
986
|
-
: undefined,
|
|
987
|
-
name: data.name ?? undefined,
|
|
988
|
-
createdAt: data.created_at,
|
|
989
|
-
updatedAt: data.updated_at,
|
|
990
|
-
cwd: data.cwd,
|
|
991
|
-
messages,
|
|
992
|
-
transcript: payload.transcript,
|
|
993
|
-
contextUsage: payload.contextUsage,
|
|
994
|
-
previousTurn: payload.previousTurn,
|
|
995
|
-
provider: payload.provider,
|
|
996
|
-
model: payload.model,
|
|
997
|
-
workspaceFolder: payload.workspaceFolder,
|
|
998
|
-
workspaceCode: payload.workspaceCode,
|
|
999
|
-
});
|
|
1000
|
-
}
|
|
1001
|
-
function rowToSummary(row) {
|
|
1002
|
-
const data = row;
|
|
1003
|
-
return {
|
|
1004
|
-
id: data.id,
|
|
1005
|
-
...(data.writer_generation
|
|
1006
|
-
? { writerGeneration: data.writer_generation }
|
|
1007
|
-
: {}),
|
|
1008
|
-
...(typeof data.revision === "number" && data.revision > 0
|
|
1009
|
-
? { revision: data.revision }
|
|
1010
|
-
: {}),
|
|
1011
|
-
...(data.name ? { name: data.name } : {}),
|
|
1012
|
-
createdAt: data.created_at,
|
|
1013
|
-
updatedAt: data.updated_at,
|
|
1014
|
-
cwd: data.cwd,
|
|
1015
|
-
messageCount: Math.max(0, data.message_count ?? 0),
|
|
1016
|
-
itemCount: Math.max(0, data.item_count ?? data.message_count ?? 0),
|
|
1017
|
-
hasImages: data.has_images === 1,
|
|
1018
|
-
};
|
|
1019
|
-
}
|
|
1020
|
-
function sortSummaries(summaries) {
|
|
1021
|
-
return [...summaries].sort((left, right) => Date.parse(right.updatedAt || right.createdAt) -
|
|
1022
|
-
Date.parse(left.updatedAt || left.createdAt));
|
|
1023
|
-
}
|
|
1024
|
-
export async function listSessionSummaries(limit = 20, options = {}) {
|
|
1025
|
-
if (options.recovery === "blocking")
|
|
1026
|
-
await ensureHistoryRecovered();
|
|
1027
|
-
else
|
|
1028
|
-
void startHistoryRecovery();
|
|
1029
|
-
const cacheKey = historyDirPath();
|
|
1030
|
-
const requestedLimit = limit > 0 ? Math.floor(limit) : 0;
|
|
1031
|
-
const now = Date.now();
|
|
1032
|
-
if (cachedSessionList?.historyDir === cacheKey &&
|
|
1033
|
-
now - cachedSessionList.cachedAt <= SESSION_LIST_CACHE_TTL_MS &&
|
|
1034
|
-
(cachedSessionList.coversAll ||
|
|
1035
|
-
(requestedLimit > 0 &&
|
|
1036
|
-
requestedLimit <= cachedSessionList.summaries.length))) {
|
|
1037
|
-
const cached = cachedSessionList.summaries;
|
|
1038
|
-
return requestedLimit > 0 ? cached.slice(0, requestedLimit) : [...cached];
|
|
1039
|
-
}
|
|
1040
|
-
const loadGeneration = sessionListGeneration;
|
|
1041
|
-
let summaries;
|
|
1042
|
-
let coversAll = false;
|
|
1043
|
-
const entries = await readValidatedHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
1044
|
-
if (entries) {
|
|
1045
|
-
summaries = sortSummaries(entries.map((entry) => entry.summary));
|
|
1046
|
-
coversAll = true;
|
|
1047
|
-
}
|
|
1048
|
-
if (!summaries) {
|
|
1049
|
-
const db = await loadDatabase();
|
|
1050
|
-
if (db) {
|
|
1051
|
-
try {
|
|
1052
|
-
const sql = "SELECT id, name, created_at, updated_at, writer_generation, revision, cwd, " +
|
|
1053
|
-
"message_count, item_count, has_images FROM sessions " +
|
|
1054
|
-
"ORDER BY updated_at DESC" +
|
|
1055
|
-
(requestedLimit > 0 ? " LIMIT ?" : "");
|
|
1056
|
-
const rows = requestedLimit > 0
|
|
1057
|
-
? db.prepare(sql).all(requestedLimit)
|
|
1058
|
-
: db.prepare(sql).all();
|
|
1059
|
-
summaries = rows.map(rowToSummary);
|
|
1060
|
-
coversAll = requestedLimit === 0 || rows.length < requestedLimit;
|
|
1061
|
-
}
|
|
1062
|
-
catch {
|
|
1063
|
-
summaries = undefined;
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
if (!summaries || summaries.length === 0) {
|
|
1068
|
-
const rebuilt = await rebuildHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
1069
|
-
summaries = sortSummaries(rebuilt.map((entry) => entry.summary));
|
|
1070
|
-
coversAll = true;
|
|
1071
|
-
}
|
|
1072
|
-
else {
|
|
1073
|
-
void rebuildHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
1074
|
-
}
|
|
1075
|
-
if (sessionListGeneration === loadGeneration) {
|
|
1076
|
-
cachedSessionList = {
|
|
1077
|
-
historyDir: cacheKey,
|
|
1078
|
-
summaries,
|
|
1079
|
-
cachedAt: Date.now(),
|
|
1080
|
-
coversAll,
|
|
1081
|
-
};
|
|
1082
|
-
}
|
|
1083
|
-
return requestedLimit > 0 ? summaries.slice(0, requestedLimit) : [...summaries];
|
|
1084
|
-
}
|
|
1085
|
-
async function listJsonlSessions(limit) {
|
|
1086
|
-
try {
|
|
1087
|
-
const records = sortHistoryByUpdatedDesc(dedupeHistoryById(await readJsonlRecordsFrom(jsonlFilePath())));
|
|
1088
|
-
if (!limit || limit <= 0)
|
|
1089
|
-
return records;
|
|
1090
|
-
return records.slice(0, limit);
|
|
1091
|
-
}
|
|
1092
|
-
catch (err) {
|
|
1093
|
-
if (err && err.code === "EACCES") {
|
|
1094
|
-
handlePermissionError(err);
|
|
1095
|
-
}
|
|
1096
|
-
return [];
|
|
1097
|
-
}
|
|
1098
|
-
}
|
|
1099
|
-
function mergeSessionLists(...lists) {
|
|
1100
|
-
return sortHistoryByUpdatedDesc(dedupeHistoryById(lists.flat()));
|
|
1101
|
-
}
|
|
1102
|
-
export async function listSessions(limit = 20, options = {}) {
|
|
1103
|
-
if (options.recovery === "background")
|
|
1104
|
-
void startHistoryRecovery();
|
|
1105
|
-
else
|
|
1106
|
-
await ensureHistoryRecovered();
|
|
1107
|
-
const [fromJsonl, db] = await Promise.all([
|
|
1108
|
-
listJsonlSessions(0),
|
|
1109
|
-
loadDatabase(),
|
|
1110
|
-
]);
|
|
1111
|
-
let fromDb = [];
|
|
1112
|
-
if (db) {
|
|
1113
|
-
try {
|
|
1114
|
-
const rows = db
|
|
1115
|
-
.prepare("SELECT id, name, created_at, updated_at, writer_generation, revision, cwd, messages_json FROM sessions ORDER BY updated_at DESC")
|
|
1116
|
-
.all();
|
|
1117
|
-
fromDb = rows.map(rowToSession);
|
|
1118
|
-
}
|
|
1119
|
-
catch {
|
|
1120
|
-
fromDb = [];
|
|
1121
|
-
}
|
|
1122
|
-
}
|
|
1123
|
-
const merged = mergeSessionLists(fromJsonl, fromDb);
|
|
1124
|
-
return !limit || limit <= 0 ? merged : merged.slice(0, limit);
|
|
1125
|
-
}
|
|
1126
|
-
export async function getSession(sessionId) {
|
|
1127
|
-
void startHistoryRecovery();
|
|
1128
|
-
const entries = await readValidatedHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
1129
|
-
const entry = entries?.find((candidate) => candidate.id === sessionId);
|
|
1130
|
-
if (entry) {
|
|
1131
|
-
const indexed = await readIndexedHistoryRecord(jsonlFilePath(), entry);
|
|
1132
|
-
if (indexed)
|
|
1133
|
-
return hydrateHistoryRecord(indexed);
|
|
1134
|
-
}
|
|
1135
|
-
const db = await loadDatabase();
|
|
1136
|
-
if (db) {
|
|
1137
|
-
try {
|
|
1138
|
-
const row = db
|
|
1139
|
-
.prepare("SELECT id, name, created_at, updated_at, writer_generation, revision, cwd, messages_json FROM sessions WHERE id = ?")
|
|
1140
|
-
.get(sessionId);
|
|
1141
|
-
if (row)
|
|
1142
|
-
return rowToSession(row);
|
|
1143
|
-
}
|
|
1144
|
-
catch {
|
|
1145
|
-
// Fall through to streaming JSONL lookup.
|
|
1146
|
-
}
|
|
1147
|
-
}
|
|
1148
|
-
const active = await findHistoryRecordStreaming(jsonlFilePath(), sessionId);
|
|
1149
|
-
if (active) {
|
|
1150
|
-
void rebuildHistoryIndex(jsonlFilePath(), jsonlIndexFilePath());
|
|
1151
|
-
return hydrateHistoryRecord(active);
|
|
1152
|
-
}
|
|
1153
|
-
const archived = await findHistoryRecordStreaming(archiveFilePath(), sessionId);
|
|
1154
|
-
return archived ? hydrateHistoryRecord(archived) : undefined;
|
|
1155
|
-
}
|
|
1156
270
|
export function getHistoryPath() {
|
|
1157
|
-
// Prefer JSONL as the durable path users can inspect/backup; SQLite is
|
|
1158
|
-
// optional acceleration when better-sqlite3 is installed.
|
|
1159
271
|
return jsonlFilePath();
|
|
1160
272
|
}
|
|
1161
|
-
export async function clearAllHistory() {
|
|
1162
|
-
await ensureHistoryRecovered();
|
|
1163
|
-
const details = [];
|
|
1164
|
-
try {
|
|
1165
|
-
invalidateSessionListCache();
|
|
1166
|
-
const db = await loadDatabase();
|
|
1167
|
-
if (db) {
|
|
1168
|
-
db.exec("DELETE FROM sessions; DELETE FROM tool_calls; PRAGMA wal_checkpoint(TRUNCATE); VACUUM;");
|
|
1169
|
-
details.push("sqlite cleared");
|
|
1170
|
-
}
|
|
1171
|
-
}
|
|
1172
|
-
catch (error) {
|
|
1173
|
-
details.push(`sqlite error: ${error instanceof Error ? error.message : String(error)}`);
|
|
1174
|
-
}
|
|
1175
|
-
const releaseLock = await acquireJsonlWriteLock();
|
|
1176
|
-
try {
|
|
1177
|
-
const names = await readdir(historyDirPath()).catch(() => []);
|
|
1178
|
-
const removable = names.filter((name) => name === "history.jsonl" ||
|
|
1179
|
-
name === "history.index.json" ||
|
|
1180
|
-
name === "history-archive.jsonl" ||
|
|
1181
|
-
name === "history-backups" ||
|
|
1182
|
-
name.startsWith("history-cleared-") ||
|
|
1183
|
-
(name.startsWith("history.jsonl.") && name.endsWith(".tmp")));
|
|
1184
|
-
await Promise.all(removable.map((name) => rm(join(historyDirPath(), name), { recursive: true, force: true })));
|
|
1185
|
-
details.push("history, index, archives, and backups deleted");
|
|
1186
|
-
}
|
|
1187
|
-
catch (error) {
|
|
1188
|
-
details.push(`history file error: ${error instanceof Error ? error.message : String(error)}`);
|
|
1189
|
-
}
|
|
1190
|
-
finally {
|
|
1191
|
-
await releaseLock();
|
|
1192
|
-
}
|
|
1193
|
-
try {
|
|
1194
|
-
const { clearAllPlans } = await import("./plan.js");
|
|
1195
|
-
await clearAllPlans();
|
|
1196
|
-
details.push("plans cleared");
|
|
1197
|
-
}
|
|
1198
|
-
catch {
|
|
1199
|
-
details.push("plan store unavailable");
|
|
1200
|
-
}
|
|
1201
|
-
invalidateSessionListCache();
|
|
1202
|
-
return { cleared: true, detail: details.join("; ") };
|
|
1203
|
-
}
|
|
1204
|
-
const HISTORY_FILTER_CHUNK_BYTES = 64 * 1024;
|
|
1205
|
-
async function* readHistoryJsonlLines(path) {
|
|
1206
|
-
const handle = await open(path, "r");
|
|
1207
|
-
const chunk = Buffer.allocUnsafe(HISTORY_FILTER_CHUNK_BYTES);
|
|
1208
|
-
// Accumulate un-terminated fragments as a list of buffers rather than
|
|
1209
|
-
// repeatedly concatenating into a growing `carry`. A single JSONL record
|
|
1210
|
-
// (a large transcript/messages blob) can span many chunks; concatenating
|
|
1211
|
-
// on every chunk read copied the whole accumulated line again each time,
|
|
1212
|
-
// making the reader O(line length squared) for one oversized record. Only
|
|
1213
|
-
// materializing the line once — when its terminating newline is finally
|
|
1214
|
-
// seen — keeps this linear in total bytes read.
|
|
1215
|
-
let carryChunks = [];
|
|
1216
|
-
let carryLen = 0;
|
|
1217
|
-
try {
|
|
1218
|
-
while (true) {
|
|
1219
|
-
const { bytesRead } = await handle.read(chunk, 0, chunk.length, null);
|
|
1220
|
-
if (bytesRead === 0)
|
|
1221
|
-
break;
|
|
1222
|
-
let start = 0;
|
|
1223
|
-
while (true) {
|
|
1224
|
-
const newline = chunk.indexOf(0x0a, start);
|
|
1225
|
-
if (newline < 0 || newline >= bytesRead)
|
|
1226
|
-
break;
|
|
1227
|
-
const segment = chunk.subarray(start, newline + 1);
|
|
1228
|
-
if (carryLen > 0) {
|
|
1229
|
-
yield Buffer.concat([...carryChunks, segment], carryLen + segment.length);
|
|
1230
|
-
carryChunks = [];
|
|
1231
|
-
carryLen = 0;
|
|
1232
|
-
}
|
|
1233
|
-
else {
|
|
1234
|
-
yield Buffer.from(segment);
|
|
1235
|
-
}
|
|
1236
|
-
start = newline + 1;
|
|
1237
|
-
}
|
|
1238
|
-
if (start < bytesRead) {
|
|
1239
|
-
carryChunks.push(Buffer.from(chunk.subarray(start, bytesRead)));
|
|
1240
|
-
carryLen += bytesRead - start;
|
|
1241
|
-
}
|
|
1242
|
-
}
|
|
1243
|
-
if (carryLen > 0)
|
|
1244
|
-
yield Buffer.concat(carryChunks, carryLen);
|
|
1245
|
-
}
|
|
1246
|
-
finally {
|
|
1247
|
-
await handle.close();
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
function parseHistoryJsonlLine(line) {
|
|
1251
|
-
try {
|
|
1252
|
-
const value = JSON.parse(line.toString("utf8"));
|
|
1253
|
-
if (value === null)
|
|
1254
|
-
return { valid: false };
|
|
1255
|
-
return {
|
|
1256
|
-
valid: true,
|
|
1257
|
-
...(value && typeof value === "object" && !Array.isArray(value)
|
|
1258
|
-
? {
|
|
1259
|
-
id: typeof value.id === "string"
|
|
1260
|
-
? value.id
|
|
1261
|
-
: undefined,
|
|
1262
|
-
}
|
|
1263
|
-
: {}),
|
|
1264
|
-
};
|
|
1265
|
-
}
|
|
1266
|
-
catch {
|
|
1267
|
-
return { valid: false };
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
async function historyFileContainsSession(path, sessionId) {
|
|
1271
|
-
if (!(await safeExists(path)))
|
|
1272
|
-
return false;
|
|
1273
|
-
for await (const line of readHistoryJsonlLines(path)) {
|
|
1274
|
-
if (parseHistoryJsonlLine(line).id === sessionId)
|
|
1275
|
-
return true;
|
|
1276
|
-
}
|
|
1277
|
-
return false;
|
|
1278
|
-
}
|
|
1279
|
-
async function writeAllHistoryBytes(handle, bytes, position) {
|
|
1280
|
-
let written = 0;
|
|
1281
|
-
while (written < bytes.length) {
|
|
1282
|
-
const result = await handle.write(bytes, written, bytes.length - written, position + written);
|
|
1283
|
-
if (result.bytesWritten <= 0) {
|
|
1284
|
-
throw new Error("failed to write history data");
|
|
1285
|
-
}
|
|
1286
|
-
written += result.bytesWritten;
|
|
1287
|
-
}
|
|
1288
|
-
return position + written;
|
|
1289
|
-
}
|
|
1290
|
-
async function removeSessionFromHistoryFile(path, sessionId, options = {}) {
|
|
1291
|
-
if (!options.knownToExist &&
|
|
1292
|
-
!(await historyFileContainsSession(path, sessionId))) {
|
|
1293
|
-
return false;
|
|
1294
|
-
}
|
|
1295
|
-
const temporary = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
1296
|
-
let output;
|
|
1297
|
-
let committed = false;
|
|
1298
|
-
let retained = false;
|
|
1299
|
-
try {
|
|
1300
|
-
output = await open(temporary, "wx", 0o600);
|
|
1301
|
-
let outputPosition = 0;
|
|
1302
|
-
for await (const line of readHistoryJsonlLines(path)) {
|
|
1303
|
-
const parsed = parseHistoryJsonlLine(line);
|
|
1304
|
-
if (!parsed.valid || parsed.id === sessionId)
|
|
1305
|
-
continue;
|
|
1306
|
-
outputPosition = await writeAllHistoryBytes(output, line, outputPosition);
|
|
1307
|
-
retained = true;
|
|
1308
|
-
}
|
|
1309
|
-
await output.close();
|
|
1310
|
-
output = undefined;
|
|
1311
|
-
if (!retained) {
|
|
1312
|
-
await rm(temporary, { force: true });
|
|
1313
|
-
await rm(path, { force: true });
|
|
1314
|
-
committed = true;
|
|
1315
|
-
return true;
|
|
1316
|
-
}
|
|
1317
|
-
await rename(temporary, path);
|
|
1318
|
-
committed = true;
|
|
1319
|
-
await fixOwner(path);
|
|
1320
|
-
return true;
|
|
1321
|
-
}
|
|
1322
|
-
finally {
|
|
1323
|
-
await output?.close().catch(() => undefined);
|
|
1324
|
-
if (!committed)
|
|
1325
|
-
await rm(temporary, { force: true }).catch(() => undefined);
|
|
1326
|
-
}
|
|
1327
|
-
}
|
|
1328
|
-
async function removeSessionFromActiveHistory(sessionId) {
|
|
1329
|
-
const path = jsonlFilePath();
|
|
1330
|
-
let entries = await readValidatedHistoryIndex(path, jsonlIndexFilePath());
|
|
1331
|
-
if (!entries) {
|
|
1332
|
-
entries = await rebuildHistoryIndex(path, jsonlIndexFilePath());
|
|
1333
|
-
}
|
|
1334
|
-
if (!entries.some((entry) => entry.id === sessionId))
|
|
1335
|
-
return false;
|
|
1336
|
-
// The index already proved the id is present, so skip the redundant
|
|
1337
|
-
// whole-file existence pre-scan and go straight to the rewrite pass.
|
|
1338
|
-
const removed = await removeSessionFromHistoryFile(path, sessionId, {
|
|
1339
|
-
knownToExist: true,
|
|
1340
|
-
});
|
|
1341
|
-
if (!removed)
|
|
1342
|
-
return false;
|
|
1343
|
-
if (!(await safeExists(path))) {
|
|
1344
|
-
await writeFile(path, "", { mode: 0o600 });
|
|
1345
|
-
}
|
|
1346
|
-
await rebuildHistoryIndex(path, jsonlIndexFilePath());
|
|
1347
|
-
await Promise.all([
|
|
1348
|
-
fixOwner(path),
|
|
1349
|
-
fixOwner(jsonlIndexFilePath()),
|
|
1350
|
-
]);
|
|
1351
|
-
return true;
|
|
1352
|
-
}
|
|
1353
|
-
export async function deleteSession(sessionId) {
|
|
1354
|
-
const id = sessionId.trim();
|
|
1355
|
-
if (!id)
|
|
1356
|
-
return { deleted: false, detail: "missing session id" };
|
|
1357
|
-
let deletedFromJsonl = false;
|
|
1358
|
-
let deletedFromArchive = false;
|
|
1359
|
-
let deletedFromBackup = false;
|
|
1360
|
-
let deletedFromSqlite = false;
|
|
1361
|
-
let historyWriteFailed = false;
|
|
1362
|
-
await queueJsonlWrite(async () => {
|
|
1363
|
-
deletedFromJsonl = await removeSessionFromActiveHistory(id);
|
|
1364
|
-
deletedFromArchive = await removeSessionFromHistoryFile(archiveFilePath(), id);
|
|
1365
|
-
const backupNames = (await readdir(backupDirPath()).catch(() => []))
|
|
1366
|
-
.filter((name) => name.startsWith("history-") && name.endsWith(".jsonl"));
|
|
1367
|
-
for (const name of backupNames) {
|
|
1368
|
-
deletedFromBackup =
|
|
1369
|
-
(await removeSessionFromHistoryFile(join(backupDirPath(), name), id)) ||
|
|
1370
|
-
deletedFromBackup;
|
|
1371
|
-
}
|
|
1372
|
-
}, () => {
|
|
1373
|
-
historyWriteFailed = true;
|
|
1374
|
-
});
|
|
1375
|
-
if (historyWriteFailed) {
|
|
1376
|
-
return { deleted: false, detail: "could not remove the session from history files" };
|
|
1377
|
-
}
|
|
1378
|
-
try {
|
|
1379
|
-
const db = await loadDatabase();
|
|
1380
|
-
if (db) {
|
|
1381
|
-
db.prepare("DELETE FROM tool_calls WHERE session_id = ?").run(id);
|
|
1382
|
-
const result = db.prepare("DELETE FROM sessions WHERE id = ?").run(id);
|
|
1383
|
-
const changes = result.changes ?? 0;
|
|
1384
|
-
if (changes > 0)
|
|
1385
|
-
deletedFromSqlite = true;
|
|
1386
|
-
try {
|
|
1387
|
-
db.exec("PRAGMA wal_checkpoint(TRUNCATE);");
|
|
1388
|
-
}
|
|
1389
|
-
catch { }
|
|
1390
|
-
invalidateSessionListCache();
|
|
1391
|
-
}
|
|
1392
|
-
}
|
|
1393
|
-
catch (error) {
|
|
1394
|
-
return {
|
|
1395
|
-
deleted: false,
|
|
1396
|
-
detail: `could not remove the session from the history database: ${error instanceof Error ? error.message : String(error)}`,
|
|
1397
|
-
};
|
|
1398
|
-
}
|
|
1399
|
-
invalidateSessionListCache();
|
|
1400
|
-
if (!deletedFromJsonl && !deletedFromArchive && !deletedFromBackup && !deletedFromSqlite) {
|
|
1401
|
-
const existing = await getSession(id);
|
|
1402
|
-
if (existing)
|
|
1403
|
-
return { deleted: false, detail: "failed to delete" };
|
|
1404
|
-
return { deleted: false, detail: "session not found" };
|
|
1405
|
-
}
|
|
1406
|
-
return { deleted: true, detail: `deleted ${id}` };
|
|
1407
|
-
}
|
|
1408
|
-
async function releasePurgedSessionModel(sessionId) {
|
|
1409
|
-
try {
|
|
1410
|
-
const { releaseSessionModel } = await import("./session-model.js");
|
|
1411
|
-
await releaseSessionModel(sessionId);
|
|
1412
|
-
}
|
|
1413
|
-
catch {
|
|
1414
|
-
void 0;
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
|
-
export async function purgeSession(sessionId) {
|
|
1418
|
-
const id = sessionId.trim();
|
|
1419
|
-
if (!id) {
|
|
1420
|
-
return {
|
|
1421
|
-
deleted: false,
|
|
1422
|
-
detail: "missing session id",
|
|
1423
|
-
removedWorkspace: false,
|
|
1424
|
-
removedPlan: false,
|
|
1425
|
-
};
|
|
1426
|
-
}
|
|
1427
|
-
const record = await getSession(id);
|
|
1428
|
-
const workspaceFolder = record?.workspaceFolder?.trim();
|
|
1429
|
-
const result = await deleteSession(id);
|
|
1430
|
-
if (!result.deleted) {
|
|
1431
|
-
return { ...result, removedWorkspace: false, removedPlan: false };
|
|
1432
|
-
}
|
|
1433
|
-
let removedPlan = false;
|
|
1434
|
-
try {
|
|
1435
|
-
const { deletePlan } = await import("./plan.js");
|
|
1436
|
-
await deletePlan(id);
|
|
1437
|
-
removedPlan = true;
|
|
1438
|
-
}
|
|
1439
|
-
catch {
|
|
1440
|
-
removedPlan = false;
|
|
1441
|
-
}
|
|
1442
|
-
try {
|
|
1443
|
-
const { releaseSessionScope } = await import("./scope.js");
|
|
1444
|
-
await releaseSessionScope(id);
|
|
1445
|
-
}
|
|
1446
|
-
catch {
|
|
1447
|
-
void 0;
|
|
1448
|
-
}
|
|
1449
|
-
await releasePurgedSessionModel(id);
|
|
1450
|
-
let removedWorkspace = false;
|
|
1451
|
-
if (workspaceFolder) {
|
|
1452
|
-
try {
|
|
1453
|
-
const root = sessionWorkspaceRoot(workspaceFolder);
|
|
1454
|
-
if (isUnderSessionWorkspaceParent(root)) {
|
|
1455
|
-
await rm(root, { recursive: true, force: true });
|
|
1456
|
-
removedWorkspace = true;
|
|
1457
|
-
}
|
|
1458
|
-
}
|
|
1459
|
-
catch {
|
|
1460
|
-
removedWorkspace = false;
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
const extras = [];
|
|
1464
|
-
if (removedWorkspace)
|
|
1465
|
-
extras.push("artifacts");
|
|
1466
|
-
if (removedPlan)
|
|
1467
|
-
extras.push("plan");
|
|
1468
|
-
return {
|
|
1469
|
-
deleted: true,
|
|
1470
|
-
detail: extras.length > 0 ? `${result.detail} + ${extras.join(" + ")}` : result.detail,
|
|
1471
|
-
removedWorkspace,
|
|
1472
|
-
removedPlan,
|
|
1473
|
-
};
|
|
1474
|
-
}
|
|
1475
273
|
export function getJsonlHistoryPath() {
|
|
1476
274
|
return jsonlFilePath();
|
|
1477
275
|
}
|