@sayknow-cli/coding-agent 0.3.12 → 0.3.13
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/package.json +116 -117
- package/scripts/g004-tmux-smoke.ts +196 -36
- package/scripts/generate-docs-index.ts +2 -0
- package/src/cli/daemon-cli.ts +19 -29
- package/src/cli/malloc-env-guard.test.ts +104 -0
- package/src/cli/malloc-env-guard.ts +149 -0
- package/src/cli/notify-cli.ts +78 -14
- package/src/cli/session-picker.ts +23 -40
- package/src/cli/update-cli.ts +56 -37
- package/src/cli.ts +50 -10
- package/src/commands/daemon.ts +19 -5
- package/src/commands/harness.ts +515 -47
- package/src/commands/launch.ts +11 -3
- package/src/commands/notify.ts +5 -1
- package/src/commands/session.ts +6 -1
- package/src/config/keybindings.ts +5 -0
- package/src/config/model-profile-activation.ts +1 -1
- package/src/config/model-profiles.ts +14 -14
- package/src/config/settings-schema.ts +41 -1
- package/src/coordinator-mcp/model-preset.ts +100 -0
- package/src/coordinator-mcp/server.ts +2735 -435
- package/src/daemon/control-types.ts +11 -0
- package/src/daemon/operator-contract.ts +121 -0
- package/src/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.ts +57 -17
- package/src/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.ts +15 -2
- package/src/defaults/skc/extensions/grok-cli-vendor/src/provider/register.ts +5 -1
- package/src/internal-urls/docs-index.generated.ts +7 -7
- package/src/internal-urls/local-protocol.ts +29 -10
- package/src/main.ts +298 -75
- package/src/modes/acp/acp-agent.ts +728 -98
- package/src/modes/acp/acp-mode.ts +29 -2
- package/src/modes/components/assistant-message.ts +32 -3
- package/src/modes/components/bash-execution.ts +43 -13
- package/src/modes/components/custom-editor.ts +5 -0
- package/src/modes/components/hook-selector.ts +12 -0
- package/src/modes/components/irc-sidebar.ts +206 -0
- package/src/modes/components/pet-selector.ts +55 -0
- package/src/modes/components/sayknow-pet-widget.ts +360 -0
- package/src/modes/components/session-selector.ts +222 -221
- package/src/modes/components/settings-selector.ts +10 -0
- package/src/modes/components/tool-execution.ts +47 -6
- package/src/modes/components/user-message.ts +26 -9
- package/src/modes/controllers/command-controller.ts +28 -2
- package/src/modes/controllers/event-controller.ts +159 -36
- package/src/modes/controllers/extension-ui-controller.ts +36 -17
- package/src/modes/controllers/input-controller.ts +8 -2
- package/src/modes/controllers/selector-controller.ts +62 -15
- package/src/modes/interactive-mode.ts +183 -7
- package/src/modes/irc-observation-ledger.ts +127 -0
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +45 -2
- package/src/modes/shared/agent-wire/unattended-session.ts +288 -1
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +130 -20
- package/src/modes/types.ts +34 -2
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/modes/utils/irc-message.ts +138 -0
- package/src/modes/utils/ui-helpers.ts +216 -50
- package/src/notifications/config.ts +44 -0
- package/src/notifications/daemon-paths.ts +8 -0
- package/src/notifications/index.ts +535 -75
- package/src/notifications/lifecycle-control-runtime.ts +930 -77
- package/src/notifications/notification-service.ts +710 -0
- package/src/notifications/rate-limit-pool.ts +46 -12
- package/src/notifications/telegram-daemon-control.ts +27 -2
- package/src/notifications/telegram-daemon.ts +635 -94
- package/src/notifications/telegram-reference.ts +73 -13
- package/src/notifications/topic-registry.ts +86 -9
- package/src/prompts/system/irc-peer-roster.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +1 -0
- package/src/prompts/system/system-prompt.md +1 -0
- package/src/prompts/tools/irc.md +1 -1
- package/src/registry/agent-registry.ts +3 -0
- package/src/sdk.ts +52 -1
- package/src/secrets/obfuscator.ts +4 -2
- package/src/session/agent-session.ts +396 -145
- package/src/session/cache-economics.ts +275 -0
- package/src/session/provider-safety-stop.ts +9 -0
- package/src/session/session-dump-format.ts +6 -0
- package/src/session/session-manager.ts +809 -39
- package/src/session/session-storage.ts +582 -38
- package/src/skc-runtime/session-state-sidecar.ts +756 -135
- package/src/skc-runtime/tmux-common.ts +26 -7
- package/src/skc-runtime/tmux-gc.ts +52 -9
- package/src/skc-runtime/tmux-owner-isolation-cli.ts +185 -0
- package/src/skc-runtime/tmux-owner-isolation.ts +2060 -0
- package/src/skc-runtime/tmux-sessions.ts +871 -68
- package/src/slash-commands/builtin-registry.ts +143 -9
- package/src/task/executor.ts +12 -3
- package/src/task/index.ts +8 -0
- package/src/task/receipt.ts +7 -2
- package/src/task/types.ts +26 -0
- package/src/tools/ask-answer-registry.ts +25 -0
- package/src/tools/browser/tab-supervisor.ts +63 -6
- package/src/tools/browser.ts +8 -3
- package/src/tools/index.ts +81 -6
- package/src/tools/sqlite-reader.ts +8 -4
- package/src/tui/output-block.ts +18 -6
- package/src/utils/external-editor.ts +6 -1
- package/dist/types/append-only-mode.d.ts +0 -31
- package/dist/types/async/index.d.ts +0 -2
- package/dist/types/async/job-manager.d.ts +0 -328
- package/dist/types/async/support.d.ts +0 -2
- package/dist/types/autoresearch/dashboard.d.ts +0 -4
- package/dist/types/autoresearch/git.d.ts +0 -36
- package/dist/types/autoresearch/helpers.d.ts +0 -24
- package/dist/types/autoresearch/index.d.ts +0 -2
- package/dist/types/autoresearch/state.d.ts +0 -17
- package/dist/types/autoresearch/storage.d.ts +0 -142
- package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
- package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
- package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
- package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
- package/dist/types/autoresearch/types.d.ts +0 -154
- package/dist/types/build-metadata.d.ts +0 -7
- package/dist/types/capability/context-file.d.ts +0 -17
- package/dist/types/capability/extension-module.d.ts +0 -15
- package/dist/types/capability/extension.d.ts +0 -28
- package/dist/types/capability/fs.d.ts +0 -20
- package/dist/types/capability/hook.d.ts +0 -19
- package/dist/types/capability/index.d.ts +0 -80
- package/dist/types/capability/instruction.d.ts +0 -17
- package/dist/types/capability/mcp.d.ts +0 -49
- package/dist/types/capability/prompt.d.ts +0 -15
- package/dist/types/capability/rule.d.ts +0 -69
- package/dist/types/capability/settings.d.ts +0 -15
- package/dist/types/capability/skill.d.ts +0 -36
- package/dist/types/capability/slash-command.d.ts +0 -17
- package/dist/types/capability/ssh.d.ts +0 -23
- package/dist/types/capability/system-prompt.d.ts +0 -15
- package/dist/types/capability/tool.d.ts +0 -19
- package/dist/types/capability/types.d.ts +0 -154
- package/dist/types/cli/agents-cli.d.ts +0 -12
- package/dist/types/cli/args.d.ts +0 -57
- package/dist/types/cli/auth-broker-cli.d.ts +0 -25
- package/dist/types/cli/auth-gateway-cli.d.ts +0 -18
- package/dist/types/cli/classify-install-target.d.ts +0 -18
- package/dist/types/cli/commands/init-xdg.d.ts +0 -1
- package/dist/types/cli/completion-cli.d.ts +0 -41
- package/dist/types/cli/config-cli.d.ts +0 -23
- package/dist/types/cli/daemon-cli.d.ts +0 -25
- package/dist/types/cli/fast-help.d.ts +0 -1
- package/dist/types/cli/file-processor.d.ts +0 -11
- package/dist/types/cli/fixture-report.d.ts +0 -20
- package/dist/types/cli/fixture-report.test.d.ts +0 -1
- package/dist/types/cli/grep-cli.d.ts +0 -17
- package/dist/types/cli/initial-message.d.ts +0 -17
- package/dist/types/cli/list-models.d.ts +0 -36
- package/dist/types/cli/local-provider-smoke.d.ts +0 -59
- package/dist/types/cli/mcp-cli.d.ts +0 -25
- package/dist/types/cli/migrate-cli.d.ts +0 -20
- package/dist/types/cli/nofile-limit.d.ts +0 -11
- package/dist/types/cli/notify-cli.d.ts +0 -37
- package/dist/types/cli/plugin-cli.d.ts +0 -34
- package/dist/types/cli/read-cli.d.ts +0 -4
- package/dist/types/cli/session-picker.d.ts +0 -3
- package/dist/types/cli/setup-cli.d.ts +0 -73
- package/dist/types/cli/shell-cli.d.ts +0 -8
- package/dist/types/cli/skills-cli.d.ts +0 -9
- package/dist/types/cli/ssh-cli.d.ts +0 -21
- package/dist/types/cli/stats-cli.d.ts +0 -17
- package/dist/types/cli/telegram-cli.d.ts +0 -13
- package/dist/types/cli/update-cli.d.ts +0 -89
- package/dist/types/cli/web-search-cli.d.ts +0 -32
- package/dist/types/cli/worktree-cli.d.ts +0 -26
- package/dist/types/cli.d.ts +0 -135
- package/dist/types/commands/acp.d.ts +0 -12
- package/dist/types/commands/agents.d.ts +0 -34
- package/dist/types/commands/auth-broker.d.ts +0 -54
- package/dist/types/commands/auth-gateway.d.ts +0 -32
- package/dist/types/commands/codex-native-hook.d.ts +0 -6
- package/dist/types/commands/commit.d.ts +0 -27
- package/dist/types/commands/completion.d.ts +0 -29
- package/dist/types/commands/config.d.ts +0 -33
- package/dist/types/commands/contribution-prep.d.ts +0 -18
- package/dist/types/commands/coordinator.d.ts +0 -19
- package/dist/types/commands/daemon.d.ts +0 -41
- package/dist/types/commands/deep-interview.d.ts +0 -54
- package/dist/types/commands/gc.d.ts +0 -26
- package/dist/types/commands/grep.d.ts +0 -42
- package/dist/types/commands/harness.d.ts +0 -43
- package/dist/types/commands/launch.d.ts +0 -130
- package/dist/types/commands/local-provider.d.ts +0 -34
- package/dist/types/commands/mcp-serve.d.ts +0 -24
- package/dist/types/commands/mcp.d.ts +0 -70
- package/dist/types/commands/migrate.d.ts +0 -33
- package/dist/types/commands/notify.d.ts +0 -41
- package/dist/types/commands/plugin.d.ts +0 -58
- package/dist/types/commands/ralplan.d.ts +0 -7
- package/dist/types/commands/read.d.ts +0 -15
- package/dist/types/commands/rlm.d.ts +0 -10
- package/dist/types/commands/session.d.ts +0 -30
- package/dist/types/commands/setup.d.ts +0 -105
- package/dist/types/commands/shell.d.ts +0 -21
- package/dist/types/commands/skills.d.ts +0 -26
- package/dist/types/commands/ssh.d.ts +0 -48
- package/dist/types/commands/state.d.ts +0 -7
- package/dist/types/commands/stats.d.ts +0 -25
- package/dist/types/commands/team.d.ts +0 -24
- package/dist/types/commands/telegram.d.ts +0 -22
- package/dist/types/commands/ultragoal.d.ts +0 -8
- package/dist/types/commands/update.d.ts +0 -20
- package/dist/types/commands/web-search.d.ts +0 -87
- package/dist/types/commands/worktree.d.ts +0 -34
- package/dist/types/commit/agentic/agent.d.ts +0 -31
- package/dist/types/commit/agentic/fallback.d.ts +0 -5
- package/dist/types/commit/agentic/index.d.ts +0 -2
- package/dist/types/commit/agentic/state.d.ts +0 -58
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +0 -19
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +0 -10
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +0 -9
- package/dist/types/commit/agentic/tools/git-overview.d.ts +0 -9
- package/dist/types/commit/agentic/tools/index.d.ts +0 -16
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +0 -28
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +0 -36
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +0 -7
- package/dist/types/commit/agentic/tools/schemas.d.ts +0 -27
- package/dist/types/commit/agentic/tools/split-commit.d.ts +0 -53
- package/dist/types/commit/agentic/topo-sort.d.ts +0 -4
- package/dist/types/commit/agentic/trivial.d.ts +0 -7
- package/dist/types/commit/agentic/validation.d.ts +0 -20
- package/dist/types/commit/analysis/conventional.d.ts +0 -22
- package/dist/types/commit/analysis/index.d.ts +0 -4
- package/dist/types/commit/analysis/scope.d.ts +0 -6
- package/dist/types/commit/analysis/summary.d.ts +0 -19
- package/dist/types/commit/analysis/validation.d.ts +0 -8
- package/dist/types/commit/changelog/detect.d.ts +0 -2
- package/dist/types/commit/changelog/generate.d.ts +0 -30
- package/dist/types/commit/changelog/index.d.ts +0 -30
- package/dist/types/commit/changelog/parse.d.ts +0 -2
- package/dist/types/commit/cli.d.ts +0 -3
- package/dist/types/commit/git/diff.d.ts +0 -5
- package/dist/types/commit/index.d.ts +0 -4
- package/dist/types/commit/map-reduce/index.d.ts +0 -28
- package/dist/types/commit/map-reduce/map-phase.d.ts +0 -17
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +0 -13
- package/dist/types/commit/map-reduce/utils.d.ts +0 -2
- package/dist/types/commit/message.d.ts +0 -2
- package/dist/types/commit/model-selection.d.ts +0 -15
- package/dist/types/commit/pipeline.d.ts +0 -5
- package/dist/types/commit/shared-llm.d.ts +0 -54
- package/dist/types/commit/types.d.ts +0 -78
- package/dist/types/commit/utils/exclusions.d.ts +0 -4
- package/dist/types/commit/utils.d.ts +0 -20
- package/dist/types/config/config-file.d.ts +0 -58
- package/dist/types/config/file-lock-gc.d.ts +0 -5
- package/dist/types/config/file-lock.d.ts +0 -36
- package/dist/types/config/keybindings.d.ts +0 -359
- package/dist/types/config/model-equivalence.d.ts +0 -24
- package/dist/types/config/model-profile-activation.d.ts +0 -64
- package/dist/types/config/model-profiles.d.ts +0 -39
- package/dist/types/config/model-registry.d.ts +0 -473
- package/dist/types/config/model-resolver.d.ts +0 -217
- package/dist/types/config/models-config-schema.d.ts +0 -700
- package/dist/types/config/prompt-templates.d.ts +0 -32
- package/dist/types/config/resolve-config-value.d.ts +0 -17
- package/dist/types/config/settings-schema.d.ts +0 -4183
- package/dist/types/config/settings.d.ts +0 -156
- package/dist/types/config/skill-settings-defaults.d.ts +0 -14
- package/dist/types/config/telegram-autostart.d.ts +0 -14
- package/dist/types/config/telegram-env-bridge.d.ts +0 -18
- package/dist/types/config.d.ts +0 -66
- package/dist/types/coordinator/contract.d.ts +0 -4
- package/dist/types/coordinator-mcp/policy.d.ts +0 -24
- package/dist/types/coordinator-mcp/safety.d.ts +0 -26
- package/dist/types/coordinator-mcp/server.d.ts +0 -66
- package/dist/types/cursor.d.ts +0 -24
- package/dist/types/daemon/builtin.d.ts +0 -20
- package/dist/types/daemon/control-types.d.ts +0 -57
- package/dist/types/daemon/runtime.d.ts +0 -25
- package/dist/types/dap/client.d.ts +0 -39
- package/dist/types/dap/config.d.ts +0 -6
- package/dist/types/dap/index.d.ts +0 -4
- package/dist/types/dap/session.d.ts +0 -108
- package/dist/types/dap/types.d.ts +0 -524
- package/dist/types/debug/crash-diagnostics.d.ts +0 -45
- package/dist/types/debug/index.d.ts +0 -15
- package/dist/types/debug/log-formatting.d.ts +0 -4
- package/dist/types/debug/log-viewer.d.ts +0 -68
- package/dist/types/debug/profiler.d.ts +0 -24
- package/dist/types/debug/raw-sse-buffer.d.ts +0 -44
- package/dist/types/debug/raw-sse.d.ts +0 -16
- package/dist/types/debug/report-bundle.d.ts +0 -55
- package/dist/types/debug/runtime-gauges.d.ts +0 -6
- package/dist/types/debug/system-info.d.ts +0 -26
- package/dist/types/deep-interview/plaintext-gate-guard.d.ts +0 -11
- package/dist/types/deep-interview/render-middleware.d.ts +0 -6
- package/dist/types/defaults/skc/extensions/grok-build/index.d.ts +0 -1
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/index.d.ts +0 -1
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +0 -25
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +0 -27
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/billing.d.ts +0 -8
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/register.d.ts +0 -5
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/stream.d.ts +0 -10
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/usage.d.ts +0 -2
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +0 -2
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +0 -38
- package/dist/types/defaults/skc-defaults.d.ts +0 -64
- package/dist/types/defaults/skc-grok-cli.d.ts +0 -5
- package/dist/types/discovery/agents-md.d.ts +0 -1
- package/dist/types/discovery/agents.d.ts +0 -12
- package/dist/types/discovery/builtin.d.ts +0 -1
- package/dist/types/discovery/claude-plugins.d.ts +0 -1
- package/dist/types/discovery/claude.d.ts +0 -1
- package/dist/types/discovery/cline.d.ts +0 -1
- package/dist/types/discovery/codex.d.ts +0 -1
- package/dist/types/discovery/cursor.d.ts +0 -19
- package/dist/types/discovery/gemini.d.ts +0 -1
- package/dist/types/discovery/github.d.ts +0 -1
- package/dist/types/discovery/helpers.d.ts +0 -271
- package/dist/types/discovery/index.d.ts +0 -48
- package/dist/types/discovery/mcp-json.d.ts +0 -1
- package/dist/types/discovery/opencode.d.ts +0 -1
- package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
- package/dist/types/discovery/ssh.d.ts +0 -1
- package/dist/types/discovery/substitute-plugin-root.d.ts +0 -5
- package/dist/types/discovery/vscode.d.ts +0 -1
- package/dist/types/discovery/windsurf.d.ts +0 -15
- package/dist/types/edit/apply-patch/index.d.ts +0 -35
- package/dist/types/edit/apply-patch/parser.d.ts +0 -34
- package/dist/types/edit/diff.d.ts +0 -75
- package/dist/types/edit/file-read-cache.d.ts +0 -25
- package/dist/types/edit/index.d.ts +0 -58
- package/dist/types/edit/modes/apply-patch.d.ts +0 -24
- package/dist/types/edit/modes/patch.d.ts +0 -99
- package/dist/types/edit/modes/replace.d.ts +0 -149
- package/dist/types/edit/normalize.d.ts +0 -43
- package/dist/types/edit/notebook.d.ts +0 -26
- package/dist/types/edit/read-file.d.ts +0 -8
- package/dist/types/edit/renderer.d.ts +0 -110
- package/dist/types/edit/streaming.d.ts +0 -66
- package/dist/types/eval/backend.d.ts +0 -40
- package/dist/types/eval/index.d.ts +0 -4
- package/dist/types/eval/js/context-manager.d.ts +0 -27
- package/dist/types/eval/js/executor.d.ts +0 -29
- package/dist/types/eval/js/index.d.ts +0 -10
- package/dist/types/eval/js/shared/helpers.d.ts +0 -38
- package/dist/types/eval/js/shared/indirect-eval.d.ts +0 -14
- package/dist/types/eval/js/shared/prelude.d.ts +0 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +0 -6
- package/dist/types/eval/js/shared/runtime.d.ts +0 -47
- package/dist/types/eval/js/shared/types.d.ts +0 -24
- package/dist/types/eval/js/tool-bridge.d.ts +0 -18
- package/dist/types/eval/js/worker-core.d.ts +0 -5
- package/dist/types/eval/js/worker-entry.d.ts +0 -1
- package/dist/types/eval/js/worker-protocol.d.ts +0 -77
- package/dist/types/eval/py/display.d.ts +0 -25
- package/dist/types/eval/py/executor.d.ts +0 -88
- package/dist/types/eval/py/index.d.ts +0 -10
- package/dist/types/eval/py/kernel.d.ts +0 -65
- package/dist/types/eval/py/prelude.d.ts +0 -1
- package/dist/types/eval/py/runtime.d.ts +0 -29
- package/dist/types/eval/py/tool-bridge.d.ts +0 -20
- package/dist/types/eval/types.d.ts +0 -52
- package/dist/types/exa/factory.d.ts +0 -13
- package/dist/types/exa/index.d.ts +0 -20
- package/dist/types/exa/mcp-client.d.ts +0 -45
- package/dist/types/exa/render.d.ts +0 -19
- package/dist/types/exa/researcher.d.ts +0 -9
- package/dist/types/exa/search.d.ts +0 -9
- package/dist/types/exa/types.d.ts +0 -155
- package/dist/types/exa/websets.d.ts +0 -9
- package/dist/types/exec/bash-executor.d.ts +0 -64
- package/dist/types/exec/exec.d.ts +0 -25
- package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
- package/dist/types/exec/non-interactive-env.d.ts +0 -1
- package/dist/types/export/custom-share.d.ts +0 -20
- package/dist/types/export/html/index.d.ts +0 -10
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/export/html/template.macro.d.ts +0 -5
- package/dist/types/export/ttsr.d.ts +0 -55
- package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +0 -9
- package/dist/types/extensibility/custom-commands/index.d.ts +0 -2
- package/dist/types/extensibility/custom-commands/loader.d.ts +0 -29
- package/dist/types/extensibility/custom-commands/types.d.ts +0 -106
- package/dist/types/extensibility/custom-tools/index.d.ts +0 -6
- package/dist/types/extensibility/custom-tools/loader.d.ts +0 -69
- package/dist/types/extensibility/custom-tools/types.d.ts +0 -229
- package/dist/types/extensibility/custom-tools/wrapper.d.ts +0 -24
- package/dist/types/extensibility/extensions/compact-handler.d.ts +0 -26
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +0 -29
- package/dist/types/extensibility/extensions/index.d.ts +0 -9
- package/dist/types/extensibility/extensions/loader.d.ts +0 -43
- package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +0 -35
- package/dist/types/extensibility/extensions/runner.d.ts +0 -135
- package/dist/types/extensibility/extensions/types.d.ts +0 -918
- package/dist/types/extensibility/extensions/wrapper.d.ts +0 -55
- package/dist/types/extensibility/hooks/index.d.ts +0 -5
- package/dist/types/extensibility/hooks/loader.d.ts +0 -89
- package/dist/types/extensibility/hooks/runner.d.ts +0 -126
- package/dist/types/extensibility/hooks/tool-wrapper.d.ts +0 -25
- package/dist/types/extensibility/hooks/types.d.ts +0 -431
- package/dist/types/extensibility/plugins/doctor.d.ts +0 -3
- package/dist/types/extensibility/plugins/git-url.d.ts +0 -34
- package/dist/types/extensibility/plugins/index.d.ts +0 -8
- package/dist/types/extensibility/plugins/installer.d.ts +0 -5
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +0 -2
- package/dist/types/extensibility/plugins/loader.d.ts +0 -31
- package/dist/types/extensibility/plugins/manager.d.ts +0 -65
- package/dist/types/extensibility/plugins/marketplace/cache.d.ts +0 -41
- package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +0 -48
- package/dist/types/extensibility/plugins/marketplace/index.d.ts +0 -6
- package/dist/types/extensibility/plugins/marketplace/manager.d.ts +0 -57
- package/dist/types/extensibility/plugins/marketplace/registry.d.ts +0 -34
- package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +0 -28
- package/dist/types/extensibility/plugins/marketplace/types.d.ts +0 -130
- package/dist/types/extensibility/plugins/parser.d.ts +0 -52
- package/dist/types/extensibility/plugins/security-scanner.d.ts +0 -31
- package/dist/types/extensibility/plugins/types.d.ts +0 -149
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +0 -20
- package/dist/types/extensibility/shared-events.d.ts +0 -281
- package/dist/types/extensibility/skc-plugins/activation.d.ts +0 -14
- package/dist/types/extensibility/skc-plugins/compiler.d.ts +0 -19
- package/dist/types/extensibility/skc-plugins/constrained-hooks.d.ts +0 -29
- package/dist/types/extensibility/skc-plugins/index.d.ts +0 -18
- package/dist/types/extensibility/skc-plugins/injection.d.ts +0 -40
- package/dist/types/extensibility/skc-plugins/installer.d.ts +0 -13
- package/dist/types/extensibility/skc-plugins/loader.d.ts +0 -3
- package/dist/types/extensibility/skc-plugins/mcp-policy.d.ts +0 -26
- package/dist/types/extensibility/skc-plugins/observability.d.ts +0 -27
- package/dist/types/extensibility/skc-plugins/paths.d.ts +0 -8
- package/dist/types/extensibility/skc-plugins/prompt-appendix.d.ts +0 -16
- package/dist/types/extensibility/skc-plugins/registry.d.ts +0 -32
- package/dist/types/extensibility/skc-plugins/runtime-adapters.d.ts +0 -64
- package/dist/types/extensibility/skc-plugins/schema.d.ts +0 -3
- package/dist/types/extensibility/skc-plugins/session-validation.d.ts +0 -42
- package/dist/types/extensibility/skc-plugins/state.d.ts +0 -9
- package/dist/types/extensibility/skc-plugins/tools.d.ts +0 -8
- package/dist/types/extensibility/skc-plugins/types.d.ts +0 -220
- package/dist/types/extensibility/skc-plugins/validation.d.ts +0 -11
- package/dist/types/extensibility/skills.d.ts +0 -82
- package/dist/types/extensibility/slash-commands.d.ts +0 -48
- package/dist/types/extensibility/tool-proxy.d.ts +0 -4
- package/dist/types/extensibility/typebox.d.ts +0 -155
- package/dist/types/extensibility/utils.d.ts +0 -12
- package/dist/types/goals/index.d.ts +0 -3
- package/dist/types/goals/runtime.d.ts +0 -63
- package/dist/types/goals/state.d.ts +0 -32
- package/dist/types/goals/tools/goal-tool.d.ts +0 -62
- package/dist/types/harness-control-plane/classifier.d.ts +0 -13
- package/dist/types/harness-control-plane/control-endpoint.d.ts +0 -31
- package/dist/types/harness-control-plane/finalize.d.ts +0 -60
- package/dist/types/harness-control-plane/gc-adapter.d.ts +0 -3
- package/dist/types/harness-control-plane/operate.d.ts +0 -35
- package/dist/types/harness-control-plane/owner.d.ts +0 -53
- package/dist/types/harness-control-plane/phase-rollup.d.ts +0 -23
- package/dist/types/harness-control-plane/preserve.d.ts +0 -19
- package/dist/types/harness-control-plane/receipt-ingest.d.ts +0 -19
- package/dist/types/harness-control-plane/receipt-spool.d.ts +0 -19
- package/dist/types/harness-control-plane/receipts.d.ts +0 -149
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/harness-control-plane/seams.d.ts +0 -21
- package/dist/types/harness-control-plane/session-lease.d.ts +0 -65
- package/dist/types/harness-control-plane/state-machine.d.ts +0 -24
- package/dist/types/harness-control-plane/storage.d.ts +0 -81
- package/dist/types/harness-control-plane/types.d.ts +0 -187
- package/dist/types/hashline/anchors.d.ts +0 -20
- package/dist/types/hashline/apply.d.ts +0 -14
- package/dist/types/hashline/constants.d.ts +0 -19
- package/dist/types/hashline/diff-preview.d.ts +0 -2
- package/dist/types/hashline/diff.d.ts +0 -17
- package/dist/types/hashline/execute.d.ts +0 -4
- package/dist/types/hashline/hash.d.ts +0 -123
- package/dist/types/hashline/index.d.ts +0 -13
- package/dist/types/hashline/input.d.ts +0 -11
- package/dist/types/hashline/parser.d.ts +0 -7
- package/dist/types/hashline/prefixes.d.ts +0 -7
- package/dist/types/hashline/recovery.d.ts +0 -27
- package/dist/types/hashline/stream.d.ts +0 -2
- package/dist/types/hashline/types.d.ts +0 -77
- package/dist/types/hindsight/backend.d.ts +0 -13
- package/dist/types/hindsight/bank.d.ts +0 -54
- package/dist/types/hindsight/client.d.ts +0 -224
- package/dist/types/hindsight/config.d.ts +0 -51
- package/dist/types/hindsight/content.d.ts +0 -70
- package/dist/types/hindsight/index.d.ts +0 -8
- package/dist/types/hindsight/mental-models.d.ts +0 -125
- package/dist/types/hindsight/state.d.ts +0 -99
- package/dist/types/hindsight/transcript.d.ts +0 -28
- package/dist/types/hooks/codex-native-hooks-config.d.ts +0 -29
- package/dist/types/hooks/native-skill-hook.d.ts +0 -28
- package/dist/types/hooks/skill-keywords.d.ts +0 -18
- package/dist/types/hooks/skill-state.d.ts +0 -93
- package/dist/types/i18n/index.d.ts +0 -38
- package/dist/types/i18n/messages/de.d.ts +0 -2
- package/dist/types/i18n/messages/de.messages.d.ts +0 -1
- package/dist/types/i18n/messages/de.settings.d.ts +0 -1
- package/dist/types/i18n/messages/en.d.ts +0 -81
- package/dist/types/i18n/messages/es.d.ts +0 -2
- package/dist/types/i18n/messages/es.messages.d.ts +0 -1
- package/dist/types/i18n/messages/es.settings.d.ts +0 -1
- package/dist/types/i18n/messages/fr.d.ts +0 -2
- package/dist/types/i18n/messages/fr.messages.d.ts +0 -1
- package/dist/types/i18n/messages/fr.settings.d.ts +0 -1
- package/dist/types/i18n/messages/ja.d.ts +0 -2
- package/dist/types/i18n/messages/ja.messages.d.ts +0 -1
- package/dist/types/i18n/messages/ja.settings.d.ts +0 -1
- package/dist/types/i18n/messages/ko.d.ts +0 -2
- package/dist/types/i18n/messages/ko.messages.d.ts +0 -1
- package/dist/types/i18n/messages/ko.settings.d.ts +0 -1
- package/dist/types/i18n/messages/zh.d.ts +0 -2
- package/dist/types/i18n/messages/zh.messages.d.ts +0 -1
- package/dist/types/i18n/messages/zh.settings.d.ts +0 -1
- package/dist/types/index.d.ts +0 -33
- package/dist/types/internal-urls/agent-protocol.d.ts +0 -12
- package/dist/types/internal-urls/artifact-protocol.d.ts +0 -6
- package/dist/types/internal-urls/docs-index.generated.d.ts +0 -2
- package/dist/types/internal-urls/index.d.ts +0 -20
- package/dist/types/internal-urls/issue-pr-protocol.d.ts +0 -17
- package/dist/types/internal-urls/json-query.d.ts +0 -30
- package/dist/types/internal-urls/local-protocol.d.ts +0 -39
- package/dist/types/internal-urls/mcp-protocol.d.ts +0 -12
- package/dist/types/internal-urls/memory-protocol.d.ts +0 -23
- package/dist/types/internal-urls/parse.d.ts +0 -19
- package/dist/types/internal-urls/registry-helpers.d.ts +0 -11
- package/dist/types/internal-urls/router.d.ts +0 -14
- package/dist/types/internal-urls/rule-protocol.d.ts +0 -6
- package/dist/types/internal-urls/skc-protocol.d.ts +0 -12
- package/dist/types/internal-urls/skill-protocol.d.ts +0 -13
- package/dist/types/internal-urls/types.d.ts +0 -109
- package/dist/types/lsp/client.d.ts +0 -66
- package/dist/types/lsp/clients/biome-client.d.ts +0 -16
- package/dist/types/lsp/clients/index.d.ts +0 -19
- package/dist/types/lsp/clients/lsp-linter-client.d.ts +0 -16
- package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -20
- package/dist/types/lsp/config.d.ts +0 -65
- package/dist/types/lsp/edits.d.ts +0 -23
- package/dist/types/lsp/index.d.ts +0 -130
- package/dist/types/lsp/lspmux.d.ts +0 -58
- package/dist/types/lsp/render.d.ts +0 -32
- package/dist/types/lsp/startup-events.d.ts +0 -12
- package/dist/types/lsp/types.d.ts +0 -306
- package/dist/types/lsp/utils.d.ts +0 -108
- package/dist/types/main.d.ts +0 -75
- package/dist/types/memories/index.d.ts +0 -28
- package/dist/types/memories/storage.d.ts +0 -110
- package/dist/types/memory-backend/index.d.ts +0 -4
- package/dist/types/memory-backend/local-backend.d.ts +0 -9
- package/dist/types/memory-backend/off-backend.d.ts +0 -7
- package/dist/types/memory-backend/resolve.d.ts +0 -15
- package/dist/types/memory-backend/types.d.ts +0 -61
- package/dist/types/migrate/action-planner.d.ts +0 -11
- package/dist/types/migrate/adapters/claude-code.d.ts +0 -2
- package/dist/types/migrate/adapters/codex.d.ts +0 -5
- package/dist/types/migrate/adapters/index.d.ts +0 -45
- package/dist/types/migrate/adapters/opencode.d.ts +0 -2
- package/dist/types/migrate/executor.d.ts +0 -2
- package/dist/types/migrate/mcp-mapper.d.ts +0 -20
- package/dist/types/migrate/report.d.ts +0 -18
- package/dist/types/migrate/skill-normalizer.d.ts +0 -27
- package/dist/types/migrate/types.d.ts +0 -126
- package/dist/types/modes/acp/acp-agent.d.ts +0 -61
- package/dist/types/modes/acp/acp-client-bridge.d.ts +0 -9
- package/dist/types/modes/acp/acp-event-mapper.d.ts +0 -36
- package/dist/types/modes/acp/acp-mode.d.ts +0 -5
- package/dist/types/modes/acp/index.d.ts +0 -2
- package/dist/types/modes/acp/terminal-auth.d.ts +0 -6
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/components/agent-dashboard.d.ts +0 -21
- package/dist/types/modes/components/assistant-message.d.ts +0 -20
- package/dist/types/modes/components/bash-execution.d.ts +0 -29
- package/dist/types/modes/components/bordered-loader.d.ts +0 -11
- package/dist/types/modes/components/branch-summary-message.d.ts +0 -13
- package/dist/types/modes/components/btw-panel.d.ts +0 -16
- package/dist/types/modes/components/compaction-summary-message.d.ts +0 -13
- package/dist/types/modes/components/countdown-timer.d.ts +0 -14
- package/dist/types/modes/components/custom-editor.d.ts +0 -67
- package/dist/types/modes/components/custom-message.d.ts +0 -15
- package/dist/types/modes/components/custom-model-preset-wizard.d.ts +0 -12
- package/dist/types/modes/components/custom-provider-wizard.d.ts +0 -10
- package/dist/types/modes/components/diff.d.ts +0 -11
- package/dist/types/modes/components/dynamic-border.d.ts +0 -14
- package/dist/types/modes/components/eval-execution.d.ts +0 -23
- package/dist/types/modes/components/execution-shared.d.ts +0 -46
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +0 -26
- package/dist/types/modes/components/extensions/extension-list.d.ts +0 -39
- package/dist/types/modes/components/extensions/index.d.ts +0 -8
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +0 -8
- package/dist/types/modes/components/extensions/state-manager.d.ts +0 -50
- package/dist/types/modes/components/extensions/types.d.ts +0 -151
- package/dist/types/modes/components/footer.d.ts +0 -30
- package/dist/types/modes/components/history-search.d.ts +0 -7
- package/dist/types/modes/components/hook-editor.d.ts +0 -18
- package/dist/types/modes/components/hook-input.d.ts +0 -15
- package/dist/types/modes/components/hook-message.d.ts +0 -15
- package/dist/types/modes/components/hook-selector.d.ts +0 -54
- package/dist/types/modes/components/index.d.ts +0 -35
- package/dist/types/modes/components/jobs-overlay-model.d.ts +0 -31
- package/dist/types/modes/components/jobs-overlay.d.ts +0 -30
- package/dist/types/modes/components/keybinding-hints.d.ts +0 -40
- package/dist/types/modes/components/login-dialog.d.ts +0 -32
- package/dist/types/modes/components/message-frame.d.ts +0 -42
- package/dist/types/modes/components/model-selector.d.ts +0 -60
- package/dist/types/modes/components/oauth-selector.d.ts +0 -17
- package/dist/types/modes/components/plugin-selector.d.ts +0 -26
- package/dist/types/modes/components/plugin-settings.d.ts +0 -66
- package/dist/types/modes/components/provider-onboarding-selector.d.ts +0 -7
- package/dist/types/modes/components/queue-mode-selector.d.ts +0 -9
- package/dist/types/modes/components/queued-message-selector.d.ts +0 -12
- package/dist/types/modes/components/read-tool-group.d.ts +0 -30
- package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +0 -26
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/session-selector.d.ts +0 -30
- package/dist/types/modes/components/settings-defs.d.ts +0 -50
- package/dist/types/modes/components/settings-selector.d.ts +0 -62
- package/dist/types/modes/components/show-images-selector.d.ts +0 -9
- package/dist/types/modes/components/skill-hud/render.d.ts +0 -2
- package/dist/types/modes/components/skill-message.d.ts +0 -10
- package/dist/types/modes/components/status-line/context-thresholds.d.ts +0 -4
- package/dist/types/modes/components/status-line/git-utils.d.ts +0 -28
- package/dist/types/modes/components/status-line/index.d.ts +0 -4
- package/dist/types/modes/components/status-line/presets.d.ts +0 -3
- package/dist/types/modes/components/status-line/segments.d.ts +0 -5
- package/dist/types/modes/components/status-line/separators.d.ts +0 -3
- package/dist/types/modes/components/status-line/token-rate.d.ts +0 -10
- package/dist/types/modes/components/status-line/types.d.ts +0 -83
- package/dist/types/modes/components/status-line.d.ts +0 -104
- package/dist/types/modes/components/theme-selector.d.ts +0 -10
- package/dist/types/modes/components/thinking-selector.d.ts +0 -15
- package/dist/types/modes/components/todo-reminder.d.ts +0 -13
- package/dist/types/modes/components/tool-execution.d.ts +0 -54
- package/dist/types/modes/components/tree-selector.d.ts +0 -31
- package/dist/types/modes/components/ttsr-notification.d.ts +0 -13
- package/dist/types/modes/components/two-column-body.d.ts +0 -9
- package/dist/types/modes/components/user-message-selector.d.ts +0 -28
- package/dist/types/modes/components/user-message.d.ts +0 -7
- package/dist/types/modes/components/visual-truncate.d.ts +0 -19
- package/dist/types/modes/components/welcome.d.ts +0 -46
- package/dist/types/modes/controllers/btw-controller.d.ts +0 -10
- package/dist/types/modes/controllers/command-controller-shared.d.ts +0 -47
- package/dist/types/modes/controllers/command-controller.d.ts +0 -40
- package/dist/types/modes/controllers/event-controller.d.ts +0 -17
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -80
- package/dist/types/modes/controllers/input-controller.d.ts +0 -42
- package/dist/types/modes/controllers/runtime-mcp-command-controller.d.ts +0 -10
- package/dist/types/modes/controllers/selector-controller.d.ts +0 -67
- package/dist/types/modes/controllers/ssh-command-controller.d.ts +0 -10
- package/dist/types/modes/controllers/todo-command-controller.d.ts +0 -7
- package/dist/types/modes/emoji-autocomplete.d.ts +0 -16
- package/dist/types/modes/index.d.ts +0 -10
- package/dist/types/modes/interactive-mode.d.ts +0 -275
- package/dist/types/modes/jobs-observer.d.ts +0 -57
- package/dist/types/modes/oauth-manual-input.d.ts +0 -8
- package/dist/types/modes/print-mode.d.ts +0 -45
- package/dist/types/modes/prompt-action-autocomplete.d.ts +0 -50
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -293
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -85
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -794
- package/dist/types/modes/runtime-init.d.ts +0 -21
- package/dist/types/modes/session-observer-registry.d.ts +0 -26
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +0 -57
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +0 -94
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +0 -103
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +0 -60
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -161
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -82
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +0 -114
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +0 -39
- package/dist/types/modes/shared.d.ts +0 -15
- package/dist/types/modes/slash-command-visibility.d.ts +0 -1
- package/dist/types/modes/theme/defaults/index.d.ts +0 -652
- package/dist/types/modes/theme/mermaid-cache.d.ts +0 -9
- package/dist/types/modes/theme/shimmer.d.ts +0 -38
- package/dist/types/modes/theme/theme.d.ts +0 -275
- package/dist/types/modes/tmux-scroll.d.ts +0 -18
- package/dist/types/modes/types.d.ts +0 -292
- package/dist/types/modes/utils/abort-message.d.ts +0 -4
- package/dist/types/modes/utils/context-usage.d.ts +0 -51
- package/dist/types/modes/utils/hotkeys-markdown.d.ts +0 -5
- package/dist/types/modes/utils/injected-user-submission.d.ts +0 -52
- package/dist/types/modes/utils/keybinding-matchers.d.ts +0 -10
- package/dist/types/modes/utils/terminal-bell.d.ts +0 -3
- package/dist/types/modes/utils/tools-markdown.d.ts +0 -5
- package/dist/types/modes/utils/ui-helpers.d.ts +0 -66
- package/dist/types/notifications/attachment-registry.d.ts +0 -17
- package/dist/types/notifications/chat-adapters.d.ts +0 -9
- package/dist/types/notifications/config-commands.d.ts +0 -64
- package/dist/types/notifications/config.d.ts +0 -98
- package/dist/types/notifications/daemon-paths.d.ts +0 -10
- package/dist/types/notifications/engine.d.ts +0 -59
- package/dist/types/notifications/helpers.d.ts +0 -55
- package/dist/types/notifications/html-format.d.ts +0 -75
- package/dist/types/notifications/index.d.ts +0 -192
- package/dist/types/notifications/lifecycle-commands.d.ts +0 -69
- package/dist/types/notifications/lifecycle-control-runtime.d.ts +0 -99
- package/dist/types/notifications/lifecycle-orchestrator.d.ts +0 -144
- package/dist/types/notifications/managed-daemon.d.ts +0 -48
- package/dist/types/notifications/operator-runtime.d.ts +0 -52
- package/dist/types/notifications/rate-limit-pool.d.ts +0 -95
- package/dist/types/notifications/recent-activity.d.ts +0 -39
- package/dist/types/notifications/reply-sent-store.d.ts +0 -53
- package/dist/types/notifications/rich-draft.d.ts +0 -68
- package/dist/types/notifications/rich-render.d.ts +0 -90
- package/dist/types/notifications/telegram-cli.d.ts +0 -19
- package/dist/types/notifications/telegram-daemon-cli.d.ts +0 -28
- package/dist/types/notifications/telegram-daemon-control.d.ts +0 -64
- package/dist/types/notifications/telegram-daemon.d.ts +0 -431
- package/dist/types/notifications/telegram-reference.d.ts +0 -119
- package/dist/types/notifications/threaded-inbound.d.ts +0 -77
- package/dist/types/notifications/threaded-render.d.ts +0 -88
- package/dist/types/notifications/topic-registry.d.ts +0 -69
- package/dist/types/plan-mode/approved-plan.d.ts +0 -49
- package/dist/types/plan-mode/state.d.ts +0 -6
- package/dist/types/registry/agent-registry.d.ts +0 -62
- package/dist/types/reminders/star-reminder.d.ts +0 -115
- package/dist/types/research-plan/index.d.ts +0 -1
- package/dist/types/research-plan/ledger.d.ts +0 -33
- package/dist/types/rlm/artifacts.d.ts +0 -9
- package/dist/types/rlm/complete-research-tool.d.ts +0 -35
- package/dist/types/rlm/data-context.d.ts +0 -6
- package/dist/types/rlm/index.d.ts +0 -47
- package/dist/types/rlm/notebook.d.ts +0 -12
- package/dist/types/rlm/preset.d.ts +0 -23
- package/dist/types/rlm/python-tool.d.ts +0 -16
- package/dist/types/rlm/report.d.ts +0 -14
- package/dist/types/rlm/types.d.ts +0 -37
- package/dist/types/runtime/process-lifecycle.d.ts +0 -108
- package/dist/types/runtime-api-key.d.ts +0 -7
- package/dist/types/runtime-credential-selector.d.ts +0 -7
- package/dist/types/runtime-mcp/client.d.ts +0 -74
- package/dist/types/runtime-mcp/config-writer.d.ts +0 -89
- package/dist/types/runtime-mcp/config.d.ts +0 -77
- package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
- package/dist/types/runtime-mcp/index.d.ts +0 -18
- package/dist/types/runtime-mcp/json-rpc.d.ts +0 -22
- package/dist/types/runtime-mcp/loader.d.ts +0 -45
- package/dist/types/runtime-mcp/manager.d.ts +0 -195
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +0 -40
- package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -59
- package/dist/types/runtime-mcp/render.d.ts +0 -25
- package/dist/types/runtime-mcp/smithery-auth.d.ts +0 -16
- package/dist/types/runtime-mcp/smithery-connect.d.ts +0 -38
- package/dist/types/runtime-mcp/smithery-registry.d.ts +0 -51
- package/dist/types/runtime-mcp/tool-bridge.d.ts +0 -86
- package/dist/types/runtime-mcp/tool-cache.d.ts +0 -8
- package/dist/types/runtime-mcp/transports/http.d.ts +0 -36
- package/dist/types/runtime-mcp/transports/index.d.ts +0 -5
- package/dist/types/runtime-mcp/transports/stdio.d.ts +0 -29
- package/dist/types/runtime-mcp/types.d.ts +0 -349
- package/dist/types/sdk.d.ts +0 -254
- package/dist/types/secrets/index.d.ts +0 -9
- package/dist/types/secrets/obfuscator.d.ts +0 -23
- package/dist/types/secrets/regex.d.ts +0 -2
- package/dist/types/session/agent-session.d.ts +0 -1201
- package/dist/types/session/agent-storage.d.ts +0 -101
- package/dist/types/session/artifacts.d.ts +0 -64
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/auth-storage.d.ts +0 -6
- package/dist/types/session/blob-store.d.ts +0 -160
- package/dist/types/session/client-bridge.d.ts +0 -88
- package/dist/types/session/contribution-prep.d.ts +0 -47
- package/dist/types/session/file-mention-pruning.d.ts +0 -8
- package/dist/types/session/history-storage.d.ts +0 -16
- package/dist/types/session/messages.d.ts +0 -169
- package/dist/types/session/session-dump-format.d.ts +0 -22
- package/dist/types/session/session-manager.d.ts +0 -661
- package/dist/types/session/session-storage.d.ts +0 -88
- package/dist/types/session/streaming-output.d.ts +0 -209
- package/dist/types/session/tool-choice-queue.d.ts +0 -84
- package/dist/types/session/yield-queue.d.ts +0 -24
- package/dist/types/setup/credential-auto-import.d.ts +0 -63
- package/dist/types/setup/credential-import.d.ts +0 -82
- package/dist/types/setup/hermes-setup.d.ts +0 -78
- package/dist/types/setup/host-plugin-setup.d.ts +0 -39
- package/dist/types/setup/model-onboarding-guidance.d.ts +0 -9
- package/dist/types/setup/provider-onboarding.d.ts +0 -52
- package/dist/types/skc-runtime/cli-write-receipt.d.ts +0 -24
- package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +0 -39
- package/dist/types/skc-runtime/deep-interview-recorder.d.ts +0 -114
- package/dist/types/skc-runtime/deep-interview-runtime.d.ts +0 -36
- package/dist/types/skc-runtime/deep-interview-state.d.ts +0 -127
- package/dist/types/skc-runtime/gc-render.d.ts +0 -6
- package/dist/types/skc-runtime/gc-runtime.d.ts +0 -134
- package/dist/types/skc-runtime/goal-mode-request.d.ts +0 -53
- package/dist/types/skc-runtime/launch-tmux.d.ts +0 -78
- package/dist/types/skc-runtime/launch-worktree.d.ts +0 -46
- package/dist/types/skc-runtime/ledger-event-renderer.d.ts +0 -68
- package/dist/types/skc-runtime/psmux-detect.d.ts +0 -78
- package/dist/types/skc-runtime/ralplan-runtime.d.ts +0 -26
- package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +0 -3
- package/dist/types/skc-runtime/session-layout.d.ts +0 -59
- package/dist/types/skc-runtime/session-resolution.d.ts +0 -47
- package/dist/types/skc-runtime/session-state-sidecar.d.ts +0 -39
- package/dist/types/skc-runtime/state-graph.d.ts +0 -4
- package/dist/types/skc-runtime/state-migrations.d.ts +0 -33
- package/dist/types/skc-runtime/state-renderer.d.ts +0 -70
- package/dist/types/skc-runtime/state-runtime.d.ts +0 -38
- package/dist/types/skc-runtime/state-schema.d.ts +0 -319
- package/dist/types/skc-runtime/state-validation.d.ts +0 -6
- package/dist/types/skc-runtime/state-writer.d.ts +0 -244
- package/dist/types/skc-runtime/team-gc.d.ts +0 -7
- package/dist/types/skc-runtime/team-runtime.d.ts +0 -355
- package/dist/types/skc-runtime/tmux-common.d.ts +0 -105
- package/dist/types/skc-runtime/tmux-gc.d.ts +0 -7
- package/dist/types/skc-runtime/tmux-sessions.d.ts +0 -62
- package/dist/types/skc-runtime/ultragoal-guard.d.ts +0 -93
- package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +0 -42
- package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -410
- package/dist/types/skc-runtime/workflow-command-ref.d.ts +0 -43
- package/dist/types/skc-runtime/workflow-manifest.d.ts +0 -54
- package/dist/types/skill-state/active-state.d.ts +0 -126
- package/dist/types/skill-state/canonical-skills.d.ts +0 -3
- package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +0 -38
- package/dist/types/skill-state/initial-phase.d.ts +0 -12
- package/dist/types/skill-state/workflow-hud.d.ts +0 -83
- package/dist/types/skill-state/workflow-state-contract.d.ts +0 -57
- package/dist/types/skill-state/workflow-state-version.d.ts +0 -3
- package/dist/types/slash-commands/acp-builtins.d.ts +0 -18
- package/dist/types/slash-commands/builtin-registry.d.ts +0 -24
- package/dist/types/slash-commands/helpers/context-report.d.ts +0 -7
- package/dist/types/slash-commands/helpers/fast-status-report.d.ts +0 -82
- package/dist/types/slash-commands/helpers/format.d.ts +0 -10
- package/dist/types/slash-commands/helpers/mcp.d.ts +0 -3
- package/dist/types/slash-commands/helpers/parse.d.ts +0 -33
- package/dist/types/slash-commands/helpers/ssh.d.ts +0 -3
- package/dist/types/slash-commands/helpers/todo.d.ts +0 -3
- package/dist/types/slash-commands/helpers/usage-report.d.ts +0 -7
- package/dist/types/slash-commands/types.d.ts +0 -120
- package/dist/types/ssh/config-writer.d.ts +0 -49
- package/dist/types/ssh/connection-manager.d.ts +0 -33
- package/dist/types/ssh/ssh-executor.d.ts +0 -37
- package/dist/types/ssh/sshfs-mount.d.ts +0 -6
- package/dist/types/ssh/utils.d.ts +0 -2
- package/dist/types/stt/downloader.d.ts +0 -9
- package/dist/types/stt/index.d.ts +0 -3
- package/dist/types/stt/recorder.d.ts +0 -13
- package/dist/types/stt/setup.d.ts +0 -18
- package/dist/types/stt/stt-controller.d.ts +0 -16
- package/dist/types/stt/transcriber.d.ts +0 -16
- package/dist/types/system-prompt.d.ts +0 -118
- package/dist/types/task/agents.d.ts +0 -28
- package/dist/types/task/commands.d.ts +0 -35
- package/dist/types/task/discovery.d.ts +0 -19
- package/dist/types/task/executor.d.ts +0 -124
- package/dist/types/task/fork-context-advisory.d.ts +0 -13
- package/dist/types/task/fork-context-budget.d.ts +0 -7
- package/dist/types/task/id.d.ts +0 -7
- package/dist/types/task/index.d.ts +0 -43
- package/dist/types/task/name-generator.d.ts +0 -16
- package/dist/types/task/output-manager.d.ts +0 -36
- package/dist/types/task/parallel.d.ts +0 -34
- package/dist/types/task/receipt.d.ts +0 -87
- package/dist/types/task/render.d.ts +0 -28
- package/dist/types/task/roi-reconciliation.d.ts +0 -27
- package/dist/types/task/simple-mode.d.ts +0 -8
- package/dist/types/task/skc-command.d.ts +0 -7
- package/dist/types/task/spawn-gate.d.ts +0 -29
- package/dist/types/task/subprocess-tool-registry.d.ts +0 -72
- package/dist/types/task/token-log.d.ts +0 -30
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/task/types.d.ts +0 -508
- package/dist/types/task/worktree.d.ts +0 -94
- package/dist/types/thinking-metadata.d.ts +0 -16
- package/dist/types/thinking.d.ts +0 -22
- package/dist/types/tool-discovery/tool-index.d.ts +0 -112
- package/dist/types/tools/archive-reader.d.ts +0 -40
- package/dist/types/tools/ask-answer-registry.d.ts +0 -13
- package/dist/types/tools/ask.d.ts +0 -123
- package/dist/types/tools/ast-edit.d.ts +0 -77
- package/dist/types/tools/ast-grep.d.ts +0 -69
- package/dist/types/tools/auto-generated-guard.d.ts +0 -17
- package/dist/types/tools/bash-allowed-prefixes.d.ts +0 -10
- package/dist/types/tools/bash-command-fixup.d.ts +0 -11
- package/dist/types/tools/bash-interactive.d.ts +0 -16
- package/dist/types/tools/bash-interceptor.d.ts +0 -24
- package/dist/types/tools/bash-pty-selection.d.ts +0 -7
- package/dist/types/tools/bash-skill-urls.d.ts +0 -31
- package/dist/types/tools/bash.d.ts +0 -157
- package/dist/types/tools/bisect.d.ts +0 -81
- package/dist/types/tools/browser/actions.d.ts +0 -54
- package/dist/types/tools/browser/attach.d.ts +0 -50
- package/dist/types/tools/browser/launch.d.ts +0 -62
- package/dist/types/tools/browser/readable.d.ts +0 -17
- package/dist/types/tools/browser/registry.d.ts +0 -57
- package/dist/types/tools/browser/render.d.ts +0 -53
- package/dist/types/tools/browser/tab-protocol.d.ts +0 -144
- package/dist/types/tools/browser/tab-supervisor.d.ts +0 -103
- package/dist/types/tools/browser/tab-worker-entry.d.ts +0 -1
- package/dist/types/tools/browser/tab-worker.d.ts +0 -19
- package/dist/types/tools/browser.d.ts +0 -211
- package/dist/types/tools/calculator.d.ts +0 -76
- package/dist/types/tools/checkpoint.d.ts +0 -63
- package/dist/types/tools/composer-bash-policy.d.ts +0 -14
- package/dist/types/tools/computer/render.d.ts +0 -17
- package/dist/types/tools/computer-gc.d.ts +0 -23
- package/dist/types/tools/computer.d.ts +0 -465
- package/dist/types/tools/conflict-detect.d.ts +0 -205
- package/dist/types/tools/context.d.ts +0 -19
- package/dist/types/tools/cron.d.ts +0 -91
- package/dist/types/tools/debug.d.ts +0 -209
- package/dist/types/tools/eval.d.ts +0 -108
- package/dist/types/tools/fetch.d.ts +0 -84
- package/dist/types/tools/file-recorder.d.ts +0 -13
- package/dist/types/tools/find.d.ts +0 -95
- package/dist/types/tools/fs-cache-invalidation.d.ts +0 -15
- package/dist/types/tools/gh-format.d.ts +0 -6
- package/dist/types/tools/gh-renderer.d.ts +0 -25
- package/dist/types/tools/gh.d.ts +0 -356
- package/dist/types/tools/github-cache.d.ts +0 -103
- package/dist/types/tools/grouped-file-output.d.ts +0 -36
- package/dist/types/tools/hindsight-recall.d.ts +0 -21
- package/dist/types/tools/hindsight-reflect.d.ts +0 -23
- package/dist/types/tools/hindsight-retain.d.ts +0 -27
- package/dist/types/tools/image-gen.d.ts +0 -79
- package/dist/types/tools/index.d.ts +0 -319
- package/dist/types/tools/irc.d.ts +0 -79
- package/dist/types/tools/job.d.ts +0 -78
- package/dist/types/tools/json-tree.d.ts +0 -23
- package/dist/types/tools/jtd-to-json-schema.d.ts +0 -29
- package/dist/types/tools/jtd-to-typescript.d.ts +0 -26
- package/dist/types/tools/jtd-utils.d.ts +0 -42
- package/dist/types/tools/list-limit.d.ts +0 -12
- package/dist/types/tools/match-line-format.d.ts +0 -11
- package/dist/types/tools/monitor.d.ts +0 -54
- package/dist/types/tools/output-meta.d.ts +0 -204
- package/dist/types/tools/path-utils.d.ts +0 -147
- package/dist/types/tools/plan-mode-guard.d.ts +0 -18
- package/dist/types/tools/read.d.ts +0 -85
- package/dist/types/tools/recipe/index.d.ts +0 -45
- package/dist/types/tools/recipe/render.d.ts +0 -36
- package/dist/types/tools/recipe/runner.d.ts +0 -60
- package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
- package/dist/types/tools/recipe/runners/index.d.ts +0 -2
- package/dist/types/tools/recipe/runners/just.d.ts +0 -2
- package/dist/types/tools/recipe/runners/make.d.ts +0 -2
- package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
- package/dist/types/tools/recipe/runners/task.d.ts +0 -2
- package/dist/types/tools/render-mermaid.d.ts +0 -37
- package/dist/types/tools/render-utils.d.ts +0 -158
- package/dist/types/tools/renderers.d.ts +0 -26
- package/dist/types/tools/resolve.d.ts +0 -80
- package/dist/types/tools/resource-gc.d.ts +0 -54
- package/dist/types/tools/review.d.ts +0 -63
- package/dist/types/tools/search-tool-bm25.d.ts +0 -65
- package/dist/types/tools/search.d.ts +0 -93
- package/dist/types/tools/skill-discovery.d.ts +0 -40
- package/dist/types/tools/skill.d.ts +0 -48
- package/dist/types/tools/sqlite-reader.d.ts +0 -94
- package/dist/types/tools/ssh.d.ts +0 -67
- package/dist/types/tools/subagent-render.d.ts +0 -31
- package/dist/types/tools/subagent.d.ts +0 -117
- package/dist/types/tools/telegram-send.d.ts +0 -32
- package/dist/types/tools/todo-write.d.ts +0 -120
- package/dist/types/tools/tool-errors.d.ts +0 -33
- package/dist/types/tools/tool-result.d.ts +0 -30
- package/dist/types/tools/tool-timeouts.d.ts +0 -56
- package/dist/types/tools/ultragoal-ask-guard.d.ts +0 -12
- package/dist/types/tools/vim.d.ts +0 -58
- package/dist/types/tools/write.d.ts +0 -59
- package/dist/types/tools/yield.d.ts +0 -25
- package/dist/types/tui/code-cell.d.ts +0 -32
- package/dist/types/tui/file-list.d.ts +0 -22
- package/dist/types/tui/hyperlink.d.ts +0 -42
- package/dist/types/tui/index.d.ts +0 -11
- package/dist/types/tui/output-block.d.ts +0 -28
- package/dist/types/tui/status-line.d.ts +0 -18
- package/dist/types/tui/tree-list.d.ts +0 -19
- package/dist/types/tui/types.d.ts +0 -13
- package/dist/types/tui/utils.d.ts +0 -36
- package/dist/types/utils/changelog.d.ts +0 -37
- package/dist/types/utils/clipboard.d.ts +0 -22
- package/dist/types/utils/cmux-workspace.d.ts +0 -52
- package/dist/types/utils/command-args.d.ts +0 -9
- package/dist/types/utils/commit-message-generator.d.ts +0 -7
- package/dist/types/utils/edit-mode.d.ts +0 -13
- package/dist/types/utils/event-bus.d.ts +0 -6
- package/dist/types/utils/external-editor.d.ts +0 -17
- package/dist/types/utils/file-display-mode.d.ts +0 -27
- package/dist/types/utils/file-mentions.d.ts +0 -25
- package/dist/types/utils/git.d.ts +0 -393
- package/dist/types/utils/image-loading.d.ts +0 -26
- package/dist/types/utils/image-resize.d.ts +0 -39
- package/dist/types/utils/lang-from-path.d.ts +0 -8
- package/dist/types/utils/linkedom.d.ts +0 -4
- package/dist/types/utils/markit.d.ts +0 -7
- package/dist/types/utils/open.d.ts +0 -2
- package/dist/types/utils/pasted-image-path.d.ts +0 -32
- package/dist/types/utils/session-color.d.ts +0 -10
- package/dist/types/utils/shell-snapshot.d.ts +0 -5
- package/dist/types/utils/sixel.d.ts +0 -21
- package/dist/types/utils/title-generator.d.ts +0 -31
- package/dist/types/utils/tool-choice.d.ts +0 -20
- package/dist/types/utils/tools-manager.d.ts +0 -9
- package/dist/types/vim/buffer.d.ts +0 -41
- package/dist/types/vim/commands.d.ts +0 -6
- package/dist/types/vim/engine.d.ts +0 -47
- package/dist/types/vim/parser.d.ts +0 -3
- package/dist/types/vim/render.d.ts +0 -25
- package/dist/types/vim/types.d.ts +0 -182
- package/dist/types/web/insane/bridge.d.ts +0 -103
- package/dist/types/web/insane/url-guard.d.ts +0 -25
- package/dist/types/web/kagi.d.ts +0 -23
- package/dist/types/web/parallel.d.ts +0 -58
- package/dist/types/web/scrapers/artifacthub.d.ts +0 -6
- package/dist/types/web/scrapers/arxiv.d.ts +0 -5
- package/dist/types/web/scrapers/aur.d.ts +0 -5
- package/dist/types/web/scrapers/biorxiv.d.ts +0 -5
- package/dist/types/web/scrapers/bluesky.d.ts +0 -5
- package/dist/types/web/scrapers/brew.d.ts +0 -5
- package/dist/types/web/scrapers/cheatsh.d.ts +0 -8
- package/dist/types/web/scrapers/chocolatey.d.ts +0 -5
- package/dist/types/web/scrapers/choosealicense.d.ts +0 -2
- package/dist/types/web/scrapers/cisa-kev.d.ts +0 -5
- package/dist/types/web/scrapers/clojars.d.ts +0 -5
- package/dist/types/web/scrapers/coingecko.d.ts +0 -5
- package/dist/types/web/scrapers/crates-io.d.ts +0 -5
- package/dist/types/web/scrapers/crossref.d.ts +0 -2
- package/dist/types/web/scrapers/devto.d.ts +0 -5
- package/dist/types/web/scrapers/discogs.d.ts +0 -8
- package/dist/types/web/scrapers/discourse.d.ts +0 -5
- package/dist/types/web/scrapers/dockerhub.d.ts +0 -5
- package/dist/types/web/scrapers/docs-rs.d.ts +0 -2
- package/dist/types/web/scrapers/fdroid.d.ts +0 -5
- package/dist/types/web/scrapers/firefox-addons.d.ts +0 -2
- package/dist/types/web/scrapers/flathub.d.ts +0 -2
- package/dist/types/web/scrapers/github-gist.d.ts +0 -5
- package/dist/types/web/scrapers/github.d.ts +0 -12
- package/dist/types/web/scrapers/gitlab.d.ts +0 -5
- package/dist/types/web/scrapers/go-pkg.d.ts +0 -5
- package/dist/types/web/scrapers/hackage.d.ts +0 -5
- package/dist/types/web/scrapers/hackernews.d.ts +0 -2
- package/dist/types/web/scrapers/hex.d.ts +0 -5
- package/dist/types/web/scrapers/huggingface.d.ts +0 -2
- package/dist/types/web/scrapers/iacr.d.ts +0 -5
- package/dist/types/web/scrapers/index.d.ts +0 -84
- package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +0 -2
- package/dist/types/web/scrapers/lemmy.d.ts +0 -2
- package/dist/types/web/scrapers/lobsters.d.ts +0 -5
- package/dist/types/web/scrapers/mastodon.d.ts +0 -5
- package/dist/types/web/scrapers/maven.d.ts +0 -6
- package/dist/types/web/scrapers/mdn.d.ts +0 -2
- package/dist/types/web/scrapers/metacpan.d.ts +0 -5
- package/dist/types/web/scrapers/musicbrainz.d.ts +0 -5
- package/dist/types/web/scrapers/npm.d.ts +0 -5
- package/dist/types/web/scrapers/nuget.d.ts +0 -5
- package/dist/types/web/scrapers/nvd.d.ts +0 -5
- package/dist/types/web/scrapers/ollama.d.ts +0 -2
- package/dist/types/web/scrapers/open-vsx.d.ts +0 -5
- package/dist/types/web/scrapers/opencorporates.d.ts +0 -5
- package/dist/types/web/scrapers/openlibrary.d.ts +0 -5
- package/dist/types/web/scrapers/orcid.d.ts +0 -5
- package/dist/types/web/scrapers/osv.d.ts +0 -5
- package/dist/types/web/scrapers/packagist.d.ts +0 -5
- package/dist/types/web/scrapers/pub-dev.d.ts +0 -5
- package/dist/types/web/scrapers/pubmed.d.ts +0 -5
- package/dist/types/web/scrapers/pypi.d.ts +0 -5
- package/dist/types/web/scrapers/rawg.d.ts +0 -2
- package/dist/types/web/scrapers/readthedocs.d.ts +0 -2
- package/dist/types/web/scrapers/reddit.d.ts +0 -5
- package/dist/types/web/scrapers/repology.d.ts +0 -5
- package/dist/types/web/scrapers/rfc.d.ts +0 -5
- package/dist/types/web/scrapers/rubygems.d.ts +0 -5
- package/dist/types/web/scrapers/searchcode.d.ts +0 -2
- package/dist/types/web/scrapers/sec-edgar.d.ts +0 -5
- package/dist/types/web/scrapers/semantic-scholar.d.ts +0 -2
- package/dist/types/web/scrapers/snapcraft.d.ts +0 -2
- package/dist/types/web/scrapers/sourcegraph.d.ts +0 -2
- package/dist/types/web/scrapers/spdx.d.ts +0 -5
- package/dist/types/web/scrapers/spotify.d.ts +0 -8
- package/dist/types/web/scrapers/stackoverflow.d.ts +0 -6
- package/dist/types/web/scrapers/terraform.d.ts +0 -5
- package/dist/types/web/scrapers/tldr.d.ts +0 -7
- package/dist/types/web/scrapers/twitter.d.ts +0 -5
- package/dist/types/web/scrapers/types.d.ts +0 -83
- package/dist/types/web/scrapers/utils.d.ts +0 -32
- package/dist/types/web/scrapers/vimeo.d.ts +0 -5
- package/dist/types/web/scrapers/vscode-marketplace.d.ts +0 -5
- package/dist/types/web/scrapers/w3c.d.ts +0 -2
- package/dist/types/web/scrapers/wikidata.d.ts +0 -5
- package/dist/types/web/scrapers/wikipedia.d.ts +0 -5
- package/dist/types/web/scrapers/youtube.d.ts +0 -13
- package/dist/types/web/search/index.d.ts +0 -118
- package/dist/types/web/search/provider.d.ts +0 -55
- package/dist/types/web/search/providers/anthropic.d.ts +0 -32
- package/dist/types/web/search/providers/base.d.ts +0 -90
- package/dist/types/web/search/providers/brave.d.ts +0 -27
- package/dist/types/web/search/providers/codex.d.ts +0 -35
- package/dist/types/web/search/providers/duckduckgo.d.ts +0 -57
- package/dist/types/web/search/providers/exa.d.ts +0 -52
- package/dist/types/web/search/providers/gemini.d.ts +0 -57
- package/dist/types/web/search/providers/insane.d.ts +0 -53
- package/dist/types/web/search/providers/jina.d.ts +0 -26
- package/dist/types/web/search/providers/kagi.d.ts +0 -24
- package/dist/types/web/search/providers/kimi.d.ts +0 -27
- package/dist/types/web/search/providers/openai-compatible.d.ts +0 -9
- package/dist/types/web/search/providers/parallel.d.ts +0 -15
- package/dist/types/web/search/providers/perplexity.d.ts +0 -38
- package/dist/types/web/search/providers/searxng.d.ts +0 -44
- package/dist/types/web/search/providers/synthetic.d.ts +0 -21
- package/dist/types/web/search/providers/tavily.d.ts +0 -29
- package/dist/types/web/search/providers/text-citations.d.ts +0 -23
- package/dist/types/web/search/providers/utils.d.ts +0 -88
- package/dist/types/web/search/providers/xai.d.ts +0 -64
- package/dist/types/web/search/providers/zai.d.ts +0 -28
- package/dist/types/web/search/render.d.ts +0 -36
- package/dist/types/web/search/types.d.ts +0 -372
- package/dist/types/web/search/utils.d.ts +0 -4
- package/dist/types/workflow/workflow-intent-diff.d.ts +0 -25
- package/dist/types/workflow/workflow-intent-report-consumer.d.ts +0 -50
- package/dist/types/workflow/workflow-intent-report-schema.d.ts +0 -2
- package/dist/types/workflow/workflow-intent-report.d.ts +0 -48
- package/dist/types/workspace-tree.d.ts +0 -42
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import * as crypto from "node:crypto";
|
|
1
2
|
import * as fs from "node:fs";
|
|
3
|
+
|
|
2
4
|
import * as os from "node:os";
|
|
3
5
|
import * as path from "node:path";
|
|
4
|
-
import type
|
|
6
|
+
import { type AgentMessage, canContinuePersistedHistory } from "@sayknow-cli/agent-core";
|
|
5
7
|
import type {
|
|
6
8
|
ImageContent,
|
|
7
9
|
Message,
|
|
@@ -61,7 +63,15 @@ import {
|
|
|
61
63
|
sanitizeRehydratedOpenAIResponsesAssistantMessage,
|
|
62
64
|
stripInternalDetailsFields,
|
|
63
65
|
} from "./messages";
|
|
64
|
-
import type {
|
|
66
|
+
import type {
|
|
67
|
+
SessionStorage,
|
|
68
|
+
SessionStorageSnapshot,
|
|
69
|
+
SessionStorageStat,
|
|
70
|
+
SessionStorageWriter,
|
|
71
|
+
SessionStorageWriterCloseState,
|
|
72
|
+
VerifiedSessionDeleteResult,
|
|
73
|
+
VerifiedSessionDeleteTarget,
|
|
74
|
+
} from "./session-storage";
|
|
65
75
|
import { FileSessionStorage, MemorySessionStorage } from "./session-storage";
|
|
66
76
|
|
|
67
77
|
export const CURRENT_SESSION_VERSION = 3;
|
|
@@ -145,6 +155,53 @@ export interface SessionMessageEntry extends SessionEntryBase {
|
|
|
145
155
|
evictedContent?: EvictedContentMarker;
|
|
146
156
|
}
|
|
147
157
|
|
|
158
|
+
const sessionMessageEntryIds = new WeakMap<object, string>();
|
|
159
|
+
const sessionMessageViewportAnchorIds = new WeakMap<object, string>();
|
|
160
|
+
const sessionMessageObservationIds = new WeakMap<object, string>();
|
|
161
|
+
|
|
162
|
+
export function associateSessionMessageEntryId(message: AgentMessage, entryId: string): void {
|
|
163
|
+
sessionMessageEntryIds.set(message, entryId);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function getSessionMessageEntryId(message: AgentMessage): string | undefined {
|
|
167
|
+
return sessionMessageEntryIds.get(message);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function associateSessionMessageObservationId(message: AgentMessage, observationId: string): string {
|
|
171
|
+
const existing = sessionMessageObservationIds.get(message);
|
|
172
|
+
if (existing) return existing;
|
|
173
|
+
sessionMessageObservationIds.set(message, observationId);
|
|
174
|
+
return observationId;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function getSessionMessageObservationId(message: AgentMessage): string | undefined {
|
|
178
|
+
return sessionMessageObservationIds.get(message);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function associateSessionMessageViewportAnchorId(message: AgentMessage, anchorId: string): void {
|
|
182
|
+
sessionMessageViewportAnchorIds.set(message, anchorId);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function getSessionMessageViewportAnchorId(message: AgentMessage): string | undefined {
|
|
186
|
+
return sessionMessageViewportAnchorIds.get(message);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export function transferSessionMessageIdentity(source: AgentMessage[], target: AgentMessage[]): void {
|
|
190
|
+
if (source.length !== target.length) {
|
|
191
|
+
throw new Error(
|
|
192
|
+
`Cannot transfer session message identity across ${source.length} source and ${target.length} target messages`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
for (let index = 0; index < source.length; index++) {
|
|
196
|
+
const entryId = getSessionMessageEntryId(source[index]);
|
|
197
|
+
if (entryId) associateSessionMessageEntryId(target[index], entryId);
|
|
198
|
+
const observationId = getSessionMessageObservationId(source[index]);
|
|
199
|
+
if (observationId) associateSessionMessageObservationId(target[index], observationId);
|
|
200
|
+
const anchorId = getSessionMessageViewportAnchorId(source[index]);
|
|
201
|
+
if (anchorId) associateSessionMessageViewportAnchorId(target[index], anchorId);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
148
205
|
export interface ThinkingLevelChangeEntry extends SessionEntryBase {
|
|
149
206
|
type: "thinking_level_change";
|
|
150
207
|
thinkingLevel?: string | null;
|
|
@@ -332,6 +389,48 @@ export interface SessionContext {
|
|
|
332
389
|
modeData?: Record<string, unknown>;
|
|
333
390
|
}
|
|
334
391
|
|
|
392
|
+
/** Immutable fingerprint captured during read-only resume inspection. */
|
|
393
|
+
export interface ResumeSessionIdentity {
|
|
394
|
+
canonicalPath: string;
|
|
395
|
+
sessionId: string;
|
|
396
|
+
dev: bigint;
|
|
397
|
+
ino: bigint;
|
|
398
|
+
size: number;
|
|
399
|
+
mtimeMs: number;
|
|
400
|
+
mtimeNs: bigint;
|
|
401
|
+
sha256: string;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export interface ResumeTailResumable {
|
|
405
|
+
kind: "resumable";
|
|
406
|
+
identity: ResumeSessionIdentity;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
export interface ResumeTailTerminal {
|
|
410
|
+
kind: "terminal";
|
|
411
|
+
identity: ResumeSessionIdentity;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
export interface ResumeTailError {
|
|
415
|
+
kind: "error";
|
|
416
|
+
reason: "missing" | "malformed" | "unstable" | "read-failed";
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export type ResumeTailInspection = ResumeTailResumable | ResumeTailTerminal | ResumeTailError;
|
|
420
|
+
|
|
421
|
+
export interface StrictSessionOpenSuccess {
|
|
422
|
+
kind: "opened";
|
|
423
|
+
manager: SessionManager;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export interface StrictSessionOpenFailure {
|
|
427
|
+
kind: "error";
|
|
428
|
+
reason: ResumeTailError["reason"] | "identity-mismatch";
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/** Result of opening an inspected session without create-or-rewrite fallback. */
|
|
432
|
+
export type StrictSessionOpenResult = StrictSessionOpenSuccess | StrictSessionOpenFailure;
|
|
433
|
+
|
|
335
434
|
export interface SessionInfo {
|
|
336
435
|
path: string;
|
|
337
436
|
id: string;
|
|
@@ -348,6 +447,56 @@ export interface SessionInfo {
|
|
|
348
447
|
firstMessage: string;
|
|
349
448
|
allMessagesText: string;
|
|
350
449
|
}
|
|
450
|
+
// =============================================================================
|
|
451
|
+
// Strict ACP authorization inventory (fail-closed, never partial authority)
|
|
452
|
+
// =============================================================================
|
|
453
|
+
|
|
454
|
+
/** Kind of failure surfaced by strict scoped inventory. Any failure grants zero authority. */
|
|
455
|
+
export type StrictInventoryFailureKind =
|
|
456
|
+
| "root"
|
|
457
|
+
| "scan"
|
|
458
|
+
| "lstat"
|
|
459
|
+
| "read"
|
|
460
|
+
| "parse"
|
|
461
|
+
| "stat"
|
|
462
|
+
| "header"
|
|
463
|
+
| "cwd"
|
|
464
|
+
| "containment"
|
|
465
|
+
| "identity";
|
|
466
|
+
|
|
467
|
+
/** Sanitized strict-inventory failure. Never carries raw file content. */
|
|
468
|
+
export interface StrictInventoryFailure {
|
|
469
|
+
kind: StrictInventoryFailureKind;
|
|
470
|
+
message: string;
|
|
471
|
+
path?: string;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** One exact-identity candidate suitable for ACP authorization binding. */
|
|
475
|
+
export interface StrictInventoryCandidate {
|
|
476
|
+
/** Canonical absolute transcript path. */
|
|
477
|
+
path: string;
|
|
478
|
+
/** Session id parsed from the header. */
|
|
479
|
+
id: string;
|
|
480
|
+
/** Canonical cwd parsed from the header. */
|
|
481
|
+
cwd: string;
|
|
482
|
+
/** Descriptor-bound transcript identity (dev, ino, ...). */
|
|
483
|
+
identity: SessionStorageStat;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Strict inventory result. `complete` carries the full validated candidate set;
|
|
488
|
+
* `failure` carries every sanitized failure and grants zero page/cursor/authority.
|
|
489
|
+
* A failure result is never reduced to a partial candidate set.
|
|
490
|
+
*/
|
|
491
|
+
export type StrictInventoryResult =
|
|
492
|
+
| { kind: "complete"; candidates: StrictInventoryCandidate[] }
|
|
493
|
+
| { kind: "failure"; failures: StrictInventoryFailure[] };
|
|
494
|
+
|
|
495
|
+
/** Certainty-aware close outcome for strict ACP disposal. */
|
|
496
|
+
export type SessionManagerCloseOutcome =
|
|
497
|
+
| { kind: "closed" }
|
|
498
|
+
| { kind: "close_failed_retryable"; error: Error }
|
|
499
|
+
| { kind: "close_unknown"; error: Error };
|
|
351
500
|
|
|
352
501
|
export type ReadonlySessionManager = Pick<
|
|
353
502
|
SessionManager,
|
|
@@ -517,6 +666,17 @@ function getDefaultSessionDirName(cwd: string): { encodedDirName: string; resolv
|
|
|
517
666
|
return { encodedDirName, resolvedCwd };
|
|
518
667
|
}
|
|
519
668
|
|
|
669
|
+
/** Default and legacy directory candidates for maintenance-free resume discovery. */
|
|
670
|
+
function getReadOnlyDefaultSessionDirs(cwd: string, sessionsRoot: string = getSessionsDir()): string[] {
|
|
671
|
+
const { encodedDirName, resolvedCwd } = getDefaultSessionDirName(cwd);
|
|
672
|
+
const canonicalCwd = resolveEquivalentPath(resolvedCwd);
|
|
673
|
+
return [
|
|
674
|
+
path.join(sessionsRoot, encodedDirName),
|
|
675
|
+
path.join(sessionsRoot, encodeLegacyAbsoluteSessionDirName(canonicalCwd)),
|
|
676
|
+
path.join(sessionsRoot, encodeLegacyAbsoluteSessionDirName(resolvedCwd)),
|
|
677
|
+
].filter((dir, index, dirs) => dirs.indexOf(dir) === index);
|
|
678
|
+
}
|
|
679
|
+
|
|
520
680
|
/**
|
|
521
681
|
* Migrate old `--<home-encoded>-*--` session dirs to the new `-*` format.
|
|
522
682
|
* Runs once per sessions root on first access, best-effort.
|
|
@@ -602,6 +762,7 @@ export function buildSessionContext(
|
|
|
602
762
|
entries: SessionEntry[],
|
|
603
763
|
leafId?: string | null,
|
|
604
764
|
byId?: Map<string, SessionEntry>,
|
|
765
|
+
sessionIdentityNamespace = "legacy-session",
|
|
605
766
|
): SessionContext {
|
|
606
767
|
// Build uuid index if not available
|
|
607
768
|
if (!byId) {
|
|
@@ -747,18 +908,29 @@ export function buildSessionContext(
|
|
|
747
908
|
|
|
748
909
|
const appendMessage = (entry: SessionEntry) => {
|
|
749
910
|
if (entry.type === "message") {
|
|
911
|
+
associateSessionMessageEntryId(entry.message, entry.id);
|
|
750
912
|
messages.push(entry.message);
|
|
751
913
|
} else if (entry.type === "custom_message") {
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
entry.attribution,
|
|
760
|
-
),
|
|
914
|
+
const message = createCustomMessage(
|
|
915
|
+
entry.customType,
|
|
916
|
+
entry.content,
|
|
917
|
+
entry.display,
|
|
918
|
+
entry.details,
|
|
919
|
+
entry.timestamp,
|
|
920
|
+
entry.attribution,
|
|
761
921
|
);
|
|
922
|
+
associateSessionMessageEntryId(message, entry.id);
|
|
923
|
+
const persistedObservationId =
|
|
924
|
+
entry.details && typeof entry.details === "object" && !Array.isArray(entry.details)
|
|
925
|
+
? (entry.details as Record<string, unknown>).observationId
|
|
926
|
+
: undefined;
|
|
927
|
+
associateSessionMessageObservationId(
|
|
928
|
+
message,
|
|
929
|
+
typeof persistedObservationId === "string"
|
|
930
|
+
? persistedObservationId
|
|
931
|
+
: `session:${sessionIdentityNamespace}:entry:${entry.id}`,
|
|
932
|
+
);
|
|
933
|
+
messages.push(message);
|
|
762
934
|
} else if (entry.type === "branch_summary" && entry.summary) {
|
|
763
935
|
messages.push(createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp));
|
|
764
936
|
}
|
|
@@ -836,9 +1008,11 @@ export function buildSessionContext(
|
|
|
836
1008
|
}
|
|
837
1009
|
|
|
838
1010
|
function cloneSessionContext(context: SessionContext): SessionContext {
|
|
1011
|
+
const messages = cloneJsonSemantic(context.messages);
|
|
1012
|
+
transferSessionMessageIdentity(context.messages, messages);
|
|
839
1013
|
return {
|
|
840
1014
|
...context,
|
|
841
|
-
messages
|
|
1015
|
+
messages,
|
|
842
1016
|
models: { ...context.models },
|
|
843
1017
|
injectedTtsrRules: [...context.injectedTtsrRules],
|
|
844
1018
|
injectedTtsrRuleRecords: context.injectedTtsrRuleRecords?.map(record => ({ ...record })),
|
|
@@ -970,6 +1144,212 @@ export async function loadEntriesFromFile(
|
|
|
970
1144
|
return entries;
|
|
971
1145
|
}
|
|
972
1146
|
|
|
1147
|
+
function sameResumeIdentity(left: ResumeSessionIdentity, right: ResumeSessionIdentity): boolean {
|
|
1148
|
+
return (
|
|
1149
|
+
left.canonicalPath === right.canonicalPath &&
|
|
1150
|
+
left.sessionId === right.sessionId &&
|
|
1151
|
+
left.dev === right.dev &&
|
|
1152
|
+
left.ino === right.ino &&
|
|
1153
|
+
left.size === right.size &&
|
|
1154
|
+
left.mtimeMs === right.mtimeMs &&
|
|
1155
|
+
left.mtimeNs === right.mtimeNs &&
|
|
1156
|
+
left.sha256 === right.sha256
|
|
1157
|
+
);
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
function sameResumeStat(left: SessionStorageStat, right: SessionStorageStat): boolean {
|
|
1161
|
+
return (
|
|
1162
|
+
left.isFile &&
|
|
1163
|
+
right.isFile &&
|
|
1164
|
+
left.dev === right.dev &&
|
|
1165
|
+
left.ino === right.ino &&
|
|
1166
|
+
left.size === right.size &&
|
|
1167
|
+
left.mtimeMs === right.mtimeMs &&
|
|
1168
|
+
left.mtimeNs === right.mtimeNs
|
|
1169
|
+
);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
interface ResumeInspectionSnapshot {
|
|
1173
|
+
identity: ResumeSessionIdentity;
|
|
1174
|
+
entries: FileEntry[];
|
|
1175
|
+
context: SessionContext;
|
|
1176
|
+
migrationApplied: boolean;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
function resumeReadFailure(error: unknown, storage: SessionStorage, path: string): ResumeTailError {
|
|
1180
|
+
let missing = isEnoent(error);
|
|
1181
|
+
if (!missing) {
|
|
1182
|
+
try {
|
|
1183
|
+
missing = !storage.existsSync(path);
|
|
1184
|
+
} catch {
|
|
1185
|
+
// Preserve the primary read/stat failure when existence cannot be checked.
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
return { kind: "error", reason: missing ? "missing" : "read-failed" };
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
function hasStrictSessionSchema(entries: FileEntry[]): boolean {
|
|
1192
|
+
for (const entry of entries) {
|
|
1193
|
+
const value = entry as unknown as Record<string, unknown>;
|
|
1194
|
+
if (typeof value.type !== "string") return false;
|
|
1195
|
+
if (value.type === "session") {
|
|
1196
|
+
if (typeof value.id !== "string" || typeof value.cwd !== "string" || typeof value.timestamp !== "string")
|
|
1197
|
+
return false;
|
|
1198
|
+
continue;
|
|
1199
|
+
}
|
|
1200
|
+
if (
|
|
1201
|
+
typeof value.id !== "string" ||
|
|
1202
|
+
(value.parentId !== null && typeof value.parentId !== "string") ||
|
|
1203
|
+
typeof value.timestamp !== "string"
|
|
1204
|
+
) {
|
|
1205
|
+
return false;
|
|
1206
|
+
}
|
|
1207
|
+
switch (value.type) {
|
|
1208
|
+
case "message": {
|
|
1209
|
+
if (typeof value.message !== "object" || value.message === null) return false;
|
|
1210
|
+
const message = value.message as Record<string, unknown>;
|
|
1211
|
+
if (typeof message.role !== "string") return false;
|
|
1212
|
+
break;
|
|
1213
|
+
}
|
|
1214
|
+
case "model_change":
|
|
1215
|
+
if (
|
|
1216
|
+
typeof value.model !== "string" &&
|
|
1217
|
+
!(typeof value.provider === "string" && typeof value.modelId === "string")
|
|
1218
|
+
)
|
|
1219
|
+
return false;
|
|
1220
|
+
break;
|
|
1221
|
+
case "compaction":
|
|
1222
|
+
if (
|
|
1223
|
+
typeof value.summary !== "string" ||
|
|
1224
|
+
typeof value.firstKeptEntryId !== "string" ||
|
|
1225
|
+
typeof value.tokensBefore !== "number"
|
|
1226
|
+
)
|
|
1227
|
+
return false;
|
|
1228
|
+
break;
|
|
1229
|
+
case "branch_summary":
|
|
1230
|
+
if (typeof value.fromId !== "string" || typeof value.summary !== "string") return false;
|
|
1231
|
+
break;
|
|
1232
|
+
case "custom":
|
|
1233
|
+
if (typeof value.customType !== "string") return false;
|
|
1234
|
+
break;
|
|
1235
|
+
case "custom_message":
|
|
1236
|
+
if (
|
|
1237
|
+
typeof value.customType !== "string" ||
|
|
1238
|
+
(typeof value.content !== "string" && !Array.isArray(value.content)) ||
|
|
1239
|
+
typeof value.display !== "boolean"
|
|
1240
|
+
)
|
|
1241
|
+
return false;
|
|
1242
|
+
break;
|
|
1243
|
+
case "label":
|
|
1244
|
+
if (typeof value.targetId !== "string" || (value.label !== undefined && typeof value.label !== "string"))
|
|
1245
|
+
return false;
|
|
1246
|
+
break;
|
|
1247
|
+
case "ttsr_injection":
|
|
1248
|
+
if (!Array.isArray(value.injectedRules) || !value.injectedRules.every(rule => typeof rule === "string"))
|
|
1249
|
+
return false;
|
|
1250
|
+
break;
|
|
1251
|
+
case "mcp_tool_selection":
|
|
1252
|
+
if (
|
|
1253
|
+
!Array.isArray(value.selectedToolNames) ||
|
|
1254
|
+
!value.selectedToolNames.every(name => typeof name === "string")
|
|
1255
|
+
)
|
|
1256
|
+
return false;
|
|
1257
|
+
break;
|
|
1258
|
+
case "session_init":
|
|
1259
|
+
if (
|
|
1260
|
+
typeof value.systemPrompt !== "string" ||
|
|
1261
|
+
typeof value.task !== "string" ||
|
|
1262
|
+
!Array.isArray(value.tools) ||
|
|
1263
|
+
!value.tools.every(tool => typeof tool === "string")
|
|
1264
|
+
)
|
|
1265
|
+
return false;
|
|
1266
|
+
break;
|
|
1267
|
+
case "mode_change":
|
|
1268
|
+
if (typeof value.mode !== "string") return false;
|
|
1269
|
+
break;
|
|
1270
|
+
case "thinking_level_change":
|
|
1271
|
+
if (
|
|
1272
|
+
value.thinkingLevel !== undefined &&
|
|
1273
|
+
value.thinkingLevel !== null &&
|
|
1274
|
+
typeof value.thinkingLevel !== "string"
|
|
1275
|
+
)
|
|
1276
|
+
return false;
|
|
1277
|
+
break;
|
|
1278
|
+
case "service_tier_change":
|
|
1279
|
+
if (value.serviceTier !== null && typeof value.serviceTier !== "string") return false;
|
|
1280
|
+
break;
|
|
1281
|
+
default:
|
|
1282
|
+
return false;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
return true;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
function inspectResumeSessionFile(
|
|
1289
|
+
filePath: string,
|
|
1290
|
+
storage: SessionStorage,
|
|
1291
|
+
): ResumeInspectionSnapshot | ResumeTailError {
|
|
1292
|
+
const canonicalPath = resolveEquivalentPath(path.resolve(filePath));
|
|
1293
|
+
let before: SessionStorageStat;
|
|
1294
|
+
try {
|
|
1295
|
+
before = storage.statSync(canonicalPath);
|
|
1296
|
+
} catch (error) {
|
|
1297
|
+
return resumeReadFailure(error, storage, canonicalPath);
|
|
1298
|
+
}
|
|
1299
|
+
if (!before.isFile || !storage.readSnapshotSync) {
|
|
1300
|
+
return { kind: "error", reason: "read-failed" };
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
let bytes: Uint8Array;
|
|
1304
|
+
let snapshot: SessionStorageStat;
|
|
1305
|
+
let after: SessionStorageStat;
|
|
1306
|
+
try {
|
|
1307
|
+
const readSnapshot = storage.readSnapshotSync(canonicalPath);
|
|
1308
|
+
bytes = readSnapshot.bytes;
|
|
1309
|
+
snapshot = readSnapshot.stat;
|
|
1310
|
+
after = storage.statSync(canonicalPath);
|
|
1311
|
+
} catch (error) {
|
|
1312
|
+
return resumeReadFailure(error, storage, canonicalPath);
|
|
1313
|
+
}
|
|
1314
|
+
if (!sameResumeStat(before, snapshot) || !sameResumeStat(snapshot, after)) {
|
|
1315
|
+
return { kind: "error", reason: "unstable" };
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
try {
|
|
1319
|
+
const content = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
1320
|
+
for (const line of content.split(/\r?\n/)) {
|
|
1321
|
+
if (line.length === 0) continue;
|
|
1322
|
+
JSON.parse(line);
|
|
1323
|
+
}
|
|
1324
|
+
const entries = parseSessionEntries(content);
|
|
1325
|
+
const header = entries[0] as SessionHeader | undefined;
|
|
1326
|
+
if (header?.type !== "session" || typeof header.id !== "string") {
|
|
1327
|
+
return { kind: "error", reason: "malformed" };
|
|
1328
|
+
}
|
|
1329
|
+
const migrationApplied = migrateToCurrentVersion(entries);
|
|
1330
|
+
if (!hasStrictSessionSchema(entries)) return { kind: "error", reason: "malformed" };
|
|
1331
|
+
const context = buildSessionContext(
|
|
1332
|
+
entries.filter((entry): entry is SessionEntry => entry.type !== "session"),
|
|
1333
|
+
undefined,
|
|
1334
|
+
undefined,
|
|
1335
|
+
header.id,
|
|
1336
|
+
);
|
|
1337
|
+
const identity: ResumeSessionIdentity = {
|
|
1338
|
+
canonicalPath,
|
|
1339
|
+
sessionId: header.id,
|
|
1340
|
+
dev: snapshot.dev,
|
|
1341
|
+
ino: snapshot.ino,
|
|
1342
|
+
size: snapshot.size,
|
|
1343
|
+
mtimeMs: snapshot.mtimeMs,
|
|
1344
|
+
mtimeNs: snapshot.mtimeNs,
|
|
1345
|
+
sha256: crypto.createHash("sha256").update(bytes).digest("hex"),
|
|
1346
|
+
};
|
|
1347
|
+
return { identity, entries, context, migrationApplied };
|
|
1348
|
+
} catch {
|
|
1349
|
+
return { kind: "error", reason: "malformed" };
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
|
|
973
1353
|
/**
|
|
974
1354
|
* Convert legacy persisted blob references in loaded entries into resident sentinels.
|
|
975
1355
|
* Images then materialize lazily at provider/display/export chokepoints instead of
|
|
@@ -1605,11 +1985,13 @@ function cloneJsonSemantic<T>(value: T): T {
|
|
|
1605
1985
|
}
|
|
1606
1986
|
|
|
1607
1987
|
function cloneAgentMessage<T extends AgentMessage>(message: T): T {
|
|
1608
|
-
|
|
1988
|
+
const cloned = {
|
|
1609
1989
|
...message,
|
|
1610
1990
|
...("content" in message ? { content: cloneJsonSemantic(message.content) } : {}),
|
|
1611
1991
|
...("providerPayload" in message ? { providerPayload: cloneJsonSemantic(message.providerPayload) } : {}),
|
|
1612
|
-
};
|
|
1992
|
+
} as T;
|
|
1993
|
+
transferSessionMessageIdentity([message], [cloned]);
|
|
1994
|
+
return cloned;
|
|
1613
1995
|
}
|
|
1614
1996
|
|
|
1615
1997
|
function cloneSessionEntry(entry: SessionEntry): SessionEntry {
|
|
@@ -2196,6 +2578,7 @@ class NdjsonFileWriter {
|
|
|
2196
2578
|
#error: Error | undefined;
|
|
2197
2579
|
#pendingWrites: Promise<void> = Promise.resolve();
|
|
2198
2580
|
#onError: ((err: Error) => void) | undefined;
|
|
2581
|
+
#closeDrained = false;
|
|
2199
2582
|
|
|
2200
2583
|
constructor(storage: SessionStorage, path: string, options?: { flags?: "a" | "w"; onError?: (err: Error) => void }) {
|
|
2201
2584
|
this.#onError = options?.onError;
|
|
@@ -2289,35 +2672,61 @@ class NdjsonFileWriter {
|
|
|
2289
2672
|
}
|
|
2290
2673
|
}
|
|
2291
2674
|
|
|
2292
|
-
/** Close the writer, flushing all data. */
|
|
2675
|
+
/** Close the writer, flushing all data. Retryable across certified pre-dispatch failures. */
|
|
2293
2676
|
async close(): Promise<void> {
|
|
2294
|
-
|
|
2295
|
-
this.#
|
|
2677
|
+
// Terminal (confirmed closed or quarantined close_unknown): no further attempts.
|
|
2678
|
+
if (this.#closed) return;
|
|
2679
|
+
// Re-entry guard: once a fresh attempt has started draining, block concurrent
|
|
2680
|
+
// close() calls. A retry after a certified pre-dispatch failure has #closing
|
|
2681
|
+
// reset and #closeDrained set, so it re-enters to actually re-dispatch the
|
|
2682
|
+
// underlying OS close — the wrapper must NOT mark itself closed on a retryable
|
|
2683
|
+
// failure, and must allow a genuine later retry.
|
|
2684
|
+
if (this.#closing) return;
|
|
2296
2685
|
|
|
2297
|
-
|
|
2298
|
-
try {
|
|
2299
|
-
await this.flush();
|
|
2300
|
-
} catch (err) {
|
|
2301
|
-
closeError = toError(err);
|
|
2302
|
-
}
|
|
2686
|
+
this.#closing = true;
|
|
2303
2687
|
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2688
|
+
let drainError: Error | undefined;
|
|
2689
|
+
// Only drain once: a retry after a pre-dispatch failure has already flushed
|
|
2690
|
+
// pending writes, and the underlying writer rejects further flushes while in
|
|
2691
|
+
// the retryable state. Re-draining would mask the close retry with that error.
|
|
2692
|
+
if (!this.#closeDrained) {
|
|
2693
|
+
try {
|
|
2694
|
+
await this.flush();
|
|
2695
|
+
} catch (err) {
|
|
2696
|
+
drainError = toError(err);
|
|
2697
|
+
}
|
|
2698
|
+
try {
|
|
2699
|
+
await this.#pendingWrites;
|
|
2700
|
+
} catch (err) {
|
|
2701
|
+
if (!drainError) drainError = toError(err);
|
|
2702
|
+
}
|
|
2703
|
+
this.#closeDrained = true;
|
|
2308
2704
|
}
|
|
2309
2705
|
|
|
2310
2706
|
try {
|
|
2311
2707
|
await this.#writer.close();
|
|
2312
2708
|
} catch (err) {
|
|
2313
|
-
|
|
2314
|
-
|
|
2709
|
+
if (this.#writer.getCloseState() === "close_failed_retryable") {
|
|
2710
|
+
// Certified pre-dispatch failure: the numeric fd is still owned and a
|
|
2711
|
+
// later retry is safe. Do NOT mark the wrapper closed, do NOT poison
|
|
2712
|
+
// #error (the retry must still be able to flush/close), and reset
|
|
2713
|
+
// #closing so the retry can actually re-dispatch. Surface the failure —
|
|
2714
|
+
// a partial close is never reported as success.
|
|
2715
|
+
this.#closing = false;
|
|
2716
|
+
throw toError(err);
|
|
2717
|
+
}
|
|
2718
|
+
// close_unknown (quarantined) or other dispatched failure: terminal. Record
|
|
2719
|
+
// the error and mark the wrapper closed so no retry/finalizer touches the
|
|
2720
|
+
// uncertain fd again.
|
|
2721
|
+
this.#closed = true;
|
|
2722
|
+
throw this.#recordError(err);
|
|
2315
2723
|
}
|
|
2316
2724
|
|
|
2725
|
+
// Confirmed closed (underlying close succeeded).
|
|
2317
2726
|
this.#closed = true;
|
|
2318
2727
|
|
|
2319
|
-
if (
|
|
2320
|
-
if (
|
|
2728
|
+
if (drainError) throw drainError;
|
|
2729
|
+
if (this.#error) throw this.#error;
|
|
2321
2730
|
}
|
|
2322
2731
|
|
|
2323
2732
|
/** Check if there's a stored error. */
|
|
@@ -2325,16 +2734,49 @@ class NdjsonFileWriter {
|
|
|
2325
2734
|
return this.#error;
|
|
2326
2735
|
}
|
|
2327
2736
|
|
|
2328
|
-
/**
|
|
2737
|
+
/**
|
|
2738
|
+
* True only while the writer accepts new writes. A retryable close failure
|
|
2739
|
+
* leaves the wrapper non-terminal but the underlying fd rejects writes, so
|
|
2740
|
+
* callers route appends around it rather than through it.
|
|
2741
|
+
*/
|
|
2329
2742
|
isOpen(): boolean {
|
|
2330
|
-
|
|
2743
|
+
if (this.#closed || this.#closing) return false;
|
|
2744
|
+
return this.#writer.getCloseState() === "open";
|
|
2331
2745
|
}
|
|
2332
2746
|
|
|
2747
|
+
/**
|
|
2748
|
+
* Truthful synchronous close used by the atomic-rewrite path: dispatches the
|
|
2749
|
+
* underlying close synchronously and throws on failure so a close failure is
|
|
2750
|
+
* observable BEFORE the rename step. No fire-and-forget: the old suppression
|
|
2751
|
+
* (`close().catch(() => {})`) let a rename proceed on an unclosed file.
|
|
2752
|
+
*/
|
|
2333
2753
|
closeSync(): void {
|
|
2334
2754
|
if (this.#closed) return;
|
|
2755
|
+
if (this.#closing) return;
|
|
2756
|
+
// The sync path's writeSync bypasses the async queue, so #pendingWrites is
|
|
2757
|
+
// not applicable; the caller has already issued every writeSync before this.
|
|
2758
|
+
try {
|
|
2759
|
+
this.#writer.closeSync();
|
|
2760
|
+
} catch (err) {
|
|
2761
|
+
if (this.#writer.getCloseState() === "close_failed_retryable") {
|
|
2762
|
+
// Retryable: keep the wrapper open for the cleanup retry in the caller's
|
|
2763
|
+
// catch block; surface the failure so the rename is skipped.
|
|
2764
|
+
throw toError(err);
|
|
2765
|
+
}
|
|
2766
|
+
this.#closed = true;
|
|
2767
|
+
throw this.#recordError(err);
|
|
2768
|
+
}
|
|
2335
2769
|
this.#closed = true;
|
|
2336
|
-
|
|
2337
|
-
|
|
2770
|
+
}
|
|
2771
|
+
|
|
2772
|
+
/** Certainty-aware close state of the underlying storage writer. */
|
|
2773
|
+
getCloseState(): SessionStorageWriterCloseState {
|
|
2774
|
+
return this.#writer.getCloseState();
|
|
2775
|
+
}
|
|
2776
|
+
|
|
2777
|
+
/** Stored error for a non-success underlying close state. */
|
|
2778
|
+
getCloseError(): Error | undefined {
|
|
2779
|
+
return this.#writer.getCloseError();
|
|
2338
2780
|
}
|
|
2339
2781
|
}
|
|
2340
2782
|
|
|
@@ -2921,6 +3363,26 @@ export class SessionManager {
|
|
|
2921
3363
|
await this.setSessionFile(sessionFile);
|
|
2922
3364
|
}
|
|
2923
3365
|
|
|
3366
|
+
async #hydrateExistingSession(sessionFile: string, entries: FileEntry[], migrationApplied: boolean): Promise<void> {
|
|
3367
|
+
const header = entries[0] as SessionHeader;
|
|
3368
|
+
this.#sessionFile = path.resolve(sessionFile);
|
|
3369
|
+
this.#sessionId = header.id;
|
|
3370
|
+
this.#sessionName = header.title;
|
|
3371
|
+
this.#titleSource = header.titleSource;
|
|
3372
|
+
this.#needsFullRewriteOnNextPersist = migrationApplied;
|
|
3373
|
+
await resolveBlobRefsInEntries(entries, this.#blobStore);
|
|
3374
|
+
this.#fileEntries = entries;
|
|
3375
|
+
this.#resetResidentTextBlobStore();
|
|
3376
|
+
this.#fileEntries = this.#fileEntries.map(entry =>
|
|
3377
|
+
prepareEntryForResidentSync(entry, this.#residentBlobStores()),
|
|
3378
|
+
);
|
|
3379
|
+
this.sanitizeLoadedOpenAIResponsesReplayMetadata();
|
|
3380
|
+
this.#buildIndex();
|
|
3381
|
+
this.#bumpAllRevisions();
|
|
3382
|
+
this.#flushed = true;
|
|
3383
|
+
this.#ensuredOnDisk = true;
|
|
3384
|
+
}
|
|
3385
|
+
|
|
2924
3386
|
/** Initialize with a new session (used by factory methods) */
|
|
2925
3387
|
#initNewSession(): void {
|
|
2926
3388
|
this.#newSessionSync();
|
|
@@ -3446,7 +3908,15 @@ export class SessionManager {
|
|
|
3446
3908
|
writer.closeSync();
|
|
3447
3909
|
this.#replaceSessionFileSync(tempPath, this.#sessionFile);
|
|
3448
3910
|
} catch (err) {
|
|
3449
|
-
|
|
3911
|
+
// closeSync is now truthful and may throw; wrap the best-effort cleanup so
|
|
3912
|
+
// the original error (write/close failure) is the one surfaced, not the
|
|
3913
|
+
// cleanup failure. The rename above was already skipped because closeSync
|
|
3914
|
+
// threw before it.
|
|
3915
|
+
try {
|
|
3916
|
+
writer.closeSync();
|
|
3917
|
+
} catch {
|
|
3918
|
+
// Best-effort cleanup of the temp writer's descriptor.
|
|
3919
|
+
}
|
|
3450
3920
|
void this.storage.unlink(tempPath).catch(() => {});
|
|
3451
3921
|
throw toError(err);
|
|
3452
3922
|
}
|
|
@@ -3544,6 +4014,73 @@ export class SessionManager {
|
|
|
3544
4014
|
this.#disposeResidentTextBlobStore();
|
|
3545
4015
|
if (this.#persistError) throw this.#persistError;
|
|
3546
4016
|
}
|
|
4017
|
+
/** Flush while open, then strictly close; retryable close skips the invalid second flush. */
|
|
4018
|
+
async flushAndCloseStrict(): Promise<SessionManagerCloseOutcome> {
|
|
4019
|
+
if (this.#persistWriter?.getCloseState() !== "close_failed_retryable") {
|
|
4020
|
+
await this.flush();
|
|
4021
|
+
}
|
|
4022
|
+
return this.closeStrict();
|
|
4023
|
+
}
|
|
4024
|
+
|
|
4025
|
+
/**
|
|
4026
|
+
* Strictly flush and close the persist writer, returning the certainty-aware close
|
|
4027
|
+
* outcome without manufacturing success. The existing {@link close} path is
|
|
4028
|
+
* preserved for best-effort callers; this seam lets strict ACP disposal prove
|
|
4029
|
+
* writer closure before any destructive operation.
|
|
4030
|
+
*/
|
|
4031
|
+
async closeStrict(): Promise<SessionManagerCloseOutcome> {
|
|
4032
|
+
let outcome: SessionManagerCloseOutcome = { kind: "closed" };
|
|
4033
|
+
await this.#queuePersistTask(async () => {
|
|
4034
|
+
const writer = this.#persistWriter;
|
|
4035
|
+
if (!writer) {
|
|
4036
|
+
this.#flushed = true;
|
|
4037
|
+
return;
|
|
4038
|
+
}
|
|
4039
|
+
try {
|
|
4040
|
+
await writer.close();
|
|
4041
|
+
} catch {
|
|
4042
|
+
// Outcome is captured from the underlying writer's close state below.
|
|
4043
|
+
}
|
|
4044
|
+
outcome = this.#closeOutcomeFromWriter(writer);
|
|
4045
|
+
if (outcome.kind === "closed") {
|
|
4046
|
+
this.#flushed = true;
|
|
4047
|
+
// Confirmed closed: release writer ownership.
|
|
4048
|
+
this.#persistWriter = undefined;
|
|
4049
|
+
this.#persistWriterPath = undefined;
|
|
4050
|
+
} else if (outcome.kind === "close_unknown") {
|
|
4051
|
+
// Quarantined (terminal): release ownership so no retry/finalizer
|
|
4052
|
+
// touches the uncertain fd again.
|
|
4053
|
+
this.#persistWriter = undefined;
|
|
4054
|
+
this.#persistWriterPath = undefined;
|
|
4055
|
+
}
|
|
4056
|
+
// close_failed_retryable: RETAIN the writer so a later closeStrict() call
|
|
4057
|
+
// can actually re-dispatch the OS close (ownership stays proven). The
|
|
4058
|
+
// wrapper must not manufacture success or surrender a retryable fd.
|
|
4059
|
+
});
|
|
4060
|
+
// Only tear down the resident blob store on a terminal outcome; a retryable
|
|
4061
|
+
// close leaves the session live for a genuine retry.
|
|
4062
|
+
if (!this.#persistWriter) {
|
|
4063
|
+
this.#disposeResidentTextBlobStore();
|
|
4064
|
+
}
|
|
4065
|
+
return outcome;
|
|
4066
|
+
}
|
|
4067
|
+
|
|
4068
|
+
#closeOutcomeFromWriter(writer: NdjsonFileWriter): SessionManagerCloseOutcome {
|
|
4069
|
+
const state = writer.getCloseState();
|
|
4070
|
+
const error = writer.getCloseError();
|
|
4071
|
+
switch (state) {
|
|
4072
|
+
case "closed":
|
|
4073
|
+
return { kind: "closed" };
|
|
4074
|
+
case "close_failed_retryable":
|
|
4075
|
+
return { kind: "close_failed_retryable", error: error ?? new Error("Writer close failed before dispatch") };
|
|
4076
|
+
case "close_unknown":
|
|
4077
|
+
return { kind: "close_unknown", error: error ?? new Error("Writer close outcome is unknown") };
|
|
4078
|
+
default:
|
|
4079
|
+
// "open" should not occur after close() returned, but treat defensively as
|
|
4080
|
+
// a non-quiescent terminal state rather than confirmed closed.
|
|
4081
|
+
return { kind: "close_unknown", error: error ?? new Error("Writer close did not dispatch") };
|
|
4082
|
+
}
|
|
4083
|
+
}
|
|
3547
4084
|
|
|
3548
4085
|
getCwd(): string {
|
|
3549
4086
|
return this.cwd;
|
|
@@ -3874,7 +4411,10 @@ export class SessionManager {
|
|
|
3874
4411
|
timestamp: new Date().toISOString(),
|
|
3875
4412
|
message,
|
|
3876
4413
|
};
|
|
4414
|
+
associateSessionMessageEntryId(message, entry.id);
|
|
3877
4415
|
this.#appendEntry(entry);
|
|
4416
|
+
const residentEntry = this.#byId.get(entry.id);
|
|
4417
|
+
if (residentEntry?.type === "message") transferSessionMessageIdentity([message], [residentEntry.message]);
|
|
3878
4418
|
return entry.id;
|
|
3879
4419
|
}
|
|
3880
4420
|
|
|
@@ -4067,7 +4607,15 @@ export class SessionManager {
|
|
|
4067
4607
|
display: boolean,
|
|
4068
4608
|
details?: T,
|
|
4069
4609
|
attribution: MessageAttribution = "agent",
|
|
4610
|
+
observationId?: string,
|
|
4070
4611
|
): string {
|
|
4612
|
+
const entryId = generateId(this.#byId);
|
|
4613
|
+
const stableObservationId =
|
|
4614
|
+
observationId ?? (customType.startsWith("irc:") ? `session:${this.#sessionId}:entry:${entryId}` : undefined);
|
|
4615
|
+
const persistedDetails =
|
|
4616
|
+
stableObservationId && details && typeof details === "object" && !Array.isArray(details)
|
|
4617
|
+
? ({ ...details, observationId: stableObservationId } as T)
|
|
4618
|
+
: details;
|
|
4071
4619
|
const entry: CustomMessageEntry<T> = {
|
|
4072
4620
|
type: "custom_message",
|
|
4073
4621
|
customType,
|
|
@@ -4076,9 +4624,9 @@ export class SessionManager {
|
|
|
4076
4624
|
// Drop AgentSession-internal transient fields (allowlist in
|
|
4077
4625
|
// `INTERNAL_DETAILS_FIELDS`) before disk persistence. Single
|
|
4078
4626
|
// chokepoint covers every CustomMessage write path.
|
|
4079
|
-
details: stripInternalDetailsFields(
|
|
4627
|
+
details: stripInternalDetailsFields(persistedDetails),
|
|
4080
4628
|
attribution,
|
|
4081
|
-
id:
|
|
4629
|
+
id: entryId,
|
|
4082
4630
|
parentId: this.#leafId,
|
|
4083
4631
|
timestamp: new Date().toISOString(),
|
|
4084
4632
|
};
|
|
@@ -4496,7 +5044,12 @@ export class SessionManager {
|
|
|
4496
5044
|
return cloneSessionContext(cached);
|
|
4497
5045
|
}
|
|
4498
5046
|
this.#pathOnlyContextBuildCount++;
|
|
4499
|
-
const context = buildSessionContext(
|
|
5047
|
+
const context = buildSessionContext(
|
|
5048
|
+
this.#getActivePathEntriesForProviderContext(),
|
|
5049
|
+
this.#leafId,
|
|
5050
|
+
undefined,
|
|
5051
|
+
this.#sessionId,
|
|
5052
|
+
);
|
|
4500
5053
|
this.#sessionContextCache = new WeakRef(context);
|
|
4501
5054
|
this.#sessionContextEntryRevision = this.#entryRevision;
|
|
4502
5055
|
this.#sessionContextLeafRevision = this.#leafRevision;
|
|
@@ -4546,6 +5099,9 @@ export class SessionManager {
|
|
|
4546
5099
|
this.#residentBlobStoresForColdRehydrate(),
|
|
4547
5100
|
);
|
|
4548
5101
|
if (rehydrated !== materialized) this.#coldSpillReadCount += this.#countColdSpillPayloads(entry);
|
|
5102
|
+
if (entry.type === "message" && rehydrated.type === "message") {
|
|
5103
|
+
transferSessionMessageIdentity([entry.message], [rehydrated.message]);
|
|
5104
|
+
}
|
|
4549
5105
|
return rehydrated;
|
|
4550
5106
|
}
|
|
4551
5107
|
|
|
@@ -4937,6 +5493,71 @@ export class SessionManager {
|
|
|
4937
5493
|
return manager;
|
|
4938
5494
|
}
|
|
4939
5495
|
|
|
5496
|
+
/**
|
|
5497
|
+
* List sessions for the resume picker without recovery or other maintenance writes.
|
|
5498
|
+
*/
|
|
5499
|
+
static async listForResumePickerReadOnly(
|
|
5500
|
+
cwd: string,
|
|
5501
|
+
sessionDir?: string,
|
|
5502
|
+
storage: SessionStorage = new FileSessionStorage(),
|
|
5503
|
+
): Promise<SessionInfo[]> {
|
|
5504
|
+
const dirs = sessionDir ? [sessionDir] : getReadOnlyDefaultSessionDirs(cwd);
|
|
5505
|
+
try {
|
|
5506
|
+
const files = new Set<string>();
|
|
5507
|
+
for (const dir of dirs) {
|
|
5508
|
+
for (const filePath of storage.listFilesSync(dir, "*.jsonl")) files.add(filePath);
|
|
5509
|
+
}
|
|
5510
|
+
return await collectSessionsFromFiles([...files], storage);
|
|
5511
|
+
} catch {
|
|
5512
|
+
return [];
|
|
5513
|
+
}
|
|
5514
|
+
}
|
|
5515
|
+
|
|
5516
|
+
/** Inspect a selected session without acquiring write-capable ownership. */
|
|
5517
|
+
static async inspectSessionTailReadOnly(
|
|
5518
|
+
filePath: string,
|
|
5519
|
+
storage: SessionStorage = new FileSessionStorage(),
|
|
5520
|
+
): Promise<ResumeTailInspection> {
|
|
5521
|
+
const inspected = inspectResumeSessionFile(filePath, storage);
|
|
5522
|
+
if ("kind" in inspected) return inspected;
|
|
5523
|
+
return canContinuePersistedHistory(inspected.context.messages)
|
|
5524
|
+
? { kind: "resumable", identity: inspected.identity }
|
|
5525
|
+
: { kind: "terminal", identity: inspected.identity };
|
|
5526
|
+
}
|
|
5527
|
+
|
|
5528
|
+
/**
|
|
5529
|
+
* Main startup code MUST retain the consented inspection identity and branch on
|
|
5530
|
+
* the returned discriminant; an error result never creates, rewrites, or adopts
|
|
5531
|
+
* the selected path. Breadcrumb ownership begins only after `kind: "opened"`.
|
|
5532
|
+
*/
|
|
5533
|
+
static async openExistingStrict(
|
|
5534
|
+
identity: ResumeSessionIdentity,
|
|
5535
|
+
sessionDir?: string,
|
|
5536
|
+
storage: SessionStorage = new FileSessionStorage(),
|
|
5537
|
+
): Promise<StrictSessionOpenResult> {
|
|
5538
|
+
const inspected = inspectResumeSessionFile(identity.canonicalPath, storage);
|
|
5539
|
+
if ("kind" in inspected) return inspected;
|
|
5540
|
+
if (!sameResumeIdentity(identity, inspected.identity)) {
|
|
5541
|
+
return { kind: "error", reason: "identity-mismatch" };
|
|
5542
|
+
}
|
|
5543
|
+
const entries = structuredClone(inspected.entries) as FileEntry[];
|
|
5544
|
+
const header = entries[0] as SessionHeader;
|
|
5545
|
+
const dir = sessionDir ?? path.resolve(identity.canonicalPath, "..");
|
|
5546
|
+
const manager = new SessionManager(header.cwd || getProjectDir(), dir, true, storage);
|
|
5547
|
+
await manager.#hydrateExistingSession(identity.canonicalPath, entries, inspected.migrationApplied);
|
|
5548
|
+
const ownershipInspection = inspectResumeSessionFile(identity.canonicalPath, storage);
|
|
5549
|
+
if ("kind" in ownershipInspection) {
|
|
5550
|
+
await manager.close();
|
|
5551
|
+
return ownershipInspection;
|
|
5552
|
+
}
|
|
5553
|
+
if (!sameResumeIdentity(identity, ownershipInspection.identity)) {
|
|
5554
|
+
await manager.close();
|
|
5555
|
+
return { kind: "error", reason: "identity-mismatch" };
|
|
5556
|
+
}
|
|
5557
|
+
writeTerminalBreadcrumb(manager.cwd, identity.canonicalPath);
|
|
5558
|
+
return { kind: "opened", manager };
|
|
5559
|
+
}
|
|
5560
|
+
|
|
4940
5561
|
/**
|
|
4941
5562
|
* Continue the most recent session, or create new if none.
|
|
4942
5563
|
* @param cwd Working directory
|
|
@@ -5014,4 +5635,153 @@ export class SessionManager {
|
|
|
5014
5635
|
return [];
|
|
5015
5636
|
}
|
|
5016
5637
|
}
|
|
5638
|
+
/**
|
|
5639
|
+
* Strict raw scoped inventory for ACP authorization. Enumerates the scoped
|
|
5640
|
+
* session directory without suppressing any root/scan/lstat/read/parse/stat/
|
|
5641
|
+
* header/cwd/containment/identity failure. A failure result carries every
|
|
5642
|
+
* sanitized failure and grants zero authority — it is never reduced to a
|
|
5643
|
+
* partial candidate set. Display/global {@link list} behavior is unaffected.
|
|
5644
|
+
*/
|
|
5645
|
+
static inventorySessionsStrict(
|
|
5646
|
+
cwd: string,
|
|
5647
|
+
options?: { sessionDir?: string; storage?: SessionStorage },
|
|
5648
|
+
): StrictInventoryResult {
|
|
5649
|
+
const storage = options?.storage ?? new FileSessionStorage();
|
|
5650
|
+
const dir = options?.sessionDir ?? SessionManager.getDefaultSessionDir(cwd, undefined, storage);
|
|
5651
|
+
if (!storage.listFilesStrictSync) {
|
|
5652
|
+
return {
|
|
5653
|
+
kind: "failure",
|
|
5654
|
+
failures: [{ kind: "scan", message: "Strict scoped session scan is unavailable", path: dir }],
|
|
5655
|
+
};
|
|
5656
|
+
}
|
|
5657
|
+
const strictScan = storage.listFilesStrictSync.bind(storage);
|
|
5658
|
+
|
|
5659
|
+
let files: string[];
|
|
5660
|
+
try {
|
|
5661
|
+
files = strictScan(dir, "*.jsonl");
|
|
5662
|
+
} catch (err) {
|
|
5663
|
+
const code = (err as NodeJS.ErrnoException)?.code;
|
|
5664
|
+
// Only a confirmed ENOENT proves the scoped root is genuinely absent,
|
|
5665
|
+
// which is a complete (zero-candidate) inventory. Any other root/scan
|
|
5666
|
+
// error (EACCES/EIO/EPERM/ENOTDIR/...) is fail-closed: it must never
|
|
5667
|
+
// reduce to authoritative absence and grants zero authority. The
|
|
5668
|
+
// forgiving existsSync preflight is intentionally absent — fs.existsSync
|
|
5669
|
+
// collapses EACCES/EIO/EPERM onto a false return and would let a
|
|
5670
|
+
// permission-denied root masquerade as a confirmed-empty directory.
|
|
5671
|
+
if (code === "ENOENT") {
|
|
5672
|
+
return { kind: "complete", candidates: [] };
|
|
5673
|
+
}
|
|
5674
|
+
void err;
|
|
5675
|
+
const failureKind: StrictInventoryFailureKind =
|
|
5676
|
+
code === "EACCES" || code === "EPERM" || code === "ENOTDIR" ? "root" : "scan";
|
|
5677
|
+
return {
|
|
5678
|
+
kind: "failure",
|
|
5679
|
+
failures: [
|
|
5680
|
+
{
|
|
5681
|
+
kind: failureKind,
|
|
5682
|
+
message:
|
|
5683
|
+
failureKind === "root"
|
|
5684
|
+
? "Scoped session root could not be inspected"
|
|
5685
|
+
: "Scoped session directory scan failed",
|
|
5686
|
+
path: dir,
|
|
5687
|
+
},
|
|
5688
|
+
],
|
|
5689
|
+
};
|
|
5690
|
+
}
|
|
5691
|
+
|
|
5692
|
+
const failures: StrictInventoryFailure[] = [];
|
|
5693
|
+
const candidates: StrictInventoryCandidate[] = [];
|
|
5694
|
+
for (const file of files) {
|
|
5695
|
+
const candidate = inventoryReadCandidate(storage, file, cwd, dir);
|
|
5696
|
+
if ("failures" in candidate) {
|
|
5697
|
+
failures.push(...candidate.failures);
|
|
5698
|
+
continue;
|
|
5699
|
+
}
|
|
5700
|
+
candidates.push(candidate.candidate);
|
|
5701
|
+
}
|
|
5702
|
+
if (failures.length > 0) {
|
|
5703
|
+
return { kind: "failure", failures };
|
|
5704
|
+
}
|
|
5705
|
+
return { kind: "complete", candidates };
|
|
5706
|
+
}
|
|
5707
|
+
|
|
5708
|
+
/**
|
|
5709
|
+
* Propagate the storage-layer verified hard delete bound to exact identity evidence.
|
|
5710
|
+
* Never performs ID lookup or first-match selection; the caller supplies the exact
|
|
5711
|
+
* authorization target captured from a complete strict inventory.
|
|
5712
|
+
*/
|
|
5713
|
+
async deleteSessionVerified(target: VerifiedSessionDeleteTarget): Promise<VerifiedSessionDeleteResult> {
|
|
5714
|
+
if (!this.storage.deleteSessionVerified) {
|
|
5715
|
+
throw new Error("Storage backend does not support verified session deletion");
|
|
5716
|
+
}
|
|
5717
|
+
return this.storage.deleteSessionVerified(target);
|
|
5718
|
+
}
|
|
5719
|
+
}
|
|
5720
|
+
const strictInventoryDecoder = new TextDecoder("utf-8", { fatal: false });
|
|
5721
|
+
|
|
5722
|
+
/** Strictly read + validate one scoped session candidate. Never suppresses a failure. */
|
|
5723
|
+
function inventoryReadCandidate(
|
|
5724
|
+
storage: SessionStorage,
|
|
5725
|
+
file: string,
|
|
5726
|
+
expectedCwd: string,
|
|
5727
|
+
sessionDir: string,
|
|
5728
|
+
): { candidate: StrictInventoryCandidate } | { failures: StrictInventoryFailure[] } {
|
|
5729
|
+
const failures: StrictInventoryFailure[] = [];
|
|
5730
|
+
const resolvedFile = path.resolve(file);
|
|
5731
|
+
if (!pathIsWithin(path.resolve(sessionDir), resolvedFile)) {
|
|
5732
|
+
return {
|
|
5733
|
+
failures: [{ kind: "containment", message: "Candidate is outside the scoped session directory", path: file }],
|
|
5734
|
+
};
|
|
5735
|
+
}
|
|
5736
|
+
if (!storage.readSnapshotSync) {
|
|
5737
|
+
return { failures: [{ kind: "read", message: "Storage backend cannot read exact bytes", path: file }] };
|
|
5738
|
+
}
|
|
5739
|
+
let snapshot: SessionStorageSnapshot;
|
|
5740
|
+
try {
|
|
5741
|
+
snapshot = storage.readSnapshotSync(file);
|
|
5742
|
+
} catch (err) {
|
|
5743
|
+
const code = (err as NodeJS.ErrnoException)?.code;
|
|
5744
|
+
if (code === "ELOOP" || code === "SYMLINK") {
|
|
5745
|
+
failures.push({ kind: "lstat", message: "Candidate is a symlink", path: file });
|
|
5746
|
+
} else {
|
|
5747
|
+
failures.push({ kind: "read", message: "Candidate could not be read", path: file });
|
|
5748
|
+
}
|
|
5749
|
+
return { failures };
|
|
5750
|
+
}
|
|
5751
|
+
if (!snapshot.stat.isFile) {
|
|
5752
|
+
failures.push({ kind: "lstat", message: "Candidate is not a regular file", path: file });
|
|
5753
|
+
return { failures };
|
|
5754
|
+
}
|
|
5755
|
+
const newline = snapshot.bytes.indexOf(0x0a);
|
|
5756
|
+
const headerBytes = newline === -1 ? snapshot.bytes : snapshot.bytes.subarray(0, newline);
|
|
5757
|
+
let header: Record<string, unknown> | undefined;
|
|
5758
|
+
try {
|
|
5759
|
+
const text = strictInventoryDecoder.decode(headerBytes).trim();
|
|
5760
|
+
const value: unknown = text ? JSON.parse(text) : undefined;
|
|
5761
|
+
header = typeof value === "object" && value !== null ? (value as Record<string, unknown>) : undefined;
|
|
5762
|
+
} catch {
|
|
5763
|
+
header = undefined;
|
|
5764
|
+
}
|
|
5765
|
+
if (!header) {
|
|
5766
|
+
failures.push({ kind: "parse", message: "Candidate header is not valid JSON", path: file });
|
|
5767
|
+
return { failures };
|
|
5768
|
+
}
|
|
5769
|
+
if (header.type !== "session") {
|
|
5770
|
+
failures.push({ kind: "header", message: "Candidate header is not a session header", path: file });
|
|
5771
|
+
return { failures };
|
|
5772
|
+
}
|
|
5773
|
+
if (typeof header.id !== "string" || header.id.length === 0) {
|
|
5774
|
+
failures.push({ kind: "identity", message: "Candidate header is missing a session id", path: file });
|
|
5775
|
+
return { failures };
|
|
5776
|
+
}
|
|
5777
|
+
if (typeof header.cwd !== "string") {
|
|
5778
|
+
failures.push({ kind: "cwd", message: "Candidate header is missing a cwd", path: file });
|
|
5779
|
+
return { failures };
|
|
5780
|
+
}
|
|
5781
|
+
const canonicalHeaderCwd = resolveEquivalentPath(header.cwd);
|
|
5782
|
+
if (canonicalHeaderCwd !== resolveEquivalentPath(expectedCwd)) {
|
|
5783
|
+
failures.push({ kind: "cwd", message: "Candidate cwd does not match the scoped workspace", path: file });
|
|
5784
|
+
return { failures };
|
|
5785
|
+
}
|
|
5786
|
+
return { candidate: { path: resolvedFile, id: header.id, cwd: header.cwd, identity: snapshot.stat } };
|
|
5017
5787
|
}
|