@astralyn/pi 0.87.5 → 0.87.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/bundle/chunks/{chunk-EWLAVDVN.js → chunk-4W4Q2H6W.js} +55 -54
- package/dist/bundle/chunks/{chunk-APQ4ACY3.js → chunk-IORR2FW4.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-W3OGMIX7.js → virtual-modules-KUEIEAZN.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session.d.ts +8 -24
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +54 -109
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/background/session.d.ts +11 -7
- package/dist/core/background/session.d.ts.map +1 -1
- package/dist/core/background/session.js +42 -16
- package/dist/core/background/session.js.map +1 -1
- package/dist/core/context-snapshot.d.ts +17 -4
- package/dist/core/context-snapshot.d.ts.map +1 -1
- package/dist/core/context-snapshot.js +48 -50
- package/dist/core/context-snapshot.js.map +1 -1
- package/dist/core/extensions/distribution-api.d.ts +0 -7
- package/dist/core/extensions/distribution-api.d.ts.map +1 -1
- package/dist/core/extensions/distribution-api.js +6 -6
- package/dist/core/extensions/distribution-api.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +3 -2
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -5
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +10 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +3 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +59 -7
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -3
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +0 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +0 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +0 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +0 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +0 -7
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +0 -11
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +59 -5
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/edit.d.ts.map +1 -1
- package/dist/core/tools/renderers/edit.js +4 -22
- package/dist/core/tools/renderers/edit.js.map +1 -1
- package/dist/core/tools/renderers/find.d.ts.map +1 -1
- package/dist/core/tools/renderers/find.js +7 -6
- package/dist/core/tools/renderers/find.js.map +1 -1
- package/dist/core/tools/renderers/grep.d.ts.map +1 -1
- package/dist/core/tools/renderers/grep.js +8 -7
- package/dist/core/tools/renderers/grep.js.map +1 -1
- package/dist/core/tools/renderers/ls.d.ts.map +1 -1
- package/dist/core/tools/renderers/ls.js +3 -2
- package/dist/core/tools/renderers/ls.js.map +1 -1
- package/dist/core/tools/renderers/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +7 -12
- package/dist/core/tools/renderers/read.js.map +1 -1
- package/dist/core/tools/renderers/write.d.ts.map +1 -1
- package/dist/core/tools/renderers/write.js +3 -2
- package/dist/core/tools/renderers/write.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +2 -6
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +0 -2
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/extensions/background/completion-render.d.ts.map +1 -1
- package/dist/extensions/background/completion-render.js +3 -4
- package/dist/extensions/background/completion-render.js.map +1 -1
- package/dist/extensions/background/constants.d.ts +2 -0
- package/dist/extensions/background/constants.d.ts.map +1 -1
- package/dist/extensions/background/constants.js +2 -0
- package/dist/extensions/background/constants.js.map +1 -1
- package/dist/extensions/background/index.d.ts.map +1 -1
- package/dist/extensions/background/index.js +31 -5
- package/dist/extensions/background/index.js.map +1 -1
- package/dist/extensions/question/detail-pane.d.ts +12 -0
- package/dist/extensions/question/detail-pane.d.ts.map +1 -0
- package/dist/extensions/question/detail-pane.js +42 -0
- package/dist/extensions/question/detail-pane.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +175 -105
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/option-window.d.ts +26 -0
- package/dist/extensions/question/option-window.d.ts.map +1 -0
- package/dist/extensions/question/option-window.js +53 -0
- package/dist/extensions/question/option-window.js.map +1 -0
- package/dist/extensions/question/render-cache.d.ts +4 -4
- package/dist/extensions/question/render-cache.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.js +10 -11
- package/dist/extensions/question/render-cache.js.map +1 -1
- package/dist/extensions/todo/index.d.ts.map +1 -1
- package/dist/extensions/todo/index.js +12 -8
- package/dist/extensions/todo/index.js.map +1 -1
- package/dist/extensions/todo/view.d.ts +3 -3
- package/dist/extensions/todo/view.d.ts.map +1 -1
- package/dist/extensions/todo/view.js +7 -6
- package/dist/extensions/todo/view.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +2 -2
- package/dist/modes/interactive/components/status-marker.js +2 -2
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +7 -10
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/chat.d.ts +20 -0
- package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/chat.js +46 -0
- package/dist/modes/interactive/tool-view/chat.js.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts +14 -0
- package/dist/modes/interactive/tool-view/fallback.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/fallback.js +52 -0
- package/dist/modes/interactive/tool-view/fallback.js.map +1 -0
- package/dist/modes/interactive/tool-view/style.d.ts +63 -0
- package/dist/modes/interactive/tool-view/style.d.ts.map +1 -0
- package/dist/modes/interactive/tool-view/style.js +83 -0
- package/dist/modes/interactive/tool-view/style.js.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.d.ts +17 -24
- package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/{components → tool-view}/tool-execution.js +42 -116
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -0
- package/docs/bundled/README.md +1 -1
- package/docs/bundled/extensions/background.md +1 -1
- package/docs/bundled/extensions/question.md +6 -5
- package/docs/bundled/tool-presentation.md +41 -31
- package/docs/extensions.md +1 -4
- package/docs/keybindings.md +11 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/dist/core/model-stream-options.d.ts +0 -6
- package/dist/core/model-stream-options.d.ts.map +0 -1
- package/dist/core/model-stream-options.js +0 -20
- package/dist/core/model-stream-options.js.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.d.ts +0 -28
- package/dist/modes/interactive/components/tool-chrome.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-chrome.js +0 -84
- package/dist/modes/interactive/components/tool-chrome.js.map +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-execution.js.map +0 -1
- package/dist/modes/interactive/components/tool-group.d.ts +0 -17
- package/dist/modes/interactive/components/tool-group.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-group.js +0 -78
- package/dist/modes/interactive/components/tool-group.js.map +0 -1
- package/dist/modes/interactive/tool-chat.d.ts +0 -21
- package/dist/modes/interactive/tool-chat.d.ts.map +0 -1
- package/dist/modes/interactive/tool-chat.js +0 -58
- package/dist/modes/interactive/tool-chat.js.map +0 -1
|
@@ -175,7 +175,7 @@ const CALL_ITEMS_MAX = TODO_MAX_BATCH_ITEMS;
|
|
|
175
175
|
const CALL_SUBJECT_PREVIEW_COUNT = 2;
|
|
176
176
|
const CALL_SUBJECT_PREVIEW_WIDTH = 72;
|
|
177
177
|
const CALL_DESCRIPTION_PREVIEW_LENGTH = 120;
|
|
178
|
-
const
|
|
178
|
+
const SUMMARY_FAILURE_MAX_LENGTH = 120;
|
|
179
179
|
/** Record-like read; proxies that throw on inspection are treated as absent. */
|
|
180
180
|
function safeRecord(value) {
|
|
181
181
|
try {
|
|
@@ -485,7 +485,7 @@ function updatedEntries(value) {
|
|
|
485
485
|
}
|
|
486
486
|
return entries;
|
|
487
487
|
}
|
|
488
|
-
function
|
|
488
|
+
function formatTodoSuccessSummary(args, theme, result) {
|
|
489
489
|
const parsed = todoDetails(result.details);
|
|
490
490
|
if (!parsed)
|
|
491
491
|
return undefined;
|
|
@@ -546,8 +546,8 @@ function formatTodoGroupSuccess(args, theme, result) {
|
|
|
546
546
|
void args;
|
|
547
547
|
return segments.join(theme.fg("dim", " ; "));
|
|
548
548
|
}
|
|
549
|
-
/** Compact result-aware summary
|
|
550
|
-
export function
|
|
549
|
+
/** Compact result-aware one-line summary of a collapsed todo row. */
|
|
550
|
+
export function formatTodoSummary(args, theme, context) {
|
|
551
551
|
if (context.isError) {
|
|
552
552
|
let reason = "tool failed";
|
|
553
553
|
try {
|
|
@@ -560,7 +560,8 @@ export function formatTodoGroupCall(args, theme, context) {
|
|
|
560
560
|
.trim();
|
|
561
561
|
if (!text)
|
|
562
562
|
continue;
|
|
563
|
-
reason =
|
|
563
|
+
reason =
|
|
564
|
+
text.length > SUMMARY_FAILURE_MAX_LENGTH ? `${text.slice(0, SUMMARY_FAILURE_MAX_LENGTH - 1)}…` : text;
|
|
564
565
|
break;
|
|
565
566
|
}
|
|
566
567
|
}
|
|
@@ -570,7 +571,7 @@ export function formatTodoGroupCall(args, theme, context) {
|
|
|
570
571
|
return `${formatTodoCall(args, theme, false)} ${theme.fg("error", `failed: ${reason}`)}`;
|
|
571
572
|
}
|
|
572
573
|
if (!context.isPartial && context.result) {
|
|
573
|
-
const summary =
|
|
574
|
+
const summary = formatTodoSuccessSummary(args, theme, context.result);
|
|
574
575
|
if (summary)
|
|
575
576
|
return summary;
|
|
576
577
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/extensions/todo/view.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * todo/view.ts — v3 presentation: the one-line above-editor widget renderer,\n * tool call/group renderers, the /todos list formatter, and model-facing\n * result text. Wire input (args, details, snapshots) is read defensively and\n * bounded so partial or hostile input cannot grow output without limit.\n */\n\nimport { truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult } from \"../../core/extensions/types.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport {\n\tTODO_MAX_BATCH_ITEMS,\n\tTODO_MAX_DESCRIPTION_LENGTH,\n\tTODO_MAX_ITEMS,\n\tTODO_MAX_SUBJECT_LENGTH,\n} from \"./constants.ts\";\nimport {\n\tTODO_DETAILS_SCHEMA_VERSION,\n\ttype TodoChange,\n\ttype TodoItem,\n\ttype TodoParams,\n\ttype TodoState,\n\ttype TodoStatus,\n} from \"./schema.ts\";\n\nexport const STATUS_MARK: Record<TodoStatus, string> = {\n\tpending: \"[ ]\",\n\tin_progress: \"[>]\",\n\tcompleted: \"[x]\",\n};\n\nconst STATUS_COLOR: Record<TodoStatus, \"dim\" | \"warning\" | \"success\"> = {\n\tpending: \"dim\",\n\tin_progress: \"warning\",\n\tcompleted: \"success\",\n};\n\nconst STATUS_RANK: Record<TodoStatus, number> = {\n\tin_progress: 0,\n\tpending: 1,\n\tcompleted: 2,\n};\n\n// --- One-line widget --------------------------------------------------------\n\nconst WIDGET_HEADER_SEPARATOR = \" · \";\nconst WIDGET_ITEM_SEPARATOR = \" \";\n\n/** True while any open task exists; the widget is registered only in that case. */\nexport function hasOpenTodos(state: TodoState): boolean {\n\treturn state.items.some((item) => item.status === \"pending\" || item.status === \"in_progress\");\n}\n\n/** Status counts across the whole list. */\nfunction widgetCounts(state: TodoState): { active: number; pending: number; completed: number } {\n\tconst counts = { active: 0, pending: 0, completed: 0 };\n\tfor (const item of state.items) {\n\t\tif (item.status === \"in_progress\") counts.active++;\n\t\telse if (item.status === \"pending\") counts.pending++;\n\t\telse counts.completed++;\n\t}\n\treturn counts;\n}\n\nfunction widgetSegment(item: TodoItem, subject: string, theme: Theme): string {\n\treturn `${theme.fg(STATUS_COLOR[item.status], STATUS_MARK[item.status])} ${theme.fg(\"accent\", `#${item.id}`)} ${theme.fg(\"text\", subject)}`;\n}\n\nfunction widgetLine(header: string, segments: string[], overflow: string): string {\n\tconst body = [...segments, ...(overflow ? [overflow] : [])].join(WIDGET_ITEM_SEPARATOR);\n\treturn body ? `${header}${WIDGET_HEADER_SEPARATOR}${body}` : header;\n}\n\n/** One-line widget: `Todos 2/6 · [>] #4 s [ ] #5 s +N more`; only hidden open tasks count in the overflow. */\nexport function renderWidgetLine(state: TodoState, theme: Theme, width: number): string[] {\n\tconst safeWidth = Math.max(1, width);\n\tconst items = state.items;\n\tconst candidates = items\n\t\t.filter((item) => item.status !== \"completed\")\n\t\t.sort((first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id);\n\tif (candidates.length === 0) return [];\n\n\tconst total = items.length;\n\tconst completed = items.filter((item) => item.status === \"completed\").length;\n\tconst header = `${theme.fg(\"accent\", \"Todos\")} ${theme.fg(\"dim\", `${completed}/${total}`)}`;\n\tconst shown: Array<{ item: TodoItem; subject: string }> = [];\n\tlet overflow = \"\";\n\n\t// Count only open tasks not shown by the trial segments.\n\tconst bestOverflow = (trial: Array<{ item: TodoItem; subject: string }>): string | undefined => {\n\t\tconst remaining = candidates.length - trial.length;\n\t\tconst segments = trial.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\t\tif (remaining <= 0) return visibleWidth(widgetLine(header, segments, \"\")) <= safeWidth ? \"\" : undefined;\n\t\tconst short = theme.fg(\"dim\", `+${remaining} more`);\n\t\treturn visibleWidth(widgetLine(header, segments, short)) <= safeWidth ? short : undefined;\n\t};\n\n\t// Extreme narrow widths: the best summary that fits, then the bare header.\n\tconst fallback = (): string[] => {\n\t\tconst best = bestOverflow([]);\n\t\tif (best !== undefined) return [widgetLine(header, [], best)];\n\t\tif (visibleWidth(header) <= safeWidth) return [header];\n\t\treturn [truncateToWidth(header, safeWidth, \"…\")];\n\t};\n\n\t// Segments are added whole, active first then pending by id, while the\n\t// line keeps fitting; only the active subject may be truncated.\n\tfor (const candidate of candidates) {\n\t\tconst best = bestOverflow([...shown, { item: candidate, subject: candidate.subject }]);\n\t\tif (best !== undefined) {\n\t\t\tshown.push({ item: candidate, subject: candidate.subject });\n\t\t\toverflow = best;\n\t\t\tcontinue;\n\t\t}\n\t\tif (candidate.status !== \"in_progress\") break;\n\t\tconst remaining = candidates.length - shown.length - 1;\n\t\tconst suffix = remaining > 0 ? `${WIDGET_ITEM_SEPARATOR}+${remaining} more` : \"\";\n\t\tconst prefix = `${header}${WIDGET_HEADER_SEPARATOR}${widgetSegment(candidate, \"\", theme)}${suffix}`;\n\t\tconst available = safeWidth - visibleWidth(prefix);\n\t\tif (available < 1) return fallback();\n\t\tshown.push({ item: candidate, subject: truncateToWidth(candidate.subject, available, \"…\") });\n\t\toverflow = bestOverflow(shown) ?? \"\";\n\t}\n\n\tif (shown.length === 0) return fallback();\n\n\tconst segments = shown.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\tconst line = widgetLine(header, segments, overflow);\n\t// Safety net: the visible width always stays within the terminal width.\n\treturn [visibleWidth(line) <= safeWidth ? line : truncateToWidth(line, safeWidth, \"…\")];\n}\n\n// --- Full list (used by /todos and the model-facing list result) ------------\n\n/** `Todos: X in progress, Y pending, Z completed` header plus two-line tasks. */\nfunction formatTodoList(state: TodoState): string {\n\tif (state.items.length === 0) return \"No todos.\";\n\tconst counts = widgetCounts(state);\n\tconst lines = [`Todos: ${counts.active} in progress, ${counts.pending} pending, ${counts.completed} completed`];\n\tconst items = [...state.items].sort(\n\t\t(first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id,\n\t);\n\tfor (const item of items) {\n\t\tlines.push(`${STATUS_MARK[item.status]} #${item.id} ${item.subject}`);\n\t\tlines.push(` ${item.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/** /todos command output: full list, subject line plus indented description per task. */\nexport const formatCommandList = formatTodoList;\n\n// --- Model-facing result text ------------------------------------------------\n\n/** `#1–#3` for a consecutive run, `#1, #2` otherwise. */\nfunction formatIdRange(ids: number[]): string {\n\tconst consecutive = ids.length > 1 && ids.every((id, index) => id === ids[0] + index);\n\treturn consecutive ? `#${ids[0]}–#${ids[ids.length - 1]}` : ids.map((id) => `#${id}`).join(\", \");\n}\n\n/**\n * One-line change summary for a completed call, e.g.\n * `Created 1 task: #7: Wire parser (in_progress); Updated #1 (pending -> completed): S; demoted #5 to pending; auto-removed completed #1–#3 to stay within 20`.\n * A call that changed nothing (including `{}`) returns the full list.\n */\nexport function formatTodoContent(change: TodoChange, state: TodoState): string {\n\tconst parts: string[] = [];\n\tif (change.created.length > 0) {\n\t\tconst labels = change.created.map((id) => {\n\t\t\tconst item = state.items.find((entry) => entry.id === id);\n\t\t\tif (!item) return `#${id}`;\n\t\t\tconst suffix = item.status === \"pending\" ? \"\" : ` (${item.status})`;\n\t\t\treturn `#${id}: ${item.subject}${suffix}`;\n\t\t});\n\t\tconst noun = change.created.length === 1 ? \"task\" : \"tasks\";\n\t\tparts.push(`Created ${change.created.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const entry of change.updated) {\n\t\tconst item = state.items.find((candidate) => candidate.id === entry.id);\n\t\tconst subject = item ? `: ${item.subject}` : \"\";\n\t\tconst transition = entry.from === entry.to ? \"\" : ` (${entry.from} -> ${entry.to})`;\n\t\tparts.push(`Updated #${entry.id}${transition}${subject}`);\n\t}\n\tif (change.demotedId !== undefined) parts.push(`demoted #${change.demotedId} to pending`);\n\tif (change.deleted.length > 0) {\n\t\tconst noun = change.deleted.length === 1 ? \"task\" : \"tasks\";\n\t\tconst labels = change.deleted.map((entry) => `#${entry.id}: ${entry.subject}`);\n\t\tparts.push(`Deleted ${change.deleted.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const id of change.absent) parts.push(`#${id} already absent`);\n\tif (change.evicted.length > 0) {\n\t\tconst ids = change.evicted.map((entry) => entry.id);\n\t\tparts.push(`auto-removed completed ${formatIdRange(ids)} to stay within ${TODO_MAX_ITEMS}`);\n\t}\n\tif (parts.length === 0) return formatTodoList(state);\n\treturn parts.join(\"; \");\n}\n\n// --- Tool calls and collapsed group summaries -------------------------------\n\n// Collapsed todo calls join the `todo` group as one headline per row. Args can\n// be partial or hostile and details may come from any source, so one defensive\n// reading family (record/field/text/id/status/array) serves both renderers.\n// Output stays bounded: batches at 20, subjects at 160, descriptions at 500.\n\ntype TodoCallArgs = Partial<Record<keyof TodoParams, unknown>>;\n\nconst CALL_ITEMS_MAX = TODO_MAX_BATCH_ITEMS;\nconst CALL_SUBJECT_PREVIEW_COUNT = 2;\nconst CALL_SUBJECT_PREVIEW_WIDTH = 72;\nconst CALL_DESCRIPTION_PREVIEW_LENGTH = 120;\nconst GROUP_FAILURE_MAX_LENGTH = 120;\n\n/** Record-like read; proxies that throw on inspection are treated as absent. */\nfunction safeRecord(value: unknown): Record<string, unknown> | undefined {\n\ttry {\n\t\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t\t? (value as Record<string, unknown>)\n\t\t\t: undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Field read that never throws, even for exotic objects with throwing getters. */\nfunction safeValue(record: Record<string, unknown> | undefined, key: string): unknown {\n\ttry {\n\t\treturn record?.[key];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction safeString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\n/** Trimmed, whitespace-collapsed, length-clipped text (empty when absent). */\nfunction clipText(value: unknown, max: number): string {\n\treturn safeString(value)?.trim().replace(/\\s+/g, \" \").slice(0, max) ?? \"\";\n}\n\nconst safeSubject = (value: unknown): string => clipText(value, TODO_MAX_SUBJECT_LENGTH);\nconst safeDescription = (value: unknown): string => clipText(value, TODO_MAX_DESCRIPTION_LENGTH);\n\nfunction safeId(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1 ? value : undefined;\n}\n\nfunction safeStatus(value: unknown): TodoStatus | undefined {\n\tconst status = safeString(value);\n\tif (status === \"pending\" || status === \"in_progress\" || status === \"completed\") return status;\n\treturn undefined;\n}\n\nfunction readArray(value: unknown, limit = CALL_ITEMS_MAX): { values: unknown[]; length: number } | undefined {\n\ttry {\n\t\tif (!Array.isArray(value)) return undefined;\n\t\tconst length = value.length;\n\t\tconst values: unknown[] = [];\n\t\tfor (let index = 0; index < Math.min(length, limit); index++) {\n\t\t\ttry {\n\t\t\t\tvalues.push(value[index]);\n\t\t\t} catch {\n\t\t\t\tvalues.push(undefined);\n\t\t\t}\n\t\t}\n\t\treturn { values, length };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Id lists: invalid entries drop (rendering never rejects the whole call). */\nfunction readIds(value: unknown): number[] | undefined {\n\tconst array = readArray(value);\n\tif (!array) return undefined;\n\tconst ids: number[] = [];\n\tfor (const entry of array.values) {\n\t\tconst id = safeId(entry);\n\t\tif (id !== undefined) ids.push(id);\n\t}\n\treturn ids;\n}\n\ninterface CreateCallItem {\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Create args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchCreateItems(value: unknown): CreateCallItem[] {\n\tconst result: CreateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: CreateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\ninterface UpdateCallItem {\n\tid?: number;\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Update args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchUpdateItems(value: unknown): UpdateCallItem[] {\n\tconst result: UpdateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: UpdateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined) entry.id = id;\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\nfunction descriptionPreview(value: string): string {\n\tconst text = value.replace(/\\s+/g, \" \");\n\treturn text.length > CALL_DESCRIPTION_PREVIEW_LENGTH\n\t\t? `${text.slice(0, CALL_DESCRIPTION_PREVIEW_LENGTH - 1)}…`\n\t\t: text;\n}\n\n/** At most two subjects, each truncated to the preview width, plus `+N more`. */\nfunction formatSubjectPreview(subjects: string[], total: number): string {\n\t// Filter before slicing so an empty subject (streaming args) does not consume\n\t// a preview slot.\n\tconst shown = subjects\n\t\t.filter(Boolean)\n\t\t.slice(0, CALL_SUBJECT_PREVIEW_COUNT)\n\t\t.map((subject) => truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\"));\n\tif (!shown.length) return \"\";\n\tconst hidden = Math.max(0, total - shown.length);\n\treturn `${shown.join(\", \")}${hidden ? `, +${hidden} more` : \"\"}`;\n}\n\n/** v3 details guard shared by the call and group renderers. */\nfunction todoDetails(value: unknown): { change: Record<string, unknown>; state: Record<string, unknown> } | undefined {\n\tconst details = safeRecord(value);\n\tif (!details || safeValue(details, \"schemaVersion\") !== TODO_DETAILS_SCHEMA_VERSION) return undefined;\n\tconst change = safeRecord(safeValue(details, \"change\"));\n\tconst state = safeRecord(safeValue(details, \"state\"));\n\tif (!change || !state) return undefined;\n\treturn { change, state };\n}\n\n/** Result ids for an expanded create, only when they match the shown items. */\nfunction createResultIds(result: AgentToolResult<unknown> | undefined, count: number): number[] | undefined {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return undefined;\n\tconst ids = readIds(safeValue(details.change, \"created\"));\n\treturn ids && ids.length === count && count > 0 ? ids : undefined;\n}\n\n/** Removed entries from a settled result, for the expanded delete detail lines. */\nfunction deleteResultRemoved(result: AgentToolResult<unknown> | undefined): Array<{ id: number; subject: string }> {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn idSubjectEntries(safeValue(details.change, \"deleted\"));\n}\n\n/** Absent ids from a settled delete, for the expanded delete detail lines. */\nfunction deleteResultAbsent(result: AgentToolResult<unknown> | undefined): number[] {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn readIds(safeValue(details.change, \"absent\")) ?? [];\n}\n\n/** Headline plus the parameters the result never echoes as detail lines. */\nfunction formatCallParts(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult?: AgentToolResult<unknown>,\n): { headline: string; details: string[] } {\n\tconst details: string[] = [];\n\tconst segments: string[] = [];\n\tconst pushSegment = (verb: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${verb}` : verb;\n\t\tsegments.push(\n\t\t\tbody ? `${theme.fg(\"toolTitle\", theme.bold(title))} ${body}` : theme.fg(\"toolTitle\", theme.bold(title)),\n\t\t);\n\t};\n\n\tconst hasCreate = args?.create !== undefined;\n\tconst hasUpdate = args?.update !== undefined;\n\tconst hasDelete = args?.delete !== undefined;\n\n\tif (hasCreate) {\n\t\tconst items = batchCreateItems(args?.create);\n\t\tconst rawCount = readArray(args?.create)?.length;\n\t\t// An empty array is strict-mode filler: the call lists the tasks, so the\n\t\t// group earns no segment of its own.\n\t\tif (rawCount !== 0) {\n\t\t\tconst body: string[] = [];\n\t\t\tif (rawCount !== undefined) {\n\t\t\t\tconst count = Math.min(rawCount, CALL_ITEMS_MAX);\n\t\t\t\tbody.push(theme.fg(\"dim\", `${count} ${count === 1 ? \"task\" : \"tasks\"}`));\n\t\t\t\tconst preview = formatSubjectPreview(\n\t\t\t\t\titems.map((item) => item.subject),\n\t\t\t\t\tcount,\n\t\t\t\t);\n\t\t\t\tif (preview) body.push(theme.fg(\"dim\", \"·\"), theme.fg(\"text\", preview));\n\t\t\t}\n\t\t\tpushSegment(\"create\", body.join(\" \"));\n\t\t}\n\t\tconst ids = createResultIds(result, items.length);\n\t\tfor (const [index, item] of items.entries()) {\n\t\t\tconst marker = ids ? theme.fg(\"accent\", `#${ids[index]}`) : theme.fg(\"accent\", `${index + 1}.`);\n\t\t\tconst status =\n\t\t\t\titem.status && item.status !== \"pending\"\n\t\t\t\t\t? ` ${theme.fg(STATUS_COLOR[item.status], `(${item.status})`)}`\n\t\t\t\t\t: \"\";\n\t\t\tdetails.push(item.subject ? `${marker} ${theme.fg(\"text\", item.subject)}${status}` : marker);\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasUpdate) {\n\t\tconst items = batchUpdateItems(args?.update);\n\t\tconst rawCount = readArray(args?.update)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tif (item.id !== undefined) parts.push(theme.fg(\"accent\", `#${item.id}`));\n\t\t\t\tif (item.status) parts.push(theme.fg(STATUS_COLOR[item.status], item.status));\n\t\t\t\tif (item.subject)\n\t\t\t\t\tparts.push(theme.fg(\"text\", truncateToWidth(item.subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\t\t\tif (parts.length > 0) entries.push(parts.join(\" \"));\n\t\t\t}\n\t\t\tpushSegment(\"update\", entries.join(theme.fg(\"dim\", \", \")));\n\t\t}\n\t\tfor (const item of items) {\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasDelete) {\n\t\tconst rawCount = readArray(args?.delete)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst ids = readIds(args?.delete) ?? [];\n\t\t\tpushSegment(\"delete\", ids.length > 0 ? theme.fg(\"accent\", ids.map((id) => `#${id}`).join(\", \")) : \"\");\n\t\t}\n\t\t// The headline already carries the ids, so details only earn their lines\n\t\t// once the result names what was actually removed or already absent.\n\t\tfor (const entry of deleteResultRemoved(result)) {\n\t\t\tdetails.push(`${theme.fg(\"accent\", `#${entry.id}`)} ${theme.fg(\"text\", entry.subject)}`);\n\t\t}\n\t\tfor (const id of deleteResultAbsent(result)) {\n\t\t\tdetails.push(theme.fg(\"dim\", `#${id} already absent`));\n\t\t}\n\t}\n\n\tif (segments.length === 0) {\n\t\t// No group fields at all: the call lists the tasks.\n\t\tsegments.push(theme.fg(\"toolTitle\", theme.bold(\"todo list\")));\n\t}\n\n\treturn { headline: segments.join(theme.fg(\"dim\", \" ; \")), details };\n}\n\n/** One-line call summary when collapsed; headline plus details when expanded. */\nexport function formatTodoCall(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\texpanded: boolean,\n\tresult?: AgentToolResult<unknown>,\n): string {\n\tconst { headline, details } = formatCallParts(args, theme, result);\n\treturn !expanded || details.length === 0 ? headline : [headline, ...details].join(\"\\n\");\n}\n\n/** Id -> item index plus status counts over the v3 snapshot (one defensive walk). */\nfunction stateIndex(state: Record<string, unknown>):\n\t| {\n\t\t\tbyId: Map<number, Record<string, unknown>>;\n\t\t\tcounts: { inProgress: number; pending: number; completed: number };\n\t }\n\t| undefined {\n\tconst array = readArray(safeValue(state, \"items\"), TODO_MAX_ITEMS);\n\tif (!array || array.length > TODO_MAX_ITEMS) return undefined;\n\tconst byId = new Map<number, Record<string, unknown>>();\n\tconst counts = { inProgress: 0, pending: 0, completed: 0 };\n\tfor (const raw of array.values) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined && !byId.has(id)) byId.set(id, item);\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status === \"in_progress\") counts.inProgress++;\n\t\telse if (status === \"pending\") counts.pending++;\n\t\telse if (status === \"completed\") counts.completed++;\n\t}\n\treturn { byId, counts };\n}\n\nfunction stateSubject(map: Map<number, Record<string, unknown>>, id: number): string {\n\tconst item = map.get(id);\n\treturn item ? safeSubject(safeValue(item, \"subject\")) : \"\";\n}\n\n/** Id+subject entries (deleted, evicted): invalid entries drop. */\nfunction idSubjectEntries(value: unknown): Array<{ id: number; subject: string }> {\n\tconst entries: Array<{ id: number; subject: string }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tconst subject = safeSubject(safeValue(item, \"subject\"));\n\t\tif (id === undefined || !subject) continue;\n\t\tentries.push({ id, subject });\n\t}\n\treturn entries;\n}\n\n/** Updated entries: {id, from, to} records, invalid entries drop. */\nfunction updatedEntries(value: unknown): Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> {\n\tconst entries: Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id === undefined) continue;\n\t\tconst entry: { id: number; from?: TodoStatus; to?: TodoStatus } = { id };\n\t\tconst from = safeStatus(safeValue(item, \"from\"));\n\t\tif (from) entry.from = from;\n\t\tconst to = safeStatus(safeValue(item, \"to\"));\n\t\tif (to) entry.to = to;\n\t\tentries.push(entry);\n\t}\n\treturn entries;\n}\n\nfunction formatTodoGroupSuccess(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult: AgentToolResult<unknown>,\n): string | undefined {\n\tconst parsed = todoDetails(result.details);\n\tif (!parsed) return undefined;\n\tconst { change, state } = parsed;\n\tconst index = stateIndex(state);\n\tconst segments: string[] = [];\n\tconst pushVerb = (word: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${word}` : word;\n\t\tsegments.push(body ? `${theme.fg(\"toolTitle\", title)} ${body}` : theme.fg(\"toolTitle\", title));\n\t};\n\tconst withPreview = (word: string, ids: number[], subjects: string[]): void => {\n\t\tconst text = formatSubjectPreview(subjects, subjects.length);\n\t\tconst base = theme.fg(\"accent\", formatIdRange(ids));\n\t\tpushVerb(word, text ? `${base}${theme.fg(\"dim\", \" · \")}${theme.fg(\"text\", text)}` : base);\n\t};\n\n\tconst created = readIds(safeValue(change, \"created\")) ?? [];\n\tif (created.length > 0 && index) {\n\t\twithPreview(\n\t\t\t\"created\",\n\t\t\tcreated,\n\t\t\tcreated.map((id) => stateSubject(index.byId, id)),\n\t\t);\n\t}\n\tfor (const entry of updatedEntries(safeValue(change, \"updated\"))) {\n\t\tconst parts = [theme.fg(\"accent\", `#${entry.id}`)];\n\t\tif (entry.to) parts.push(theme.fg(STATUS_COLOR[entry.to], entry.to));\n\t\tconst subject = index ? stateSubject(index.byId, entry.id) : \"\";\n\t\tif (subject) parts.push(theme.fg(\"text\", truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\tpushVerb(\"updated\", parts.join(\" \"));\n\t}\n\tconst demotedId = safeId(safeValue(change, \"demotedId\"));\n\tif (demotedId !== undefined) segments.push(theme.fg(\"dim\", `demoted #${demotedId}`));\n\tconst deleted = idSubjectEntries(safeValue(change, \"deleted\"));\n\tif (deleted.length > 0) {\n\t\twithPreview(\n\t\t\t\"deleted\",\n\t\t\tdeleted.map((entry) => entry.id),\n\t\t\tdeleted.map((entry) => entry.subject),\n\t\t);\n\t}\n\tfor (const id of readIds(safeValue(change, \"absent\")) ?? []) {\n\t\tsegments.push(theme.fg(\"dim\", `#${id} already absent`));\n\t}\n\tconst evicted = idSubjectEntries(safeValue(change, \"evicted\"));\n\tif (evicted.length > 0) {\n\t\tsegments.push(theme.fg(\"dim\", `auto-removed ${evicted.map((entry) => `#${entry.id}`).join(\", \")}`));\n\t}\n\n\tif (segments.length === 0) {\n\t\t// Empty change: the call listed the tasks.\n\t\tif (!index) return undefined;\n\t\tconst parts: string[] = [];\n\t\tif (index.counts.inProgress > 0) parts.push(`${index.counts.inProgress} in progress`);\n\t\tif (index.counts.pending > 0) parts.push(`${index.counts.pending} pending`);\n\t\tif (index.counts.completed > 0) parts.push(`${index.counts.completed} completed`);\n\t\treturn `${theme.fg(\"toolTitle\", \"todo list\")}: ${theme.fg(\"dim\", parts.length ? parts.join(\", \") : \"no tasks\")}`;\n\t}\n\t// The update segment can still pick up the requested subject when the state\n\t// no longer holds it (e.g. the task was deleted by a hostile snapshot).\n\tvoid args;\n\treturn segments.join(theme.fg(\"dim\", \" ; \"));\n}\n\nexport interface TodoGroupRenderContext {\n\tisError: boolean;\n\tisPartial: boolean;\n\tresult?: AgentToolResult<unknown>;\n}\n\n/** Compact result-aware summary used only by collapsed todo tool groups. */\nexport function formatTodoGroupCall(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tcontext: TodoGroupRenderContext,\n): string {\n\tif (context.isError) {\n\t\tlet reason = \"tool failed\";\n\t\ttry {\n\t\t\tfor (const block of context.result?.content.slice(0, 8) ?? []) {\n\t\t\t\tif (block.type !== \"text\" || typeof block.text !== \"string\") continue;\n\t\t\t\tconst text = block.text\n\t\t\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \")\n\t\t\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t\t\t.trim();\n\t\t\t\tif (!text) continue;\n\t\t\t\treason = text.length > GROUP_FAILURE_MAX_LENGTH ? `${text.slice(0, GROUP_FAILURE_MAX_LENGTH - 1)}…` : text;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Tool results can come from historical or third-party sources.\n\t\t}\n\t\treturn `${formatTodoCall(args, theme, false)} ${theme.fg(\"error\", `failed: ${reason}`)}`;\n\t}\n\tif (!context.isPartial && context.result) {\n\t\tconst summary = formatTodoGroupSuccess(args, theme, context.result);\n\t\tif (summary) return summary;\n\t}\n\treturn formatTodoCall(args, theme, false);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/extensions/todo/view.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * todo/view.ts — v3 presentation: the one-line above-editor widget renderer,\n * tool call/group renderers, the /todos list formatter, and model-facing\n * result text. Wire input (args, details, snapshots) is read defensively and\n * bounded so partial or hostile input cannot grow output without limit.\n */\n\nimport { truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult } from \"../../core/extensions/types.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport {\n\tTODO_MAX_BATCH_ITEMS,\n\tTODO_MAX_DESCRIPTION_LENGTH,\n\tTODO_MAX_ITEMS,\n\tTODO_MAX_SUBJECT_LENGTH,\n} from \"./constants.ts\";\nimport {\n\tTODO_DETAILS_SCHEMA_VERSION,\n\ttype TodoChange,\n\ttype TodoItem,\n\ttype TodoParams,\n\ttype TodoState,\n\ttype TodoStatus,\n} from \"./schema.ts\";\n\nexport const STATUS_MARK: Record<TodoStatus, string> = {\n\tpending: \"[ ]\",\n\tin_progress: \"[>]\",\n\tcompleted: \"[x]\",\n};\n\nconst STATUS_COLOR: Record<TodoStatus, \"dim\" | \"warning\" | \"success\"> = {\n\tpending: \"dim\",\n\tin_progress: \"warning\",\n\tcompleted: \"success\",\n};\n\nconst STATUS_RANK: Record<TodoStatus, number> = {\n\tin_progress: 0,\n\tpending: 1,\n\tcompleted: 2,\n};\n\n// --- One-line widget --------------------------------------------------------\n\nconst WIDGET_HEADER_SEPARATOR = \" · \";\nconst WIDGET_ITEM_SEPARATOR = \" \";\n\n/** True while any open task exists; the widget is registered only in that case. */\nexport function hasOpenTodos(state: TodoState): boolean {\n\treturn state.items.some((item) => item.status === \"pending\" || item.status === \"in_progress\");\n}\n\n/** Status counts across the whole list. */\nfunction widgetCounts(state: TodoState): { active: number; pending: number; completed: number } {\n\tconst counts = { active: 0, pending: 0, completed: 0 };\n\tfor (const item of state.items) {\n\t\tif (item.status === \"in_progress\") counts.active++;\n\t\telse if (item.status === \"pending\") counts.pending++;\n\t\telse counts.completed++;\n\t}\n\treturn counts;\n}\n\nfunction widgetSegment(item: TodoItem, subject: string, theme: Theme): string {\n\treturn `${theme.fg(STATUS_COLOR[item.status], STATUS_MARK[item.status])} ${theme.fg(\"accent\", `#${item.id}`)} ${theme.fg(\"text\", subject)}`;\n}\n\nfunction widgetLine(header: string, segments: string[], overflow: string): string {\n\tconst body = [...segments, ...(overflow ? [overflow] : [])].join(WIDGET_ITEM_SEPARATOR);\n\treturn body ? `${header}${WIDGET_HEADER_SEPARATOR}${body}` : header;\n}\n\n/** One-line widget: `Todos 2/6 · [>] #4 s [ ] #5 s +N more`; only hidden open tasks count in the overflow. */\nexport function renderWidgetLine(state: TodoState, theme: Theme, width: number): string[] {\n\tconst safeWidth = Math.max(1, width);\n\tconst items = state.items;\n\tconst candidates = items\n\t\t.filter((item) => item.status !== \"completed\")\n\t\t.sort((first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id);\n\tif (candidates.length === 0) return [];\n\n\tconst total = items.length;\n\tconst completed = items.filter((item) => item.status === \"completed\").length;\n\tconst header = `${theme.fg(\"accent\", \"Todos\")} ${theme.fg(\"dim\", `${completed}/${total}`)}`;\n\tconst shown: Array<{ item: TodoItem; subject: string }> = [];\n\tlet overflow = \"\";\n\n\t// Count only open tasks not shown by the trial segments.\n\tconst bestOverflow = (trial: Array<{ item: TodoItem; subject: string }>): string | undefined => {\n\t\tconst remaining = candidates.length - trial.length;\n\t\tconst segments = trial.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\t\tif (remaining <= 0) return visibleWidth(widgetLine(header, segments, \"\")) <= safeWidth ? \"\" : undefined;\n\t\tconst short = theme.fg(\"dim\", `+${remaining} more`);\n\t\treturn visibleWidth(widgetLine(header, segments, short)) <= safeWidth ? short : undefined;\n\t};\n\n\t// Extreme narrow widths: the best summary that fits, then the bare header.\n\tconst fallback = (): string[] => {\n\t\tconst best = bestOverflow([]);\n\t\tif (best !== undefined) return [widgetLine(header, [], best)];\n\t\tif (visibleWidth(header) <= safeWidth) return [header];\n\t\treturn [truncateToWidth(header, safeWidth, \"…\")];\n\t};\n\n\t// Segments are added whole, active first then pending by id, while the\n\t// line keeps fitting; only the active subject may be truncated.\n\tfor (const candidate of candidates) {\n\t\tconst best = bestOverflow([...shown, { item: candidate, subject: candidate.subject }]);\n\t\tif (best !== undefined) {\n\t\t\tshown.push({ item: candidate, subject: candidate.subject });\n\t\t\toverflow = best;\n\t\t\tcontinue;\n\t\t}\n\t\tif (candidate.status !== \"in_progress\") break;\n\t\tconst remaining = candidates.length - shown.length - 1;\n\t\tconst suffix = remaining > 0 ? `${WIDGET_ITEM_SEPARATOR}+${remaining} more` : \"\";\n\t\tconst prefix = `${header}${WIDGET_HEADER_SEPARATOR}${widgetSegment(candidate, \"\", theme)}${suffix}`;\n\t\tconst available = safeWidth - visibleWidth(prefix);\n\t\tif (available < 1) return fallback();\n\t\tshown.push({ item: candidate, subject: truncateToWidth(candidate.subject, available, \"…\") });\n\t\toverflow = bestOverflow(shown) ?? \"\";\n\t}\n\n\tif (shown.length === 0) return fallback();\n\n\tconst segments = shown.map((entry) => widgetSegment(entry.item, entry.subject, theme));\n\tconst line = widgetLine(header, segments, overflow);\n\t// Safety net: the visible width always stays within the terminal width.\n\treturn [visibleWidth(line) <= safeWidth ? line : truncateToWidth(line, safeWidth, \"…\")];\n}\n\n// --- Full list (used by /todos and the model-facing list result) ------------\n\n/** `Todos: X in progress, Y pending, Z completed` header plus two-line tasks. */\nfunction formatTodoList(state: TodoState): string {\n\tif (state.items.length === 0) return \"No todos.\";\n\tconst counts = widgetCounts(state);\n\tconst lines = [`Todos: ${counts.active} in progress, ${counts.pending} pending, ${counts.completed} completed`];\n\tconst items = [...state.items].sort(\n\t\t(first, second) => STATUS_RANK[first.status] - STATUS_RANK[second.status] || first.id - second.id,\n\t);\n\tfor (const item of items) {\n\t\tlines.push(`${STATUS_MARK[item.status]} #${item.id} ${item.subject}`);\n\t\tlines.push(` ${item.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/** /todos command output: full list, subject line plus indented description per task. */\nexport const formatCommandList = formatTodoList;\n\n// --- Model-facing result text ------------------------------------------------\n\n/** `#1–#3` for a consecutive run, `#1, #2` otherwise. */\nfunction formatIdRange(ids: number[]): string {\n\tconst consecutive = ids.length > 1 && ids.every((id, index) => id === ids[0] + index);\n\treturn consecutive ? `#${ids[0]}–#${ids[ids.length - 1]}` : ids.map((id) => `#${id}`).join(\", \");\n}\n\n/**\n * One-line change summary for a completed call, e.g.\n * `Created 1 task: #7: Wire parser (in_progress); Updated #1 (pending -> completed): S; demoted #5 to pending; auto-removed completed #1–#3 to stay within 20`.\n * A call that changed nothing (including `{}`) returns the full list.\n */\nexport function formatTodoContent(change: TodoChange, state: TodoState): string {\n\tconst parts: string[] = [];\n\tif (change.created.length > 0) {\n\t\tconst labels = change.created.map((id) => {\n\t\t\tconst item = state.items.find((entry) => entry.id === id);\n\t\t\tif (!item) return `#${id}`;\n\t\t\tconst suffix = item.status === \"pending\" ? \"\" : ` (${item.status})`;\n\t\t\treturn `#${id}: ${item.subject}${suffix}`;\n\t\t});\n\t\tconst noun = change.created.length === 1 ? \"task\" : \"tasks\";\n\t\tparts.push(`Created ${change.created.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const entry of change.updated) {\n\t\tconst item = state.items.find((candidate) => candidate.id === entry.id);\n\t\tconst subject = item ? `: ${item.subject}` : \"\";\n\t\tconst transition = entry.from === entry.to ? \"\" : ` (${entry.from} -> ${entry.to})`;\n\t\tparts.push(`Updated #${entry.id}${transition}${subject}`);\n\t}\n\tif (change.demotedId !== undefined) parts.push(`demoted #${change.demotedId} to pending`);\n\tif (change.deleted.length > 0) {\n\t\tconst noun = change.deleted.length === 1 ? \"task\" : \"tasks\";\n\t\tconst labels = change.deleted.map((entry) => `#${entry.id}: ${entry.subject}`);\n\t\tparts.push(`Deleted ${change.deleted.length} ${noun}: ${labels.join(\"; \")}`);\n\t}\n\tfor (const id of change.absent) parts.push(`#${id} already absent`);\n\tif (change.evicted.length > 0) {\n\t\tconst ids = change.evicted.map((entry) => entry.id);\n\t\tparts.push(`auto-removed completed ${formatIdRange(ids)} to stay within ${TODO_MAX_ITEMS}`);\n\t}\n\tif (parts.length === 0) return formatTodoList(state);\n\treturn parts.join(\"; \");\n}\n\n// --- Tool calls and collapsed group summaries -------------------------------\n\n// Collapsed todo calls join the `todo` group as one headline per row. Args can\n// be partial or hostile and details may come from any source, so one defensive\n// reading family (record/field/text/id/status/array) serves both renderers.\n// Output stays bounded: batches at 20, subjects at 160, descriptions at 500.\n\ntype TodoCallArgs = Partial<Record<keyof TodoParams, unknown>>;\n\nconst CALL_ITEMS_MAX = TODO_MAX_BATCH_ITEMS;\nconst CALL_SUBJECT_PREVIEW_COUNT = 2;\nconst CALL_SUBJECT_PREVIEW_WIDTH = 72;\nconst CALL_DESCRIPTION_PREVIEW_LENGTH = 120;\nconst SUMMARY_FAILURE_MAX_LENGTH = 120;\n\n/** Record-like read; proxies that throw on inspection are treated as absent. */\nfunction safeRecord(value: unknown): Record<string, unknown> | undefined {\n\ttry {\n\t\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t\t? (value as Record<string, unknown>)\n\t\t\t: undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Field read that never throws, even for exotic objects with throwing getters. */\nfunction safeValue(record: Record<string, unknown> | undefined, key: string): unknown {\n\ttry {\n\t\treturn record?.[key];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction safeString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\n/** Trimmed, whitespace-collapsed, length-clipped text (empty when absent). */\nfunction clipText(value: unknown, max: number): string {\n\treturn safeString(value)?.trim().replace(/\\s+/g, \" \").slice(0, max) ?? \"\";\n}\n\nconst safeSubject = (value: unknown): string => clipText(value, TODO_MAX_SUBJECT_LENGTH);\nconst safeDescription = (value: unknown): string => clipText(value, TODO_MAX_DESCRIPTION_LENGTH);\n\nfunction safeId(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1 ? value : undefined;\n}\n\nfunction safeStatus(value: unknown): TodoStatus | undefined {\n\tconst status = safeString(value);\n\tif (status === \"pending\" || status === \"in_progress\" || status === \"completed\") return status;\n\treturn undefined;\n}\n\nfunction readArray(value: unknown, limit = CALL_ITEMS_MAX): { values: unknown[]; length: number } | undefined {\n\ttry {\n\t\tif (!Array.isArray(value)) return undefined;\n\t\tconst length = value.length;\n\t\tconst values: unknown[] = [];\n\t\tfor (let index = 0; index < Math.min(length, limit); index++) {\n\t\t\ttry {\n\t\t\t\tvalues.push(value[index]);\n\t\t\t} catch {\n\t\t\t\tvalues.push(undefined);\n\t\t\t}\n\t\t}\n\t\treturn { values, length };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Id lists: invalid entries drop (rendering never rejects the whole call). */\nfunction readIds(value: unknown): number[] | undefined {\n\tconst array = readArray(value);\n\tif (!array) return undefined;\n\tconst ids: number[] = [];\n\tfor (const entry of array.values) {\n\t\tconst id = safeId(entry);\n\t\tif (id !== undefined) ids.push(id);\n\t}\n\treturn ids;\n}\n\ninterface CreateCallItem {\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Create args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchCreateItems(value: unknown): CreateCallItem[] {\n\tconst result: CreateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: CreateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\ninterface UpdateCallItem {\n\tid?: number;\n\tsubject: string;\n\tdescription: string;\n\tstatus?: TodoStatus;\n}\n\n/** Update args: sparse or invalid entries drop; the batch caps at the maximum. */\nfunction batchUpdateItems(value: unknown): UpdateCallItem[] {\n\tconst result: UpdateCallItem[] = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst entry: UpdateCallItem = {\n\t\t\tsubject: safeSubject(safeValue(item, \"subject\")),\n\t\t\tdescription: safeDescription(safeValue(item, \"description\")),\n\t\t};\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined) entry.id = id;\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status) entry.status = status;\n\t\tresult.push(entry);\n\t}\n\treturn result;\n}\n\nfunction descriptionPreview(value: string): string {\n\tconst text = value.replace(/\\s+/g, \" \");\n\treturn text.length > CALL_DESCRIPTION_PREVIEW_LENGTH\n\t\t? `${text.slice(0, CALL_DESCRIPTION_PREVIEW_LENGTH - 1)}…`\n\t\t: text;\n}\n\n/** At most two subjects, each truncated to the preview width, plus `+N more`. */\nfunction formatSubjectPreview(subjects: string[], total: number): string {\n\t// Filter before slicing so an empty subject (streaming args) does not consume\n\t// a preview slot.\n\tconst shown = subjects\n\t\t.filter(Boolean)\n\t\t.slice(0, CALL_SUBJECT_PREVIEW_COUNT)\n\t\t.map((subject) => truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\"));\n\tif (!shown.length) return \"\";\n\tconst hidden = Math.max(0, total - shown.length);\n\treturn `${shown.join(\", \")}${hidden ? `, +${hidden} more` : \"\"}`;\n}\n\n/** v3 details guard shared by the call and group renderers. */\nfunction todoDetails(value: unknown): { change: Record<string, unknown>; state: Record<string, unknown> } | undefined {\n\tconst details = safeRecord(value);\n\tif (!details || safeValue(details, \"schemaVersion\") !== TODO_DETAILS_SCHEMA_VERSION) return undefined;\n\tconst change = safeRecord(safeValue(details, \"change\"));\n\tconst state = safeRecord(safeValue(details, \"state\"));\n\tif (!change || !state) return undefined;\n\treturn { change, state };\n}\n\n/** Result ids for an expanded create, only when they match the shown items. */\nfunction createResultIds(result: AgentToolResult<unknown> | undefined, count: number): number[] | undefined {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return undefined;\n\tconst ids = readIds(safeValue(details.change, \"created\"));\n\treturn ids && ids.length === count && count > 0 ? ids : undefined;\n}\n\n/** Removed entries from a settled result, for the expanded delete detail lines. */\nfunction deleteResultRemoved(result: AgentToolResult<unknown> | undefined): Array<{ id: number; subject: string }> {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn idSubjectEntries(safeValue(details.change, \"deleted\"));\n}\n\n/** Absent ids from a settled delete, for the expanded delete detail lines. */\nfunction deleteResultAbsent(result: AgentToolResult<unknown> | undefined): number[] {\n\tconst details = todoDetails(result?.details);\n\tif (!details) return [];\n\treturn readIds(safeValue(details.change, \"absent\")) ?? [];\n}\n\n/** Headline plus the parameters the result never echoes as detail lines. */\nfunction formatCallParts(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult?: AgentToolResult<unknown>,\n): { headline: string; details: string[] } {\n\tconst details: string[] = [];\n\tconst segments: string[] = [];\n\tconst pushSegment = (verb: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${verb}` : verb;\n\t\tsegments.push(\n\t\t\tbody ? `${theme.fg(\"toolTitle\", theme.bold(title))} ${body}` : theme.fg(\"toolTitle\", theme.bold(title)),\n\t\t);\n\t};\n\n\tconst hasCreate = args?.create !== undefined;\n\tconst hasUpdate = args?.update !== undefined;\n\tconst hasDelete = args?.delete !== undefined;\n\n\tif (hasCreate) {\n\t\tconst items = batchCreateItems(args?.create);\n\t\tconst rawCount = readArray(args?.create)?.length;\n\t\t// An empty array is strict-mode filler: the call lists the tasks, so the\n\t\t// group earns no segment of its own.\n\t\tif (rawCount !== 0) {\n\t\t\tconst body: string[] = [];\n\t\t\tif (rawCount !== undefined) {\n\t\t\t\tconst count = Math.min(rawCount, CALL_ITEMS_MAX);\n\t\t\t\tbody.push(theme.fg(\"dim\", `${count} ${count === 1 ? \"task\" : \"tasks\"}`));\n\t\t\t\tconst preview = formatSubjectPreview(\n\t\t\t\t\titems.map((item) => item.subject),\n\t\t\t\t\tcount,\n\t\t\t\t);\n\t\t\t\tif (preview) body.push(theme.fg(\"dim\", \"·\"), theme.fg(\"text\", preview));\n\t\t\t}\n\t\t\tpushSegment(\"create\", body.join(\" \"));\n\t\t}\n\t\tconst ids = createResultIds(result, items.length);\n\t\tfor (const [index, item] of items.entries()) {\n\t\t\tconst marker = ids ? theme.fg(\"accent\", `#${ids[index]}`) : theme.fg(\"accent\", `${index + 1}.`);\n\t\t\tconst status =\n\t\t\t\titem.status && item.status !== \"pending\"\n\t\t\t\t\t? ` ${theme.fg(STATUS_COLOR[item.status], `(${item.status})`)}`\n\t\t\t\t\t: \"\";\n\t\t\tdetails.push(item.subject ? `${marker} ${theme.fg(\"text\", item.subject)}${status}` : marker);\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasUpdate) {\n\t\tconst items = batchUpdateItems(args?.update);\n\t\tconst rawCount = readArray(args?.update)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tif (item.id !== undefined) parts.push(theme.fg(\"accent\", `#${item.id}`));\n\t\t\t\tif (item.status) parts.push(theme.fg(STATUS_COLOR[item.status], item.status));\n\t\t\t\tif (item.subject)\n\t\t\t\t\tparts.push(theme.fg(\"text\", truncateToWidth(item.subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\t\t\tif (parts.length > 0) entries.push(parts.join(\" \"));\n\t\t\t}\n\t\t\tpushSegment(\"update\", entries.join(theme.fg(\"dim\", \", \")));\n\t\t}\n\t\tfor (const item of items) {\n\t\t\tif (item.description) details.push(` ${theme.fg(\"dim\", descriptionPreview(item.description))}`);\n\t\t}\n\t}\n\n\tif (hasDelete) {\n\t\tconst rawCount = readArray(args?.delete)?.length;\n\t\tif (rawCount !== 0) {\n\t\t\tconst ids = readIds(args?.delete) ?? [];\n\t\t\tpushSegment(\"delete\", ids.length > 0 ? theme.fg(\"accent\", ids.map((id) => `#${id}`).join(\", \")) : \"\");\n\t\t}\n\t\t// The headline already carries the ids, so details only earn their lines\n\t\t// once the result names what was actually removed or already absent.\n\t\tfor (const entry of deleteResultRemoved(result)) {\n\t\t\tdetails.push(`${theme.fg(\"accent\", `#${entry.id}`)} ${theme.fg(\"text\", entry.subject)}`);\n\t\t}\n\t\tfor (const id of deleteResultAbsent(result)) {\n\t\t\tdetails.push(theme.fg(\"dim\", `#${id} already absent`));\n\t\t}\n\t}\n\n\tif (segments.length === 0) {\n\t\t// No group fields at all: the call lists the tasks.\n\t\tsegments.push(theme.fg(\"toolTitle\", theme.bold(\"todo list\")));\n\t}\n\n\treturn { headline: segments.join(theme.fg(\"dim\", \" ; \")), details };\n}\n\n/** One-line call summary when collapsed; headline plus details when expanded. */\nexport function formatTodoCall(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\texpanded: boolean,\n\tresult?: AgentToolResult<unknown>,\n): string {\n\tconst { headline, details } = formatCallParts(args, theme, result);\n\treturn !expanded || details.length === 0 ? headline : [headline, ...details].join(\"\\n\");\n}\n\n/** Id -> item index plus status counts over the v3 snapshot (one defensive walk). */\nfunction stateIndex(state: Record<string, unknown>):\n\t| {\n\t\t\tbyId: Map<number, Record<string, unknown>>;\n\t\t\tcounts: { inProgress: number; pending: number; completed: number };\n\t }\n\t| undefined {\n\tconst array = readArray(safeValue(state, \"items\"), TODO_MAX_ITEMS);\n\tif (!array || array.length > TODO_MAX_ITEMS) return undefined;\n\tconst byId = new Map<number, Record<string, unknown>>();\n\tconst counts = { inProgress: 0, pending: 0, completed: 0 };\n\tfor (const raw of array.values) {\n\t\tconst item = safeRecord(raw);\n\t\tif (!item) continue;\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id !== undefined && !byId.has(id)) byId.set(id, item);\n\t\tconst status = safeStatus(safeValue(item, \"status\"));\n\t\tif (status === \"in_progress\") counts.inProgress++;\n\t\telse if (status === \"pending\") counts.pending++;\n\t\telse if (status === \"completed\") counts.completed++;\n\t}\n\treturn { byId, counts };\n}\n\nfunction stateSubject(map: Map<number, Record<string, unknown>>, id: number): string {\n\tconst item = map.get(id);\n\treturn item ? safeSubject(safeValue(item, \"subject\")) : \"\";\n}\n\n/** Id+subject entries (deleted, evicted): invalid entries drop. */\nfunction idSubjectEntries(value: unknown): Array<{ id: number; subject: string }> {\n\tconst entries: Array<{ id: number; subject: string }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tconst subject = safeSubject(safeValue(item, \"subject\"));\n\t\tif (id === undefined || !subject) continue;\n\t\tentries.push({ id, subject });\n\t}\n\treturn entries;\n}\n\n/** Updated entries: {id, from, to} records, invalid entries drop. */\nfunction updatedEntries(value: unknown): Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> {\n\tconst entries: Array<{ id: number; from?: TodoStatus; to?: TodoStatus }> = [];\n\tfor (const raw of readArray(value)?.values ?? []) {\n\t\tconst item = safeRecord(raw);\n\t\tconst id = safeId(safeValue(item, \"id\"));\n\t\tif (id === undefined) continue;\n\t\tconst entry: { id: number; from?: TodoStatus; to?: TodoStatus } = { id };\n\t\tconst from = safeStatus(safeValue(item, \"from\"));\n\t\tif (from) entry.from = from;\n\t\tconst to = safeStatus(safeValue(item, \"to\"));\n\t\tif (to) entry.to = to;\n\t\tentries.push(entry);\n\t}\n\treturn entries;\n}\n\nfunction formatTodoSuccessSummary(\n\targs: TodoCallArgs | undefined,\n\ttheme: Theme,\n\tresult: AgentToolResult<unknown>,\n): string | undefined {\n\tconst parsed = todoDetails(result.details);\n\tif (!parsed) return undefined;\n\tconst { change, state } = parsed;\n\tconst index = stateIndex(state);\n\tconst segments: string[] = [];\n\tconst pushVerb = (word: string, body: string): void => {\n\t\tconst title = segments.length === 0 ? `todo ${word}` : word;\n\t\tsegments.push(body ? `${theme.fg(\"toolTitle\", title)} ${body}` : theme.fg(\"toolTitle\", title));\n\t};\n\tconst withPreview = (word: string, ids: number[], subjects: string[]): void => {\n\t\tconst text = formatSubjectPreview(subjects, subjects.length);\n\t\tconst base = theme.fg(\"accent\", formatIdRange(ids));\n\t\tpushVerb(word, text ? `${base}${theme.fg(\"dim\", \" · \")}${theme.fg(\"text\", text)}` : base);\n\t};\n\n\tconst created = readIds(safeValue(change, \"created\")) ?? [];\n\tif (created.length > 0 && index) {\n\t\twithPreview(\n\t\t\t\"created\",\n\t\t\tcreated,\n\t\t\tcreated.map((id) => stateSubject(index.byId, id)),\n\t\t);\n\t}\n\tfor (const entry of updatedEntries(safeValue(change, \"updated\"))) {\n\t\tconst parts = [theme.fg(\"accent\", `#${entry.id}`)];\n\t\tif (entry.to) parts.push(theme.fg(STATUS_COLOR[entry.to], entry.to));\n\t\tconst subject = index ? stateSubject(index.byId, entry.id) : \"\";\n\t\tif (subject) parts.push(theme.fg(\"text\", truncateToWidth(subject, CALL_SUBJECT_PREVIEW_WIDTH, \"…\")));\n\t\tpushVerb(\"updated\", parts.join(\" \"));\n\t}\n\tconst demotedId = safeId(safeValue(change, \"demotedId\"));\n\tif (demotedId !== undefined) segments.push(theme.fg(\"dim\", `demoted #${demotedId}`));\n\tconst deleted = idSubjectEntries(safeValue(change, \"deleted\"));\n\tif (deleted.length > 0) {\n\t\twithPreview(\n\t\t\t\"deleted\",\n\t\t\tdeleted.map((entry) => entry.id),\n\t\t\tdeleted.map((entry) => entry.subject),\n\t\t);\n\t}\n\tfor (const id of readIds(safeValue(change, \"absent\")) ?? []) {\n\t\tsegments.push(theme.fg(\"dim\", `#${id} already absent`));\n\t}\n\tconst evicted = idSubjectEntries(safeValue(change, \"evicted\"));\n\tif (evicted.length > 0) {\n\t\tsegments.push(theme.fg(\"dim\", `auto-removed ${evicted.map((entry) => `#${entry.id}`).join(\", \")}`));\n\t}\n\n\tif (segments.length === 0) {\n\t\t// Empty change: the call listed the tasks.\n\t\tif (!index) return undefined;\n\t\tconst parts: string[] = [];\n\t\tif (index.counts.inProgress > 0) parts.push(`${index.counts.inProgress} in progress`);\n\t\tif (index.counts.pending > 0) parts.push(`${index.counts.pending} pending`);\n\t\tif (index.counts.completed > 0) parts.push(`${index.counts.completed} completed`);\n\t\treturn `${theme.fg(\"toolTitle\", \"todo list\")}: ${theme.fg(\"dim\", parts.length ? parts.join(\", \") : \"no tasks\")}`;\n\t}\n\t// The update segment can still pick up the requested subject when the state\n\t// no longer holds it (e.g. the task was deleted by a hostile snapshot).\n\tvoid args;\n\treturn segments.join(theme.fg(\"dim\", \" ; \"));\n}\n\nexport interface TodoSummaryContext {\n\tisError: boolean;\n\tisPartial: boolean;\n\tresult?: AgentToolResult<unknown>;\n}\n\n/** Compact result-aware one-line summary of a collapsed todo row. */\nexport function formatTodoSummary(args: TodoCallArgs | undefined, theme: Theme, context: TodoSummaryContext): string {\n\tif (context.isError) {\n\t\tlet reason = \"tool failed\";\n\t\ttry {\n\t\t\tfor (const block of context.result?.content.slice(0, 8) ?? []) {\n\t\t\t\tif (block.type !== \"text\" || typeof block.text !== \"string\") continue;\n\t\t\t\tconst text = block.text\n\t\t\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \")\n\t\t\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t\t\t.trim();\n\t\t\t\tif (!text) continue;\n\t\t\t\treason =\n\t\t\t\t\ttext.length > SUMMARY_FAILURE_MAX_LENGTH ? `${text.slice(0, SUMMARY_FAILURE_MAX_LENGTH - 1)}…` : text;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Tool results can come from historical or third-party sources.\n\t\t}\n\t\treturn `${formatTodoCall(args, theme, false)} ${theme.fg(\"error\", `failed: ${reason}`)}`;\n\t}\n\tif (!context.isPartial && context.result) {\n\t\tconst summary = formatTodoSuccessSummary(args, theme, context.result);\n\t\tif (summary) return summary;\n\t}\n\treturn formatTodoCall(args, theme, false);\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { ToolExecutionComponent, type ToolExecutionOptions } from "../tool-view/tool-execution.ts";
|
|
1
2
|
export { ArminComponent } from "./armin.ts";
|
|
2
3
|
export { AssistantMessageComponent } from "./assistant-message.ts";
|
|
3
4
|
export { BashExecutionComponent } from "./bash-execution.ts";
|
|
@@ -25,7 +26,6 @@ export { ShowImagesSelectorComponent } from "./show-images-selector.ts";
|
|
|
25
26
|
export { SkillInvocationMessageComponent } from "./skill-invocation-message.ts";
|
|
26
27
|
export { ThemeSelectorComponent } from "./theme-selector.ts";
|
|
27
28
|
export { ThinkingSelectorComponent } from "./thinking-selector.ts";
|
|
28
|
-
export { ToolExecutionComponent, type ToolExecutionOptions } from "./tool-execution.ts";
|
|
29
29
|
export { TreeSelectorComponent } from "./tree-selector.ts";
|
|
30
30
|
export { TrustSelectorComponent } from "./trust-selector.ts";
|
|
31
31
|
export { UserMessageComponent } from "./user-message.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// UI Components for extensions
|
|
2
|
+
export { ToolExecutionComponent } from "../tool-view/tool-execution.js";
|
|
2
3
|
export { ArminComponent } from "./armin.js";
|
|
3
4
|
export { AssistantMessageComponent } from "./assistant-message.js";
|
|
4
5
|
export { BashExecutionComponent } from "./bash-execution.js";
|
|
@@ -26,7 +27,6 @@ export { ShowImagesSelectorComponent } from "./show-images-selector.js";
|
|
|
26
27
|
export { SkillInvocationMessageComponent } from "./skill-invocation-message.js";
|
|
27
28
|
export { ThemeSelectorComponent } from "./theme-selector.js";
|
|
28
29
|
export { ThinkingSelectorComponent } from "./thinking-selector.js";
|
|
29
|
-
export { ToolExecutionComponent } from "./tool-execution.js";
|
|
30
30
|
export { TreeSelectorComponent } from "./tree-selector.js";
|
|
31
31
|
export { TrustSelectorComponent } from "./trust-selector.js";
|
|
32
32
|
export { UserMessageComponent } from "./user-message.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,sBAAsB,EAA6B,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAA0B,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,GAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA2C,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAA+C,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAA6B,MAAM,sBAAsB,CAAC","sourcesContent":["// UI Components for extensions\n\nexport { ToolExecutionComponent, type ToolExecutionOptions } from \"../tool-view/tool-execution.ts\";\nexport { ArminComponent } from \"./armin.ts\";\nexport { AssistantMessageComponent } from \"./assistant-message.ts\";\nexport { BashExecutionComponent } from \"./bash-execution.ts\";\nexport { BorderedLoader } from \"./bordered-loader.ts\";\nexport { BranchSummaryMessageComponent } from \"./branch-summary-message.ts\";\nexport { CompactionSummaryMessageComponent } from \"./compaction-summary-message.ts\";\nexport { CustomEditor, type CustomEditorOptions } from \"./custom-editor.ts\";\nexport { CustomMessageComponent } from \"./custom-message.ts\";\nexport { DaxnutsComponent } from \"./daxnuts.ts\";\nexport { type RenderDiffOptions, renderDiff } from \"./diff.ts\";\nexport { DynamicBorder } from \"./dynamic-border.ts\";\nexport { ExtensionEditorComponent } from \"./extension-editor.ts\";\nexport { ExtensionInputComponent } from \"./extension-input.ts\";\nexport { ExtensionSelectorComponent } from \"./extension-selector.ts\";\nexport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupOptions,\n\ttype FirstTimeSetupResult,\n} from \"./first-time-setup.ts\";\nexport { FooterComponent } from \"./footer.ts\";\nexport { keyHint, keyText, rawKeyHint } from \"./keybinding-hints.ts\";\nexport { LoginDialogComponent } from \"./login-dialog.ts\";\nexport { ModelSelectorComponent } from \"./model-selector.ts\";\nexport { OAuthSelectorComponent } from \"./oauth-selector.ts\";\nexport { type ModelsCallbacks, type ModelsConfig, ScopedModelsSelectorComponent } from \"./scoped-models-selector.ts\";\nexport { SessionSelectorComponent } from \"./session-selector.ts\";\nexport { type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent } from \"./settings-selector.ts\";\nexport { ShowImagesSelectorComponent } from \"./show-images-selector.ts\";\nexport { SkillInvocationMessageComponent } from \"./skill-invocation-message.ts\";\nexport { ThemeSelectorComponent } from \"./theme-selector.ts\";\nexport { ThinkingSelectorComponent } from \"./thinking-selector.ts\";\nexport { TreeSelectorComponent } from \"./tree-selector.ts\";\nexport { TrustSelectorComponent } from \"./trust-selector.ts\";\nexport { UserMessageComponent } from \"./user-message.ts\";\nexport { UserMessageSelectorComponent } from \"./user-message-selector.ts\";\nexport { truncateToVisualLines, type VisualTruncateResult } from \"./visual-truncate.ts\";\n"]}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* notifications, completion cards and subagent flows describe the same status
|
|
5
5
|
* the same way. Pure data; consumers apply theme.fg(marker.color, glyph).
|
|
6
6
|
*
|
|
7
|
-
* Distinct from the tool-call
|
|
8
|
-
*
|
|
7
|
+
* Distinct from the tool-call marker in tool-view/style.ts, which expresses a
|
|
8
|
+
* call's lifecycle (pending, success, error), not a task's status.
|
|
9
9
|
*/
|
|
10
10
|
export type StatusMarkerColor = "success" | "error" | "warning" | "accent" | "muted";
|
|
11
11
|
export interface StatusMarker {
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* notifications, completion cards and subagent flows describe the same status
|
|
5
5
|
* the same way. Pure data; consumers apply theme.fg(marker.color, glyph).
|
|
6
6
|
*
|
|
7
|
-
* Distinct from the tool-call
|
|
8
|
-
*
|
|
7
|
+
* Distinct from the tool-call marker in tool-view/style.ts, which expresses a
|
|
8
|
+
* call's lifecycle (pending, success, error), not a task's status.
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
11
|
* A breathing dot-to-star bloom: the sequence plays forward to full bloom
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-marker.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/status-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAsB,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5G,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,0BAA0B,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAC1F,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAA0C;IACtF,IAAI,IAAI,EAAE,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC3D,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACjG,KAAK,WAAW;YACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACvC,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACvC;YACC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;AACF,CAAC","sourcesContent":["/**\n * Shared status-marker vocabulary for long-running executions (background\n * tasks, subagent runs): one glyph+color mapping so the /bg panel, transcript\n * notifications, completion cards and subagent flows describe the same status\n * the same way. Pure data; consumers apply theme.fg(marker.color, glyph).\n *\n * Distinct from the tool-call
|
|
1
|
+
{"version":3,"file":"status-marker.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/status-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAsB,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5G,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,0BAA0B,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAC1F,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAA0C;IACtF,IAAI,IAAI,EAAE,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC3D,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACjG,KAAK,WAAW;YACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACvC,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACb,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACvC;YACC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;AACF,CAAC","sourcesContent":["/**\n * Shared status-marker vocabulary for long-running executions (background\n * tasks, subagent runs): one glyph+color mapping so the /bg panel, transcript\n * notifications, completion cards and subagent flows describe the same status\n * the same way. Pure data; consumers apply theme.fg(marker.color, glyph).\n *\n * Distinct from the tool-call marker in tool-view/style.ts, which expresses a\n * call's lifecycle (pending, success, error), not a task's status.\n */\n\nexport type StatusMarkerColor = \"success\" | \"error\" | \"warning\" | \"accent\" | \"muted\";\n\nexport interface StatusMarker {\n\tglyph: string;\n\tcolor: StatusMarkerColor;\n}\n\n/**\n * A breathing dot-to-star bloom: the sequence plays forward to full bloom\n * and back, holding each extreme for two ticks. The mid frame uses ✼ rather\n * than the more common ✳ because U+2733 carries the Unicode Emoji property\n * and some terminals render it as a double-width color emoji.\n */\nconst SPINNER_BLOOM = [\"·\", \"✢\", \"✼\", \"✶\", \"✻\", \"✽\"];\nexport const STATUS_SPINNER_FRAMES: readonly string[] = [...SPINNER_BLOOM, ...[...SPINNER_BLOOM].reverse()];\nexport const STATUS_SPINNER_INTERVAL_MS = 120;\n\nexport function statusSpinnerFrame(now: number): string {\n\tconst frame = Math.floor(now / STATUS_SPINNER_INTERVAL_MS) % STATUS_SPINNER_FRAMES.length;\n\treturn STATUS_SPINNER_FRAMES[frame] ?? STATUS_SPINNER_FRAMES[0] ?? \"·\";\n}\n\n/**\n * Map an execution status to its marker. Pass `now` to animate a running\n * status as a spinner frame; without it running renders as the static `›`.\n * `stalled` (blocked on interactive input) wins over the underlying status.\n */\nexport function statusMarker(status: string, opts?: { stalled?: boolean; now?: number }): StatusMarker {\n\tif (opts?.stalled) return { glyph: \"!\", color: \"warning\" };\n\tswitch (status) {\n\t\tcase \"running\":\n\t\t\treturn { glyph: opts?.now !== undefined ? statusSpinnerFrame(opts.now) : \"›\", color: \"accent\" };\n\t\tcase \"completed\":\n\t\t\treturn { glyph: \"✓\", color: \"success\" };\n\t\tcase \"failed\":\n\t\t\treturn { glyph: \"×\", color: \"error\" };\n\t\tcase \"timeout\":\n\t\t\treturn { glyph: \"×\", color: \"warning\" };\n\t\tcase \"cancelled\":\n\t\tcase \"killed\":\n\t\tcase \"stopping\":\n\t\tcase \"partial\":\n\t\tcase \"aborted\":\n\t\t\treturn { glyph: \"○\", color: \"warning\" };\n\t\tcase \"queued\":\n\t\t\treturn { glyph: \"○\", color: \"muted\" };\n\t\tdefault:\n\t\t\treturn { glyph: \"•\", color: \"muted\" };\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAEN,KAAK,YAAY,EAKjB,MAAM,8BAA8B,CAAC;AActC,OAAO,EAYN,KAAK,QAAQ,EAOb,MAAM,wBAAwB,CAAC;AAgBhC,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,qCAAqC,CAAC;AAC/G,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAqC1F,OAAO,EAEN,cAAc,EAGd,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAiBpF,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,7 +70,6 @@ import { SettingsSelectorComponent } from "./components/settings-selector.js";
|
|
|
70
70
|
import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js";
|
|
71
71
|
import { BranchSummaryStatusIndicator, CompactionStatusIndicator, IdleStatus, RetryStatusIndicator, WorkingStatusIndicator, } from "./components/status-indicator.js";
|
|
72
72
|
import { ThinkingSelectorComponent } from "./components/thinking-selector.js";
|
|
73
|
-
import { ToolExecutionComponent } from "./components/tool-execution.js";
|
|
74
73
|
import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
75
74
|
import { TrustSelectorComponent } from "./components/trust-selector.js";
|
|
76
75
|
import { UserMessageComponent } from "./components/user-message.js";
|
|
@@ -82,7 +81,8 @@ import { getModelSearchText } from "./model-search.js";
|
|
|
82
81
|
import { shareSession } from "./session-share.js";
|
|
83
82
|
import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
|
|
84
83
|
import { InteractiveThemeController } from "./theme/theme-controller.js";
|
|
85
|
-
import {
|
|
84
|
+
import { disposeChatRows, PendingToolMap, ToolChatContainer } from "./tool-view/chat.js";
|
|
85
|
+
import { ToolExecutionComponent } from "./tool-view/tool-execution.js";
|
|
86
86
|
import { createInteractiveTui, createInteractiveTuiReference } from "./tui-renderer.js";
|
|
87
87
|
export { createInteractiveTui, createInteractiveTuiReference } from "./tui-renderer.js";
|
|
88
88
|
function isWorkingStatusEditor(editor) {
|
|
@@ -2706,10 +2706,9 @@ export class InteractiveMode {
|
|
|
2706
2706
|
const component = new ToolExecutionComponent(content.name, content.id, content.arguments, {
|
|
2707
2707
|
showImages: this.settingsManager.getShowImages(),
|
|
2708
2708
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
2709
|
-
detachHint: toolDetachHint(this.keybindings),
|
|
2710
2709
|
}, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd());
|
|
2711
2710
|
component.setExpanded(this.toolOutputExpanded);
|
|
2712
|
-
|
|
2711
|
+
this.chatContainer.addChild(component);
|
|
2713
2712
|
this.pendingTools.set(content.id, component);
|
|
2714
2713
|
}
|
|
2715
2714
|
else {
|
|
@@ -2774,10 +2773,9 @@ export class InteractiveMode {
|
|
|
2774
2773
|
component = new ToolExecutionComponent(event.toolName, event.toolCallId, event.args, {
|
|
2775
2774
|
showImages: this.settingsManager.getShowImages(),
|
|
2776
2775
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
2777
|
-
detachHint: toolDetachHint(this.keybindings),
|
|
2778
2776
|
}, this.getRegisteredToolDefinition(event.toolName), this.ui, this.sessionManager.getCwd());
|
|
2779
2777
|
component.setExpanded(this.toolOutputExpanded);
|
|
2780
|
-
|
|
2778
|
+
this.chatContainer.addChild(component);
|
|
2781
2779
|
this.pendingTools.set(event.toolCallId, component);
|
|
2782
2780
|
}
|
|
2783
2781
|
component.markExecutionStarted();
|
|
@@ -3104,10 +3102,9 @@ export class InteractiveMode {
|
|
|
3104
3102
|
const component = new ToolExecutionComponent(content.name, content.id, content.arguments, {
|
|
3105
3103
|
showImages: this.settingsManager.getShowImages(),
|
|
3106
3104
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
3107
|
-
detachHint: toolDetachHint(this.keybindings),
|
|
3108
3105
|
}, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd());
|
|
3109
3106
|
component.setExpanded(this.toolOutputExpanded);
|
|
3110
|
-
|
|
3107
|
+
this.chatContainer.addChild(component);
|
|
3111
3108
|
if (message.stopReason === "aborted" || message.stopReason === "error") {
|
|
3112
3109
|
let errorMessage;
|
|
3113
3110
|
if (message.stopReason === "aborted") {
|
|
@@ -3929,7 +3926,7 @@ export class InteractiveMode {
|
|
|
3929
3926
|
onShowImagesChange: (enabled) => {
|
|
3930
3927
|
this.settingsManager.setShowImages(enabled);
|
|
3931
3928
|
for (const child of this.chatContainer.children) {
|
|
3932
|
-
if (
|
|
3929
|
+
if (child instanceof ToolExecutionComponent) {
|
|
3933
3930
|
child.setShowImages(enabled);
|
|
3934
3931
|
}
|
|
3935
3932
|
}
|
|
@@ -3937,7 +3934,7 @@ export class InteractiveMode {
|
|
|
3937
3934
|
onImageWidthCellsChange: (width) => {
|
|
3938
3935
|
this.settingsManager.setImageWidthCells(width);
|
|
3939
3936
|
for (const child of this.chatContainer.children) {
|
|
3940
|
-
if (
|
|
3937
|
+
if (child instanceof ToolExecutionComponent) {
|
|
3941
3938
|
child.setImageWidthCells(width);
|
|
3942
3939
|
}
|
|
3943
3940
|
}
|