@code-yeongyu/senpi 2026.7.30 → 2026.7.31

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 (204) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +3 -0
  3. package/dist/core/agent-session.d.ts +7 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +31 -3
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/compaction/compaction.d.ts +1 -0
  8. package/dist/core/compaction/compaction.d.ts.map +1 -1
  9. package/dist/core/compaction/compaction.js +1 -0
  10. package/dist/core/compaction/compaction.js.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/idle.d.ts +16 -0
  12. package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -0
  13. package/dist/core/extensions/builtin/compaction/idle.js +21 -0
  14. package/dist/core/extensions/builtin/compaction/idle.js.map +1 -0
  15. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  16. package/dist/core/extensions/builtin/compaction/index.js +18 -1
  17. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  18. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  19. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  20. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  21. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -0
  22. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  23. package/dist/core/extensions/builtin/compaction/openai-remote.js +15 -4
  24. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  25. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/compaction/speculative.js +18 -4
  27. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  28. package/dist/core/extensions/builtin/goal/continuation.d.ts +2 -0
  29. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  30. package/dist/core/extensions/builtin/goal/continuation.js +12 -0
  31. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  32. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  33. package/dist/core/extensions/builtin/goal/index.js +4 -1
  34. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  35. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/goal/monitor-continuation.js +22 -18
  37. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  38. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts +1 -1
  39. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js +67 -66
  41. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  42. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.d.ts +4 -0
  43. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.d.ts.map +1 -0
  44. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.js +35 -0
  45. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.js.map +1 -0
  46. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +0 -5
  48. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  49. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +2 -0
  50. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
  52. package/dist/core/high-reasoning-warning.d.ts +10 -0
  53. package/dist/core/high-reasoning-warning.d.ts.map +1 -0
  54. package/dist/core/high-reasoning-warning.js +28 -0
  55. package/dist/core/high-reasoning-warning.js.map +1 -0
  56. package/dist/core/model-runtime.d.ts.map +1 -1
  57. package/dist/core/model-runtime.js +3 -11
  58. package/dist/core/model-runtime.js.map +1 -1
  59. package/dist/core/settings-manager.d.ts +2 -0
  60. package/dist/core/settings-manager.d.ts.map +1 -1
  61. package/dist/core/settings-manager.js +1 -0
  62. package/dist/core/settings-manager.js.map +1 -1
  63. package/dist/modes/interactive/interactive-mode.d.ts +8 -1
  64. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  65. package/dist/modes/interactive/interactive-mode.js +59 -13
  66. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  67. package/dist/modes/interactive/risky-main-model-warning.d.ts +5 -0
  68. package/dist/modes/interactive/risky-main-model-warning.d.ts.map +1 -0
  69. package/dist/modes/interactive/risky-main-model-warning.js +8 -0
  70. package/dist/modes/interactive/risky-main-model-warning.js.map +1 -0
  71. package/dist/modes/interactive/tips/catalog/subagent-tips.d.ts.map +1 -1
  72. package/dist/modes/interactive/tips/catalog/subagent-tips.js +30 -0
  73. package/dist/modes/interactive/tips/catalog/subagent-tips.js.map +1 -1
  74. package/dist/modes/rpc/rpc-types.d.ts +6 -0
  75. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  76. package/dist/modes/rpc/rpc-types.js.map +1 -1
  77. package/dist/utils/version-check.d.ts.map +1 -1
  78. package/dist/utils/version-check.js +22 -2
  79. package/dist/utils/version-check.js.map +1 -1
  80. package/docs/docs.json +4 -0
  81. package/docs/quickstart.md +3 -0
  82. package/docs/release-guide.md +636 -0
  83. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
  84. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  85. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +2 -2
  86. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  87. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts +4 -0
  88. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -0
  89. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +106 -0
  90. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -0
  91. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts +1 -0
  92. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts.map +1 -1
  93. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +1 -0
  94. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js.map +1 -1
  95. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  96. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.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/tool-call-middleware/index.d.ts +2 -1
  105. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  106. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +13 -0
  107. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  108. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.js +2 -2
  109. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.js.map +1 -1
  110. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.d.ts +3 -0
  111. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.d.ts.map +1 -0
  112. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.js +29 -0
  113. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.js.map +1 -0
  114. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.d.ts +3 -0
  115. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.d.ts.map +1 -0
  116. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.js +82 -0
  117. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.js.map +1 -0
  118. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  119. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  120. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  121. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.d.ts.map +1 -1
  122. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.js +1 -12
  123. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.js.map +1 -1
  124. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.d.ts +7 -0
  125. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.d.ts.map +1 -1
  126. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.js +9 -3
  127. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.js.map +1 -1
  128. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.d.ts.map +1 -1
  129. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.js +5 -3
  130. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.js.map +1 -1
  131. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.d.ts.map +1 -1
  132. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.js +1 -12
  133. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.js.map +1 -1
  134. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.d.ts +5 -0
  135. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.d.ts.map +1 -0
  136. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.js +17 -0
  137. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.js.map +1 -0
  138. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.d.ts +9 -1
  139. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.d.ts.map +1 -1
  140. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.js +10 -4
  141. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.js.map +1 -1
  142. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts +21 -0
  143. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts.map +1 -1
  144. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js +239 -41
  145. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js.map +1 -1
  146. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.d.ts.map +1 -1
  147. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.js +25 -6
  148. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.js.map +1 -1
  149. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.d.ts +32 -0
  150. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.d.ts.map +1 -0
  151. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.js +64 -0
  152. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.js.map +1 -0
  153. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.d.ts +5 -0
  154. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.d.ts.map +1 -1
  155. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.js +10 -1
  156. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.js.map +1 -1
  157. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.d.ts.map +1 -1
  158. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +2 -13
  159. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +1 -1
  160. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.d.ts +7 -0
  161. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.d.ts.map +1 -1
  162. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js +9 -3
  163. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js.map +1 -1
  164. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.d.ts.map +1 -1
  165. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js +5 -3
  166. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js.map +1 -1
  167. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.d.ts.map +1 -1
  168. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +2 -13
  169. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -1
  170. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.d.ts +5 -0
  171. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.d.ts.map +1 -0
  172. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js +13 -0
  173. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js.map +1 -0
  174. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.d.ts +9 -1
  175. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.d.ts.map +1 -1
  176. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +10 -4
  177. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -1
  178. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts +21 -0
  179. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts.map +1 -1
  180. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js +239 -41
  181. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js.map +1 -1
  182. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.d.ts.map +1 -1
  183. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +25 -6
  184. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -1
  185. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.d.ts +32 -0
  186. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.d.ts.map +1 -0
  187. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js +57 -0
  188. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js.map +1 -0
  189. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts +5 -0
  190. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts.map +1 -1
  191. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +9 -0
  192. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -1
  193. package/node_modules/@modelcontextprotocol/sdk/package.json +4 -3
  194. package/node_modules/brace-expansion/README.md +12 -0
  195. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +2 -0
  196. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -1
  197. package/node_modules/brace-expansion/dist/commonjs/index.js +138 -86
  198. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  199. package/node_modules/brace-expansion/dist/esm/index.d.ts +2 -0
  200. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -1
  201. package/node_modules/brace-expansion/dist/esm/index.js +137 -85
  202. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  203. package/node_modules/brace-expansion/package.json +2 -2
  204. package/package.json +7 -7
@@ -16,6 +16,7 @@ import { isApiKeyLoginProvider } from "../../core/auth-providers.js";
16
16
  import { CACHE_TTL_MS, collectCacheMisses, computeCacheWaste, detectCacheMiss, } from "../../core/cache-stats.js";
17
17
  import { FooterDataProvider } from "../../core/footer-data-provider.js";
18
18
  import { appendHiddenTuiStdout } from "../../core/hidden-stdout-log.js";
19
+ import { buildHighReasoningWarning } from "../../core/high-reasoning-warning.js";
19
20
  import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
20
21
  import { KeybindingsManager } from "../../core/keybindings.js";
21
22
  import { createCompactionSummaryMessage } from "../../core/messages.js";
@@ -79,6 +80,7 @@ import { GrokChrome } from "./grok/chrome.js";
79
80
  import { restoreInteractiveStderr, takeOverInteractiveStderr } from "./interactive-stderr-guard.js";
80
81
  import { applyKeybindingsFileEdit, seedKeybindingsFile } from "./keybindings-command.js";
81
82
  import { getModelSearchText } from "./model-search.js";
83
+ import { isRiskyMainModel, RISKY_MAIN_MODEL_WARNING } from "./risky-main-model-warning.js";
82
84
  import { resolveStartupToolPaths } from "./startup-tools.js";
83
85
  import { DEFAULT_SMOOTH_FPS, StreamingRevealController } from "./streaming-reveal.js";
84
86
  import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
@@ -806,6 +808,7 @@ export class InteractiveMode {
806
808
  for (const warning of this.session.fallbackValidationWarnings) {
807
809
  this.showWarning(warning);
808
810
  }
811
+ this.showRiskyMainModelWarning(this.session.model);
809
812
  void this.maybeWarnAboutAnthropicSubscriptionAuth();
810
813
  // Process initial messages
811
814
  if (initialMessage) {
@@ -2872,6 +2875,9 @@ export class InteractiveMode {
2872
2875
  this.footer.invalidate();
2873
2876
  this.updateEditorBorderColor();
2874
2877
  break;
2878
+ case "high_reasoning_warning":
2879
+ this.showHighReasoningWarning(event);
2880
+ break;
2875
2881
  case "message_start":
2876
2882
  if (event.message.role === "custom") {
2877
2883
  this.addMessageToChat(event.message);
@@ -3124,21 +3130,41 @@ export class InteractiveMode {
3124
3130
  this.chatContainer.addChild(new Text(theme.fg("error", message), 1, 0));
3125
3131
  }
3126
3132
  }
3127
- // Every terminal compaction_end flushes the TUI compaction queue.
3128
- // Accepted compactions deliver through prompt admission; unsuccessful
3129
- // ones route through the native steer/followUp queues so submitted
3130
- // input is never silently parked (field bug: messages typed during a
3131
- // failing compaction were held forever and lost on session switch).
3133
+ // Every terminal compaction_end resolves the TUI compaction queue.
3134
+ // Accepted compactions deliver through prompt admission. Retryable
3135
+ // failures route through the native steer/followUp queues so submitted
3136
+ // input rides along with the retry instead of being silently parked
3137
+ // (field bug: messages typed during a failing compaction were held
3138
+ // forever and lost on session switch). Terminal failures hand the input
3139
+ // back to the editable composer: retrying delivery against the same
3140
+ // over-threshold context would just repeat the failure.
3132
3141
  const compactionSucceeded = event.accepted === true || event.result !== undefined;
3133
- const heldCount = this.compactionQueuedMessages.length;
3134
- if (!compactionSucceeded && heldCount > 0) {
3135
- this.getSessionLogger().warn("compaction_queue_deferred", {
3136
- count: heldCount,
3137
- cause: event.errorMessage ?? event.rejectionCause ?? (event.aborted ? "aborted" : "no-result"),
3138
- });
3139
- this.showStatus(`${heldCount} queued message${heldCount === 1 ? "" : "s"} will send with the next turn (compaction did not complete)`);
3142
+ if (compactionSucceeded) {
3143
+ void this.flushCompactionQueue({ willRetry: event.willRetry, deferAdmission: false });
3144
+ }
3145
+ else if (event.willRetry === true) {
3146
+ const heldCount = this.compactionQueuedMessages.length;
3147
+ if (heldCount > 0) {
3148
+ const failureCause = event.errorMessage ?? event.rejectionCause ?? (event.aborted ? "aborted" : "no-result");
3149
+ this.getSessionLogger().warn("compaction_queue_deferred", {
3150
+ count: heldCount,
3151
+ cause: failureCause,
3152
+ });
3153
+ this.showStatus(`${heldCount} queued message${heldCount === 1 ? "" : "s"} will send with the next turn (compaction will retry)`);
3154
+ }
3155
+ void this.flushCompactionQueue({ willRetry: true, deferAdmission: true });
3156
+ }
3157
+ else {
3158
+ const restoredCount = this.restoreQueuedMessagesToEditor();
3159
+ if (restoredCount > 0) {
3160
+ const failureCause = event.errorMessage ?? event.rejectionCause ?? (event.aborted ? "aborted" : "no-result");
3161
+ this.getSessionLogger().warn("compaction_queue_restored", {
3162
+ restored: restoredCount,
3163
+ cause: failureCause,
3164
+ });
3165
+ this.showStatus(`${restoredCount} queued message${restoredCount === 1 ? "" : "s"} restored to the editor (compaction did not complete)`);
3166
+ }
3140
3167
  }
3141
- void this.flushCompactionQueue({ willRetry: event.willRetry, deferAdmission: !compactionSucceeded });
3142
3168
  this.ui.requestRender();
3143
3169
  break;
3144
3170
  }
@@ -3799,6 +3825,7 @@ export class InteractiveMode {
3799
3825
  ? `, system prompt: ${result.systemPromptChange.systemPromptName}`
3800
3826
  : "";
3801
3827
  this.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}${systemPromptStr}`);
3828
+ this.showRiskyMainModelWarning(result.model);
3802
3829
  void this.maybeWarnAboutAnthropicSubscriptionAuth(result.model);
3803
3830
  }
3804
3831
  }
@@ -3889,6 +3916,23 @@ export class InteractiveMode {
3889
3916
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
3890
3917
  this.ui.requestRender();
3891
3918
  }
3919
+ showRiskyMainModelWarning(model) {
3920
+ if (!model || !isRiskyMainModel(model))
3921
+ return;
3922
+ this.chatContainer.addChild(new Spacer(1));
3923
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("error", text)));
3924
+ this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("error", "위험한 모델 경고"))}\n${theme.fg("error", RISKY_MAIN_MODEL_WARNING)}`, 1, 0));
3925
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("error", text)));
3926
+ this.ui.requestRender();
3927
+ }
3928
+ showHighReasoningWarning(event) {
3929
+ const { title, body } = buildHighReasoningWarning({ id: event.modelId, provider: event.provider }, event.thinkingLevel);
3930
+ this.chatContainer.addChild(new Spacer(1));
3931
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("error", text)));
3932
+ this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("error", title))}\n${body.map((line) => theme.fg("error", line)).join("\n")}`, 1, 0));
3933
+ this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("error", text)));
3934
+ this.ui.requestRender();
3935
+ }
3892
3936
  showPackageUpdateNotification(packages) {
3893
3937
  const action = theme.fg("accent", `${APP_NAME} update --extensions`);
3894
3938
  const updateInstruction = theme.fg("muted", "Package updates are available. Run ") + action;
@@ -4364,6 +4408,7 @@ export class InteractiveMode {
4364
4408
  ? ` (system prompt: ${systemPromptChange.systemPromptName})`
4365
4409
  : "";
4366
4410
  this.showStatus(`Model: ${model.id}${systemPromptStr}`);
4411
+ this.showRiskyMainModelWarning(model);
4367
4412
  void this.maybeWarnAboutAnthropicSubscriptionAuth(model);
4368
4413
  this.checkDaxnutsEasterEgg(model);
4369
4414
  }
@@ -4997,6 +5042,7 @@ export class InteractiveMode {
4997
5042
  if (selectedModel) {
4998
5043
  const systemPromptStr = systemPromptName ? ` System prompt: ${systemPromptName}.` : "";
4999
5044
  this.showStatus(`${actionLabel}. Selected ${selectedModel.id}.${systemPromptStr} Credentials saved to ${getAuthPath()}`);
5045
+ this.showRiskyMainModelWarning(selectedModel);
5000
5046
  void this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);
5001
5047
  this.checkDaxnutsEasterEgg(selectedModel);
5002
5048
  }