@greppleai/grip 0.1.4 → 0.1.6
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/CHANGELOG.md +47 -0
- package/README.md +2 -2
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/embedded-assets.d.ts.map +1 -1
- package/dist/bun/embedded-assets.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +27 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +117 -152
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +6 -11
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +19 -23
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -1
- package/dist/core/compaction/compression-detection-ledger.js.map +1 -1
- package/dist/core/compaction/compression-detector.d.ts +1 -0
- package/dist/core/compaction/compression-detector.d.ts.map +1 -1
- package/dist/core/compaction/compression-detector.js +10 -21
- package/dist/core/compaction/compression-detector.js.map +1 -1
- package/dist/core/compaction/compression-economics.d.ts.map +1 -1
- package/dist/core/compaction/compression-economics.js.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +18 -30
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +15 -16
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/grip-agent.d.ts.map +1 -1
- package/dist/core/grip-agent.js +11 -23
- package/dist/core/grip-agent.js.map +1 -1
- package/dist/core/grip-manifest.d.ts.map +1 -1
- package/dist/core/grip-manifest.js.map +1 -1
- package/dist/core/hooks/aggregate.d.ts.map +1 -1
- package/dist/core/hooks/aggregate.js.map +1 -1
- package/dist/core/hooks/config.d.ts.map +1 -1
- package/dist/core/hooks/config.js.map +1 -1
- package/dist/core/hooks/executor.d.ts.map +1 -1
- package/dist/core/hooks/executor.js.map +1 -1
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js.map +1 -1
- package/dist/core/hooks/matcher.d.ts.map +1 -1
- package/dist/core/hooks/matcher.js.map +1 -1
- package/dist/core/hooks/trust-store.d.ts.map +1 -1
- package/dist/core/hooks/trust-store.js +0 -3
- package/dist/core/hooks/trust-store.js.map +1 -1
- package/dist/core/hooks/types.d.ts.map +1 -1
- package/dist/core/hooks/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/instruction-resource-loader.d.ts.map +1 -1
- package/dist/core/instruction-resource-loader.js +0 -3
- package/dist/core/instruction-resource-loader.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lsp/abort.d.ts.map +1 -1
- package/dist/core/lsp/abort.js.map +1 -1
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +8 -22
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/config-loader.d.ts.map +1 -1
- package/dist/core/lsp/config-loader.js.map +1 -1
- package/dist/core/lsp/config.d.ts.map +1 -1
- package/dist/core/lsp/config.js.map +1 -1
- package/dist/core/lsp/diagnostics.d.ts.map +1 -1
- package/dist/core/lsp/diagnostics.js.map +1 -1
- package/dist/core/lsp/file-sync.d.ts.map +1 -1
- package/dist/core/lsp/file-sync.js +7 -9
- package/dist/core/lsp/file-sync.js.map +1 -1
- package/dist/core/lsp/integration.d.ts.map +1 -1
- package/dist/core/lsp/integration.js.map +1 -1
- package/dist/core/lsp/language-map.d.ts.map +1 -1
- package/dist/core/lsp/language-map.js +2 -7
- package/dist/core/lsp/language-map.js.map +1 -1
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +18 -29
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/navigation.d.ts.map +1 -1
- package/dist/core/lsp/navigation.js.map +1 -1
- package/dist/core/lsp/portable-path.d.ts.map +1 -1
- package/dist/core/lsp/portable-path.js.map +1 -1
- package/dist/core/lsp/refactor.d.ts.map +1 -1
- package/dist/core/lsp/refactor.js.map +1 -1
- package/dist/core/lsp/transport.d.ts.map +1 -1
- package/dist/core/lsp/transport.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +5 -7
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +0 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/contract.js +4 -2
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-client.js +1 -5
- package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +5 -10
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +2 -9
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -1
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/session.js +27 -65
- package/dist/core/remote-workspace-protocol/session.js.map +1 -1
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +0 -48
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/rules.d.ts.map +1 -1
- package/dist/core/rules.js.map +1 -1
- package/dist/core/sandbox/command.d.ts.map +1 -1
- package/dist/core/sandbox/command.js.map +1 -1
- package/dist/core/sandbox/config.d.ts.map +1 -1
- package/dist/core/sandbox/config.js.map +1 -1
- package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -1
- package/dist/core/sandbox/lima-guest-binary.js.map +1 -1
- package/dist/core/sandbox/lima.d.ts +2 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -1
- package/dist/core/sandbox/lima.js +9 -15
- package/dist/core/sandbox/lima.js.map +1 -1
- package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -1
- package/dist/core/sandbox/shared-lima-roots.js.map +1 -1
- package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -1
- package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -1
- package/dist/core/session/constants.d.ts.map +1 -1
- package/dist/core/session/context-metadata.d.ts.map +1 -1
- package/dist/core/session/context-metadata.js.map +1 -1
- package/dist/core/session/context.d.ts.map +1 -1
- package/dist/core/session/context.js.map +1 -1
- package/dist/core/session/ids.d.ts.map +1 -1
- package/dist/core/session/ids.js.map +1 -1
- package/dist/core/session/in-memory-session-manager.d.ts.map +1 -1
- package/dist/core/session/in-memory-session-manager.js +0 -1
- package/dist/core/session/in-memory-session-manager.js.map +1 -1
- package/dist/core/session/in-memory-session.d.ts.map +1 -1
- package/dist/core/session/in-memory-session.js.map +1 -1
- package/dist/core/session/jsonl-errors.d.ts.map +1 -1
- package/dist/core/session/jsonl-errors.js +0 -11
- package/dist/core/session/jsonl-errors.js.map +1 -1
- package/dist/core/session/jsonl-helpers.d.ts.map +1 -1
- package/dist/core/session/jsonl-helpers.js.map +1 -1
- package/dist/core/session/local-session-manager.d.ts.map +1 -1
- package/dist/core/session/local-session-manager.js +4 -6
- package/dist/core/session/local-session-manager.js.map +1 -1
- package/dist/core/session/local-session.d.ts.map +1 -1
- package/dist/core/session/local-session.js.map +1 -1
- package/dist/core/session/migrations.d.ts.map +1 -1
- package/dist/core/session/migrations.js.map +1 -1
- package/dist/core/session/remote-session-client.d.ts.map +1 -1
- package/dist/core/session/remote-session-client.js +0 -6
- package/dist/core/session/remote-session-client.js.map +1 -1
- package/dist/core/session/remote-session-manager.d.ts.map +1 -1
- package/dist/core/session/remote-session-manager.js +0 -3
- package/dist/core/session/remote-session-manager.js.map +1 -1
- package/dist/core/session/remote-session.d.ts.map +1 -1
- package/dist/core/session/remote-session.js +0 -1
- package/dist/core/session/remote-session.js.map +1 -1
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session.d.ts.map +1 -1
- package/dist/core/session/session.js +1 -5
- package/dist/core/session/session.js.map +1 -1
- package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/in-memory-session-store.js +7 -6
- package/dist/core/session/stores/in-memory-session-store.js.map +1 -1
- package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/jsonl-session-store.js +6 -14
- package/dist/core/session/stores/jsonl-session-store.js.map +1 -1
- package/dist/core/session/stores/remote-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/remote-session-store.js +3 -8
- package/dist/core/session/stores/remote-session-store.js.map +1 -1
- package/dist/core/session/stores/session-store.d.ts.map +1 -1
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/usage-ledger.d.ts.map +1 -1
- package/dist/core/session/usage-ledger.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +8 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/compress-context.d.ts.map +1 -1
- package/dist/core/tools/compress-context.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hash-store.d.ts.map +1 -1
- package/dist/core/tools/hash-store.js.map +1 -1
- package/dist/core/tools/hashline/apply.d.ts.map +1 -1
- package/dist/core/tools/hashline/apply.js.map +1 -1
- package/dist/core/tools/hashline/hash.d.ts.map +1 -1
- package/dist/core/tools/hashline/hash.js.map +1 -1
- package/dist/core/tools/hashline/parse.d.ts.map +1 -1
- package/dist/core/tools/hashline/parse.js.map +1 -1
- package/dist/core/tools/hashline/resolve.d.ts.map +1 -1
- package/dist/core/tools/hashline/resolve.js.map +1 -1
- package/dist/core/tools/hashline-utils.d.ts.map +1 -1
- package/dist/core/tools/hashline-utils.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/operations.d.ts +5 -0
- package/dist/core/tools/operations.d.ts.map +1 -1
- package/dist/core/tools/operations.js +26 -24
- package/dist/core/tools/operations.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +12 -18
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/replace-diff.d.ts.map +1 -1
- package/dist/core/tools/replace-diff.js.map +1 -1
- package/dist/core/tools/replace-normalize.d.ts.map +1 -1
- package/dist/core/tools/replace-normalize.js.map +1 -1
- package/dist/core/tools/replace-render.d.ts +1 -1
- package/dist/core/tools/replace-render.d.ts.map +1 -1
- package/dist/core/tools/replace-render.js.map +1 -1
- package/dist/core/tools/runtime.d.ts.map +1 -1
- package/dist/core/tools/runtime.js.map +1 -1
- package/dist/core/tools/session-history.d.ts.map +1 -1
- package/dist/core/tools/session-history.js.map +1 -1
- package/dist/core/tools/subagent-agents.d.ts.map +1 -1
- package/dist/core/tools/subagent-agents.js.map +1 -1
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/workspace-tool-host.d.ts +1 -0
- package/dist/core/tools/workspace-tool-host.d.ts.map +1 -1
- package/dist/core/tools/workspace-tool-host.js +36 -22
- package/dist/core/tools/workspace-tool-host.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workspace-identity.d.ts.map +1 -1
- package/dist/daemon/activity-budget.d.ts.map +1 -1
- package/dist/daemon/activity-budget.js +2 -3
- package/dist/daemon/activity-budget.js.map +1 -1
- package/dist/daemon/command.d.ts.map +1 -1
- package/dist/daemon/command.js.map +1 -1
- package/dist/daemon/config.d.ts +2 -0
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +4 -0
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/help.d.ts.map +1 -1
- package/dist/daemon/help.js +4 -3
- package/dist/daemon/help.js.map +1 -1
- package/dist/daemon/lsp-config.d.ts.map +1 -1
- package/dist/daemon/lsp-config.js.map +1 -1
- package/dist/daemon/outbound-budget.d.ts.map +1 -1
- package/dist/daemon/outbound-budget.js +2 -4
- package/dist/daemon/outbound-budget.js.map +1 -1
- package/dist/daemon/security.d.ts.map +1 -1
- package/dist/daemon/security.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shared-connection.d.ts.map +1 -1
- package/dist/daemon/shared-connection.js +10 -15
- package/dist/daemon/shared-connection.js.map +1 -1
- package/dist/daemon/shared-revision.d.ts.map +1 -1
- package/dist/daemon/shared-revision.js +2 -1
- package/dist/daemon/shared-revision.js.map +1 -1
- package/dist/daemon/shared-roots.d.ts.map +1 -1
- package/dist/daemon/shared-roots.js +0 -1
- package/dist/daemon/shared-roots.js.map +1 -1
- package/dist/daemon/workspace-runtime.d.ts +2 -0
- package/dist/daemon/workspace-runtime.d.ts.map +1 -1
- package/dist/daemon/workspace-runtime.js +43 -15
- package/dist/daemon/workspace-runtime.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +21 -17
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -9
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -3
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +6 -16
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -5
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -6
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -7
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -9
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -3
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/hook-execution.js +2 -5
- package/dist/modes/interactive/components/hook-execution.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -9
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/message-card.d.ts.map +1 -1
- package/dist/modes/interactive/components/message-card.js +0 -1
- package/dist/modes/interactive/components/message-card.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +26 -18
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +223 -210
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -12
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +9 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +33 -58
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +0 -4
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +0 -2
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -24
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +18 -34
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +0 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +14 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +223 -137
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +0 -7
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +10 -11
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/directory-completions.d.ts.map +1 -1
- package/dist/utils/directory-completions.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/grip-user-agent.d.ts.map +1 -1
- package/dist/utils/grip-user-agent.js +1 -1
- package/dist/utils/grip-user-agent.js.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts.map +1 -1
- package/dist/utils/image-process.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +10 -5
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/keybindings.md +3 -1
- package/docs/providers.md +3 -1
- package/docs/sandbox.md +7 -1
- package/docs/sessions.md +1 -1
- package/docs/usage.md +39 -2
- package/examples/extensions/custom-provider-anthropic/package.json +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +601 -833
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAwBrE,YAAY,EACX,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,gBAAgB,CAAC;AAOxB;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAo/BlF","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: JsonAgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport type { AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport type {\n\tExtensionNotificationType,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/types.ts\";\nimport type { GripAgentRuntimeHost } from \"../../core/grip-agent.ts\";\nimport {\n\tflushRawStdout,\n\ttakeOverStdout,\n\twaitForRawStdoutBackpressure,\n\twriteRawStdout,\n} from \"../../core/output-guard.ts\";\nimport { HIDDEN_BUILTIN_SLASH_COMMAND_NAMES } from \"../../core/slash-commands.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport { toJsonEvent } from \"../json-event.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSlashCommand,\n\tRpcToolCallRequest,\n} from \"./rpc-types.ts\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcInstructionDefinition,\n\tRpcListSessionsOptions,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcToolCallRequest,\n\tRpcToolDefinition,\n} from \"./rpc-types.ts\";\n\ntype RpcInputParseResult = { ok: true; value: unknown } | { ok: false };\n\nconst DEFAULT_RPC_SESSION_LIST_LIMIT = 100;\nconst MAX_RPC_SESSION_LIST_LIMIT = 500;\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: GripAgentRuntimeHost): Promise<never> {\n\ttakeOverStdout();\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\tlet unsubscribeBackpressure: (() => void) | undefined;\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (value: any) => void; reject: (error: Error) => void }\n\t>();\n\tconst pendingRpcToolRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (result: AgentToolResult<unknown>) => void; reject: (error: Error) => void; abort: () => void }\n\t>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tlet shutdownCheckScheduled = false;\n\tlet activeInputCommands = 0;\n\tconst pendingPromptCommands = new Set<Promise<void>>();\n\tconst signalCleanupHandlers: Array<() => void> = [];\n\n\tconst scheduleShutdownCheck = (): void => {\n\t\tif (!shutdownRequested || shutdownCheckScheduled) return;\n\t\tshutdownCheckScheduled = true;\n\t\tsetTimeout(() => {\n\t\t\tshutdownCheckScheduled = false;\n\t\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\t\tvoid session\n\t\t\t\t.waitForIdle()\n\t\t\t\t.then(() => waitForRawStdoutBackpressure())\n\t\t\t\t.then(() => checkShutdownRequested())\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_error\",\n\t\t\t\t\t\textensionPath: \"<shutdown>\",\n\t\t\t\t\t\tevent: \"shutdown\",\n\t\t\t\t\t\terror: String(error),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}, 0);\n\t};\n\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t},\n\t\t\t\treject,\n\t\t\t});\n\t\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\tconst createExtensionUIContext = (): ExtensionUIContext => ({\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tnotify(message: string, type?: ExtensionNotificationType): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\t// Only support string arrays in RPC mode - factory functions are ignored\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI not supported in RPC mode\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\t// Autocomplete provider composition is not supported in RPC mode\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t});\n\n\truntimeHost.setRebindSession(async () => {\n\t\tawait rebindSession();\n\t});\n\n\tconst rebindSession = async (): Promise<void> => {\n\t\tsession = runtimeHost.session;\n\t\tawait session.bindExtensions({\n\t\t\tuiContext: createExtensionUIContext(),\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => session.waitForIdle(),\n\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait session.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tshutdownRequested = true;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t\t},\n\t\t});\n\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tunsubscribe = session.subscribe((event) => {\n\t\t\toutput(toJsonEvent(event));\n\t\t\tif (event.type === \"agent_settled\" && shutdownRequested) scheduleShutdownCheck();\n\t\t});\n\t\tunsubscribeBackpressure = session.agent.subscribe(async () => {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t});\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143, signal);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\tawait rebindSession();\n\tregisterSignalHandlers();\n\n\tconst NOT_HANDLED = Symbol(\"not-handled\");\n\ttype CommandResult = RpcResponse | undefined | typeof NOT_HANDLED;\n\n\tconst createRpcToolExecutor = (toolName: string) => {\n\t\treturn (toolCallId: string, params: unknown, signal: AbortSignal | undefined) => {\n\t\t\tconst requestId = crypto.randomUUID();\n\t\t\tconst request: RpcToolCallRequest = {\n\t\t\t\ttype: \"rpc_tool_call\",\n\t\t\t\trequestId,\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\targs: params,\n\t\t\t};\n\t\t\treturn new Promise<AgentToolResult<unknown>>((resolve, reject) => {\n\t\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tpendingRpcToolRequests.delete(requestId);\n\t\t\t\t};\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\treject(new Error(`RPC tool aborted: ${toolName}`));\n\t\t\t\t};\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tonAbort();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttimeoutId = setTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(new Error(`Timed out waiting for RPC tool result: ${toolName}`));\n\t\t\t\t\t},\n\t\t\t\t\t5 * 60 * 1000,\n\t\t\t\t);\n\t\t\t\tpendingRpcToolRequests.set(requestId, {\n\t\t\t\t\tresolve: (result) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t},\n\t\t\t\t\treject: (error) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t},\n\t\t\t\t\tabort: onAbort,\n\t\t\t\t});\n\t\t\t\toutput(request);\n\t\t\t});\n\t\t};\n\t};\n\n\tconst handlePromptCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\": {\n\t\t\t\t// Emit the authoritative response only after preflight succeeds. Queued and\n\t\t\t\t// immediately handled prompts also count as success.\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tconst promptOperation = session.prompt(command.message, {\n\t\t\t\t\timages: command.images,\n\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\toutput(success(id, \"prompt\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tpendingPromptCommands.add(promptOperation);\n\t\t\t\tvoid promptOperation.then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t\t(errorValue: unknown) => {\n\t\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\t\tconst message = errorValue instanceof Error ? errorValue.message : String(errorValue);\n\t\t\t\t\t\t\toutput(error(id, \"prompt\", message));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcase \"get_structured_response\": {\n\t\t\t\tconst result = await session.getStructuredResponse({\n\t\t\t\t\tschema: command.schema,\n\t\t\t\t\tname: command.name,\n\t\t\t\t\tdescription: command.description,\n\t\t\t\t\tmaxCorrections: command.maxCorrections,\n\t\t\t\t\tscope: command.scope,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_structured_response\", result);\n\t\t\t}\n\t\t\tcase \"steer\":\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn success(id, \"steer\");\n\t\t\tcase \"follow_up\":\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\tcase \"abort\":\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleNewSessionCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"new_session\") return NOT_HANDLED;\n\t\tconst options =\n\t\t\tcommand.sessionId || command.parentSession\n\t\t\t\t? { id: command.sessionId, parentSession: command.parentSession }\n\t\t\t\t: undefined;\n\t\tconst result = await runtimeHost.newSession(options);\n\t\tif (!result.cancelled) await rebindSession();\n\t\treturn success(command.id, \"new_session\", result);\n\t};\n\n\tconst handleListSessionsCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"list_sessions\") return NOT_HANDLED;\n\t\tconst limit = parseSessionListLimit(command.limit);\n\t\tif (typeof limit === \"string\") return error(command.id, \"list_sessions\", limit);\n\t\tconst offset = parseSessionListCursor(command.cursor);\n\t\tif (typeof offset === \"string\") return error(command.id, \"list_sessions\", offset);\n\t\tconst sessions = await runtimeHost.listSessions();\n\t\tconst page = sessions.slice(offset, offset + limit);\n\t\tconst nextOffset = offset + page.length;\n\t\tconst response: RpcListSessionsResponse = {\n\t\t\tsessions: page,\n\t\t\t...(nextOffset < sessions.length ? { nextCursor: String(nextOffset) } : {}),\n\t\t};\n\t\treturn success(command.id, \"list_sessions\", response);\n\t};\n\n\tconst handleConfigurationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_state\": {\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisIdle: session.isIdle,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t\ttoolBackend: session.getToolBackendInfo(),\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_state\", state);\n\t\t\t}\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((model) => model.provider === command.provider && model.id === command.modelId);\n\t\t\t\tif (!model) return error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\n\t\t\t\treturn success(id, \"cycle_model\", result || null);\n\t\t\t}\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", { models });\n\t\t\t}\n\t\t\tcase \"set_thinking_level\":\n\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\treturn success(id, \"cycle_thinking_level\", level ? { level } : null);\n\t\t\t}\n\t\t\tcase \"set_steering_mode\":\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\t\t\tcase \"set_auto_compaction\":\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\tcase \"set_auto_retry\":\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\tcase \"abort_retry\":\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleBackendCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"bash\": {\n\t\t\t\tconst eventResult = await session.extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand: command.command,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext ?? false,\n\t\t\t\t\tcwd: session.session.getCwd(),\n\t\t\t\t});\n\t\t\t\tif (eventResult?.result) {\n\t\t\t\t\tif (command.record !== false) {\n\t\t\t\t\t\tsession.recordBashResult(command.command, eventResult.result, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn success(id, \"bash\", eventResult.result);\n\t\t\t\t}\n\t\t\t\tconst result = await session.executeBash(command.command, undefined, {\n\t\t\t\t\toperations: eventResult?.operations,\n\t\t\t\t\trecord: command.record,\n\t\t\t\t\ttruncate: command.truncate,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t}\n\t\t\tcase \"abort_bash\":\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\tcase \"set_remote_sandbox\": {\n\t\t\t\tconst info = await session.configureRemoteSandbox({\n\t\t\t\t\ttype: \"daemon\",\n\t\t\t\t\turl: command.url,\n\t\t\t\t\ttoken: command.token,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"set_remote_sandbox\", info);\n\t\t\t}\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\t\tawait session.clearRemoteSandbox();\n\t\t\t\treturn success(id, \"clear_remote_sandbox\", session.getToolBackendInfo());\n\t\t\tcase \"upload_file\": {\n\t\t\t\tawait session.uploadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.sourcePath);\n\t\t\t\treturn success(id, \"upload_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tcase \"download_file\": {\n\t\t\t\tawait session.downloadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.destinationPath);\n\t\t\t\treturn success(id, \"download_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionNavigationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_session_stats\":\n\t\t\t\treturn success(id, \"get_session_stats\", session.getSessionStats());\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"switch_session\", result);\n\t\t\t}\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.session.getLeafId();\n\t\t\t\tif (!leafId) return error(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionQueryCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_fork_messages\":\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages: session.getUserMessagesForForking() });\n\t\t\tcase \"get_entries\": {\n\t\t\t\tlet entries = session.session.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((entry) => entry.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) return error(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_entries\", { entries, leafId: session.session.getLeafId() });\n\t\t\t}\n\t\t\tcase \"get_tree\":\n\t\t\t\treturn success(id, \"get_tree\", { tree: session.session.getTree(), leafId: session.session.getLeafId() });\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text: session.getLastAssistantText() });\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) return error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst collectCommands = (): RpcSlashCommand[] => {\n\t\tconst commands: RpcSlashCommand[] = [];\n\t\tfor (const registeredCommand of session.extensionRunner.getRegisteredCommands()) {\n\t\t\tif (HIDDEN_BUILTIN_SLASH_COMMAND_NAMES.has(registeredCommand.name)) continue;\n\t\t\tcommands.push({\n\t\t\t\tname: registeredCommand.invocationName,\n\t\t\t\tdescription: registeredCommand.description,\n\t\t\t\tsource: \"extension\",\n\t\t\t\tsourceInfo: registeredCommand.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const template of session.promptTemplates) {\n\t\t\tcommands.push({\n\t\t\t\tname: template.name,\n\t\t\t\tdescription: template.description,\n\t\t\t\tsource: \"prompt\",\n\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const skill of session.getRegisteredSkills()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `skill:${skill.name}`,\n\t\t\t\tdescription: skill.description,\n\t\t\t\tsource: \"skill\",\n\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const rule of session.getRegisteredRules()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `rule:${rule.name}`,\n\t\t\t\tdescription: rule.description,\n\t\t\t\tsource: \"rule\",\n\t\t\t\tsourceInfo: rule.sourceInfo,\n\t\t\t});\n\t\t}\n\t\treturn commands;\n\t};\n\n\tconst handleSkillCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_commands\":\n\t\t\t\treturn success(id, \"get_commands\", { commands: collectCommands() });\n\t\t\tcase \"register_skill\": {\n\t\t\t\tif (!command.skill.filePath && command.skill.content === undefined) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"register_skill\",\n\t\t\t\t\t\t`registerSkill(\"${command.skill.name}\") requires filePath or content`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.skill.filePath ?? `<rpc-skill:${command.skill.name}>`;\n\t\t\t\tsession.registerSessionSkill({\n\t\t\t\t\tname: command.skill.name,\n\t\t\t\t\tdescription: command.skill.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.skill.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.skill.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.skill.tools ?? [],\n\t\t\t\t\t...(command.skill.content !== undefined ? { content: command.skill.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_skill\");\n\t\t\t}\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn success(id, \"unregister_skill\", { unregistered: session.unregisterSessionSkill(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleRuleCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_rule\": {\n\t\t\t\tif (!command.rule.filePath && command.rule.content === undefined) {\n\t\t\t\t\treturn error(id, \"register_rule\", `registerRule(\"${command.rule.name}\") requires filePath or content`);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.rule.filePath ?? `<rpc-rule:${command.rule.name}>`;\n\t\t\t\tsession.registerSessionRule({\n\t\t\t\t\tname: command.rule.name,\n\t\t\t\t\tdescription: command.rule.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.rule.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.rule.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.rule.tools ?? [],\n\t\t\t\t\t...(command.rule.content !== undefined ? { content: command.rule.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_rule\");\n\t\t\t}\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn success(id, \"unregister_rule\", { unregistered: session.unregisterSessionRule(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleToolRegistrationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_tool\":\n\t\t\t\tsession.registerSessionTool(\n\t\t\t\t\t{\n\t\t\t\t\t\tname: command.tool.name,\n\t\t\t\t\t\tlabel: command.tool.label,\n\t\t\t\t\t\tdescription: command.tool.description,\n\t\t\t\t\t\tpromptSnippet: command.tool.promptSnippet,\n\t\t\t\t\t\tpromptGuidelines: command.tool.promptGuidelines,\n\t\t\t\t\t\tparameters: command.tool.parameters,\n\t\t\t\t\t\texecutionMode: command.tool.executionMode,\n\t\t\t\t\t\texecute: createRpcToolExecutor(command.tool.name),\n\t\t\t\t\t},\n\t\t\t\t\t{ lazy: command.tool.lazy },\n\t\t\t\t);\n\t\t\t\treturn success(id, \"register_tool\");\n\t\t\tcase \"unregister_tool\":\n\t\t\t\treturn success(id, \"unregister_tool\", { unregistered: session.unregisterSessionTool(command.name) });\n\t\t\tcase \"get_available_tools\":\n\t\t\t\treturn success(id, \"get_available_tools\", { tools: session.getAvailableSessionTools() });\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn success(id, command.type);\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst requireHandledCommandResult = async (\n\t\tcommand: RpcCommand,\n\t\tresultPromise: Promise<CommandResult>,\n\t): Promise<RpcResponse | undefined> => {\n\t\tconst result = await resultPromise;\n\t\tif (result !== NOT_HANDLED) return result;\n\t\tconst unknownCommand = command as unknown as { type: string };\n\t\treturn error(command.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t};\n\t// Route synchronously so commands begin handling in input order. Awaiting a chain of\n\t// non-matching async handlers would let later input commands overtake earlier ones.\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\":\n\t\t\tcase \"get_structured_response\":\n\t\t\tcase \"steer\":\n\t\t\tcase \"follow_up\":\n\t\t\tcase \"abort\":\n\t\t\t\treturn requireHandledCommandResult(command, handlePromptCommands(command));\n\t\t\tcase \"new_session\":\n\t\t\t\treturn requireHandledCommandResult(command, handleNewSessionCommand(command));\n\t\t\tcase \"list_sessions\":\n\t\t\t\treturn requireHandledCommandResult(command, handleListSessionsCommand(command));\n\t\t\tcase \"get_state\":\n\t\t\tcase \"set_model\":\n\t\t\tcase \"cycle_model\":\n\t\t\tcase \"get_available_models\":\n\t\t\tcase \"set_thinking_level\":\n\t\t\tcase \"cycle_thinking_level\":\n\t\t\tcase \"set_steering_mode\":\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\tcase \"compact\":\n\t\t\tcase \"set_auto_compaction\":\n\t\t\tcase \"set_auto_retry\":\n\t\t\tcase \"abort_retry\":\n\t\t\t\treturn requireHandledCommandResult(command, handleConfigurationCommands(command));\n\t\t\tcase \"bash\":\n\t\t\tcase \"abort_bash\":\n\t\t\tcase \"set_remote_sandbox\":\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\tcase \"upload_file\":\n\t\t\tcase \"download_file\":\n\t\t\t\treturn requireHandledCommandResult(command, handleBackendCommands(command));\n\t\t\tcase \"get_session_stats\":\n\t\t\tcase \"export_html\":\n\t\t\tcase \"switch_session\":\n\t\t\tcase \"fork\":\n\t\t\tcase \"clone\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionNavigationCommands(command));\n\t\t\tcase \"get_fork_messages\":\n\t\t\tcase \"get_entries\":\n\t\t\tcase \"get_tree\":\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\tcase \"set_session_name\":\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionQueryCommands(command));\n\t\t\tcase \"get_commands\":\n\t\t\tcase \"register_skill\":\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSkillCommands(command));\n\t\t\tcase \"register_rule\":\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn requireHandledCommandResult(command, handleRuleCommands(command));\n\t\t\tcase \"register_tool\":\n\t\t\tcase \"unregister_tool\":\n\t\t\tcase \"get_available_tools\":\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn requireHandledCommandResult(command, handleToolRegistrationCommands(command));\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as unknown as { id?: string; type: string };\n\t\t\t\treturn error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(exitCode = 0, signal?: NodeJS.Signals): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tfor (const pending of pendingRpcToolRequests.values()) {\n\t\t\tpending.abort();\n\t\t}\n\t\tpendingRpcToolRequests.clear();\n\t\tawait runtimeHost.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tif (signal !== \"SIGTERM\") {\n\t\t\tawait flushRawStdout();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\tawait shutdown();\n\t}\n\n\tconst parseInputLine = (line: string): RpcInputParseResult => {\n\t\ttry {\n\t\t\treturn { ok: true, value: JSON.parse(line) };\n\t\t} catch (parseError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"parse\",\n\t\t\t\t\t`Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn { ok: false };\n\t\t}\n\t};\n\n\tconst handlePendingRpcResponse = (parsed: unknown): boolean => {\n\t\tif (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) return false;\n\t\tswitch (parsed.type) {\n\t\t\tcase \"extension_ui_response\": {\n\t\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\t\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\t\tif (pending) {\n\t\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\t\tpending.resolve(response);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_result\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_result\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.resolve(response.result);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_error\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_error\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.reject(new Error(response.error));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst handleParsedCommand = async (command: RpcCommand): Promise<void> => {\n\t\ttry {\n\t\t\tconst response = await handleCommand(command);\n\t\t\tif (response) {\n\t\t\t\toutput(response);\n\t\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\t}\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (commandError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\tcommandError instanceof Error ? commandError.message : String(commandError),\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t}\n\t};\n\n\tconst handleInputLine = async (line: string) => {\n\t\tconst parseResult = parseInputLine(line);\n\t\tif (!parseResult.ok) {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\treturn;\n\t\t}\n\t\tif (handlePendingRpcResponse(parseResult.value)) return;\n\t\tawait handleParsedCommand(parseResult.value as RpcCommand);\n\t};\n\n\tconst onInputEnd = () => {\n\t\tshutdownRequested = true;\n\t\tscheduleShutdownCheck();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tactiveInputCommands++;\n\t\t\tvoid handleInputLine(line).finally(() => {\n\t\t\t\tactiveInputCommands--;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t});\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n\nfunction parseSessionListLimit(limit: number | undefined): number | string {\n\tif (limit === undefined) {\n\t\treturn DEFAULT_RPC_SESSION_LIST_LIMIT;\n\t}\n\tif (!Number.isInteger(limit) || limit < 1) {\n\t\treturn \"Session list limit must be a positive integer\";\n\t}\n\treturn Math.min(limit, MAX_RPC_SESSION_LIST_LIMIT);\n}\n\nfunction parseSessionListCursor(cursor: string | undefined): number | string {\n\tif (cursor === undefined) {\n\t\treturn 0;\n\t}\n\tif (!/^\\d+$/.test(cursor)) {\n\t\treturn \"Session list cursor is invalid\";\n\t}\n\treturn Number(cursor);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAwBrE,YAAY,EACX,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,gBAAgB,CAAC;AAOxB;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAo/BlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: JsonAgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport type { AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport type {\n\tExtensionNotificationType,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/types.ts\";\nimport type { GripAgentRuntimeHost } from \"../../core/grip-agent.ts\";\nimport {\n\tflushRawStdout,\n\ttakeOverStdout,\n\twaitForRawStdoutBackpressure,\n\twriteRawStdout,\n} from \"../../core/output-guard.ts\";\nimport { HIDDEN_BUILTIN_SLASH_COMMAND_NAMES } from \"../../core/slash-commands.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport { toJsonEvent } from \"../json-event.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSlashCommand,\n\tRpcToolCallRequest,\n} from \"./rpc-types.ts\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcInstructionDefinition,\n\tRpcListSessionsOptions,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcToolCallRequest,\n\tRpcToolDefinition,\n} from \"./rpc-types.ts\";\n\ntype RpcInputParseResult = { ok: true; value: unknown } | { ok: false };\n\nconst DEFAULT_RPC_SESSION_LIST_LIMIT = 100;\nconst MAX_RPC_SESSION_LIST_LIMIT = 500;\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: GripAgentRuntimeHost): Promise<never> {\n\ttakeOverStdout();\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\tlet unsubscribeBackpressure: (() => void) | undefined;\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (value: any) => void; reject: (error: Error) => void }\n\t>();\n\tconst pendingRpcToolRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (result: AgentToolResult<unknown>) => void; reject: (error: Error) => void; abort: () => void }\n\t>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tlet shutdownCheckScheduled = false;\n\tlet activeInputCommands = 0;\n\tconst pendingPromptCommands = new Set<Promise<void>>();\n\tconst signalCleanupHandlers: Array<() => void> = [];\n\n\tconst scheduleShutdownCheck = (): void => {\n\t\tif (!shutdownRequested || shutdownCheckScheduled) return;\n\t\tshutdownCheckScheduled = true;\n\t\tsetTimeout(() => {\n\t\t\tshutdownCheckScheduled = false;\n\t\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\t\tvoid session\n\t\t\t\t.waitForIdle()\n\t\t\t\t.then(() => waitForRawStdoutBackpressure())\n\t\t\t\t.then(() => checkShutdownRequested())\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_error\",\n\t\t\t\t\t\textensionPath: \"<shutdown>\",\n\t\t\t\t\t\tevent: \"shutdown\",\n\t\t\t\t\t\terror: String(error),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}, 0);\n\t};\n\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t},\n\t\t\t\treject,\n\t\t\t});\n\t\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\tconst createExtensionUIContext = (): ExtensionUIContext => ({\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tnotify(message: string, type?: ExtensionNotificationType): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\t// Only support string arrays in RPC mode - factory functions are ignored\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI not supported in RPC mode\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\t// Autocomplete provider composition is not supported in RPC mode\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t});\n\n\truntimeHost.setRebindSession(async () => {\n\t\tawait rebindSession();\n\t});\n\n\tconst rebindSession = async (): Promise<void> => {\n\t\tsession = runtimeHost.session;\n\t\tawait session.bindExtensions({\n\t\t\tuiContext: createExtensionUIContext(),\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => session.waitForIdle(),\n\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait session.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tshutdownRequested = true;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t\t},\n\t\t});\n\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tunsubscribe = session.subscribe((event) => {\n\t\t\toutput(toJsonEvent(event));\n\t\t\tif (event.type === \"agent_settled\" && shutdownRequested) scheduleShutdownCheck();\n\t\t});\n\t\tunsubscribeBackpressure = session.agent.subscribe(async () => {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t});\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143, signal);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\tawait rebindSession();\n\tregisterSignalHandlers();\n\n\tconst NOT_HANDLED = Symbol(\"not-handled\");\n\ttype CommandResult = RpcResponse | undefined | typeof NOT_HANDLED;\n\n\tconst createRpcToolExecutor = (toolName: string) => {\n\t\treturn (toolCallId: string, params: unknown, signal: AbortSignal | undefined) => {\n\t\t\tconst requestId = crypto.randomUUID();\n\t\t\tconst request: RpcToolCallRequest = {\n\t\t\t\ttype: \"rpc_tool_call\",\n\t\t\t\trequestId,\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\targs: params,\n\t\t\t};\n\t\t\treturn new Promise<AgentToolResult<unknown>>((resolve, reject) => {\n\t\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tpendingRpcToolRequests.delete(requestId);\n\t\t\t\t};\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\treject(new Error(`RPC tool aborted: ${toolName}`));\n\t\t\t\t};\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tonAbort();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttimeoutId = setTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(new Error(`Timed out waiting for RPC tool result: ${toolName}`));\n\t\t\t\t\t},\n\t\t\t\t\t5 * 60 * 1000,\n\t\t\t\t);\n\t\t\t\tpendingRpcToolRequests.set(requestId, {\n\t\t\t\t\tresolve: (result) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t},\n\t\t\t\t\treject: (error) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t},\n\t\t\t\t\tabort: onAbort,\n\t\t\t\t});\n\t\t\t\toutput(request);\n\t\t\t});\n\t\t};\n\t};\n\n\tconst handlePromptCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\": {\n\t\t\t\t// Emit the authoritative response only after preflight succeeds. Queued and\n\t\t\t\t// immediately handled prompts also count as success.\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tconst promptOperation = session.prompt(command.message, {\n\t\t\t\t\timages: command.images,\n\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\toutput(success(id, \"prompt\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tpendingPromptCommands.add(promptOperation);\n\t\t\t\tvoid promptOperation.then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t\t(errorValue: unknown) => {\n\t\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\t\tconst message = errorValue instanceof Error ? errorValue.message : String(errorValue);\n\t\t\t\t\t\t\toutput(error(id, \"prompt\", message));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcase \"get_structured_response\": {\n\t\t\t\tconst result = await session.getStructuredResponse({\n\t\t\t\t\tschema: command.schema,\n\t\t\t\t\tname: command.name,\n\t\t\t\t\tdescription: command.description,\n\t\t\t\t\tmaxCorrections: command.maxCorrections,\n\t\t\t\t\tscope: command.scope,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_structured_response\", result);\n\t\t\t}\n\t\t\tcase \"steer\":\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn success(id, \"steer\");\n\t\t\tcase \"follow_up\":\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\tcase \"abort\":\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleNewSessionCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"new_session\") return NOT_HANDLED;\n\t\tconst options =\n\t\t\tcommand.sessionId || command.parentSession\n\t\t\t\t? { id: command.sessionId, parentSession: command.parentSession }\n\t\t\t\t: undefined;\n\t\tconst result = await runtimeHost.newSession(options);\n\t\tif (!result.cancelled) await rebindSession();\n\t\treturn success(command.id, \"new_session\", result);\n\t};\n\n\tconst handleListSessionsCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"list_sessions\") return NOT_HANDLED;\n\t\tconst limit = parseSessionListLimit(command.limit);\n\t\tif (typeof limit === \"string\") return error(command.id, \"list_sessions\", limit);\n\t\tconst offset = parseSessionListCursor(command.cursor);\n\t\tif (typeof offset === \"string\") return error(command.id, \"list_sessions\", offset);\n\t\tconst sessions = await runtimeHost.listSessions();\n\t\tconst page = sessions.slice(offset, offset + limit);\n\t\tconst nextOffset = offset + page.length;\n\t\tconst response: RpcListSessionsResponse = {\n\t\t\tsessions: page,\n\t\t\t...(nextOffset < sessions.length ? { nextCursor: String(nextOffset) } : {}),\n\t\t};\n\t\treturn success(command.id, \"list_sessions\", response);\n\t};\n\n\tconst handleConfigurationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_state\": {\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisIdle: session.isIdle,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t\ttoolBackend: session.getToolBackendInfo(),\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_state\", state);\n\t\t\t}\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((model) => model.provider === command.provider && model.id === command.modelId);\n\t\t\t\tif (!model) return error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\n\t\t\t\treturn success(id, \"cycle_model\", result || null);\n\t\t\t}\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", { models });\n\t\t\t}\n\t\t\tcase \"set_thinking_level\":\n\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\treturn success(id, \"cycle_thinking_level\", level ? { level } : null);\n\t\t\t}\n\t\t\tcase \"set_steering_mode\":\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\t\t\tcase \"set_auto_compaction\":\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\tcase \"set_auto_retry\":\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\tcase \"abort_retry\":\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleBackendCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"bash\": {\n\t\t\t\tconst eventResult = await session.extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand: command.command,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext ?? false,\n\t\t\t\t\tcwd: session.session.getCwd(),\n\t\t\t\t});\n\t\t\t\tif (eventResult?.result) {\n\t\t\t\t\tif (command.record !== false) {\n\t\t\t\t\t\tsession.recordBashResult(command.command, eventResult.result, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn success(id, \"bash\", eventResult.result);\n\t\t\t\t}\n\t\t\t\tconst result = await session.executeBash(command.command, undefined, {\n\t\t\t\t\toperations: eventResult?.operations,\n\t\t\t\t\trecord: command.record,\n\t\t\t\t\ttruncate: command.truncate,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t}\n\t\t\tcase \"abort_bash\":\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\tcase \"set_remote_sandbox\": {\n\t\t\t\tconst info = await session.configureRemoteSandbox({\n\t\t\t\t\ttype: \"daemon\",\n\t\t\t\t\turl: command.url,\n\t\t\t\t\ttoken: command.token,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"set_remote_sandbox\", info);\n\t\t\t}\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\t\tawait session.clearRemoteSandbox();\n\t\t\t\treturn success(id, \"clear_remote_sandbox\", session.getToolBackendInfo());\n\t\t\tcase \"upload_file\": {\n\t\t\t\tawait session.uploadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.sourcePath);\n\t\t\t\treturn success(id, \"upload_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tcase \"download_file\": {\n\t\t\t\tawait session.downloadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.destinationPath);\n\t\t\t\treturn success(id, \"download_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionNavigationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_session_stats\":\n\t\t\t\treturn success(id, \"get_session_stats\", session.getSessionStats());\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"switch_session\", result);\n\t\t\t}\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.session.getLeafId();\n\t\t\t\tif (!leafId) return error(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionQueryCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_fork_messages\":\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages: session.getUserMessagesForForking() });\n\t\t\tcase \"get_entries\": {\n\t\t\t\tlet entries = session.session.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((entry) => entry.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) return error(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_entries\", { entries, leafId: session.session.getLeafId() });\n\t\t\t}\n\t\t\tcase \"get_tree\":\n\t\t\t\treturn success(id, \"get_tree\", { tree: session.session.getTree(), leafId: session.session.getLeafId() });\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text: session.getLastAssistantText() });\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) return error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst collectCommands = (): RpcSlashCommand[] => {\n\t\tconst commands: RpcSlashCommand[] = [];\n\t\tfor (const registeredCommand of session.extensionRunner.getRegisteredCommands()) {\n\t\t\tif (HIDDEN_BUILTIN_SLASH_COMMAND_NAMES.has(registeredCommand.name)) continue;\n\t\t\tcommands.push({\n\t\t\t\tname: registeredCommand.invocationName,\n\t\t\t\tdescription: registeredCommand.description,\n\t\t\t\tsource: \"extension\",\n\t\t\t\tsourceInfo: registeredCommand.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const template of session.promptTemplates) {\n\t\t\tcommands.push({\n\t\t\t\tname: template.name,\n\t\t\t\tdescription: template.description,\n\t\t\t\tsource: \"prompt\",\n\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const skill of session.getRegisteredSkills()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `skill:${skill.name}`,\n\t\t\t\tdescription: skill.description,\n\t\t\t\tsource: \"skill\",\n\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const rule of session.getRegisteredRules()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `rule:${rule.name}`,\n\t\t\t\tdescription: rule.description,\n\t\t\t\tsource: \"rule\",\n\t\t\t\tsourceInfo: rule.sourceInfo,\n\t\t\t});\n\t\t}\n\t\treturn commands;\n\t};\n\n\tconst handleSkillCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_commands\":\n\t\t\t\treturn success(id, \"get_commands\", { commands: collectCommands() });\n\t\t\tcase \"register_skill\": {\n\t\t\t\tif (!command.skill.filePath && command.skill.content === undefined) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"register_skill\",\n\t\t\t\t\t\t`registerSkill(\"${command.skill.name}\") requires filePath or content`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.skill.filePath ?? `<rpc-skill:${command.skill.name}>`;\n\t\t\t\tsession.registerSessionSkill({\n\t\t\t\t\tname: command.skill.name,\n\t\t\t\t\tdescription: command.skill.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.skill.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.skill.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.skill.tools ?? [],\n\t\t\t\t\t...(command.skill.content !== undefined ? { content: command.skill.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_skill\");\n\t\t\t}\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn success(id, \"unregister_skill\", { unregistered: session.unregisterSessionSkill(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleRuleCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_rule\": {\n\t\t\t\tif (!command.rule.filePath && command.rule.content === undefined) {\n\t\t\t\t\treturn error(id, \"register_rule\", `registerRule(\"${command.rule.name}\") requires filePath or content`);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.rule.filePath ?? `<rpc-rule:${command.rule.name}>`;\n\t\t\t\tsession.registerSessionRule({\n\t\t\t\t\tname: command.rule.name,\n\t\t\t\t\tdescription: command.rule.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.rule.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.rule.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.rule.tools ?? [],\n\t\t\t\t\t...(command.rule.content !== undefined ? { content: command.rule.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_rule\");\n\t\t\t}\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn success(id, \"unregister_rule\", { unregistered: session.unregisterSessionRule(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleToolRegistrationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_tool\":\n\t\t\t\tsession.registerSessionTool(\n\t\t\t\t\t{\n\t\t\t\t\t\tname: command.tool.name,\n\t\t\t\t\t\tlabel: command.tool.label,\n\t\t\t\t\t\tdescription: command.tool.description,\n\t\t\t\t\t\tpromptSnippet: command.tool.promptSnippet,\n\t\t\t\t\t\tpromptGuidelines: command.tool.promptGuidelines,\n\t\t\t\t\t\tparameters: command.tool.parameters,\n\t\t\t\t\t\texecutionMode: command.tool.executionMode,\n\t\t\t\t\t\texecute: createRpcToolExecutor(command.tool.name),\n\t\t\t\t\t},\n\t\t\t\t\t{ lazy: command.tool.lazy },\n\t\t\t\t);\n\t\t\t\treturn success(id, \"register_tool\");\n\t\t\tcase \"unregister_tool\":\n\t\t\t\treturn success(id, \"unregister_tool\", { unregistered: session.unregisterSessionTool(command.name) });\n\t\t\tcase \"get_available_tools\":\n\t\t\t\treturn success(id, \"get_available_tools\", { tools: session.getAvailableSessionTools() });\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn success(id, command.type);\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst requireHandledCommandResult = async (\n\t\tcommand: RpcCommand,\n\t\tresultPromise: Promise<CommandResult>,\n\t): Promise<RpcResponse | undefined> => {\n\t\tconst result = await resultPromise;\n\t\tif (result !== NOT_HANDLED) return result;\n\t\tconst unknownCommand = command as unknown as { type: string };\n\t\treturn error(command.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t};\n\t// Route synchronously so commands begin handling in input order. Awaiting a chain of\n\t// non-matching async handlers would let later input commands overtake earlier ones.\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\":\n\t\t\tcase \"get_structured_response\":\n\t\t\tcase \"steer\":\n\t\t\tcase \"follow_up\":\n\t\t\tcase \"abort\":\n\t\t\t\treturn requireHandledCommandResult(command, handlePromptCommands(command));\n\t\t\tcase \"new_session\":\n\t\t\t\treturn requireHandledCommandResult(command, handleNewSessionCommand(command));\n\t\t\tcase \"list_sessions\":\n\t\t\t\treturn requireHandledCommandResult(command, handleListSessionsCommand(command));\n\t\t\tcase \"get_state\":\n\t\t\tcase \"set_model\":\n\t\t\tcase \"cycle_model\":\n\t\t\tcase \"get_available_models\":\n\t\t\tcase \"set_thinking_level\":\n\t\t\tcase \"cycle_thinking_level\":\n\t\t\tcase \"set_steering_mode\":\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\tcase \"compact\":\n\t\t\tcase \"set_auto_compaction\":\n\t\t\tcase \"set_auto_retry\":\n\t\t\tcase \"abort_retry\":\n\t\t\t\treturn requireHandledCommandResult(command, handleConfigurationCommands(command));\n\t\t\tcase \"bash\":\n\t\t\tcase \"abort_bash\":\n\t\t\tcase \"set_remote_sandbox\":\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\tcase \"upload_file\":\n\t\t\tcase \"download_file\":\n\t\t\t\treturn requireHandledCommandResult(command, handleBackendCommands(command));\n\t\t\tcase \"get_session_stats\":\n\t\t\tcase \"export_html\":\n\t\t\tcase \"switch_session\":\n\t\t\tcase \"fork\":\n\t\t\tcase \"clone\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionNavigationCommands(command));\n\t\t\tcase \"get_fork_messages\":\n\t\t\tcase \"get_entries\":\n\t\t\tcase \"get_tree\":\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\tcase \"set_session_name\":\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionQueryCommands(command));\n\t\t\tcase \"get_commands\":\n\t\t\tcase \"register_skill\":\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSkillCommands(command));\n\t\t\tcase \"register_rule\":\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn requireHandledCommandResult(command, handleRuleCommands(command));\n\t\t\tcase \"register_tool\":\n\t\t\tcase \"unregister_tool\":\n\t\t\tcase \"get_available_tools\":\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn requireHandledCommandResult(command, handleToolRegistrationCommands(command));\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as unknown as { id?: string; type: string };\n\t\t\t\treturn error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(exitCode = 0, signal?: NodeJS.Signals): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tfor (const pending of pendingRpcToolRequests.values()) {\n\t\t\tpending.abort();\n\t\t}\n\t\tpendingRpcToolRequests.clear();\n\t\tawait runtimeHost.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tif (signal !== \"SIGTERM\") {\n\t\t\tawait flushRawStdout();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\tawait shutdown();\n\t}\n\n\tconst parseInputLine = (line: string): RpcInputParseResult => {\n\t\ttry {\n\t\t\treturn { ok: true, value: JSON.parse(line) };\n\t\t} catch (parseError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"parse\",\n\t\t\t\t\t`Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn { ok: false };\n\t\t}\n\t};\n\n\tconst handlePendingRpcResponse = (parsed: unknown): boolean => {\n\t\tif (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) return false;\n\t\tswitch (parsed.type) {\n\t\t\tcase \"extension_ui_response\": {\n\t\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\t\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\t\tif (pending) {\n\t\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\t\tpending.resolve(response);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_result\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_result\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.resolve(response.result);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_error\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_error\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.reject(new Error(response.error));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst handleParsedCommand = async (command: RpcCommand): Promise<void> => {\n\t\ttry {\n\t\t\tconst response = await handleCommand(command);\n\t\t\tif (response) {\n\t\t\t\toutput(response);\n\t\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\t}\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (commandError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\tcommandError instanceof Error ? commandError.message : String(commandError),\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t}\n\t};\n\n\tconst handleInputLine = async (line: string) => {\n\t\tconst parseResult = parseInputLine(line);\n\t\tif (!parseResult.ok) {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\treturn;\n\t\t}\n\t\tif (handlePendingRpcResponse(parseResult.value)) return;\n\t\tawait handleParsedCommand(parseResult.value as RpcCommand);\n\t};\n\n\tconst onInputEnd = () => {\n\t\tshutdownRequested = true;\n\t\tscheduleShutdownCheck();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tactiveInputCommands++;\n\t\t\tvoid handleInputLine(line).finally(() => {\n\t\t\t\tactiveInputCommands--;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t});\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n\nfunction parseSessionListLimit(limit: number | undefined): number | string {\n\tif (limit === undefined) {\n\t\treturn DEFAULT_RPC_SESSION_LIST_LIMIT;\n\t}\n\tif (!Number.isInteger(limit) || limit < 1) {\n\t\treturn \"Session list limit must be a positive integer\";\n\t}\n\treturn Math.min(limit, MAX_RPC_SESSION_LIST_LIMIT);\n}\n\nfunction parseSessionListCursor(cursor: string | undefined): number | string {\n\tif (cursor === undefined) {\n\t\treturn 0;\n\t}\n\tif (!/^\\d+$/.test(cursor)) {\n\t\treturn \"Session list cursor is invalid\";\n\t}\n\treturn Number(cursor);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-mode.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC mode: Headless operation with JSON stdin/stdout protocol.\n *\n * Used for embedding the agent in other applications.\n * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.\n *\n * Protocol:\n * - Commands: JSON objects with `type` field, optional `id` for correlation\n * - Responses: JSON objects with `type: \"response\"`, `command`, `success`, and optional `data`/`error`\n * - Events: JsonAgentSessionEvent objects streamed as they occur\n * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response\n */\n\nimport * as crypto from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport type { AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport type {\n\tExtensionNotificationType,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tWorkingIndicatorOptions,\n} from \"../../core/extensions/types.ts\";\nimport type { GripAgentRuntimeHost } from \"../../core/grip-agent.ts\";\nimport {\n\tflushRawStdout,\n\ttakeOverStdout,\n\twaitForRawStdoutBackpressure,\n\twriteRawStdout,\n} from \"../../core/output-guard.ts\";\nimport { HIDDEN_BUILTIN_SLASH_COMMAND_NAMES } from \"../../core/slash-commands.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { type Theme, theme } from \"../interactive/theme/theme.ts\";\nimport { toJsonEvent } from \"../json-event.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSlashCommand,\n\tRpcToolCallRequest,\n} from \"./rpc-types.ts\";\n\n// Re-export types for consumers\nexport type {\n\tRpcCommand,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcInstructionDefinition,\n\tRpcListSessionsOptions,\n\tRpcListSessionsResponse,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcToolCallRequest,\n\tRpcToolDefinition,\n} from \"./rpc-types.ts\";\n\ntype RpcInputParseResult = { ok: true; value: unknown } | { ok: false };\n\nconst DEFAULT_RPC_SESSION_LIST_LIMIT = 100;\nconst MAX_RPC_SESSION_LIST_LIMIT = 500;\n\n/**\n * Run in RPC mode.\n * Listens for JSON commands on stdin, outputs events and responses on stdout.\n */\nexport async function runRpcMode(runtimeHost: GripAgentRuntimeHost): Promise<never> {\n\ttakeOverStdout();\n\tlet session = runtimeHost.session;\n\tlet unsubscribe: (() => void) | undefined;\n\tlet unsubscribeBackpressure: (() => void) | undefined;\n\n\tconst output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {\n\t\twriteRawStdout(serializeJsonLine(obj));\n\t};\n\n\tconst success = <T extends RpcCommand[\"type\"]>(\n\t\tid: string | undefined,\n\t\tcommand: T,\n\t\tdata?: object | null,\n\t): RpcResponse => {\n\t\tif (data === undefined) {\n\t\t\treturn { id, type: \"response\", command, success: true } as RpcResponse;\n\t\t}\n\t\treturn { id, type: \"response\", command, success: true, data } as RpcResponse;\n\t};\n\n\tconst error = (id: string | undefined, command: string, message: string): RpcResponse => {\n\t\treturn { id, type: \"response\", command, success: false, error: message };\n\t};\n\n\t// Pending extension UI requests waiting for response\n\tconst pendingExtensionRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (value: any) => void; reject: (error: Error) => void }\n\t>();\n\tconst pendingRpcToolRequests = new Map<\n\t\tstring,\n\t\t{ resolve: (result: AgentToolResult<unknown>) => void; reject: (error: Error) => void; abort: () => void }\n\t>();\n\n\t// Shutdown request flag\n\tlet shutdownRequested = false;\n\tlet shuttingDown = false;\n\tlet shutdownCheckScheduled = false;\n\tlet activeInputCommands = 0;\n\tconst pendingPromptCommands = new Set<Promise<void>>();\n\tconst signalCleanupHandlers: Array<() => void> = [];\n\n\tconst scheduleShutdownCheck = (): void => {\n\t\tif (!shutdownRequested || shutdownCheckScheduled) return;\n\t\tshutdownCheckScheduled = true;\n\t\tsetTimeout(() => {\n\t\t\tshutdownCheckScheduled = false;\n\t\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\t\tvoid session\n\t\t\t\t.waitForIdle()\n\t\t\t\t.then(() => waitForRawStdoutBackpressure())\n\t\t\t\t.then(() => checkShutdownRequested())\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\toutput({\n\t\t\t\t\t\ttype: \"extension_error\",\n\t\t\t\t\t\textensionPath: \"<shutdown>\",\n\t\t\t\t\t\tevent: \"shutdown\",\n\t\t\t\t\t\terror: String(error),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}, 0);\n\t};\n\n\t/** Helper for dialog methods with signal/timeout support */\n\tfunction createDialogPromise<T>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tdefaultValue: T,\n\t\trequest: Record<string, unknown>,\n\t\tparseResponse: (response: RpcExtensionUIResponse) => T,\n\t): Promise<T> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(defaultValue);\n\n\t\tconst id = crypto.randomUUID();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tpendingExtensionRequests.delete(id);\n\t\t\t};\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(defaultValue);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tif (opts?.timeout) {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(defaultValue);\n\t\t\t\t}, opts.timeout);\n\t\t\t}\n\n\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve(parseResponse(response));\n\t\t\t\t},\n\t\t\t\treject,\n\t\t\t});\n\t\t\toutput({ type: \"extension_ui_request\", id, ...request } as RpcExtensionUIRequest);\n\t\t});\n\t}\n\n\t/**\n\t * Create an extension UI context that uses the RPC protocol.\n\t */\n\tconst createExtensionUIContext = (): ExtensionUIContext => ({\n\t\tselect: (title, options, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"select\", title, options, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tconfirm: (title, message, opts) =>\n\t\t\tcreateDialogPromise(opts, false, { method: \"confirm\", title, message, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed : false,\n\t\t\t),\n\n\t\tinput: (title, placeholder, opts) =>\n\t\t\tcreateDialogPromise(opts, undefined, { method: \"input\", title, placeholder, timeout: opts?.timeout }, (r) =>\n\t\t\t\t\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? r.value : undefined,\n\t\t\t),\n\n\t\tnotify(message: string, type?: ExtensionNotificationType): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"notify\",\n\t\t\t\tmessage,\n\t\t\t\tnotifyType: type,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tonTerminalInput(): () => void {\n\t\t\t// Raw terminal input not supported in RPC mode\n\t\t\treturn () => {};\n\t\t},\n\n\t\tsetStatus(key: string, text: string | undefined): void {\n\t\t\t// Fire and forget - no response needed\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setStatus\",\n\t\t\t\tstatusKey: key,\n\t\t\t\tstatusText: text,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tsetWorkingMessage(_message?: string): void {\n\t\t\t// Working message not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingVisible(_visible: boolean): void {\n\t\t\t// Working visibility not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetWorkingIndicator(_options?: WorkingIndicatorOptions): void {\n\t\t\t// Working indicator customization not supported in RPC mode - requires TUI loader access\n\t\t},\n\n\t\tsetHiddenThinkingLabel(_label?: string): void {\n\t\t\t// Hidden thinking label not supported in RPC mode - requires TUI message rendering access\n\t\t},\n\n\t\tsetWidget(key: string, content: unknown, options?: ExtensionWidgetOptions): void {\n\t\t\t// Only support string arrays in RPC mode - factory functions are ignored\n\t\t\tif (content === undefined || Array.isArray(content)) {\n\t\t\t\toutput({\n\t\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmethod: \"setWidget\",\n\t\t\t\t\twidgetKey: key,\n\t\t\t\t\twidgetLines: content as string[] | undefined,\n\t\t\t\t\twidgetPlacement: options?.placement,\n\t\t\t\t} as RpcExtensionUIRequest);\n\t\t\t}\n\t\t\t// Component factories are not supported in RPC mode - would need TUI access\n\t\t},\n\n\t\tsetFooter(_factory: unknown): void {\n\t\t\t// Custom footer not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetHeader(_factory: unknown): void {\n\t\t\t// Custom header not supported in RPC mode - requires TUI access\n\t\t},\n\n\t\tsetTitle(title: string): void {\n\t\t\t// Fire and forget - host can implement terminal title control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"setTitle\",\n\t\t\t\ttitle,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tasync custom() {\n\t\t\t// Custom UI not supported in RPC mode\n\t\t\treturn undefined as never;\n\t\t},\n\n\t\tpasteToEditor(text: string): void {\n\t\t\t// Paste handling not supported in RPC mode - falls back to setEditorText\n\t\t\tthis.setEditorText(text);\n\t\t},\n\n\t\tsetEditorText(text: string): void {\n\t\t\t// Fire and forget - host can implement editor control\n\t\t\toutput({\n\t\t\t\ttype: \"extension_ui_request\",\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tmethod: \"set_editor_text\",\n\t\t\t\ttext,\n\t\t\t} as RpcExtensionUIRequest);\n\t\t},\n\n\t\tgetEditorText(): string {\n\t\t\t// Synchronous method can't wait for RPC response\n\t\t\t// Host should track editor state locally if needed\n\t\t\treturn \"\";\n\t\t},\n\n\t\tasync editor(title: string, prefill?: string): Promise<string | undefined> {\n\t\t\tconst id = crypto.randomUUID();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingExtensionRequests.set(id, {\n\t\t\t\t\tresolve: (response: RpcExtensionUIResponse) => {\n\t\t\t\t\t\tif (\"cancelled\" in response && response.cancelled) {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t} else if (\"value\" in response) {\n\t\t\t\t\t\t\tresolve(response.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\treject,\n\t\t\t\t});\n\t\t\t\toutput({ type: \"extension_ui_request\", id, method: \"editor\", title, prefill } as RpcExtensionUIRequest);\n\t\t\t});\n\t\t},\n\n\t\taddAutocompleteProvider(): void {\n\t\t\t// Autocomplete provider composition is not supported in RPC mode\n\t\t},\n\n\t\tsetEditorComponent(): void {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t},\n\n\t\tgetEditorComponent() {\n\t\t\t// Custom editor components not supported in RPC mode\n\t\t\treturn undefined;\n\t\t},\n\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\n\t\tgetAllThemes() {\n\t\t\treturn [];\n\t\t},\n\n\t\tgetTheme(_name: string) {\n\t\t\treturn undefined;\n\t\t},\n\n\t\tsetTheme(_theme: string | Theme) {\n\t\t\t// Theme switching not supported in RPC mode\n\t\t\treturn { success: false, error: \"Theme switching not supported in RPC mode\" };\n\t\t},\n\n\t\tgetToolsExpanded() {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t\treturn false;\n\t\t},\n\n\t\tsetToolsExpanded(_expanded: boolean) {\n\t\t\t// Tool expansion not supported in RPC mode - no TUI\n\t\t},\n\t});\n\n\truntimeHost.setRebindSession(async () => {\n\t\tawait rebindSession();\n\t});\n\n\tconst rebindSession = async (): Promise<void> => {\n\t\tsession = runtimeHost.session;\n\t\tawait session.bindExtensions({\n\t\t\tuiContext: createExtensionUIContext(),\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => session.waitForIdle(),\n\t\t\t\tnewSession: async (options) => runtimeHost.newSession(options),\n\t\t\t\tfork: async (entryId, forkOptions) => {\n\t\t\t\t\tconst result = await runtimeHost.fork(entryId, forkOptions);\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn runtimeHost.switchSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait session.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tshutdownRequested = true;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\toutput({ type: \"extension_error\", extensionPath: err.extensionPath, event: err.event, error: err.error });\n\t\t\t},\n\t\t});\n\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tunsubscribe = session.subscribe((event) => {\n\t\t\toutput(toJsonEvent(event));\n\t\t\tif (event.type === \"agent_settled\" && shutdownRequested) scheduleShutdownCheck();\n\t\t});\n\t\tunsubscribeBackpressure = session.agent.subscribe(async () => {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t});\n\t};\n\n\tconst registerSignalHandlers = (): void => {\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid shutdown(signal === \"SIGHUP\" ? 129 : 143, signal);\n\t\t\t};\n\t\t\tprocess.on(signal, handler);\n\t\t\tsignalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\t};\n\n\tawait rebindSession();\n\tregisterSignalHandlers();\n\n\tconst NOT_HANDLED = Symbol(\"not-handled\");\n\ttype CommandResult = RpcResponse | undefined | typeof NOT_HANDLED;\n\n\tconst createRpcToolExecutor = (toolName: string) => {\n\t\treturn (toolCallId: string, params: unknown, signal: AbortSignal | undefined) => {\n\t\t\tconst requestId = crypto.randomUUID();\n\t\t\tconst request: RpcToolCallRequest = {\n\t\t\t\ttype: \"rpc_tool_call\",\n\t\t\t\trequestId,\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\targs: params,\n\t\t\t};\n\t\t\treturn new Promise<AgentToolResult<unknown>>((resolve, reject) => {\n\t\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\tconst cleanup = () => {\n\t\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tpendingRpcToolRequests.delete(requestId);\n\t\t\t\t};\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\treject(new Error(`RPC tool aborted: ${toolName}`));\n\t\t\t\t};\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tonAbort();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttimeoutId = setTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(new Error(`Timed out waiting for RPC tool result: ${toolName}`));\n\t\t\t\t\t},\n\t\t\t\t\t5 * 60 * 1000,\n\t\t\t\t);\n\t\t\t\tpendingRpcToolRequests.set(requestId, {\n\t\t\t\t\tresolve: (result) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t},\n\t\t\t\t\treject: (error) => {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t},\n\t\t\t\t\tabort: onAbort,\n\t\t\t\t});\n\t\t\t\toutput(request);\n\t\t\t});\n\t\t};\n\t};\n\n\tconst handlePromptCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\": {\n\t\t\t\t// Emit the authoritative response only after preflight succeeds. Queued and\n\t\t\t\t// immediately handled prompts also count as success.\n\t\t\t\tlet preflightSucceeded = false;\n\t\t\t\tconst promptOperation = session.prompt(command.message, {\n\t\t\t\t\timages: command.images,\n\t\t\t\t\tstreamingBehavior: command.streamingBehavior,\n\t\t\t\t\tsource: \"rpc\",\n\t\t\t\t\tpreflightResult: (didSucceed) => {\n\t\t\t\t\t\tif (didSucceed) {\n\t\t\t\t\t\t\tpreflightSucceeded = true;\n\t\t\t\t\t\t\toutput(success(id, \"prompt\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tpendingPromptCommands.add(promptOperation);\n\t\t\t\tvoid promptOperation.then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t\t(errorValue: unknown) => {\n\t\t\t\t\t\tif (!preflightSucceeded) {\n\t\t\t\t\t\t\tconst message = errorValue instanceof Error ? errorValue.message : String(errorValue);\n\t\t\t\t\t\t\toutput(error(id, \"prompt\", message));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpendingPromptCommands.delete(promptOperation);\n\t\t\t\t\t\tscheduleShutdownCheck();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcase \"get_structured_response\": {\n\t\t\t\tconst result = await session.getStructuredResponse({\n\t\t\t\t\tschema: command.schema,\n\t\t\t\t\tname: command.name,\n\t\t\t\t\tdescription: command.description,\n\t\t\t\t\tmaxCorrections: command.maxCorrections,\n\t\t\t\t\tscope: command.scope,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"get_structured_response\", result);\n\t\t\t}\n\t\t\tcase \"steer\":\n\t\t\t\tawait session.steer(command.message, command.images);\n\t\t\t\treturn success(id, \"steer\");\n\t\t\tcase \"follow_up\":\n\t\t\t\tawait session.followUp(command.message, command.images);\n\t\t\t\treturn success(id, \"follow_up\");\n\t\t\tcase \"abort\":\n\t\t\t\tawait session.abort();\n\t\t\t\treturn success(id, \"abort\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleNewSessionCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"new_session\") return NOT_HANDLED;\n\t\tconst options =\n\t\t\tcommand.sessionId || command.parentSession\n\t\t\t\t? { id: command.sessionId, parentSession: command.parentSession }\n\t\t\t\t: undefined;\n\t\tconst result = await runtimeHost.newSession(options);\n\t\tif (!result.cancelled) await rebindSession();\n\t\treturn success(command.id, \"new_session\", result);\n\t};\n\n\tconst handleListSessionsCommand = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tif (command.type !== \"list_sessions\") return NOT_HANDLED;\n\t\tconst limit = parseSessionListLimit(command.limit);\n\t\tif (typeof limit === \"string\") return error(command.id, \"list_sessions\", limit);\n\t\tconst offset = parseSessionListCursor(command.cursor);\n\t\tif (typeof offset === \"string\") return error(command.id, \"list_sessions\", offset);\n\t\tconst sessions = await runtimeHost.listSessions();\n\t\tconst page = sessions.slice(offset, offset + limit);\n\t\tconst nextOffset = offset + page.length;\n\t\tconst response: RpcListSessionsResponse = {\n\t\t\tsessions: page,\n\t\t\t...(nextOffset < sessions.length ? { nextCursor: String(nextOffset) } : {}),\n\t\t};\n\t\treturn success(command.id, \"list_sessions\", response);\n\t};\n\n\tconst handleConfigurationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_state\": {\n\t\t\t\tconst state: RpcSessionState = {\n\t\t\t\t\tmodel: session.model,\n\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\tisStreaming: session.isStreaming,\n\t\t\t\t\tisIdle: session.isIdle,\n\t\t\t\t\tisCompacting: session.isCompacting,\n\t\t\t\t\tsteeringMode: session.steeringMode,\n\t\t\t\t\tfollowUpMode: session.followUpMode,\n\t\t\t\t\tsessionFile: session.sessionFile,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t\tsessionName: session.sessionName,\n\t\t\t\t\tautoCompactionEnabled: session.autoCompactionEnabled,\n\t\t\t\t\tmessageCount: session.messages.length,\n\t\t\t\t\tpendingMessageCount: session.pendingMessageCount,\n\t\t\t\t\ttoolBackend: session.getToolBackendInfo(),\n\t\t\t\t};\n\t\t\t\treturn success(id, \"get_state\", state);\n\t\t\t}\n\t\t\tcase \"set_model\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\tconst model = models.find((model) => model.provider === command.provider && model.id === command.modelId);\n\t\t\t\tif (!model) return error(id, \"set_model\", `Model not found: ${command.provider}/${command.modelId}`);\n\t\t\t\tawait session.setModel(model);\n\t\t\t\treturn success(id, \"set_model\", model);\n\t\t\t}\n\t\t\tcase \"cycle_model\": {\n\t\t\t\tconst result = await session.cycleModel();\n\t\t\t\treturn success(id, \"cycle_model\", result || null);\n\t\t\t}\n\t\t\tcase \"get_available_models\": {\n\t\t\t\tconst models = await session.modelRegistry.getAvailable();\n\t\t\t\treturn success(id, \"get_available_models\", { models });\n\t\t\t}\n\t\t\tcase \"set_thinking_level\":\n\t\t\t\tsession.setThinkingLevel(command.level);\n\t\t\t\treturn success(id, \"set_thinking_level\");\n\t\t\tcase \"cycle_thinking_level\": {\n\t\t\t\tconst level = session.cycleThinkingLevel();\n\t\t\t\treturn success(id, \"cycle_thinking_level\", level ? { level } : null);\n\t\t\t}\n\t\t\tcase \"set_steering_mode\":\n\t\t\t\tsession.setSteeringMode(command.mode);\n\t\t\t\treturn success(id, \"set_steering_mode\");\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\t\tsession.setFollowUpMode(command.mode);\n\t\t\t\treturn success(id, \"set_follow_up_mode\");\n\t\t\tcase \"compact\": {\n\t\t\t\tconst result = await session.compact(command.customInstructions);\n\t\t\t\treturn success(id, \"compact\", result);\n\t\t\t}\n\t\t\tcase \"set_auto_compaction\":\n\t\t\t\tsession.setAutoCompactionEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_compaction\");\n\t\t\tcase \"set_auto_retry\":\n\t\t\t\tsession.setAutoRetryEnabled(command.enabled);\n\t\t\t\treturn success(id, \"set_auto_retry\");\n\t\t\tcase \"abort_retry\":\n\t\t\t\tsession.abortRetry();\n\t\t\t\treturn success(id, \"abort_retry\");\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleBackendCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"bash\": {\n\t\t\t\tconst eventResult = await session.extensionRunner.emitUserBash({\n\t\t\t\t\ttype: \"user_bash\",\n\t\t\t\t\tcommand: command.command,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext ?? false,\n\t\t\t\t\tcwd: session.session.getCwd(),\n\t\t\t\t});\n\t\t\t\tif (eventResult?.result) {\n\t\t\t\t\tif (command.record !== false) {\n\t\t\t\t\t\tsession.recordBashResult(command.command, eventResult.result, {\n\t\t\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn success(id, \"bash\", eventResult.result);\n\t\t\t\t}\n\t\t\t\tconst result = await session.executeBash(command.command, undefined, {\n\t\t\t\t\toperations: eventResult?.operations,\n\t\t\t\t\trecord: command.record,\n\t\t\t\t\ttruncate: command.truncate,\n\t\t\t\t\texcludeFromContext: command.excludeFromContext,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"bash\", result);\n\t\t\t}\n\t\t\tcase \"abort_bash\":\n\t\t\t\tsession.abortBash();\n\t\t\t\treturn success(id, \"abort_bash\");\n\t\t\tcase \"set_remote_sandbox\": {\n\t\t\t\tconst info = await session.configureRemoteSandbox({\n\t\t\t\t\ttype: \"daemon\",\n\t\t\t\t\turl: command.url,\n\t\t\t\t\ttoken: command.token,\n\t\t\t\t});\n\t\t\t\treturn success(id, \"set_remote_sandbox\", info);\n\t\t\t}\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\t\tawait session.clearRemoteSandbox();\n\t\t\t\treturn success(id, \"clear_remote_sandbox\", session.getToolBackendInfo());\n\t\t\tcase \"upload_file\": {\n\t\t\t\tawait session.uploadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.sourcePath);\n\t\t\t\treturn success(id, \"upload_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tcase \"download_file\": {\n\t\t\t\tawait session.downloadFile(command.sourcePath, command.destinationPath);\n\t\t\t\tconst result = await stat(command.destinationPath);\n\t\t\t\treturn success(id, \"download_file\", { bytes: result.size });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionNavigationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_session_stats\":\n\t\t\t\treturn success(id, \"get_session_stats\", session.getSessionStats());\n\t\t\tcase \"export_html\": {\n\t\t\t\tconst path = await session.exportToHtml(command.outputPath);\n\t\t\t\treturn success(id, \"export_html\", { path });\n\t\t\t}\n\t\t\tcase \"switch_session\": {\n\t\t\t\tconst result = await runtimeHost.switchSession(command.sessionPath);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"switch_session\", result);\n\t\t\t}\n\t\t\tcase \"fork\": {\n\t\t\t\tconst result = await runtimeHost.fork(command.entryId);\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"fork\", { text: result.selectedText, cancelled: result.cancelled });\n\t\t\t}\n\t\t\tcase \"clone\": {\n\t\t\t\tconst leafId = session.session.getLeafId();\n\t\t\t\tif (!leafId) return error(id, \"clone\", \"Cannot clone session: no current entry selected\");\n\t\t\t\tconst result = await runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\t\tif (!result.cancelled) await rebindSession();\n\t\t\t\treturn success(id, \"clone\", { cancelled: result.cancelled });\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleSessionQueryCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_fork_messages\":\n\t\t\t\treturn success(id, \"get_fork_messages\", { messages: session.getUserMessagesForForking() });\n\t\t\tcase \"get_entries\": {\n\t\t\t\tlet entries = session.session.getEntries();\n\t\t\t\tif (command.since !== undefined) {\n\t\t\t\t\tconst sinceIndex = entries.findIndex((entry) => entry.id === command.since);\n\t\t\t\t\tif (sinceIndex === -1) return error(id, \"get_entries\", `Entry not found: ${command.since}`);\n\t\t\t\t\tentries = entries.slice(sinceIndex + 1);\n\t\t\t\t}\n\t\t\t\treturn success(id, \"get_entries\", { entries, leafId: session.session.getLeafId() });\n\t\t\t}\n\t\t\tcase \"get_tree\":\n\t\t\t\treturn success(id, \"get_tree\", { tree: session.session.getTree(), leafId: session.session.getLeafId() });\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\t\treturn success(id, \"get_last_assistant_text\", { text: session.getLastAssistantText() });\n\t\t\tcase \"set_session_name\": {\n\t\t\t\tconst name = command.name.trim();\n\t\t\t\tif (!name) return error(id, \"set_session_name\", \"Session name cannot be empty\");\n\t\t\t\tsession.setSessionName(name);\n\t\t\t\treturn success(id, \"set_session_name\");\n\t\t\t}\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn success(id, \"get_messages\", { messages: session.messages });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst collectCommands = (): RpcSlashCommand[] => {\n\t\tconst commands: RpcSlashCommand[] = [];\n\t\tfor (const registeredCommand of session.extensionRunner.getRegisteredCommands()) {\n\t\t\tif (HIDDEN_BUILTIN_SLASH_COMMAND_NAMES.has(registeredCommand.name)) continue;\n\t\t\tcommands.push({\n\t\t\t\tname: registeredCommand.invocationName,\n\t\t\t\tdescription: registeredCommand.description,\n\t\t\t\tsource: \"extension\",\n\t\t\t\tsourceInfo: registeredCommand.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const template of session.promptTemplates) {\n\t\t\tcommands.push({\n\t\t\t\tname: template.name,\n\t\t\t\tdescription: template.description,\n\t\t\t\tsource: \"prompt\",\n\t\t\t\tsourceInfo: template.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const skill of session.getRegisteredSkills()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `skill:${skill.name}`,\n\t\t\t\tdescription: skill.description,\n\t\t\t\tsource: \"skill\",\n\t\t\t\tsourceInfo: skill.sourceInfo,\n\t\t\t});\n\t\t}\n\t\tfor (const rule of session.getRegisteredRules()) {\n\t\t\tcommands.push({\n\t\t\t\tname: `rule:${rule.name}`,\n\t\t\t\tdescription: rule.description,\n\t\t\t\tsource: \"rule\",\n\t\t\t\tsourceInfo: rule.sourceInfo,\n\t\t\t});\n\t\t}\n\t\treturn commands;\n\t};\n\n\tconst handleSkillCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"get_commands\":\n\t\t\t\treturn success(id, \"get_commands\", { commands: collectCommands() });\n\t\t\tcase \"register_skill\": {\n\t\t\t\tif (!command.skill.filePath && command.skill.content === undefined) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t\"register_skill\",\n\t\t\t\t\t\t`registerSkill(\"${command.skill.name}\") requires filePath or content`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.skill.filePath ?? `<rpc-skill:${command.skill.name}>`;\n\t\t\t\tsession.registerSessionSkill({\n\t\t\t\t\tname: command.skill.name,\n\t\t\t\t\tdescription: command.skill.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.skill.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.skill.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.skill.tools ?? [],\n\t\t\t\t\t...(command.skill.content !== undefined ? { content: command.skill.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_skill\");\n\t\t\t}\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn success(id, \"unregister_skill\", { unregistered: session.unregisterSessionSkill(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleRuleCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_rule\": {\n\t\t\t\tif (!command.rule.filePath && command.rule.content === undefined) {\n\t\t\t\t\treturn error(id, \"register_rule\", `registerRule(\"${command.rule.name}\") requires filePath or content`);\n\t\t\t\t}\n\t\t\t\tconst filePath = command.rule.filePath ?? `<rpc-rule:${command.rule.name}>`;\n\t\t\t\tsession.registerSessionRule({\n\t\t\t\t\tname: command.rule.name,\n\t\t\t\t\tdescription: command.rule.description,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tbaseDir: command.rule.baseDir,\n\t\t\t\t\tdisableModelInvocation: command.rule.disableModelInvocation ?? false,\n\t\t\t\t\ttools: command.rule.tools ?? [],\n\t\t\t\t\t...(command.rule.content !== undefined ? { content: command.rule.content } : {}),\n\t\t\t\t});\n\t\t\t\treturn success(id, \"register_rule\");\n\t\t\t}\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn success(id, \"unregister_rule\", { unregistered: session.unregisterSessionRule(command.name) });\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst handleToolRegistrationCommands = async (command: RpcCommand): Promise<CommandResult> => {\n\t\tconst id = command.id;\n\t\tswitch (command.type) {\n\t\t\tcase \"register_tool\":\n\t\t\t\tsession.registerSessionTool(\n\t\t\t\t\t{\n\t\t\t\t\t\tname: command.tool.name,\n\t\t\t\t\t\tlabel: command.tool.label,\n\t\t\t\t\t\tdescription: command.tool.description,\n\t\t\t\t\t\tpromptSnippet: command.tool.promptSnippet,\n\t\t\t\t\t\tpromptGuidelines: command.tool.promptGuidelines,\n\t\t\t\t\t\tparameters: command.tool.parameters,\n\t\t\t\t\t\texecutionMode: command.tool.executionMode,\n\t\t\t\t\t\texecute: createRpcToolExecutor(command.tool.name),\n\t\t\t\t\t},\n\t\t\t\t\t{ lazy: command.tool.lazy },\n\t\t\t\t);\n\t\t\t\treturn success(id, \"register_tool\");\n\t\t\tcase \"unregister_tool\":\n\t\t\t\treturn success(id, \"unregister_tool\", { unregistered: session.unregisterSessionTool(command.name) });\n\t\t\tcase \"get_available_tools\":\n\t\t\t\treturn success(id, \"get_available_tools\", { tools: session.getAvailableSessionTools() });\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn success(id, command.type);\n\t\t\tdefault:\n\t\t\t\treturn NOT_HANDLED;\n\t\t}\n\t};\n\n\tconst requireHandledCommandResult = async (\n\t\tcommand: RpcCommand,\n\t\tresultPromise: Promise<CommandResult>,\n\t): Promise<RpcResponse | undefined> => {\n\t\tconst result = await resultPromise;\n\t\tif (result !== NOT_HANDLED) return result;\n\t\tconst unknownCommand = command as unknown as { type: string };\n\t\treturn error(command.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t};\n\t// Route synchronously so commands begin handling in input order. Awaiting a chain of\n\t// non-matching async handlers would let later input commands overtake earlier ones.\n\tconst handleCommand = async (command: RpcCommand): Promise<RpcResponse | undefined> => {\n\t\tswitch (command.type) {\n\t\t\tcase \"prompt\":\n\t\t\tcase \"get_structured_response\":\n\t\t\tcase \"steer\":\n\t\t\tcase \"follow_up\":\n\t\t\tcase \"abort\":\n\t\t\t\treturn requireHandledCommandResult(command, handlePromptCommands(command));\n\t\t\tcase \"new_session\":\n\t\t\t\treturn requireHandledCommandResult(command, handleNewSessionCommand(command));\n\t\t\tcase \"list_sessions\":\n\t\t\t\treturn requireHandledCommandResult(command, handleListSessionsCommand(command));\n\t\t\tcase \"get_state\":\n\t\t\tcase \"set_model\":\n\t\t\tcase \"cycle_model\":\n\t\t\tcase \"get_available_models\":\n\t\t\tcase \"set_thinking_level\":\n\t\t\tcase \"cycle_thinking_level\":\n\t\t\tcase \"set_steering_mode\":\n\t\t\tcase \"set_follow_up_mode\":\n\t\t\tcase \"compact\":\n\t\t\tcase \"set_auto_compaction\":\n\t\t\tcase \"set_auto_retry\":\n\t\t\tcase \"abort_retry\":\n\t\t\t\treturn requireHandledCommandResult(command, handleConfigurationCommands(command));\n\t\t\tcase \"bash\":\n\t\t\tcase \"abort_bash\":\n\t\t\tcase \"set_remote_sandbox\":\n\t\t\tcase \"clear_remote_sandbox\":\n\t\t\tcase \"upload_file\":\n\t\t\tcase \"download_file\":\n\t\t\t\treturn requireHandledCommandResult(command, handleBackendCommands(command));\n\t\t\tcase \"get_session_stats\":\n\t\t\tcase \"export_html\":\n\t\t\tcase \"switch_session\":\n\t\t\tcase \"fork\":\n\t\t\tcase \"clone\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionNavigationCommands(command));\n\t\t\tcase \"get_fork_messages\":\n\t\t\tcase \"get_entries\":\n\t\t\tcase \"get_tree\":\n\t\t\tcase \"get_last_assistant_text\":\n\t\t\tcase \"set_session_name\":\n\t\t\tcase \"get_messages\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSessionQueryCommands(command));\n\t\t\tcase \"get_commands\":\n\t\t\tcase \"register_skill\":\n\t\t\tcase \"unregister_skill\":\n\t\t\t\treturn requireHandledCommandResult(command, handleSkillCommands(command));\n\t\t\tcase \"register_rule\":\n\t\t\tcase \"unregister_rule\":\n\t\t\t\treturn requireHandledCommandResult(command, handleRuleCommands(command));\n\t\t\tcase \"register_tool\":\n\t\t\tcase \"unregister_tool\":\n\t\t\tcase \"get_available_tools\":\n\t\t\tcase \"rpc_tool_result\":\n\t\t\tcase \"rpc_tool_error\":\n\t\t\t\treturn requireHandledCommandResult(command, handleToolRegistrationCommands(command));\n\t\t\tdefault: {\n\t\t\t\tconst unknownCommand = command as unknown as { id?: string; type: string };\n\t\t\t\treturn error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t * Called after handling each command when waiting for the next command.\n\t */\n\tlet detachInput = () => {};\n\n\tasync function shutdown(exitCode = 0, signal?: NodeJS.Signals): Promise<never> {\n\t\tif (shuttingDown) {\n\t\t\tprocess.exit(exitCode);\n\t\t}\n\t\tshuttingDown = true;\n\t\tfor (const cleanup of signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tunsubscribe?.();\n\t\tunsubscribeBackpressure?.();\n\t\tfor (const pending of pendingRpcToolRequests.values()) {\n\t\t\tpending.abort();\n\t\t}\n\t\tpendingRpcToolRequests.clear();\n\t\tawait runtimeHost.dispose();\n\t\tdetachInput();\n\t\tprocess.stdin.pause();\n\t\tif (signal !== \"SIGTERM\") {\n\t\t\tawait flushRawStdout();\n\t\t}\n\t\tprocess.exit(exitCode);\n\t}\n\n\tasync function checkShutdownRequested(): Promise<void> {\n\t\tif (!shutdownRequested || activeInputCommands > 0 || pendingPromptCommands.size > 0) return;\n\t\tawait shutdown();\n\t}\n\n\tconst parseInputLine = (line: string): RpcInputParseResult => {\n\t\ttry {\n\t\t\treturn { ok: true, value: JSON.parse(line) };\n\t\t} catch (parseError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"parse\",\n\t\t\t\t\t`Failed to parse command: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn { ok: false };\n\t\t}\n\t};\n\n\tconst handlePendingRpcResponse = (parsed: unknown): boolean => {\n\t\tif (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) return false;\n\t\tswitch (parsed.type) {\n\t\t\tcase \"extension_ui_response\": {\n\t\t\t\tconst response = parsed as RpcExtensionUIResponse;\n\t\t\t\tconst pending = pendingExtensionRequests.get(response.id);\n\t\t\t\tif (pending) {\n\t\t\t\t\tpendingExtensionRequests.delete(response.id);\n\t\t\t\t\tpending.resolve(response);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_result\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_result\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.resolve(response.result);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcase \"rpc_tool_error\": {\n\t\t\t\tconst response = parsed as Extract<RpcCommand, { type: \"rpc_tool_error\" }>;\n\t\t\t\tconst pending = pendingRpcToolRequests.get(response.requestId);\n\t\t\t\tif (pending) pending.reject(new Error(response.error));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst handleParsedCommand = async (command: RpcCommand): Promise<void> => {\n\t\ttry {\n\t\t\tconst response = await handleCommand(command);\n\t\t\tif (response) {\n\t\t\t\toutput(response);\n\t\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\t}\n\t\t\tawait checkShutdownRequested();\n\t\t} catch (commandError: unknown) {\n\t\t\toutput(\n\t\t\t\terror(\n\t\t\t\t\tcommand.id,\n\t\t\t\t\tcommand.type,\n\t\t\t\t\tcommandError instanceof Error ? commandError.message : String(commandError),\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t}\n\t};\n\n\tconst handleInputLine = async (line: string) => {\n\t\tconst parseResult = parseInputLine(line);\n\t\tif (!parseResult.ok) {\n\t\t\tawait waitForRawStdoutBackpressure();\n\t\t\treturn;\n\t\t}\n\t\tif (handlePendingRpcResponse(parseResult.value)) return;\n\t\tawait handleParsedCommand(parseResult.value as RpcCommand);\n\t};\n\n\tconst onInputEnd = () => {\n\t\tshutdownRequested = true;\n\t\tscheduleShutdownCheck();\n\t};\n\tprocess.stdin.on(\"end\", onInputEnd);\n\n\tdetachInput = (() => {\n\t\tconst detachJsonl = attachJsonlLineReader(process.stdin, (line) => {\n\t\t\tactiveInputCommands++;\n\t\t\tvoid handleInputLine(line).finally(() => {\n\t\t\t\tactiveInputCommands--;\n\t\t\t\tscheduleShutdownCheck();\n\t\t\t});\n\t\t});\n\t\treturn () => {\n\t\t\tdetachJsonl();\n\t\t\tprocess.stdin.off(\"end\", onInputEnd);\n\t\t};\n\t})();\n\n\t// Keep process alive forever\n\treturn new Promise(() => {});\n}\n\nfunction parseSessionListLimit(limit: number | undefined): number | string {\n\tif (limit === undefined) {\n\t\treturn DEFAULT_RPC_SESSION_LIST_LIMIT;\n\t}\n\tif (!Number.isInteger(limit) || limit < 1) {\n\t\treturn \"Session list limit must be a positive integer\";\n\t}\n\treturn Math.min(limit, MAX_RPC_SESSION_LIST_LIMIT);\n}\n\nfunction parseSessionListCursor(cursor: string | undefined): number | string {\n\tif (cursor === undefined) {\n\t\treturn 0;\n\t}\n\tif (!/^\\d+$/.test(cursor)) {\n\t\treturn \"Session list cursor is invalid\";\n\t}\n\treturn Number(cursor);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-types.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC protocol types for headless operation.\n *\n * Commands are sent as JSON lines on stdin.\n * Responses and events are emitted as JSON lines on stdout.\n */\n\nimport type { AgentMessage, AgentToolResult, QueueMode, ThinkingLevel } from \"@greppleai/grip-agent-core\";\nimport type { ImageContent, Model } from \"@greppleai/grip-ai\";\nimport type { TSchema } from \"typebox\";\nimport type {\n\tForkableUserMessage,\n\tModelCycleResult,\n\tSessionStats,\n\tStructuredResponse,\n} from \"../../core/agent-session.ts\";\nimport type { BashResult } from \"../../core/bash-executor.ts\";\nimport type { CompactionResult } from \"../../core/compaction/compaction.ts\";\nimport type { ExtensionInstructionRegistration, ToolDefinition, ToolInfo } from \"../../core/extensions/types.ts\";\nimport type { SessionEntry, SessionInfo, SessionTreeNode } from \"../../core/session/types.ts\";\nimport type { SlashCommandInfo } from \"../../core/slash-commands.ts\";\nimport type { ToolBackendInfo } from \"../../core/tools/operations.ts\";\n\n// ============================================================================\n// RPC Commands (stdin)\n// ============================================================================\n\nexport interface RpcToolDefinition\n\textends Pick<\n\t\tToolDefinition,\n\t\t\"name\" | \"label\" | \"description\" | \"promptSnippet\" | \"promptGuidelines\" | \"parameters\" | \"executionMode\"\n\t> {\n\tlazy?: boolean;\n}\n\nexport interface RpcInstructionDefinition\n\textends Pick<\n\t\tExtensionInstructionRegistration,\n\t\t\"name\" | \"description\" | \"filePath\" | \"content\" | \"baseDir\" | \"disableModelInvocation\" | \"tools\"\n\t> {}\n\nexport type RpcCommandType =\n\t| \"prompt\"\n\t| \"get_structured_response\"\n\t| \"steer\"\n\t| \"follow_up\"\n\t| \"abort\"\n\t| \"new_session\"\n\t| \"list_sessions\"\n\t| \"get_state\"\n\t| \"set_model\"\n\t| \"cycle_model\"\n\t| \"get_available_models\"\n\t| \"set_thinking_level\"\n\t| \"cycle_thinking_level\"\n\t| \"set_steering_mode\"\n\t| \"set_follow_up_mode\"\n\t| \"compact\"\n\t| \"set_auto_compaction\"\n\t| \"set_auto_retry\"\n\t| \"abort_retry\"\n\t| \"bash\"\n\t| \"abort_bash\"\n\t| \"set_remote_sandbox\"\n\t| \"clear_remote_sandbox\"\n\t| \"upload_file\"\n\t| \"download_file\"\n\t| \"get_session_stats\"\n\t| \"export_html\"\n\t| \"switch_session\"\n\t| \"fork\"\n\t| \"clone\"\n\t| \"get_fork_messages\"\n\t| \"get_entries\"\n\t| \"get_tree\"\n\t| \"get_last_assistant_text\"\n\t| \"set_session_name\"\n\t| \"get_messages\"\n\t| \"get_commands\"\n\t| \"register_skill\"\n\t| \"unregister_skill\"\n\t| \"register_rule\"\n\t| \"unregister_rule\"\n\t| \"register_tool\"\n\t| \"unregister_tool\"\n\t| \"get_available_tools\"\n\t| \"rpc_tool_result\"\n\t| \"rpc_tool_error\";\n\nexport type RpcCommand =\n\t// Prompting\n\t| { id?: string; type: \"prompt\"; message: string; images?: ImageContent[]; streamingBehavior?: \"steer\" | \"followUp\" }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"get_structured_response\";\n\t\t\tschema: TSchema;\n\t\t\tname?: string;\n\t\t\tdescription?: string;\n\t\t\tmaxCorrections?: number;\n\t\t\tscope?: \"latest\" | \"conversation\";\n\t }\n\t| { id?: string; type: \"steer\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"follow_up\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"abort\" }\n\t| { id?: string; type: \"new_session\"; sessionId?: string; parentSession?: string }\n\t| { id?: string; type: \"list_sessions\"; cursor?: string; limit?: number }\n\n\t// State\n\t| { id?: string; type: \"get_state\" }\n\n\t// Model\n\t| { id?: string; type: \"set_model\"; provider: string; modelId: string }\n\t| { id?: string; type: \"cycle_model\" }\n\t| { id?: string; type: \"get_available_models\" }\n\n\t// Thinking\n\t| { id?: string; type: \"set_thinking_level\"; level: ThinkingLevel }\n\t| { id?: string; type: \"cycle_thinking_level\" }\n\n\t// Queue modes\n\t| { id?: string; type: \"set_steering_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\t| { id?: string; type: \"set_follow_up_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\n\t// Compaction\n\t| { id?: string; type: \"compact\"; customInstructions?: string }\n\t| { id?: string; type: \"set_auto_compaction\"; enabled: boolean }\n\n\t// Retry\n\t| { id?: string; type: \"set_auto_retry\"; enabled: boolean }\n\t| { id?: string; type: \"abort_retry\" }\n\n\t// Bash\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"bash\";\n\t\t\tcommand: string;\n\t\t\trecord?: boolean;\n\t\t\ttruncate?: boolean;\n\t\t\texcludeFromContext?: boolean;\n\t }\n\t| { id?: string; type: \"abort_bash\" }\n\n\t// Remote sandbox\n\t| { id?: string; type: \"set_remote_sandbox\"; backend: \"daemon\"; url: string; token?: string }\n\t| { id?: string; type: \"clear_remote_sandbox\" }\n\t| { id?: string; type: \"upload_file\"; sourcePath: string; destinationPath: string }\n\t| { id?: string; type: \"download_file\"; sourcePath: string; destinationPath: string }\n\n\t// Session\n\t| { id?: string; type: \"get_session_stats\" }\n\t| { id?: string; type: \"export_html\"; outputPath?: string }\n\t| { id?: string; type: \"switch_session\"; sessionPath: string }\n\t| { id?: string; type: \"fork\"; entryId: string }\n\t| { id?: string; type: \"clone\" }\n\t| { id?: string; type: \"get_fork_messages\" }\n\t| { id?: string; type: \"get_entries\"; since?: string }\n\t| { id?: string; type: \"get_tree\" }\n\t| { id?: string; type: \"get_last_assistant_text\" }\n\t| { id?: string; type: \"set_session_name\"; name: string }\n\n\t// Messages\n\t| { id?: string; type: \"get_messages\" }\n\n\t// Commands (available for invocation via prompt)\n\t| { id?: string; type: \"get_commands\" }\n\n\t// Session-scoped RPC instructions\n\t| { id?: string; type: \"register_skill\"; skill: RpcInstructionDefinition }\n\t| { id?: string; type: \"unregister_skill\"; name: string }\n\t| { id?: string; type: \"register_rule\"; rule: RpcInstructionDefinition }\n\t| { id?: string; type: \"unregister_rule\"; name: string }\n\n\t// Session-scoped RPC tools\n\t| { id?: string; type: \"register_tool\"; tool: RpcToolDefinition }\n\t| { id?: string; type: \"unregister_tool\"; name: string }\n\t| { id?: string; type: \"get_available_tools\" }\n\t| { id?: string; type: \"rpc_tool_result\"; requestId: string; result: AgentToolResult<unknown> }\n\t| { id?: string; type: \"rpc_tool_error\"; requestId: string; error: string };\n\n// ============================================================================\n// RPC Session List\n// ============================================================================\n\nexport type RpcListSessionsOptions = {\n\t/** Cursor returned by the previous list_sessions response. */\n\tcursor?: string;\n\t/** Number of sessions to return. Defaults to 100 and is capped by the RPC server. */\n\tlimit?: number;\n};\n\nexport type RpcListSessionsResponse = {\n\tsessions: SessionInfo[];\n\tnextCursor?: string;\n};\n\nexport type RpcClientListSessionsResponse = {\n\tsessions: SessionInfo[];\n\tnextCursor?: string;\n};\n\n// ============================================================================\n// RPC Slash Command (for get_commands response)\n// ============================================================================\n\n/** A command available for invocation via prompt */\nexport type RpcSlashCommand = SlashCommandInfo;\n\n// ============================================================================\n// RPC State\n// ============================================================================\n\nexport interface RpcSessionState {\n\tmodel?: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\tisStreaming: boolean;\n\tisIdle: boolean;\n\tisCompacting: boolean;\n\tsteeringMode: QueueMode;\n\tfollowUpMode: QueueMode;\n\tsessionFile?: string;\n\tsessionId: string;\n\tsessionName?: string;\n\tautoCompactionEnabled: boolean;\n\tmessageCount: number;\n\tpendingMessageCount: number;\n\ttoolBackend: ToolBackendInfo;\n}\n\n// ============================================================================\n// RPC Responses (stdout)\n// ============================================================================\n\ninterface RpcNewSessionResponseData {\n\tcancelled: boolean;\n}\n\ntype RpcCycleModelResponseData = ModelCycleResult;\n\ninterface RpcAvailableModelsResponseData {\n\tmodels: Model<any>[];\n}\n\ninterface RpcCycleThinkingLevelResponseData {\n\tlevel: ThinkingLevel;\n}\n\ninterface RpcUploadFileResponseData {\n\tbytes: number;\n}\n\ninterface RpcDownloadFileResponseData {\n\tbytes: number;\n}\n\ninterface RpcExportHtmlResponseData {\n\tpath: string;\n}\n\ninterface RpcSwitchSessionResponseData {\n\tcancelled: boolean;\n}\n\ninterface RpcForkResponseData {\n\ttext: string;\n\tcancelled: boolean;\n}\n\ninterface RpcCloneResponseData {\n\tcancelled: boolean;\n}\n\ntype RpcForkMessage = ForkableUserMessage;\n\nexport interface RpcForkMessagesResponseData {\n\tmessages: RpcForkMessage[];\n}\n\nexport interface RpcEntriesResponseData {\n\tentries: SessionEntry[];\n\tleafId: string | null;\n}\n\nexport interface RpcTreeResponseData {\n\ttree: SessionTreeNode[];\n\tleafId: string | null;\n}\n\ninterface RpcLastAssistantTextResponseData {\n\ttext: string | null;\n}\n\ninterface RpcMessagesResponseData {\n\tmessages: AgentMessage[];\n}\n\ninterface RpcCommandsResponseData {\n\tcommands: RpcSlashCommand[];\n}\n\ninterface RpcUnregisterSkillResponseData {\n\tunregistered: boolean;\n}\n\ninterface RpcUnregisterRuleResponseData {\n\tunregistered: boolean;\n}\n\ninterface RpcUnregisterToolResponseData {\n\tunregistered: boolean;\n}\n\ninterface RpcAvailableToolsResponseData {\n\ttools: ToolInfo[];\n}\n\n// Success responses with data\nexport type RpcResponse =\n\t// Prompting (async - events follow)\n\t| { id?: string; type: \"response\"; command: \"prompt\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_structured_response\";\n\t\t\tsuccess: true;\n\t\t\tdata: StructuredResponse<unknown>;\n\t }\n\t| { id?: string; type: \"response\"; command: \"steer\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"follow_up\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"abort\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"new_session\"; success: true; data: RpcNewSessionResponseData }\n\t| { id?: string; type: \"response\"; command: \"list_sessions\"; success: true; data: RpcListSessionsResponse }\n\n\t// State\n\t| { id?: string; type: \"response\"; command: \"get_state\"; success: true; data: RpcSessionState }\n\n\t// Model\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"set_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: Model<any>;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcCycleModelResponseData | null;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_available_models\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcAvailableModelsResponseData;\n\t }\n\n\t// Thinking\n\t| { id?: string; type: \"response\"; command: \"set_thinking_level\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_thinking_level\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcCycleThinkingLevelResponseData | null;\n\t }\n\n\t// Queue modes\n\t| { id?: string; type: \"response\"; command: \"set_steering_mode\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"set_follow_up_mode\"; success: true }\n\n\t// Compaction\n\t| { id?: string; type: \"response\"; command: \"compact\"; success: true; data: CompactionResult }\n\t| { id?: string; type: \"response\"; command: \"set_auto_compaction\"; success: true }\n\n\t// Retry\n\t| { id?: string; type: \"response\"; command: \"set_auto_retry\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"abort_retry\"; success: true }\n\n\t// Bash\n\t| { id?: string; type: \"response\"; command: \"bash\"; success: true; data: BashResult }\n\t| { id?: string; type: \"response\"; command: \"abort_bash\"; success: true }\n\n\t// Remote sandbox\n\t| { id?: string; type: \"response\"; command: \"set_remote_sandbox\"; success: true; data: ToolBackendInfo }\n\t| { id?: string; type: \"response\"; command: \"clear_remote_sandbox\"; success: true; data: ToolBackendInfo }\n\t| { id?: string; type: \"response\"; command: \"upload_file\"; success: true; data: RpcUploadFileResponseData }\n\t| { id?: string; type: \"response\"; command: \"download_file\"; success: true; data: RpcDownloadFileResponseData }\n\n\t// Session\n\t| { id?: string; type: \"response\"; command: \"get_session_stats\"; success: true; data: SessionStats }\n\t| { id?: string; type: \"response\"; command: \"export_html\"; success: true; data: RpcExportHtmlResponseData }\n\t| { id?: string; type: \"response\"; command: \"switch_session\"; success: true; data: RpcSwitchSessionResponseData }\n\t| { id?: string; type: \"response\"; command: \"fork\"; success: true; data: RpcForkResponseData }\n\t| { id?: string; type: \"response\"; command: \"clone\"; success: true; data: RpcCloneResponseData }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_fork_messages\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcForkMessagesResponseData;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_entries\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcEntriesResponseData;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_tree\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcTreeResponseData;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_last_assistant_text\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcLastAssistantTextResponseData;\n\t }\n\t| { id?: string; type: \"response\"; command: \"set_session_name\"; success: true }\n\n\t// Messages\n\t| { id?: string; type: \"response\"; command: \"get_messages\"; success: true; data: RpcMessagesResponseData }\n\n\t// Commands\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_commands\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcCommandsResponseData;\n\t }\n\n\t// Session-scoped RPC instructions\n\t| { id?: string; type: \"response\"; command: \"register_skill\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"unregister_skill\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcUnregisterSkillResponseData;\n\t }\n\t| { id?: string; type: \"response\"; command: \"register_rule\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"unregister_rule\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcUnregisterRuleResponseData;\n\t }\n\n\t// Session-scoped RPC tools\n\t| { id?: string; type: \"response\"; command: \"register_tool\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"unregister_tool\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcUnregisterToolResponseData;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_available_tools\";\n\t\t\tsuccess: true;\n\t\t\tdata: RpcAvailableToolsResponseData;\n\t }\n\t| { id?: string; type: \"response\"; command: \"rpc_tool_result\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"rpc_tool_error\"; success: true }\n\n\t// Error response (any command can fail)\n\t| { id?: string; type: \"response\"; command: string; success: false; error: string };\n\n// ============================================================================\n// RPC Tool Events (stdout)\n// ============================================================================\n\nexport interface RpcToolCallRequest {\n\ttype: \"rpc_tool_call\";\n\trequestId: string;\n\ttoolName: string;\n\ttoolCallId: string;\n\targs: unknown;\n}\n\n// ============================================================================\n// Extension UI Events (stdout)\n// ============================================================================\n\n/** Emitted when an extension needs user input */\nexport type RpcExtensionUIRequest =\n\t| { type: \"extension_ui_request\"; id: string; method: \"select\"; title: string; options: string[]; timeout?: number }\n\t| { type: \"extension_ui_request\"; id: string; method: \"confirm\"; title: string; message: string; timeout?: number }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"input\";\n\t\t\ttitle: string;\n\t\t\tplaceholder?: string;\n\t\t\ttimeout?: number;\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"editor\"; title: string; prefill?: string }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"notify\";\n\t\t\tmessage: string;\n\t\t\tnotifyType?: \"info\" | \"warning\" | \"error\";\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setStatus\";\n\t\t\tstatusKey: string;\n\t\t\tstatusText: string | undefined;\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setWidget\";\n\t\t\twidgetKey: string;\n\t\t\twidgetLines: string[] | undefined;\n\t\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\";\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"setTitle\"; title: string }\n\t| { type: \"extension_ui_request\"; id: string; method: \"set_editor_text\"; text: string };\n\n// ============================================================================\n// Extension UI Commands (stdin)\n// ============================================================================\n\n/** Response to an extension UI request */\nexport type RpcExtensionUIResponse =\n\t| { type: \"extension_ui_response\"; id: string; value: string }\n\t| { type: \"extension_ui_response\"; id: string; confirmed: boolean }\n\t| { type: \"extension_ui_response\"; id: string; cancelled: true };\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-types.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"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"}
|