@bastani/atomic 0.9.41 → 0.9.42-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 +49 -0
- package/dist/builtin/intercom/CHANGELOG.md +13 -0
- package/dist/builtin/intercom/README.md +7 -3
- package/dist/builtin/intercom/broker/broker-status.ts +48 -0
- package/dist/builtin/intercom/broker/broker.ts +90 -9
- package/dist/builtin/intercom/broker/client.ts +112 -12
- package/dist/builtin/intercom/broker/control.ts +225 -0
- package/dist/builtin/intercom/broker/multinode-router.ts +32 -39
- package/dist/builtin/intercom/broker/paths.ts +4 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +27 -5
- package/dist/builtin/intercom/broker/shared-storage-setting.ts +60 -0
- package/dist/builtin/intercom/broker/spawn.ts +13 -4
- package/dist/builtin/intercom/broker/sql-lease-store.ts +23 -0
- package/dist/builtin/intercom/broker/watchdog.ts +105 -0
- package/dist/builtin/intercom/index.bundle.mjs +200 -22
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/types.ts +34 -2
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +12 -0
- package/dist/builtin/workflows/README.md +10 -0
- package/dist/builtin/workflows/builtin/{chunk-txbc93t6.js → chunk-3s95f7ry.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-n2gkzkty.js → chunk-edhf30ef.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-8x61e0s7.js → chunk-frqxd4d1.js} +18 -9
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +6 -1
- package/dist/builtin/workflows/src/authoring.d.ts +3 -1
- package/dist/builtin/workflows/src/durable/journal/internal.d.ts +13 -0
- package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +2 -0
- package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +1 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +88554 -82820
- package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +72635 -0
- package/dist/builtin/workflows/src/index.js +53824 -5907
- package/dist/builtin/workflows/src/local-worker-entry.mjs +72635 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +7 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +2 -0
- package/dist/builtin/workflows/src/workers/public-options.d.ts +31 -0
- package/dist/bun/app-host-modules.d.ts +9 -0
- package/dist/bun/app-host-modules.d.ts.map +1 -0
- package/dist/bun/app-host-modules.js +10 -0
- package/dist/bun/app-host-modules.js.map +1 -0
- package/dist/bun/cli.d.ts +3 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +15 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/internal-intercom-broker.d.ts +17 -0
- package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
- package/dist/bun/internal-intercom-broker.js +29 -0
- package/dist/bun/internal-intercom-broker.js.map +1 -1
- package/dist/bun/internal-workflow-worker.d.ts +4 -0
- package/dist/bun/internal-workflow-worker.d.ts.map +1 -0
- package/dist/bun/internal-workflow-worker.js +37 -0
- package/dist/bun/internal-workflow-worker.js.map +1 -0
- package/dist/bun/split-loader.js +10 -2
- package/dist/bun/split-loader.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/intercom-command.d.ts +15 -0
- package/dist/cli/intercom-command.d.ts.map +1 -0
- package/dist/cli/intercom-command.js +87 -0
- package/dist/cli/intercom-command.js.map +1 -0
- package/dist/cli/storage-command.d.ts +39 -0
- package/dist/cli/storage-command.d.ts.map +1 -0
- package/dist/cli/storage-command.js +367 -0
- package/dist/cli/storage-command.js.map +1 -0
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +1 -0
- 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-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +1 -0
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +1 -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 +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/builtin-install-layout.d.ts +6 -0
- package/dist/core/builtin-install-layout.d.ts.map +1 -1
- package/dist/core/builtin-install-layout.js +9 -0
- package/dist/core/builtin-install-layout.js.map +1 -1
- package/dist/core/child-session-options.d.ts.map +1 -1
- package/dist/core/child-session-options.js +3 -0
- package/dist/core/child-session-options.js.map +1 -1
- package/dist/core/exec.js +2 -2
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/template.css +9 -0
- package/dist/core/export-html/template.js +165 -45
- package/dist/core/extensions/loader-host-modules.d.ts +6 -0
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +12 -1
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +6 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +18 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +4 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
- package/dist/core/fast-model-routing-transport.js +5 -1
- package/dist/core/fast-model-routing-transport.js.map +1 -1
- package/dist/core/intercom-broker-control.d.ts +67 -0
- package/dist/core/intercom-broker-control.d.ts.map +1 -0
- package/dist/core/intercom-broker-control.js +17 -0
- package/dist/core/intercom-broker-control.js.map +1 -0
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +38 -1
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/package-manager-git.d.ts +2 -2
- package/dist/core/package-manager-git.d.ts.map +1 -1
- package/dist/core/package-manager-git.js.map +1 -1
- package/dist/core/package-manager-manifest.d.ts.map +1 -1
- package/dist/core/package-manager-manifest.js +9 -1
- package/dist/core/package-manager-manifest.js.map +1 -1
- package/dist/core/package-manager-npm.d.ts +2 -2
- package/dist/core/package-manager-npm.d.ts.map +1 -1
- package/dist/core/package-manager-npm.js.map +1 -1
- package/dist/core/package-manager-paths.d.ts +7 -7
- package/dist/core/package-manager-paths.d.ts.map +1 -1
- package/dist/core/package-manager-paths.js.map +1 -1
- package/dist/core/package-manager-storage-adapters.d.ts +7 -0
- package/dist/core/package-manager-storage-adapters.d.ts.map +1 -0
- package/dist/core/package-manager-storage-adapters.js +76 -0
- package/dist/core/package-manager-storage-adapters.js.map +1 -0
- package/dist/core/package-manager-types.d.ts +4 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/provider-rate-limits.d.ts +23 -0
- package/dist/core/provider-rate-limits.d.ts.map +1 -0
- package/dist/core/provider-rate-limits.js +113 -0
- package/dist/core/provider-rate-limits.js.map +1 -0
- package/dist/core/provider-request-admission.d.ts +7 -0
- package/dist/core/provider-request-admission.d.ts.map +1 -0
- package/dist/core/provider-request-admission.js +91 -0
- package/dist/core/provider-request-admission.js.map +1 -0
- package/dist/core/resource-admission-scope.d.ts +4 -0
- package/dist/core/resource-admission-scope.d.ts.map +1 -0
- package/dist/core/resource-admission-scope.js +9 -0
- package/dist/core/resource-admission-scope.js.map +1 -0
- package/dist/core/sdk-types.d.ts +16 -0
- 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 +2 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +18 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-lifecycle-work.d.ts +1 -0
- package/dist/core/session-lifecycle-work.d.ts.map +1 -1
- package/dist/core/session-lifecycle-work.js +1 -0
- package/dist/core/session-lifecycle-work.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +3 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +6 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-schema.d.ts +22 -0
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +18 -1
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/storage/index.d.ts +1 -0
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js +1 -0
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/node-sqlite.d.ts +2 -1
- package/dist/core/storage/node-sqlite.d.ts.map +1 -1
- package/dist/core/storage/node-sqlite.js +5 -4
- package/dist/core/storage/node-sqlite.js.map +1 -1
- package/dist/core/storage/provider.d.ts +6 -0
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +27 -7
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/storage/sqlite-facade.d.ts +49 -0
- package/dist/core/storage/sqlite-facade.d.ts.map +1 -0
- package/dist/core/storage/sqlite-facade.js +180 -0
- package/dist/core/storage/sqlite-facade.js.map +1 -0
- package/dist/core/storage/storage-status.d.ts +81 -0
- package/dist/core/storage/storage-status.d.ts.map +1 -0
- package/dist/core/storage/storage-status.js +409 -0
- package/dist/core/storage/storage-status.js.map +1 -0
- package/dist/core/tasks/supervisor.d.ts +2 -1
- package/dist/core/tasks/supervisor.d.ts.map +1 -1
- package/dist/core/tasks/supervisor.js +105 -4
- package/dist/core/tasks/supervisor.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +1 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +28 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +7 -3
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +9 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +16 -8
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +69 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js +2 -2
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +80 -22
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +6 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +6 -2
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive-engine/engine-health.d.ts +8 -4
- package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-health.js +41 -6
- package/dist/modes/interactive-engine/engine-health.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +19 -17
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js +1 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.d.ts +1 -0
- package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.js +4 -1
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
- package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input.js +29 -7
- package/dist/modes/rpc/rpc-input.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +14 -0
- package/dist/utils/shell.js.map +1 -1
- package/docs/custom-provider/oauth.md +8 -1
- package/docs/extensions/api-reference.md +2 -0
- package/docs/intercom/operations.md +17 -8
- package/docs/intercom/reference.md +1 -1
- package/docs/keybindings.md +1 -1
- package/docs/packages/authoring.md +15 -0
- package/docs/packages.md +3 -2
- package/docs/providers.md +2 -0
- package/docs/reference/cli.md +17 -0
- package/docs/sdk.md +37 -0
- package/docs/settings.md +33 -2
- package/docs/storage.md +191 -219
- package/docs/usage.md +1 -1
- package/docs/workflows/api-reference.md +50 -0
- package/docs/workflows/operations.md +44 -1
- package/docs/workflows.md +25 -0
- package/examples/extensions/gondolin/package-lock.json +14 -24
- package/examples/extensions/gondolin/package.json +1 -1
- package/npm-shrinkwrap.json +35 -35
- package/package.json +4 -4
- package/schemas/settings.schema.json +87 -1
|
@@ -13,7 +13,7 @@ import { SkillInvocationMessageComponent } from "./skill-invocation-message.js";
|
|
|
13
13
|
import { TaskRow } from "./task-row.js";
|
|
14
14
|
import { ToolExecutionComponent } from "./tool-execution.js";
|
|
15
15
|
import { UserMessageComponent } from "./user-message.js";
|
|
16
|
-
export function chatEntriesFromAgentMessages(messages) {
|
|
16
|
+
export function chatEntriesFromAgentMessages(messages, messageMeta) {
|
|
17
17
|
const entries = [];
|
|
18
18
|
const pendingTools = new Map();
|
|
19
19
|
for (const message of messages) {
|
|
@@ -21,7 +21,14 @@ export function chatEntriesFromAgentMessages(messages) {
|
|
|
21
21
|
continue;
|
|
22
22
|
switch (message.role) {
|
|
23
23
|
case "assistant": {
|
|
24
|
-
|
|
24
|
+
const meta = messageMeta?.get(message);
|
|
25
|
+
entries.push({
|
|
26
|
+
role: "assistant",
|
|
27
|
+
kind: "assistant",
|
|
28
|
+
message,
|
|
29
|
+
messageId: meta?.id,
|
|
30
|
+
timestamp: meta?.timestamp,
|
|
31
|
+
});
|
|
25
32
|
for (const content of message.content) {
|
|
26
33
|
if (content.type !== "toolCall")
|
|
27
34
|
continue;
|
|
@@ -77,8 +84,9 @@ export function chatEntriesFromAgentMessages(messages) {
|
|
|
77
84
|
}
|
|
78
85
|
case "user": {
|
|
79
86
|
const text = getMessageText(message);
|
|
87
|
+
const meta = messageMeta?.get(message);
|
|
80
88
|
if (text)
|
|
81
|
-
entries.push({ role: "user", kind: "user", text });
|
|
89
|
+
entries.push({ role: "user", kind: "user", text, messageId: meta?.id, timestamp: meta?.timestamp });
|
|
82
90
|
break;
|
|
83
91
|
}
|
|
84
92
|
case "bashExecution":
|
|
@@ -412,7 +420,7 @@ export function renderChatMessageEntry(entry, options) {
|
|
|
412
420
|
activityOmitted: messageEntry.activityOmitted,
|
|
413
421
|
});
|
|
414
422
|
case "assistant":
|
|
415
|
-
return new AssistantMessageComponent(messageEntry.message, options.hideThinkingBlock ?? false, markdownTheme, options.hiddenThinkingLabel ?? "Thinking...", options.outputPad ?? 1, options.markdownTransformers, options.isStreaming, options.renderLatex);
|
|
423
|
+
return new AssistantMessageComponent(messageEntry.message, options.hideThinkingBlock ?? false, markdownTheme, options.hiddenThinkingLabel ?? "Thinking...", options.outputPad ?? 1, options.markdownTransformers, options.isStreaming, options.renderLatex, messageEntry.messageId, messageEntry.timestamp);
|
|
416
424
|
case "tool": {
|
|
417
425
|
if (options.createToolComponent)
|
|
418
426
|
return options.createToolComponent(messageEntry);
|
|
@@ -438,7 +446,7 @@ export function renderChatMessageEntry(entry, options) {
|
|
|
438
446
|
return component;
|
|
439
447
|
}
|
|
440
448
|
case "user":
|
|
441
|
-
return userMessageComponent(messageEntry.text, markdownTheme, options.toolOutputExpanded ?? false, options.outputPad ?? 1, options.markdownTransformers, options.renderLatex);
|
|
449
|
+
return userMessageComponent(messageEntry.text, markdownTheme, options.toolOutputExpanded ?? false, options.outputPad ?? 1, options.markdownTransformers, options.renderLatex, messageEntry.messageId, messageEntry.timestamp);
|
|
442
450
|
case "custom": {
|
|
443
451
|
if (isVerbatimCompactionMessage(messageEntry.message)) {
|
|
444
452
|
return compactionBoundaryFromMessage(messageEntry.message, options.toolOutputExpanded ?? false, options.outputPad);
|
|
@@ -466,16 +474,16 @@ class SkillMessageContainer extends Container {
|
|
|
466
474
|
}
|
|
467
475
|
}
|
|
468
476
|
}
|
|
469
|
-
function userMessageComponent(text, markdownTheme, expanded, outputPad = 1, markdownTransformers = [], renderLatex = true) {
|
|
477
|
+
function userMessageComponent(text, markdownTheme, expanded, outputPad = 1, markdownTransformers = [], renderLatex = true, messageId, timestamp) {
|
|
470
478
|
const skillBlock = parseSkillBlock(text);
|
|
471
479
|
if (!skillBlock)
|
|
472
|
-
return new UserMessageComponent(text, markdownTheme, outputPad, markdownTransformers, renderLatex);
|
|
480
|
+
return new UserMessageComponent(text, markdownTheme, outputPad, markdownTransformers, renderLatex, messageId, timestamp);
|
|
473
481
|
const container = new SkillMessageContainer();
|
|
474
482
|
const skillComponent = new SkillInvocationMessageComponent(skillBlock, markdownTheme, renderLatex, outputPad);
|
|
475
483
|
skillComponent.setExpanded(expanded);
|
|
476
484
|
container.addChild(skillComponent);
|
|
477
485
|
if (skillBlock.userMessage) {
|
|
478
|
-
container.addChild(new UserMessageComponent(skillBlock.userMessage, markdownTheme, outputPad, markdownTransformers, renderLatex));
|
|
486
|
+
container.addChild(new UserMessageComponent(skillBlock.userMessage, markdownTheme, outputPad, markdownTransformers, renderLatex, messageId, timestamp));
|
|
479
487
|
}
|
|
480
488
|
return container;
|
|
481
489
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-message-renderer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-message-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, ToolResultMessage } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { type Component, Container, type MarkdownTheme, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { parseSkillBlock } from \"../../../core/agent-session.js\";\nimport type { MarkdownTransformer, MessageRenderer, ToolRenderers } from \"../../../core/extensions/types.ts\";\nimport {\n\ttype BashExecutionMessage,\n\ttype BranchSummaryMessage,\n\ttype CustomMessage,\n\tisVerbatimCompactionMessage,\n} from \"../../../core/messages.ts\";\nimport type { TaskRecord } from \"../../../core/tasks/contracts.js\";\nimport type { OwnerTaskStore, TaskActivity } from \"../../../core/tasks/owner-store.js\";\nimport {\n\tapplyAssistantMessageDelta,\n\tbeginStreamingAssistantMessage,\n\ttype StreamingAssistantDelta,\n} from \"../streaming-assistant-message.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\nimport { AssistantMessageComponent } from \"./assistant-message.ts\";\nimport { BashExecutionComponent } from \"./bash-execution.ts\";\nimport { BranchSummaryMessageComponent } from \"./branch-summary-message.ts\";\nimport { extractMessageText } from \"./chat-session-host-utils.ts\";\nimport { compactionBoundaryFromMessage } from \"./compaction-boundary-message.ts\";\nimport { CustomMessageComponent } from \"./custom-message.ts\";\nimport { SkillInvocationMessageComponent } from \"./skill-invocation-message.ts\";\nimport { TaskRow } from \"./task-row.js\";\nimport { ToolExecutionComponent } from \"./tool-execution.ts\";\nimport { UserMessageComponent } from \"./user-message.ts\";\nexport type ChatMessageEntry =\n\t| { role: \"assistant\"; kind: \"assistant\"; message: AssistantMessage }\n\t| {\n\t\t\trole: \"tool\";\n\t\t\tkind: \"task\";\n\t\t\ttask: TaskRecord;\n\t\t\tduplicate: boolean;\n\t\t\tsiblings: readonly TaskRecord[];\n\t\t\tactivity: TaskActivity[];\n\t\t\tactivityOmitted: boolean;\n\t }\n\t| {\n\t\t\trole: \"tool\";\n\t\t\tkind: \"tool\";\n\t\t\ttoolName: string;\n\t\t\ttoolCallId: string;\n\t\t\targs: unknown;\n\t\t\tresult?: RenderableToolResult;\n\t\t\tisPartial?: boolean;\n\t }\n\t| { role: \"tool\"; kind: \"bashExecution\"; message: BashExecutionMessage; isPartial?: boolean }\n\t| { role: \"user\"; kind: \"user\"; text: string }\n\t| { role: \"custom\"; kind: \"custom\"; message: CustomMessage<unknown> }\n\t| { role: \"summary\"; kind: \"branchSummary\"; message: BranchSummaryMessage }\n\t| { role: \"system\"; kind: \"system\"; text: string };\nexport interface ChatMessageRenderOptions {\n\tui: Pick<TUI, \"requestRender\">;\n\tcwd: string;\n\tmarkdownTheme?: MarkdownTheme;\n\thideThinkingBlock?: boolean;\n\thiddenThinkingLabel?: string;\n\ttoolOutputExpanded?: boolean;\n\tshowImages?: boolean;\n\timageWidthCells?: number;\n\toutputPad?: number;\n\tisStreaming?: boolean;\n\tmarkdownTransformers?: readonly MarkdownTransformer[];\n\trenderLatex?: boolean;\n\tgetToolDefinition?: (toolName: string) => ToolRenderers | undefined;\n\tgetCustomMessageRenderer?: (customType: string) => MessageRenderer | undefined;\n\tcreateToolComponent?: (entry: Extract<ChatMessageEntry, { kind: \"tool\" }>) => Component;\n\tcreateCustomMessageComponent?: (message: CustomMessage<unknown>) => Component;\n}\nexport function chatEntriesFromAgentMessages(messages: readonly AgentMessage[]): ChatMessageEntry[] {\n\tconst entries: ChatMessageEntry[] = [];\n\tconst pendingTools = new Map<string, Extract<ChatMessageEntry, { kind: \"tool\" }>>();\n\tfor (const message of messages) {\n\t\tif (isLegacyCompactionSummaryMessage(message)) continue;\n\t\tswitch (message.role) {\n\t\t\tcase \"assistant\": {\n\t\t\t\tentries.push({ role: \"assistant\", kind: \"assistant\", message });\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type !== \"toolCall\") continue;\n\t\t\t\t\tconst toolEntry: ChatMessageEntry = {\n\t\t\t\t\t\trole: \"tool\",\n\t\t\t\t\t\tkind: \"tool\",\n\t\t\t\t\t\ttoolName: content.name,\n\t\t\t\t\t\ttoolCallId: content.id,\n\t\t\t\t\t\targs: content.arguments,\n\t\t\t\t\t\tisPartial: true,\n\t\t\t\t\t};\n\t\t\t\t\tentries.push(toolEntry);\n\t\t\t\t\tpendingTools.set(content.id, toolEntry);\n\t\t\t\t}\n\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\tconst errorText =\n\t\t\t\t\t\tmessage.stopReason === \"aborted\"\n\t\t\t\t\t\t\t? message.errorMessage || \"Operation aborted\"\n\t\t\t\t\t\t\t: message.errorMessage || \"Unknown error\";\n\t\t\t\t\tfor (const toolEntry of pendingTools.values()) {\n\t\t\t\t\t\ttoolEntry.result = {\n\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\ttoolCallId: toolEntry.toolCallId,\n\t\t\t\t\t\t\ttoolName: toolEntry.toolName,\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorText }],\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttoolEntry.isPartial = false;\n\t\t\t\t\t}\n\t\t\t\t\tpendingTools.clear();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\tconst toolEntry = pendingTools.get(message.toolCallId);\n\t\t\t\tif (toolEntry) {\n\t\t\t\t\ttoolEntry.result = message;\n\t\t\t\t\ttoolEntry.isPartial = false;\n\t\t\t\t\tpendingTools.delete(message.toolCallId);\n\t\t\t\t} else {\n\t\t\t\t\tentries.push({\n\t\t\t\t\t\trole: \"tool\",\n\t\t\t\t\t\tkind: \"tool\",\n\t\t\t\t\t\ttoolName: message.toolName,\n\t\t\t\t\t\ttoolCallId: message.toolCallId,\n\t\t\t\t\t\targs: {},\n\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\tisPartial: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst text = getMessageText(message);\n\t\t\t\tif (text) entries.push({ role: \"user\", kind: \"user\", text });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"bashExecution\":\n\t\t\t\tentries.push({ role: \"tool\", kind: \"bashExecution\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"custom\":\n\t\t\t\tif (message.display) entries.push({ role: \"custom\", kind: \"custom\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"branchSummary\":\n\t\t\t\tentries.push({ role: \"summary\", kind: \"branchSummary\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"system\":\n\t\t\t\t// System messages carry prompt sections, not chat content; rendering\n\t\t\t\t// them printed a bare dim \"system\" line in workflow stage chats.\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst role = (message as { role: string }).role;\n\t\t\t\tentries.push({ role: \"system\", kind: \"system\", text: role });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn entries;\n}\nexport interface LiveChatEventLike {\n\treadonly type?: unknown;\n\treadonly message?: unknown;\n\treadonly assistantMessageEvent?: StreamingAssistantDelta;\n\treadonly toolCallId?: unknown;\n\treadonly parentToolCallId?: unknown;\n\treadonly toolName?: unknown;\n\treadonly args?: unknown;\n\treadonly partialResult?: unknown;\n\treadonly result?: unknown;\n\treadonly isError?: unknown;\n\treadonly durationMs?: unknown;\n}\ntype LiveChatEntry = ChatMessageEntry | { role: string };\nexport class LiveChatEntriesController {\n\tprivate streamingAssistantIndex: number | undefined;\n\tprivate pendingToolIndexes = new Map<string, number>();\n\tprivate declare readonly entries: LiveChatEntry[];\n\tconstructor(entries: LiveChatEntry[]) {\n\t\tthis.entries = entries;\n\t}\n\tclearTasks(): void {\n\t\tconst streaming =\n\t\t\tthis.streamingAssistantIndex === undefined ? undefined : this.entries[this.streamingAssistantIndex];\n\t\tfor (let index = this.entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = this.entries[index];\n\t\t\tif (\"kind\" in entry && entry.kind === \"task\") this.entries.splice(index, 1);\n\t\t}\n\t\tthis.streamingAssistantIndex = streaming === undefined ? undefined : this.entries.indexOf(streaming);\n\t\tthis.reindexPendingTools();\n\t}\n\tupsertTasks(tasks: readonly TaskRecord[], store?: OwnerTaskStore): void {\n\t\tfor (const task of tasks) {\n\t\t\tconst activity = store?.recentActivity(task.ref.taskId) ?? [];\n\t\t\tconst activityOmitted = store?.activityOmitted(task.ref.taskId) ?? false;\n\t\t\tconst duplicate =\n\t\t\t\ttasks.filter((other) => other.agentName === task.agentName && other.title === task.title).length > 1;\n\t\t\tconst entry = this.entries.find(\n\t\t\t\t(entry) => \"kind\" in entry && entry.kind === \"task\" && entry.task.ref.taskId === task.ref.taskId,\n\t\t\t);\n\t\t\tif (entry && \"kind\" in entry && entry.kind === \"task\") {\n\t\t\t\tentry.task = task;\n\t\t\t\tentry.duplicate = duplicate;\n\t\t\t\tentry.siblings = tasks;\n\t\t\t\tentry.activity = activity;\n\t\t\t\tentry.activityOmitted = activityOmitted;\n\t\t\t} else\n\t\t\t\tthis.entries.push({\n\t\t\t\t\trole: \"tool\",\n\t\t\t\t\tkind: \"task\",\n\t\t\t\t\ttask,\n\t\t\t\t\tduplicate,\n\t\t\t\t\tsiblings: tasks,\n\t\t\t\t\tactivity,\n\t\t\t\t\tactivityOmitted,\n\t\t\t\t});\n\t\t}\n\t}\n\tappendMessages(messages: readonly AgentMessage[]): void {\n\t\tthis.entries.push(...chatEntriesFromAgentMessages(messages));\n\t\tthis.reindexPendingTools();\n\t}\n\treplaceMessages(messages: readonly AgentMessage[], preservedEntries: readonly { role: string }[] = []): void {\n\t\tthis.entries.splice(0, this.entries.length, ...chatEntriesFromAgentMessages(messages), ...preservedEntries);\n\t\tthis.streamingAssistantIndex = undefined;\n\t\tthis.reindexPendingTools();\n\t}\n\tappendUserText(text: string): void {\n\t\tthis.entries.push({ role: \"user\", kind: \"user\", text });\n\t}\n\t/**\n\t * Seed the assistant message a chat mounted mid-stream never saw start.\n\t *\n\t * Delta-only updates carry just the next fragment, so a consumer attached\n\t * part-way through a turn cannot recover the text that already streamed. The\n\t * live session keeps that in-flight message, and seeding it here makes the\n\t * deltas that arrive afterwards continue it instead of opening a second\n\t * assistant message. A stream this consumer is already following wins.\n\t */\n\thydrateStreamingAssistantMessage(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message) || message.role !== \"assistant\") return false;\n\t\tif (this.currentStreamingAssistantMessage() !== undefined) return false;\n\t\treturn this.updateAssistantMessage(beginStreamingAssistantMessage(message as AssistantMessage));\n\t}\n\tapplyEvent(event: LiveChatEventLike): boolean {\n\t\tconst type = String(event.type ?? \"\");\n\t\tif (typeof event.parentToolCallId === \"string\" && type.startsWith(\"tool_execution_\")) return false;\n\t\tswitch (type) {\n\t\t\tcase \"message_start\":\n\t\t\t\treturn this.handleMessageStart(event.message);\n\t\t\tcase \"message_update\":\n\t\t\t\treturn this.handleMessageUpdate(event);\n\t\t\tcase \"message_end\":\n\t\t\t\treturn this.handleMessageEnd(event.message);\n\t\t\tcase \"tool_execution_start\":\n\t\t\t\treturn this.upsertToolEntry({\n\t\t\t\t\ttoolCallId: typeof event.toolCallId === \"string\" ? event.toolCallId : undefined,\n\t\t\t\t\ttoolName: typeof event.toolName === \"string\" ? event.toolName : \"tool\",\n\t\t\t\t\targs: event.args,\n\t\t\t\t\tisPartial: true,\n\t\t\t\t});\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst toolCallId = typeof event.toolCallId === \"string\" ? event.toolCallId : undefined;\n\t\t\t\tif (!toolCallId) return false;\n\t\t\t\treturn this.updateToolResult(toolCallId, event.partialResult, true, false);\n\t\t\t}\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst toolCallId = typeof event.toolCallId === \"string\" ? event.toolCallId : undefined;\n\t\t\t\tif (!toolCallId) return false;\n\t\t\t\treturn this.updateToolResult(\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\tevent.result,\n\t\t\t\t\tfalse,\n\t\t\t\t\tevent.isError === true,\n\t\t\t\t\ttypeof event.durationMs === \"number\" ? event.durationMs : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpendingToolIds(): string[] {\n\t\treturn [...this.pendingToolIndexes.keys()];\n\t}\n\tclearPendingTools(): void {\n\t\tthis.pendingToolIndexes.clear();\n\t}\n\n\tisStreamingAssistantEntry(entry: ChatMessageEntry): boolean {\n\t\treturn this.streamingAssistantIndex !== undefined && this.entries[this.streamingAssistantIndex] === entry;\n\t}\n\n\tprivate handleMessageStart(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message)) return false;\n\t\tif (message.role === \"assistant\") {\n\t\t\tthis.streamingAssistantIndex = undefined;\n\t\t\treturn this.updateAssistantMessage(beginStreamingAssistantMessage(message as AssistantMessage));\n\t\t}\n\t\tif (message.role === \"toolResult\") {\n\t\t\tconst toolResult = message as ToolResultMessage;\n\t\t\tif (this.findToolEntryIndex(toolResult.toolCallId) >= 0) return true;\n\t\t}\n\t\tconst entries = chatEntriesFromAgentMessages([message as AgentMessage]);\n\t\tif (entries.length === 0) return false;\n\t\tthis.entries.push(...entries);\n\t\tthis.reindexPendingTools();\n\t\treturn true;\n\t}\n\tprivate handleMessageUpdate(event: LiveChatEventLike): boolean {\n\t\tif (!event.assistantMessageEvent) return false;\n\t\tconst message = this.currentStreamingAssistantMessage() ?? minimalAssistantMessage();\n\t\tif (!applyAssistantMessageDelta(message, event.assistantMessageEvent)) return false;\n\t\treturn this.updateAssistantMessage(message);\n\t}\n\tprivate handleMessageEnd(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message) || message.role !== \"assistant\") return false;\n\t\tconst changed = this.updateAssistantMessage(message as AssistantMessage);\n\t\tconst stopReason = typeof message.stopReason === \"string\" ? message.stopReason : \"\";\n\t\tif (stopReason === \"aborted\" || stopReason === \"error\") {\n\t\t\tconst errorText =\n\t\t\t\ttypeof message.errorMessage === \"string\" && message.errorMessage\n\t\t\t\t\t? message.errorMessage\n\t\t\t\t\t: stopReason === \"aborted\"\n\t\t\t\t\t\t? \"Operation aborted\"\n\t\t\t\t\t\t: \"Unknown error\";\n\t\t\tfor (const toolCallId of this.pendingToolIds()) {\n\t\t\t\tthis.updateToolResult(toolCallId, { content: [{ type: \"text\", text: errorText }] }, false, true);\n\t\t\t}\n\t\t\tthis.clearPendingTools();\n\t\t}\n\t\tthis.streamingAssistantIndex = undefined;\n\t\treturn changed || true;\n\t}\n\tprivate updateAssistantMessage(message: AssistantMessage): boolean {\n\t\tif (\n\t\t\tthis.streamingAssistantIndex !== undefined &&\n\t\t\tthis.isAssistantEntry(this.entries[this.streamingAssistantIndex])\n\t\t) {\n\t\t\tthis.entries[this.streamingAssistantIndex] = {\n\t\t\t\t...(this.entries[this.streamingAssistantIndex] as Extract<ChatMessageEntry, { kind: \"assistant\" }>),\n\t\t\t\tmessage,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.entries.push({ role: \"assistant\", kind: \"assistant\", message });\n\t\t\tthis.streamingAssistantIndex = this.entries.length - 1;\n\t\t}\n\t\tfor (const content of message.content) {\n\t\t\tif (content.type !== \"toolCall\") continue;\n\t\t\tthis.upsertToolEntry({\n\t\t\t\ttoolCallId: content.id,\n\t\t\t\ttoolName: content.name,\n\t\t\t\targs: content.arguments,\n\t\t\t\tisPartial: true,\n\t\t\t});\n\t\t}\n\t\treturn true;\n\t}\n\tprivate currentStreamingAssistantMessage(): AssistantMessage | undefined {\n\t\tconst entry = this.streamingAssistantIndex !== undefined ? this.entries[this.streamingAssistantIndex] : undefined;\n\t\treturn this.isAssistantEntry(entry) ? entry.message : undefined;\n\t}\n\tprivate upsertToolEntry(update: {\n\t\ttoolCallId?: string;\n\t\ttoolName: string;\n\t\targs?: unknown;\n\t\tisPartial: boolean;\n\t}): boolean {\n\t\tconst toolCallId = update.toolCallId ?? `live-${update.toolName}`;\n\t\tconst index = this.pendingToolIndexes.get(toolCallId) ?? this.findToolEntryIndex(toolCallId, update.toolName);\n\t\tconst previous = index >= 0 ? this.entries[index] : undefined;\n\t\tconst previousTool = this.isToolEntry(previous) ? previous : undefined;\n\t\tconst next: ChatMessageEntry = {\n\t\t\trole: \"tool\",\n\t\t\tkind: \"tool\",\n\t\t\ttoolName: previousTool?.toolName ?? update.toolName,\n\t\t\ttoolCallId,\n\t\t\targs: update.args ?? previousTool?.args ?? {},\n\t\t\tresult: previousTool?.result,\n\t\t\tisPartial: update.isPartial,\n\t\t};\n\t\tif (index >= 0) this.entries[index] = next;\n\t\telse this.entries.push(next);\n\t\tthis.pendingToolIndexes.set(toolCallId, index >= 0 ? index : this.entries.length - 1);\n\t\treturn true;\n\t}\n\tprivate updateToolResult(\n\t\ttoolCallId: string,\n\t\tresult: unknown,\n\t\tisPartial: boolean,\n\t\tisError: boolean,\n\t\tdurationMs?: number,\n\t): boolean {\n\t\tconst index = this.pendingToolIndexes.get(toolCallId) ?? this.findToolEntryIndex(toolCallId);\n\t\tif (index < 0) return false;\n\t\tconst entry = this.entries[index];\n\t\tif (!this.isToolEntry(entry)) return false;\n\t\tconst resultObject = toolResultFromUnknown(result, entry.toolName, toolCallId, isError);\n\t\tif (durationMs !== undefined) resultObject.durationMs = durationMs;\n\t\tthis.entries[index] = { ...entry, result: resultObject, isPartial };\n\t\tif (!isPartial) this.pendingToolIndexes.delete(toolCallId);\n\t\treturn true;\n\t}\n\tprivate isSyntheticToolCallId(toolCallId: string): boolean {\n\t\treturn toolCallId.startsWith(\"live-\");\n\t}\n\tprivate findToolEntryIndex(toolCallId: string, toolName?: string): number {\n\t\tfor (let i = this.entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.entries[i];\n\t\t\tif (!this.isToolEntry(entry)) continue;\n\t\t\tif (entry.toolCallId === toolCallId) return i;\n\t\t\tif (\n\t\t\t\ttoolName &&\n\t\t\t\tentry.toolName === toolName &&\n\t\t\t\tentry.isPartial !== false &&\n\t\t\t\t(this.isSyntheticToolCallId(toolCallId) || this.isSyntheticToolCallId(entry.toolCallId))\n\t\t\t) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tprivate reindexPendingTools(): void {\n\t\tthis.pendingToolIndexes.clear();\n\t\tfor (let i = 0; i < this.entries.length; i++) {\n\t\t\tconst entry = this.entries[i];\n\t\t\tif (this.isToolEntry(entry) && entry.isPartial !== false) this.pendingToolIndexes.set(entry.toolCallId, i);\n\t\t}\n\t}\n\tprivate isAssistantEntry(\n\t\tentry: LiveChatEntry | undefined,\n\t): entry is Extract<ChatMessageEntry, { kind: \"assistant\" }> {\n\t\treturn isChatMessageEntry(entry) && entry.kind === \"assistant\";\n\t}\n\tprivate isToolEntry(entry: LiveChatEntry | undefined): entry is Extract<ChatMessageEntry, { kind: \"tool\" }> {\n\t\treturn isChatMessageEntry(entry) && entry.kind === \"tool\";\n\t}\n}\nfunction isChatMessageEntry(entry: LiveChatEntry | undefined): entry is ChatMessageEntry {\n\treturn entry !== undefined && \"kind\" in entry;\n}\nfunction isLegacyCompactionSummaryMessage(message: AgentMessage): boolean {\n\treturn message.role === \"compaction\" + \"Summary\";\n}\nfunction isAgentMessageLike(\n\tmessage: unknown,\n): message is AgentMessage & { stopReason?: unknown; errorMessage?: unknown } {\n\treturn message !== null && typeof message === \"object\" && \"role\" in message;\n}\nfunction minimalAssistantMessage(): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tstopReason: \"stop\",\n\t} as unknown as AssistantMessage;\n}\n/** UI progress may contain in-memory details; only durable transcript results are JSON. */\ntype RenderableToolResult = Omit<ToolResultMessage, \"details\"> & { details?: unknown };\nfunction toolResultFromUnknown(\n\tresult: unknown,\n\ttoolName: string,\n\ttoolCallId: string,\n\tisError: boolean,\n): RenderableToolResult {\n\tif (result !== null && typeof result === \"object\" && \"content\" in result) {\n\t\tconst candidate = result as { content?: unknown; details?: unknown };\n\t\tconst content = Array.isArray(candidate.content) ? candidate.content : [];\n\t\treturn {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tcontent: content as ToolResultMessage[\"content\"],\n\t\t\tdetails: candidate.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId,\n\t\ttoolName,\n\t\tcontent: typeof result === \"string\" ? [{ type: \"text\", text: result }] : [],\n\t\tisError,\n\t\ttimestamp: Date.now(),\n\t};\n}\nexport function renderChatMessageEntry(entry: ChatMessageEntry, options: ChatMessageRenderOptions): Component {\n\tconst messageEntry = entry as ChatMessageEntry;\n\tconst markdownTheme = options.markdownTheme ?? getMarkdownTheme();\n\tswitch (messageEntry.kind) {\n\t\tcase \"task\":\n\t\t\treturn new TaskRow(messageEntry.task, {\n\t\t\t\texpanded: options.toolOutputExpanded,\n\t\t\t\tduplicate: messageEntry.duplicate,\n\t\t\t\tsiblings: messageEntry.siblings,\n\t\t\t\tactivity: messageEntry.activity,\n\t\t\t\tactivityOmitted: messageEntry.activityOmitted,\n\t\t\t});\n\t\tcase \"assistant\":\n\t\t\treturn new AssistantMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\toptions.hideThinkingBlock ?? false,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.hiddenThinkingLabel ?? \"Thinking...\",\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.markdownTransformers,\n\t\t\t\toptions.isStreaming,\n\t\t\t\toptions.renderLatex,\n\t\t\t);\n\t\tcase \"tool\": {\n\t\t\tif (options.createToolComponent) return options.createToolComponent(messageEntry);\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tmessageEntry.toolName,\n\t\t\t\tmessageEntry.toolCallId,\n\t\t\t\tmessageEntry.args,\n\t\t\t\t{\n\t\t\t\t\tshowImages: options.showImages ?? true,\n\t\t\t\t\timageWidthCells: options.imageWidthCells,\n\t\t\t\t\toutputPad: options.outputPad,\n\t\t\t\t},\n\t\t\t\toptions.getToolDefinition?.(messageEntry.toolName),\n\t\t\t\toptions.ui as TUI,\n\t\t\t\toptions.cwd,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\tif (messageEntry.result) component.updateResult(messageEntry.result, messageEntry.isPartial ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"bashExecution\": {\n\t\t\tconst component = new BashExecutionComponent(\n\t\t\t\tmessageEntry.message.command,\n\t\t\t\toptions.ui as TUI,\n\t\t\t\tmessageEntry.message.excludeFromContext,\n\t\t\t\toptions.outputPad,\n\t\t\t);\n\t\t\tif (messageEntry.message.output) component.appendOutput(messageEntry.message.output);\n\t\t\tif (messageEntry.isPartial !== true) {\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessageEntry.message.exitCode,\n\t\t\t\t\tmessageEntry.message.cancelled,\n\t\t\t\t\tmessageEntry.message.truncated\n\t\t\t\t\t\t? ({ truncated: true } as Parameters<BashExecutionComponent[\"setComplete\"]>[2])\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tmessageEntry.message.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn component;\n\t\t}\n\t\tcase \"user\":\n\t\t\treturn userMessageComponent(\n\t\t\t\tmessageEntry.text,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.toolOutputExpanded ?? false,\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.markdownTransformers,\n\t\t\t\toptions.renderLatex,\n\t\t\t);\n\t\tcase \"custom\": {\n\t\t\tif (isVerbatimCompactionMessage(messageEntry.message)) {\n\t\t\t\treturn compactionBoundaryFromMessage(\n\t\t\t\t\tmessageEntry.message,\n\t\t\t\t\toptions.toolOutputExpanded ?? false,\n\t\t\t\t\toptions.outputPad,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options.createCustomMessageComponent) return options.createCustomMessageComponent(messageEntry.message);\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\toptions.getCustomMessageRenderer?.(messageEntry.message.customType),\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.renderLatex,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"branchSummary\": {\n\t\t\tconst component = new BranchSummaryMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.renderLatex,\n\t\t\t\toptions.outputPad,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"system\":\n\t\t\treturn new Text(theme.fg(\"dim\", messageEntry.text), options.outputPad ?? 1, 0);\n\t}\n}\nclass SkillMessageContainer extends Container {\n\tsetOutputPad(outputPad: number): void {\n\t\tfor (const child of this.children) {\n\t\t\tif (\"setOutputPad\" in child && typeof child.setOutputPad === \"function\") child.setOutputPad(outputPad);\n\t\t}\n\t}\n}\n\nfunction userMessageComponent(\n\ttext: string,\n\tmarkdownTheme: MarkdownTheme,\n\texpanded: boolean,\n\toutputPad = 1,\n\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\trenderLatex = true,\n): Component {\n\tconst skillBlock = parseSkillBlock(text);\n\tif (!skillBlock) return new UserMessageComponent(text, markdownTheme, outputPad, markdownTransformers, renderLatex);\n\tconst container = new SkillMessageContainer();\n\tconst skillComponent = new SkillInvocationMessageComponent(skillBlock, markdownTheme, renderLatex, outputPad);\n\tskillComponent.setExpanded(expanded);\n\tcontainer.addChild(skillComponent);\n\tif (skillBlock.userMessage) {\n\t\tcontainer.addChild(\n\t\t\tnew UserMessageComponent(skillBlock.userMessage, markdownTheme, outputPad, markdownTransformers, renderLatex),\n\t\t);\n\t}\n\treturn container;\n}\nfunction getMessageText(message: Extract<AgentMessage, { role: \"user\" }>): string {\n\treturn extractMessageText(message.content).trim();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-message-renderer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-message-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,SAAS,EAAsB,IAAI,EAAY,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAIN,2BAA2B,GAC3B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACN,0BAA0B,EAC1B,8BAA8B,GAE9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAgDzD,MAAM,UAAU,4BAA4B,CAC3C,QAAiC,EACjC,WAA6D;IAE7D,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuD,CAAC;IACpF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,gCAAgC,CAAC,OAAO,CAAC;YAAE,SAAS;QACxD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,WAAW,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,WAAW;oBACjB,OAAO;oBACP,SAAS,EAAE,IAAI,EAAE,EAAE;oBACnB,SAAS,EAAE,IAAI,EAAE,SAAS;iBAC1B,CAAC,CAAC;gBACH,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;wBAAE,SAAS;oBAC1C,MAAM,SAAS,GAAqB;wBACnC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,OAAO,CAAC,IAAI;wBACtB,UAAU,EAAE,OAAO,CAAC,EAAE;wBACtB,IAAI,EAAE,OAAO,CAAC,SAAS;wBACvB,SAAS,EAAE,IAAI;qBACf,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxB,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;oBACxE,MAAM,SAAS,GACd,OAAO,CAAC,UAAU,KAAK,SAAS;wBAC/B,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,mBAAmB;wBAC7C,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC;oBAC5C,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;wBAC/C,SAAS,CAAC,MAAM,GAAG;4BAClB,IAAI,EAAE,YAAY;4BAClB,UAAU,EAAE,SAAS,CAAC,UAAU;4BAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;4BAC5B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;4BAC5C,OAAO,EAAE,IAAI;4BACb,SAAS,EAAE,OAAO,CAAC,SAAS;yBAC5B,CAAC;wBACF,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC7B,CAAC;oBACD,YAAY,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvD,IAAI,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;oBAC3B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC5B,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,IAAI,EAAE,EAAE;wBACR,MAAM,EAAE,OAAO;wBACf,SAAS,EAAE,KAAK;qBAChB,CAAC,CAAC;gBACJ,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,IAAI;oBACP,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACrG,MAAM;YACP,CAAC;YACD,KAAK,eAAe;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/D,MAAM;YACP,KAAK,QAAQ;gBACZ,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/E,MAAM;YACP,KAAK,eAAe;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClE,MAAM;YACP,KAAK,QAAQ;gBACZ,qEAAqE;gBACrE,iEAAiE;gBACjE,MAAM;YACP,SAAS,CAAC;gBACT,MAAM,IAAI,GAAI,OAA4B,CAAC,IAAI,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAeD,MAAM,OAAO,yBAAyB;IAC7B,uBAAuB,CAAqB;IAC5C,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvD,YAAY,OAAwB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IACD,UAAU;QACT,MAAM,SAAS,GACd,IAAI,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrG,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IACD,WAAW,CAAC,KAA4B,EAAE,KAAsB;QAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,eAAe,GAAG,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;YACzE,MAAM,SAAS,GACd,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACtG,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAChG,CAAC;YACF,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC5B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACvB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC1B,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;YACzC,CAAC;;gBACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,SAAS;oBACT,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,eAAe;iBACf,CAAC,CAAC;QACL,CAAC;IACF,CAAC;IACD,cAAc,CAAC,QAAiC;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IACD,eAAe,CAAC,QAAiC,EAAE,gBAAgB,GAAgC,EAAE;QACpG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,4BAA4B,CAAC,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC;QAC5G,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IACD,cAAc,CAAC,IAAY;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD;;;;;;;;OAQG;IACH,gCAAgC,CAAC,OAAgB;QAChD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/E,IAAI,IAAI,CAAC,gCAAgC,EAAE,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxE,OAAO,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,OAA2B,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,UAAU,CAAC,KAAwB;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,KAAK,CAAC;QACnG,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,eAAe;gBACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,KAAK,gBAAgB;gBACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACxC,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,sBAAsB;gBAC1B,OAAO,IAAI,CAAC,eAAe,CAAC;oBAC3B,UAAU,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;oBAC/E,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;oBACtE,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,IAAI;iBACf,CAAC,CAAC;YACJ,KAAK,uBAAuB,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvF,IAAI,CAAC,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5E,CAAC;YACD,KAAK,oBAAoB,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvF,IAAI,CAAC,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAC9B,OAAO,IAAI,CAAC,gBAAgB,CAC3B,UAAU,EACV,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,KAAK,CAAC,OAAO,KAAK,IAAI,EACtB,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC;YACH,CAAC;YACD;gBACC,OAAO,KAAK,CAAC;QACf,CAAC;IACF,CAAC;IACD,cAAc;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,iBAAiB;QAChB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,yBAAyB,CAAC,KAAuB;QAChD,OAAO,IAAI,CAAC,uBAAuB,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,KAAK,CAAC;IAC3G,CAAC;IAEO,kBAAkB,CAAC,OAAgB;QAC1C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;YACzC,OAAO,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,OAA2B,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,OAA4B,CAAC;YAChD,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtE,CAAC;QACD,MAAM,OAAO,GAAG,4BAA4B,CAAC,CAAC,OAAuB,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACb,CAAC;IACO,mBAAmB,CAAC,KAAwB;QACnD,IAAI,CAAC,KAAK,CAAC,qBAAqB;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,gCAAgC,EAAE,IAAI,uBAAuB,EAAE,CAAC;QACrF,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC;YAAE,OAAO,KAAK,CAAC;QACpF,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACO,gBAAgB,CAAC,OAAgB;QACxC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAA2B,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,SAAS,GACd,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY;gBAC/D,CAAC,CAAC,OAAO,CAAC,YAAY;gBACtB,CAAC,CAAC,UAAU,KAAK,SAAS;oBACzB,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,eAAe,CAAC;YACrB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,OAAO,OAAO,IAAI,IAAI,CAAC;IACxB,CAAC;IACO,sBAAsB,CAAC,OAAyB;QACvD,IACC,IAAI,CAAC,uBAAuB,KAAK,SAAS;YAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAChE,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG;gBAC5C,GAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAsD;gBACnG,OAAO;aACP,CAAC;QACH,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YAC1C,IAAI,CAAC,eAAe,CAAC;gBACpB,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACO,gCAAgC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClH,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IACO,eAAe,CAAC,MAKvB;QACA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,IAAI,GAAqB;YAC9B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ;YACnD,UAAU;YACV,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,EAAE;YAC7C,MAAM,EAAE,YAAY,EAAE,MAAM;YAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC3B,CAAC;QACF,IAAI,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC;IACb,CAAC;IACO,gBAAgB,CACvB,UAAkB,EAClB,MAAe,EACf,SAAkB,EAClB,OAAgB,EAChB,UAAmB;QAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC7F,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,UAAU,KAAK,SAAS;YAAE,YAAY,CAAC,UAAU,GAAG,UAAU,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACpE,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACb,CAAC;IACO,qBAAqB,CAAC,UAAkB;QAC/C,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IACO,kBAAkB,CAAC,UAAkB,EAAE,QAAiB;QAC/D,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAAE,SAAS;YACvC,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,CAAC,CAAC;YAC9C,IACC,QAAQ;gBACR,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAC3B,KAAK,CAAC,SAAS,KAAK,KAAK;gBACzB,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EACvF,CAAC;gBACF,OAAO,CAAC,CAAC;YACV,CAAC;QACF,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IACO,mBAAmB;QAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK;gBAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5G,CAAC;IACF,CAAC;IACO,gBAAgB,CACvB,KAAgC;QAEhC,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;IAChE,CAAC;IACO,WAAW,CAAC,KAAgC;QACnD,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;IAC3D,CAAC;CACD;AACD,SAAS,kBAAkB,CAAC,KAAgC;IAC3D,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,IAAI,KAAK,CAAC;AAC/C,CAAC;AACD,SAAS,gCAAgC,CAAC,OAAqB;IAC9D,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,GAAG,SAAS,CAAC;AAClD,CAAC;AACD,SAAS,kBAAkB,CAC1B,OAAgB;IAEhB,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC;AAC7E,CAAC;AACD,SAAS,uBAAuB;IAC/B,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,MAAM;KACa,CAAC;AAClC,CAAC;AAGD,SAAS,qBAAqB,CAC7B,MAAe,EACf,QAAgB,EAChB,UAAkB,EAClB,OAAgB;IAEhB,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QAC1E,MAAM,SAAS,GAAG,MAAkD,CAAC;QACrE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,UAAU;YACV,QAAQ;YACR,OAAO,EAAE,OAAuC;YAChD,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;IACH,CAAC;IACD,OAAO;QACN,IAAI,EAAE,YAAY;QAClB,UAAU;QACV,QAAQ;QACR,OAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3E,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACrB,CAAC;AACH,CAAC;AACD,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,OAAiC;IAChG,MAAM,YAAY,GAAG,KAAyB,CAAC;IAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;IAClE,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,MAAM;YACV,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;gBACrC,QAAQ,EAAE,OAAO,CAAC,kBAAkB;gBACpC,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,eAAe,EAAE,YAAY,CAAC,eAAe;aAC7C,CAAC,CAAC;QACJ,KAAK,WAAW;YACf,OAAO,IAAI,yBAAyB,CACnC,YAAY,CAAC,OAAO,EACpB,OAAO,CAAC,iBAAiB,IAAI,KAAK,EAClC,aAAa,EACb,OAAO,CAAC,mBAAmB,IAAI,aAAa,EAC5C,OAAO,CAAC,SAAS,IAAI,CAAC,EACtB,OAAO,CAAC,oBAAoB,EAC5B,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,WAAW,EACnB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,SAAS,CACtB,CAAC;QACH,KAAK,MAAM,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,mBAAmB;gBAAE,OAAO,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAClF,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAC3C,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,UAAU,EACvB,YAAY,CAAC,IAAI,EACjB;gBACC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;gBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;aAC5B,EACD,OAAO,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAClD,OAAO,CAAC,EAAS,EACjB,OAAO,CAAC,GAAG,CACX,CAAC;YACF,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;YAC3D,IAAI,YAAY,CAAC,MAAM;gBAAE,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;YACtG,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,eAAe,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAC3C,YAAY,CAAC,OAAO,CAAC,OAAO,EAC5B,OAAO,CAAC,EAAS,EACjB,YAAY,CAAC,OAAO,CAAC,kBAAkB,EACvC,OAAO,CAAC,SAAS,CACjB,CAAC;YACF,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM;gBAAE,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrF,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACrC,SAAS,CAAC,WAAW,CACpB,YAAY,CAAC,OAAO,CAAC,QAAQ,EAC7B,YAAY,CAAC,OAAO,CAAC,SAAS,EAC9B,YAAY,CAAC,OAAO,CAAC,SAAS;oBAC7B,CAAC,CAAE,EAAE,SAAS,EAAE,IAAI,EAA2D;oBAC/E,CAAC,CAAC,SAAS,EACZ,YAAY,CAAC,OAAO,CAAC,cAAc,CACnC,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM;YACV,OAAO,oBAAoB,CAC1B,YAAY,CAAC,IAAI,EACjB,aAAa,EACb,OAAO,CAAC,kBAAkB,IAAI,KAAK,EACnC,OAAO,CAAC,SAAS,IAAI,CAAC,EACtB,OAAO,CAAC,oBAAoB,EAC5B,OAAO,CAAC,WAAW,EACnB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,SAAS,CACtB,CAAC;QACH,KAAK,QAAQ,EAAE,CAAC;YACf,IAAI,2BAA2B,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,OAAO,6BAA6B,CACnC,YAAY,CAAC,OAAO,EACpB,OAAO,CAAC,kBAAkB,IAAI,KAAK,EACnC,OAAO,CAAC,SAAS,CACjB,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,4BAA4B;gBAAE,OAAO,OAAO,CAAC,4BAA4B,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5G,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAC3C,YAAY,CAAC,OAAO,EACpB,OAAO,CAAC,wBAAwB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EACnE,aAAa,EACb,OAAO,CAAC,SAAS,IAAI,CAAC,EACtB,OAAO,CAAC,WAAW,CACnB,CAAC;YACF,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;YAC3D,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,eAAe,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAClD,YAAY,CAAC,OAAO,EACpB,aAAa,EACb,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,CACjB,CAAC;YACF,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;YAC3D,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;AACF,CAAC;AACD,MAAM,qBAAsB,SAAQ,SAAS;IAC5C,YAAY,CAAC,SAAiB;QAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,cAAc,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU;gBAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxG,CAAC;IACF,CAAC;CACD;AAED,SAAS,oBAAoB,CAC5B,IAAY,EACZ,aAA4B,EAC5B,QAAiB,EACjB,SAAS,GAAG,CAAC,EACb,oBAAoB,GAAmC,EAAE,EACzD,WAAW,GAAG,IAAI,EAClB,SAAkB,EAClB,SAAkB;IAElB,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU;QACd,OAAO,IAAI,oBAAoB,CAC9B,IAAI,EACJ,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,SAAS,CACT,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,IAAI,+BAA+B,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9G,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5B,SAAS,CAAC,QAAQ,CACjB,IAAI,oBAAoB,CACvB,UAAU,CAAC,WAAW,EACtB,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,SAAS,CACT,CACD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AACD,SAAS,cAAc,CAAC,OAAgD;IACvE,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC","sourcesContent":["import type { AssistantMessage, ToolResultMessage } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { type Component, Container, type MarkdownTheme, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { parseSkillBlock } from \"../../../core/agent-session.js\";\nimport type { MarkdownTransformer, MessageRenderer, ToolRenderers } from \"../../../core/extensions/types.ts\";\nimport {\n\ttype BashExecutionMessage,\n\ttype BranchSummaryMessage,\n\ttype CustomMessage,\n\tisVerbatimCompactionMessage,\n} from \"../../../core/messages.ts\";\nimport type { TaskRecord } from \"../../../core/tasks/contracts.js\";\nimport type { OwnerTaskStore, TaskActivity } from \"../../../core/tasks/owner-store.js\";\nimport {\n\tapplyAssistantMessageDelta,\n\tbeginStreamingAssistantMessage,\n\ttype StreamingAssistantDelta,\n} from \"../streaming-assistant-message.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\nimport { AssistantMessageComponent } from \"./assistant-message.ts\";\nimport { BashExecutionComponent } from \"./bash-execution.ts\";\nimport { BranchSummaryMessageComponent } from \"./branch-summary-message.ts\";\nimport { extractMessageText } from \"./chat-session-host-utils.ts\";\nimport { compactionBoundaryFromMessage } from \"./compaction-boundary-message.ts\";\nimport { CustomMessageComponent } from \"./custom-message.ts\";\nimport { SkillInvocationMessageComponent } from \"./skill-invocation-message.ts\";\nimport { TaskRow } from \"./task-row.js\";\nimport { ToolExecutionComponent } from \"./tool-execution.ts\";\nimport { UserMessageComponent } from \"./user-message.ts\";\nexport interface PersistedMessageMeta {\n\tid: string;\n\ttimestamp: string;\n}\nexport type ChatMessageEntry =\n\t| { role: \"assistant\"; kind: \"assistant\"; message: AssistantMessage; messageId?: string; timestamp?: string }\n\t| {\n\t\t\trole: \"tool\";\n\t\t\tkind: \"task\";\n\t\t\ttask: TaskRecord;\n\t\t\tduplicate: boolean;\n\t\t\tsiblings: readonly TaskRecord[];\n\t\t\tactivity: TaskActivity[];\n\t\t\tactivityOmitted: boolean;\n\t }\n\t| {\n\t\t\trole: \"tool\";\n\t\t\tkind: \"tool\";\n\t\t\ttoolName: string;\n\t\t\ttoolCallId: string;\n\t\t\targs: unknown;\n\t\t\tresult?: RenderableToolResult;\n\t\t\tisPartial?: boolean;\n\t }\n\t| { role: \"tool\"; kind: \"bashExecution\"; message: BashExecutionMessage; isPartial?: boolean }\n\t| { role: \"user\"; kind: \"user\"; text: string; messageId?: string; timestamp?: string }\n\t| { role: \"custom\"; kind: \"custom\"; message: CustomMessage<unknown> }\n\t| { role: \"summary\"; kind: \"branchSummary\"; message: BranchSummaryMessage }\n\t| { role: \"system\"; kind: \"system\"; text: string };\nexport interface ChatMessageRenderOptions {\n\tui: Pick<TUI, \"requestRender\">;\n\tcwd: string;\n\tmarkdownTheme?: MarkdownTheme;\n\thideThinkingBlock?: boolean;\n\thiddenThinkingLabel?: string;\n\ttoolOutputExpanded?: boolean;\n\tshowImages?: boolean;\n\timageWidthCells?: number;\n\toutputPad?: number;\n\tisStreaming?: boolean;\n\tmarkdownTransformers?: readonly MarkdownTransformer[];\n\trenderLatex?: boolean;\n\tgetToolDefinition?: (toolName: string) => ToolRenderers | undefined;\n\tgetCustomMessageRenderer?: (customType: string) => MessageRenderer | undefined;\n\tcreateToolComponent?: (entry: Extract<ChatMessageEntry, { kind: \"tool\" }>) => Component;\n\tcreateCustomMessageComponent?: (message: CustomMessage<unknown>) => Component;\n}\nexport function chatEntriesFromAgentMessages(\n\tmessages: readonly AgentMessage[],\n\tmessageMeta?: ReadonlyMap<AgentMessage, PersistedMessageMeta>,\n): ChatMessageEntry[] {\n\tconst entries: ChatMessageEntry[] = [];\n\tconst pendingTools = new Map<string, Extract<ChatMessageEntry, { kind: \"tool\" }>>();\n\tfor (const message of messages) {\n\t\tif (isLegacyCompactionSummaryMessage(message)) continue;\n\t\tswitch (message.role) {\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst meta = messageMeta?.get(message);\n\t\t\t\tentries.push({\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tkind: \"assistant\",\n\t\t\t\t\tmessage,\n\t\t\t\t\tmessageId: meta?.id,\n\t\t\t\t\ttimestamp: meta?.timestamp,\n\t\t\t\t});\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type !== \"toolCall\") continue;\n\t\t\t\t\tconst toolEntry: ChatMessageEntry = {\n\t\t\t\t\t\trole: \"tool\",\n\t\t\t\t\t\tkind: \"tool\",\n\t\t\t\t\t\ttoolName: content.name,\n\t\t\t\t\t\ttoolCallId: content.id,\n\t\t\t\t\t\targs: content.arguments,\n\t\t\t\t\t\tisPartial: true,\n\t\t\t\t\t};\n\t\t\t\t\tentries.push(toolEntry);\n\t\t\t\t\tpendingTools.set(content.id, toolEntry);\n\t\t\t\t}\n\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\tconst errorText =\n\t\t\t\t\t\tmessage.stopReason === \"aborted\"\n\t\t\t\t\t\t\t? message.errorMessage || \"Operation aborted\"\n\t\t\t\t\t\t\t: message.errorMessage || \"Unknown error\";\n\t\t\t\t\tfor (const toolEntry of pendingTools.values()) {\n\t\t\t\t\t\ttoolEntry.result = {\n\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\ttoolCallId: toolEntry.toolCallId,\n\t\t\t\t\t\t\ttoolName: toolEntry.toolName,\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorText }],\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttoolEntry.isPartial = false;\n\t\t\t\t\t}\n\t\t\t\t\tpendingTools.clear();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\tconst toolEntry = pendingTools.get(message.toolCallId);\n\t\t\t\tif (toolEntry) {\n\t\t\t\t\ttoolEntry.result = message;\n\t\t\t\t\ttoolEntry.isPartial = false;\n\t\t\t\t\tpendingTools.delete(message.toolCallId);\n\t\t\t\t} else {\n\t\t\t\t\tentries.push({\n\t\t\t\t\t\trole: \"tool\",\n\t\t\t\t\t\tkind: \"tool\",\n\t\t\t\t\t\ttoolName: message.toolName,\n\t\t\t\t\t\ttoolCallId: message.toolCallId,\n\t\t\t\t\t\targs: {},\n\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\tisPartial: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst text = getMessageText(message);\n\t\t\t\tconst meta = messageMeta?.get(message);\n\t\t\t\tif (text)\n\t\t\t\t\tentries.push({ role: \"user\", kind: \"user\", text, messageId: meta?.id, timestamp: meta?.timestamp });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"bashExecution\":\n\t\t\t\tentries.push({ role: \"tool\", kind: \"bashExecution\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"custom\":\n\t\t\t\tif (message.display) entries.push({ role: \"custom\", kind: \"custom\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"branchSummary\":\n\t\t\t\tentries.push({ role: \"summary\", kind: \"branchSummary\", message });\n\t\t\t\tbreak;\n\t\t\tcase \"system\":\n\t\t\t\t// System messages carry prompt sections, not chat content; rendering\n\t\t\t\t// them printed a bare dim \"system\" line in workflow stage chats.\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tconst role = (message as { role: string }).role;\n\t\t\t\tentries.push({ role: \"system\", kind: \"system\", text: role });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn entries;\n}\nexport interface LiveChatEventLike {\n\treadonly type?: unknown;\n\treadonly message?: unknown;\n\treadonly assistantMessageEvent?: StreamingAssistantDelta;\n\treadonly toolCallId?: unknown;\n\treadonly parentToolCallId?: unknown;\n\treadonly toolName?: unknown;\n\treadonly args?: unknown;\n\treadonly partialResult?: unknown;\n\treadonly result?: unknown;\n\treadonly isError?: unknown;\n\treadonly durationMs?: unknown;\n}\ntype LiveChatEntry = ChatMessageEntry | { role: string };\nexport class LiveChatEntriesController {\n\tprivate streamingAssistantIndex: number | undefined;\n\tprivate pendingToolIndexes = new Map<string, number>();\n\tprivate declare readonly entries: LiveChatEntry[];\n\tconstructor(entries: LiveChatEntry[]) {\n\t\tthis.entries = entries;\n\t}\n\tclearTasks(): void {\n\t\tconst streaming =\n\t\t\tthis.streamingAssistantIndex === undefined ? undefined : this.entries[this.streamingAssistantIndex];\n\t\tfor (let index = this.entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = this.entries[index];\n\t\t\tif (\"kind\" in entry && entry.kind === \"task\") this.entries.splice(index, 1);\n\t\t}\n\t\tthis.streamingAssistantIndex = streaming === undefined ? undefined : this.entries.indexOf(streaming);\n\t\tthis.reindexPendingTools();\n\t}\n\tupsertTasks(tasks: readonly TaskRecord[], store?: OwnerTaskStore): void {\n\t\tfor (const task of tasks) {\n\t\t\tconst activity = store?.recentActivity(task.ref.taskId) ?? [];\n\t\t\tconst activityOmitted = store?.activityOmitted(task.ref.taskId) ?? false;\n\t\t\tconst duplicate =\n\t\t\t\ttasks.filter((other) => other.agentName === task.agentName && other.title === task.title).length > 1;\n\t\t\tconst entry = this.entries.find(\n\t\t\t\t(entry) => \"kind\" in entry && entry.kind === \"task\" && entry.task.ref.taskId === task.ref.taskId,\n\t\t\t);\n\t\t\tif (entry && \"kind\" in entry && entry.kind === \"task\") {\n\t\t\t\tentry.task = task;\n\t\t\t\tentry.duplicate = duplicate;\n\t\t\t\tentry.siblings = tasks;\n\t\t\t\tentry.activity = activity;\n\t\t\t\tentry.activityOmitted = activityOmitted;\n\t\t\t} else\n\t\t\t\tthis.entries.push({\n\t\t\t\t\trole: \"tool\",\n\t\t\t\t\tkind: \"task\",\n\t\t\t\t\ttask,\n\t\t\t\t\tduplicate,\n\t\t\t\t\tsiblings: tasks,\n\t\t\t\t\tactivity,\n\t\t\t\t\tactivityOmitted,\n\t\t\t\t});\n\t\t}\n\t}\n\tappendMessages(messages: readonly AgentMessage[]): void {\n\t\tthis.entries.push(...chatEntriesFromAgentMessages(messages));\n\t\tthis.reindexPendingTools();\n\t}\n\treplaceMessages(messages: readonly AgentMessage[], preservedEntries: readonly { role: string }[] = []): void {\n\t\tthis.entries.splice(0, this.entries.length, ...chatEntriesFromAgentMessages(messages), ...preservedEntries);\n\t\tthis.streamingAssistantIndex = undefined;\n\t\tthis.reindexPendingTools();\n\t}\n\tappendUserText(text: string): void {\n\t\tthis.entries.push({ role: \"user\", kind: \"user\", text });\n\t}\n\t/**\n\t * Seed the assistant message a chat mounted mid-stream never saw start.\n\t *\n\t * Delta-only updates carry just the next fragment, so a consumer attached\n\t * part-way through a turn cannot recover the text that already streamed. The\n\t * live session keeps that in-flight message, and seeding it here makes the\n\t * deltas that arrive afterwards continue it instead of opening a second\n\t * assistant message. A stream this consumer is already following wins.\n\t */\n\thydrateStreamingAssistantMessage(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message) || message.role !== \"assistant\") return false;\n\t\tif (this.currentStreamingAssistantMessage() !== undefined) return false;\n\t\treturn this.updateAssistantMessage(beginStreamingAssistantMessage(message as AssistantMessage));\n\t}\n\tapplyEvent(event: LiveChatEventLike): boolean {\n\t\tconst type = String(event.type ?? \"\");\n\t\tif (typeof event.parentToolCallId === \"string\" && type.startsWith(\"tool_execution_\")) return false;\n\t\tswitch (type) {\n\t\t\tcase \"message_start\":\n\t\t\t\treturn this.handleMessageStart(event.message);\n\t\t\tcase \"message_update\":\n\t\t\t\treturn this.handleMessageUpdate(event);\n\t\t\tcase \"message_end\":\n\t\t\t\treturn this.handleMessageEnd(event.message);\n\t\t\tcase \"tool_execution_start\":\n\t\t\t\treturn this.upsertToolEntry({\n\t\t\t\t\ttoolCallId: typeof event.toolCallId === \"string\" ? event.toolCallId : undefined,\n\t\t\t\t\ttoolName: typeof event.toolName === \"string\" ? event.toolName : \"tool\",\n\t\t\t\t\targs: event.args,\n\t\t\t\t\tisPartial: true,\n\t\t\t\t});\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst toolCallId = typeof event.toolCallId === \"string\" ? event.toolCallId : undefined;\n\t\t\t\tif (!toolCallId) return false;\n\t\t\t\treturn this.updateToolResult(toolCallId, event.partialResult, true, false);\n\t\t\t}\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst toolCallId = typeof event.toolCallId === \"string\" ? event.toolCallId : undefined;\n\t\t\t\tif (!toolCallId) return false;\n\t\t\t\treturn this.updateToolResult(\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\tevent.result,\n\t\t\t\t\tfalse,\n\t\t\t\t\tevent.isError === true,\n\t\t\t\t\ttypeof event.durationMs === \"number\" ? event.durationMs : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpendingToolIds(): string[] {\n\t\treturn [...this.pendingToolIndexes.keys()];\n\t}\n\tclearPendingTools(): void {\n\t\tthis.pendingToolIndexes.clear();\n\t}\n\n\tisStreamingAssistantEntry(entry: ChatMessageEntry): boolean {\n\t\treturn this.streamingAssistantIndex !== undefined && this.entries[this.streamingAssistantIndex] === entry;\n\t}\n\n\tprivate handleMessageStart(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message)) return false;\n\t\tif (message.role === \"assistant\") {\n\t\t\tthis.streamingAssistantIndex = undefined;\n\t\t\treturn this.updateAssistantMessage(beginStreamingAssistantMessage(message as AssistantMessage));\n\t\t}\n\t\tif (message.role === \"toolResult\") {\n\t\t\tconst toolResult = message as ToolResultMessage;\n\t\t\tif (this.findToolEntryIndex(toolResult.toolCallId) >= 0) return true;\n\t\t}\n\t\tconst entries = chatEntriesFromAgentMessages([message as AgentMessage]);\n\t\tif (entries.length === 0) return false;\n\t\tthis.entries.push(...entries);\n\t\tthis.reindexPendingTools();\n\t\treturn true;\n\t}\n\tprivate handleMessageUpdate(event: LiveChatEventLike): boolean {\n\t\tif (!event.assistantMessageEvent) return false;\n\t\tconst message = this.currentStreamingAssistantMessage() ?? minimalAssistantMessage();\n\t\tif (!applyAssistantMessageDelta(message, event.assistantMessageEvent)) return false;\n\t\treturn this.updateAssistantMessage(message);\n\t}\n\tprivate handleMessageEnd(message: unknown): boolean {\n\t\tif (!isAgentMessageLike(message) || message.role !== \"assistant\") return false;\n\t\tconst changed = this.updateAssistantMessage(message as AssistantMessage);\n\t\tconst stopReason = typeof message.stopReason === \"string\" ? message.stopReason : \"\";\n\t\tif (stopReason === \"aborted\" || stopReason === \"error\") {\n\t\t\tconst errorText =\n\t\t\t\ttypeof message.errorMessage === \"string\" && message.errorMessage\n\t\t\t\t\t? message.errorMessage\n\t\t\t\t\t: stopReason === \"aborted\"\n\t\t\t\t\t\t? \"Operation aborted\"\n\t\t\t\t\t\t: \"Unknown error\";\n\t\t\tfor (const toolCallId of this.pendingToolIds()) {\n\t\t\t\tthis.updateToolResult(toolCallId, { content: [{ type: \"text\", text: errorText }] }, false, true);\n\t\t\t}\n\t\t\tthis.clearPendingTools();\n\t\t}\n\t\tthis.streamingAssistantIndex = undefined;\n\t\treturn changed || true;\n\t}\n\tprivate updateAssistantMessage(message: AssistantMessage): boolean {\n\t\tif (\n\t\t\tthis.streamingAssistantIndex !== undefined &&\n\t\t\tthis.isAssistantEntry(this.entries[this.streamingAssistantIndex])\n\t\t) {\n\t\t\tthis.entries[this.streamingAssistantIndex] = {\n\t\t\t\t...(this.entries[this.streamingAssistantIndex] as Extract<ChatMessageEntry, { kind: \"assistant\" }>),\n\t\t\t\tmessage,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.entries.push({ role: \"assistant\", kind: \"assistant\", message });\n\t\t\tthis.streamingAssistantIndex = this.entries.length - 1;\n\t\t}\n\t\tfor (const content of message.content) {\n\t\t\tif (content.type !== \"toolCall\") continue;\n\t\t\tthis.upsertToolEntry({\n\t\t\t\ttoolCallId: content.id,\n\t\t\t\ttoolName: content.name,\n\t\t\t\targs: content.arguments,\n\t\t\t\tisPartial: true,\n\t\t\t});\n\t\t}\n\t\treturn true;\n\t}\n\tprivate currentStreamingAssistantMessage(): AssistantMessage | undefined {\n\t\tconst entry = this.streamingAssistantIndex !== undefined ? this.entries[this.streamingAssistantIndex] : undefined;\n\t\treturn this.isAssistantEntry(entry) ? entry.message : undefined;\n\t}\n\tprivate upsertToolEntry(update: {\n\t\ttoolCallId?: string;\n\t\ttoolName: string;\n\t\targs?: unknown;\n\t\tisPartial: boolean;\n\t}): boolean {\n\t\tconst toolCallId = update.toolCallId ?? `live-${update.toolName}`;\n\t\tconst index = this.pendingToolIndexes.get(toolCallId) ?? this.findToolEntryIndex(toolCallId, update.toolName);\n\t\tconst previous = index >= 0 ? this.entries[index] : undefined;\n\t\tconst previousTool = this.isToolEntry(previous) ? previous : undefined;\n\t\tconst next: ChatMessageEntry = {\n\t\t\trole: \"tool\",\n\t\t\tkind: \"tool\",\n\t\t\ttoolName: previousTool?.toolName ?? update.toolName,\n\t\t\ttoolCallId,\n\t\t\targs: update.args ?? previousTool?.args ?? {},\n\t\t\tresult: previousTool?.result,\n\t\t\tisPartial: update.isPartial,\n\t\t};\n\t\tif (index >= 0) this.entries[index] = next;\n\t\telse this.entries.push(next);\n\t\tthis.pendingToolIndexes.set(toolCallId, index >= 0 ? index : this.entries.length - 1);\n\t\treturn true;\n\t}\n\tprivate updateToolResult(\n\t\ttoolCallId: string,\n\t\tresult: unknown,\n\t\tisPartial: boolean,\n\t\tisError: boolean,\n\t\tdurationMs?: number,\n\t): boolean {\n\t\tconst index = this.pendingToolIndexes.get(toolCallId) ?? this.findToolEntryIndex(toolCallId);\n\t\tif (index < 0) return false;\n\t\tconst entry = this.entries[index];\n\t\tif (!this.isToolEntry(entry)) return false;\n\t\tconst resultObject = toolResultFromUnknown(result, entry.toolName, toolCallId, isError);\n\t\tif (durationMs !== undefined) resultObject.durationMs = durationMs;\n\t\tthis.entries[index] = { ...entry, result: resultObject, isPartial };\n\t\tif (!isPartial) this.pendingToolIndexes.delete(toolCallId);\n\t\treturn true;\n\t}\n\tprivate isSyntheticToolCallId(toolCallId: string): boolean {\n\t\treturn toolCallId.startsWith(\"live-\");\n\t}\n\tprivate findToolEntryIndex(toolCallId: string, toolName?: string): number {\n\t\tfor (let i = this.entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.entries[i];\n\t\t\tif (!this.isToolEntry(entry)) continue;\n\t\t\tif (entry.toolCallId === toolCallId) return i;\n\t\t\tif (\n\t\t\t\ttoolName &&\n\t\t\t\tentry.toolName === toolName &&\n\t\t\t\tentry.isPartial !== false &&\n\t\t\t\t(this.isSyntheticToolCallId(toolCallId) || this.isSyntheticToolCallId(entry.toolCallId))\n\t\t\t) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tprivate reindexPendingTools(): void {\n\t\tthis.pendingToolIndexes.clear();\n\t\tfor (let i = 0; i < this.entries.length; i++) {\n\t\t\tconst entry = this.entries[i];\n\t\t\tif (this.isToolEntry(entry) && entry.isPartial !== false) this.pendingToolIndexes.set(entry.toolCallId, i);\n\t\t}\n\t}\n\tprivate isAssistantEntry(\n\t\tentry: LiveChatEntry | undefined,\n\t): entry is Extract<ChatMessageEntry, { kind: \"assistant\" }> {\n\t\treturn isChatMessageEntry(entry) && entry.kind === \"assistant\";\n\t}\n\tprivate isToolEntry(entry: LiveChatEntry | undefined): entry is Extract<ChatMessageEntry, { kind: \"tool\" }> {\n\t\treturn isChatMessageEntry(entry) && entry.kind === \"tool\";\n\t}\n}\nfunction isChatMessageEntry(entry: LiveChatEntry | undefined): entry is ChatMessageEntry {\n\treturn entry !== undefined && \"kind\" in entry;\n}\nfunction isLegacyCompactionSummaryMessage(message: AgentMessage): boolean {\n\treturn message.role === \"compaction\" + \"Summary\";\n}\nfunction isAgentMessageLike(\n\tmessage: unknown,\n): message is AgentMessage & { stopReason?: unknown; errorMessage?: unknown } {\n\treturn message !== null && typeof message === \"object\" && \"role\" in message;\n}\nfunction minimalAssistantMessage(): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tstopReason: \"stop\",\n\t} as unknown as AssistantMessage;\n}\n/** UI progress may contain in-memory details; only durable transcript results are JSON. */\ntype RenderableToolResult = Omit<ToolResultMessage, \"details\"> & { details?: unknown };\nfunction toolResultFromUnknown(\n\tresult: unknown,\n\ttoolName: string,\n\ttoolCallId: string,\n\tisError: boolean,\n): RenderableToolResult {\n\tif (result !== null && typeof result === \"object\" && \"content\" in result) {\n\t\tconst candidate = result as { content?: unknown; details?: unknown };\n\t\tconst content = Array.isArray(candidate.content) ? candidate.content : [];\n\t\treturn {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tcontent: content as ToolResultMessage[\"content\"],\n\t\t\tdetails: candidate.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId,\n\t\ttoolName,\n\t\tcontent: typeof result === \"string\" ? [{ type: \"text\", text: result }] : [],\n\t\tisError,\n\t\ttimestamp: Date.now(),\n\t};\n}\nexport function renderChatMessageEntry(entry: ChatMessageEntry, options: ChatMessageRenderOptions): Component {\n\tconst messageEntry = entry as ChatMessageEntry;\n\tconst markdownTheme = options.markdownTheme ?? getMarkdownTheme();\n\tswitch (messageEntry.kind) {\n\t\tcase \"task\":\n\t\t\treturn new TaskRow(messageEntry.task, {\n\t\t\t\texpanded: options.toolOutputExpanded,\n\t\t\t\tduplicate: messageEntry.duplicate,\n\t\t\t\tsiblings: messageEntry.siblings,\n\t\t\t\tactivity: messageEntry.activity,\n\t\t\t\tactivityOmitted: messageEntry.activityOmitted,\n\t\t\t});\n\t\tcase \"assistant\":\n\t\t\treturn new AssistantMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\toptions.hideThinkingBlock ?? false,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.hiddenThinkingLabel ?? \"Thinking...\",\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.markdownTransformers,\n\t\t\t\toptions.isStreaming,\n\t\t\t\toptions.renderLatex,\n\t\t\t\tmessageEntry.messageId,\n\t\t\t\tmessageEntry.timestamp,\n\t\t\t);\n\t\tcase \"tool\": {\n\t\t\tif (options.createToolComponent) return options.createToolComponent(messageEntry);\n\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\tmessageEntry.toolName,\n\t\t\t\tmessageEntry.toolCallId,\n\t\t\t\tmessageEntry.args,\n\t\t\t\t{\n\t\t\t\t\tshowImages: options.showImages ?? true,\n\t\t\t\t\timageWidthCells: options.imageWidthCells,\n\t\t\t\t\toutputPad: options.outputPad,\n\t\t\t\t},\n\t\t\t\toptions.getToolDefinition?.(messageEntry.toolName),\n\t\t\t\toptions.ui as TUI,\n\t\t\t\toptions.cwd,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\tif (messageEntry.result) component.updateResult(messageEntry.result, messageEntry.isPartial ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"bashExecution\": {\n\t\t\tconst component = new BashExecutionComponent(\n\t\t\t\tmessageEntry.message.command,\n\t\t\t\toptions.ui as TUI,\n\t\t\t\tmessageEntry.message.excludeFromContext,\n\t\t\t\toptions.outputPad,\n\t\t\t);\n\t\t\tif (messageEntry.message.output) component.appendOutput(messageEntry.message.output);\n\t\t\tif (messageEntry.isPartial !== true) {\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessageEntry.message.exitCode,\n\t\t\t\t\tmessageEntry.message.cancelled,\n\t\t\t\t\tmessageEntry.message.truncated\n\t\t\t\t\t\t? ({ truncated: true } as Parameters<BashExecutionComponent[\"setComplete\"]>[2])\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tmessageEntry.message.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn component;\n\t\t}\n\t\tcase \"user\":\n\t\t\treturn userMessageComponent(\n\t\t\t\tmessageEntry.text,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.toolOutputExpanded ?? false,\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.markdownTransformers,\n\t\t\t\toptions.renderLatex,\n\t\t\t\tmessageEntry.messageId,\n\t\t\t\tmessageEntry.timestamp,\n\t\t\t);\n\t\tcase \"custom\": {\n\t\t\tif (isVerbatimCompactionMessage(messageEntry.message)) {\n\t\t\t\treturn compactionBoundaryFromMessage(\n\t\t\t\t\tmessageEntry.message,\n\t\t\t\t\toptions.toolOutputExpanded ?? false,\n\t\t\t\t\toptions.outputPad,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options.createCustomMessageComponent) return options.createCustomMessageComponent(messageEntry.message);\n\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\toptions.getCustomMessageRenderer?.(messageEntry.message.customType),\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.outputPad ?? 1,\n\t\t\t\toptions.renderLatex,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"branchSummary\": {\n\t\t\tconst component = new BranchSummaryMessageComponent(\n\t\t\t\tmessageEntry.message,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toptions.renderLatex,\n\t\t\t\toptions.outputPad,\n\t\t\t);\n\t\t\tcomponent.setExpanded(options.toolOutputExpanded ?? false);\n\t\t\treturn component;\n\t\t}\n\t\tcase \"system\":\n\t\t\treturn new Text(theme.fg(\"dim\", messageEntry.text), options.outputPad ?? 1, 0);\n\t}\n}\nclass SkillMessageContainer extends Container {\n\tsetOutputPad(outputPad: number): void {\n\t\tfor (const child of this.children) {\n\t\t\tif (\"setOutputPad\" in child && typeof child.setOutputPad === \"function\") child.setOutputPad(outputPad);\n\t\t}\n\t}\n}\n\nfunction userMessageComponent(\n\ttext: string,\n\tmarkdownTheme: MarkdownTheme,\n\texpanded: boolean,\n\toutputPad = 1,\n\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\trenderLatex = true,\n\tmessageId?: string,\n\ttimestamp?: string,\n): Component {\n\tconst skillBlock = parseSkillBlock(text);\n\tif (!skillBlock)\n\t\treturn new UserMessageComponent(\n\t\t\ttext,\n\t\t\tmarkdownTheme,\n\t\t\toutputPad,\n\t\t\tmarkdownTransformers,\n\t\t\trenderLatex,\n\t\t\tmessageId,\n\t\t\ttimestamp,\n\t\t);\n\tconst container = new SkillMessageContainer();\n\tconst skillComponent = new SkillInvocationMessageComponent(skillBlock, markdownTheme, renderLatex, outputPad);\n\tskillComponent.setExpanded(expanded);\n\tcontainer.addChild(skillComponent);\n\tif (skillBlock.userMessage) {\n\t\tcontainer.addChild(\n\t\t\tnew UserMessageComponent(\n\t\t\t\tskillBlock.userMessage,\n\t\t\t\tmarkdownTheme,\n\t\t\t\toutputPad,\n\t\t\t\tmarkdownTransformers,\n\t\t\t\trenderLatex,\n\t\t\t\tmessageId,\n\t\t\t\ttimestamp,\n\t\t\t),\n\t\t);\n\t}\n\treturn container;\n}\nfunction getMessageText(message: Extract<AgentMessage, { role: \"user\" }>): string {\n\treturn extractMessageText(message.content).trim();\n}\n"]}
|
|
@@ -12,12 +12,15 @@ export declare class LoginDialogComponent extends Container implements Focusable
|
|
|
12
12
|
private inputResolver?;
|
|
13
13
|
private inputRejecter?;
|
|
14
14
|
private authCancelHint?;
|
|
15
|
+
private deviceCodeAction?;
|
|
16
|
+
private deviceCodeHint?;
|
|
15
17
|
private _focused;
|
|
16
18
|
get focused(): boolean;
|
|
17
19
|
set focused(value: boolean);
|
|
18
20
|
private onComplete;
|
|
19
21
|
constructor(tui: TUI, providerId: string, onComplete: (success: boolean, message?: string) => void, providerNameOverride?: string, titleOverride?: string);
|
|
20
22
|
get signal(): AbortSignal;
|
|
23
|
+
private clearDeviceCodeAction;
|
|
21
24
|
private cancel;
|
|
22
25
|
/**
|
|
23
26
|
* Called by onAuth callback - show URL and optional instructions
|
|
@@ -30,6 +33,8 @@ export declare class LoginDialogComponent extends Container implements Focusable
|
|
|
30
33
|
* Called by onDeviceCode callback - show URL and user code.
|
|
31
34
|
*/
|
|
32
35
|
showDeviceCode(info: OAuthDeviceCodeInfo): void;
|
|
36
|
+
private setDeviceCodeStatus;
|
|
37
|
+
private activateDeviceCode;
|
|
33
38
|
private replaceInputWithSubmittedText;
|
|
34
39
|
private removeAuthCancelHint;
|
|
35
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACN,SAAS,EACT,KAAK,SAAS,EAMd,KAAK,GAAG,EACR,MAAM,wBAAwB,CAAC;AAQhC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,SAAS;IACvE,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAO;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,cAAc,CAAC,CAAY;IAGnC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,QAAgB,UAAU,CAA+C;IAEzE,YACC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,EACxD,oBAAoB,CAAC,EAAE,MAAM,EAC7B,aAAa,CAAC,EAAE,MAAM,EAoCtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,QAAQ,CACP,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACnE,IAAI,CAsBN;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAiC9C;IAED,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/C;IAED,wFAAwF;IACxF,mBAAmB,IAAI,IAAI,CAI1B;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;IAED,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUjC;IAED,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,YAAY,EAAO,GAAG,IAAI,CASnE;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6BjC;CACD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Container, getKeybindings, Input, Spacer, Text } from "@earendil-works/pi-tui";
|
|
1
|
+
import { Container, getKeybindings, Input, Spacer, Text, TruncatedText, } from "@earendil-works/pi-tui";
|
|
2
|
+
import { copyToClipboard } from "../../../utils/clipboard.js";
|
|
2
3
|
import { openBrowser } from "../../../utils/open-browser.js";
|
|
3
4
|
import { theme } from "../theme/theme.js";
|
|
4
5
|
import { AuthUrlComponent } from "./auth-url.js";
|
|
@@ -16,6 +17,8 @@ export class LoginDialogComponent extends Container {
|
|
|
16
17
|
inputResolver;
|
|
17
18
|
inputRejecter;
|
|
18
19
|
authCancelHint;
|
|
20
|
+
deviceCodeAction;
|
|
21
|
+
deviceCodeHint;
|
|
19
22
|
// Focusable implementation - propagate to input for IME cursor positioning
|
|
20
23
|
_focused = false;
|
|
21
24
|
get focused() {
|
|
@@ -58,7 +61,15 @@ export class LoginDialogComponent extends Container {
|
|
|
58
61
|
get signal() {
|
|
59
62
|
return this.abortController.signal;
|
|
60
63
|
}
|
|
64
|
+
clearDeviceCodeAction() {
|
|
65
|
+
if (this.deviceCodeHint) {
|
|
66
|
+
this.contentContainer.removeChild(this.deviceCodeHint);
|
|
67
|
+
}
|
|
68
|
+
this.deviceCodeHint = undefined;
|
|
69
|
+
this.deviceCodeAction = undefined;
|
|
70
|
+
}
|
|
61
71
|
cancel() {
|
|
72
|
+
this.clearDeviceCodeAction();
|
|
62
73
|
this.abortController.abort();
|
|
63
74
|
if (this.inputRejecter) {
|
|
64
75
|
this.inputRejecter(new Error("Login cancelled"));
|
|
@@ -71,6 +82,7 @@ export class LoginDialogComponent extends Container {
|
|
|
71
82
|
* Called by onAuth callback - show URL and optional instructions
|
|
72
83
|
*/
|
|
73
84
|
showAuth(url, instructions, options = {}) {
|
|
85
|
+
this.clearDeviceCodeAction();
|
|
74
86
|
this.contentContainer.clear();
|
|
75
87
|
this.authCancelHint = undefined;
|
|
76
88
|
this.contentContainer.addChild(new Spacer(1));
|
|
@@ -94,6 +106,12 @@ export class LoginDialogComponent extends Container {
|
|
|
94
106
|
*/
|
|
95
107
|
showDeviceCode(info) {
|
|
96
108
|
this.authUrl = undefined;
|
|
109
|
+
info = {
|
|
110
|
+
...info,
|
|
111
|
+
openBrowserOnConfirm: info.openBrowserOnConfirm ?? true,
|
|
112
|
+
copyCodeOnConfirm: info.copyCodeOnConfirm ?? true,
|
|
113
|
+
};
|
|
114
|
+
this.clearDeviceCodeAction();
|
|
97
115
|
this.contentContainer.clear();
|
|
98
116
|
this.authCancelHint = undefined;
|
|
99
117
|
this.contentContainer.addChild(new Spacer(1));
|
|
@@ -104,9 +122,44 @@ export class LoginDialogComponent extends Container {
|
|
|
104
122
|
this.contentContainer.addChild(new Text(theme.fg("dim", hyperlink), 1, 0));
|
|
105
123
|
this.contentContainer.addChild(new Spacer(1));
|
|
106
124
|
this.contentContainer.addChild(new Text(theme.fg("warning", `Enter code: ${info.userCode}`), 1, 0));
|
|
107
|
-
|
|
125
|
+
if (!this.signal.aborted && (info.openBrowserOnConfirm || info.copyCodeOnConfirm)) {
|
|
126
|
+
const actionLabel = info.openBrowserOnConfirm
|
|
127
|
+
? info.copyCodeOnConfirm
|
|
128
|
+
? "to open browser and copy code"
|
|
129
|
+
: "to open browser"
|
|
130
|
+
: "to copy code";
|
|
131
|
+
const hint = new Container();
|
|
132
|
+
hint.addChild(new TruncatedText(`(${keyHint("tui.select.confirm", actionLabel)})`, 1, 0));
|
|
133
|
+
this.contentContainer.addChild(hint);
|
|
134
|
+
this.deviceCodeHint = hint;
|
|
135
|
+
this.deviceCodeAction = { info, hint };
|
|
136
|
+
}
|
|
137
|
+
this.tui.requestRender();
|
|
138
|
+
}
|
|
139
|
+
setDeviceCodeStatus(hint, message) {
|
|
140
|
+
if (this.signal.aborted || !this.focused || !this.contentContainer.children.includes(hint))
|
|
141
|
+
return;
|
|
142
|
+
hint.children = [new TruncatedText(theme.fg("dim", message), 1, 0)];
|
|
108
143
|
this.tui.requestRender();
|
|
109
144
|
}
|
|
145
|
+
activateDeviceCode(info, hint) {
|
|
146
|
+
this.setDeviceCodeStatus(hint, info.copyCodeOnConfirm ? "Copying code..." : "Browser open requested");
|
|
147
|
+
if (info.copyCodeOnConfirm) {
|
|
148
|
+
void copyToClipboard(info.userCode)
|
|
149
|
+
.then(() => this.setDeviceCodeStatus(hint, "Code copied to clipboard"))
|
|
150
|
+
.catch(() => this.setDeviceCodeStatus(hint, "Copy code manually"));
|
|
151
|
+
}
|
|
152
|
+
if (info.openBrowserOnConfirm) {
|
|
153
|
+
try {
|
|
154
|
+
const url = new URL(info.verificationUri);
|
|
155
|
+
if (url.protocol === "https:" || url.protocol === "http:")
|
|
156
|
+
openBrowser(url.href);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Invalid URLs or launcher failures must not interrupt login.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
110
163
|
replaceInputWithSubmittedText(value) {
|
|
111
164
|
this.contentContainer.children = this.contentContainer.children.map((child) => child === this.input ? new Text(`> ${value}`, 0, 0) : child);
|
|
112
165
|
}
|
|
@@ -120,6 +173,7 @@ export class LoginDialogComponent extends Container {
|
|
|
120
173
|
* Show input for manual code/URL entry (for callback server providers)
|
|
121
174
|
*/
|
|
122
175
|
showManualInput(prompt) {
|
|
176
|
+
this.clearDeviceCodeAction();
|
|
123
177
|
this.removeAuthCancelHint();
|
|
124
178
|
this.input.setValue("");
|
|
125
179
|
this.contentContainer.addChild(new Spacer(1));
|
|
@@ -143,6 +197,7 @@ export class LoginDialogComponent extends Container {
|
|
|
143
197
|
* Note: Does NOT clear content, appends to existing (preserves URL from showAuth)
|
|
144
198
|
*/
|
|
145
199
|
showPrompt(message, placeholder) {
|
|
200
|
+
this.clearDeviceCodeAction();
|
|
146
201
|
this.removeAuthCancelHint();
|
|
147
202
|
this.contentContainer.addChild(new Spacer(1));
|
|
148
203
|
this.contentContainer.addChild(new Text(theme.fg("text", message), 1, 0));
|
|
@@ -161,6 +216,7 @@ export class LoginDialogComponent extends Container {
|
|
|
161
216
|
/** Show static informational details and a close hint. */
|
|
162
217
|
showDetails(lines) {
|
|
163
218
|
this.authUrl = undefined;
|
|
219
|
+
this.clearDeviceCodeAction();
|
|
164
220
|
this.contentContainer.clear();
|
|
165
221
|
this.authCancelHint = undefined;
|
|
166
222
|
this.contentContainer.addChild(new Spacer(1));
|
|
@@ -208,6 +264,17 @@ export class LoginDialogComponent extends Container {
|
|
|
208
264
|
void this.authUrl.copy();
|
|
209
265
|
return true;
|
|
210
266
|
}
|
|
267
|
+
if (this.deviceCodeAction &&
|
|
268
|
+
!this.inputResolver &&
|
|
269
|
+
!this.signal.aborted &&
|
|
270
|
+
this.focused &&
|
|
271
|
+
kb.matches(data, "tui.select.confirm")) {
|
|
272
|
+
const action = this.deviceCodeAction;
|
|
273
|
+
this.deviceCodeAction = undefined;
|
|
274
|
+
this.activateDeviceCode(action.info, action.hint);
|
|
275
|
+
this.tui.requestRender();
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
211
278
|
// Pass to input
|
|
212
279
|
this.input.handleInput(data);
|
|
213
280
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@bastani/pi-ai\";\nimport { Container, type Focusable, getKeybindings, Input, Spacer, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.js\";\nimport { AuthUrlComponent } from \"./auth-url.js\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.js\";\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\tprivate authUrl?: AuthUrlComponent;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate authCancelHint?: Text;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate declare onComplete: (success: boolean, message?: string) => void;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.onComplete = onComplete;\n\t\tthis.tui = tui;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(\n\t\turl: string,\n\t\tinstructions?: string,\n\t\toptions: { autoOpenBrowser?: boolean; showCancelHint?: boolean } = {},\n\t): void {\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.authUrl = new AuthUrlComponent(this.tui, url);\n\t\tthis.contentContainer.addChild(this.authUrl);\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\tif (options.showCancelHint) {\n\t\t\tthis.authCancelHint = new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0);\n\t\t\tthis.contentContainer.addChild(this.authCancelHint);\n\t\t}\n\n\t\tif (options.autoOpenBrowser ?? true) {\n\t\t\topenBrowser(url);\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${info.verificationUri}\\x07${info.verificationUri}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${info.verificationUri}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\topenBrowser(info.verificationUri);\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate removeAuthCancelHint(): void {\n\t\tif (!this.authCancelHint) return;\n\t\tthis.contentContainer.children = this.contentContainer.children.filter((child) => child !== this.authCancelHint);\n\t\tthis.authCancelHint = undefined;\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Resolve and release a manual input prompt after an out-of-band callback succeeds. */\n\tdismissPendingInput(): void {\n\t\tthis.inputResolver?.(\"\");\n\t\tthis.inputResolver = undefined;\n\t\tthis.inputRejecter = undefined;\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(`(${keyHint(\"tui.select.cancel\", \"Cancel,\")} ${keyHint(\"tui.select.confirm\", \"Submit\")})`, 1, 0),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show static informational details and a close hint. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) this.contentContainer.addChild(new Text(line, 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Close\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and terminal hyperlinks. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = []): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst text = link.label ? `${link.label}: ${link.url}` : link.url;\n\t\t\tconst hyperlink = `\\x1b]8;;${link.url}\\x07${text}\\x1b]8;;\\x07`;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", hyperlink), 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn true;\n\t\t}\n\t\tif (this.authUrl && kb.matches(data, \"app.auth.copyUrl\")) {\n\t\t\tvoid this.authUrl.copy();\n\t\t\treturn true;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t\treturn true;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@bastani/pi-ai\";\nimport {\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tText,\n\tTruncatedText,\n\ttype TUI,\n} from \"@earendil-works/pi-tui\";\nimport { copyToClipboard } from \"../../../utils/clipboard.js\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.js\";\nimport { AuthUrlComponent } from \"./auth-url.js\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.js\";\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\tprivate authUrl?: AuthUrlComponent;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate authCancelHint?: Text;\n\tprivate deviceCodeAction?: { info: OAuthDeviceCodeInfo; hint: Container };\n\tprivate deviceCodeHint?: Container;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate declare onComplete: (success: boolean, message?: string) => void;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.onComplete = onComplete;\n\t\tthis.tui = tui;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate clearDeviceCodeAction(): void {\n\t\tif (this.deviceCodeHint) {\n\t\t\tthis.contentContainer.removeChild(this.deviceCodeHint);\n\t\t}\n\t\tthis.deviceCodeHint = undefined;\n\t\tthis.deviceCodeAction = undefined;\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(\n\t\turl: string,\n\t\tinstructions?: string,\n\t\toptions: { autoOpenBrowser?: boolean; showCancelHint?: boolean } = {},\n\t): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.authUrl = new AuthUrlComponent(this.tui, url);\n\t\tthis.contentContainer.addChild(this.authUrl);\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\tif (options.showCancelHint) {\n\t\t\tthis.authCancelHint = new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0);\n\t\t\tthis.contentContainer.addChild(this.authCancelHint);\n\t\t}\n\n\t\tif (options.autoOpenBrowser ?? true) {\n\t\t\topenBrowser(url);\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.authUrl = undefined;\n\t\tinfo = {\n\t\t\t...info,\n\t\t\topenBrowserOnConfirm: info.openBrowserOnConfirm ?? true,\n\t\t\tcopyCodeOnConfirm: info.copyCodeOnConfirm ?? true,\n\t\t};\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${info.verificationUri}\\x07${info.verificationUri}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${info.verificationUri}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\tif (!this.signal.aborted && (info.openBrowserOnConfirm || info.copyCodeOnConfirm)) {\n\t\t\tconst actionLabel = info.openBrowserOnConfirm\n\t\t\t\t? info.copyCodeOnConfirm\n\t\t\t\t\t? \"to open browser and copy code\"\n\t\t\t\t\t: \"to open browser\"\n\t\t\t\t: \"to copy code\";\n\t\t\tconst hint = new Container();\n\t\t\thint.addChild(new TruncatedText(`(${keyHint(\"tui.select.confirm\", actionLabel)})`, 1, 0));\n\t\t\tthis.contentContainer.addChild(hint);\n\t\t\tthis.deviceCodeHint = hint;\n\t\t\tthis.deviceCodeAction = { info, hint };\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate setDeviceCodeStatus(hint: Container, message: string): void {\n\t\tif (this.signal.aborted || !this.focused || !this.contentContainer.children.includes(hint)) return;\n\t\thint.children = [new TruncatedText(theme.fg(\"dim\", message), 1, 0)];\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate activateDeviceCode(info: OAuthDeviceCodeInfo, hint: Container): void {\n\t\tthis.setDeviceCodeStatus(hint, info.copyCodeOnConfirm ? \"Copying code...\" : \"Browser open requested\");\n\t\tif (info.copyCodeOnConfirm) {\n\t\t\tvoid copyToClipboard(info.userCode)\n\t\t\t\t.then(() => this.setDeviceCodeStatus(hint, \"Code copied to clipboard\"))\n\t\t\t\t.catch(() => this.setDeviceCodeStatus(hint, \"Copy code manually\"));\n\t\t}\n\t\tif (info.openBrowserOnConfirm) {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(info.verificationUri);\n\t\t\t\tif (url.protocol === \"https:\" || url.protocol === \"http:\") openBrowser(url.href);\n\t\t\t} catch {\n\t\t\t\t// Invalid URLs or launcher failures must not interrupt login.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate removeAuthCancelHint(): void {\n\t\tif (!this.authCancelHint) return;\n\t\tthis.contentContainer.children = this.contentContainer.children.filter((child) => child !== this.authCancelHint);\n\t\tthis.authCancelHint = undefined;\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Resolve and release a manual input prompt after an out-of-band callback succeeds. */\n\tdismissPendingInput(): void {\n\t\tthis.inputResolver?.(\"\");\n\t\tthis.inputResolver = undefined;\n\t\tthis.inputRejecter = undefined;\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(`(${keyHint(\"tui.select.cancel\", \"Cancel,\")} ${keyHint(\"tui.select.confirm\", \"Submit\")})`, 1, 0),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show static informational details and a close hint. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) this.contentContainer.addChild(new Text(line, 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Close\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and terminal hyperlinks. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = []): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst text = link.label ? `${link.label}: ${link.url}` : link.url;\n\t\t\tconst hyperlink = `\\x1b]8;;${link.url}\\x07${text}\\x1b]8;;\\x07`;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", hyperlink), 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn true;\n\t\t}\n\t\tif (this.authUrl && kb.matches(data, \"app.auth.copyUrl\")) {\n\t\t\tvoid this.authUrl.copy();\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\tthis.deviceCodeAction &&\n\t\t\t!this.inputResolver &&\n\t\t\t!this.signal.aborted &&\n\t\t\tthis.focused &&\n\t\t\tkb.matches(data, \"tui.select.confirm\")\n\t\t) {\n\t\t\tconst action = this.deviceCodeAction;\n\t\t\tthis.deviceCodeAction = undefined;\n\t\t\tthis.activateDeviceCode(action.info, action.hint);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn true;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t\treturn true;\n\t}\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { MarkdownTransformContext, MarkdownTransformer } from "../../../core/extensions/types.ts";
|
|
2
|
-
export declare function createMarkdownTransform(messageType: MarkdownTransformContext["messageType"], isStreaming: boolean, transformers: readonly MarkdownTransformer[]): (markdown: string, availableWidth: number) => string;
|
|
2
|
+
export declare function createMarkdownTransform(messageType: MarkdownTransformContext["messageType"], isStreaming: boolean, transformers: readonly MarkdownTransformer[], messageId?: string, timestamp?: string): (markdown: string, availableWidth: number) => string;
|
|
3
3
|
//# sourceMappingURL=markdown-transform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-transform.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/markdown-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAEvG,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,EACpD,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,SAAS,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"markdown-transform.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/markdown-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAEvG,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,EACpD,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,SAAS,mBAAmB,EAAE,EAC5C,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GAChB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,MAAM,CAOtD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function createMarkdownTransform(messageType, isStreaming, transformers) {
|
|
2
|
-
return (markdown, availableWidth) => applyMarkdownTransformers(markdown, { messageType, isStreaming, availableWidth }, transformers);
|
|
1
|
+
export function createMarkdownTransform(messageType, isStreaming, transformers, messageId, timestamp) {
|
|
2
|
+
return (markdown, availableWidth) => applyMarkdownTransformers(markdown, { messageType, isStreaming, availableWidth, messageId, timestamp }, transformers);
|
|
3
3
|
}
|
|
4
4
|
function applyMarkdownTransformers(markdown, context, transformers) {
|
|
5
5
|
let transformedMarkdown = markdown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-transform.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/markdown-transform.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CACtC,WAAoD,EACpD,WAAoB,EACpB,YAA4C;
|
|
1
|
+
{"version":3,"file":"markdown-transform.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/markdown-transform.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CACtC,WAAoD,EACpD,WAAoB,EACpB,YAA4C,EAC5C,SAAkB,EAClB,SAAkB;IAElB,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CACnC,yBAAyB,CACxB,QAAQ,EACR,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,EAClE,YAAY,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CACjC,QAAgB,EAChB,OAAiC,EACjC,YAA4C;IAE5C,IAAI,mBAAmB,GAAG,QAAQ,CAAC;IACnC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACrC,mBAAmB,GAAG,WAAW,CAAC;YACnC,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;QACrE,CAAC;IACF,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC5B,CAAC","sourcesContent":["import type { MarkdownTransformContext, MarkdownTransformer } from \"../../../core/extensions/types.ts\";\n\nexport function createMarkdownTransform(\n\tmessageType: MarkdownTransformContext[\"messageType\"],\n\tisStreaming: boolean,\n\ttransformers: readonly MarkdownTransformer[],\n\tmessageId?: string,\n\ttimestamp?: string,\n): (markdown: string, availableWidth: number) => string {\n\treturn (markdown, availableWidth) =>\n\t\tapplyMarkdownTransformers(\n\t\t\tmarkdown,\n\t\t\t{ messageType, isStreaming, availableWidth, messageId, timestamp },\n\t\t\ttransformers,\n\t\t);\n}\n\nfunction applyMarkdownTransformers(\n\tmarkdown: string,\n\tcontext: MarkdownTransformContext,\n\ttransformers: readonly MarkdownTransformer[],\n): string {\n\tlet transformedMarkdown = markdown;\n\tfor (const transformer of transformers) {\n\t\ttry {\n\t\t\tconst transformed = transformer(transformedMarkdown, context);\n\t\t\tif (typeof transformed === \"string\") {\n\t\t\t\ttransformedMarkdown = transformed;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Keep the current Markdown and continue with the next transformer.\n\t\t}\n\t}\n\treturn transformedMarkdown;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-selector-search.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/session-selector-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"session-selector-search.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/session-selector-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACd;AAmFD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE5D;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CA2EjE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAyBzF;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,UAAU,GAAE,UAAkB,GAC5B,WAAW,EAAE,CAiCf"}
|