@astralyn/pi 1.0.1 → 1.0.2
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 +15 -0
- package/dist/bundle/chunks/{chunk-H2N2THAO.js → chunk-5RBGZ6YW.js} +19 -13
- package/dist/bundle/chunks/{chunk-4TT2QGFL.js → chunk-MWM24AOB.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-YFKU7JZF.js → virtual-modules-EDIGEIG6.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/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +4 -3
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +9 -2
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/extensions/deepwiki/execute.d.ts +0 -3
- package/dist/extensions/deepwiki/execute.d.ts.map +1 -1
- package/dist/extensions/deepwiki/execute.js.map +1 -1
- package/dist/extensions/deepwiki/render.d.ts.map +1 -1
- package/dist/extensions/deepwiki/render.js +0 -5
- package/dist/extensions/deepwiki/render.js.map +1 -1
- package/dist/extensions/question/render.d.ts.map +1 -1
- package/dist/extensions/question/render.js +3 -7
- package/dist/extensions/question/render.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +19 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tasks/index.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/index.js +11 -3
- package/dist/modes/interactive/tasks/index.js.map +1 -1
- package/dist/modes/interactive/tasks/layout.js +4 -5
- package/dist/modes/interactive/tasks/layout.js.map +1 -1
- package/dist/modes/interactive/tasks/manager.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/manager.js +2 -0
- package/dist/modes/interactive/tasks/manager.js.map +1 -1
- package/dist/modes/interactive/tool-view/chat.d.ts +2 -3
- package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/chat.js +18 -5
- package/dist/modes/interactive/tool-view/chat.js.map +1 -1
- package/dist/modes/interactive/tool-view/style.d.ts +2 -1
- package/dist/modes/interactive/tool-view/style.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/style.js +2 -2
- package/dist/modes/interactive/tool-view/style.js.map +1 -1
- package/docs/bundled/tasks.md +5 -3
- package/docs/bundled/tool-presentation.md +3 -2
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/render.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI rendering for the deepwiki tool (collapse / expand).\n *\n * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this\n * extension returns large wiki payloads, so a private renderer stays local here.\n */\nimport { type Component, Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\n\nimport { extractContentPages, extractStructureSections } from \"./client.ts\";\nimport { DEEPWIKI_LABEL } from \"./constants.ts\";\nimport type { DeepWikiDetails } from \"./execute.ts\";\nimport type { DeepWikiParams } from \"./schema.ts\";\n\nfunction truncateText(text: string, maxLength: number, options?: { word?: boolean }): string {\n\tif (text.length <= maxLength) return text;\n\tif (options?.word) {\n\t\tconst prefix = text.slice(0, maxLength - 3);\n\t\tconst lastSpace = prefix.lastIndexOf(\" \");\n\t\tif (lastSpace >= 40) return `${prefix.slice(0, lastSpace)}...`;\n\t}\n\treturn `${text.slice(0, maxLength - 3)}...`;\n}\n\nfunction singleLine(text: unknown): string {\n\treturn typeof text === \"string\" ? text.replace(/\\s+/g, \" \").trim() : \"\";\n}\n\nfunction firstText(result: AgentToolResult<DeepWikiDetails>): string {\n\tfor (const part of result.content ?? []) {\n\t\tif (part.type === \"text\" && typeof part.text === \"string\") return part.text;\n\t}\n\treturn \"\";\n}\n\nfunction firstContentLine(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.find((line) => line.length > 0) ?? \"DeepWiki response\"\n\t);\n}\n\nfunction formatPageList(pages: string[], maxItems = 4): string {\n\tconst shown = pages.slice(0, maxItems).map(singleLine).join(\", \");\n\treturn pages.length > maxItems ? `${shown}...` : shown;\n}\n\nfunction pageTitlesFromResult(text: string, details: DeepWikiDetails | undefined): string[] {\n\tif (Array.isArray(details?.pageTitles)) {\n\t\tconst titles = details.pageTitles.filter((title) => typeof title === \"string\");\n\t\tif (titles.length) return titles;\n\t}\n\tif (Array.isArray(details?.sectionTitles)) {\n\t\tconst titles = details.sectionTitles.filter((title) => typeof title === \"string\");\n\t\tif (titles.length) return titles;\n\t}\n\tconst fromContent = extractContentPages(text);\n\tif (fromContent.length) return fromContent;\n\treturn extractStructureSections(text);\n}\n\nfunction summarizeStructure(text: string, details: DeepWikiDetails | undefined): string {\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (pages.length === 0) return truncateText(firstContentLine(text), 120);\n\tconst count = details?.pageCount ?? pages.length;\n\treturn `${count} pages · ${formatPageList(pages)}`;\n}\n\nfunction summarizeContents(text: string, details: DeepWikiDetails | undefined): string {\n\tif (typeof details?.requestedPage === \"string\" && details.requestedPage.trim()) {\n\t\tconst position =\n\t\t\tdetails.pageIndex !== undefined && details.pageCount ? `${details.pageIndex}/${details.pageCount} · ` : \"\";\n\t\tconst cut = details.truncatedChars ? \" (truncated)\" : \"\";\n\t\treturn `Page ${position}${singleLine(details.requestedPage)}${cut}`;\n\t}\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (details?.shownPages !== undefined) {\n\t\tconst total = details.pageCount ?? pages.length;\n\t\tconst pagesPart = total > 0 ? `${details.shownPages}/${total} pages` : \"partial\";\n\t\treturn `Wiki · ${pagesPart} shown (truncated)`;\n\t}\n\tif (pages.length === 0) return \"Wiki loaded\";\n\treturn `Wiki · ${details?.pageCount ?? pages.length} pages`;\n}\n\nfunction stripDeepWikiTail(text: string): string {\n\tconst tailIndex = text.search(/\\n(?:#+\\s*)?(?:Wiki pages you might want to explore|View this search)/i);\n\tif (tailIndex < 0) return text;\n\treturn text.slice(0, tailIndex);\n}\n\nfunction summarizeQuestion(text: string): string {\n\tconst cleaned = stripDeepWikiTail(text)\n\t\t.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, \"$1\")\n\t\t.replace(/[`*_]/g, \"\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (!cleaned) return \"Answer ready\";\n\tconst sentenceMatch = cleaned.match(/^.{40,}?[.!?](?=\\s|$)/);\n\treturn truncateText(sentenceMatch?.[0] ?? cleaned, 140, { word: true });\n}\n\nfunction summarizeCollapsed(text: string, details: DeepWikiDetails | undefined): string {\n\tlet summary: string;\n\tif (details?.action === \"structure\") summary = summarizeStructure(text, details);\n\telse if (details?.action === \"contents\") summary = summarizeContents(text, details);\n\telse if (details?.action === \"question\") summary = summarizeQuestion(text);\n\telse summary = truncateText(firstContentLine(text), 120);\n\treturn truncateText(singleLine(summary), 180, { word: true });\n}\n\nfunction repoLabel(repoName: DeepWikiParams[\"repoName\"] | undefined): string {\n\tif (Array.isArray(repoName)) {\n\t\tif (repoName.length === 0) return \"repo\";\n\t\tif (repoName.length === 1) return repoName[0];\n\t\treturn `${repoName.length} repos: ${repoName.slice(0, 2).join(\", \")}${repoName.length > 2 ? \"...\" : \"\"}`;\n\t}\n\treturn repoName ?? \"repo\";\n}\n\n/** renderCall sees raw tool args; normalize JSON-array strings for display. */\nfunction repoLabelForCall(repoName: unknown): string {\n\tif (Array.isArray(repoName)) return repoLabel(repoName as DeepWikiParams[\"repoName\"]);\n\tif (typeof repoName === \"string\") {\n\t\tconst trimmed = repoName.trim();\n\t\tif (trimmed.startsWith(\"[\")) {\n\t\t\ttry {\n\t\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\t\tif (Array.isArray(parsed)) return repoLabel(parsed as string[]);\n\t\t\t} catch {\n\t\t\t\t/* fall through */\n\t\t\t}\n\t\t}\n\t\treturn repoLabel(repoName);\n\t}\n\treturn repoLabel(undefined);\n}\n\nexport function renderDeepWikiCall(args: DeepWikiParams, theme: Theme): Component {\n\tlet line = theme.fg(\"toolTitle\", theme.bold(`${DEEPWIKI_LABEL} `));\n\tline += theme.fg(\"muted\", args.action);\n\tline += ` ${theme.fg(\"accent\", repoLabelForCall(args.repoName))}`;\n\tif (args.action === \"question\" && args.question) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(singleLine(args.question), 64))}`;\n\t} else if (args.action === \"contents\" && args.page !== undefined) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(singleLine(String(args.page)), 40))}`;\n\t}\n\treturn new Text(line, 0, 0);\n}\n\nfunction markdownBlock(text: string): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new Spacer(1));\n\tcontainer.addChild(new Markdown(text, 1, 0, getMarkdownTheme()));\n\treturn container;\n}\n\nexport function renderDeepWikiResult(\n\tresult: AgentToolResult<DeepWikiDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tisError: boolean,\n\telapsedMs?: number,\n): Component {\n\tif (options.isPartial) {\n\t\tconst repo = typeof result.details?.repoName === \"string\" ? singleLine(result.details.repoName) : \"\";\n\t\tconst label = repo ? `Querying ${repo}...` : \"Querying...\";\n\t\t// Slow network calls earn a visible elapsed count; sub-2s stays quiet.\n\t\tconst suffix =\n\t\t\telapsedMs !== undefined && elapsedMs >= 2000 ? theme.fg(\"muted\", ` (${Math.round(elapsedMs / 1000)}s)`) : \"\";\n\t\treturn new Text(`${theme.fg(\"warning\", label)}${suffix}`, 0, 0);\n\t}\n\n\tconst text = firstText(result);\n\tconst errorMessage = typeof result.details?.errorMessage === \"string\" ? result.details.errorMessage : undefined;\n\tif (isError || errorMessage) {\n\t\tconst line = truncateText(errorMessage ?? firstContentLine(text), 200);\n\t\treturn new Text(theme.fg(\"error\", `failed · ${line}`), 0, 0);\n\t}\n\n\tif (!options.expanded) {\n\t\tconst summary = theme.fg(\"toolOutput\", summarizeCollapsed(text, result.details));\n\t\tconst hint = `${theme.fg(\"muted\", \" (\")}${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t\treturn new Text(`${summary}${hint}`, 0, 0);\n\t}\n\n\treturn markdownBlock(text);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/deepwiki/render.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI rendering for the deepwiki tool (collapse / expand).\n *\n * Pi's fallback renderer dumps full `content` text and ignores `expanded`; this\n * extension returns large wiki payloads, so a private renderer stays local here.\n */\nimport { type Component, Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { keyHint } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\n\nimport { extractContentPages, extractStructureSections } from \"./client.ts\";\nimport { DEEPWIKI_LABEL } from \"./constants.ts\";\nimport type { DeepWikiDetails } from \"./execute.ts\";\nimport type { DeepWikiParams } from \"./schema.ts\";\n\nfunction truncateText(text: string, maxLength: number, options?: { word?: boolean }): string {\n\tif (text.length <= maxLength) return text;\n\tif (options?.word) {\n\t\tconst prefix = text.slice(0, maxLength - 3);\n\t\tconst lastSpace = prefix.lastIndexOf(\" \");\n\t\tif (lastSpace >= 40) return `${prefix.slice(0, lastSpace)}...`;\n\t}\n\treturn `${text.slice(0, maxLength - 3)}...`;\n}\n\nfunction singleLine(text: unknown): string {\n\treturn typeof text === \"string\" ? text.replace(/\\s+/g, \" \").trim() : \"\";\n}\n\nfunction firstText(result: AgentToolResult<DeepWikiDetails>): string {\n\tfor (const part of result.content ?? []) {\n\t\tif (part.type === \"text\" && typeof part.text === \"string\") return part.text;\n\t}\n\treturn \"\";\n}\n\nfunction firstContentLine(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.find((line) => line.length > 0) ?? \"DeepWiki response\"\n\t);\n}\n\nfunction formatPageList(pages: string[], maxItems = 4): string {\n\tconst shown = pages.slice(0, maxItems).map(singleLine).join(\", \");\n\treturn pages.length > maxItems ? `${shown}...` : shown;\n}\n\nfunction pageTitlesFromResult(text: string, details: DeepWikiDetails | undefined): string[] {\n\tif (Array.isArray(details?.pageTitles)) {\n\t\tconst titles = details.pageTitles.filter((title) => typeof title === \"string\");\n\t\tif (titles.length) return titles;\n\t}\n\tconst fromContent = extractContentPages(text);\n\tif (fromContent.length) return fromContent;\n\treturn extractStructureSections(text);\n}\n\nfunction summarizeStructure(text: string, details: DeepWikiDetails | undefined): string {\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (pages.length === 0) return truncateText(firstContentLine(text), 120);\n\tconst count = details?.pageCount ?? pages.length;\n\treturn `${count} pages · ${formatPageList(pages)}`;\n}\n\nfunction summarizeContents(text: string, details: DeepWikiDetails | undefined): string {\n\tif (typeof details?.requestedPage === \"string\" && details.requestedPage.trim()) {\n\t\tconst position =\n\t\t\tdetails.pageIndex !== undefined && details.pageCount ? `${details.pageIndex}/${details.pageCount} · ` : \"\";\n\t\tconst cut = details.truncatedChars ? \" (truncated)\" : \"\";\n\t\treturn `Page ${position}${singleLine(details.requestedPage)}${cut}`;\n\t}\n\tconst pages = pageTitlesFromResult(text, details);\n\tif (details?.shownPages !== undefined) {\n\t\tconst total = details.pageCount ?? pages.length;\n\t\tconst pagesPart = total > 0 ? `${details.shownPages}/${total} pages` : \"partial\";\n\t\treturn `Wiki · ${pagesPart} shown (truncated)`;\n\t}\n\tif (pages.length === 0) return \"Wiki loaded\";\n\treturn `Wiki · ${details?.pageCount ?? pages.length} pages`;\n}\n\nfunction stripDeepWikiTail(text: string): string {\n\tconst tailIndex = text.search(/\\n(?:#+\\s*)?(?:Wiki pages you might want to explore|View this search)/i);\n\tif (tailIndex < 0) return text;\n\treturn text.slice(0, tailIndex);\n}\n\nfunction summarizeQuestion(text: string): string {\n\tconst cleaned = stripDeepWikiTail(text)\n\t\t.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, \"$1\")\n\t\t.replace(/[`*_]/g, \"\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (!cleaned) return \"Answer ready\";\n\tconst sentenceMatch = cleaned.match(/^.{40,}?[.!?](?=\\s|$)/);\n\treturn truncateText(sentenceMatch?.[0] ?? cleaned, 140, { word: true });\n}\n\nfunction summarizeCollapsed(text: string, details: DeepWikiDetails | undefined): string {\n\tlet summary: string;\n\tif (details?.action === \"structure\") summary = summarizeStructure(text, details);\n\telse if (details?.action === \"contents\") summary = summarizeContents(text, details);\n\telse if (details?.action === \"question\") summary = summarizeQuestion(text);\n\telse summary = truncateText(firstContentLine(text), 120);\n\treturn truncateText(singleLine(summary), 180, { word: true });\n}\n\nfunction repoLabel(repoName: DeepWikiParams[\"repoName\"] | undefined): string {\n\tif (Array.isArray(repoName)) {\n\t\tif (repoName.length === 0) return \"repo\";\n\t\tif (repoName.length === 1) return repoName[0];\n\t\treturn `${repoName.length} repos: ${repoName.slice(0, 2).join(\", \")}${repoName.length > 2 ? \"...\" : \"\"}`;\n\t}\n\treturn repoName ?? \"repo\";\n}\n\n/** renderCall sees raw tool args; normalize JSON-array strings for display. */\nfunction repoLabelForCall(repoName: unknown): string {\n\tif (Array.isArray(repoName)) return repoLabel(repoName as DeepWikiParams[\"repoName\"]);\n\tif (typeof repoName === \"string\") {\n\t\tconst trimmed = repoName.trim();\n\t\tif (trimmed.startsWith(\"[\")) {\n\t\t\ttry {\n\t\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\t\tif (Array.isArray(parsed)) return repoLabel(parsed as string[]);\n\t\t\t} catch {\n\t\t\t\t/* fall through */\n\t\t\t}\n\t\t}\n\t\treturn repoLabel(repoName);\n\t}\n\treturn repoLabel(undefined);\n}\n\nexport function renderDeepWikiCall(args: DeepWikiParams, theme: Theme): Component {\n\tlet line = theme.fg(\"toolTitle\", theme.bold(`${DEEPWIKI_LABEL} `));\n\tline += theme.fg(\"muted\", args.action);\n\tline += ` ${theme.fg(\"accent\", repoLabelForCall(args.repoName))}`;\n\tif (args.action === \"question\" && args.question) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(singleLine(args.question), 64))}`;\n\t} else if (args.action === \"contents\" && args.page !== undefined) {\n\t\tline += ` ${theme.fg(\"dim\", truncateText(singleLine(String(args.page)), 40))}`;\n\t}\n\treturn new Text(line, 0, 0);\n}\n\nfunction markdownBlock(text: string): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new Spacer(1));\n\tcontainer.addChild(new Markdown(text, 1, 0, getMarkdownTheme()));\n\treturn container;\n}\n\nexport function renderDeepWikiResult(\n\tresult: AgentToolResult<DeepWikiDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tisError: boolean,\n\telapsedMs?: number,\n): Component {\n\tif (options.isPartial) {\n\t\tconst repo = typeof result.details?.repoName === \"string\" ? singleLine(result.details.repoName) : \"\";\n\t\tconst label = repo ? `Querying ${repo}...` : \"Querying...\";\n\t\t// Slow network calls earn a visible elapsed count; sub-2s stays quiet.\n\t\tconst suffix =\n\t\t\telapsedMs !== undefined && elapsedMs >= 2000 ? theme.fg(\"muted\", ` (${Math.round(elapsedMs / 1000)}s)`) : \"\";\n\t\treturn new Text(`${theme.fg(\"warning\", label)}${suffix}`, 0, 0);\n\t}\n\n\tconst text = firstText(result);\n\tconst errorMessage = typeof result.details?.errorMessage === \"string\" ? result.details.errorMessage : undefined;\n\tif (isError || errorMessage) {\n\t\tconst line = truncateText(errorMessage ?? firstContentLine(text), 200);\n\t\treturn new Text(theme.fg(\"error\", `failed · ${line}`), 0, 0);\n\t}\n\n\tif (!options.expanded) {\n\t\tconst summary = theme.fg(\"toolOutput\", summarizeCollapsed(text, result.details));\n\t\tconst hint = `${theme.fg(\"muted\", \" (\")}${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t\treturn new Text(`${summary}${hint}`, 0, 0);\n\t}\n\n\treturn markdownBlock(text);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/extensions/question/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAIpE,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3C,KAAK,UAAU,GAAG;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/extensions/question/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAIpE,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3C,KAAK,UAAU,GAAG;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAiMF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAavF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAqBnH"}
|
|
@@ -152,12 +152,8 @@ function normalizeDetails(value) {
|
|
|
152
152
|
const message = oneLine(safeValue(raw, "message"), MAX_RENDERED_ERROR_CHARS);
|
|
153
153
|
return { answers, outcome, ...(message ? { message } : {}) };
|
|
154
154
|
}
|
|
155
|
-
function errorMessage(
|
|
156
|
-
|
|
157
|
-
return details.message;
|
|
158
|
-
const fallback = resultFallback(result).trim();
|
|
159
|
-
const match = /^Question tool error \([^)]*\):\s*([\s\S]+)$/u.exec(fallback);
|
|
160
|
-
return truncate(match?.[1]?.trim() || "The question tool could not continue", MAX_RENDERED_ERROR_CHARS);
|
|
155
|
+
function errorMessage(details) {
|
|
156
|
+
return details.message ?? "The question tool could not continue";
|
|
161
157
|
}
|
|
162
158
|
function answerLines(answers, theme) {
|
|
163
159
|
return answers.map((answer) => {
|
|
@@ -194,7 +190,7 @@ export function renderQuestionResult(result, options, theme, args) {
|
|
|
194
190
|
if (!details)
|
|
195
191
|
return renderFallbackResult(result, options.expanded, theme);
|
|
196
192
|
if (details.outcome === "error") {
|
|
197
|
-
return new Text(theme.fg("error", `Question error: ${errorMessage(
|
|
193
|
+
return new Text(theme.fg("error", `Question error: ${errorMessage(details)}`), 0, 0);
|
|
198
194
|
}
|
|
199
195
|
if (details.outcome === "cancelled") {
|
|
200
196
|
const title = theme.fg("warning", `Cancelled · ${answerProgress(details, args)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/question/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,wDAAwD,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA6B9C,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,qCAAqC,GAAG,GAAG,CAAC;AAClD,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,SAAS,UAAU,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1E,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,MAA+B,EAAE,GAAW;IAC9D,IAAI,CAAC;QACJ,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,YAAY,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrG,SAAS,CAAC,IAAI,CAAC;YACd,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC;YACjF,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,IAAI;SACxD,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM;YAAE,SAAS;QAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,+FAA+F,CAAC,IAAI,CACjH,IAAI,CAAC,IAAI,EAAE,CACX,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;SACrB,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,qCAAqC,CAAC,IAAI,0BAA0B,CAAC;IAC3G,OAAO;QACN,OAAO,EAAE,uBAAuB,UAAU,EAAE;QAC5C,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5C,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAkB,EAAE,QAAiB,EAAE,KAAY;IAChF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,IAAI,QAAQ;QAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,SAAS,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,aAAa,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACtG,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,KAAa;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,YAAY,KAAK,GAAG,CAAC,EAAE,CAAC;IAE1F,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAChC,CAAC,CAAC,WAAW;iBACV,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC;iBACjC,GAAG,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;gBAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO,EAAE,CAAC;gBACzC,OAAO,OAAO,CAAC,KAAK,EAAE,yBAAyB,CAAC,IAAI,UAAU,aAAa,GAAG,CAAC,EAAE,CAAC;YACnF,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;SAAM,CAAC;QACP,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,yBAAyB,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpC,CAAC,CAAC,QAAQ;aACP,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;aAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACvE,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC;IAEN,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACvC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,qBAAqB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACnH,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC,CAAC,CAAC,UAAU;aACT,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;aAC9B,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aACtD,MAAM,CAAC,CAAC,MAAM,EAAwB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC;QACjE,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB,EAAE,OAAsB;IAC/D,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,+CAA+C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,sCAAsC,EAAE,wBAAwB,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,WAAW,CAAC,OAAqB,EAAE,KAAY;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAChH,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAClG,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,OAAsB,EAAE,QAAiB,EAAE,KAAY;IAC5F,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,cAAc,CAAC,OAAsB,EAAE,IAAa;IAC5D,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,MAAM,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa,EAAE,KAAY,EAAE,QAAiB;IAChF,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACjF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5G,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/F,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAE,OAAsB,EAAE,KAAY,EAAE,IAAc;IAC5G,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO;QAAE,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE3E,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,sBAAsB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CACrB,SAAS,EACT,cAAc,OAAO,CAAC,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CACzF,CAAC;IACF,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\nimport { keyLabel } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { QUESTION_LIMITS } from \"./limits.ts\";\nimport type { AnswerNote, QuestionOutcome } from \"./types.ts\";\n\ntype RenderOptions = { expanded: boolean };\n\ntype ResultLike = {\n\tcontent?: unknown;\n\tdetails?: unknown;\n};\n\ninterface RenderQuestion {\n\theader: string;\n\tquestion: string;\n\tmultiSelect: boolean;\n}\n\n/** The parts of a stored answer the transcript shows. */\ninterface AnswerLine {\n\theader: string;\n\ttext: string;\n\tnotes: AnswerNote[];\n}\n\ninterface RenderDetails {\n\tanswers: AnswerLine[];\n\toutcome: QuestionOutcome;\n\tmessage?: string;\n}\n\nconst MAX_RENDERED_QUESTIONS = 4;\nconst MAX_RENDERED_ANSWERS = 4;\nconst MAX_RENDERED_SELECTIONS = 5;\nconst MAX_RENDERED_ANSWER_CHARS = 400;\nconst MAX_RENDERED_NOTE_CHARS = 400;\nconst MAX_RENDERED_ERROR_CHARS = 400;\nconst MAX_RENDERED_VALIDATION_SUMMARY_CHARS = 240;\nconst MAX_RENDERED_FALLBACK_CHARS = 1_000;\n\nfunction safeRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction safeValue(record: Record<string, unknown>, key: string): unknown {\n\ttry {\n\t\treturn record[key];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction truncate(text: string, limit: number): string {\n\treturn text.length > limit ? `${text.slice(0, Math.max(0, limit - 1))}…` : text;\n}\n\nfunction oneLine(value: unknown, limit: number): string {\n\treturn typeof value === \"string\" ? truncate(value.replace(/\\s+/gu, \" \").trim(), limit) : \"\";\n}\n\nfunction questionsFromArgs(args: unknown): RenderQuestion[] {\n\tconst record = safeRecord(args);\n\tif (!record) return [];\n\tconst rawQuestions = safeValue(record, \"questions\");\n\tif (!Array.isArray(rawQuestions)) return [];\n\tconst questions: RenderQuestion[] = [];\n\tfor (const rawQuestion of rawQuestions.slice(0, MAX_RENDERED_QUESTIONS)) {\n\t\tconst question = safeRecord(rawQuestion);\n\t\tif (!question) continue;\n\t\tconst rawHeader = safeValue(question, \"header\");\n\t\tif (typeof rawHeader !== \"string\") continue;\n\t\tconst header = oneLine(rawHeader, QUESTION_LIMITS.headerChars) || `Decision ${questions.length + 1}`;\n\t\tquestions.push({\n\t\t\theader,\n\t\t\tquestion: oneLine(safeValue(question, \"question\"), QUESTION_LIMITS.questionChars),\n\t\t\tmultiSelect: safeValue(question, \"multiSelect\") === true,\n\t\t});\n\t}\n\treturn questions;\n}\n\nfunction resultFallback(result: ResultLike): string {\n\tif (!Array.isArray(result.content)) return \"\";\n\tconst blocks: string[] = [];\n\tfor (const rawBlock of result.content.slice(0, 8)) {\n\t\tconst block = safeRecord(rawBlock);\n\t\tif (!block || safeValue(block, \"type\") !== \"text\") continue;\n\t\tconst text = safeValue(block, \"text\");\n\t\tif (typeof text === \"string\") blocks.push(text);\n\t}\n\treturn truncate(blocks.join(\"\\n\"), MAX_RENDERED_FALLBACK_CHARS);\n}\n\nfunction validationSummary(text: string): { summary: string; hiddenErrors: number } | undefined {\n\tconst match = /^Validation failed for tool\\s+\"question\":\\s*([\\s\\S]*?)(?:\\r?\\n\\s*\\r?\\nReceived arguments:|$)/u.exec(\n\t\ttext.trim(),\n\t);\n\tif (!match) return undefined;\n\tconst errors = match[1]\n\t\t.split(/\\r?\\n/u)\n\t\t.map((line) => line.trim().replace(/^-\\s*/u, \"\"))\n\t\t.filter(Boolean);\n\tconst firstError = oneLine(errors[0], MAX_RENDERED_VALIDATION_SUMMARY_CHARS) || \"schema validation failed\";\n\treturn {\n\t\tsummary: `Invalid arguments · ${firstError}`,\n\t\thiddenErrors: Math.max(0, errors.length - 1),\n\t};\n}\n\nfunction renderFallbackResult(result: ResultLike, expanded: boolean, theme: Theme): Text {\n\tconst fallback = resultFallback(result);\n\tif (!fallback) return new Text(\"Question result unavailable\", 0, 0);\n\tconst validation = validationSummary(fallback);\n\tif (!validation || expanded) return new Text(fallback, 0, 0);\n\n\tconst moreErrors = validation.hiddenErrors > 0 ? ` · +${validation.hiddenErrors} more` : \"\";\n\tconst expandKey = keyLabel(\"app.tools.expand\");\n\tconst hint = theme.fg(\"muted\", expandKey ? ` (${expandKey} to expand)` : \" (more details available)\");\n\treturn new Text(`${theme.fg(\"error\", validation.summary)}${theme.fg(\"muted\", moreErrors)}${hint}`, 0, 0);\n}\n\nfunction normalizeAnswer(value: unknown, index: number): AnswerLine | undefined {\n\tconst raw = safeRecord(value);\n\tif (!raw) return undefined;\n\tconst rawHeader = safeValue(raw, \"header\");\n\tif (typeof rawHeader !== \"string\") return undefined;\n\tconst header = oneLine(rawHeader, QUESTION_LIMITS.headerChars) || `Decision ${index + 1}`;\n\n\tlet text: string;\n\tif (safeValue(raw, \"kind\") === \"multi\") {\n\t\tconst rawSelected = safeValue(raw, \"selected\");\n\t\ttext = Array.isArray(rawSelected)\n\t\t\t? rawSelected\n\t\t\t\t\t.slice(0, MAX_RENDERED_SELECTIONS)\n\t\t\t\t\t.map((entry, selectedIndex) => {\n\t\t\t\t\t\tif (typeof entry !== \"string\") return \"\";\n\t\t\t\t\t\treturn oneLine(entry, MAX_RENDERED_ANSWER_CHARS) || `Option ${selectedIndex + 1}`;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\", \")\n\t\t\t: \"\";\n\t} else {\n\t\ttext = oneLine(safeValue(raw, \"answer\"), MAX_RENDERED_ANSWER_CHARS);\n\t}\n\n\tconst rawNotes = safeValue(raw, \"notes\");\n\tconst notes = Array.isArray(rawNotes)\n\t\t? rawNotes\n\t\t\t\t.slice(0, MAX_RENDERED_ANSWERS)\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst note = safeRecord(entry);\n\t\t\t\t\tif (!note) return undefined;\n\t\t\t\t\tconst option = oneLine(safeValue(note, \"option\"), QUESTION_LIMITS.optionLabelChars);\n\t\t\t\t\tconst text = oneLine(safeValue(note, \"text\"), MAX_RENDERED_NOTE_CHARS);\n\t\t\t\t\treturn option && text ? { option, text } : undefined;\n\t\t\t\t})\n\t\t\t\t.filter((note): note is AnswerNote => note !== undefined)\n\t\t: [];\n\n\treturn { header, text: text || \"(no input)\", notes };\n}\n\nfunction normalizeDetails(value: unknown): RenderDetails | undefined {\n\tconst raw = safeRecord(value);\n\tif (!raw) return undefined;\n\tconst outcome = safeValue(raw, \"outcome\");\n\tif (outcome !== \"answered\" && outcome !== \"cancelled\" && outcome !== \"needs_clarification\" && outcome !== \"error\") {\n\t\treturn undefined;\n\t}\n\tconst rawAnswers = safeValue(raw, \"answers\");\n\tconst answers = Array.isArray(rawAnswers)\n\t\t? rawAnswers\n\t\t\t\t.slice(0, MAX_RENDERED_ANSWERS)\n\t\t\t\t.map((answer, index) => normalizeAnswer(answer, index))\n\t\t\t\t.filter((answer): answer is AnswerLine => answer !== undefined)\n\t\t: [];\n\tconst message = oneLine(safeValue(raw, \"message\"), MAX_RENDERED_ERROR_CHARS);\n\treturn { answers, outcome, ...(message ? { message } : {}) };\n}\n\nfunction errorMessage(result: ResultLike, details: RenderDetails): string {\n\tif (details.message) return details.message;\n\tconst fallback = resultFallback(result).trim();\n\tconst match = /^Question tool error \\([^)]*\\):\\s*([\\s\\S]+)$/u.exec(fallback);\n\treturn truncate(match?.[1]?.trim() || \"The question tool could not continue\", MAX_RENDERED_ERROR_CHARS);\n}\n\nfunction answerLines(answers: AnswerLine[], theme: Theme): string[] {\n\treturn answers.map((answer) => {\n\t\tconst notes = answer.notes.map((note) => `\\n${theme.fg(\"muted\", ` Note for ${note.option}: ${note.text}`)}`);\n\t\treturn `${theme.fg(\"accent\", answer.header)}: ${theme.fg(\"text\", answer.text)}${notes.join(\"\")}`;\n\t});\n}\n\nfunction renderOutcome(title: string, details: RenderDetails, expanded: boolean, theme: Theme): Text {\n\tif (!expanded || details.answers.length === 0) return new Text(title, 0, 0);\n\treturn new Text(`${title}\\n${answerLines(details.answers, theme).join(\"\\n\")}`, 0, 0);\n}\n\nfunction answerProgress(details: RenderDetails, args: unknown): string {\n\tconst total = questionsFromArgs(args).length;\n\treturn total > 0 ? `answered ${details.answers.length} of ${total}` : `answered ${details.answers.length}`;\n}\n\nexport function renderQuestionCall(args: unknown, theme: Theme, expanded: boolean): Text {\n\tconst questions = questionsFromArgs(args);\n\tconst headers = questions.map((question) => question.header).join(\", \");\n\tconst count = `${questions.length} decision${questions.length === 1 ? \"\" : \"s\"}`;\n\tconst summary = questions.length === 0 ? \"asking for a decision\" : headers ? `${count}: ${headers}` : count;\n\tconst title = `${theme.fg(\"toolTitle\", theme.bold(\"question\"))} ${theme.fg(\"muted\", summary)}`;\n\tif (!expanded || questions.length === 0) return new Text(title, 0, 0);\n\tconst detailLines = questions.map((question) => {\n\t\tconst multi = question.multiSelect ? \" (multi-select)\" : \"\";\n\t\tconst body = question.question ? `: ${question.question}` : \"\";\n\t\treturn theme.fg(\"dim\", `${question.header}${multi}${body}`);\n\t});\n\treturn new Text(`${title}\\n${detailLines.join(\"\\n\")}`, 0, 0);\n}\n\nexport function renderQuestionResult(result: ResultLike, options: RenderOptions, theme: Theme, args?: unknown): Text {\n\tconst details = normalizeDetails(result.details);\n\tif (!details) return renderFallbackResult(result, options.expanded, theme);\n\n\tif (details.outcome === \"error\") {\n\t\treturn new Text(theme.fg(\"error\", `Question error: ${errorMessage(result, details)}`), 0, 0);\n\t}\n\tif (details.outcome === \"cancelled\") {\n\t\tconst title = theme.fg(\"warning\", `Cancelled · ${answerProgress(details, args)}`);\n\t\treturn renderOutcome(title, details, options.expanded, theme);\n\t}\n\tif (details.outcome === \"needs_clarification\") {\n\t\tconst title = theme.fg(\"warning\", `Wants to discuss · ${answerProgress(details, args)}`);\n\t\treturn renderOutcome(title, details, options.expanded, theme);\n\t}\n\n\tconst title = theme.fg(\n\t\t\"success\",\n\t\t`✓ Answered ${details.answers.length} decision${details.answers.length === 1 ? \"\" : \"s\"}`,\n\t);\n\treturn renderOutcome(title, details, options.expanded, theme);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/question/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\nimport { keyLabel } from \"../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { QUESTION_LIMITS } from \"./limits.ts\";\nimport type { AnswerNote, QuestionOutcome } from \"./types.ts\";\n\ntype RenderOptions = { expanded: boolean };\n\ntype ResultLike = {\n\tcontent?: unknown;\n\tdetails?: unknown;\n};\n\ninterface RenderQuestion {\n\theader: string;\n\tquestion: string;\n\tmultiSelect: boolean;\n}\n\n/** The parts of a stored answer the transcript shows. */\ninterface AnswerLine {\n\theader: string;\n\ttext: string;\n\tnotes: AnswerNote[];\n}\n\ninterface RenderDetails {\n\tanswers: AnswerLine[];\n\toutcome: QuestionOutcome;\n\tmessage?: string;\n}\n\nconst MAX_RENDERED_QUESTIONS = 4;\nconst MAX_RENDERED_ANSWERS = 4;\nconst MAX_RENDERED_SELECTIONS = 5;\nconst MAX_RENDERED_ANSWER_CHARS = 400;\nconst MAX_RENDERED_NOTE_CHARS = 400;\nconst MAX_RENDERED_ERROR_CHARS = 400;\nconst MAX_RENDERED_VALIDATION_SUMMARY_CHARS = 240;\nconst MAX_RENDERED_FALLBACK_CHARS = 1_000;\n\nfunction safeRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction safeValue(record: Record<string, unknown>, key: string): unknown {\n\ttry {\n\t\treturn record[key];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction truncate(text: string, limit: number): string {\n\treturn text.length > limit ? `${text.slice(0, Math.max(0, limit - 1))}…` : text;\n}\n\nfunction oneLine(value: unknown, limit: number): string {\n\treturn typeof value === \"string\" ? truncate(value.replace(/\\s+/gu, \" \").trim(), limit) : \"\";\n}\n\nfunction questionsFromArgs(args: unknown): RenderQuestion[] {\n\tconst record = safeRecord(args);\n\tif (!record) return [];\n\tconst rawQuestions = safeValue(record, \"questions\");\n\tif (!Array.isArray(rawQuestions)) return [];\n\tconst questions: RenderQuestion[] = [];\n\tfor (const rawQuestion of rawQuestions.slice(0, MAX_RENDERED_QUESTIONS)) {\n\t\tconst question = safeRecord(rawQuestion);\n\t\tif (!question) continue;\n\t\tconst rawHeader = safeValue(question, \"header\");\n\t\tif (typeof rawHeader !== \"string\") continue;\n\t\tconst header = oneLine(rawHeader, QUESTION_LIMITS.headerChars) || `Decision ${questions.length + 1}`;\n\t\tquestions.push({\n\t\t\theader,\n\t\t\tquestion: oneLine(safeValue(question, \"question\"), QUESTION_LIMITS.questionChars),\n\t\t\tmultiSelect: safeValue(question, \"multiSelect\") === true,\n\t\t});\n\t}\n\treturn questions;\n}\n\nfunction resultFallback(result: ResultLike): string {\n\tif (!Array.isArray(result.content)) return \"\";\n\tconst blocks: string[] = [];\n\tfor (const rawBlock of result.content.slice(0, 8)) {\n\t\tconst block = safeRecord(rawBlock);\n\t\tif (!block || safeValue(block, \"type\") !== \"text\") continue;\n\t\tconst text = safeValue(block, \"text\");\n\t\tif (typeof text === \"string\") blocks.push(text);\n\t}\n\treturn truncate(blocks.join(\"\\n\"), MAX_RENDERED_FALLBACK_CHARS);\n}\n\nfunction validationSummary(text: string): { summary: string; hiddenErrors: number } | undefined {\n\tconst match = /^Validation failed for tool\\s+\"question\":\\s*([\\s\\S]*?)(?:\\r?\\n\\s*\\r?\\nReceived arguments:|$)/u.exec(\n\t\ttext.trim(),\n\t);\n\tif (!match) return undefined;\n\tconst errors = match[1]\n\t\t.split(/\\r?\\n/u)\n\t\t.map((line) => line.trim().replace(/^-\\s*/u, \"\"))\n\t\t.filter(Boolean);\n\tconst firstError = oneLine(errors[0], MAX_RENDERED_VALIDATION_SUMMARY_CHARS) || \"schema validation failed\";\n\treturn {\n\t\tsummary: `Invalid arguments · ${firstError}`,\n\t\thiddenErrors: Math.max(0, errors.length - 1),\n\t};\n}\n\nfunction renderFallbackResult(result: ResultLike, expanded: boolean, theme: Theme): Text {\n\tconst fallback = resultFallback(result);\n\tif (!fallback) return new Text(\"Question result unavailable\", 0, 0);\n\tconst validation = validationSummary(fallback);\n\tif (!validation || expanded) return new Text(fallback, 0, 0);\n\n\tconst moreErrors = validation.hiddenErrors > 0 ? ` · +${validation.hiddenErrors} more` : \"\";\n\tconst expandKey = keyLabel(\"app.tools.expand\");\n\tconst hint = theme.fg(\"muted\", expandKey ? ` (${expandKey} to expand)` : \" (more details available)\");\n\treturn new Text(`${theme.fg(\"error\", validation.summary)}${theme.fg(\"muted\", moreErrors)}${hint}`, 0, 0);\n}\n\nfunction normalizeAnswer(value: unknown, index: number): AnswerLine | undefined {\n\tconst raw = safeRecord(value);\n\tif (!raw) return undefined;\n\tconst rawHeader = safeValue(raw, \"header\");\n\tif (typeof rawHeader !== \"string\") return undefined;\n\tconst header = oneLine(rawHeader, QUESTION_LIMITS.headerChars) || `Decision ${index + 1}`;\n\n\tlet text: string;\n\tif (safeValue(raw, \"kind\") === \"multi\") {\n\t\tconst rawSelected = safeValue(raw, \"selected\");\n\t\ttext = Array.isArray(rawSelected)\n\t\t\t? rawSelected\n\t\t\t\t\t.slice(0, MAX_RENDERED_SELECTIONS)\n\t\t\t\t\t.map((entry, selectedIndex) => {\n\t\t\t\t\t\tif (typeof entry !== \"string\") return \"\";\n\t\t\t\t\t\treturn oneLine(entry, MAX_RENDERED_ANSWER_CHARS) || `Option ${selectedIndex + 1}`;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\", \")\n\t\t\t: \"\";\n\t} else {\n\t\ttext = oneLine(safeValue(raw, \"answer\"), MAX_RENDERED_ANSWER_CHARS);\n\t}\n\n\tconst rawNotes = safeValue(raw, \"notes\");\n\tconst notes = Array.isArray(rawNotes)\n\t\t? rawNotes\n\t\t\t\t.slice(0, MAX_RENDERED_ANSWERS)\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst note = safeRecord(entry);\n\t\t\t\t\tif (!note) return undefined;\n\t\t\t\t\tconst option = oneLine(safeValue(note, \"option\"), QUESTION_LIMITS.optionLabelChars);\n\t\t\t\t\tconst text = oneLine(safeValue(note, \"text\"), MAX_RENDERED_NOTE_CHARS);\n\t\t\t\t\treturn option && text ? { option, text } : undefined;\n\t\t\t\t})\n\t\t\t\t.filter((note): note is AnswerNote => note !== undefined)\n\t\t: [];\n\n\treturn { header, text: text || \"(no input)\", notes };\n}\n\nfunction normalizeDetails(value: unknown): RenderDetails | undefined {\n\tconst raw = safeRecord(value);\n\tif (!raw) return undefined;\n\tconst outcome = safeValue(raw, \"outcome\");\n\tif (outcome !== \"answered\" && outcome !== \"cancelled\" && outcome !== \"needs_clarification\" && outcome !== \"error\") {\n\t\treturn undefined;\n\t}\n\tconst rawAnswers = safeValue(raw, \"answers\");\n\tconst answers = Array.isArray(rawAnswers)\n\t\t? rawAnswers\n\t\t\t\t.slice(0, MAX_RENDERED_ANSWERS)\n\t\t\t\t.map((answer, index) => normalizeAnswer(answer, index))\n\t\t\t\t.filter((answer): answer is AnswerLine => answer !== undefined)\n\t\t: [];\n\tconst message = oneLine(safeValue(raw, \"message\"), MAX_RENDERED_ERROR_CHARS);\n\treturn { answers, outcome, ...(message ? { message } : {}) };\n}\n\nfunction errorMessage(details: RenderDetails): string {\n\treturn details.message ?? \"The question tool could not continue\";\n}\n\nfunction answerLines(answers: AnswerLine[], theme: Theme): string[] {\n\treturn answers.map((answer) => {\n\t\tconst notes = answer.notes.map((note) => `\\n${theme.fg(\"muted\", ` Note for ${note.option}: ${note.text}`)}`);\n\t\treturn `${theme.fg(\"accent\", answer.header)}: ${theme.fg(\"text\", answer.text)}${notes.join(\"\")}`;\n\t});\n}\n\nfunction renderOutcome(title: string, details: RenderDetails, expanded: boolean, theme: Theme): Text {\n\tif (!expanded || details.answers.length === 0) return new Text(title, 0, 0);\n\treturn new Text(`${title}\\n${answerLines(details.answers, theme).join(\"\\n\")}`, 0, 0);\n}\n\nfunction answerProgress(details: RenderDetails, args: unknown): string {\n\tconst total = questionsFromArgs(args).length;\n\treturn total > 0 ? `answered ${details.answers.length} of ${total}` : `answered ${details.answers.length}`;\n}\n\nexport function renderQuestionCall(args: unknown, theme: Theme, expanded: boolean): Text {\n\tconst questions = questionsFromArgs(args);\n\tconst headers = questions.map((question) => question.header).join(\", \");\n\tconst count = `${questions.length} decision${questions.length === 1 ? \"\" : \"s\"}`;\n\tconst summary = questions.length === 0 ? \"asking for a decision\" : headers ? `${count}: ${headers}` : count;\n\tconst title = `${theme.fg(\"toolTitle\", theme.bold(\"question\"))} ${theme.fg(\"muted\", summary)}`;\n\tif (!expanded || questions.length === 0) return new Text(title, 0, 0);\n\tconst detailLines = questions.map((question) => {\n\t\tconst multi = question.multiSelect ? \" (multi-select)\" : \"\";\n\t\tconst body = question.question ? `: ${question.question}` : \"\";\n\t\treturn theme.fg(\"dim\", `${question.header}${multi}${body}`);\n\t});\n\treturn new Text(`${title}\\n${detailLines.join(\"\\n\")}`, 0, 0);\n}\n\nexport function renderQuestionResult(result: ResultLike, options: RenderOptions, theme: Theme, args?: unknown): Text {\n\tconst details = normalizeDetails(result.details);\n\tif (!details) return renderFallbackResult(result, options.expanded, theme);\n\n\tif (details.outcome === \"error\") {\n\t\treturn new Text(theme.fg(\"error\", `Question error: ${errorMessage(details)}`), 0, 0);\n\t}\n\tif (details.outcome === \"cancelled\") {\n\t\tconst title = theme.fg(\"warning\", `Cancelled · ${answerProgress(details, args)}`);\n\t\treturn renderOutcome(title, details, options.expanded, theme);\n\t}\n\tif (details.outcome === \"needs_clarification\") {\n\t\tconst title = theme.fg(\"warning\", `Wants to discuss · ${answerProgress(details, args)}`);\n\t\treturn renderOutcome(title, details, options.expanded, theme);\n\t}\n\n\tconst title = theme.fg(\n\t\t\"success\",\n\t\t`✓ Answered ${details.answers.length} decision${details.answers.length === 1 ? \"\" : \"s\"}`,\n\t);\n\treturn renderOutcome(title, details, options.expanded, theme);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"AAaA,OAAO,EAEN,KAAK,YAAY,EAKjB,MAAM,8BAA8B,CAAC;AActC,OAAO,EAYN,KAAK,QAAQ,EASb,MAAM,wBAAwB,CAAC;AAgBhC,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,qCAAqC,CAAC;AAC/G,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAuC1F,OAAO,EAEN,cAAc,EAGd,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAmBpF,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAwE1F,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ import { findExtensionStackMatches, recordCrash, takeUnnotifiedCrash } from "../
|
|
|
22
22
|
import { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from "../../core/defaults.js";
|
|
23
23
|
import { FooterDataProvider } from "../../core/footer-data-provider.js";
|
|
24
24
|
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
25
|
-
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
25
|
+
import { KEYBINDINGS, KeybindingsManager } from "../../core/keybindings.js";
|
|
26
26
|
import { createCompactionSummaryMessage, createCustomMessage } from "../../core/messages.js";
|
|
27
27
|
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScopeFromModels, } from "../../core/model-resolver.js";
|
|
28
28
|
import { CredentialSynchronizationError } from "../../core/model-runtime.js";
|
|
@@ -131,6 +131,22 @@ function isCompactionCostNotice(item) {
|
|
|
131
131
|
function isUsageSessionEntry(item) {
|
|
132
132
|
return "type" in item && item.type === "usage";
|
|
133
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Task rows for `/hotkeys`. Task keybindings act outside the editor, so they never showed up in
|
|
136
|
+
* the editor-driven sections; labels come from KEYBINDINGS so the table cannot drift from the
|
|
137
|
+
* binding registry.
|
|
138
|
+
*/
|
|
139
|
+
function hotkeysTaskSection(display) {
|
|
140
|
+
const detach = KEYBINDINGS["app.tasks.detach"];
|
|
141
|
+
const detachSelected = KEYBINDINGS["app.tasks.detachSelected"];
|
|
142
|
+
return `
|
|
143
|
+
**Tasks**
|
|
144
|
+
| Key | Action |
|
|
145
|
+
|-----|--------|
|
|
146
|
+
| \`${display("app.tasks.detach")}\` | ${detach.description} |
|
|
147
|
+
| \`${display("app.tasks.detachSelected")}\` | ${detachSelected.description} (while /tasks is open) |
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
134
150
|
const DEAD_TERMINAL_ERROR_CODES = new Set(["EIO", "EPIPE", "ENOTCONN"]);
|
|
135
151
|
function isDeadTerminalError(error) {
|
|
136
152
|
if (!error || typeof error !== "object" || !("code" in error)) {
|
|
@@ -5710,6 +5726,8 @@ export class InteractiveMode {
|
|
|
5710
5726
|
| \`!\` | Run bash command |
|
|
5711
5727
|
| \`!!\` | Run bash command (excluded from context) |
|
|
5712
5728
|
`;
|
|
5729
|
+
// Task keybindings act outside the editor contexts this table was built from.
|
|
5730
|
+
hotkeys += hotkeysTaskSection((action) => this.getAppKeyDisplay(action));
|
|
5713
5731
|
// Add extension-registered shortcuts
|
|
5714
5732
|
const extensionRunner = this.session.extensionRunner;
|
|
5715
5733
|
const shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());
|