@bastani/atomic 0.9.10 → 0.9.11-alpha.1
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 +14 -0
- package/dist/builtin/cursor/CHANGELOG.md +6 -0
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/CHANGELOG.md +6 -0
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +17 -0
- package/dist/builtin/workflows/README.md +8 -3
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/durable/backend.ts +2 -2
- package/dist/builtin/workflows/src/durable/dbos-embedded-postgres-root.ts +173 -0
- package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +36 -12
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +9 -3
- package/dist/builtin/workflows/src/durable/factory.ts +35 -6
- package/dist/builtin/workflows/src/durable/local-command.ts +11 -2
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +14 -2
- package/dist/builtin/workflows/src/extension/public-types.ts +3 -4
- package/dist/builtin/workflows/src/extension/render-call.ts +4 -0
- package/dist/builtin/workflows/src/extension/render-result.ts +31 -1
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +5 -2
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +3 -2
- package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +1 -0
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +88 -2
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +13 -0
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +2 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +7 -0
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +13 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +12 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -0
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage-backends.d.ts +4 -0
- package/dist/core/auth-storage-backends.d.ts.map +1 -1
- package/dist/core/auth-storage-backends.js +48 -3
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +27 -11
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/codex-errors.d.ts +3 -0
- package/dist/core/codex-errors.d.ts.map +1 -0
- package/dist/core/codex-errors.js +12 -0
- package/dist/core/codex-errors.js.map +1 -0
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +10 -5
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +12 -2
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -5
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +14 -24
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +15 -0
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -0
- package/dist/modes/interactive-engine/remote-model-catalog.js +67 -0
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -0
- package/dist/modes/rpc/rpc-client-api.d.ts +8 -1
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +9 -0
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +30 -0
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +67 -7
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/docs/docs.json +9 -1
- package/docs/models/artificial-analysis-index.md +82 -0
- package/docs/models/model-selection.md +63 -0
- package/docs/models/pareto-efficiency.md +64 -0
- package/docs/providers.md +5 -1
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +27 -0
- package/docs/workflows.md +20 -7
- package/npm-shrinkwrap.json +24 -24
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InteractiveModeBase } from "./interactive-mode-base.js";
|
|
2
2
|
import { CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from "./interactive-mode-deps.js";
|
|
3
3
|
import { BUILTIN_SLASH_COMMAND_NAMES } from "./interactive-mode-helpers.js";
|
|
4
|
-
import { getInteractiveEngineRemoteCommands } from "../interactive-engine/extension-ui-bridge.js";
|
|
4
|
+
import { getInteractiveEngineRemoteCommandCompletions, getInteractiveEngineRemoteCommands } from "../interactive-engine/extension-ui-bridge.js";
|
|
5
5
|
const AT_MENTION_PATH_DELIMITERS = new Set([" ", "\t", '"', "'", "="]);
|
|
6
6
|
function findLastAtMentionDelimiter(text) {
|
|
7
7
|
for (let index = text.length - 1; index >= 0; index -= 1) {
|
|
@@ -154,7 +154,17 @@ InteractiveModeBase.prototype.buildRemoteSlashCommands = function (localCommands
|
|
|
154
154
|
if (takenNames.has(command.name))
|
|
155
155
|
continue;
|
|
156
156
|
takenNames.add(command.name);
|
|
157
|
-
const
|
|
157
|
+
const bundledCompletions = bundledArgumentCompletions.get(command.name);
|
|
158
|
+
const getArgumentCompletions = command.hasArgumentCompletions
|
|
159
|
+
? async (prefix) => {
|
|
160
|
+
try {
|
|
161
|
+
return await getInteractiveEngineRemoteCommandCompletions(this.runtimeHost, command.name, prefix);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return (await bundledCompletions?.(prefix)) ?? null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
: bundledCompletions;
|
|
158
168
|
remoteCommands.push({
|
|
159
169
|
name: command.name,
|
|
160
170
|
description: this.prefixAutocompleteDescription(command.description, command.sourceInfo),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\nimport { getInteractiveEngineRemoteCommands } from \"../interactive-engine/extension-ui-bridge.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.buildRemoteSlashCommands = function(this: InteractiveModeBase, localCommands: SlashCommand[]): SlashCommand[] {\n const remote = getInteractiveEngineRemoteCommands(this.runtimeHost);\n if (remote.length === 0) return [];\n\n // Names already present locally (built-ins, prompt templates, skills) win, so\n // the child catalog only contributes commands the host is genuinely missing.\n const takenNames = new Set<string>(localCommands.map((command) => command.name));\n const skillCommandsEnabled = this.settingsManager.getEnableSkillCommands();\n // Reuse bundled argument-completion providers (e.g. /workflow subcommands and\n // input schemas) for their matching child commands; RPC cannot serialize the\n // completion callbacks themselves.\n const bundledArgumentCompletions = new Map(\n BUNDLED_EXTENSION_SLASH_COMMANDS.map((command) => [command.name, command.getArgumentCompletions] as const),\n );\n\n const remoteCommands: SlashCommand[] = [];\n for (const command of remote) {\n // Built-in interactive command names stay reserved regardless of source.\n if (BUILTIN_SLASH_COMMAND_NAMES.has(command.name)) continue;\n // Honor the skill-commands setting for child-provided skills too.\n if (command.source === \"skill\" && !skillCommandsEnabled) continue;\n if (takenNames.has(command.name)) continue;\n takenNames.add(command.name);\n const getArgumentCompletions = bundledArgumentCompletions.get(command.name);\n remoteCommands.push({\n name: command.name,\n description: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n ...(getArgumentCompletions ? { getArgumentCompletions } : {}),\n });\n }\n return remoteCommands;\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes. While extension loading is deferred,\n // expose lightweight bundled command metadata without importing heavy\n // implementations; the submit path loads the implementation on demand.\n const registeredExtensionCommands = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n const registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n const extensionCommands: SlashCommand[] = [\n ...(this.deferredStartupPending\n ? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n (cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n ).map((cmd) => ({\n name: cmd.name,\n description: cmd.description,\n getArgumentCompletions: cmd.getArgumentCompletions,\n }))\n : []),\n ...registeredExtensionCommands.map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n })),\n ];\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n // In the isolated interactive host (isolateInteractiveHost) the host session\n // loads no extensions, so extension slash commands (/workflow, /workflows,\n // /run, /mcp, …) exist only in the engine child. Merge the child's command\n // catalog — fetched asynchronously after engine bind — so autocomplete lists\n // them. Built-in names stay reserved and anything already present locally\n // (built-ins, prompt templates, skills the host also loaded) is deduped, so\n // only genuinely engine-only commands are added. Execution keeps routing\n // through the child via the patched session.prompt(); nothing is handled\n // twice on the host.\n const remoteCommandList = this.buildRemoteSlashCommands([\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ]);\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ...remoteCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\nimport { getInteractiveEngineRemoteCommandCompletions, getInteractiveEngineRemoteCommands } from \"../interactive-engine/extension-ui-bridge.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.buildRemoteSlashCommands = function(this: InteractiveModeBase, localCommands: SlashCommand[]): SlashCommand[] {\n const remote = getInteractiveEngineRemoteCommands(this.runtimeHost);\n if (remote.length === 0) return [];\n\n // Names already present locally (built-ins, prompt templates, skills) win, so\n // the child catalog only contributes commands the host is genuinely missing.\n const takenNames = new Set<string>(localCommands.map((command) => command.name));\n const skillCommandsEnabled = this.settingsManager.getEnableSkillCommands();\n // Reuse bundled argument-completion providers (e.g. /workflow subcommands and\n // input schemas) for their matching child commands; RPC cannot serialize the\n // completion callbacks themselves.\n const bundledArgumentCompletions = new Map(\n BUNDLED_EXTENSION_SLASH_COMMANDS.map((command) => [command.name, command.getArgumentCompletions] as const),\n );\n\n const remoteCommands: SlashCommand[] = [];\n for (const command of remote) {\n // Built-in interactive command names stay reserved regardless of source.\n if (BUILTIN_SLASH_COMMAND_NAMES.has(command.name)) continue;\n // Honor the skill-commands setting for child-provided skills too.\n if (command.source === \"skill\" && !skillCommandsEnabled) continue;\n if (takenNames.has(command.name)) continue;\n takenNames.add(command.name);\n const bundledCompletions = bundledArgumentCompletions.get(command.name);\n const getArgumentCompletions = command.hasArgumentCompletions\n ? async (prefix: string): Promise<AutocompleteItem[] | null> => {\n try {\n return await getInteractiveEngineRemoteCommandCompletions(this.runtimeHost, command.name, prefix);\n } catch {\n return (await bundledCompletions?.(prefix)) ?? null;\n }\n }\n : bundledCompletions;\n remoteCommands.push({\n name: command.name,\n description: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n ...(getArgumentCompletions ? { getArgumentCompletions } : {}),\n });\n }\n return remoteCommands;\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes. While extension loading is deferred,\n // expose lightweight bundled command metadata without importing heavy\n // implementations; the submit path loads the implementation on demand.\n const registeredExtensionCommands = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n const registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n const extensionCommands: SlashCommand[] = [\n ...(this.deferredStartupPending\n ? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n (cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n ).map((cmd) => ({\n name: cmd.name,\n description: cmd.description,\n getArgumentCompletions: cmd.getArgumentCompletions,\n }))\n : []),\n ...registeredExtensionCommands.map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n })),\n ];\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n // In the isolated interactive host (isolateInteractiveHost) the host session\n // loads no extensions, so extension slash commands (/workflow, /workflows,\n // /run, /mcp, …) exist only in the engine child. Merge the child's command\n // catalog — fetched asynchronously after engine bind — so autocomplete lists\n // them. Built-in names stay reserved and anything already present locally\n // (built-ins, prompt templates, skills the host also loaded) is deduped, so\n // only genuinely engine-only commands are added. Execution keeps routing\n // through the child via the patched session.prompt(); nothing is handled\n // twice on the host.\n const remoteCommandList = this.buildRemoteSlashCommands([\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ]);\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ...remoteCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
@@ -3,7 +3,7 @@ import type { KeybindingsManager } from "../../core/keybindings.ts";
|
|
|
3
3
|
import type { ExtensionUIContext } from "../../core/extensions/index.ts";
|
|
4
4
|
import type { ActivityWatchdogDiagnostic } from "./activity-watchdog.ts";
|
|
5
5
|
import type { EngineKeybindingState, InteractiveEngineMessage } from "./protocol.ts";
|
|
6
|
-
import type { RpcSlashCommand } from "../rpc/rpc-types.ts";
|
|
6
|
+
import type { RpcAutocompleteItem, RpcSlashCommand } from "../rpc/rpc-types.ts";
|
|
7
7
|
interface EngineMessageSource {
|
|
8
8
|
onEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;
|
|
9
9
|
onKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;
|
|
@@ -17,6 +17,8 @@ export declare function interruptBlockedInteractiveEngine(runtime: AgentSessionR
|
|
|
17
17
|
* empty list for non-isolated runtimes so callers can merge unconditionally.
|
|
18
18
|
*/
|
|
19
19
|
export declare function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[];
|
|
20
|
+
/** Evaluate an engine-child command's live argument completions. */
|
|
21
|
+
export declare function getInteractiveEngineRemoteCommandCompletions(runtime: AgentSessionRuntime, commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null>;
|
|
20
22
|
/** Subscribe to engine-child command catalog changes. No-op when not isolated. */
|
|
21
23
|
export declare function onInteractiveEngineRemoteCommandsChanged(runtime: AgentSessionRuntime, listener: (commands: readonly RpcSlashCommand[]) => void): () => void;
|
|
22
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAA2B,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAK9G,OAAO,KAAK,EAAiD,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAA2B,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAK9G,OAAO,KAAK,EAAE,mBAAmB,EAAiD,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+C/H,UAAU,mBAAmB;IAC5B,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnF,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACjF;AAED,wBAAgB,qCAAqC,CACpD,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAC9C,MAAM,IAAI,CASZ;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,IAAI,EAC9D,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAChF,WAAW,CAAC,EAAE,kBAAkB,GAC9B,MAAM,IAAI,CA2CZ;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAEvF;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,eAAe,EAAE,CAE3G;AAED,oEAAoE;AACpE,wBAAgB,4CAA4C,CAC3D,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAIvC;AAED,kFAAkF;AAClF,wBAAgB,wCAAwC,CACvD,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,GACtD,MAAM,IAAI,CAEZ"}
|
|
@@ -119,6 +119,12 @@ export function interruptBlockedInteractiveEngine(runtime) {
|
|
|
119
119
|
export function getInteractiveEngineRemoteCommands(runtime) {
|
|
120
120
|
return runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];
|
|
121
121
|
}
|
|
122
|
+
/** Evaluate an engine-child command's live argument completions. */
|
|
123
|
+
export function getInteractiveEngineRemoteCommandCompletions(runtime, commandName, argumentPrefix) {
|
|
124
|
+
return runtime instanceof IsolatedInteractiveRuntime
|
|
125
|
+
? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)
|
|
126
|
+
: Promise.resolve(null);
|
|
127
|
+
}
|
|
122
128
|
/** Subscribe to engine-child command catalog changes. No-op when not isolated. */
|
|
123
129
|
export function onInteractiveEngineRemoteCommandsChanged(runtime, listener) {
|
|
124
130
|
return runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => { };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { matchesKey, type KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.ts\";\nimport { RemoteComponentController } from \"./remote-component.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\nimport type { RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\n\nasync function handleRequest(\n\tui: ExtensionUIContext,\n\trequest: RpcExtensionUIRequest,\n): Promise<RpcExtensionUIResponse | undefined> {\n\tswitch (request.method) {\n\t\tcase \"select\": {\n\t\t\tconst value = await ui.select(request.title, request.options, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"confirm\": {\n\t\t\tconst confirmed = await ui.confirm(request.title, request.message, { timeout: request.timeout });\n\t\t\treturn { type: \"extension_ui_response\", id: request.id, confirmed };\n\t\t}\n\t\tcase \"input\": {\n\t\t\tconst value = await ui.input(request.title, request.placeholder, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"editor\": {\n\t\t\tconst value = await ui.editor(request.title, request.prefill);\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"notify\":\n\t\t\tui.notify(request.message, request.notifyType);\n\t\t\treturn undefined;\n\t\tcase \"setStatus\":\n\t\t\tui.setStatus(request.statusKey, request.statusText);\n\t\t\treturn undefined;\n\t\tcase \"setWidget\":\n\t\t\tui.setWidget(request.widgetKey, request.widgetLines, { placement: request.widgetPlacement });\n\t\t\treturn undefined;\n\t\tcase \"setTitle\":\n\t\t\tui.setTitle(request.title);\n\t\t\treturn undefined;\n\t\tcase \"set_editor_text\":\n\t\t\tui.setEditorText(request.text);\n\t\t\treturn undefined;\n\t}\n}\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => void | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\tconst disposeExtensionUi = runtime.setExtensionUIHandler((request) => handleRequest(ui, request));\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(({ key }) => matchesKey(data, key as KeyId));\n\t\tif (!shortcut) return false;\n\t\tvoid runtime.invokeRemoteShortcut(shortcut.key).catch((error: Error) =>\n\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }));\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdisposeExtensionUi();\n\t\tdisposeDiagnostic();\n\t};\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { matchesKey, type KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.ts\";\nimport { RemoteComponentController } from \"./remote-component.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\nimport type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\n\nasync function handleRequest(\n\tui: ExtensionUIContext,\n\trequest: RpcExtensionUIRequest,\n): Promise<RpcExtensionUIResponse | undefined> {\n\tswitch (request.method) {\n\t\tcase \"select\": {\n\t\t\tconst value = await ui.select(request.title, request.options, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"confirm\": {\n\t\t\tconst confirmed = await ui.confirm(request.title, request.message, { timeout: request.timeout });\n\t\t\treturn { type: \"extension_ui_response\", id: request.id, confirmed };\n\t\t}\n\t\tcase \"input\": {\n\t\t\tconst value = await ui.input(request.title, request.placeholder, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"editor\": {\n\t\t\tconst value = await ui.editor(request.title, request.prefill);\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"notify\":\n\t\t\tui.notify(request.message, request.notifyType);\n\t\t\treturn undefined;\n\t\tcase \"setStatus\":\n\t\t\tui.setStatus(request.statusKey, request.statusText);\n\t\t\treturn undefined;\n\t\tcase \"setWidget\":\n\t\t\tui.setWidget(request.widgetKey, request.widgetLines, { placement: request.widgetPlacement });\n\t\t\treturn undefined;\n\t\tcase \"setTitle\":\n\t\t\tui.setTitle(request.title);\n\t\t\treturn undefined;\n\t\tcase \"set_editor_text\":\n\t\t\tui.setEditorText(request.text);\n\t\t\treturn undefined;\n\t}\n}\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => void | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\tconst disposeExtensionUi = runtime.setExtensionUIHandler((request) => handleRequest(ui, request));\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(({ key }) => matchesKey(data, key as KeyId));\n\t\tif (!shortcut) return false;\n\t\tvoid runtime.invokeRemoteShortcut(shortcut.key).catch((error: Error) =>\n\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }));\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdisposeExtensionUi();\n\t\tdisposeDiagnostic();\n\t};\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\n/** Evaluate an engine-child command's live argument completions. */\nexport function getInteractiveEngineRemoteCommandCompletions(\n\truntime: AgentSessionRuntime,\n\tcommandName: string,\n\targumentPrefix: string,\n): Promise<RpcAutocompleteItem[] | null> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)\n\t\t: Promise.resolve(null);\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { AgentSession } from "../../core/agent-session.ts";
|
|
2
2
|
import { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from "../../core/agent-session-runtime.ts";
|
|
3
3
|
import type { RpcClient } from "../rpc/rpc-client.ts";
|
|
4
|
-
import type { RpcExtensionUIRequest, RpcExtensionUIResponse } from "../rpc/rpc-types.ts";
|
|
5
|
-
import type { RpcSlashCommand } from "../rpc/rpc-types.ts";
|
|
4
|
+
import type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from "../rpc/rpc-types.ts";
|
|
6
5
|
import type { ActivityWatchdogDiagnostic } from "./activity-watchdog.ts";
|
|
7
6
|
import type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from "./protocol.ts";
|
|
8
7
|
import { type RemoteCommandsListener } from "./remote-command-catalog.ts";
|
|
@@ -16,8 +15,6 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
16
15
|
private followUpMessages;
|
|
17
16
|
private engineCallbackActive;
|
|
18
17
|
private readonly diagnosticListeners;
|
|
19
|
-
private remoteModels;
|
|
20
|
-
private remoteScopedModels;
|
|
21
18
|
private pendingDiagnostics;
|
|
22
19
|
private lastDiagnostic;
|
|
23
20
|
private autoCompactionEnabled;
|
|
@@ -26,15 +23,18 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
26
23
|
private remoteSessionFile;
|
|
27
24
|
private restartPromise;
|
|
28
25
|
private readonly remoteCommands;
|
|
26
|
+
private readonly remoteModelCatalog;
|
|
29
27
|
constructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient);
|
|
30
28
|
get session(): AgentSession;
|
|
31
29
|
initializeFromEngine(): Promise<void>;
|
|
30
|
+
logoutProvider(provider: string): Promise<import("../rpc/rpc-types.ts").RpcLogoutProviderResult>;
|
|
32
31
|
onDiagnostic(listener: (diagnostic: ActivityWatchdogDiagnostic) => void): () => void;
|
|
33
32
|
onEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;
|
|
34
33
|
onKeybindingState(listener: (state: EngineKeybindingState) => void): () => void;
|
|
35
34
|
sendEngineCommand(command: InteractiveEngineCommand): void;
|
|
36
35
|
getRemoteCommands(): readonly RpcSlashCommand[];
|
|
37
36
|
onRemoteCommandsChanged(listener: RemoteCommandsListener): () => void;
|
|
37
|
+
getRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null>;
|
|
38
38
|
invokeRemoteShortcut(key: string): Promise<void>;
|
|
39
39
|
waitUntilBound(): Promise<void>;
|
|
40
40
|
getEnginePid(): number | undefined;
|
|
@@ -69,7 +69,6 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
69
69
|
private resetUnpersistedSessionView;
|
|
70
70
|
private patchSessionManager;
|
|
71
71
|
private refreshSessionView;
|
|
72
|
-
private patchModelCatalog;
|
|
73
72
|
private observeEvent;
|
|
74
73
|
}
|
|
75
74
|
//# sourceMappingURL=isolated-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AACnF,OAAO,
|
|
1
|
+
{"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { AgentSessionRuntime
|
|
1
|
+
import { AgentSessionRuntime } from "../../core/agent-session-runtime.js";
|
|
2
2
|
import { SessionManager } from "../../core/session-manager.js";
|
|
3
3
|
import { RemoteCommandCatalog } from "./remote-command-catalog.js";
|
|
4
|
+
import { RemoteModelCatalog } from "./remote-model-catalog.js";
|
|
4
5
|
import { sleep } from "../../utils/sleep.js";
|
|
5
6
|
export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
6
7
|
constructor(localRuntime, createRuntime, client) {
|
|
@@ -13,13 +14,12 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
13
14
|
this.followUpMessages = [];
|
|
14
15
|
this.engineCallbackActive = false;
|
|
15
16
|
this.diagnosticListeners = new Set();
|
|
16
|
-
this.remoteModels = [];
|
|
17
|
-
this.remoteScopedModels = [];
|
|
18
17
|
this.pendingDiagnostics = [];
|
|
19
18
|
this.autoCompactionEnabled = true;
|
|
20
19
|
this.autoRetryEnabled = true;
|
|
21
20
|
this.client = client;
|
|
22
21
|
this.remoteCommands = new RemoteCommandCatalog(client);
|
|
22
|
+
this.remoteModelCatalog = new RemoteModelCatalog(client);
|
|
23
23
|
this.client.onEvent((event) => this.observeEvent(event));
|
|
24
24
|
}
|
|
25
25
|
get session() {
|
|
@@ -31,9 +31,8 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
31
31
|
const state = await this.client.getState();
|
|
32
32
|
const session = super.session;
|
|
33
33
|
const catalog = await this.client.requestInternal({ type: "get_available_models" });
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.patchModelCatalog(session);
|
|
34
|
+
this.remoteModelCatalog.apply(catalog);
|
|
35
|
+
this.remoteModelCatalog.patch(session);
|
|
37
36
|
if (state.model)
|
|
38
37
|
session.agent.state.model = state.model;
|
|
39
38
|
session.agent.state.thinkingLevel = state.thinkingLevel;
|
|
@@ -52,6 +51,12 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
52
51
|
// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.
|
|
53
52
|
this.remoteCommands.refresh();
|
|
54
53
|
}
|
|
54
|
+
async logoutProvider(provider) {
|
|
55
|
+
const result = await this.client.logoutProvider(provider);
|
|
56
|
+
this.remoteModelCatalog.apply({ models: result.models, scopedModels: result.scopedModels ?? [] });
|
|
57
|
+
await super.session.modelRegistry.authStorage.logoutAsync(provider);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
55
60
|
onDiagnostic(listener) {
|
|
56
61
|
for (const diagnostic of this.pendingDiagnostics.splice(0))
|
|
57
62
|
listener(diagnostic);
|
|
@@ -69,6 +74,9 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
69
74
|
}
|
|
70
75
|
getRemoteCommands() { return this.remoteCommands.getCommands(); }
|
|
71
76
|
onRemoteCommandsChanged(listener) { return this.remoteCommands.onChange(listener); }
|
|
77
|
+
getRemoteCommandCompletions(commandName, argumentPrefix) {
|
|
78
|
+
return this.client.getCommandCompletions(commandName, argumentPrefix);
|
|
79
|
+
}
|
|
72
80
|
async invokeRemoteShortcut(key) {
|
|
73
81
|
await this.client.requestInternal({ type: "invoke_shortcut", key });
|
|
74
82
|
}
|
|
@@ -391,24 +399,6 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
391
399
|
this.patchSessionManager(refreshed);
|
|
392
400
|
session.agent.state.messages = refreshed.buildSessionContext().messages;
|
|
393
401
|
}
|
|
394
|
-
patchModelCatalog(session) {
|
|
395
|
-
const registry = session.modelRegistry;
|
|
396
|
-
Object.defineProperties(registry, {
|
|
397
|
-
getAvailable: { configurable: true, value: () => [...this.remoteModels] },
|
|
398
|
-
find: {
|
|
399
|
-
configurable: true,
|
|
400
|
-
value: (provider, modelId) => this.remoteModels.find((model) => model.provider === provider && model.id === modelId),
|
|
401
|
-
},
|
|
402
|
-
hasConfiguredAuth: {
|
|
403
|
-
configurable: true,
|
|
404
|
-
value: (model) => this.remoteModels.some((candidate) => candidate.provider === model.provider && candidate.id === model.id),
|
|
405
|
-
},
|
|
406
|
-
});
|
|
407
|
-
Object.defineProperty(session, "scopedModels", {
|
|
408
|
-
configurable: true,
|
|
409
|
-
get: () => this.remoteScopedModels,
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
402
|
observeEvent(event) {
|
|
413
403
|
const session = super.session;
|
|
414
404
|
switch (event.type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSession, AgentSessionEvent } from \"../../core/agent-session.ts\";\nimport {\n\tAgentSessionRuntime,\n\ttype CreateAgentSessionRuntimeFactory,\n} from \"../../core/agent-session-runtime.ts\";\nimport type { PromptOptions } from \"../../core/agent-session-types.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport type { RpcExtensionUIRequest, RpcExtensionUIResponse } from \"../rpc/rpc-types.ts\";\nimport type { RpcEvent, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteCommandCatalog, type RemoteCommandsListener } from \"./remote-command-catalog.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\n\nexport class IsolatedInteractiveRuntime extends AgentSessionRuntime {\n\tprivate readonly client: RpcClient;\n\tprivate readonly patchedSessions = new WeakSet<AgentSession>();\n\tprivate streaming = false;\n\tprivate compacting = false;\n\tprivate bashRunning = false;\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\tprivate engineCallbackActive = false;\n\tprivate readonly diagnosticListeners = new Set<(diagnostic: ActivityWatchdogDiagnostic) => void>();\n\tprivate remoteModels: Model<Api>[] = [];\n\tprivate remoteScopedModels: Array<{ model: Model<Api>; thinkingLevel?: AgentSession[\"thinkingLevel\"] }> = [];\n\tprivate pendingDiagnostics: ActivityWatchdogDiagnostic[] = [];\n\tprivate lastDiagnostic: ActivityWatchdogDiagnostic | undefined;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate restartPromise: Promise<void> | undefined;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\n\tconstructor(\n\t\tlocalRuntime: AgentSessionRuntime,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\tclient: RpcClient,\n\t) {\n\t\tsuper(\n\t\t\tlocalRuntime.session,\n\t\t\tlocalRuntime.services,\n\t\t\tcreateRuntime,\n\t\t\t[...localRuntime.diagnostics],\n\t\t\tlocalRuntime.modelFallbackMessage,\n\t\t);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t}\n\n\toverride get session(): AgentSession {\n\t\tconst session = super.session;\n\t\tthis.patchSession(session);\n\t\treturn session;\n\t}\n\tasync initializeFromEngine(): Promise<void> {\n\t\tconst state = await this.client.getState();\n\t\tconst session = super.session;\n\t\tconst catalog = await this.client.requestInternal<{\n\t\t\tmodels: Model<Api>[];\n\t\t\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: AgentSession[\"thinkingLevel\"] }>;\n\t\t}>({ type: \"get_available_models\" });\n\t\tthis.remoteModels = catalog.models;\n\t\tthis.remoteScopedModels = catalog.scopedModels ?? [];\n\t\tthis.patchModelCatalog(session);\n\t\tif (state.model) session.agent.state.model = state.model;\n\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\tsession.agent.steeringMode = state.steeringMode;\n\t\tsession.agent.followUpMode = state.followUpMode;\n\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.streaming = state.isStreaming;\n\t\tthis.compacting = state.isCompacting;\n\t\tif (state.sessionFile && session.sessionFile !== state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tthis.refreshSessionView();\n\t\tthis.engineCallbackActive = false;\n\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\tthis.remoteCommands.refresh();\n\t}\n\n\tonDiagnostic(listener: (diagnostic: ActivityWatchdogDiagnostic) => void): () => void {\n\t\tfor (const diagnostic of this.pendingDiagnostics.splice(0)) listener(diagnostic);\n\t\tthis.diagnosticListeners.add(listener);\n\t\treturn () => this.diagnosticListeners.delete(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\tonKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\treturn this.client.onInteractiveEngineKeybindingState(listener);\n\t}\n\n\tsendEngineCommand(command: InteractiveEngineCommand): void {\n\t\tthis.client.sendInteractiveEngineCommand(command);\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] { return this.remoteCommands.getCommands(); }\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void { return this.remoteCommands.onChange(listener); }\n\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\twaitUntilBound(): Promise<void> { return this.client.waitForInteractiveEngineBound(); }\n\tgetEnginePid(): number | undefined { return this.client.getEnginePid(); }\n\tgetEngineGeneration(): number { return this.client.getGeneration(); }\n\tisRecovering(): boolean { return this.restartPromise !== undefined; }\n\tasync synchronize(): Promise<void> {\n\t\tconst state = await this.client.getState();\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.remoteSessionName = state.sessionName;\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void { this.engineCallbackActive = active; }\n\n\tinterruptBlockedCallback(): boolean {\n\t\tif (!this.engineCallbackActive) return false;\n\t\tthis.dispatchBestEffort(\"interrupt\", this.session.abort());\n\t\treturn true;\n\t}\n\n\tsetExtensionUIHandler(\n\t\thandler: (request: RpcExtensionUIRequest) => Promise<RpcExtensionUIResponse | undefined>,\n\t): () => void {\n\t\treturn this.client.onExtensionUIRequest((request) => {\n\t\t\tvoid handler(request).then(async (response) => {\n\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t}).catch((error: Error) => {\n\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\tactivity: undefined,\n\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tthis.lastDiagnostic = diagnostic;\n\t\tthis.engineCallbackActive = true;\n\t\tif (this.diagnosticListeners.size === 0) this.pendingDiagnostics.push(diagnostic);\n\t\tfor (const listener of this.diagnosticListeners) listener(diagnostic);\n\t}\n\n\toverride async switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionPath);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionPath);\n\t\t\tawait this.initializeFromEngine();\n\t\t}\n\t\treturn result;\n\t}\n\n\toverride async newSession(options?: { parentSession?: string }): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.newSession(options?.parentSession);\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\telse this.resetUnpersistedSessionView();\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.requestInternal<{ cancelled: boolean }>({\n\t\t\ttype: \"import_session\", inputPath, cwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tlet selectedText: string | undefined;\n\t\tlet cancelled: boolean;\n\t\tif (options?.position === \"at\") {\n\t\t\tcancelled = (await this.client.clone()).cancelled;\n\t\t} else {\n\t\t\tconst result = await this.client.fork(entryId);\n\t\t\tcancelled = result.cancelled;\n\t\t\tselectedText = result.text;\n\t\t}\n\t\tif (cancelled) return { cancelled: true };\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\toverride async dispose(): Promise<void> {\n\t\tawait this.client.stop();\n\t\tawait super.dispose();\n\t}\n\n\tprivate patchSession(session: AgentSession): void {\n\t\tif (this.patchedSessions.has(session)) return;\n\t\tthis.patchedSessions.add(session);\n\t\tthis.patchSessionManager(session.sessionManager);\n\t\tObject.defineProperties(session, {\n\t\t\tisStreaming: { configurable: true, get: () => this.streaming },\n\t\t\tisCompacting: { configurable: true, get: () => this.compacting },\n\t\t\tisBashRunning: { configurable: true, get: () => this.bashRunning },\n\t\t\tsessionName: { configurable: true, get: () => this.remoteSessionName },\n\t\t\tsessionFile: { configurable: true, get: () => this.remoteSessionFile },\n\t\t\tautoCompactionEnabled: { configurable: true, get: () => this.autoCompactionEnabled },\n\t\t\tautoRetryEnabled: { configurable: true, get: () => this.autoRetryEnabled },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: AgentSessionEvent) => void) => this.client.onEvent(listener),\n\t\t\t},\n\t\t\tprompt: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (text: string, options?: PromptOptions) => {\n\t\t\t\t\tawait this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsteer: { configurable: true, value: (text: string) => this.client.steer(text) },\n\t\t\tfollowUp: { configurable: true, value: (text: string) => this.client.followUp(text) },\n\t\t\tabort: { configurable: true, value: () => this.abortAndRecover() },\n\t\t\texecuteBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (\n\t\t\t\t\tcommand: string,\n\t\t\t\t\tonChunk?: (chunk: string) => void,\n\t\t\t\t\toptions?: { excludeFromContext?: boolean },\n\t\t\t\t) => {\n\t\t\t\t\tthis.bashRunning = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.client.requestInternal<Awaited<ReturnType<AgentSession[\"executeBash\"]>>>({\n\t\t\t\t\t\t\ttype: \"user_bash\", command, excludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (result.output) onChunk?.(result.output);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.bashRunning = false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\trecordBashResult: { configurable: true, value: () => {} },\n\t\t\tabortBash: { configurable: true, value: () => this.dispatchBestEffort(\"abort bash\", this.client.abortBash()) },\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: { configurable: true, value: () => this.dispatchBestEffort(\"abort compaction\", this.client.requestInternal<void>({ type: \"abort_compaction\" })) },\n\t\t\tabortRetry: { configurable: true, value: () => this.dispatchBestEffort(\"abort retry\", this.client.abortRetry()) },\n\t\t\tnavigateTree: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (targetId: string, options?: Parameters<AgentSession[\"navigateTree\"]>[1]) =>\n\t\t\t\t\tthis.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\", targetId, options,\n\t\t\t\t\t}),\n\t\t\t},\n\t\t\treload: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async () => {\n\t\t\t\t\tawait this.client.requestInternal<void>({ type: \"reload\" });\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSessionName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (name: string) => {\n\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\tthis.dispatchBestEffort(\"set session name\", this.client.setSessionName(name).then(() => this.refreshSessionView()));\n\t\t\t\t},\n\t\t\t},\n\t\t\tgetSteeringMessages: { configurable: true, value: () => [...this.steeringMessages] },\n\t\t\tgetFollowUpMessages: { configurable: true, value: () => [...this.followUpMessages] },\n\t\t\tclearQueue: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst queued = { steering: [...this.steeringMessages], followUp: [...this.followUpMessages] };\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\"clear queue\", this.client.requestInternal({ type: \"clear_queue\" }));\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>) => {\n\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id);\n\t\t\t\t\tsession.agent.state.model = session.modelRegistry.find(selected.provider, selected.id) ?? model;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (level: AgentSession[\"thinkingLevel\"]) => {\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tthis.dispatchBestEffort(\"set thinking level\", this.client.setThinkingLevel(level));\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (direction?: \"forward\" | \"backward\") => {\n\t\t\t\t\tconst result = await this.client.cycleModel(direction);\n\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\tconst model = session.modelRegistry.find(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\treturn { ...result, model };\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tthis.dispatchBestEffort(\"cycle thinking level\", this.client.setThinkingLevel(level));\n\t\t\t\t\treturn level;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetContextWindow: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (tokens: number) => {\n\t\t\t\t\tif (session.agent.state.model) session.agent.state.model = { ...session.agent.state.model, contextWindow: tokens };\n\t\t\t\t\tthis.dispatchBestEffort(\"set context window\", this.client.setContextWindow(tokens));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSteeringMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.steeringMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set steering mode\", this.client.setSteeringMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetFollowUpMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.followUpMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set follow-up mode\", this.client.setFollowUpMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoCompactionEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoCompactionEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto compaction\", this.client.setAutoCompaction(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoRetryEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoRetryEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto retry\", this.client.setAutoRetry(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tif (this.restartPromise) return this.restartPromise;\n\t\tconst cooperativeAbort = this.client.abort().then(() => true, () => false);\n\t\tif (await Promise.race([cooperativeAbort, sleep(250).then(() => false)])) {\n\t\t\tthis.engineCallbackActive = false;\n\t\t\treturn;\n\t\t}\n\t\tconst activity = this.lastDiagnostic?.activity;\n\t\tconst label = activity ? `${activity.kind} ${activity.name}` : \"engine callback\";\n\t\tconst diagnostic: ActivityWatchdogDiagnostic = {\n\t\t\tactivity,\n\t\t\telapsedMs: this.lastDiagnostic?.elapsedMs ?? 0,\n\t\t\tlevel: \"unresponsive\",\n\t\t\tmessage: `Engine terminated; ${label} result unknown; inspect side effects before retrying`,\n\t\t};\n\t\tthis.streaming = false;\n\t\tthis.compacting = false;\n\t\tthis.engineCallbackActive = false;\n\t\tfor (const listener of this.diagnosticListeners) listener(diagnostic);\n\t\tthis.restartPromise = (async () => {\n\t\t\tawait this.client.restart(this.remoteSessionFile);\n\t\t\tawait this.initializeFromEngine();\n\t\t})().catch((error: Error) => {\n\t\t\tthis.emitDiagnostic({ ...diagnostic, message: `${diagnostic.message}; engine restart failed: ${error.message}` });\n\t\t}).finally(() => { this.restartPromise = undefined; });\n\t\tawait this.restartPromise;\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.restartPromise) return;\n\t\t\tthis.emitDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate resetUnpersistedSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst manager = SessionManager.create(session.sessionManager.getCwd(), session.sessionManager.getSessionDir());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: manager });\n\t\tthis.patchSessionManager(manager);\n\t\tsession.agent.state.messages = [];\n\t}\n\n\tprivate patchSessionManager(manager: SessionManager): void {\n\t\tObject.defineProperty(manager, \"appendLabelChange\", {\n\t\t\tconfigurable: true,\n\t\t\tvalue: (entryId: string, label?: string) => {\n\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\"set label\",\n\t\t\t\t\tthis.client.requestInternal<void>({ type: \"set_label\", entryId, label }).then(() => this.refreshSessionView()),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate refreshSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst sessionFile = session.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = SessionManager.open(sessionFile, currentManager.getSessionDir(), currentManager.getCwd());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: refreshed });\n\t\tthis.patchSessionManager(refreshed);\n\t\tsession.agent.state.messages = refreshed.buildSessionContext().messages;\n\t}\n\n\tprivate patchModelCatalog(session: AgentSession): void {\n\t\tconst registry = session.modelRegistry;\n\t\tObject.defineProperties(registry, {\n\t\t\tgetAvailable: { configurable: true, value: () => [...this.remoteModels] },\n\t\t\tfind: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (provider: string, modelId: string) =>\n\t\t\t\t\tthis.remoteModels.find((model) => model.provider === provider && model.id === modelId),\n\t\t\t},\n\t\t\thasConfiguredAuth: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (model: Model<Api>) => this.remoteModels.some(\n\t\t\t\t\t(candidate) => candidate.provider === model.provider && candidate.id === model.id,\n\t\t\t\t),\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(session, \"scopedModels\", {\n\t\t\tconfigurable: true,\n\t\t\tget: () => this.remoteScopedModels,\n\t\t});\n\t}\n\n\tprivate observeEvent(event: RpcEvent): void {\n\t\tconst session = super.session;\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.streaming = true;\n\t\t\t\tbreak;\n\t\t\tcase \"agent_end\":\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.refreshSessionView();\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.steeringMessages = [...event.steering];\n\t\t\t\tthis.followUpMessages = [...event.followUp];\n\t\t\t\tbreak;\n\t\t\tcase \"model_changed\":\n\t\t\t\tsession.agent.state.model = event.model;\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\n\t\t\t\tbreak;\n\t\t\tcase \"context_window_changed\":\n\t\t\t\tif (session.agent.state.model) session.agent.state.model = { ...session.agent.state.model, contextWindow: event.contextWindow };\n\t\t\t\tbreak;\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.remoteSessionName = event.name;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"isolated-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAyC,MAAM,qCAAqC,CAAC;AAEjH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,oBAAoB,EAA+B,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,OAAO,0BAA2B,SAAQ,mBAAmB;IAoBlE,YACC,YAAiC,EACjC,aAA+C,EAC/C,MAAiB;QAEjB,KAAK,CACJ,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,QAAQ,EACrB,aAAa,EACb,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,EAC7B,YAAY,CAAC,oBAAoB,CACjC,CAAC;QA7Bc,oBAAe,GAAG,IAAI,OAAO,EAAgB,CAAC;QACvD,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;QACpB,qBAAgB,GAAa,EAAE,CAAC;QAChC,qBAAgB,GAAa,EAAE,CAAC;QAChC,yBAAoB,GAAG,KAAK,CAAC;QACpB,wBAAmB,GAAG,IAAI,GAAG,EAAoD,CAAC;QAC3F,uBAAkB,GAAiC,EAAE,CAAC;QAEtD,0BAAqB,GAAG,IAAI,CAAC;QAC7B,qBAAgB,GAAG,IAAI,CAAC;QAmB/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAa,OAAO;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,oBAAoB;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAkB,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC;QACzD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC;QACrC,IAAI,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjH,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,4EAA4E;QAC5E,gFAAgF;QAChF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,QAAgB;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IACf,CAAC;IAED,YAAY,CAAC,QAA0D;QACtE,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,eAAe,CAAC,QAAqD;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,iBAAiB,CAAC,QAAgD;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,iBAAiB,CAAC,OAAiC;QAClD,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,iBAAiB,KAAiC,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7F,uBAAuB,CAAC,QAAgC,IAAgB,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxH,2BAA2B,CAAC,WAAmB,EAAE,cAAsB;QACtE,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvE,CAAC;IAGD,KAAK,CAAC,oBAAoB,CAAC,GAAW;QACrC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,cAAc,KAAoB,OAAO,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;IACvF,YAAY,KAAyB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACzE,mBAAmB,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACrE,YAAY,KAAc,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,WAAW;QAChB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,uBAAuB,CAAC,MAAe,IAAU,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,CAAC,CAAC;IAEtF,wBAAwB;QACvB,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACb,CAAC;IAED,qBAAqB,CACpB,OAAwF;QAExF,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;YACnD,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC7C,IAAI,QAAQ;oBAAE,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;gBACzB,IAAI,CAAC,cAAc,CAAC;oBACnB,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,wCAAwC,KAAK,CAAC,OAAO,EAAE;iBAChE,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,UAAsC;QACpD,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClF,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAEQ,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEQ,KAAK,CAAC,UAAU,CAAC,OAAoC;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;YAC/D,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IACf,CAAC;IAEQ,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,WAAoB;QACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAyB;YACxE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW;SAC9C,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IACf,CAAC;IAEQ,KAAK,CAAC,IAAI,CAClB,OAAe,EACf,OAAwC;QAExC,IAAI,YAAgC,CAAC;QACrC,IAAI,SAAkB,CAAC;QACvB,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;YAChC,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC;QACnD,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC7B,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC3C,CAAC;IAEQ,KAAK,CAAC,OAAO;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,OAAqB;QACzC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAChC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;YAC9D,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YAChE,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;YAClE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACtE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACtE,qBAAqB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACpF,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1E,SAAS,EAAE;gBACV,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,QAA4C,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aACtF;YACD,MAAM,EAAE;gBACP,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,OAAuB,EAAE,EAAE;oBACtD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;oBAC5E,OAAO,EAAE,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;aACD;YACD,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC/E,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACrF,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YAClE,WAAW,EAAE;gBACZ,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EACX,OAAe,EACf,OAAiC,EACjC,OAA0C,EACzC,EAAE;oBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC;wBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAmD;4BAClG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;yBAC3E,CAAC,CAAC;wBACH,IAAI,MAAM,CAAC,MAAM;4BAAE,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAC5C,OAAO,MAAM,CAAC;oBACf,CAAC;4BAAS,CAAC;wBACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBAC1B,CAAC;gBACF,CAAC;aACD;YACD,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;YACzD,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE;YAC9G,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YACnE,eAAe,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE;YAClK,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE;YACjH,YAAY,EAAE;gBACb,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,OAAqD,EAAE,EAAE,CACxF,IAAI,CAAC,MAAM,CAAC,eAAe,CAAoD;oBAC9E,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO;iBACxC,CAAC;aACH;YACD,MAAM,EAAE;gBACP,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,IAAI,EAAE;oBACjB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC5D,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACnC,CAAC;aACD;YACD,cAAc,EAAE;gBACf,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE;oBACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9B,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;gBACrH,CAAC;aACD;YACD,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACpF,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACpF,UAAU,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,GAAG,EAAE;oBACX,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC9F,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC7F,OAAO,MAAM,CAAC;gBACf,CAAC;aACD;YACD,QAAQ,EAAE;gBACT,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,KAAiB,EAAE,EAAE;oBAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oBACtE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;gBACjG,CAAC;aACD;YACD,gBAAgB,EAAE;gBACjB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,KAAoC,EAAE,EAAE;oBAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC1C,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpF,CAAC;aACD;YACD,UAAU,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,SAAkC,EAAE,EAAE;oBACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM;wBAAE,OAAO,SAAS,CAAC;oBAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;oBACjG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBACzD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;gBAC7B,CAAC;aACD;YACD,kBAAkB,EAAE;gBACnB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,GAAG,EAAE;oBACX,MAAM,MAAM,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;oBACpD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;wBAAE,OAAO,SAAS,CAAC;oBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBACtD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;oBACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC1C,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrF,OAAO,KAAK,CAAC;gBACd,CAAC;aACD;YACD,gBAAgB,EAAE;gBACjB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,MAAc,EAAE,EAAE;oBACzB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;wBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;oBACnH,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrF,CAAC;aACD;YACD,eAAe,EAAE;gBAChB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,IAA6B,EAAE,EAAE;oBACxC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;oBAClC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjF,CAAC;aACD;YACD,eAAe,EAAE;gBAChB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,IAA6B,EAAE,EAAE;oBACxC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;oBAClC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClF,CAAC;aACD;YACD,wBAAwB,EAAE;gBACzB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;oBACrC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACxF,CAAC;aACD;YACD,mBAAmB,EAAE;gBACpB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;oBAC3B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;oBAChC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9E,CAAC;aACD;SACD,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe;QAC5B,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,OAAO;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACjF,MAAM,UAAU,GAA+B;YAC9C,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,IAAI,CAAC;YAC9C,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,sBAAsB,KAAK,uDAAuD;SAC3F,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;YAC3B,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnH,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,cAAc,CAAC;IAC3B,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,SAA2B;QACpE,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,cAAc;gBAAE,OAAO;YAChC,IAAI,CAAC,cAAc,CAAC;gBACnB,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,sBAAsB,KAAK,YAAY,KAAK,CAAC,OAAO,EAAE;aAC/D,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,2BAA2B;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/G,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACnC,CAAC;IAEO,mBAAmB,CAAC,OAAuB;QAClD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE;YACnD,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,CAAC,OAAe,EAAE,KAAc,EAAE,EAAE;gBAC1C,IAAI,CAAC,kBAAkB,CACtB,WAAW,EACX,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAC9G,CAAC;YACH,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;IAEO,kBAAkB;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5G,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;IACzE,CAAC;IAEO,YAAY,CAAC,KAAe;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,aAAa;gBACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,MAAM;YACP,KAAK,WAAW;gBACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM;YACP,KAAK,kBAAkB;gBACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,MAAM;YACP,KAAK,gBAAgB;gBACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,MAAM;YACP,KAAK,cAAc;gBAClB,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM;YACP,KAAK,eAAe;gBACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxC,MAAM;YACP,KAAK,wBAAwB;gBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;gBAChD,MAAM;YACP,KAAK,wBAAwB;gBAC5B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;gBAChI,MAAM;YACP,KAAK,sBAAsB;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,MAAM;QACR,CAAC;IACF,CAAC;CACD","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSession, AgentSessionEvent } from \"../../core/agent-session.ts\";\nimport { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from \"../../core/agent-session-runtime.ts\";\nimport type { PromptOptions } from \"../../core/agent-session-types.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcModelCatalog, RpcEvent, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteCommandCatalog, type RemoteCommandsListener } from \"./remote-command-catalog.ts\";\nimport { RemoteModelCatalog } from \"./remote-model-catalog.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\n\nexport class IsolatedInteractiveRuntime extends AgentSessionRuntime {\n\tprivate readonly client: RpcClient;\n\tprivate readonly patchedSessions = new WeakSet<AgentSession>();\n\tprivate streaming = false;\n\tprivate compacting = false;\n\tprivate bashRunning = false;\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\tprivate engineCallbackActive = false;\n\tprivate readonly diagnosticListeners = new Set<(diagnostic: ActivityWatchdogDiagnostic) => void>();\n\tprivate pendingDiagnostics: ActivityWatchdogDiagnostic[] = [];\n\tprivate lastDiagnostic: ActivityWatchdogDiagnostic | undefined;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate restartPromise: Promise<void> | undefined;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\tprivate readonly remoteModelCatalog: RemoteModelCatalog;\n\n\tconstructor(\n\t\tlocalRuntime: AgentSessionRuntime,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\tclient: RpcClient,\n\t) {\n\t\tsuper(\n\t\t\tlocalRuntime.session,\n\t\t\tlocalRuntime.services,\n\t\t\tcreateRuntime,\n\t\t\t[...localRuntime.diagnostics],\n\t\t\tlocalRuntime.modelFallbackMessage,\n\t\t);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.remoteModelCatalog = new RemoteModelCatalog(client);\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t}\n\n\toverride get session(): AgentSession {\n\t\tconst session = super.session;\n\t\tthis.patchSession(session);\n\t\treturn session;\n\t}\n\tasync initializeFromEngine(): Promise<void> {\n\t\tconst state = await this.client.getState();\n\t\tconst session = super.session;\n\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\tthis.remoteModelCatalog.apply(catalog);\n\t\tthis.remoteModelCatalog.patch(session);\n\t\tif (state.model) session.agent.state.model = state.model;\n\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\tsession.agent.steeringMode = state.steeringMode;\n\t\tsession.agent.followUpMode = state.followUpMode;\n\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.streaming = state.isStreaming;\n\t\tthis.compacting = state.isCompacting;\n\t\tif (state.sessionFile && session.sessionFile !== state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tthis.refreshSessionView();\n\t\tthis.engineCallbackActive = false;\n\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\tthis.remoteCommands.refresh();\n\t}\n\n\toverride async logoutProvider(provider: string) {\n\t\tconst result = await this.client.logoutProvider(provider);\n\t\tthis.remoteModelCatalog.apply({ models: result.models, scopedModels: result.scopedModels ?? [] });\n\t\tawait super.session.modelRegistry.authStorage.logoutAsync(provider);\n\t\treturn result;\n\t}\n\n\tonDiagnostic(listener: (diagnostic: ActivityWatchdogDiagnostic) => void): () => void {\n\t\tfor (const diagnostic of this.pendingDiagnostics.splice(0)) listener(diagnostic);\n\t\tthis.diagnosticListeners.add(listener);\n\t\treturn () => this.diagnosticListeners.delete(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\tonKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\treturn this.client.onInteractiveEngineKeybindingState(listener);\n\t}\n\n\tsendEngineCommand(command: InteractiveEngineCommand): void {\n\t\tthis.client.sendInteractiveEngineCommand(command);\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] { return this.remoteCommands.getCommands(); }\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void { return this.remoteCommands.onChange(listener); }\n\tgetRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.client.getCommandCompletions(commandName, argumentPrefix);\n\t}\n\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\twaitUntilBound(): Promise<void> { return this.client.waitForInteractiveEngineBound(); }\n\tgetEnginePid(): number | undefined { return this.client.getEnginePid(); }\n\tgetEngineGeneration(): number { return this.client.getGeneration(); }\n\tisRecovering(): boolean { return this.restartPromise !== undefined; }\n\tasync synchronize(): Promise<void> {\n\t\tconst state = await this.client.getState();\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.remoteSessionName = state.sessionName;\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void { this.engineCallbackActive = active; }\n\n\tinterruptBlockedCallback(): boolean {\n\t\tif (!this.engineCallbackActive) return false;\n\t\tthis.dispatchBestEffort(\"interrupt\", this.session.abort());\n\t\treturn true;\n\t}\n\n\tsetExtensionUIHandler(\n\t\thandler: (request: RpcExtensionUIRequest) => Promise<RpcExtensionUIResponse | undefined>,\n\t): () => void {\n\t\treturn this.client.onExtensionUIRequest((request) => {\n\t\t\tvoid handler(request).then(async (response) => {\n\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t}).catch((error: Error) => {\n\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\tactivity: undefined,\n\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tthis.lastDiagnostic = diagnostic;\n\t\tthis.engineCallbackActive = true;\n\t\tif (this.diagnosticListeners.size === 0) this.pendingDiagnostics.push(diagnostic);\n\t\tfor (const listener of this.diagnosticListeners) listener(diagnostic);\n\t}\n\n\toverride async switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionPath);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionPath);\n\t\t\tawait this.initializeFromEngine();\n\t\t}\n\t\treturn result;\n\t}\n\n\toverride async newSession(options?: { parentSession?: string }): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.newSession(options?.parentSession);\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\telse this.resetUnpersistedSessionView();\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.requestInternal<{ cancelled: boolean }>({\n\t\t\ttype: \"import_session\", inputPath, cwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tlet selectedText: string | undefined;\n\t\tlet cancelled: boolean;\n\t\tif (options?.position === \"at\") {\n\t\t\tcancelled = (await this.client.clone()).cancelled;\n\t\t} else {\n\t\t\tconst result = await this.client.fork(entryId);\n\t\t\tcancelled = result.cancelled;\n\t\t\tselectedText = result.text;\n\t\t}\n\t\tif (cancelled) return { cancelled: true };\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\toverride async dispose(): Promise<void> {\n\t\tawait this.client.stop();\n\t\tawait super.dispose();\n\t}\n\n\tprivate patchSession(session: AgentSession): void {\n\t\tif (this.patchedSessions.has(session)) return;\n\t\tthis.patchedSessions.add(session);\n\t\tthis.patchSessionManager(session.sessionManager);\n\t\tObject.defineProperties(session, {\n\t\t\tisStreaming: { configurable: true, get: () => this.streaming },\n\t\t\tisCompacting: { configurable: true, get: () => this.compacting },\n\t\t\tisBashRunning: { configurable: true, get: () => this.bashRunning },\n\t\t\tsessionName: { configurable: true, get: () => this.remoteSessionName },\n\t\t\tsessionFile: { configurable: true, get: () => this.remoteSessionFile },\n\t\t\tautoCompactionEnabled: { configurable: true, get: () => this.autoCompactionEnabled },\n\t\t\tautoRetryEnabled: { configurable: true, get: () => this.autoRetryEnabled },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: AgentSessionEvent) => void) => this.client.onEvent(listener),\n\t\t\t},\n\t\t\tprompt: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (text: string, options?: PromptOptions) => {\n\t\t\t\t\tawait this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsteer: { configurable: true, value: (text: string) => this.client.steer(text) },\n\t\t\tfollowUp: { configurable: true, value: (text: string) => this.client.followUp(text) },\n\t\t\tabort: { configurable: true, value: () => this.abortAndRecover() },\n\t\t\texecuteBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (\n\t\t\t\t\tcommand: string,\n\t\t\t\t\tonChunk?: (chunk: string) => void,\n\t\t\t\t\toptions?: { excludeFromContext?: boolean },\n\t\t\t\t) => {\n\t\t\t\t\tthis.bashRunning = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.client.requestInternal<Awaited<ReturnType<AgentSession[\"executeBash\"]>>>({\n\t\t\t\t\t\t\ttype: \"user_bash\", command, excludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (result.output) onChunk?.(result.output);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.bashRunning = false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\trecordBashResult: { configurable: true, value: () => {} },\n\t\t\tabortBash: { configurable: true, value: () => this.dispatchBestEffort(\"abort bash\", this.client.abortBash()) },\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: { configurable: true, value: () => this.dispatchBestEffort(\"abort compaction\", this.client.requestInternal<void>({ type: \"abort_compaction\" })) },\n\t\t\tabortRetry: { configurable: true, value: () => this.dispatchBestEffort(\"abort retry\", this.client.abortRetry()) },\n\t\t\tnavigateTree: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (targetId: string, options?: Parameters<AgentSession[\"navigateTree\"]>[1]) =>\n\t\t\t\t\tthis.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\", targetId, options,\n\t\t\t\t\t}),\n\t\t\t},\n\t\t\treload: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async () => {\n\t\t\t\t\tawait this.client.requestInternal<void>({ type: \"reload\" });\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSessionName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (name: string) => {\n\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\tthis.dispatchBestEffort(\"set session name\", this.client.setSessionName(name).then(() => this.refreshSessionView()));\n\t\t\t\t},\n\t\t\t},\n\t\t\tgetSteeringMessages: { configurable: true, value: () => [...this.steeringMessages] },\n\t\t\tgetFollowUpMessages: { configurable: true, value: () => [...this.followUpMessages] },\n\t\t\tclearQueue: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst queued = { steering: [...this.steeringMessages], followUp: [...this.followUpMessages] };\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\"clear queue\", this.client.requestInternal({ type: \"clear_queue\" }));\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>) => {\n\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id);\n\t\t\t\t\tsession.agent.state.model = session.modelRegistry.find(selected.provider, selected.id) ?? model;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (level: AgentSession[\"thinkingLevel\"]) => {\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tthis.dispatchBestEffort(\"set thinking level\", this.client.setThinkingLevel(level));\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (direction?: \"forward\" | \"backward\") => {\n\t\t\t\t\tconst result = await this.client.cycleModel(direction);\n\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\tconst model = session.modelRegistry.find(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\treturn { ...result, model };\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tthis.dispatchBestEffort(\"cycle thinking level\", this.client.setThinkingLevel(level));\n\t\t\t\t\treturn level;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetContextWindow: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (tokens: number) => {\n\t\t\t\t\tif (session.agent.state.model) session.agent.state.model = { ...session.agent.state.model, contextWindow: tokens };\n\t\t\t\t\tthis.dispatchBestEffort(\"set context window\", this.client.setContextWindow(tokens));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSteeringMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.steeringMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set steering mode\", this.client.setSteeringMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetFollowUpMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.followUpMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set follow-up mode\", this.client.setFollowUpMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoCompactionEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoCompactionEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto compaction\", this.client.setAutoCompaction(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoRetryEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoRetryEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto retry\", this.client.setAutoRetry(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tif (this.restartPromise) return this.restartPromise;\n\t\tconst cooperativeAbort = this.client.abort().then(() => true, () => false);\n\t\tif (await Promise.race([cooperativeAbort, sleep(250).then(() => false)])) {\n\t\t\tthis.engineCallbackActive = false;\n\t\t\treturn;\n\t\t}\n\t\tconst activity = this.lastDiagnostic?.activity;\n\t\tconst label = activity ? `${activity.kind} ${activity.name}` : \"engine callback\";\n\t\tconst diagnostic: ActivityWatchdogDiagnostic = {\n\t\t\tactivity,\n\t\t\telapsedMs: this.lastDiagnostic?.elapsedMs ?? 0,\n\t\t\tlevel: \"unresponsive\",\n\t\t\tmessage: `Engine terminated; ${label} result unknown; inspect side effects before retrying`,\n\t\t};\n\t\tthis.streaming = false;\n\t\tthis.compacting = false;\n\t\tthis.engineCallbackActive = false;\n\t\tfor (const listener of this.diagnosticListeners) listener(diagnostic);\n\t\tthis.restartPromise = (async () => {\n\t\t\tawait this.client.restart(this.remoteSessionFile);\n\t\t\tawait this.initializeFromEngine();\n\t\t})().catch((error: Error) => {\n\t\t\tthis.emitDiagnostic({ ...diagnostic, message: `${diagnostic.message}; engine restart failed: ${error.message}` });\n\t\t}).finally(() => { this.restartPromise = undefined; });\n\t\tawait this.restartPromise;\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.restartPromise) return;\n\t\t\tthis.emitDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate resetUnpersistedSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst manager = SessionManager.create(session.sessionManager.getCwd(), session.sessionManager.getSessionDir());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: manager });\n\t\tthis.patchSessionManager(manager);\n\t\tsession.agent.state.messages = [];\n\t}\n\n\tprivate patchSessionManager(manager: SessionManager): void {\n\t\tObject.defineProperty(manager, \"appendLabelChange\", {\n\t\t\tconfigurable: true,\n\t\t\tvalue: (entryId: string, label?: string) => {\n\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\"set label\",\n\t\t\t\t\tthis.client.requestInternal<void>({ type: \"set_label\", entryId, label }).then(() => this.refreshSessionView()),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate refreshSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst sessionFile = session.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = SessionManager.open(sessionFile, currentManager.getSessionDir(), currentManager.getCwd());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: refreshed });\n\t\tthis.patchSessionManager(refreshed);\n\t\tsession.agent.state.messages = refreshed.buildSessionContext().messages;\n\t}\n\n\tprivate observeEvent(event: RpcEvent): void {\n\t\tconst session = super.session;\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.streaming = true;\n\t\t\t\tbreak;\n\t\t\tcase \"agent_end\":\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.refreshSessionView();\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.steeringMessages = [...event.steering];\n\t\t\t\tthis.followUpMessages = [...event.followUp];\n\t\t\t\tbreak;\n\t\t\tcase \"model_changed\":\n\t\t\t\tsession.agent.state.model = event.model;\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\n\t\t\t\tbreak;\n\t\t\tcase \"context_window_changed\":\n\t\t\t\tif (session.agent.state.model) session.agent.state.model = { ...session.agent.state.model, contextWindow: event.contextWindow };\n\t\t\t\tbreak;\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.remoteSessionName = event.name;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}
|