@bastani/atomic 0.9.39-alpha.2 → 0.9.40-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 +42 -0
- package/dist/builtin/intercom/CHANGELOG.md +20 -0
- package/dist/builtin/intercom/broker/broker.ts +523 -72
- package/dist/builtin/intercom/broker/client.ts +136 -5
- package/dist/builtin/intercom/broker/database-wake-up-bus.ts +274 -0
- package/dist/builtin/intercom/broker/group-membership.ts +2 -2
- package/dist/builtin/intercom/broker/multinode-router.ts +1500 -0
- package/dist/builtin/intercom/broker/multinode-state-store.ts +569 -0
- package/dist/builtin/intercom/broker/open-broker-state.ts +160 -0
- package/dist/builtin/intercom/broker/paths.ts +6 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +14 -0
- package/dist/builtin/intercom/broker/recipient-receipts.ts +93 -0
- package/dist/builtin/intercom/broker/restoring-recipients.ts +263 -0
- package/dist/builtin/intercom/broker/send-handler.ts +241 -25
- package/dist/builtin/intercom/broker/session-id-reclaim.ts +41 -0
- package/dist/builtin/intercom/broker/socket-writes.ts +47 -0
- package/dist/builtin/intercom/broker/spawn.ts +10 -2
- package/dist/builtin/intercom/broker/sql-held-send-store.ts +96 -0
- package/dist/builtin/intercom/broker/sql-known-session-store.ts +129 -0
- package/dist/builtin/intercom/broker/sql-lease-store.ts +194 -0
- package/dist/builtin/intercom/broker/sql-outbox-store.ts +249 -0
- package/dist/builtin/intercom/broker/sql-pending-ask-store.ts +105 -0
- package/dist/builtin/intercom/broker/sql-restoring-reservation-store.ts +295 -0
- package/dist/builtin/intercom/broker/sql-sent-message-authority.ts +126 -0
- package/dist/builtin/intercom/broker/supervisor-channel.ts +10 -0
- package/dist/builtin/intercom/broker/wake-up-bus.ts +60 -0
- package/dist/builtin/intercom/index.bundle.mjs +793 -91
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/retry-policy.ts +4 -0
- package/dist/builtin/intercom/session-target.ts +24 -0
- package/dist/builtin/intercom/types.ts +57 -3
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +37 -0
- package/dist/builtin/subagents/README.md +18 -12
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/agent-browser/SKILL.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/BROWSER.md +55 -8
- package/dist/builtin/subagents/skills/cua-driver/EMBEDDING.md +7 -2
- package/dist/builtin/subagents/skills/cua-driver/LINUX.md +7 -1
- package/dist/builtin/subagents/skills/cua-driver/MACOS.md +151 -27
- package/dist/builtin/subagents/skills/cua-driver/RUNTIME.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/SKILL.md +33 -17
- package/dist/builtin/subagents/skills/cua-driver/WINDOWS.md +5 -0
- package/dist/builtin/subagents/skills/cua-driver/WORKFLOW.md +46 -8
- package/dist/builtin/subagents/skills/subagent/SKILL.md +18 -20
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +8032 -6034
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +32 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +8 -8
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +4 -2
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +22 -9
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/extract.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/harden.md +2 -4
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +4 -4
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +6 -6
- package/dist/builtin/workflows/skills/impeccable/reference/onboard.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +10 -0
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/VERSION +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/impeccable +6 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/impeccable.cmd +47 -22
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-dom.js +34 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +25 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +33 -8
- package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +7 -7
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +22855 -22308
- package/dist/builtin/workflows/src/index.js +106 -35
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +16 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +2 -0
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +6 -6
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +6 -3
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.d.ts +7 -2
- package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.js +29 -12
- package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
- package/dist/core/agent-session-recovery.d.ts +14 -0
- package/dist/core/agent-session-recovery.d.ts.map +1 -0
- package/dist/core/agent-session-recovery.js +83 -0
- package/dist/core/agent-session-recovery.js.map +1 -0
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +4 -6
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +13 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +4 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +6 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +21 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +4 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +9 -2
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +29 -0
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -2
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +1 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/session-events.d.ts +30 -2
- package/dist/core/extensions/session-events.d.ts.map +1 -1
- package/dist/core/extensions/session-events.js.map +1 -1
- package/dist/core/sdk-types.d.ts +3 -2
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-storage.d.ts.map +1 -1
- package/dist/core/session-storage.js +15 -9
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/storage/process-selection.d.ts +39 -0
- package/dist/core/storage/process-selection.d.ts.map +1 -0
- package/dist/core/storage/process-selection.js +154 -0
- package/dist/core/storage/process-selection.js.map +1 -0
- package/dist/core/storage/provider.d.ts +6 -1
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +3 -2
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/storage/selection.d.ts +1 -1
- package/dist/core/storage/selection.d.ts.map +1 -1
- package/dist/core/storage/selection.js.map +1 -1
- package/dist/core/storage/session/jsonl-session-store.d.ts +2 -0
- package/dist/core/storage/session/jsonl-session-store.d.ts.map +1 -1
- package/dist/core/storage/session/jsonl-session-store.js +38 -2
- package/dist/core/storage/session/jsonl-session-store.js.map +1 -1
- package/dist/core/tasks/completion.d.ts +11 -2
- package/dist/core/tasks/completion.d.ts.map +1 -1
- package/dist/core/tasks/completion.js +40 -16
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/pause.d.ts +4 -1
- package/dist/core/tasks/pause.d.ts.map +1 -1
- package/dist/core/tasks/pause.js +8 -5
- package/dist/core/tasks/pause.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +7 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +11 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +4 -0
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +3 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +2 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts +2 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +29 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +4 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-args.js +4 -0
- package/dist/modes/interactive-engine/engine-args.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js +4 -4
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +4 -0
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +4 -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 +3 -0
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-command-timeouts.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-timeouts.js +1 -0
- package/dist/modes/rpc/rpc-command-timeouts.js.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.js +6 -1
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +12 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +44 -11
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.js +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/background-tasks.md +5 -3
- package/docs/computer-use.md +2 -2
- package/docs/environment-variables.md +4 -1
- package/docs/extensions/events.md +29 -2
- package/docs/getting-started/first-session.md +1 -1
- package/docs/guides/intercom.md +1 -1
- package/docs/intercom/operations.md +103 -1
- package/docs/intercom/reference.md +10 -3
- package/docs/intercom.md +8 -6
- package/docs/keybindings.md +1 -1
- package/docs/models.md +1 -1
- package/docs/providers.md +4 -2
- package/docs/reference/cli.md +5 -0
- package/docs/rpc/protocol.md +19 -0
- package/docs/rpc.md +3 -0
- package/docs/sdk/web-server.md +1 -1
- package/docs/sdk.md +5 -2
- package/docs/sessions.md +17 -1
- package/docs/settings.md +5 -3
- package/docs/skills.md +1 -1
- package/docs/storage.md +54 -3
- package/docs/subagents.md +49 -9
- package/docs/usage.md +1 -1
- package/docs/windows.md +14 -4
- package/docs/workflows/api-reference.md +1 -1
- package/docs/workflows/authoring.md +1 -1
- package/docs/workflows/operations.md +10 -6
- package/npm-shrinkwrap.json +37 -37
- package/package.json +4 -4
|
@@ -85,7 +85,7 @@ export class EngineRenderService {
|
|
|
85
85
|
}
|
|
86
86
|
renderTool(command) {
|
|
87
87
|
let record = this.records.get(command.componentId);
|
|
88
|
-
if (record?.kind !== "tool") {
|
|
88
|
+
if (record?.kind !== "tool" || record.runner !== this.session?.extensionRunner) {
|
|
89
89
|
const session = this.boundSession();
|
|
90
90
|
this.disposeRecord(command.componentId);
|
|
91
91
|
const terminal = this.createTerminal(command.componentId);
|
|
@@ -97,7 +97,7 @@ export class EngineRenderService {
|
|
|
97
97
|
});
|
|
98
98
|
const component = new ToolExecutionComponent(command.toolName, command.toolCallId, command.args, { showImages: command.showImages, imageWidthCells: command.imageWidthCells, outputPad: command.outputPad }, session.extensionRunner.resolveToolRenderers(command.toolName, () => session.getToolDefinition(command.toolName)), tui, session.sessionManager.getCwd());
|
|
99
99
|
tui.addChild(component);
|
|
100
|
-
record = { kind: "tool", component, terminal, tui };
|
|
100
|
+
record = { kind: "tool", component, terminal, tui, runner: session.extensionRunner };
|
|
101
101
|
this.records.set(command.componentId, record);
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
@@ -120,7 +120,7 @@ export class EngineRenderService {
|
|
|
120
120
|
}
|
|
121
121
|
renderMessage(command) {
|
|
122
122
|
let record = this.records.get(command.componentId);
|
|
123
|
-
if (record?.kind !== "message") {
|
|
123
|
+
if (record?.kind !== "message" || record.runner !== this.session?.extensionRunner) {
|
|
124
124
|
const session = this.boundSession();
|
|
125
125
|
this.disposeRecord(command.componentId);
|
|
126
126
|
const terminal = this.createTerminal(command.componentId);
|
|
@@ -133,7 +133,7 @@ export class EngineRenderService {
|
|
|
133
133
|
const message = command.message;
|
|
134
134
|
const component = new CustomMessageComponent(message, session.extensionRunner.getMessageRenderer(message.customType), undefined, command.outputPad);
|
|
135
135
|
tui.addChild(component);
|
|
136
|
-
record = { kind: "message", component, terminal, tui };
|
|
136
|
+
record = { kind: "message", component, terminal, tui, runner: session.extensionRunner };
|
|
137
137
|
this.records.set(command.componentId, record);
|
|
138
138
|
}
|
|
139
139
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-render-service.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Terminal } from \"@earendil-works/pi-tui\";\nimport { type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { CustomMessage } from \"../../core/messages.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport { CustomMessageComponent } from \"../interactive/components/custom-message.ts\";\nimport { ToolExecutionComponent } from \"../interactive/components/tool-execution.ts\";\nimport {\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tparseInteractiveEngineCommand,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ntype ToolRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_tool_render\" }>;\ntype MessageRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_message_render\" }>;\n\n/**\n * Cached per-componentId render state. Records are REUSED across render\n * requests: recreating (and re-seeding) the component on every request made\n * the seeding setters call `ui.requestRender()` each time, whose eventual\n * terminal write emitted `engine_custom_invalidate` back to the host, which\n * re-sent the render request — a self-sustaining host⇄engine render\n * ping-pong that presented as full-screen TUI flicker (quit/pause while a\n * workflow stage streams). Reuse plus idempotent seeding setters lets the\n * loop converge after at most one round trip while still forwarding\n * legitimate async invalidations (e.g. image conversion).\n */\ntype RenderRecord =\n\t| { kind: \"message\"; component: CustomMessageComponent; terminal: RenderTerminal; tui: TUI }\n\t| { kind: \"tool\"; component: ToolExecutionComponent; terminal: RenderTerminal; tui: TUI };\n\nclass RenderTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly requestRender: () => void;\n\tconstructor(requestRender: () => void) {\n\t\tthis.requestRender = requestRender;\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.requestRender();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n\tsetProgramStatus(): void {}\n}\n\nexport class EngineRenderService {\n\tprivate readonly records = new Map<string, RenderRecord>();\n\tprivate session: AgentSession | undefined;\n\tprivate readonly write: (line: string) => void;\n\n\tconstructor(write: (line: string) => void) {\n\t\tthis.write = write;\n\t}\n\n\tbindSession(session: AgentSession): void {\n\t\tthis.dispose();\n\t\tthis.session = session;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command?.type.startsWith(\"engine_\") || command.type.startsWith(\"engine_custom_\")) return false;\n\t\tif (command.type === \"engine_render_dispose\") {\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\treturn true;\n\t\t}\n\t\tif (command.type !== \"engine_tool_render\" && command.type !== \"engine_message_render\") return false;\n\t\tconst name =\n\t\t\tcommand.type === \"engine_tool_render\"\n\t\t\t\t? `tool:${command.toolName}`\n\t\t\t\t: `message:${command.message.customType ?? \"custom\"}`;\n\t\tvoid runCallback({ kind: \"renderer\", name }, async () => {\n\t\t\treturn command.type === \"engine_tool_render\" ? this.renderTool(command) : this.renderMessage(command);\n\t\t})\n\t\t\t.then((lines) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines: [`Remote renderer failed: ${error.message}`],\n\t\t\t\t}),\n\t\t\t);\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const id of [...this.records.keys()]) this.disposeRecord(id);\n\t}\n\n\tprivate boundSession(): AgentSession {\n\t\tconst session = this.session;\n\t\tif (!session) throw new Error(\"Renderer session is not bound\");\n\t\treturn session;\n\t}\n\n\tprivate createTerminal(componentId: string): RenderTerminal {\n\t\treturn new RenderTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t}\n\n\tprivate renderTool(command: ToolRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"tool\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tcommand.toolName,\n\t\t\t\tcommand.toolCallId,\n\t\t\t\tcommand.args,\n\t\t\t\t{ showImages: command.showImages, imageWidthCells: command.imageWidthCells, outputPad: command.outputPad },\n\t\t\t\tsession.extensionRunner.resolveToolRenderers(command.toolName, () =>\n\t\t\t\t\tsession.getToolDefinition(command.toolName),\n\t\t\t\t),\n\t\t\t\ttui,\n\t\t\t\tsession.sessionManager.getCwd(),\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"tool\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\trecord.component.updateArgs(command.args);\n\t\t\trecord.component.setShowImages(command.showImages);\n\t\t\trecord.component.setImageWidthCells(command.imageWidthCells);\n\t\t\trecord.component.setOutputPad(command.outputPad ?? 1);\n\t\t}\n\t\tconst tool = record.component;\n\t\tif (command.executionStarted) tool.markExecutionStarted();\n\t\tif (command.argsComplete) tool.setArgsComplete();\n\t\ttool.setExpanded(command.expanded);\n\t\tif (command.result) {\n\t\t\ttool.updateResult(\n\t\t\t\tcommand.result as unknown as Parameters<ToolExecutionComponent[\"updateResult\"]>[0],\n\t\t\t\tcommand.isPartial,\n\t\t\t);\n\t\t}\n\t\treturn tool.render(command.width);\n\t}\n\n\tprivate renderMessage(command: MessageRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"message\") {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst message = command.message as unknown as CustomMessage<object>;\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessage,\n\t\t\t\tsession.extensionRunner.getMessageRenderer(message.customType),\n\t\t\t\tundefined,\n\t\t\t\tcommand.outputPad,\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"message\", component, terminal, tui };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t}\n\t\trecord.component.setExpanded(command.expanded);\n\t\trecord.component.setOutputPad(command.outputPad);\n\t\treturn record.component.render(command.width);\n\t}\n\n\tprivate disposeRecord(id: string): void {\n\t\tconst record = this.records.get(id);\n\t\tif (!record) return;\n\t\tthis.records.delete(id);\n\t\tif (record.kind === \"tool\") record.component.dispose();\n\t\trecord.tui.stop();\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"engine-render-service.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/engine-render-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Terminal } from \"@earendil-works/pi-tui\";\nimport { type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { getAgentDir } from \"../../config.js\";\nimport type { AgentSession } from \"../../core/agent-session.js\";\nimport { runCallback } from \"../../core/callback-activity.ts\";\nimport type { CustomMessage } from \"../../core/messages.ts\";\nimport { ensurePngTranscoder } from \"../../utils/image-convert.ts\";\nimport { CustomMessageComponent } from \"../interactive/components/custom-message.ts\";\nimport { ToolExecutionComponent } from \"../interactive/components/tool-execution.ts\";\nimport {\n\ttype InteractiveEngineCommand,\n\ttype InteractiveEngineMessage,\n\tparseInteractiveEngineCommand,\n\tserializeInteractiveEngineMessage,\n} from \"./protocol.ts\";\n\ntype ToolRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_tool_render\" }>;\ntype MessageRenderCommand = Extract<InteractiveEngineCommand, { type: \"engine_message_render\" }>;\n\n/**\n * Cached per-componentId render state. Records are REUSED across render\n * requests: recreating (and re-seeding) the component on every request made\n * the seeding setters call `ui.requestRender()` each time, whose eventual\n * terminal write emitted `engine_custom_invalidate` back to the host, which\n * re-sent the render request — a self-sustaining host⇄engine render\n * ping-pong that presented as full-screen TUI flicker (quit/pause while a\n * workflow stage streams). Reuse plus idempotent seeding setters lets the\n * loop converge after at most one round trip while still forwarding\n * legitimate async invalidations (e.g. image conversion). A record is rebuilt\n * once the session's extension runner changes, so rows rendered before\n * deferred resources loaded pick up the extensions' renderers.\n */\ntype RenderRecord = { runner: AgentSession[\"extensionRunner\"]; terminal: RenderTerminal; tui: TUI } & (\n\t| { kind: \"message\"; component: CustomMessageComponent }\n\t| { kind: \"tool\"; component: ToolExecutionComponent }\n);\n\nclass RenderTerminal implements Terminal {\n\tcolumns = 80;\n\trows = 24;\n\tkittyProtocolActive = false;\n\tprivate readonly requestRender: () => void;\n\tconstructor(requestRender: () => void) {\n\t\tthis.requestRender = requestRender;\n\t}\n\tstart(): void {}\n\tstop(): void {}\n\tasync drainInput(): Promise<void> {}\n\twrite(): void {\n\t\tthis.requestRender();\n\t}\n\tmoveBy(): void {}\n\thideCursor(): void {}\n\tshowCursor(): void {}\n\tclearLine(): void {}\n\tclearFromCursor(): void {}\n\tclearScreen(): void {}\n\tsetTitle(): void {}\n\tsetProgress(): void {}\n\tsetProgramStatus(): void {}\n}\n\nexport class EngineRenderService {\n\tprivate readonly records = new Map<string, RenderRecord>();\n\tprivate session: AgentSession | undefined;\n\tprivate readonly write: (line: string) => void;\n\n\tconstructor(write: (line: string) => void) {\n\t\tthis.write = write;\n\t}\n\n\tbindSession(session: AgentSession): void {\n\t\tthis.dispose();\n\t\tthis.session = session;\n\t}\n\n\thandleLine(line: string): boolean {\n\t\tconst command = parseInteractiveEngineCommand(line);\n\t\tif (!command?.type.startsWith(\"engine_\") || command.type.startsWith(\"engine_custom_\")) return false;\n\t\tif (command.type === \"engine_render_dispose\") {\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\treturn true;\n\t\t}\n\t\tif (command.type !== \"engine_tool_render\" && command.type !== \"engine_message_render\") return false;\n\t\tconst name =\n\t\t\tcommand.type === \"engine_tool_render\"\n\t\t\t\t? `tool:${command.toolName}`\n\t\t\t\t: `message:${command.message.customType ?? \"custom\"}`;\n\t\tvoid runCallback({ kind: \"renderer\", name }, async () => {\n\t\t\treturn command.type === \"engine_tool_render\" ? this.renderTool(command) : this.renderMessage(command);\n\t\t})\n\t\t\t.then((lines) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((error: Error) =>\n\t\t\t\tthis.send({\n\t\t\t\t\ttype: \"engine_custom_frame\",\n\t\t\t\t\tcomponentId: command.componentId,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tlines: [`Remote renderer failed: ${error.message}`],\n\t\t\t\t}),\n\t\t\t);\n\t\treturn true;\n\t}\n\n\tdispose(): void {\n\t\tfor (const id of [...this.records.keys()]) this.disposeRecord(id);\n\t}\n\n\tprivate boundSession(): AgentSession {\n\t\tconst session = this.session;\n\t\tif (!session) throw new Error(\"Renderer session is not bound\");\n\t\treturn session;\n\t}\n\n\tprivate createTerminal(componentId: string): RenderTerminal {\n\t\treturn new RenderTerminal(() => this.send({ type: \"engine_custom_invalidate\", componentId }));\n\t}\n\n\tprivate renderTool(command: ToolRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"tool\" || record.runner !== this.session?.extensionRunner) {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tcommand.toolName,\n\t\t\t\tcommand.toolCallId,\n\t\t\t\tcommand.args,\n\t\t\t\t{ showImages: command.showImages, imageWidthCells: command.imageWidthCells, outputPad: command.outputPad },\n\t\t\t\tsession.extensionRunner.resolveToolRenderers(command.toolName, () =>\n\t\t\t\t\tsession.getToolDefinition(command.toolName),\n\t\t\t\t),\n\t\t\t\ttui,\n\t\t\t\tsession.sessionManager.getCwd(),\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"tool\", component, terminal, tui, runner: session.extensionRunner };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t\trecord.component.updateArgs(command.args);\n\t\t\trecord.component.setShowImages(command.showImages);\n\t\t\trecord.component.setImageWidthCells(command.imageWidthCells);\n\t\t\trecord.component.setOutputPad(command.outputPad ?? 1);\n\t\t}\n\t\tconst tool = record.component;\n\t\tif (command.executionStarted) tool.markExecutionStarted();\n\t\tif (command.argsComplete) tool.setArgsComplete();\n\t\ttool.setExpanded(command.expanded);\n\t\tif (command.result) {\n\t\t\ttool.updateResult(\n\t\t\t\tcommand.result as unknown as Parameters<ToolExecutionComponent[\"updateResult\"]>[0],\n\t\t\t\tcommand.isPartial,\n\t\t\t);\n\t\t}\n\t\treturn tool.render(command.width);\n\t}\n\n\tprivate renderMessage(command: MessageRenderCommand): string[] {\n\t\tlet record = this.records.get(command.componentId);\n\t\tif (record?.kind !== \"message\" || record.runner !== this.session?.extensionRunner) {\n\t\t\tconst session = this.boundSession();\n\t\t\tthis.disposeRecord(command.componentId);\n\t\t\tconst terminal = this.createTerminal(command.componentId);\n\t\t\tterminal.columns = Math.max(1, command.width);\n\t\t\tconst tui = new TuiMainScreen(terminal, undefined, getAgentDir());\n\t\t\tensurePngTranscoder(() => {\n\t\t\t\ttui.invalidate();\n\t\t\t\ttui.requestRender();\n\t\t\t});\n\t\t\tconst message = command.message as unknown as CustomMessage<object>;\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessage,\n\t\t\t\tsession.extensionRunner.getMessageRenderer(message.customType),\n\t\t\t\tundefined,\n\t\t\t\tcommand.outputPad,\n\t\t\t);\n\t\t\ttui.addChild(component);\n\t\t\trecord = { kind: \"message\", component, terminal, tui, runner: session.extensionRunner };\n\t\t\tthis.records.set(command.componentId, record);\n\t\t} else {\n\t\t\trecord.terminal.columns = Math.max(1, command.width);\n\t\t}\n\t\trecord.component.setExpanded(command.expanded);\n\t\trecord.component.setOutputPad(command.outputPad);\n\t\treturn record.component.render(command.width);\n\t}\n\n\tprivate disposeRecord(id: string): void {\n\t\tconst record = this.records.get(id);\n\t\tif (!record) return;\n\t\tthis.records.delete(id);\n\t\tif (record.kind === \"tool\") record.component.dispose();\n\t\trecord.tui.stop();\n\t}\n\n\tprivate send(message: InteractiveEngineMessage): void {\n\t\tthis.write(serializeInteractiveEngineMessage(message));\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,KAAK,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AAEjH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -692,6 +692,10 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
|
|
|
692
692
|
await this.initializeFromEngine();
|
|
693
693
|
},
|
|
694
694
|
},
|
|
695
|
+
startPendingRecovery: {
|
|
696
|
+
configurable: true,
|
|
697
|
+
value: (reason) => this.client.requestInternal({ type: "start_pending_recovery", reason }),
|
|
698
|
+
},
|
|
695
699
|
setSessionName: {
|
|
696
700
|
configurable: true,
|
|
697
701
|
value: async (name) => {
|
|
@@ -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 { randomUUID } from \"node:crypto\";\nimport { dirname } from \"node:path\";\nimport type { AuthInteraction } from \"@bastani/pi-ai\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentSession, CompactionReason } from \"../../core/agent-session.js\";\nimport { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from \"../../core/agent-session-runtime.ts\";\nimport type { ModelMutationOptions, PromptOptions } from \"../../core/agent-session-types.js\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport type { WorkflowActivityFrame } from \"../../core/extensions/workflow-events.js\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport { serializeSessionMutation } from \"../../core/session-mutation-queue.ts\";\nimport type { ToolStatusReport } from \"../../core/tool-status.js\";\nimport { captureHerdrEnvironment } from \"../../extensions/herdr/environment.js\";\nimport { releaseUnownedPaneRegistration } from \"../../extensions/herdr/pane-owner.js\";\nimport { canonicalizePath } from \"../../utils/paths.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport { isRpcTransportFailure, markRpcTransportFailure, rpcTransportError } from \"../rpc/rpc-transport-error.ts\";\nimport type {\n\tRpcAutocompleteItem,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcModelCatalog,\n\tRpcResourceExtension,\n\tRpcSlashCommand,\n} from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { InteractiveEngineGenerationEndedListener } from \"./engine-generation.ts\";\nimport { type EngineDiagnosticListener, EngineHealthController } from \"./engine-health.ts\";\nimport { EngineSessionStats } from \"./engine-session-stats.js\";\nimport {\n\ttype AtomicOAuthLoginCallbacks,\n\tloginIsolatedApiKeyProvider,\n\tloginIsolatedOAuthProvider,\n} from \"./isolated-auth.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 { RemoteQueuePause } from \"./remote-queue-pause.js\";\nimport { InteractiveEngineResourceReadinessError } from \"./resource-readiness-error.ts\";\n\ntype ResourceExtensionsListener = (extensions: readonly RpcResourceExtension[]) => void;\ntype QueueSnapshot = { steering: string[]; followUp: string[] };\n\nfunction applyPersistedModelDefault(session: AgentSession, model: Model<Api>, alreadyInScope: boolean): void {\n\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\tif (alreadyInScope || session.scopedModels.length === 0) return;\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\nfunction thinkingPersistTarget(result: {\n\tprovider?: string;\n\tmodelId?: string;\n}): { provider: string; modelId: string } | undefined {\n\tif (!result.provider || !result.modelId) return undefined;\n\treturn { provider: result.provider, modelId: result.modelId };\n}\n\nfunction applyPersistedThinkingDefault(\n\tsession: AgentSession,\n\tlevel: AgentSession[\"thinkingLevel\"],\n\ttarget?: { provider: string; modelId: string },\n): void {\n\tif (target) {\n\t\tsession.settingsManager.setModelThinkingLevel(target.provider, target.modelId, level);\n\t}\n\tsession.settingsManager.setDefaultThinkingLevel(level);\n}\n\ntype PendingQueueClear = {\n\tsnapshot: QueueSnapshot;\n\tqueueUpdateGeneration: number;\n\tcount: number;\n\tsucceeded: boolean;\n};\n\n/**\n * Owns Atomic's local interactive host facade and child-process engine.\n *\n * This runtime is deliberately not a RemoteSession adapter. Its JSONL RPC,\n * rendering, custom UI, and recovery lifecycle stay separate from pi-client's\n * protocol lease lifecycle.\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 compactionReason: CompactionReason | undefined;\n\tprivate readonly activeBashRequestIds = new Map<string | symbol, string>();\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\t/** Bumped by every authoritative queue_update. */\n\tprivate queueUpdateGeneration = 0;\n\t/** Bumped by local thinking mutations and thinking_level_changed events. */\n\tprivate thinkingEpoch = 0;\n\t/** Clears started before the next queue_update share one rollback snapshot. */\n\tprivate pendingQueueClear: PendingQueueClear | undefined;\n\tprivate engineCallbackActive = false;\n\tprivate readonly queuePause: RemoteQueuePause;\n\tprivate readonly sessionStats: EngineSessionStats;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate readonly health: EngineHealthController;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\tprivate disposed = false;\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate readonly remoteModelCatalog: RemoteModelCatalog;\n\tprivate resourceOverlaps: ResourceOverlap[] = [];\n\tprivate readonly resourceExtensionsListeners: ResourceExtensionsListener[] = [];\n\tprivate resourceExtensions: RpcResourceExtension[] = [];\n\tprivate resourcesInitializedGeneration = 0;\n\tprivate resourceInitialization: { generation: number; promise: Promise<void> } | undefined;\n\tprivate readonly retiredResourceGenerations = new Set<number>();\n\tprivate readonly reportedResourceFailureGenerations = new Set<number>();\n\tprivate initializationTail: Promise<void> | undefined;\n\tprivate engineRecoveryFailure: Error | undefined;\n\tprivate promptCancellationEpoch = 0;\n\tprivate hostExtensionUIReset: (() => void) | undefined;\n\n\tconstructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient) {\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\tlocalRuntime.modelFallbackReason,\n\t\t);\n\t\tthis.adoptSessionStores(localRuntime);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.remoteModelCatalog = new RemoteModelCatalog(client);\n\t\tthis.queuePause = new RemoteQueuePause(client);\n\t\tthis.sessionStats = new EngineSessionStats(client);\n\t\tthis.health = new EngineHealthController({\n\t\t\tstop: () => this.client.stop(),\n\t\t\trestart: async () => {\n\t\t\t\tthis.engineRecoveryFailure = undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst manager = super.session.sessionManager;\n\t\t\t\t\tawait this.client.restart(manager.isPersisted() ? manager.getSessionId() : undefined, {\n\t\t\t\t\t\tcwd: manager.getCwd(),\n\t\t\t\t\t\tsessionDirectory: manager.getSessionDir() || undefined,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failure = markRpcTransportFailure(error);\n\t\t\t\t\tthis.engineRecoveryFailure = failure;\n\t\t\t\t\tthrow failure;\n\t\t\t\t}\n\t\t\t},\n\t\t\tclearActivity: () => {\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.engineCallbackActive = false;\n\t\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t},\n\t\t});\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t\tthis.client.onGenerationEnded((event) => {\n\t\t\tthis.retiredResourceGenerations.add(event.generation);\n\t\t\tif (event.generation === this.client.getGeneration()) this.updateResourceExtensions([]);\n\t\t\tthis.health.handleGenerationEnded(event);\n\t\t});\n\t\t// Production RpcClient instances expose engine lifecycle messages. Keep the\n\t\t// subscription optional so focused runtime test doubles that exercise only\n\t\t// session/model/bash behavior do not need to implement unrelated transport\n\t\t// surfaces.\n\t\tthis.client.onInteractiveEngineMessage?.((message) => {\n\t\t\tif (message.type === \"engine_extension_ui_reset\") {\n\t\t\t\tthis.hostExtensionUIReset?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type !== \"engine_resources_ready\" && message.type !== \"engine_resources_failed\") return;\n\t\t\tconst observedGeneration = this.client.getGeneration();\n\t\t\tvoid this.waitUntilResourcesReady().catch((error: Error) => {\n\t\t\t\tconst generation =\n\t\t\t\t\terror instanceof InteractiveEngineResourceReadinessError ? error.generation : observedGeneration;\n\t\t\t\tif (this.reportedResourceFailureGenerations.has(generation)) return;\n\t\t\t\tthis.reportedResourceFailureGenerations.add(generation);\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: error.message,\n\t\t\t\t});\n\t\t\t});\n\t\t});\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 openTaskInspector(taskId?: string): Promise<void> {\n\t\tawait this.client.requestInternal({ type: \"open_task_inspector\", ...(taskId ? { taskId } : {}) });\n\t}\n\t/** The engine owns extensions and tools; the host session has neither. */\n\tasync getToolStatus(): Promise<ToolStatusReport> {\n\t\treturn this.client.requestInternal<ToolStatusReport>({ type: \"get_tools\" });\n\t}\n\tasync initializeFromEngine(generation = this.client.getGeneration?.()): Promise<void> {\n\t\tconst run = this.initializationTail\n\t\t\t? this.initializationTail.then(() => this.initializeFromEngineGeneration(generation))\n\t\t\t: this.initializeFromEngineGeneration(generation);\n\t\tthis.initializationTail = run.catch(() => {});\n\t\treturn run;\n\t}\n\n\tprivate async settleEngineResync(): Promise<void> {\n\t\tawait this.initializationTail;\n\t}\n\n\tprivate async initializeFromEngineGeneration(generation: number | undefined): Promise<void> {\n\t\tif (this.disposed || (generation !== undefined && !this.isCurrentResourceGeneration(generation))) return;\n\t\ttry {\n\t\t\tthis.sessionStats.reset();\n\t\t\tconst state = await this.client.getState();\n\t\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({\n\t\t\t\ttype: \"get_available_models\",\n\t\t\t\tallowPartialResources: true,\n\t\t\t});\n\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\tif (\n\t\t\t\t(super.session.sessionManager.isPersisted() && state.sessionId !== super.session.sessionId) ||\n\t\t\t\t(state.sessionLocation &&\n\t\t\t\t\tcanonicalizePath(dirname(state.sessionLocation)) !==\n\t\t\t\t\t\tcanonicalizePath(super.session.sessionManager.getSessionDir()))\n\t\t\t) {\n\t\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t\t});\n\t\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\t}\n\t\t\tconst session = super.session;\n\t\t\tif (\n\t\t\t\tstate.projectTrusted !== undefined &&\n\t\t\t\tsession.settingsManager.isProjectTrusted() !== state.projectTrusted\n\t\t\t) {\n\t\t\t\t// The child owns trust hooks/decisions. The host only mirrors their result.\n\t\t\t\tsession.settingsManager.setProjectTrusted(state.projectTrusted);\n\t\t\t\tawait session.settingsManager.reload();\n\t\t\t\tawait session.resourceLoader.reload();\n\t\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\t}\n\t\t\tthis.remoteModelCatalog.apply(catalog);\n\t\t\tthis.remoteModelCatalog.patch(session);\n\t\t\t(session.agent.state as { model?: Model<Api> }).model = state.model;\n\t\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\t\tsession.agent.steeringMode = state.steeringMode;\n\t\t\tsession.agent.followUpMode = state.followUpMode;\n\t\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t\t\tthis.remoteSessionName = state.sessionName;\n\t\t\tthis.remoteSessionFile = state.sessionLocation;\n\t\t\tthis.streaming = state.isStreaming;\n\t\t\tthis.compacting = state.isCompacting;\n\t\t\tthis.compactionReason = state.isCompacting ? state.compactionReason : undefined;\n\t\t\tthis.queuePause.synchronize(state.queuedMessagesPaused === true);\n\t\t\tthis.replaceModelFallback(state.modelFallbackMessage, state.modelFallbackReason);\n\t\t\tawait this.refreshSessionView();\n\t\t\tthis.engineCallbackActive = false;\n\t\t\tthis.health.clearUnresponsive();\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\t\tthis.remoteCommands.refresh();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\toverride async loginOAuthProvider(provider: string, callbacks: AtomicOAuthLoginCallbacks) {\n\t\treturn loginIsolatedOAuthProvider(super.session, this.client, this.remoteModelCatalog, provider, callbacks);\n\t}\n\n\toverride async loginApiKeyProvider(provider: string, interaction: AuthInteraction) {\n\t\treturn loginIsolatedApiKeyProvider(super.session, this.client, this.remoteModelCatalog, provider, interaction);\n\t}\n\n\toverride async logoutProvider(provider: string) {\n\t\tconst result = await this.client.logoutProvider(provider);\n\t\tthis.remoteModelCatalog.applyModels({ models: result.models, scopedModels: result.scopedModels ?? [] });\n\t\tawait super.session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\tsuper.session.modelRuntime.applyExternalProviderAuthStatus(provider, result.authStatus);\n\t\tawait super.session.refreshCurrentModelFromRegistry();\n\t\treturn result;\n\t}\n\n\tonDiagnostic(listener: EngineDiagnosticListener): () => void {\n\t\treturn this.health.onDiagnostic(listener);\n\t}\n\n\t/** Fires when fresh engine session stats arrive, so the host can repaint its footer. */\n\tonSessionStatsChanged(listener: () => void): () => void {\n\t\treturn this.sessionStats.onChange(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\t/** Workflow activity of the engine child, starting from its current snapshot. */\n\tonWorkflowActivity(listener: (frame: WorkflowActivityFrame) => void): () => void {\n\t\treturn this.client.onInteractiveEngineWorkflowActivity(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\t/** Report a native host trust dialog to the extension runner in this engine generation. */\n\tasync withProjectTrustPrompt<T>(\n\t\tkind: \"select\" | \"confirm\" | \"input\",\n\t\ttitle: string,\n\t\trun: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst generation = this.client.getGeneration();\n\t\tconst componentId = randomUUID();\n\t\tconst notify = (command: InteractiveEngineCommand) => {\n\t\t\tif (this.disposed || generation !== this.client.getGeneration()) return;\n\t\t\ttry {\n\t\t\t\tthis.sendEngineCommand(command);\n\t\t\t} catch {\n\t\t\t\t// Status notification failure must not prevent a host-owned trust decision.\n\t\t\t}\n\t\t};\n\t\tnotify({ type: \"engine_project_trust_start\", componentId, kind, title });\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\tnotify({ type: \"engine_project_trust_end\", componentId });\n\t\t}\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] {\n\t\treturn this.remoteCommands.getCommands();\n\t}\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void {\n\t\treturn this.remoteCommands.onChange(listener);\n\t}\n\tgetRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.client.getCommandCompletions(commandName, argumentPrefix);\n\t}\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\tasync waitUntilBound(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.client.waitForInteractiveEngineBound();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync waitUntilProjectTrustSettled(): Promise<void> {\n\t\tawait this.client.waitForInteractiveEngineProjectTrust();\n\t\tawait this.initializeFromEngine();\n\t}\n\tasync waitUntilResourcesReady(): Promise<void> {\n\t\twhile (true) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tconst generation = this.client.getGeneration();\n\t\t\tif (this.retiredResourceGenerations.has(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.client.waitForInteractiveEngineResources();\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isRpcTransportFailure(error)) throw error;\n\t\t\t\tthrow new InteractiveEngineResourceReadinessError(\n\t\t\t\t\tgeneration,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this.resourcesInitializedGeneration === generation) return;\n\n\t\t\tlet initialization = this.resourceInitialization;\n\t\t\tif (initialization?.generation !== generation) {\n\t\t\t\tconst promise = this.initializeFromEngine(generation).finally(() => {\n\t\t\t\t\tif (this.resourceInitialization?.generation === generation) this.resourceInitialization = undefined;\n\t\t\t\t});\n\t\t\t\tinitialization = { generation, promise };\n\t\t\t\tthis.resourceInitialization = initialization;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait initialization.promise;\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.throwIfUnavailable();\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.resourcesInitializedGeneration = generation;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate isCurrentResourceGeneration(generation: number): boolean {\n\t\treturn generation === this.client.getGeneration() && !this.retiredResourceGenerations.has(generation);\n\t}\n\n\tprivate async waitForReplacementGeneration(generation: number): Promise<void> {\n\t\twhile (generation === this.client.getGeneration()) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tawait sleep(1);\n\t\t}\n\t}\n\n\tprivate throwIfUnavailable(): void {\n\t\tif (this.disposed) throw rpcTransportError(\"Interactive engine runtime is disposed\");\n\t\tif (this.engineRecoveryFailure) throw this.engineRecoveryFailure;\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.client.getEnginePid();\n\t}\n\tgetEngineGeneration(): number {\n\t\treturn this.client.getGeneration();\n\t}\n\tisRecovering(): boolean {\n\t\treturn this.health.isRecovering();\n\t}\n\t/** Subscribe to host-local engine generation death (see engine-generation.ts). */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\treturn this.client.onGenerationEnded(listener);\n\t}\n\t/**\n\t * A heartbeat proves the child's event loop is turning again, so a stall the\n\t * watchdog already reported must stop arming the Ctrl+C escape hatch. Fed by a\n\t * dedicated client callback rather than a generic engine-message subscriber,\n\t * which would consume buffered startup custom-UI messages.\n\t */\n\tnoteEngineHeartbeat(): void {\n\t\tthis.health.clearUnresponsive();\n\t}\n\t/** True only when the engine is provably not answering (see EngineHealthController). */\n\tneedsExplicitTermination(): boolean {\n\t\treturn this.health.needsExplicitTermination();\n\t}\n\t/** Explicit user-driven engine termination and recovery (Ctrl+C escape hatch). */\n\tterminateAndRecover(): Promise<void> {\n\t\treturn this.health.terminate();\n\t}\n\tgetResourceOverlaps(): readonly ResourceOverlap[] {\n\t\treturn this.resourceOverlaps;\n\t}\n\tgetResourceExtensions(): readonly RpcResourceExtension[] {\n\t\treturn this.resourceExtensions;\n\t}\n\tonResourceExtensionsChanged(listener: ResourceExtensionsListener): () => void {\n\t\tthis.resourceExtensionsListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.resourceExtensionsListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.resourceExtensionsListeners.splice(index, 1);\n\t\t};\n\t}\n\tprivate updateResourceExtensions(extensions: readonly RpcResourceExtension[]): void {\n\t\tthis.resourceExtensions = [...extensions];\n\t\tfor (const listener of [...this.resourceExtensionsListeners]) listener(this.resourceExtensions);\n\t}\n\tasync synchronize(): Promise<void> {\n\t\tconst generation = this.client.getGeneration();\n\t\tconst state = await this.client.getState();\n\t\tif (!this.isCurrentResourceGeneration(generation)) return;\n\t\tthis.remoteSessionFile = state.sessionLocation;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void {\n\t\tthis.engineCallbackActive = active;\n\t}\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)\n\t\t\t\t.then(async (response) => {\n\t\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\t\tactivity: undefined,\n\t\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tif (diagnostic.source !== \"stderr\") this.engineCallbackActive = true;\n\t\tthis.health.publish(diagnostic);\n\t}\n\n\t/**\n\t * Extension UI belongs to the engine's sessions, not to this host's mirror session. The mirror is torn\n\t * down only after the engine has already switched and the new session's `session_start` has set its UI\n\t * (see `switchSession`), so a reset tied to that teardown would clear the new session's UI. The reset\n\t * therefore follows the engine's own lifecycle: `engine_extension_ui_reset` arrives on the same stream,\n\t * ahead of the new session's UI requests. Quitting still resets here, as it always has.\n\t */\n\toverride setBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.hostExtensionUIReset = beforeSessionInvalidate;\n\t\tsuper.setBeforeSessionInvalidate(\n\t\t\tbeforeSessionInvalidate &&\n\t\t\t\t(() => {\n\t\t\t\t\tif (this.disposed) beforeSessionInvalidate();\n\t\t\t\t}),\n\t\t);\n\t}\n\n\toverride async switchSession(\n\t\tsessionId: string,\n\t\toptions?: Parameters<AgentSessionRuntime[\"switchSession\"]>[1],\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionId, options?.cwdOverride, options?.sessionDirectory);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionId, {\n\t\t\t\tcwdOverride: options?.cwdOverride,\n\t\t\t\tsessionDirectory: options?.sessionDirectory,\n\t\t\t});\n\t\t\tawait this.initializeFromEngine();\n\t\t\tif (options?.withSession) await options.withSession(this.session.createReplacedSessionContext());\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 (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\n\t\telse await 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\",\n\t\t\tinputPath,\n\t\t\tcwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\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 (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * The child engine already settled (and persisted) its own turn before it\n\t * reported the replacement, and the host facade's `abort()` is `abortAndRecover()`\n\t * — an unbounded cooperative round trip. Re-entering it during teardown would\n\t * hang session replacement on an unresponsive or dead engine, which is exactly\n\t * what engine recovery exists to survive.\n\t */\n\tprotected override async settleActiveResponseBeforeTeardown(): Promise<void> {}\n\n\toverride dispose(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.disposePromise) return this.disposePromise;\n\t\tthis.disposed = true;\n\t\tthis.disposePromise = (async () => {\n\t\t\t// A quit the user asked for must reach the engine before it is stopped: the stop\n\t\t\t// is a SIGTERM, which the engine cannot tell from this process being signalled.\n\t\t\t// Optional like the other transport surfaces focused test doubles omit.\n\t\t\tconst unrecordedQuit = !options?.fromSignal && (await this.client.announceExplicitQuit?.()) === false;\n\t\t\t// EngineHealthController owns the first client stop and joins recovery.\n\t\t\tawait this.health.shutdown();\n\t\t\t// A replacement may have spawned while shutdown joined recovery; the\n\t\t\t// idempotent trailing stop closes that child before disposal returns.\n\t\t\tawait this.client.stop();\n\t\t\tif (unrecordedQuit) {\n\t\t\t\t// No engine child recorded the quit, so none released Herdr's registration, and a replacement started\n\t\t\t\t// during recovery may have registered again. Every child is stopped now; this host loads no Herdr reporter.\n\t\t\t\tconst herdr = captureHerdrEnvironment(process.env);\n\t\t\t\tif (herdr) await releaseUnownedPaneRegistration(herdr);\n\t\t\t}\n\t\t\tawait super.dispose(options);\n\t\t})();\n\t\treturn this.disposePromise;\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\tthis.sessionStats.track(session);\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\tcompactionReason: { configurable: true, get: () => this.compactionReason },\n\t\t\tisBashRunning: { configurable: true, get: () => this.activeBashRequestIds.size > 0 },\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\tqueuedMessagesPaused: { configurable: true, get: () => this.queuePause.isPaused },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: JsonAgentSessionEvent) => 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\tconst cancellationEpoch = this.promptCancellationEpoch;\n\t\t\t\t\tawait this.waitUntilResourcesReady();\n\t\t\t\t\tif (cancellationEpoch !== this.promptCancellationEpoch) return;\n\t\t\t\t\tconst disposition = await this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true, disposition);\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?: Parameters<AgentSession[\"executeBash\"]>[1],\n\t\t\t\t\toptions?: Parameters<AgentSession[\"executeBash\"]>[2],\n\t\t\t\t) => {\n\t\t\t\t\tconst key = options?.id ?? Symbol(\"isolated-bash-request\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await this.client.userBashWithUpdates(command, (delta, channel) => onChunk?.(delta, channel), {\n\t\t\t\t\t\t\texcludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t\tonRequestId: (requestId) => this.activeBashRequestIds.set(key, requestId),\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.activeBashRequestIds.delete(key);\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: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (id?: string) => {\n\t\t\t\t\tif (id === undefined) this.dispatchBestEffort(\"abort bash\", this.client.abortBash());\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst requestId = this.activeBashRequestIds.get(id);\n\t\t\t\t\t\tif (requestId) this.dispatchBestEffort(\"abort bash\", this.client.abortBash(requestId));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () =>\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"abort compaction\",\n\t\t\t\t\t\tthis.client.requestInternal<void>({ type: \"abort_compaction\" }),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tabortRetry: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst retry = this.client.abortRetry?.();\n\t\t\t\t\tif (retry !== undefined) {\n\t\t\t\t\t\tthis.dispatchBestEffort(\"abort retry\", retry);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof this.client.requestInternal === \"function\") {\n\t\t\t\t\t\tthis.dispatchBestEffort(\"abort retry\", this.client.requestInternal<void>({ type: \"abort_retry\" }));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\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\tconst result = await this.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\",\n\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t});\n\t\t\t\t\tif (!result.cancelled && !result.aborted) {\n\t\t\t\t\t\tthis.sessionStats.reset();\n\t\t\t\t\t\tthis.sessionStats.refresh();\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\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: async (name: string) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.client.setSessionName(name);\n\t\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\t\tawait this.refreshSessionView();\n\t\t\t\t\t});\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: QueueSnapshot = {\n\t\t\t\t\t\tsteering: [...this.steeringMessages],\n\t\t\t\t\t\tfollowUp: [...this.followUpMessages],\n\t\t\t\t\t};\n\t\t\t\t\tconst pendingClear = this.pendingQueueClear ?? {\n\t\t\t\t\t\tsnapshot: queued,\n\t\t\t\t\t\tqueueUpdateGeneration: this.queueUpdateGeneration,\n\t\t\t\t\t\tcount: 0,\n\t\t\t\t\t\tsucceeded: false,\n\t\t\t\t\t};\n\t\t\t\t\tthis.pendingQueueClear = pendingClear;\n\t\t\t\t\tpendingClear.count += 1;\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"clear queue\",\n\t\t\t\t\t\tthis.client.requestInternal({ type: \"clear_queue\" }).then(\n\t\t\t\t\t\t\t() => this.settleQueueClear(pendingClear, true),\n\t\t\t\t\t\t\t(error: Error) => {\n\t\t\t\t\t\t\t\tthis.settleQueueClear(pendingClear, false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tpauseQueuedMessages: { configurable: true, value: () => this.queuePause.pause() },\n\t\t\tresumeQueuedMessages: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (beforeRelease?: () => void) => this.queuePause.resume(beforeRelease),\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>, options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.settleEngineResync();\n\t\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id, options);\n\t\t\t\t\t\tconst nextModel = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;\n\t\t\t\t\t\tsession.agent.state.model = nextModel;\n\t\t\t\t\t\tthis.resolveModelFallback();\n\t\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, nextModel);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (level: AgentSession[\"thinkingLevel\"], options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\t\tconst result = await this.client.setThinkingLevelAck(level, options);\n\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t});\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\", options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.settleEngineResync();\n\t\t\t\t\t\tconst previousModel = session.model;\n\t\t\t\t\t\tconst result = await this.client.cycleModel(direction, options);\n\t\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\t\tconst model = session.modelRuntime.getModel(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\t\tthis.resolveModelFallbackAfterExplicitModelSelection(previousModel, model);\n\t\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, model);\n\t\t\t\t\t\treturn { ...result, model };\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\t\tconst result = await this.client.setThinkingLevelAck(level, options);\n\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\treturn result.level;\n\t\t\t\t\t});\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\t/**\n\t * Cooperative interrupt. Requests the engine's own abort and waits for it —\n\t * no timeout, no termination, no restart. A genuinely wedged engine is the\n\t * user's call to terminate with Ctrl+C (see terminateAndRecover), never an\n\t * automatic consequence of pressing Escape.\n\t */\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tthis.promptCancellationEpoch += 1;\n\t\tawait this.queuePause.settleBeforeAbort();\n\t\tthis.health.markCooperativeAbortStarted();\n\t\ttry {\n\t\t\tawait this.client.abort();\n\t\t} finally {\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\tthis.engineCallbackActive = false;\n\t\t}\n\t}\n\n\tprivate applyThinkingAck(\n\t\tsession: AgentSession,\n\t\tepoch: number,\n\t\tresult: { level: AgentSession[\"thinkingLevel\"]; provider?: string; modelId?: string },\n\t\tpersist: boolean,\n\t): void {\n\t\tif (persist) {\n\t\t\tapplyPersistedThinkingDefault(session, result.level, thinkingPersistTarget(result));\n\t\t}\n\t\tif (epoch === this.thinkingEpoch) {\n\t\t\tsession.agent.state.thinkingLevel = result.level;\n\t\t}\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.health.isRecovering()) 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 settleQueueClear(pendingClear: PendingQueueClear, succeeded: boolean): void {\n\t\tif (this.pendingQueueClear !== pendingClear) return;\n\n\t\tpendingClear.count -= 1;\n\t\tpendingClear.succeeded ||= succeeded;\n\t\tif (pendingClear.count > 0) return;\n\n\t\tthis.pendingQueueClear = undefined;\n\t\tif (pendingClear.succeeded || this.queueUpdateGeneration !== pendingClear.queueUpdateGeneration) return;\n\n\t\tthis.steeringMessages = [...pendingClear.snapshot.steering];\n\t\tthis.followUpMessages = [...pendingClear.snapshot.followUp];\n\t}\n\n\tprivate async resetUnpersistedSessionView(): Promise<void> {\n\t\tconst session = super.session;\n\t\tconst manager = await SessionManager.create(\n\t\t\tsession.sessionManager.getSessionStore(),\n\t\t\tsession.sessionManager.getCwd(),\n\t\t);\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: async (entryId: string, label?: string): Promise<string> => {\n\t\t\t\treturn serializeSessionMutation(super.session, async () => {\n\t\t\t\t\tconst receipt = await this.client.requestInternal<{ entryId: string }>({\n\t\t\t\t\t\ttype: \"set_label\",\n\t\t\t\t\t\tentryId,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.refreshSessionView();\n\t\t\t\t\treturn receipt.entryId;\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async syncPersistedModelCatalog(session: AgentSession, model: Model<Api>): Promise<void> {\n\t\tconst alreadyInScope = session.scopedModels.some(\n\t\t\t(scoped) => scoped.model.provider === model.provider && scoped.model.id === model.id,\n\t\t);\n\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\tthis.remoteModelCatalog.apply(catalog);\n\t\tapplyPersistedModelDefault(session, model, alreadyInScope);\n\t\tconst state = await this.client.getState();\n\t\tif (state.model?.provider === model.provider && state.model.id === model.id) {\n\t\t\tapplyPersistedThinkingDefault(session, state.thinkingLevel, { provider: model.provider, modelId: model.id });\n\t\t}\n\t}\n\n\tprivate async refreshSessionView(): Promise<void> {\n\t\tconst session = super.session;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = await SessionManager.open(\n\t\t\tcurrentManager.getSessionStore(),\n\t\t\tcurrentManager.getSessionId(),\n\t\t\tcurrentManager.getCwd(),\n\t\t);\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.dispatchBestEffort(\"refresh session view\", this.refreshSessionView());\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tthis.compactionReason = event.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tif (!event.aborted && event.errorMessage === undefined) this.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"message_end\":\n\t\t\t\tthis.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.queueUpdateGeneration += 1;\n\t\t\t\tthis.pendingQueueClear = undefined;\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\tthis.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.thinkingEpoch += 1;\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,mBAAmB,EAAyC,MAAM,qCAAqC,CAAC;AAKjH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAYlH,OAAO,EAAiC,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAEN,2BAA2B,EAC3B,0BAA0B,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAA+B,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,+BAA+B,CAAC;AAKxF,SAAS,0BAA0B,CAAC,OAAqB,EAAE,KAAiB,EAAE,cAAuB;IACpG,OAAO,CAAC,eAAe,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,IAAI,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChE,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;IACjE,IAAI,CAAC,aAAa,EAAE,MAAM;QAAE,OAAO;IACnC,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;IACvD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO;IACpG,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,GAAG,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,MAG9B;IACA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,6BAA6B,CACrC,OAAqB,EACrB,KAAoC,EACpC,MAA8C;IAE9C,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,CAAC,eAAe,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AASD;;;;;;GAMG;AACH,MAAM,OAAO,0BAA2B,SAAQ,mBAAmB;IACjD,MAAM,CAAY;IAClB,eAAe,GAAG,IAAI,OAAO,EAAgB,CAAC;IACvD,SAAS,GAAG,KAAK,CAAC;IAClB,UAAU,GAAG,KAAK,CAAC;IACnB,gBAAgB,CAA+B;IACtC,oBAAoB,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnE,gBAAgB,GAAa,EAAE,CAAC;IAChC,gBAAgB,GAAa,EAAE,CAAC;IACxC,kDAAkD;IAC1C,qBAAqB,GAAG,CAAC,CAAC;IAClC,4EAA4E;IACpE,aAAa,GAAG,CAAC,CAAC;IAC1B,+EAA+E;IACvE,iBAAiB,CAAgC;IACjD,oBAAoB,GAAG,KAAK,CAAC;IACpB,UAAU,CAAmB;IAC7B,YAAY,CAAqB;IAC1C,qBAAqB,GAAG,IAAI,CAAC;IAC7B,gBAAgB,GAAG,IAAI,CAAC;IACxB,iBAAiB,CAAqB;IACtC,iBAAiB,CAAqB;IAC7B,MAAM,CAAyB;IAC/B,cAAc,CAAuB;IAC9C,QAAQ,GAAG,KAAK,CAAC;IACjB,cAAc,CAA4B;IACjC,kBAAkB,CAAqB;IAChD,gBAAgB,GAAsB,EAAE,CAAC;IAChC,2BAA2B,GAAiC,EAAE,CAAC;IACxE,kBAAkB,GAA2B,EAAE,CAAC;IAChD,8BAA8B,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAA6D;IAC1E,0BAA0B,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,kCAAkC,GAAG,IAAI,GAAG,EAAU,CAAC;IAChE,kBAAkB,CAA4B;IAC9C,qBAAqB,CAAoB;IACzC,uBAAuB,GAAG,CAAC,CAAC;IAC5B,oBAAoB,CAA2B;IAEvD,YAAY,YAAiC,EAAE,aAA+C,EAAE,MAAiB;QAChH,KAAK,CACJ,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,QAAQ,EACrB,aAAa,EACb,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,EAC7B,YAAY,CAAC,oBAAoB,EACjC,YAAY,CAAC,mBAAmB,CAChC,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACtC,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,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAsB,CAAC;YACxC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAC9B,OAAO,EAAE,KAAK,IAAI,EAAE;gBACnB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;gBACvC,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;wBACrF,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE;wBACrB,gBAAgB,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,SAAS;qBACtD,CAAC,CAAC;oBACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACnC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;oBACrC,MAAM,OAAO,CAAC;gBACf,CAAC;YACF,CAAC;YACD,aAAa,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAClC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACnC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;YAC3C,CAAC;SACD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBAAE,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE;YACpD,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBAClD,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAC9B,OAAO;YACR,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,wBAAwB,IAAI,OAAO,CAAC,IAAI,KAAK,yBAAyB;gBAAE,OAAO;YACpG,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;gBAC1D,MAAM,UAAU,GACf,KAAK,YAAY,uCAAuC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;gBAClG,IAAI,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACpE,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxD,IAAI,CAAC,cAAc,CAAC;oBACnB,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACtB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,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,iBAAiB,CAAC,MAAe;QACtC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,0EAA0E;IAC1E,KAAK,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,oBAAoB,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB;YAClC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAC;YACrF,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC/B,MAAM,IAAI,CAAC,kBAAkB,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAAC,UAA8B;QAC1E,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;YAAE,OAAO;QACzG,IAAI,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAkB;gBAClE,IAAI,EAAE,sBAAsB;gBAC5B,qBAAqB,EAAE,IAAI;aAC3B,CAAC,CAAC;YACH,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;gBAAE,OAAO;YACtF,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC3F,CAAC,KAAK,CAAC,eAAe;oBACrB,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;wBAC/C,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,EAChE,CAAC;gBACF,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;oBAC1C,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpF,CAAC,CAAC;gBACH,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;oBAAE,OAAO;YACvF,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IACC,KAAK,CAAC,cAAc,KAAK,SAAS;gBAClC,OAAO,CAAC,eAAe,CAAC,gBAAgB,EAAE,KAAK,KAAK,CAAC,cAAc,EAClE,CAAC;gBACF,4EAA4E;gBAC5E,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChE,MAAM,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBACtC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;oBAAE,OAAO;YACvF,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,KAAgC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YAChD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC;YACzD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;YAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,eAAe,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACjF,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;YAC1C,4EAA4E;YAC5E,gFAAgF;YAChF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,KAAK,CAAC;gBAAE,OAAO;YAC1D,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAEQ,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,SAAoC;QACvF,OAAO,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7G,CAAC;IAEQ,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,WAA4B;QAChF,OAAO,2BAA2B,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChH,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,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QACxG,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,+BAA+B,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACxF,MAAM,KAAK,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,YAAY,CAAC,QAAkC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,wFAAwF;IACxF,qBAAqB,CAAC,QAAoB;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,QAAqD;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,iFAAiF;IACjF,kBAAkB,CAAC,QAAgD;QAClE,OAAO,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;IAClE,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,2FAA2F;IAC3F,KAAK,CAAC,sBAAsB,CAC3B,IAAoC,EACpC,KAAa,EACb,GAAqB;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,OAAiC,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBAAE,OAAO;YACxE,IAAI,CAAC;gBACJ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACR,4EAA4E;YAC7E,CAAC;QACF,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC;YACJ,OAAO,MAAM,GAAG,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACV,MAAM,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IACD,uBAAuB,CAAC,QAAgC;QACvD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,2BAA2B,CAAC,WAAmB,EAAE,cAAsB;QACtE,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvE,CAAC;IAED,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,KAAK,CAAC,cAAc;QACnB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,KAAK,CAAC;gBAAE,OAAO;YAC1D,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IACD,KAAK,CAAC,4BAA4B;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,oCAAoC,EAAE,CAAC;QACzD,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,uBAAuB;QAC5B,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;gBACpD,SAAS;YACV,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;oBACpD,SAAS;gBACV,CAAC;gBACD,IAAI,qBAAqB,CAAC,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAC9C,MAAM,IAAI,uCAAuC,CAChD,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;gBACpD,SAAS;YACV,CAAC;YACD,IAAI,IAAI,CAAC,8BAA8B,KAAK,UAAU;gBAAE,OAAO;YAE/D,IAAI,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACjD,IAAI,cAAc,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBAClE,IAAI,IAAI,CAAC,sBAAsB,EAAE,UAAU,KAAK,UAAU;wBAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;gBACrG,CAAC,CAAC,CAAC;gBACH,cAAc,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,sBAAsB,GAAG,cAAc,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,cAAc,CAAC,OAAO,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;oBACpD,SAAS;gBACV,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;YACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;gBACpD,SAAS;YACV,CAAC;YACD,IAAI,CAAC,8BAA8B,GAAG,UAAU,CAAC;YACjD,OAAO;QACR,CAAC;IACF,CAAC;IAEO,2BAA2B,CAAC,UAAkB;QACrD,OAAO,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvG,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,UAAkB;QAC5D,OAAO,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACF,CAAC;IAEO,kBAAkB;QACzB,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,iBAAiB,CAAC,wCAAwC,CAAC,CAAC;QACrF,IAAI,IAAI,CAAC,qBAAqB;YAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC;IAClE,CAAC;IACD,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IACD,mBAAmB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACpC,CAAC;IACD,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IACD,kFAAkF;IAClF,iBAAiB,CAAC,QAAkD;QACnE,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD;;;;;OAKG;IACH,mBAAmB;QAClB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IACD,wFAAwF;IACxF,wBAAwB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;IAC/C,CAAC;IACD,kFAAkF;IAClF,mBAAmB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,mBAAmB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IACD,qBAAqB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IACD,2BAA2B,CAAC,QAAoC;QAC/D,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC;IACH,CAAC;IACO,wBAAwB,CAAC,UAA2C;QAC3E,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjG,CAAC;IACD,KAAK,CAAC,WAAW;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;YAAE,OAAO;QAC1D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,uBAAuB,CAAC,MAAe;QACtC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,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;iBACnB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACxB,IAAI,QAAQ;oBAAE,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC9D,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;gBACvB,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;QACL,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,UAAsC;QACpD,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACM,0BAA0B,CAAC,uBAAoC;QACvE,IAAI,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;QACpD,KAAK,CAAC,0BAA0B,CAC/B,uBAAuB;YACtB,CAAC,GAAG,EAAE;gBACL,IAAI,IAAI,CAAC,QAAQ;oBAAE,uBAAuB,EAAE,CAAC;YAC9C,CAAC,CAAC,CACH,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,aAAa,CAC3B,SAAiB,EACjB,OAA6D;QAE7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;gBACpC,WAAW,EAAE,OAAO,EAAE,WAAW;gBACjC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;aAC3C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClC,IAAI,OAAO,EAAE,WAAW;gBAAE,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAClG,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,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE;YAC7C,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC1C,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;;YACC,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAC9C,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;YACtB,SAAS;YACT,WAAW;SACX,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,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE;YAC7C,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC1C,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;QACJ,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,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE;YAC7C,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC1C,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;QACJ,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,kCAAkC,KAAmB,CAAC;IAEtE,OAAO,CAAC,OAAkC;QAClD,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,iFAAiF;YACjF,gFAAgF;YAChF,wEAAwE;YACxE,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC;YACtG,wEAAwE;YACxE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,cAAc,EAAE,CAAC;gBACpB,sGAAsG;gBACtG,4GAA4G;gBAC5G,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnD,IAAI,KAAK;oBAAE,MAAM,8BAA8B,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,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,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,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,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1E,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE;YACpF,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,oBAAoB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjF,SAAS,EAAE;gBACV,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,QAAgD,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC1F;YACD,MAAM,EAAE;gBACP,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,OAAuB,EAAE,EAAE;oBACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC;oBACvD,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBACrC,IAAI,iBAAiB,KAAK,IAAI,CAAC,uBAAuB;wBAAE,OAAO;oBAC/D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;oBAChG,OAAO,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC/C,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,OAAoD,EACpD,OAAoD,EACnD,EAAE;oBACH,MAAM,GAAG,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAC3D,IAAI,CAAC;wBACJ,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;4BACpG,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;4BAC/C,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;yBACzE,CAAC,CAAC;oBACJ,CAAC;4BAAS,CAAC;wBACV,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvC,CAAC;gBACF,CAAC;aACD;YACD,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;YACzD,SAAS,EAAE;gBACV,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,EAAW,EAAE,EAAE;oBACtB,IAAI,EAAE,KAAK,SAAS;wBAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;yBAChF,CAAC;wBACL,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACpD,IAAI,SAAS;4BAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;oBACxF,CAAC;gBACF,CAAC;aACD;YACD,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YACnE,eAAe,EAAE;gBAChB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,GAAG,EAAE,CACX,IAAI,CAAC,kBAAkB,CACtB,kBAAkB,EAClB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAC/D;aACF;YACD,UAAU,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,GAAG,EAAE;oBACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;oBACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACzB,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;wBAC9C,OAAO;oBACR,CAAC;oBACD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;wBACvD,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;oBACpG,CAAC;gBACF,CAAC;aACD;YACD,YAAY,EAAE;gBACb,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,OAAqD,EAAE,EAAE;oBACxF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAoD;wBACnG,IAAI,EAAE,eAAe;wBACrB,QAAQ;wBACR,OAAO;qBACP,CAAC,CAAC;oBACH,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC7B,CAAC;oBACD,OAAO,MAAM,CAAC;gBACf,CAAC;aACD;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,oBAAoB,EAAE;gBACrB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,MAA8B,EAAE,EAAE,CACzC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC;aAC/F;YACD,cAAc,EAAE;gBACf,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;oBAC7B,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACjC,CAAC,CAAC,CAAC;gBACJ,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,GAAkB;wBAC7B,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;wBACpC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;qBACpC,CAAC;oBACF,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,IAAI;wBAC9C,QAAQ,EAAE,MAAM;wBAChB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;wBACjD,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,KAAK;qBAChB,CAAC;oBACF,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC;oBACtC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC,kBAAkB,CACtB,aAAa,EACb,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CACxD,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,EAC/C,CAAC,KAAY,EAAE,EAAE;wBAChB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;wBAC3C,MAAM,KAAK,CAAC;oBACb,CAAC,CACD,CACD,CAAC;oBACF,OAAO,MAAM,CAAC;gBACf,CAAC;aACD;YACD,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE;YACjF,oBAAoB,EAAE;gBACrB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,CAAC,aAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC;aAC5E;YACD,QAAQ,EAAE;gBACT,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,KAAiB,EAAE,OAA8B,EAAE,EAAE;oBAClE,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;wBAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;wBACzF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;wBACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC5B,IAAI,OAAO,EAAE,OAAO,KAAK,IAAI;4BAAE,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBACzF,CAAC,CAAC,CAAC;gBACJ,CAAC;aACD;YACD,gBAAgB,EAAE;gBACjB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,KAAoC,EAAE,OAA8B,EAAE,EAAE;oBACrF,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;wBACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACrE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;oBAC1E,CAAC,CAAC,CAAC;gBACJ,CAAC;aACD;YACD,UAAU,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,SAAkC,EAAE,OAA8B,EAAE,EAAE;oBACnF,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAChC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;wBACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBAChE,IAAI,CAAC,MAAM;4BAAE,OAAO,SAAS,CAAC;wBAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;wBACpG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;wBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;wBACzD,IAAI,CAAC,+CAA+C,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;wBAC3E,IAAI,OAAO,EAAE,OAAO,KAAK,IAAI;4BAAE,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACpF,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;oBAC7B,CAAC,CAAC,CAAC;gBACJ,CAAC;aACD;YACD,kBAAkB,EAAE;gBACnB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,KAAK,EAAE,OAA8B,EAAE,EAAE;oBAC/C,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;wBACpD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;4BAAE,OAAO,SAAS,CAAC;wBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;wBACtD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;wBACrD,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;wBACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACrE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;wBACzE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACrB,CAAC,CAAC,CAAC;gBACJ,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;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe;QAC5B,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;YAC1C,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACnC,CAAC;IACF,CAAC;IAEO,gBAAgB,CACvB,OAAqB,EACrB,KAAa,EACb,MAAqF,EACrF,OAAgB;QAEhB,IAAI,OAAO,EAAE,CAAC;YACb,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;QAClD,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,SAA2B;QACpE,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAAE,OAAO;YACvC,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,gBAAgB,CAAC,YAA+B,EAAE,SAAkB;QAC3E,IAAI,IAAI,CAAC,iBAAiB,KAAK,YAAY;YAAE,OAAO;QAEpD,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;QACxB,YAAY,CAAC,SAAS,KAAK,SAAS,CAAC;QACrC,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO;QAEnC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,KAAK,YAAY,CAAC,qBAAqB;YAAE,OAAO;QAExG,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,2BAA2B;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAC1C,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,EACxC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAC/B,CAAC;QACF,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,KAAK,EAAE,OAAe,EAAE,KAAc,EAAmB,EAAE;gBACjE,OAAO,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;oBACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAsB;wBACtE,IAAI,EAAE,WAAW;wBACjB,OAAO;wBACP,KAAK;qBACL,CAAC,CAAC;oBACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAChC,OAAO,OAAO,CAAC,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC;YACJ,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,OAAqB,EAAE,KAAiB;QAC/E,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAC/C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CACpF,CAAC;QACF,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,0BAA0B,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;YAC7E,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAC1C,cAAc,CAAC,eAAe,EAAE,EAChC,cAAc,CAAC,YAAY,EAAE,EAC7B,cAAc,CAAC,MAAM,EAAE,CACvB,CAAC;QACF,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,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBAC3E,MAAM;YACP,KAAK,kBAAkB;gBACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;gBACrC,MAAM;YACP,KAAK,gBAAgB;gBACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;oBAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBACpF,MAAM;YACP,KAAK,aAAa;gBACjB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM;YACP,KAAK,cAAc;gBAClB,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACnC,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,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM;YACP,KAAK,wBAAwB;gBAC5B,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;gBAChD,MAAM;YACP,KAAK,sBAAsB;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,MAAM;QACR,CAAC;IACF,CAAC;CACD","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { dirname } from \"node:path\";\nimport type { AuthInteraction } from \"@bastani/pi-ai\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentSession, CompactionReason } from \"../../core/agent-session.js\";\nimport { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from \"../../core/agent-session-runtime.ts\";\nimport type { ModelMutationOptions, PromptOptions, SessionRecoveryReport } from \"../../core/agent-session-types.js\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport type { SessionRecoveryReason } from \"../../core/extensions/session-events.ts\";\nimport type { WorkflowActivityFrame } from \"../../core/extensions/workflow-events.js\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport { serializeSessionMutation } from \"../../core/session-mutation-queue.ts\";\nimport type { ToolStatusReport } from \"../../core/tool-status.js\";\nimport { captureHerdrEnvironment } from \"../../extensions/herdr/environment.js\";\nimport { releaseUnownedPaneRegistration } from \"../../extensions/herdr/pane-owner.js\";\nimport { canonicalizePath } from \"../../utils/paths.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport { isRpcTransportFailure, markRpcTransportFailure, rpcTransportError } from \"../rpc/rpc-transport-error.ts\";\nimport type {\n\tRpcAutocompleteItem,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcModelCatalog,\n\tRpcResourceExtension,\n\tRpcSlashCommand,\n} from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { InteractiveEngineGenerationEndedListener } from \"./engine-generation.ts\";\nimport { type EngineDiagnosticListener, EngineHealthController } from \"./engine-health.ts\";\nimport { EngineSessionStats } from \"./engine-session-stats.js\";\nimport {\n\ttype AtomicOAuthLoginCallbacks,\n\tloginIsolatedApiKeyProvider,\n\tloginIsolatedOAuthProvider,\n} from \"./isolated-auth.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 { RemoteQueuePause } from \"./remote-queue-pause.js\";\nimport { InteractiveEngineResourceReadinessError } from \"./resource-readiness-error.ts\";\n\ntype ResourceExtensionsListener = (extensions: readonly RpcResourceExtension[]) => void;\ntype QueueSnapshot = { steering: string[]; followUp: string[] };\n\nfunction applyPersistedModelDefault(session: AgentSession, model: Model<Api>, alreadyInScope: boolean): void {\n\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\tif (alreadyInScope || session.scopedModels.length === 0) return;\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\nfunction thinkingPersistTarget(result: {\n\tprovider?: string;\n\tmodelId?: string;\n}): { provider: string; modelId: string } | undefined {\n\tif (!result.provider || !result.modelId) return undefined;\n\treturn { provider: result.provider, modelId: result.modelId };\n}\n\nfunction applyPersistedThinkingDefault(\n\tsession: AgentSession,\n\tlevel: AgentSession[\"thinkingLevel\"],\n\ttarget?: { provider: string; modelId: string },\n): void {\n\tif (target) {\n\t\tsession.settingsManager.setModelThinkingLevel(target.provider, target.modelId, level);\n\t}\n\tsession.settingsManager.setDefaultThinkingLevel(level);\n}\n\ntype PendingQueueClear = {\n\tsnapshot: QueueSnapshot;\n\tqueueUpdateGeneration: number;\n\tcount: number;\n\tsucceeded: boolean;\n};\n\n/**\n * Owns Atomic's local interactive host facade and child-process engine.\n *\n * This runtime is deliberately not a RemoteSession adapter. Its JSONL RPC,\n * rendering, custom UI, and recovery lifecycle stay separate from pi-client's\n * protocol lease lifecycle.\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 compactionReason: CompactionReason | undefined;\n\tprivate readonly activeBashRequestIds = new Map<string | symbol, string>();\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\t/** Bumped by every authoritative queue_update. */\n\tprivate queueUpdateGeneration = 0;\n\t/** Bumped by local thinking mutations and thinking_level_changed events. */\n\tprivate thinkingEpoch = 0;\n\t/** Clears started before the next queue_update share one rollback snapshot. */\n\tprivate pendingQueueClear: PendingQueueClear | undefined;\n\tprivate engineCallbackActive = false;\n\tprivate readonly queuePause: RemoteQueuePause;\n\tprivate readonly sessionStats: EngineSessionStats;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate readonly health: EngineHealthController;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\tprivate disposed = false;\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate readonly remoteModelCatalog: RemoteModelCatalog;\n\tprivate resourceOverlaps: ResourceOverlap[] = [];\n\tprivate readonly resourceExtensionsListeners: ResourceExtensionsListener[] = [];\n\tprivate resourceExtensions: RpcResourceExtension[] = [];\n\tprivate resourcesInitializedGeneration = 0;\n\tprivate resourceInitialization: { generation: number; promise: Promise<void> } | undefined;\n\tprivate readonly retiredResourceGenerations = new Set<number>();\n\tprivate readonly reportedResourceFailureGenerations = new Set<number>();\n\tprivate initializationTail: Promise<void> | undefined;\n\tprivate engineRecoveryFailure: Error | undefined;\n\tprivate promptCancellationEpoch = 0;\n\tprivate hostExtensionUIReset: (() => void) | undefined;\n\n\tconstructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient) {\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\tlocalRuntime.modelFallbackReason,\n\t\t);\n\t\tthis.adoptSessionStores(localRuntime);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.remoteModelCatalog = new RemoteModelCatalog(client);\n\t\tthis.queuePause = new RemoteQueuePause(client);\n\t\tthis.sessionStats = new EngineSessionStats(client);\n\t\tthis.health = new EngineHealthController({\n\t\t\tstop: () => this.client.stop(),\n\t\t\trestart: async () => {\n\t\t\t\tthis.engineRecoveryFailure = undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst manager = super.session.sessionManager;\n\t\t\t\t\tawait this.client.restart(manager.isPersisted() ? manager.getSessionId() : undefined, {\n\t\t\t\t\t\tcwd: manager.getCwd(),\n\t\t\t\t\t\tsessionDirectory: manager.getSessionDir() || undefined,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failure = markRpcTransportFailure(error);\n\t\t\t\t\tthis.engineRecoveryFailure = failure;\n\t\t\t\t\tthrow failure;\n\t\t\t\t}\n\t\t\t},\n\t\t\tclearActivity: () => {\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.engineCallbackActive = false;\n\t\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t},\n\t\t});\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t\tthis.client.onGenerationEnded((event) => {\n\t\t\tthis.retiredResourceGenerations.add(event.generation);\n\t\t\tif (event.generation === this.client.getGeneration()) this.updateResourceExtensions([]);\n\t\t\tthis.health.handleGenerationEnded(event);\n\t\t});\n\t\t// Production RpcClient instances expose engine lifecycle messages. Keep the\n\t\t// subscription optional so focused runtime test doubles that exercise only\n\t\t// session/model/bash behavior do not need to implement unrelated transport\n\t\t// surfaces.\n\t\tthis.client.onInteractiveEngineMessage?.((message) => {\n\t\t\tif (message.type === \"engine_extension_ui_reset\") {\n\t\t\t\tthis.hostExtensionUIReset?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type !== \"engine_resources_ready\" && message.type !== \"engine_resources_failed\") return;\n\t\t\tconst observedGeneration = this.client.getGeneration();\n\t\t\tvoid this.waitUntilResourcesReady().catch((error: Error) => {\n\t\t\t\tconst generation =\n\t\t\t\t\terror instanceof InteractiveEngineResourceReadinessError ? error.generation : observedGeneration;\n\t\t\t\tif (this.reportedResourceFailureGenerations.has(generation)) return;\n\t\t\t\tthis.reportedResourceFailureGenerations.add(generation);\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: error.message,\n\t\t\t\t});\n\t\t\t});\n\t\t});\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 openTaskInspector(taskId?: string): Promise<void> {\n\t\tawait this.client.requestInternal({ type: \"open_task_inspector\", ...(taskId ? { taskId } : {}) });\n\t}\n\t/** The engine owns extensions and tools; the host session has neither. */\n\tasync getToolStatus(): Promise<ToolStatusReport> {\n\t\treturn this.client.requestInternal<ToolStatusReport>({ type: \"get_tools\" });\n\t}\n\tasync initializeFromEngine(generation = this.client.getGeneration?.()): Promise<void> {\n\t\tconst run = this.initializationTail\n\t\t\t? this.initializationTail.then(() => this.initializeFromEngineGeneration(generation))\n\t\t\t: this.initializeFromEngineGeneration(generation);\n\t\tthis.initializationTail = run.catch(() => {});\n\t\treturn run;\n\t}\n\n\tprivate async settleEngineResync(): Promise<void> {\n\t\tawait this.initializationTail;\n\t}\n\n\tprivate async initializeFromEngineGeneration(generation: number | undefined): Promise<void> {\n\t\tif (this.disposed || (generation !== undefined && !this.isCurrentResourceGeneration(generation))) return;\n\t\ttry {\n\t\t\tthis.sessionStats.reset();\n\t\t\tconst state = await this.client.getState();\n\t\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({\n\t\t\t\ttype: \"get_available_models\",\n\t\t\t\tallowPartialResources: true,\n\t\t\t});\n\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\tif (\n\t\t\t\t(super.session.sessionManager.isPersisted() && state.sessionId !== super.session.sessionId) ||\n\t\t\t\t(state.sessionLocation &&\n\t\t\t\t\tcanonicalizePath(dirname(state.sessionLocation)) !==\n\t\t\t\t\t\tcanonicalizePath(super.session.sessionManager.getSessionDir()))\n\t\t\t) {\n\t\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t\t});\n\t\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\t}\n\t\t\tconst session = super.session;\n\t\t\tif (\n\t\t\t\tstate.projectTrusted !== undefined &&\n\t\t\t\tsession.settingsManager.isProjectTrusted() !== state.projectTrusted\n\t\t\t) {\n\t\t\t\t// The child owns trust hooks/decisions. The host only mirrors their result.\n\t\t\t\tsession.settingsManager.setProjectTrusted(state.projectTrusted);\n\t\t\t\tawait session.settingsManager.reload();\n\t\t\t\tawait session.resourceLoader.reload();\n\t\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\t}\n\t\t\tthis.remoteModelCatalog.apply(catalog);\n\t\t\tthis.remoteModelCatalog.patch(session);\n\t\t\t(session.agent.state as { model?: Model<Api> }).model = state.model;\n\t\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\t\tsession.agent.steeringMode = state.steeringMode;\n\t\t\tsession.agent.followUpMode = state.followUpMode;\n\t\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t\t\tthis.remoteSessionName = state.sessionName;\n\t\t\tthis.remoteSessionFile = state.sessionLocation;\n\t\t\tthis.streaming = state.isStreaming;\n\t\t\tthis.compacting = state.isCompacting;\n\t\t\tthis.compactionReason = state.isCompacting ? state.compactionReason : undefined;\n\t\t\tthis.queuePause.synchronize(state.queuedMessagesPaused === true);\n\t\t\tthis.replaceModelFallback(state.modelFallbackMessage, state.modelFallbackReason);\n\t\t\tawait this.refreshSessionView();\n\t\t\tthis.engineCallbackActive = false;\n\t\t\tthis.health.clearUnresponsive();\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\t\tthis.remoteCommands.refresh();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\toverride async loginOAuthProvider(provider: string, callbacks: AtomicOAuthLoginCallbacks) {\n\t\treturn loginIsolatedOAuthProvider(super.session, this.client, this.remoteModelCatalog, provider, callbacks);\n\t}\n\n\toverride async loginApiKeyProvider(provider: string, interaction: AuthInteraction) {\n\t\treturn loginIsolatedApiKeyProvider(super.session, this.client, this.remoteModelCatalog, provider, interaction);\n\t}\n\n\toverride async logoutProvider(provider: string) {\n\t\tconst result = await this.client.logoutProvider(provider);\n\t\tthis.remoteModelCatalog.applyModels({ models: result.models, scopedModels: result.scopedModels ?? [] });\n\t\tawait super.session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\tsuper.session.modelRuntime.applyExternalProviderAuthStatus(provider, result.authStatus);\n\t\tawait super.session.refreshCurrentModelFromRegistry();\n\t\treturn result;\n\t}\n\n\tonDiagnostic(listener: EngineDiagnosticListener): () => void {\n\t\treturn this.health.onDiagnostic(listener);\n\t}\n\n\t/** Fires when fresh engine session stats arrive, so the host can repaint its footer. */\n\tonSessionStatsChanged(listener: () => void): () => void {\n\t\treturn this.sessionStats.onChange(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\t/** Workflow activity of the engine child, starting from its current snapshot. */\n\tonWorkflowActivity(listener: (frame: WorkflowActivityFrame) => void): () => void {\n\t\treturn this.client.onInteractiveEngineWorkflowActivity(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\t/** Report a native host trust dialog to the extension runner in this engine generation. */\n\tasync withProjectTrustPrompt<T>(\n\t\tkind: \"select\" | \"confirm\" | \"input\",\n\t\ttitle: string,\n\t\trun: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst generation = this.client.getGeneration();\n\t\tconst componentId = randomUUID();\n\t\tconst notify = (command: InteractiveEngineCommand) => {\n\t\t\tif (this.disposed || generation !== this.client.getGeneration()) return;\n\t\t\ttry {\n\t\t\t\tthis.sendEngineCommand(command);\n\t\t\t} catch {\n\t\t\t\t// Status notification failure must not prevent a host-owned trust decision.\n\t\t\t}\n\t\t};\n\t\tnotify({ type: \"engine_project_trust_start\", componentId, kind, title });\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\tnotify({ type: \"engine_project_trust_end\", componentId });\n\t\t}\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] {\n\t\treturn this.remoteCommands.getCommands();\n\t}\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void {\n\t\treturn this.remoteCommands.onChange(listener);\n\t}\n\tgetRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.client.getCommandCompletions(commandName, argumentPrefix);\n\t}\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\tasync waitUntilBound(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.client.waitForInteractiveEngineBound();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync waitUntilProjectTrustSettled(): Promise<void> {\n\t\tawait this.client.waitForInteractiveEngineProjectTrust();\n\t\tawait this.initializeFromEngine();\n\t}\n\tasync waitUntilResourcesReady(): Promise<void> {\n\t\twhile (true) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tconst generation = this.client.getGeneration();\n\t\t\tif (this.retiredResourceGenerations.has(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.client.waitForInteractiveEngineResources();\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isRpcTransportFailure(error)) throw error;\n\t\t\t\tthrow new InteractiveEngineResourceReadinessError(\n\t\t\t\t\tgeneration,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this.resourcesInitializedGeneration === generation) return;\n\n\t\t\tlet initialization = this.resourceInitialization;\n\t\t\tif (initialization?.generation !== generation) {\n\t\t\t\tconst promise = this.initializeFromEngine(generation).finally(() => {\n\t\t\t\t\tif (this.resourceInitialization?.generation === generation) this.resourceInitialization = undefined;\n\t\t\t\t});\n\t\t\t\tinitialization = { generation, promise };\n\t\t\t\tthis.resourceInitialization = initialization;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait initialization.promise;\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.throwIfUnavailable();\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.resourcesInitializedGeneration = generation;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate isCurrentResourceGeneration(generation: number): boolean {\n\t\treturn generation === this.client.getGeneration() && !this.retiredResourceGenerations.has(generation);\n\t}\n\n\tprivate async waitForReplacementGeneration(generation: number): Promise<void> {\n\t\twhile (generation === this.client.getGeneration()) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tawait sleep(1);\n\t\t}\n\t}\n\n\tprivate throwIfUnavailable(): void {\n\t\tif (this.disposed) throw rpcTransportError(\"Interactive engine runtime is disposed\");\n\t\tif (this.engineRecoveryFailure) throw this.engineRecoveryFailure;\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.client.getEnginePid();\n\t}\n\tgetEngineGeneration(): number {\n\t\treturn this.client.getGeneration();\n\t}\n\tisRecovering(): boolean {\n\t\treturn this.health.isRecovering();\n\t}\n\t/** Subscribe to host-local engine generation death (see engine-generation.ts). */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\treturn this.client.onGenerationEnded(listener);\n\t}\n\t/**\n\t * A heartbeat proves the child's event loop is turning again, so a stall the\n\t * watchdog already reported must stop arming the Ctrl+C escape hatch. Fed by a\n\t * dedicated client callback rather than a generic engine-message subscriber,\n\t * which would consume buffered startup custom-UI messages.\n\t */\n\tnoteEngineHeartbeat(): void {\n\t\tthis.health.clearUnresponsive();\n\t}\n\t/** True only when the engine is provably not answering (see EngineHealthController). */\n\tneedsExplicitTermination(): boolean {\n\t\treturn this.health.needsExplicitTermination();\n\t}\n\t/** Explicit user-driven engine termination and recovery (Ctrl+C escape hatch). */\n\tterminateAndRecover(): Promise<void> {\n\t\treturn this.health.terminate();\n\t}\n\tgetResourceOverlaps(): readonly ResourceOverlap[] {\n\t\treturn this.resourceOverlaps;\n\t}\n\tgetResourceExtensions(): readonly RpcResourceExtension[] {\n\t\treturn this.resourceExtensions;\n\t}\n\tonResourceExtensionsChanged(listener: ResourceExtensionsListener): () => void {\n\t\tthis.resourceExtensionsListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.resourceExtensionsListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.resourceExtensionsListeners.splice(index, 1);\n\t\t};\n\t}\n\tprivate updateResourceExtensions(extensions: readonly RpcResourceExtension[]): void {\n\t\tthis.resourceExtensions = [...extensions];\n\t\tfor (const listener of [...this.resourceExtensionsListeners]) listener(this.resourceExtensions);\n\t}\n\tasync synchronize(): Promise<void> {\n\t\tconst generation = this.client.getGeneration();\n\t\tconst state = await this.client.getState();\n\t\tif (!this.isCurrentResourceGeneration(generation)) return;\n\t\tthis.remoteSessionFile = state.sessionLocation;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void {\n\t\tthis.engineCallbackActive = active;\n\t}\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)\n\t\t\t\t.then(async (response) => {\n\t\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\t\tactivity: undefined,\n\t\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tif (diagnostic.source !== \"stderr\") this.engineCallbackActive = true;\n\t\tthis.health.publish(diagnostic);\n\t}\n\n\t/**\n\t * Extension UI belongs to the engine's sessions, not to this host's mirror session. The mirror is torn\n\t * down only after the engine has already switched and the new session's `session_start` has set its UI\n\t * (see `switchSession`), so a reset tied to that teardown would clear the new session's UI. The reset\n\t * therefore follows the engine's own lifecycle: `engine_extension_ui_reset` arrives on the same stream,\n\t * ahead of the new session's UI requests. Quitting still resets here, as it always has.\n\t */\n\toverride setBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.hostExtensionUIReset = beforeSessionInvalidate;\n\t\tsuper.setBeforeSessionInvalidate(\n\t\t\tbeforeSessionInvalidate &&\n\t\t\t\t(() => {\n\t\t\t\t\tif (this.disposed) beforeSessionInvalidate();\n\t\t\t\t}),\n\t\t);\n\t}\n\n\toverride async switchSession(\n\t\tsessionId: string,\n\t\toptions?: Parameters<AgentSessionRuntime[\"switchSession\"]>[1],\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionId, options?.cwdOverride, options?.sessionDirectory);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionId, {\n\t\t\t\tcwdOverride: options?.cwdOverride,\n\t\t\t\tsessionDirectory: options?.sessionDirectory,\n\t\t\t});\n\t\t\tawait this.initializeFromEngine();\n\t\t\tif (options?.withSession) await options.withSession(this.session.createReplacedSessionContext());\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 (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\n\t\telse await 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\",\n\t\t\tinputPath,\n\t\t\tcwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\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 (super.session.sessionManager.isPersisted())\n\t\t\tawait super.switchSession(state.sessionId, {\n\t\t\t\tsessionDirectory: state.sessionLocation ? dirname(state.sessionLocation) : undefined,\n\t\t\t});\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * The child engine already settled (and persisted) its own turn before it\n\t * reported the replacement, and the host facade's `abort()` is `abortAndRecover()`\n\t * — an unbounded cooperative round trip. Re-entering it during teardown would\n\t * hang session replacement on an unresponsive or dead engine, which is exactly\n\t * what engine recovery exists to survive.\n\t */\n\tprotected override async settleActiveResponseBeforeTeardown(): Promise<void> {}\n\n\toverride dispose(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.disposePromise) return this.disposePromise;\n\t\tthis.disposed = true;\n\t\tthis.disposePromise = (async () => {\n\t\t\t// A quit the user asked for must reach the engine before it is stopped: the stop\n\t\t\t// is a SIGTERM, which the engine cannot tell from this process being signalled.\n\t\t\t// Optional like the other transport surfaces focused test doubles omit.\n\t\t\tconst unrecordedQuit = !options?.fromSignal && (await this.client.announceExplicitQuit?.()) === false;\n\t\t\t// EngineHealthController owns the first client stop and joins recovery.\n\t\t\tawait this.health.shutdown();\n\t\t\t// A replacement may have spawned while shutdown joined recovery; the\n\t\t\t// idempotent trailing stop closes that child before disposal returns.\n\t\t\tawait this.client.stop();\n\t\t\tif (unrecordedQuit) {\n\t\t\t\t// No engine child recorded the quit, so none released Herdr's registration, and a replacement started\n\t\t\t\t// during recovery may have registered again. Every child is stopped now; this host loads no Herdr reporter.\n\t\t\t\tconst herdr = captureHerdrEnvironment(process.env);\n\t\t\t\tif (herdr) await releaseUnownedPaneRegistration(herdr);\n\t\t\t}\n\t\t\tawait super.dispose(options);\n\t\t})();\n\t\treturn this.disposePromise;\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\tthis.sessionStats.track(session);\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\tcompactionReason: { configurable: true, get: () => this.compactionReason },\n\t\t\tisBashRunning: { configurable: true, get: () => this.activeBashRequestIds.size > 0 },\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\tqueuedMessagesPaused: { configurable: true, get: () => this.queuePause.isPaused },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: JsonAgentSessionEvent) => 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\tconst cancellationEpoch = this.promptCancellationEpoch;\n\t\t\t\t\tawait this.waitUntilResourcesReady();\n\t\t\t\t\tif (cancellationEpoch !== this.promptCancellationEpoch) return;\n\t\t\t\t\tconst disposition = await this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true, disposition);\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?: Parameters<AgentSession[\"executeBash\"]>[1],\n\t\t\t\t\toptions?: Parameters<AgentSession[\"executeBash\"]>[2],\n\t\t\t\t) => {\n\t\t\t\t\tconst key = options?.id ?? Symbol(\"isolated-bash-request\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await this.client.userBashWithUpdates(command, (delta, channel) => onChunk?.(delta, channel), {\n\t\t\t\t\t\t\texcludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t\tonRequestId: (requestId) => this.activeBashRequestIds.set(key, requestId),\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.activeBashRequestIds.delete(key);\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: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (id?: string) => {\n\t\t\t\t\tif (id === undefined) this.dispatchBestEffort(\"abort bash\", this.client.abortBash());\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst requestId = this.activeBashRequestIds.get(id);\n\t\t\t\t\t\tif (requestId) this.dispatchBestEffort(\"abort bash\", this.client.abortBash(requestId));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () =>\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"abort compaction\",\n\t\t\t\t\t\tthis.client.requestInternal<void>({ type: \"abort_compaction\" }),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tabortRetry: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst retry = this.client.abortRetry?.();\n\t\t\t\t\tif (retry !== undefined) {\n\t\t\t\t\t\tthis.dispatchBestEffort(\"abort retry\", retry);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof this.client.requestInternal === \"function\") {\n\t\t\t\t\t\tthis.dispatchBestEffort(\"abort retry\", this.client.requestInternal<void>({ type: \"abort_retry\" }));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\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\tconst result = await this.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\",\n\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t});\n\t\t\t\t\tif (!result.cancelled && !result.aborted) {\n\t\t\t\t\t\tthis.sessionStats.reset();\n\t\t\t\t\t\tthis.sessionStats.refresh();\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\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\tstartPendingRecovery: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (reason?: SessionRecoveryReason) =>\n\t\t\t\t\tthis.client.requestInternal<SessionRecoveryReport>({ type: \"start_pending_recovery\", reason }),\n\t\t\t},\n\t\t\tsetSessionName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (name: string) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.client.setSessionName(name);\n\t\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\t\tawait this.refreshSessionView();\n\t\t\t\t\t});\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: QueueSnapshot = {\n\t\t\t\t\t\tsteering: [...this.steeringMessages],\n\t\t\t\t\t\tfollowUp: [...this.followUpMessages],\n\t\t\t\t\t};\n\t\t\t\t\tconst pendingClear = this.pendingQueueClear ?? {\n\t\t\t\t\t\tsnapshot: queued,\n\t\t\t\t\t\tqueueUpdateGeneration: this.queueUpdateGeneration,\n\t\t\t\t\t\tcount: 0,\n\t\t\t\t\t\tsucceeded: false,\n\t\t\t\t\t};\n\t\t\t\t\tthis.pendingQueueClear = pendingClear;\n\t\t\t\t\tpendingClear.count += 1;\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"clear queue\",\n\t\t\t\t\t\tthis.client.requestInternal({ type: \"clear_queue\" }).then(\n\t\t\t\t\t\t\t() => this.settleQueueClear(pendingClear, true),\n\t\t\t\t\t\t\t(error: Error) => {\n\t\t\t\t\t\t\t\tthis.settleQueueClear(pendingClear, false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tpauseQueuedMessages: { configurable: true, value: () => this.queuePause.pause() },\n\t\t\tresumeQueuedMessages: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (beforeRelease?: () => void) => this.queuePause.resume(beforeRelease),\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>, options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.settleEngineResync();\n\t\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id, options);\n\t\t\t\t\t\tconst nextModel = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;\n\t\t\t\t\t\tsession.agent.state.model = nextModel;\n\t\t\t\t\t\tthis.resolveModelFallback();\n\t\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, nextModel);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (level: AgentSession[\"thinkingLevel\"], options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\t\tconst result = await this.client.setThinkingLevelAck(level, options);\n\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t});\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\", options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tawait this.settleEngineResync();\n\t\t\t\t\t\tconst previousModel = session.model;\n\t\t\t\t\t\tconst result = await this.client.cycleModel(direction, options);\n\t\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\t\tconst model = session.modelRuntime.getModel(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\t\tthis.resolveModelFallbackAfterExplicitModelSelection(previousModel, model);\n\t\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, model);\n\t\t\t\t\t\treturn { ...result, model };\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (options?: ModelMutationOptions) => {\n\t\t\t\t\treturn serializeSessionMutation(session, async () => {\n\t\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\t\tconst result = await this.client.setThinkingLevelAck(level, options);\n\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\treturn result.level;\n\t\t\t\t\t});\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\t/**\n\t * Cooperative interrupt. Requests the engine's own abort and waits for it —\n\t * no timeout, no termination, no restart. A genuinely wedged engine is the\n\t * user's call to terminate with Ctrl+C (see terminateAndRecover), never an\n\t * automatic consequence of pressing Escape.\n\t */\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tthis.promptCancellationEpoch += 1;\n\t\tawait this.queuePause.settleBeforeAbort();\n\t\tthis.health.markCooperativeAbortStarted();\n\t\ttry {\n\t\t\tawait this.client.abort();\n\t\t} finally {\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\tthis.engineCallbackActive = false;\n\t\t}\n\t}\n\n\tprivate applyThinkingAck(\n\t\tsession: AgentSession,\n\t\tepoch: number,\n\t\tresult: { level: AgentSession[\"thinkingLevel\"]; provider?: string; modelId?: string },\n\t\tpersist: boolean,\n\t): void {\n\t\tif (persist) {\n\t\t\tapplyPersistedThinkingDefault(session, result.level, thinkingPersistTarget(result));\n\t\t}\n\t\tif (epoch === this.thinkingEpoch) {\n\t\t\tsession.agent.state.thinkingLevel = result.level;\n\t\t}\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.health.isRecovering()) 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 settleQueueClear(pendingClear: PendingQueueClear, succeeded: boolean): void {\n\t\tif (this.pendingQueueClear !== pendingClear) return;\n\n\t\tpendingClear.count -= 1;\n\t\tpendingClear.succeeded ||= succeeded;\n\t\tif (pendingClear.count > 0) return;\n\n\t\tthis.pendingQueueClear = undefined;\n\t\tif (pendingClear.succeeded || this.queueUpdateGeneration !== pendingClear.queueUpdateGeneration) return;\n\n\t\tthis.steeringMessages = [...pendingClear.snapshot.steering];\n\t\tthis.followUpMessages = [...pendingClear.snapshot.followUp];\n\t}\n\n\tprivate async resetUnpersistedSessionView(): Promise<void> {\n\t\tconst session = super.session;\n\t\tconst manager = await SessionManager.create(\n\t\t\tsession.sessionManager.getSessionStore(),\n\t\t\tsession.sessionManager.getCwd(),\n\t\t);\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: async (entryId: string, label?: string): Promise<string> => {\n\t\t\t\treturn serializeSessionMutation(super.session, async () => {\n\t\t\t\t\tconst receipt = await this.client.requestInternal<{ entryId: string }>({\n\t\t\t\t\t\ttype: \"set_label\",\n\t\t\t\t\t\tentryId,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.refreshSessionView();\n\t\t\t\t\treturn receipt.entryId;\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async syncPersistedModelCatalog(session: AgentSession, model: Model<Api>): Promise<void> {\n\t\tconst alreadyInScope = session.scopedModels.some(\n\t\t\t(scoped) => scoped.model.provider === model.provider && scoped.model.id === model.id,\n\t\t);\n\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\tthis.remoteModelCatalog.apply(catalog);\n\t\tapplyPersistedModelDefault(session, model, alreadyInScope);\n\t\tconst state = await this.client.getState();\n\t\tif (state.model?.provider === model.provider && state.model.id === model.id) {\n\t\t\tapplyPersistedThinkingDefault(session, state.thinkingLevel, { provider: model.provider, modelId: model.id });\n\t\t}\n\t}\n\n\tprivate async refreshSessionView(): Promise<void> {\n\t\tconst session = super.session;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = await SessionManager.open(\n\t\t\tcurrentManager.getSessionStore(),\n\t\t\tcurrentManager.getSessionId(),\n\t\t\tcurrentManager.getCwd(),\n\t\t);\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.dispatchBestEffort(\"refresh session view\", this.refreshSessionView());\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tthis.compactionReason = event.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tif (!event.aborted && event.errorMessage === undefined) this.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"message_end\":\n\t\t\t\tthis.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.queueUpdateGeneration += 1;\n\t\t\t\tthis.pendingQueueClear = undefined;\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\tthis.sessionStats.refresh();\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.thinkingEpoch += 1;\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\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"]}
|