@code-yeongyu/senpi 2026.7.30-2 → 2026.7.31-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/core/agent-session.d.ts +48 -12
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +110 -18
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  7. package/dist/core/dynamic-prompt/build.js +4 -0
  8. package/dist/core/dynamic-prompt/build.js.map +1 -1
  9. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.d.ts +2 -2
  10. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.d.ts.map +1 -1
  11. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.js +25 -25
  12. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-command.js.map +1 -1
  13. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.d.ts.map +1 -1
  14. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.js.map +1 -1
  15. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.d.ts +1 -1
  16. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.d.ts.map +1 -1
  17. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.js +2 -2
  18. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-management.js.map +1 -1
  19. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.d.ts +9 -9
  20. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.d.ts.map +1 -1
  21. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.js +2 -2
  22. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/accounts.js.map +1 -1
  23. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.d.ts +1 -1
  24. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.d.ts.map +1 -1
  25. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.js +3 -3
  26. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/affinity.js.map +1 -1
  27. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts +21 -0
  28. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts.map +1 -0
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js +30 -0
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js.map +1 -0
  31. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/auth-lane.d.ts +8 -4
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +1 -0
  33. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/auth-lane.js +34 -25
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +1 -0
  35. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.js.map +1 -1
  37. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.d.ts.map +1 -1
  38. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.js.map +1 -1
  39. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.d.ts +1 -1
  40. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.js +1 -1
  42. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/errors.js.map +1 -1
  43. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.d.ts.map +1 -1
  44. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.js.map +1 -1
  45. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.js +1 -1
  47. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.js.map +1 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts +14 -0
  49. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts.map +1 -0
  50. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/guidance.js +37 -1
  51. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js.map +1 -0
  52. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts +4 -0
  53. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts.map +1 -0
  54. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/index.js +12 -10
  55. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -0
  56. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.d.ts +3 -3
  57. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/oauth-login.js +2 -2
  59. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +1 -0
  60. package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts +18 -0
  61. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/options.d.ts.map +1 -1
  62. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/options.js +70 -10
  63. package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +1 -0
  64. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.js +32 -19
  66. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +1 -0
  67. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.d.ts +1 -0
  68. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.d.ts.map +1 -1
  69. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.js.map +1 -1
  70. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts +30 -0
  71. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -0
  72. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js +197 -0
  73. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -0
  74. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts +18 -0
  75. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js +33 -0
  77. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js.map +1 -0
  78. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts +3 -0
  79. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +134 -0
  81. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +1 -0
  82. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +85 -0
  83. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +270 -0
  85. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -0
  86. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts +17 -0
  87. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +217 -0
  89. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -0
  90. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts +49 -0
  91. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -0
  92. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +204 -0
  93. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -0
  94. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts +28 -0
  95. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js +107 -0
  97. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -0
  98. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts +2 -0
  99. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts.map +1 -0
  100. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js +10 -0
  101. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js.map +1 -0
  102. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.js.map +1 -1
  104. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream.d.ts +1 -1
  105. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -0
  106. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream.js +72 -53
  107. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -0
  108. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts +3 -0
  109. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts.map +1 -0
  110. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js +25 -0
  111. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js.map +1 -0
  112. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.d.ts +1 -1
  113. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.d.ts.map +1 -1
  114. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.js +2 -2
  115. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tool-watch.js.map +1 -1
  116. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.js.map +1 -1
  118. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +18 -0
  119. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -0
  120. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +69 -0
  121. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -0
  122. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  123. package/dist/core/extensions/builtin/compaction/index.js +28 -2
  124. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  125. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -0
  126. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/compaction/openai-remote.js +15 -4
  128. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  129. package/dist/core/extensions/builtin/compaction/speculative.d.ts +4 -1
  130. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/compaction/speculative.js +39 -20
  132. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  133. package/dist/core/extensions/builtin/compaction/task-intent.d.ts +2 -6
  134. package/dist/core/extensions/builtin/compaction/task-intent.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/compaction/task-intent.js +10 -9
  136. package/dist/core/extensions/builtin/compaction/task-intent.js.map +1 -1
  137. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +6 -0
  138. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -0
  139. package/dist/core/extensions/builtin/goal/continuation-recovery.js +20 -0
  140. package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -0
  141. package/dist/core/extensions/builtin/goal/continuation.d.ts +2 -4
  142. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  143. package/dist/core/extensions/builtin/goal/continuation.js +2 -8
  144. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  145. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts +19 -0
  146. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -0
  147. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js +48 -0
  148. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js.map +1 -0
  149. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  150. package/dist/core/extensions/builtin/goal/index.js +17 -15
  151. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  152. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  153. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +12 -10
  154. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  155. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +5 -1
  156. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  157. package/dist/core/extensions/builtin/goal/monitor-continuation.js +94 -52
  158. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  159. package/dist/core/extensions/builtin/goal/persistence.d.ts +1 -0
  160. package/dist/core/extensions/builtin/goal/persistence.d.ts.map +1 -1
  161. package/dist/core/extensions/builtin/goal/persistence.js +49 -7
  162. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  163. package/dist/core/extensions/builtin/goal/ui.d.ts +1 -0
  164. package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -1
  165. package/dist/core/extensions/builtin/goal/ui.js +11 -2
  166. package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
  167. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/index.js +5 -2
  169. package/dist/core/extensions/builtin/index.js.map +1 -1
  170. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts +31 -0
  171. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -0
  172. package/dist/core/extensions/builtin/loop-guard/detectors.js +111 -0
  173. package/dist/core/extensions/builtin/loop-guard/detectors.js.map +1 -0
  174. package/dist/core/extensions/builtin/loop-guard/index.d.ts +3 -0
  175. package/dist/core/extensions/builtin/loop-guard/index.d.ts.map +1 -0
  176. package/dist/core/extensions/builtin/loop-guard/index.js +31 -0
  177. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -0
  178. package/dist/core/extensions/builtin/loop-guard/notice.d.ts +5 -0
  179. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -0
  180. package/dist/core/extensions/builtin/loop-guard/notice.js +42 -0
  181. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -0
  182. package/dist/core/extensions/builtin/loop-guard/policy.d.ts +30 -0
  183. package/dist/core/extensions/builtin/loop-guard/policy.d.ts.map +1 -0
  184. package/dist/core/extensions/builtin/loop-guard/policy.js +30 -0
  185. package/dist/core/extensions/builtin/loop-guard/policy.js.map +1 -0
  186. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts +4 -0
  187. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -0
  188. package/dist/core/extensions/builtin/loop-guard/renderer.js +50 -0
  189. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -0
  190. package/dist/core/extensions/builtin/loop-guard/similarity.d.ts +13 -0
  191. package/dist/core/extensions/builtin/loop-guard/similarity.d.ts.map +1 -0
  192. package/dist/core/extensions/builtin/loop-guard/similarity.js +51 -0
  193. package/dist/core/extensions/builtin/loop-guard/similarity.js.map +1 -0
  194. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts +13 -0
  195. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -0
  196. package/dist/core/extensions/builtin/loop-guard/tracker.js +39 -0
  197. package/dist/core/extensions/builtin/loop-guard/tracker.js.map +1 -0
  198. package/dist/core/extensions/builtin/monitor-state-event.d.ts +10 -0
  199. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  200. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  201. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/prompt-preset/index.js +8 -4
  203. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  204. package/dist/core/extensions/builtin/rules/index.js +4 -3
  205. package/dist/core/extensions/builtin/rules/index.js.map +1 -1
  206. package/dist/core/extensions/builtin/rules/rules/constants.d.ts +11 -0
  207. package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/rules/rules/constants.js +11 -0
  209. package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
  210. package/dist/core/extensions/builtin/rules/rules/formatter.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/rules/rules/formatter.js +15 -1
  212. package/dist/core/extensions/builtin/rules/rules/formatter.js.map +1 -1
  213. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  214. package/dist/core/extensions/builtin/service-tier.js +23 -21
  215. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  216. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  217. package/dist/core/extensions/builtin/terminal/extension.js +21 -7
  218. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  219. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +2 -0
  220. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  221. package/dist/core/extensions/builtin/terminal/monitor-registry.js +2 -0
  222. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  223. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts +37 -0
  224. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -0
  225. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js +61 -0
  226. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js.map +1 -0
  227. package/dist/core/extensions/builtin/terminal/monitor-status.d.ts +9 -1
  228. package/dist/core/extensions/builtin/terminal/monitor-status.d.ts.map +1 -1
  229. package/dist/core/extensions/builtin/terminal/monitor-status.js +35 -2
  230. package/dist/core/extensions/builtin/terminal/monitor-status.js.map +1 -1
  231. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts +1 -1
  232. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
  233. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js +88 -29
  234. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
  235. package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts +4 -0
  236. package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts.map +1 -0
  237. package/dist/core/extensions/builtin/ttsr/builtin-rules.js +20 -0
  238. package/dist/core/extensions/builtin/ttsr/builtin-rules.js.map +1 -0
  239. package/dist/core/extensions/builtin/ttsr/commands.js +9 -1
  240. package/dist/core/extensions/builtin/ttsr/commands.js.map +1 -1
  241. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  242. package/dist/core/extensions/builtin/ttsr/index.js +4 -3
  243. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  244. package/dist/core/extensions/builtin/ttsr/manager.js +1 -1
  245. package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
  246. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
  247. package/dist/core/extensions/builtin/websearch/websearch/renderers.js +1 -1
  248. package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
  249. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
  250. package/dist/core/extensions/builtin/websearch/websearch/search.js +1 -3
  251. package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
  252. package/dist/core/extensions/index.d.ts +1 -1
  253. package/dist/core/extensions/index.d.ts.map +1 -1
  254. package/dist/core/extensions/index.js.map +1 -1
  255. package/dist/core/extensions/loader.d.ts.map +1 -1
  256. package/dist/core/extensions/loader.js +5 -0
  257. package/dist/core/extensions/loader.js.map +1 -1
  258. package/dist/core/extensions/runner.d.ts +1 -1
  259. package/dist/core/extensions/runner.d.ts.map +1 -1
  260. package/dist/core/extensions/runner.js +3 -1
  261. package/dist/core/extensions/runner.js.map +1 -1
  262. package/dist/core/extensions/types.d.ts +22 -1
  263. package/dist/core/extensions/types.d.ts.map +1 -1
  264. package/dist/core/extensions/types.js.map +1 -1
  265. package/dist/core/thinking-levels.d.ts.map +1 -1
  266. package/dist/core/thinking-levels.js +23 -3
  267. package/dist/core/thinking-levels.js.map +1 -1
  268. package/dist/index.d.ts +1 -1
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js.map +1 -1
  271. package/dist/modes/app-server/server/account.d.ts +1 -1
  272. package/dist/modes/app-server/server/account.js +1 -1
  273. package/dist/modes/app-server/server/account.js.map +1 -1
  274. package/dist/modes/app-server/server/server-core.js +1 -1
  275. package/dist/modes/app-server/server/server-core.js.map +1 -1
  276. package/dist/modes/interactive/compaction-queue-transfer.d.ts +2 -0
  277. package/dist/modes/interactive/compaction-queue-transfer.d.ts.map +1 -1
  278. package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
  279. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  280. package/dist/modes/interactive/components/footer.js +9 -5
  281. package/dist/modes/interactive/components/footer.js.map +1 -1
  282. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  283. package/dist/modes/interactive/interactive-mode.js +37 -11
  284. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  285. package/dist/modes/rpc/connection-handler.js +3 -3
  286. package/dist/modes/rpc/connection-handler.js.map +1 -1
  287. package/docs/extensions.md +10 -0
  288. package/docs/providers.md +21 -5
  289. package/docs/release-guide.md +2 -2
  290. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +27 -0
  291. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  292. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status-ticker.ts +79 -0
  293. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status.ts +36 -3
  294. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +26 -12
  295. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +9 -0
  296. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  297. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -0
  298. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  299. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  300. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +10 -15
  302. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +2 -2
  304. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +2 -2
  306. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +2 -2
  308. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  309. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -2
  310. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +1 -0
  312. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  313. package/node_modules/@earendil-works/pi-ai/dist/models.js +69 -19
  314. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  318. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  324. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -0
  325. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  326. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  327. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.d.ts +3 -0
  328. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.d.ts.map +1 -0
  329. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.js +36 -0
  330. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.js.map +1 -0
  331. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  332. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  333. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  334. package/package.json +6 -6
  335. package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.d.ts.map +0 -1
  336. package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.js.map +0 -1
  337. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts +0 -6
  338. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts.map +0 -1
  339. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.js.map +0 -1
  340. package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts +0 -4
  341. package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts.map +0 -1
  342. package/dist/core/extensions/builtin/claude-agent-sdk/index.js.map +0 -1
  343. package/dist/core/extensions/builtin/claude-agent-sdk/oauth-login.js.map +0 -1
  344. package/dist/core/extensions/builtin/claude-agent-sdk/options.d.ts +0 -16
  345. package/dist/core/extensions/builtin/claude-agent-sdk/options.js.map +0 -1
  346. package/dist/core/extensions/builtin/claude-agent-sdk/prompt-bridge.js.map +0 -1
  347. package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts +0 -15
  348. package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts.map +0 -1
  349. package/dist/core/extensions/builtin/claude-agent-sdk/settings.js +0 -41
  350. package/dist/core/extensions/builtin/claude-agent-sdk/settings.js.map +0 -1
  351. package/dist/core/extensions/builtin/claude-agent-sdk/stream.d.ts.map +0 -1
  352. package/dist/core/extensions/builtin/claude-agent-sdk/stream.js.map +0 -1
  353. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.d.ts +0 -0
  354. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.js +0 -0
  355. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.d.ts +0 -0
  356. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.js +0 -0
  357. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.d.ts +0 -0
  358. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.js +0 -0
  359. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.d.ts +0 -0
  360. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.js +0 -0
  361. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.d.ts +0 -0
  362. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.d.ts +0 -0
  363. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.js +0 -0
  364. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.d.ts +0 -0
  365. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.js +0 -0
  366. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.d.ts +0 -0
  367. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.js +0 -0
@@ -195,10 +195,14 @@ export class AgentSession {
195
195
  this._isAgentRunActive = false;
196
196
  this._toolExecutionDepth = 0;
197
197
  this._promptStartPending = false;
198
+ this._nextInputId = 0;
198
199
  /** Tracks pending steering messages for UI display. Removed when delivered. */
199
200
  this._steeringMessages = [];
200
201
  /** Tracks pending follow-up messages for UI display. Removed when delivered. */
201
202
  this._followUpMessages = [];
203
+ /** Recovery-only order across both native queue modes and TUI compaction ownership. */
204
+ this._queuedInputOrder = [];
205
+ this._nextQueuedInputOrder = 0;
202
206
  /** Messages queued to be included with the next user prompt as context ("asides"). */
203
207
  this._pendingNextTurnMessages = [];
204
208
  // Queues held while the first post-compaction response is classified. Agent
@@ -234,7 +238,7 @@ export class AgentSession {
234
238
  this._userAbortPromise = undefined;
235
239
  this._agentAbortSource = undefined;
236
240
  this._suppressQueuedContinuationAfterUserAbort = false;
237
- /** Set when clearQueue() drains non-empty queues, so abort() can detect the gap even after queues are cleared. */
241
+ /** Set when clearQueue({ abortWillFollow: true }) drains queues immediately before abort(). */
238
242
  this._hadClearedQueuedMessages = false;
239
243
  this._extensionEventSignal = undefined;
240
244
  // Bash execution state
@@ -252,6 +256,7 @@ export class AgentSession {
252
256
  // Base system prompt (without extension appends) - used to apply fresh appends each turn
253
257
  this._baseSystemPrompt = "";
254
258
  this._currentServiceTier = undefined;
259
+ this._sessionFastMode = false;
255
260
  this._lastHighReasoningWarningKey = undefined;
256
261
  // Track last assistant message for auto-compaction check
257
262
  this._lastAssistantMessage = undefined;
@@ -733,7 +738,9 @@ export class AgentSession {
733
738
  this.agent.steer(message);
734
739
  const userMessage = queuedMessages.find((message) => message.role === "user");
735
740
  if (userMessage?.role === "user") {
736
- this._steeringMessages.push(this._extractUserMessageText(userMessage.content));
741
+ const text = this._extractUserMessageText(userMessage.content);
742
+ this._steeringMessages.push(text);
743
+ this._recordQueuedInput(text, "steer");
737
744
  this._emitQueueUpdate();
738
745
  }
739
746
  return;
@@ -941,6 +948,7 @@ export class AgentSession {
941
948
  const steeringIndex = this._steeringMessages.indexOf(messageText);
942
949
  if (steeringIndex !== -1) {
943
950
  this._steeringMessages.splice(steeringIndex, 1);
951
+ this._removeQueuedInput(messageText, "steer");
944
952
  this._emitQueueUpdate();
945
953
  }
946
954
  else {
@@ -948,6 +956,7 @@ export class AgentSession {
948
956
  const followUpIndex = this._followUpMessages.indexOf(messageText);
949
957
  if (followUpIndex !== -1) {
950
958
  this._followUpMessages.splice(followUpIndex, 1);
959
+ this._removeQueuedInput(messageText, "followUp");
951
960
  this._emitQueueUpdate();
952
961
  }
953
962
  }
@@ -1342,6 +1351,22 @@ export class AgentSession {
1342
1351
  get serviceTier() {
1343
1352
  return this._currentServiceTier;
1344
1353
  }
1354
+ /**
1355
+ * True when the active model is served at the priority ("fast") tier: either the model
1356
+ * itself is configured for it (an `openai` `-fast` catalog variant, a scoped
1357
+ * `provider/id:priority`) or an extension turned fast mode on for this session.
1358
+ *
1359
+ * Display-only: it never feeds request composition, so an extension toggling fast mode
1360
+ * for one provider cannot leak `service_tier` into another provider's payload.
1361
+ * `serviceTier` stays the single request-side source.
1362
+ */
1363
+ isFastModeActive() {
1364
+ return this._sessionFastMode || this._currentServiceTier === "priority";
1365
+ }
1366
+ /** Session-scoped fast-mode indicator; never persisted, reset on session start. */
1367
+ setSessionFastMode(enabled) {
1368
+ this._sessionFastMode = enabled;
1369
+ }
1345
1370
  /**
1346
1371
  * Explicit scoped/favorite tiers win; otherwise fall back to the model's
1347
1372
  * configured serviceTier from models.json/extension compatibility config.
@@ -1683,6 +1708,12 @@ export class AgentSession {
1683
1708
  let messages;
1684
1709
  let titlePrompt;
1685
1710
  let consumedNextTurnMessages;
1711
+ let inputId;
1712
+ const emitInputDisposition = async (disposition) => {
1713
+ if (inputId === undefined)
1714
+ return;
1715
+ await this._extensionRunner.emit({ type: "input_disposition", inputId, disposition });
1716
+ };
1686
1717
  try {
1687
1718
  // Handle extension commands first (execute immediately, even during streaming)
1688
1719
  // Extension commands manage their own LLM interaction via pi.sendMessage()
@@ -1700,9 +1731,11 @@ export class AgentSession {
1700
1731
  let currentText = text;
1701
1732
  let currentImages = options?.images;
1702
1733
  if (this._extensionRunner.hasHandlers("input")) {
1703
- const inputResult = await this._extensionRunner.emitInput(currentText, currentImages, options?.source ?? "interactive", this.isStreaming ? options?.streamingBehavior : undefined);
1734
+ inputId = `${this.sessionManager.getSessionId()}:${++this._nextInputId}`;
1735
+ const inputResult = await this._extensionRunner.emitInput(currentText, currentImages, options?.source ?? "interactive", this.isStreaming ? options?.streamingBehavior : undefined, inputId);
1704
1736
  throwIfCancelled();
1705
1737
  if (inputResult.action === "handled") {
1738
+ await emitInputDisposition("handled");
1706
1739
  promptDisposition?.("handled");
1707
1740
  preflightResult?.(true);
1708
1741
  return;
@@ -1733,6 +1766,7 @@ export class AgentSession {
1733
1766
  else {
1734
1767
  await this._queueSteer(expandedText, currentImages);
1735
1768
  }
1769
+ await emitInputDisposition("queued");
1736
1770
  promptDisposition?.("queued");
1737
1771
  preflightResult?.(true);
1738
1772
  return;
@@ -1750,6 +1784,7 @@ export class AgentSession {
1750
1784
  else {
1751
1785
  await this._queueSteer(expandedText, currentImages);
1752
1786
  }
1787
+ await emitInputDisposition("queued");
1753
1788
  promptDisposition?.("queued");
1754
1789
  preflightResult?.(true);
1755
1790
  return;
@@ -1773,6 +1808,7 @@ export class AgentSession {
1773
1808
  else {
1774
1809
  await this._queueSteer(expandedText, currentImages);
1775
1810
  }
1811
+ await emitInputDisposition("queued");
1776
1812
  promptDisposition?.("queued");
1777
1813
  preflightResult?.(true);
1778
1814
  return;
@@ -1793,6 +1829,7 @@ export class AgentSession {
1793
1829
  else {
1794
1830
  await this._queueSteer(expandedText, currentImages);
1795
1831
  }
1832
+ await emitInputDisposition("queued");
1796
1833
  promptDisposition?.("queued");
1797
1834
  preflightResult?.(true);
1798
1835
  return;
@@ -1866,8 +1903,11 @@ export class AgentSession {
1866
1903
  // next-turn, and before_agent_start additions are also provider-visible,
1867
1904
  // so make one final admission decision against the complete request.
1868
1905
  await this._enforceFinalProviderAdmission(messages);
1906
+ throwIfCancelled();
1907
+ await emitInputDisposition("started");
1869
1908
  }
1870
1909
  catch (error) {
1910
+ await emitInputDisposition("rejected");
1871
1911
  if (consumedNextTurnMessages && consumedNextTurnMessages.length > 0) {
1872
1912
  this._pendingNextTurnMessages = [...consumedNextTurnMessages, ...this._pendingNextTurnMessages];
1873
1913
  }
@@ -1881,7 +1921,6 @@ export class AgentSession {
1881
1921
  if (!messages) {
1882
1922
  return;
1883
1923
  }
1884
- throwIfCancelled();
1885
1924
  promptDisposition?.("started");
1886
1925
  preflightResult?.(true);
1887
1926
  if (options?.thinkingLevel !== undefined) {
@@ -2001,7 +2040,7 @@ export class AgentSession {
2001
2040
  * @param images Optional image attachments to include with the message
2002
2041
  * @throws Error if text is an extension command
2003
2042
  */
2004
- async steer(text, images) {
2043
+ async steer(text, images, recovery) {
2005
2044
  // Check for extension commands (cannot be queued)
2006
2045
  if (text.startsWith("/")) {
2007
2046
  this._throwIfExtensionCommand(text);
@@ -2009,7 +2048,7 @@ export class AgentSession {
2009
2048
  // Expand skill commands and prompt templates
2010
2049
  let expandedText = this._expandSkillCommand(text);
2011
2050
  expandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);
2012
- await this._queueSteer(expandedText, images);
2051
+ await this._queueSteer(expandedText, images, recovery?.enqueueOrder);
2013
2052
  }
2014
2053
  /**
2015
2054
  * Queue a follow-up message to be processed after the agent finishes.
@@ -2018,7 +2057,7 @@ export class AgentSession {
2018
2057
  * @param images Optional image attachments to include with the message
2019
2058
  * @throws Error if text is an extension command
2020
2059
  */
2021
- async followUp(text, images) {
2060
+ async followUp(text, images, recovery) {
2022
2061
  // Check for extension commands (cannot be queued)
2023
2062
  if (text.startsWith("/")) {
2024
2063
  this._throwIfExtensionCommand(text);
@@ -2026,7 +2065,7 @@ export class AgentSession {
2026
2065
  // Expand skill commands and prompt templates
2027
2066
  let expandedText = this._expandSkillCommand(text);
2028
2067
  expandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);
2029
- await this._queueFollowUp(expandedText, images);
2068
+ await this._queueFollowUp(expandedText, images, recovery?.enqueueOrder);
2030
2069
  }
2031
2070
  _startSessionTitleGeneration(firstPrompt) {
2032
2071
  if (!this._autoTitleSessions || this.sessionManager.getSessionName() || shouldSkipSessionTitle(firstPrompt)) {
@@ -2100,8 +2139,9 @@ export class AgentSession {
2100
2139
  /**
2101
2140
  * Internal: Queue a steering message (already expanded, no extension command check).
2102
2141
  */
2103
- async _queueSteer(text, images) {
2142
+ async _queueSteer(text, images, enqueueOrder) {
2104
2143
  this._steeringMessages.push(text);
2144
+ this._recordQueuedInput(text, "steer", enqueueOrder);
2105
2145
  this._sessionLogger.debug("queue_enqueue", { mode: "steer", count: this._steeringMessages.length });
2106
2146
  this._emitQueueUpdate();
2107
2147
  const content = [{ type: "text", text }];
@@ -2118,8 +2158,9 @@ export class AgentSession {
2118
2158
  /**
2119
2159
  * Internal: Queue a follow-up message (already expanded, no extension command check).
2120
2160
  */
2121
- async _queueFollowUp(text, images) {
2161
+ async _queueFollowUp(text, images, enqueueOrder) {
2122
2162
  this._followUpMessages.push(text);
2163
+ this._recordQueuedInput(text, "followUp", enqueueOrder);
2123
2164
  this._sessionLogger.debug("queue_enqueue", { mode: "followUp", count: this._followUpMessages.length });
2124
2165
  this._emitQueueUpdate();
2125
2166
  const content = [{ type: "text", text }];
@@ -2311,26 +2352,46 @@ export class AgentSession {
2311
2352
  finishSessionWork?.();
2312
2353
  }
2313
2354
  }
2355
+ /** Reserve a global order for input temporarily owned outside the native queues. */
2356
+ reserveQueuedInputOrder() {
2357
+ this._nextQueuedInputOrder += 1;
2358
+ return this._nextQueuedInputOrder;
2359
+ }
2360
+ _recordQueuedInput(text, mode, enqueueOrder) {
2361
+ const order = enqueueOrder ?? this.reserveQueuedInputOrder();
2362
+ this._nextQueuedInputOrder = Math.max(this._nextQueuedInputOrder, order);
2363
+ this._queuedInputOrder.push({ text, mode, enqueueOrder: order });
2364
+ }
2365
+ _removeQueuedInput(text, mode) {
2366
+ const index = this._queuedInputOrder.findIndex((message) => message.mode === mode && message.text === text);
2367
+ if (index !== -1)
2368
+ this._queuedInputOrder.splice(index, 1);
2369
+ }
2314
2370
  /**
2315
- * Clear all queued messages and return them.
2316
- * Useful for restoring to editor when user aborts.
2317
- * @returns Object with steering and followUp arrays
2371
+ * Clear all queued messages and return them. The non-enumerable `ordered`
2372
+ * view preserves legacy object equality and native queue semantics.
2373
+ * @param options.abortWillFollow Mark a non-empty drain so an immediately following abort can emit session_abort.
2318
2374
  */
2319
- clearQueue() {
2375
+ clearQueue(options = { abortWillFollow: false }) {
2320
2376
  const steering = [...this._steeringMessages];
2321
2377
  const followUp = [...this._followUpMessages];
2322
- if (steering.length > 0 || followUp.length > 0)
2378
+ const ordered = [...this._queuedInputOrder].sort((a, b) => a.enqueueOrder - b.enqueueOrder);
2379
+ if (options.abortWillFollow && (steering.length > 0 || followUp.length > 0)) {
2323
2380
  this._hadClearedQueuedMessages = true;
2381
+ }
2324
2382
  // Clear every queue synchronously. Deferred post-compaction messages are
2325
2383
  // already represented in visible bookkeeping, so they must not be returned
2326
2384
  // a second time or later resurrected into Agent's native queues.
2327
2385
  this._steeringMessages = [];
2328
2386
  this._followUpMessages = [];
2387
+ this._queuedInputOrder = [];
2329
2388
  this._postCompactionDeferredSteeringMessages = [];
2330
2389
  this._postCompactionDeferredFollowUpMessages = [];
2331
2390
  this.agent.clearAllQueues();
2332
2391
  this._emitQueueUpdate();
2333
- return { steering, followUp };
2392
+ const cleared = { steering, followUp };
2393
+ Object.defineProperty(cleared, "ordered", { value: ordered, enumerable: false });
2394
+ return cleared;
2334
2395
  }
2335
2396
  /** Number of pending messages (includes both steering and follow-up) */
2336
2397
  get pendingMessageCount() {
@@ -3287,6 +3348,8 @@ export class AgentSession {
3287
3348
  if (compacted)
3288
3349
  return true;
3289
3350
  }
3351
+ if (this._isCompactionOnCooldown())
3352
+ return false;
3290
3353
  throw new RequiredCompactionError();
3291
3354
  }
3292
3355
  /**
@@ -3325,6 +3388,8 @@ export class AgentSession {
3325
3388
  throw new RequiredCompactionError();
3326
3389
  }
3327
3390
  const compacted = await this._runPrePromptCompaction(lastAssistantMessage, false, "pre_prompt");
3391
+ if (!compacted && !isOversized() && this._isCompactionOnCooldown())
3392
+ return;
3328
3393
  if (!compacted || isOversized()) {
3329
3394
  throw new RequiredCompactionError();
3330
3395
  }
@@ -3470,6 +3535,10 @@ export class AgentSession {
3470
3535
  }
3471
3536
  return false;
3472
3537
  }
3538
+ _isCompactionOnCooldown() {
3539
+ const state = this._compactionLifecycle.state;
3540
+ return state.status === "failed" && state.rejectionCause === "circuit-breaker";
3541
+ }
3473
3542
  async _runPrePromptCompaction(lastAssistantMessage, skipAbortedCheck, reason = "pre_prompt", willRetry = false, allowSummaryOnly = false) {
3474
3543
  const controller = new AbortController();
3475
3544
  this._claimCompactionController(controller, "compaction");
@@ -3530,8 +3599,11 @@ export class AgentSession {
3530
3599
  if (!shouldCompact(contextTokens, model.contextWindow, settings))
3531
3600
  return;
3532
3601
  const compacted = await this._runPrePromptCompaction(this._findLastAssistantMessage(), true, "pre_prompt");
3533
- if (!compacted)
3602
+ if (!compacted) {
3603
+ if (this._isCompactionOnCooldown())
3604
+ return;
3534
3605
  throw new RequiredCompactionError();
3606
+ }
3535
3607
  this._scheduledContinuationRecompacted = true;
3536
3608
  }
3537
3609
  async _continueAgentAfterCurrentRun(options = {}) {
@@ -3909,6 +3981,7 @@ export class AgentSession {
3909
3981
  return true;
3910
3982
  },
3911
3983
  setSessionThinkingLevel: (level) => this.setSessionThinkingLevel(level),
3984
+ setSessionFastMode: (enabled) => this.setSessionFastMode(enabled),
3912
3985
  }, {
3913
3986
  getModel: () => this.model,
3914
3987
  getServiceTier: () => this.serviceTier,
@@ -4398,6 +4471,15 @@ export class AgentSession {
4398
4471
  // Refusals are only retried through a new chain candidate. They never use
4399
4472
  // same-model retries or the transient over-budget fallback escape hatch.
4400
4473
  if (this._retryAttempt + 1 > settings.maxRetries) {
4474
+ if (this._retryAttempt > 0) {
4475
+ this._emit({
4476
+ type: "auto_retry_end",
4477
+ success: false,
4478
+ attempt: this._retryAttempt,
4479
+ finalError: message.errorMessage,
4480
+ });
4481
+ }
4482
+ this._retryAttempt = 0;
4401
4483
  this._resolveRetry();
4402
4484
  return "not-handled";
4403
4485
  }
@@ -4407,6 +4489,15 @@ export class AgentSession {
4407
4489
  if (exhaustedChainKey) {
4408
4490
  this._emit({ type: "retry_fallback_exhausted", chainKey: exhaustedChainKey, lastError: errorMessage });
4409
4491
  }
4492
+ if (this._retryAttempt > 0) {
4493
+ this._emit({
4494
+ type: "auto_retry_end",
4495
+ success: false,
4496
+ attempt: this._retryAttempt,
4497
+ finalError: message.errorMessage,
4498
+ });
4499
+ }
4500
+ this._retryAttempt = 0;
4410
4501
  this._resolveRetry();
4411
4502
  return "not-handled";
4412
4503
  }
@@ -4541,7 +4632,8 @@ export class AgentSession {
4541
4632
  if (compactionSettings.enabled &&
4542
4633
  model &&
4543
4634
  shouldCompact(contextTokens, model.contextWindow, compactionSettings)) {
4544
- if (!(await this._runPrePromptCompaction(message, true, "threshold", true, true))) {
4635
+ const preRetryCompaction = await this._runPrePromptCompaction(message, true, "threshold", true, true);
4636
+ if (!preRetryCompaction && !this._isCompactionOnCooldown()) {
4545
4637
  const attempt = this._retryAttempt;
4546
4638
  this._retryAttempt = 0;
4547
4639
  this._emit({