@code-yeongyu/senpi 2026.8.3-3 → 2026.8.4

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 (145) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/core/agent-session.d.ts +2 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +64 -26
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +2 -1
  7. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
  8. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +126 -26
  9. package/dist/core/extensions/builtin/compaction/deterministic-fallback.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 +12 -7
  12. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  13. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
  14. package/dist/core/extensions/builtin/compaction/per-turn-cap.js +4 -1
  15. package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
  16. package/dist/core/extensions/builtin/compaction/retained-message-safety.d.ts +4 -0
  17. package/dist/core/extensions/builtin/compaction/retained-message-safety.d.ts.map +1 -0
  18. package/dist/core/extensions/builtin/compaction/retained-message-safety.js +155 -0
  19. package/dist/core/extensions/builtin/compaction/retained-message-safety.js.map +1 -0
  20. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  21. package/dist/core/extensions/builtin/compaction/speculative.js +21 -13
  22. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  23. package/dist/core/extensions/builtin/goal/cache-warm-renderer.d.ts.map +1 -1
  24. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +9 -14
  25. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  26. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +1 -0
  27. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/goal/continuation-recovery.js +7 -0
  29. package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -1
  30. package/dist/core/extensions/builtin/goal/continuation.d.ts +1 -1
  31. package/dist/core/extensions/builtin/goal/continuation.js +1 -1
  32. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  33. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  34. package/dist/core/extensions/builtin/goal/index.js +12 -10
  35. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  36. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts +7 -1
  37. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +14 -2
  39. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  40. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +14 -1
  42. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  43. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +1 -0
  44. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  45. package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
  46. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/loop-guard/renderer.js +4 -12
  48. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  49. package/dist/core/extensions/builtin/rule-activation/index.d.ts +6 -0
  50. package/dist/core/extensions/builtin/rule-activation/index.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/rule-activation/index.js +10 -0
  52. package/dist/core/extensions/builtin/rule-activation/index.js.map +1 -0
  53. package/dist/core/extensions/builtin/rule-activation/renderer.d.ts +3 -0
  54. package/dist/core/extensions/builtin/rule-activation/renderer.d.ts.map +1 -0
  55. package/dist/core/extensions/builtin/rule-activation/renderer.js +37 -0
  56. package/dist/core/extensions/builtin/rule-activation/renderer.js.map +1 -0
  57. package/dist/core/extensions/builtin/rule-activation/types.d.ts +15 -0
  58. package/dist/core/extensions/builtin/rule-activation/types.d.ts.map +1 -0
  59. package/dist/core/extensions/builtin/rule-activation/types.js +45 -0
  60. package/dist/core/extensions/builtin/rule-activation/types.js.map +1 -0
  61. package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -1
  62. package/dist/core/extensions/builtin/rules/index.js +9 -1
  63. package/dist/core/extensions/builtin/rules/index.js.map +1 -1
  64. package/dist/core/extensions/builtin/ttsr/detectors/repetitive-turns.d.ts +22 -0
  65. package/dist/core/extensions/builtin/ttsr/detectors/repetitive-turns.d.ts.map +1 -0
  66. package/dist/core/extensions/builtin/ttsr/detectors/repetitive-turns.js +93 -0
  67. package/dist/core/extensions/builtin/ttsr/detectors/repetitive-turns.js.map +1 -0
  68. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  69. package/dist/core/extensions/builtin/ttsr/index.js +60 -21
  70. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  71. package/dist/core/extensions/builtin/ttsr/prompts.d.ts +1 -0
  72. package/dist/core/extensions/builtin/ttsr/prompts.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/ttsr/prompts.js +5 -0
  74. package/dist/core/extensions/builtin/ttsr/prompts.js.map +1 -1
  75. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts +23 -0
  76. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts.map +1 -0
  77. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.js +101 -0
  78. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.js.map +1 -0
  79. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts +15 -0
  80. package/dist/core/extensions/builtin/ttsr/stream-remediation.d.ts.map +1 -0
  81. package/dist/core/extensions/builtin/ttsr/stream-remediation.js +22 -0
  82. package/dist/core/extensions/builtin/ttsr/stream-remediation.js.map +1 -0
  83. package/dist/core/extensions/builtin/ttsr/types.d.ts +1 -1
  84. package/dist/core/extensions/builtin/ttsr/types.d.ts.map +1 -1
  85. package/dist/core/extensions/builtin/ttsr/types.js.map +1 -1
  86. package/dist/core/extensions/notice/adapters.d.ts +15 -0
  87. package/dist/core/extensions/notice/adapters.d.ts.map +1 -0
  88. package/dist/core/extensions/notice/adapters.js +22 -0
  89. package/dist/core/extensions/notice/adapters.js.map +1 -0
  90. package/dist/core/extensions/notice/box.d.ts +8 -0
  91. package/dist/core/extensions/notice/box.d.ts.map +1 -0
  92. package/dist/core/extensions/notice/box.js +17 -0
  93. package/dist/core/extensions/notice/box.js.map +1 -0
  94. package/dist/core/extensions/notice/index.d.ts +4 -0
  95. package/dist/core/extensions/notice/index.d.ts.map +1 -0
  96. package/dist/core/extensions/notice/index.js +3 -0
  97. package/dist/core/extensions/notice/index.js.map +1 -0
  98. package/dist/core/extensions/notice/spec.d.ts +23 -0
  99. package/dist/core/extensions/notice/spec.d.ts.map +1 -0
  100. package/dist/core/extensions/notice/spec.js +2 -0
  101. package/dist/core/extensions/notice/spec.js.map +1 -0
  102. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  103. package/dist/core/retry-fallback/settings.js +16 -1
  104. package/dist/core/retry-fallback/settings.js.map +1 -1
  105. package/dist/core/retry-fallback/validate.d.ts.map +1 -1
  106. package/dist/core/retry-fallback/validate.js +15 -2
  107. package/dist/core/retry-fallback/validate.js.map +1 -1
  108. package/dist/core/settings-manager.d.ts +7 -0
  109. package/dist/core/settings-manager.d.ts.map +1 -1
  110. package/dist/core/settings-manager.js +13 -0
  111. package/dist/core/settings-manager.js.map +1 -1
  112. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  113. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  114. package/dist/modes/interactive/interactive-mode.js +42 -7
  115. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  116. package/dist/modes/interactive/interactive-stderr-guard.d.ts.map +1 -1
  117. package/dist/modes/interactive/interactive-stderr-guard.js +37 -0
  118. package/dist/modes/interactive/interactive-stderr-guard.js.map +1 -1
  119. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +16 -0
  120. package/node_modules/@code-yeongyu/senpi-codemode/README.md +13 -3
  121. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  122. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status.ts +1 -1
  123. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +6 -6
  124. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +4 -4
  125. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +2 -2
  126. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +2 -2
  127. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +20 -2
  128. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +17 -2
  129. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +18 -7
  130. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +19 -5
  131. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  132. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +1 -1
  133. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  134. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  135. package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
  136. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  137. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  138. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  139. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  140. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  141. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  142. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  143. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  144. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  145. package/package.json +6 -6
@@ -15,6 +15,7 @@ import { parseSkillBlock } from "../../core/agent-session.js";
15
15
  import { SessionImportFileNotFoundError } from "../../core/agent-session-runtime.js";
16
16
  import { isApiKeyLoginProvider } from "../../core/auth-providers.js";
17
17
  import { CACHE_TTL_MS, collectCacheMisses, computeCacheWaste, detectCacheMiss, } from "../../core/cache-stats.js";
18
+ import { buildNoticeBox } from "../../core/extensions/notice/index.js";
18
19
  import { FooterDataProvider } from "../../core/footer-data-provider.js";
19
20
  import { appendHiddenTuiStdout } from "../../core/hidden-stdout-log.js";
20
21
  import { buildHighReasoningWarning } from "../../core/high-reasoning-warning.js";
@@ -3235,25 +3236,45 @@ export class InteractiveMode {
3235
3236
  else {
3236
3237
  this.fallbackAppliedBeforeRetryStart = true;
3237
3238
  }
3238
- this.showWarning(`Model fallback: ${event.from} -> ${event.to} (${event.reason})`);
3239
+ this.showNoticeBox({
3240
+ title: `⇄ Model fallback · ${event.from} → ${event.to}`,
3241
+ tone: "warning",
3242
+ why: `Retry switched models (${event.reason}); the turn continues on ${event.to}.`,
3243
+ });
3239
3244
  this.setExtensionStatus(FALLBACK_STATUS_KEY, `fallback: ${event.to}`);
3240
3245
  break;
3241
3246
  }
3242
3247
  case "retry_fallback_succeeded":
3243
- this.showStatus(`Fallback model ${event.model} responded`);
3248
+ this.showNoticeBox({
3249
+ title: `✓ Fallback model responded · ${event.model}`,
3250
+ tone: "success",
3251
+ why: "The fallback chain answered; the session stays on it until the revert policy fires.",
3252
+ });
3244
3253
  break;
3245
3254
  case "retry_fallback_reverted":
3246
- this.showStatus(`Reverted to ${event.to}`);
3255
+ this.showNoticeBox({
3256
+ title: `⇄ Reverted to ${event.to}`,
3257
+ tone: "accent",
3258
+ why: "The original model is back after its cooldown lapsed.",
3259
+ });
3247
3260
  this.setExtensionStatus(FALLBACK_STATUS_KEY, undefined);
3248
3261
  break;
3249
3262
  case "retry_fallback_exhausted":
3250
- this.showError(`Fallback chain exhausted for ${event.chainKey}: ${event.lastError}`);
3263
+ this.showNoticeBox({
3264
+ title: `✕ Fallback chain exhausted · ${event.chainKey}`,
3265
+ tone: "error",
3266
+ why: event.lastError,
3267
+ });
3251
3268
  this.setExtensionStatus(FALLBACK_STATUS_KEY, undefined);
3252
3269
  break;
3253
3270
  case "server_fallback_aborted":
3254
- this.showWarning(event.chainConfigured
3255
- ? `Server fallback ${event.from} -> ${event.to} aborted; retrying on your fallback chain`
3256
- : `Server fallback ${event.from} -> ${event.to} aborted; no chain configured (set one with /fallback)`);
3271
+ this.showNoticeBox({
3272
+ title: `⚠ Server fallback aborted · ${event.from} ${event.to}`,
3273
+ tone: "warning",
3274
+ why: event.chainConfigured
3275
+ ? "Retrying on your configured fallback chain."
3276
+ : "No fallback chain configured — set one with /fallback.",
3277
+ });
3257
3278
  break;
3258
3279
  case "auto_retry_start": {
3259
3280
  // During retry waits, isStreaming flips false between attempts. The main Esc handler
@@ -3997,6 +4018,20 @@ export class InteractiveMode {
3997
4018
  this.chatContainer.addChild(new Text(theme.fg("error", `Error: ${sanitizeTuiErrorMessage(errorMessage)}`), 1, 0));
3998
4019
  this.ui.requestRender();
3999
4020
  }
4021
+ showNoticeBox(spec) {
4022
+ const sanitized = {
4023
+ ...spec,
4024
+ title: sanitizeTuiErrorMessage(spec.title),
4025
+ why: sanitizeTuiErrorMessage(spec.why),
4026
+ ...(spec.extra === undefined
4027
+ ? {}
4028
+ : { extra: spec.extra.map((line) => ({ ...line, text: sanitizeTuiErrorMessage(line.text) })) }),
4029
+ ...(spec.expandedLine === undefined ? {} : { expandedLine: sanitizeTuiErrorMessage(spec.expandedLine) }),
4030
+ };
4031
+ this.chatContainer.addChild(new Spacer(1));
4032
+ this.chatContainer.addChild(buildNoticeBox(sanitized, { expanded: this.toolOutputExpanded }, theme));
4033
+ this.ui.requestRender();
4034
+ }
4000
4035
  showWarning(warningMessage) {
4001
4036
  this.chatContainer.addChild(new Spacer(1));
4002
4037
  this.chatContainer.addChild(new Text(theme.fg("warning", `Warning: ${warningMessage}`), 1, 0));