@code-yeongyu/senpi 2026.7.20-2 → 2026.7.20

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.
Files changed (160) hide show
  1. package/CHANGELOG.md +0 -18
  2. package/dist/core/agent-session.d.ts +0 -32
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +68 -368
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/compaction/compaction.d.ts +2 -2
  7. package/dist/core/compaction/compaction.d.ts.map +1 -1
  8. package/dist/core/compaction/compaction.js +11 -39
  9. package/dist/core/compaction/compaction.js.map +1 -1
  10. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/index.js +8 -24
  12. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  13. package/dist/core/extensions/builtin/goal/command-registration.d.ts +2 -2
  14. package/dist/core/extensions/builtin/goal/command-registration.d.ts.map +1 -1
  15. package/dist/core/extensions/builtin/goal/command-registration.js +4 -3
  16. package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
  17. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  18. package/dist/core/extensions/builtin/goal/index.js +27 -11
  19. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  20. package/dist/core/extensions/builtin/goal/tool-registration.d.ts +2 -2
  21. package/dist/core/extensions/builtin/goal/tool-registration.d.ts.map +1 -1
  22. package/dist/core/extensions/builtin/goal/tool-registration.js +3 -2
  23. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  24. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  25. package/dist/core/extensions/builtin/index.js +0 -2
  26. package/dist/core/extensions/builtin/index.js.map +1 -1
  27. package/dist/core/extensions/builtin/nested-agents-md/index.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/nested-agents-md/index.js +1 -4
  29. package/dist/core/extensions/builtin/nested-agents-md/index.js.map +1 -1
  30. package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -1
  31. package/dist/core/extensions/builtin/rules/index.js +1 -4
  32. package/dist/core/extensions/builtin/rules/index.js.map +1 -1
  33. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
  34. package/dist/core/extensions/builtin/websearch/websearch/renderers.js +4 -13
  35. package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
  36. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +2 -3
  37. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/websearch/websearch/search.js +1 -2
  39. package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
  40. package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/websearch/websearch/tool.js +1 -17
  42. package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
  43. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +0 -2
  44. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
  45. package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
  46. package/dist/core/extensions/runner.d.ts +0 -1
  47. package/dist/core/extensions/runner.d.ts.map +1 -1
  48. package/dist/core/extensions/runner.js +0 -31
  49. package/dist/core/extensions/runner.js.map +1 -1
  50. package/dist/core/extensions/types.d.ts +10 -67
  51. package/dist/core/extensions/types.d.ts.map +1 -1
  52. package/dist/core/extensions/types.js.map +1 -1
  53. package/dist/core/sdk.d.ts.map +1 -1
  54. package/dist/core/sdk.js +0 -1
  55. package/dist/core/sdk.js.map +1 -1
  56. package/dist/core/session-manager.d.ts +1 -6
  57. package/dist/core/session-manager.d.ts.map +1 -1
  58. package/dist/core/session-manager.js +3 -19
  59. package/dist/core/session-manager.js.map +1 -1
  60. package/dist/core/settings-manager.d.ts +0 -15
  61. package/dist/core/settings-manager.d.ts.map +1 -1
  62. package/dist/core/settings-manager.js +1 -80
  63. package/dist/core/settings-manager.js.map +1 -1
  64. package/dist/modes/interactive/components/footer.d.ts +1 -2
  65. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  66. package/dist/modes/interactive/components/footer.js +2 -21
  67. package/dist/modes/interactive/components/footer.js.map +1 -1
  68. package/dist/modes/interactive/interactive-mode.d.ts +0 -4
  69. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  70. package/dist/modes/interactive/interactive-mode.js +3 -78
  71. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  72. package/docs/extensions.md +0 -28
  73. package/docs/settings.md +0 -35
  74. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +0 -12
  75. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  76. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  77. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -76
  78. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  79. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  80. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +1 -26
  81. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  82. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  83. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +2 -24
  84. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  85. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +0 -5
  86. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  87. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  88. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  89. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  90. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +25 -68
  91. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  92. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
  93. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +52 -62
  94. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  95. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +0 -1
  96. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/index.js +0 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +4 -0
  100. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
  102. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  103. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  104. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts +0 -1
  105. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  106. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +0 -1
  107. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  108. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +4 -0
  109. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
  110. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
  111. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +0 -15
  112. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  113. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  114. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  115. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +1 -5
  116. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  117. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  118. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  119. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  120. package/package.json +6 -6
  121. package/dist/core/extensions/builtin/goal/turn-usage.d.ts +0 -20
  122. package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +0 -1
  123. package/dist/core/extensions/builtin/goal/turn-usage.js +0 -61
  124. package/dist/core/extensions/builtin/goal/turn-usage.js.map +0 -1
  125. package/dist/core/extensions/builtin/model-fallback/index.d.ts +0 -4
  126. package/dist/core/extensions/builtin/model-fallback/index.d.ts.map +0 -1
  127. package/dist/core/extensions/builtin/model-fallback/index.js +0 -55
  128. package/dist/core/extensions/builtin/model-fallback/index.js.map +0 -1
  129. package/dist/core/extensions/builtin/model-fallback/settings.d.ts +0 -6
  130. package/dist/core/extensions/builtin/model-fallback/settings.d.ts.map +0 -1
  131. package/dist/core/extensions/builtin/model-fallback/settings.js +0 -11
  132. package/dist/core/extensions/builtin/model-fallback/settings.js.map +0 -1
  133. package/dist/core/extensions/builtin/model-fallback/ui.d.ts +0 -12
  134. package/dist/core/extensions/builtin/model-fallback/ui.d.ts.map +0 -1
  135. package/dist/core/extensions/builtin/model-fallback/ui.js +0 -72
  136. package/dist/core/extensions/builtin/model-fallback/ui.js.map +0 -1
  137. package/dist/core/retry-fallback/chains.d.ts +0 -29
  138. package/dist/core/retry-fallback/chains.d.ts.map +0 -1
  139. package/dist/core/retry-fallback/chains.js +0 -109
  140. package/dist/core/retry-fallback/chains.js.map +0 -1
  141. package/dist/core/retry-fallback/controller.d.ts +0 -77
  142. package/dist/core/retry-fallback/controller.d.ts.map +0 -1
  143. package/dist/core/retry-fallback/controller.js +0 -157
  144. package/dist/core/retry-fallback/controller.js.map +0 -1
  145. package/dist/core/retry-fallback/cooldown.d.ts +0 -21
  146. package/dist/core/retry-fallback/cooldown.d.ts.map +0 -1
  147. package/dist/core/retry-fallback/cooldown.js +0 -49
  148. package/dist/core/retry-fallback/cooldown.js.map +0 -1
  149. package/dist/core/retry-fallback/log.d.ts +0 -10
  150. package/dist/core/retry-fallback/log.d.ts.map +0 -1
  151. package/dist/core/retry-fallback/log.js +0 -128
  152. package/dist/core/retry-fallback/log.js.map +0 -1
  153. package/dist/core/retry-fallback/validate.d.ts +0 -8
  154. package/dist/core/retry-fallback/validate.d.ts.map +0 -1
  155. package/dist/core/retry-fallback/validate.js +0 -63
  156. package/dist/core/retry-fallback/validate.js.map +0 -1
  157. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts +0 -4
  158. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.d.ts.map +0 -1
  159. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js +0 -6
  160. package/node_modules/@earendil-works/pi-ai/dist/utils/stop-details.js.map +0 -1
@@ -13,29 +13,10 @@ function sanitizeStatusText(text) {
13
13
  .trim();
14
14
  }
15
15
  /**
16
- * Format token counts for footer display using oh-my-pi-style K/M/B abbreviation.
17
- * Examples: "999", "6.8K", "546K", "1M", "1.5M", "2B".
16
+ * Format token counts for footer display.
18
17
  */
19
18
  export function formatTokens(count) {
20
- const n = Math.round(count);
21
- if (n < 1_000)
22
- return n.toString();
23
- if (n < 10_000)
24
- return `${trim1(n / 1_000)}K`;
25
- if (n < 1_000_000)
26
- return `${Math.round(n / 1_000)}K`;
27
- if (n < 10_000_000)
28
- return `${trim1(n / 1_000_000)}M`;
29
- if (n < 1_000_000_000)
30
- return `${Math.round(n / 1_000_000)}M`;
31
- if (n < 10_000_000_000)
32
- return `${trim1(n / 1_000_000_000)}B`;
33
- return `${Math.round(n / 1_000_000_000)}B`;
34
- }
35
- /** Format with up to 1 decimal place, dropping trailing `.0`. */
36
- function trim1(n) {
37
- const s = n.toFixed(1);
38
- return s.endsWith(".0") ? s.slice(0, -2) : s;
19
+ return Math.round(count).toLocaleString("en-US");
39
20
  }
40
21
  export function formatCwdForFooter(cwd, home) {
41
22
  if (!home)
@@ -1 +1 @@
1
- {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { type Component, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.ts\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport { theme } from \"../theme/theme.ts\";\n\n/**\n * Sanitize text for display in a single-line status.\n * Removes newlines, tabs, carriage returns, and other control characters.\n */\nfunction sanitizeStatusText(text: string): string {\n\t// Replace newlines, tabs, carriage returns with space, then collapse multiple spaces\n\treturn text\n\t\t.replace(/[\\r\\n\\t]/g, \" \")\n\t\t.replace(/ +/g, \" \")\n\t\t.trim();\n}\n\n/**\n * Format token counts for footer display using oh-my-pi-style K/M/B abbreviation.\n * Examples: \"999\", \"6.8K\", \"546K\", \"1M\", \"1.5M\", \"2B\".\n */\nexport function formatTokens(count: number): string {\n\tconst n = Math.round(count);\n\tif (n < 1_000) return n.toString();\n\tif (n < 10_000) return `${trim1(n / 1_000)}K`;\n\tif (n < 1_000_000) return `${Math.round(n / 1_000)}K`;\n\tif (n < 10_000_000) return `${trim1(n / 1_000_000)}M`;\n\tif (n < 1_000_000_000) return `${Math.round(n / 1_000_000)}M`;\n\tif (n < 10_000_000_000) return `${trim1(n / 1_000_000_000)}B`;\n\treturn `${Math.round(n / 1_000_000_000)}B`;\n}\n\n/** Format with up to 1 decimal place, dropping trailing `.0`. */\nfunction trim1(n: number): string {\n\tconst s = n.toFixed(1);\n\treturn s.endsWith(\".0\") ? s.slice(0, -2) : s;\n}\n\nexport function formatCwdForFooter(cwd: string, home: string | undefined): string {\n\tif (!home) return cwd;\n\n\tconst resolvedCwd = resolve(cwd);\n\tconst resolvedHome = resolve(home);\n\tconst relativeToHome = relative(resolvedHome, resolvedCwd);\n\tconst isInsideHome =\n\t\trelativeToHome === \"\" ||\n\t\t(relativeToHome !== \"..\" && !relativeToHome.startsWith(`..${sep}`) && !isAbsolute(relativeToHome));\n\n\tif (!isInsideHome) return cwd;\n\treturn relativeToHome === \"\" ? \"~\" : `~${sep}${relativeToHome}`;\n}\n\n/**\n * Color the right side of the footer: (provider) muted, model accent, :thinking dim.\n * The text is the plain (uncolored) right-aligned segment from the layout pass.\n */\nfunction colorRightSide(text: string): string {\n\tif (!text) return \"\";\n\tconst providerMatch = text.match(/^\\(([^)]+)\\) (.*)$/);\n\tconst body = providerMatch ? providerMatch[2] : text;\n\tconst providerPrefix = providerMatch ? theme.fg(\"muted\", `(${providerMatch[1]}) `) : \"\";\n\tconst thinkingMatch = body.match(/^(.+):([^:]+)$/);\n\tif (!thinkingMatch) return providerPrefix + theme.fg(\"accent\", body);\n\treturn `${providerPrefix}${theme.fg(\"accent\", thinkingMatch[1])}${theme.fg(\"dim\", `:${thinkingMatch[2]}`)}`;\n}\n\n/**\n * Footer component that shows pwd, token stats, and context usage.\n * Computes token/context stats from session, gets git branch and extension statuses from provider.\n */\nexport class FooterComponent implements Component {\n\tprivate session: AgentSession;\n\tprivate footerData: ReadonlyFooterDataProvider;\n\tprivate autoCompactEnabled = true;\n\n\tconstructor(session: AgentSession, footerData: ReadonlyFooterDataProvider) {\n\t\tthis.session = session;\n\t\tthis.footerData = footerData;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(enabled: boolean): void {\n\t\tthis.autoCompactEnabled = enabled;\n\t}\n\n\t/**\n\t * No-op: git branch caching now handled by provider.\n\t * Kept for compatibility with existing call sites in interactive-mode.\n\t */\n\tinvalidate(): void {\n\t\t// No-op: git branch is cached/invalidated by provider\n\t}\n\n\t/**\n\t * Clean up resources.\n\t * Git watcher cleanup now handled by provider.\n\t */\n\tdispose(): void {\n\t\t// Git watcher cleanup handled by provider\n\t}\n\n\trender(width: number): string[] {\n\t\tconst state = this.session.state;\n\n\t\tlet totalInput = 0;\n\t\tlet totalOutput = 0;\n\t\tlet totalCacheRead = 0;\n\t\tlet totalCacheWrite = 0;\n\t\tlet totalCost = 0;\n\t\tlet latestCacheHitRate: number | undefined;\n\n\t\tfor (const entry of this.session.sessionManager.getEntries()) {\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\ttotalInput += entry.message.usage.input;\n\t\t\t\ttotalOutput += entry.message.usage.output;\n\t\t\t\ttotalCacheRead += entry.message.usage.cacheRead;\n\t\t\t\ttotalCacheWrite += entry.message.usage.cacheWrite;\n\t\t\t\ttotalCost += entry.message.usage.cost.total;\n\n\t\t\t\tconst latestPromptTokens =\n\t\t\t\t\tentry.message.usage.input + entry.message.usage.cacheRead + entry.message.usage.cacheWrite;\n\t\t\t\tlatestCacheHitRate =\n\t\t\t\t\tlatestPromptTokens > 0 ? (entry.message.usage.cacheRead / latestPromptTokens) * 100 : undefined;\n\t\t\t}\n\t\t}\n\n\t\t// Calculate context usage from session (handles compaction correctly).\n\t\t// After compaction, tokens are unknown until the next LLM response.\n\t\tconst contextUsage = this.session.getContextUsage();\n\t\tconst contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0;\n\t\tconst contextPercentValue = contextUsage?.percent ?? 0;\n\t\tconst contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : \"?\";\n\t\tconst contextTokens =\n\t\t\ttypeof contextUsage?.tokens === \"number\"\n\t\t\t\t? formatTokens(contextUsage.tokens)\n\t\t\t\t: typeof contextUsage?.percent === \"number\"\n\t\t\t\t\t? formatTokens(Math.round((contextWindow * contextUsage.percent) / 100))\n\t\t\t\t\t: \"?\";\n\n\t\t// Build colored segments. Each segment carries its own theme color\n\t\t// so the HUD stays readable at a glance instead of being one dim wash.\n\t\tconst sep = theme.fg(\"borderMuted\", \" • \");\n\t\tconst pwdRaw = formatCwdForFooter(\n\t\t\tthis.session.sessionManager.getCwd(),\n\t\t\tprocess.env.HOME || process.env.USERPROFILE,\n\t\t);\n\t\tconst branch = this.footerData.getGitBranch();\n\t\tconst sessionName = this.session.sessionManager.getSessionName();\n\n\t\tconst coloredSegments: string[] = [theme.fg(\"accent\", pwdRaw)];\n\t\tconst plainSegments: string[] = [pwdRaw];\n\t\tif (branch) {\n\t\t\tcoloredSegments.push(theme.fg(\"warning\", branch));\n\t\t\tplainSegments.push(branch);\n\t\t}\n\t\tif (sessionName) {\n\t\t\tcoloredSegments.push(theme.fg(\"muted\", sessionName));\n\t\t\tplainSegments.push(sessionName);\n\t\t}\n\t\tif (totalInput) {\n\t\t\tconst text = `↑${formatTokens(totalInput)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif (totalOutput) {\n\t\t\tconst text = `↓${formatTokens(totalOutput)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif (totalCacheRead || totalCacheWrite) {\n\t\t\tconst text = `cache ${formatTokens(totalCacheRead)}/${formatTokens(totalCacheWrite)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif ((totalCacheRead > 0 || totalCacheWrite > 0) && latestCacheHitRate !== undefined) {\n\t\t\tconst text = `CH${latestCacheHitRate.toFixed(1)}%`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\t// Kimi Coding is subscription-backed despite using API-key authentication.\n\t\tconst usingSubscription = state.model\n\t\t\t? state.model.provider === \"kimi-coding\" || this.session.modelRuntime.isUsingOAuth(state.model.provider)\n\t\t\t: false;\n\t\tif (totalCost || usingSubscription) {\n\t\t\tconst costStr = `$${totalCost.toFixed(3)}${usingSubscription ? \" (sub)\" : \"\"}`;\n\t\t\tcoloredSegments.push(theme.fg(\"success\", costStr));\n\t\t\tplainSegments.push(costStr);\n\t\t}\n\n\t\tconst autoIndicator = this.autoCompactEnabled ? \" (auto)\" : \"\";\n\t\tconst ctxDisplay =\n\t\t\tcontextPercent === \"?\"\n\t\t\t\t? `${contextTokens}/${formatTokens(contextWindow)} (?)${autoIndicator}`\n\t\t\t\t: `${contextTokens}/${formatTokens(contextWindow)} (${contextPercent}%)${autoIndicator}`;\n\t\tconst ctxColored =\n\t\t\tcontextPercentValue > 90\n\t\t\t\t? theme.fg(\"error\", ctxDisplay)\n\t\t\t\t: contextPercentValue > 70\n\t\t\t\t\t? theme.fg(\"warning\", ctxDisplay)\n\t\t\t\t\t: theme.fg(\"muted\", ctxDisplay);\n\t\tcoloredSegments.push(ctxColored);\n\t\tplainSegments.push(ctxDisplay);\n\n\t\tconst statsLeftPlain = plainSegments.join(\" • \");\n\t\tlet statsLeft = coloredSegments.join(sep);\n\t\tlet statsLeftWidth = visibleWidth(statsLeftPlain);\n\n\t\t// If statsLeft is too wide, truncate the plain version (color codes break truncation)\n\t\tif (statsLeftWidth > width) {\n\t\t\tconst truncated = truncateToWidth(statsLeftPlain, width, \"...\");\n\t\t\tstatsLeft = theme.fg(\"muted\", truncated);\n\t\t\tstatsLeftWidth = visibleWidth(truncated);\n\t\t}\n\n\t\t// Calculate available space for padding (minimum 2 spaces between stats and model)\n\t\tconst minPadding = 2;\n\n\t\t// Add thinking level indicator if model supports reasoning\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tlet rightSideWithoutProvider = modelName;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\trightSideWithoutProvider = thinkingLevel === \"off\" ? `${modelName}:off` : `${modelName}:${thinkingLevel}`;\n\t\t}\n\n\t\t// Prepend the provider in parentheses if there are multiple providers and there's enough room\n\t\tlet rightSidePlain = rightSideWithoutProvider;\n\t\tif (this.footerData.getAvailableProviderCount() > 1 && state.model) {\n\t\t\tconst withProvider = `(${state.model.provider}) ${rightSideWithoutProvider}`;\n\t\t\tif (statsLeftWidth + minPadding + visibleWidth(withProvider) <= width) {\n\t\t\t\trightSidePlain = withProvider;\n\t\t\t}\n\t\t}\n\n\t\tconst rightSideWidth = visibleWidth(rightSidePlain);\n\t\tconst totalNeeded = statsLeftWidth + minPadding + rightSideWidth;\n\n\t\tlet rightSideRendered = rightSidePlain;\n\t\tlet actualRightWidth = rightSideWidth;\n\t\tif (totalNeeded > width) {\n\t\t\tconst availableForRight = width - statsLeftWidth - minPadding;\n\t\t\tif (availableForRight > 0) {\n\t\t\t\trightSideRendered = truncateToWidth(rightSidePlain, availableForRight, \"\");\n\t\t\t\tactualRightWidth = visibleWidth(rightSideRendered);\n\t\t\t} else {\n\t\t\t\trightSideRendered = \"\";\n\t\t\t\tactualRightWidth = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Color the right side: provider muted, model accent, thinking dim\n\t\tconst coloredRight = colorRightSide(rightSideRendered);\n\t\tconst padding = \" \".repeat(Math.max(0, width - statsLeftWidth - actualRightWidth));\n\t\tconst lines = [statsLeft + padding + coloredRight];\n\n\t\t// Add extension statuses on a single line, sorted by key alphabetically\n\t\tconst extensionStatuses = this.footerData.getExtensionStatuses();\n\t\tif (extensionStatuses.size > 0) {\n\t\t\tconst sortedStatuses = Array.from(extensionStatuses.entries())\n\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t.map(([, text]) => sanitizeStatusText(text));\n\t\t\tconst statusLine = sortedStatuses.join(\" \");\n\t\t\t// Truncate to terminal width with dim ellipsis for consistency with footer style\n\t\t\tlines.push(truncateToWidth(statusLine, width, theme.fg(\"dim\", \"...\")));\n\t\t}\n\n\t\treturn lines;\n\t}\n}\n"]}
1
+ {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAkB,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGvF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACvC,qFAAqF;IACrF,OAAO,IAAI;SACT,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,IAAI,EAAE,CAAC;AACV,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,IAAwB;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,YAAY,GACjB,cAAc,KAAK,EAAE;QACrB,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAEpG,IAAI,CAAC,YAAY;QAAE,OAAO,GAAG,CAAC;IAC9B,OAAO,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,cAAc,EAAE,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAY;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnD,IAAI,CAAC,aAAa;QAAE,OAAO,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,eAAe;IAK3B,YAAY,OAAqB,EAAE,UAAsC;QAFjE,uBAAkB,GAAG,IAAI,CAAC;QAGjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,OAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,qBAAqB,CAAC,OAAgB;QACrC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,UAAU;QACT,sDAAsD;IACvD,CAAC;IAED;;;OAGG;IACH,OAAO;QACN,0CAA0C;IAC3C,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,kBAAsC,CAAC;QAE3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpE,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;gBACxC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC1C,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;gBAChD,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBAClD,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAE5C,MAAM,kBAAkB,GACvB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5F,kBAAkB;oBACjB,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,CAAC;QACF,CAAC;QAED,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,YAAY,EAAE,aAAa,IAAI,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;QACrF,MAAM,mBAAmB,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7F,MAAM,aAAa,GAClB,OAAO,YAAY,EAAE,MAAM,KAAK,QAAQ;YACvC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;YACnC,CAAC,CAAC,OAAO,YAAY,EAAE,OAAO,KAAK,QAAQ;gBAC1C,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;gBACxE,CAAC,CAAC,GAAG,CAAC;QAET,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,kBAAkB,CAChC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EACpC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAC3C,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QAEjE,MAAM,eAAe,GAAa,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAa,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACZ,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAClD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACjB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;YACrD,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,SAAS,YAAY,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;YACtF,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACrF,MAAM,IAAI,GAAG,KAAK,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACnD,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,2EAA2E;QAC3E,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK;YACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxG,CAAC,CAAC,KAAK,CAAC;QACT,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/E,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,UAAU,GACf,cAAc,KAAK,GAAG;YACrB,CAAC,CAAC,GAAG,aAAa,IAAI,YAAY,CAAC,aAAa,CAAC,OAAO,aAAa,EAAE;YACvE,CAAC,CAAC,GAAG,aAAa,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,cAAc,KAAK,aAAa,EAAE,CAAC;QAC3F,MAAM,UAAU,GACf,mBAAmB,GAAG,EAAE;YACvB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;YAC/B,CAAC,CAAC,mBAAmB,GAAG,EAAE;gBACzB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;gBACjC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAElD,sFAAsF;QACtF,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAChE,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACzC,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,mFAAmF;QACnF,MAAM,UAAU,GAAG,CAAC,CAAC;QAErB,2DAA2D;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,UAAU,CAAC;QAChD,IAAI,wBAAwB,GAAG,SAAS,CAAC;QACzC,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC;YACnD,wBAAwB,GAAG,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC;QAC3G,CAAC;QAED,8FAA8F;QAC9F,IAAI,cAAc,GAAG,wBAAwB,CAAC;QAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACpE,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,wBAAwB,EAAE,CAAC;YAC7E,IAAI,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,EAAE,CAAC;gBACvE,cAAc,GAAG,YAAY,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,CAAC;QAEjE,IAAI,iBAAiB,GAAG,cAAc,CAAC;QACvC,IAAI,gBAAgB,GAAG,cAAc,CAAC;QACtC,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC;YACzB,MAAM,iBAAiB,GAAG,KAAK,GAAG,cAAc,GAAG,UAAU,CAAC;YAC9D,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC3B,iBAAiB,GAAG,eAAe,CAAC,cAAc,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBAC3E,gBAAgB,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACP,iBAAiB,GAAG,EAAE,CAAC;gBACvB,gBAAgB,GAAG,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAED,mEAAmE;QACnE,MAAM,YAAY,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC,CAAC;QAEnD,wEAAwE;QACxE,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;QACjE,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;iBAC5D,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,iFAAiF;YACjF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { type Component, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.ts\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport { theme } from \"../theme/theme.ts\";\n\n/**\n * Sanitize text for display in a single-line status.\n * Removes newlines, tabs, carriage returns, and other control characters.\n */\nfunction sanitizeStatusText(text: string): string {\n\t// Replace newlines, tabs, carriage returns with space, then collapse multiple spaces\n\treturn text\n\t\t.replace(/[\\r\\n\\t]/g, \" \")\n\t\t.replace(/ +/g, \" \")\n\t\t.trim();\n}\n\n/**\n * Format token counts for footer display.\n */\nexport function formatTokens(count: number): string {\n\treturn Math.round(count).toLocaleString(\"en-US\");\n}\n\nexport function formatCwdForFooter(cwd: string, home: string | undefined): string {\n\tif (!home) return cwd;\n\n\tconst resolvedCwd = resolve(cwd);\n\tconst resolvedHome = resolve(home);\n\tconst relativeToHome = relative(resolvedHome, resolvedCwd);\n\tconst isInsideHome =\n\t\trelativeToHome === \"\" ||\n\t\t(relativeToHome !== \"..\" && !relativeToHome.startsWith(`..${sep}`) && !isAbsolute(relativeToHome));\n\n\tif (!isInsideHome) return cwd;\n\treturn relativeToHome === \"\" ? \"~\" : `~${sep}${relativeToHome}`;\n}\n\n/**\n * Color the right side of the footer: (provider) muted, model accent, :thinking dim.\n * The text is the plain (uncolored) right-aligned segment from the layout pass.\n */\nfunction colorRightSide(text: string): string {\n\tif (!text) return \"\";\n\tconst providerMatch = text.match(/^\\(([^)]+)\\) (.*)$/);\n\tconst body = providerMatch ? providerMatch[2] : text;\n\tconst providerPrefix = providerMatch ? theme.fg(\"muted\", `(${providerMatch[1]}) `) : \"\";\n\tconst thinkingMatch = body.match(/^(.+):([^:]+)$/);\n\tif (!thinkingMatch) return providerPrefix + theme.fg(\"accent\", body);\n\treturn `${providerPrefix}${theme.fg(\"accent\", thinkingMatch[1])}${theme.fg(\"dim\", `:${thinkingMatch[2]}`)}`;\n}\n\n/**\n * Footer component that shows pwd, token stats, and context usage.\n * Computes token/context stats from session, gets git branch and extension statuses from provider.\n */\nexport class FooterComponent implements Component {\n\tprivate session: AgentSession;\n\tprivate footerData: ReadonlyFooterDataProvider;\n\tprivate autoCompactEnabled = true;\n\n\tconstructor(session: AgentSession, footerData: ReadonlyFooterDataProvider) {\n\t\tthis.session = session;\n\t\tthis.footerData = footerData;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(enabled: boolean): void {\n\t\tthis.autoCompactEnabled = enabled;\n\t}\n\n\t/**\n\t * No-op: git branch caching now handled by provider.\n\t * Kept for compatibility with existing call sites in interactive-mode.\n\t */\n\tinvalidate(): void {\n\t\t// No-op: git branch is cached/invalidated by provider\n\t}\n\n\t/**\n\t * Clean up resources.\n\t * Git watcher cleanup now handled by provider.\n\t */\n\tdispose(): void {\n\t\t// Git watcher cleanup handled by provider\n\t}\n\n\trender(width: number): string[] {\n\t\tconst state = this.session.state;\n\n\t\tlet totalInput = 0;\n\t\tlet totalOutput = 0;\n\t\tlet totalCacheRead = 0;\n\t\tlet totalCacheWrite = 0;\n\t\tlet totalCost = 0;\n\t\tlet latestCacheHitRate: number | undefined;\n\n\t\tfor (const entry of this.session.sessionManager.getEntries()) {\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\ttotalInput += entry.message.usage.input;\n\t\t\t\ttotalOutput += entry.message.usage.output;\n\t\t\t\ttotalCacheRead += entry.message.usage.cacheRead;\n\t\t\t\ttotalCacheWrite += entry.message.usage.cacheWrite;\n\t\t\t\ttotalCost += entry.message.usage.cost.total;\n\n\t\t\t\tconst latestPromptTokens =\n\t\t\t\t\tentry.message.usage.input + entry.message.usage.cacheRead + entry.message.usage.cacheWrite;\n\t\t\t\tlatestCacheHitRate =\n\t\t\t\t\tlatestPromptTokens > 0 ? (entry.message.usage.cacheRead / latestPromptTokens) * 100 : undefined;\n\t\t\t}\n\t\t}\n\n\t\t// Calculate context usage from session (handles compaction correctly).\n\t\t// After compaction, tokens are unknown until the next LLM response.\n\t\tconst contextUsage = this.session.getContextUsage();\n\t\tconst contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0;\n\t\tconst contextPercentValue = contextUsage?.percent ?? 0;\n\t\tconst contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : \"?\";\n\t\tconst contextTokens =\n\t\t\ttypeof contextUsage?.tokens === \"number\"\n\t\t\t\t? formatTokens(contextUsage.tokens)\n\t\t\t\t: typeof contextUsage?.percent === \"number\"\n\t\t\t\t\t? formatTokens(Math.round((contextWindow * contextUsage.percent) / 100))\n\t\t\t\t\t: \"?\";\n\n\t\t// Build colored segments. Each segment carries its own theme color\n\t\t// so the HUD stays readable at a glance instead of being one dim wash.\n\t\tconst sep = theme.fg(\"borderMuted\", \" • \");\n\t\tconst pwdRaw = formatCwdForFooter(\n\t\t\tthis.session.sessionManager.getCwd(),\n\t\t\tprocess.env.HOME || process.env.USERPROFILE,\n\t\t);\n\t\tconst branch = this.footerData.getGitBranch();\n\t\tconst sessionName = this.session.sessionManager.getSessionName();\n\n\t\tconst coloredSegments: string[] = [theme.fg(\"accent\", pwdRaw)];\n\t\tconst plainSegments: string[] = [pwdRaw];\n\t\tif (branch) {\n\t\t\tcoloredSegments.push(theme.fg(\"warning\", branch));\n\t\t\tplainSegments.push(branch);\n\t\t}\n\t\tif (sessionName) {\n\t\t\tcoloredSegments.push(theme.fg(\"muted\", sessionName));\n\t\t\tplainSegments.push(sessionName);\n\t\t}\n\t\tif (totalInput) {\n\t\t\tconst text = `↑${formatTokens(totalInput)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif (totalOutput) {\n\t\t\tconst text = `↓${formatTokens(totalOutput)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif (totalCacheRead || totalCacheWrite) {\n\t\t\tconst text = `cache ${formatTokens(totalCacheRead)}/${formatTokens(totalCacheWrite)}`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\tif ((totalCacheRead > 0 || totalCacheWrite > 0) && latestCacheHitRate !== undefined) {\n\t\t\tconst text = `CH${latestCacheHitRate.toFixed(1)}%`;\n\t\t\tcoloredSegments.push(theme.fg(\"dim\", text));\n\t\t\tplainSegments.push(text);\n\t\t}\n\t\t// Kimi Coding is subscription-backed despite using API-key authentication.\n\t\tconst usingSubscription = state.model\n\t\t\t? state.model.provider === \"kimi-coding\" || this.session.modelRuntime.isUsingOAuth(state.model.provider)\n\t\t\t: false;\n\t\tif (totalCost || usingSubscription) {\n\t\t\tconst costStr = `$${totalCost.toFixed(3)}${usingSubscription ? \" (sub)\" : \"\"}`;\n\t\t\tcoloredSegments.push(theme.fg(\"success\", costStr));\n\t\t\tplainSegments.push(costStr);\n\t\t}\n\n\t\tconst autoIndicator = this.autoCompactEnabled ? \" (auto)\" : \"\";\n\t\tconst ctxDisplay =\n\t\t\tcontextPercent === \"?\"\n\t\t\t\t? `${contextTokens}/${formatTokens(contextWindow)} (?)${autoIndicator}`\n\t\t\t\t: `${contextTokens}/${formatTokens(contextWindow)} (${contextPercent}%)${autoIndicator}`;\n\t\tconst ctxColored =\n\t\t\tcontextPercentValue > 90\n\t\t\t\t? theme.fg(\"error\", ctxDisplay)\n\t\t\t\t: contextPercentValue > 70\n\t\t\t\t\t? theme.fg(\"warning\", ctxDisplay)\n\t\t\t\t\t: theme.fg(\"muted\", ctxDisplay);\n\t\tcoloredSegments.push(ctxColored);\n\t\tplainSegments.push(ctxDisplay);\n\n\t\tconst statsLeftPlain = plainSegments.join(\" • \");\n\t\tlet statsLeft = coloredSegments.join(sep);\n\t\tlet statsLeftWidth = visibleWidth(statsLeftPlain);\n\n\t\t// If statsLeft is too wide, truncate the plain version (color codes break truncation)\n\t\tif (statsLeftWidth > width) {\n\t\t\tconst truncated = truncateToWidth(statsLeftPlain, width, \"...\");\n\t\t\tstatsLeft = theme.fg(\"muted\", truncated);\n\t\t\tstatsLeftWidth = visibleWidth(truncated);\n\t\t}\n\n\t\t// Calculate available space for padding (minimum 2 spaces between stats and model)\n\t\tconst minPadding = 2;\n\n\t\t// Add thinking level indicator if model supports reasoning\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tlet rightSideWithoutProvider = modelName;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\trightSideWithoutProvider = thinkingLevel === \"off\" ? `${modelName}:off` : `${modelName}:${thinkingLevel}`;\n\t\t}\n\n\t\t// Prepend the provider in parentheses if there are multiple providers and there's enough room\n\t\tlet rightSidePlain = rightSideWithoutProvider;\n\t\tif (this.footerData.getAvailableProviderCount() > 1 && state.model) {\n\t\t\tconst withProvider = `(${state.model.provider}) ${rightSideWithoutProvider}`;\n\t\t\tif (statsLeftWidth + minPadding + visibleWidth(withProvider) <= width) {\n\t\t\t\trightSidePlain = withProvider;\n\t\t\t}\n\t\t}\n\n\t\tconst rightSideWidth = visibleWidth(rightSidePlain);\n\t\tconst totalNeeded = statsLeftWidth + minPadding + rightSideWidth;\n\n\t\tlet rightSideRendered = rightSidePlain;\n\t\tlet actualRightWidth = rightSideWidth;\n\t\tif (totalNeeded > width) {\n\t\t\tconst availableForRight = width - statsLeftWidth - minPadding;\n\t\t\tif (availableForRight > 0) {\n\t\t\t\trightSideRendered = truncateToWidth(rightSidePlain, availableForRight, \"\");\n\t\t\t\tactualRightWidth = visibleWidth(rightSideRendered);\n\t\t\t} else {\n\t\t\t\trightSideRendered = \"\";\n\t\t\t\tactualRightWidth = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Color the right side: provider muted, model accent, thinking dim\n\t\tconst coloredRight = colorRightSide(rightSideRendered);\n\t\tconst padding = \" \".repeat(Math.max(0, width - statsLeftWidth - actualRightWidth));\n\t\tconst lines = [statsLeft + padding + coloredRight];\n\n\t\t// Add extension statuses on a single line, sorted by key alphabetically\n\t\tconst extensionStatuses = this.footerData.getExtensionStatuses();\n\t\tif (extensionStatuses.size > 0) {\n\t\t\tconst sortedStatuses = Array.from(extensionStatuses.entries())\n\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t.map(([, text]) => sanitizeStatusText(text));\n\t\t\tconst statusLine = sortedStatuses.join(\" \");\n\t\t\t// Truncate to terminal width with dim ellipsis for consistency with footer style\n\t\t\tlines.push(truncateToWidth(statusLine, width, theme.fg(\"dim\", \"...\")));\n\t\t}\n\n\t\treturn lines;\n\t}\n}\n"]}
@@ -6,7 +6,6 @@ import type { ImageContent } from "@earendil-works/pi-ai/compat";
6
6
  import { type AgentSessionRuntime } from "../../core/agent-session-runtime.ts";
7
7
  import { isApiKeyLoginProvider } from "../../core/auth-providers.ts";
8
8
  import { SessionManager } from "../../core/session-manager.ts";
9
- export declare function shouldShowRetryIndicator(delayMs: number, fallbackApplied: boolean): boolean;
10
9
  export declare function formatResumeCommand(sessionManager: SessionManager): string | undefined;
11
10
  export { isApiKeyLoginProvider };
12
11
  /**
@@ -94,8 +93,6 @@ export declare class InteractiveMode {
94
93
  private autoCompactionEscapeHandler?;
95
94
  private autoCompactionProgressText;
96
95
  private retryEscapeHandler?;
97
- private fallbackAppliedBeforeRetryStart;
98
- private pendingZeroDelayRetryIndicator;
99
96
  private compactionQueuedMessages;
100
97
  private compactionInFlightMessages;
101
98
  private compactionTransferAbortControllers;
@@ -287,7 +284,6 @@ export declare class InteractiveMode {
287
284
  private setupEditorSubmitHandler;
288
285
  private subscribeToAgent;
289
286
  private handleEvent;
290
- private showRetryStatusIndicator;
291
287
  /** Extract text content from a user message */
292
288
  private getUserMessageText;
293
289
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
@@ -87,9 +87,6 @@ class ExpandableText extends Text {
87
87
  this.setText(expanded ? this.getExpandedText() : this.getCollapsedText());
88
88
  }
89
89
  }
90
- export function shouldShowRetryIndicator(delayMs, fallbackApplied) {
91
- return delayMs !== 0 || !fallbackApplied;
92
- }
93
90
  function getStreamingToolCallPartialJson(content) {
94
91
  if (typeof content !== "object" || content === null || !("partialJson" in content))
95
92
  return undefined;
@@ -106,7 +103,6 @@ function isCustomSessionEntry(item) {
106
103
  const DEAD_TERMINAL_ERROR_CODES = new Set(["EIO", "EPIPE", "ENOTCONN"]);
107
104
  const DEFAULT_WORKING_STATUS_REFRESH_INTERVAL_MS = 600;
108
105
  const DEFAULT_WORKING_STATUS_MESSAGE_ANIMATION_INTERVAL_MS = 32;
109
- const FALLBACK_STATUS_KEY = "fallback";
110
106
  const RGB_FOREGROUND_PATTERN = /\x1b\[38;2;(\d+);(\d+);(\d+)m/;
111
107
  const DARK_DEFAULT_WORKING_TEXT_RGB = { r: 229, g: 229, b: 231 };
112
108
  const LIGHT_DEFAULT_WORKING_TEXT_RGB = { r: 17, g: 17, b: 17 };
@@ -294,8 +290,6 @@ export class InteractiveMode {
294
290
  // Track pending bash components (shown in pending area, moved to chat on submit)
295
291
  this.pendingBashComponents = [];
296
292
  this.autoCompactionProgressText = "";
297
- this.fallbackAppliedBeforeRetryStart = false;
298
- this.pendingZeroDelayRetryIndicator = undefined;
299
293
  // Messages queued while compaction is running
300
294
  this.compactionQueuedMessages = [];
301
295
  this.compactionInFlightMessages = [];
@@ -706,9 +700,6 @@ export class InteractiveMode {
706
700
  if (modelFallbackMessage) {
707
701
  this.showWarning(modelFallbackMessage);
708
702
  }
709
- for (const warning of this.session.fallbackValidationWarnings) {
710
- this.showWarning(warning);
711
- }
712
703
  void this.maybeWarnAboutAnthropicSubscriptionAuth();
713
704
  // Process initial messages
714
705
  if (initialMessage) {
@@ -1461,7 +1452,6 @@ export class InteractiveMode {
1461
1452
  },
1462
1453
  getContextUsage: () => this.session.getContextUsage(),
1463
1454
  getCompactionSettings: () => this.settingsManager.getCompactionSettings(),
1464
- sessionSettings: extensionRunner.createContext().sessionSettings,
1465
1455
  compact: (options) => {
1466
1456
  void (async () => {
1467
1457
  try {
@@ -2818,16 +2808,8 @@ export class InteractiveMode {
2818
2808
  this.clearStatusIndicator("compaction");
2819
2809
  this.autoCompactionProgressText = "";
2820
2810
  if (event.aborted) {
2821
- // Prefer the extension-provided reason over the generic "cancelled"
2822
- // label so per-turn-cap / circuit-breaker / provider-error cancels are
2823
- // no longer indistinguishable from a user-triggered abort.
2824
- const cancelMessage = event.errorMessage ?? "Compaction cancelled";
2825
2811
  if (event.reason === "manual") {
2826
- this.showError(cancelMessage);
2827
- }
2828
- else if (event.errorMessage) {
2829
- this.chatContainer.addChild(new Spacer(1));
2830
- this.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0));
2812
+ this.showError("Compaction cancelled");
2831
2813
  }
2832
2814
  else {
2833
2815
  this.showStatus("Auto-compaction cancelled");
@@ -2848,74 +2830,21 @@ export class InteractiveMode {
2848
2830
  this.chatContainer.addChild(new Text(theme.fg("error", event.errorMessage), 1, 0));
2849
2831
  }
2850
2832
  }
2851
- else if (event.accepted === false) {
2852
- // Exhaustive fallback per plan Section 1: compaction_end must never fall
2853
- // through silently. Rejection events without an errorMessage still name
2854
- // the rejectionCause so the user knows /compact did nothing on purpose.
2855
- const cause = event.rejectionCause ?? "unknown";
2856
- const message = `Compaction failed (no result); cause: ${cause}`;
2857
- if (event.reason === "manual") {
2858
- this.showError(message);
2859
- }
2860
- else {
2861
- this.chatContainer.addChild(new Spacer(1));
2862
- this.chatContainer.addChild(new Text(theme.fg("error", message), 1, 0));
2863
- }
2864
- }
2865
2833
  void this.flushCompactionQueue({ willRetry: event.willRetry });
2866
2834
  this.ui.requestRender();
2867
2835
  break;
2868
2836
  }
2869
- case "retry_fallback_applied": {
2870
- if (this.pendingZeroDelayRetryIndicator) {
2871
- this.pendingZeroDelayRetryIndicator.fallbackApplied = true;
2872
- }
2873
- else {
2874
- this.fallbackAppliedBeforeRetryStart = true;
2875
- }
2876
- this.showWarning(`Model fallback: ${event.from} -> ${event.to} (${event.reason})`);
2877
- this.setExtensionStatus(FALLBACK_STATUS_KEY, `fallback: ${event.to}`);
2878
- break;
2879
- }
2880
- case "retry_fallback_succeeded":
2881
- this.showStatus(`Fallback model ${event.model} responded`);
2882
- break;
2883
- case "retry_fallback_reverted":
2884
- this.showStatus(`Reverted to ${event.to}`);
2885
- this.setExtensionStatus(FALLBACK_STATUS_KEY, undefined);
2886
- break;
2887
- case "retry_fallback_exhausted":
2888
- this.showError(`Fallback chain exhausted for ${event.chainKey}: ${event.lastError}`);
2889
- this.setExtensionStatus(FALLBACK_STATUS_KEY, undefined);
2890
- break;
2891
2837
  case "auto_retry_start": {
2892
2838
  // During retry waits, isStreaming flips false between attempts. The main Esc handler
2893
2839
  // keys off both isStreaming and retryAttempt so we keep the same close-out path here;
2894
2840
  // no separate retry-only handler is installed (the prior one only called
2895
2841
  // session.abortRetry() and left queued steering messages stranded).
2896
2842
  this.retryEscapeHandler = undefined;
2897
- const fallbackApplied = this.fallbackAppliedBeforeRetryStart;
2898
- this.fallbackAppliedBeforeRetryStart = false;
2899
- if (event.delayMs === 0) {
2900
- const pending = { fallbackApplied };
2901
- this.pendingZeroDelayRetryIndicator = pending;
2902
- queueMicrotask(() => {
2903
- if (this.pendingZeroDelayRetryIndicator !== pending)
2904
- return;
2905
- this.pendingZeroDelayRetryIndicator = undefined;
2906
- if (shouldShowRetryIndicator(event.delayMs, pending.fallbackApplied)) {
2907
- this.showRetryStatusIndicator(event);
2908
- }
2909
- });
2910
- }
2911
- else {
2912
- this.showRetryStatusIndicator(event);
2913
- }
2843
+ this.showStatusIndicator(new RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs));
2844
+ this.ui.requestRender();
2914
2845
  break;
2915
2846
  }
2916
2847
  case "auto_retry_end": {
2917
- this.pendingZeroDelayRetryIndicator = undefined;
2918
- this.fallbackAppliedBeforeRetryStart = false;
2919
2848
  // Restore escape handler
2920
2849
  if (this.retryEscapeHandler) {
2921
2850
  this.defaultEditor.onEscape = this.retryEscapeHandler;
@@ -2931,10 +2860,6 @@ export class InteractiveMode {
2931
2860
  }
2932
2861
  }
2933
2862
  }
2934
- showRetryStatusIndicator(event) {
2935
- this.showStatusIndicator(new RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs));
2936
- this.ui.requestRender();
2937
- }
2938
2863
  /** Extract text content from a user message */
2939
2864
  getUserMessageText(message) {
2940
2865
  if (message.role !== "user")