@code-yeongyu/senpi 2026.7.31 → 2026.8.1

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 (491) hide show
  1. package/CHANGELOG.md +237 -0
  2. package/dist/core/agent-session.d.ts +49 -13
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +120 -37
  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/speculative.d.ts +4 -1
  126. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/compaction/speculative.js +22 -17
  128. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  129. package/dist/core/extensions/builtin/compaction/task-intent.d.ts +2 -6
  130. package/dist/core/extensions/builtin/compaction/task-intent.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/compaction/task-intent.js +10 -9
  132. package/dist/core/extensions/builtin/compaction/task-intent.js.map +1 -1
  133. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +6 -0
  134. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -0
  135. package/dist/core/extensions/builtin/goal/continuation-recovery.js +20 -0
  136. package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -0
  137. package/dist/core/extensions/builtin/goal/continuation.d.ts +2 -4
  138. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  139. package/dist/core/extensions/builtin/goal/continuation.js +2 -8
  140. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  141. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts +19 -0
  142. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -0
  143. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js +48 -0
  144. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js.map +1 -0
  145. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/goal/index.js +17 -15
  147. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  148. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +12 -10
  150. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  151. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +5 -1
  152. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  153. package/dist/core/extensions/builtin/goal/monitor-continuation.js +94 -52
  154. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  155. package/dist/core/extensions/builtin/goal/persistence.d.ts +16 -0
  156. package/dist/core/extensions/builtin/goal/persistence.d.ts.map +1 -1
  157. package/dist/core/extensions/builtin/goal/persistence.js +185 -11
  158. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  159. package/dist/core/extensions/builtin/goal/ui.d.ts +1 -0
  160. package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -1
  161. package/dist/core/extensions/builtin/goal/ui.js +11 -2
  162. package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
  163. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +15 -0
  165. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  166. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  167. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +30 -3
  168. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  169. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  170. package/dist/core/extensions/builtin/index.js +5 -2
  171. package/dist/core/extensions/builtin/index.js.map +1 -1
  172. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts +31 -0
  173. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -0
  174. package/dist/core/extensions/builtin/loop-guard/detectors.js +111 -0
  175. package/dist/core/extensions/builtin/loop-guard/detectors.js.map +1 -0
  176. package/dist/core/extensions/builtin/loop-guard/index.d.ts +3 -0
  177. package/dist/core/extensions/builtin/loop-guard/index.d.ts.map +1 -0
  178. package/dist/core/extensions/builtin/loop-guard/index.js +31 -0
  179. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -0
  180. package/dist/core/extensions/builtin/loop-guard/notice.d.ts +5 -0
  181. package/dist/core/extensions/builtin/loop-guard/notice.d.ts.map +1 -0
  182. package/dist/core/extensions/builtin/loop-guard/notice.js +42 -0
  183. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -0
  184. package/dist/core/extensions/builtin/loop-guard/policy.d.ts +30 -0
  185. package/dist/core/extensions/builtin/loop-guard/policy.d.ts.map +1 -0
  186. package/dist/core/extensions/builtin/loop-guard/policy.js +30 -0
  187. package/dist/core/extensions/builtin/loop-guard/policy.js.map +1 -0
  188. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts +4 -0
  189. package/dist/core/extensions/builtin/loop-guard/renderer.d.ts.map +1 -0
  190. package/dist/core/extensions/builtin/loop-guard/renderer.js +50 -0
  191. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -0
  192. package/dist/core/extensions/builtin/loop-guard/similarity.d.ts +13 -0
  193. package/dist/core/extensions/builtin/loop-guard/similarity.d.ts.map +1 -0
  194. package/dist/core/extensions/builtin/loop-guard/similarity.js +51 -0
  195. package/dist/core/extensions/builtin/loop-guard/similarity.js.map +1 -0
  196. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts +13 -0
  197. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -0
  198. package/dist/core/extensions/builtin/loop-guard/tracker.js +39 -0
  199. package/dist/core/extensions/builtin/loop-guard/tracker.js.map +1 -0
  200. package/dist/core/extensions/builtin/monitor-state-event.d.ts +10 -0
  201. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  203. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts +3 -0
  204. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts.map +1 -0
  205. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js +10 -0
  206. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js.map +1 -0
  207. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts +3 -0
  208. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts.map +1 -0
  209. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js +10 -0
  210. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js.map +1 -0
  211. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts +3 -0
  212. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts.map +1 -0
  213. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js +11 -0
  214. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js.map +1 -0
  215. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts +13 -0
  216. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts.map +1 -0
  217. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js +60 -0
  218. package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js.map +1 -0
  219. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  220. package/dist/core/extensions/builtin/prompt-preset/index.js +8 -4
  221. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  222. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/prompt-preset/presets.js +42 -0
  224. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  225. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  226. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  227. package/dist/core/extensions/builtin/prompt-preset/settings.js +3 -0
  228. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  229. package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
  230. package/dist/core/extensions/builtin/recommended-models/index.js +2 -1
  231. package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
  232. package/dist/core/extensions/builtin/rules/index.js +4 -3
  233. package/dist/core/extensions/builtin/rules/index.js.map +1 -1
  234. package/dist/core/extensions/builtin/rules/rules/constants.d.ts +11 -0
  235. package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -1
  236. package/dist/core/extensions/builtin/rules/rules/constants.js +11 -0
  237. package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
  238. package/dist/core/extensions/builtin/rules/rules/formatter.d.ts.map +1 -1
  239. package/dist/core/extensions/builtin/rules/rules/formatter.js +15 -1
  240. package/dist/core/extensions/builtin/rules/rules/formatter.js.map +1 -1
  241. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  242. package/dist/core/extensions/builtin/service-tier.js +23 -21
  243. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  244. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  245. package/dist/core/extensions/builtin/terminal/extension.js +21 -7
  246. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  247. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  248. package/dist/core/extensions/builtin/terminal/monitor-notify.js +42 -5
  249. package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
  250. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +2 -0
  251. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  252. package/dist/core/extensions/builtin/terminal/monitor-registry.js +2 -0
  253. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  254. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts +37 -0
  255. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -0
  256. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js +61 -0
  257. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.js.map +1 -0
  258. package/dist/core/extensions/builtin/terminal/monitor-status.d.ts +9 -1
  259. package/dist/core/extensions/builtin/terminal/monitor-status.d.ts.map +1 -1
  260. package/dist/core/extensions/builtin/terminal/monitor-status.js +35 -2
  261. package/dist/core/extensions/builtin/terminal/monitor-status.js.map +1 -1
  262. package/dist/core/extensions/builtin/terminal/tools/monitor.js +1 -1
  263. package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
  264. package/dist/core/extensions/builtin/todotools/commands.d.ts +2 -2
  265. package/dist/core/extensions/builtin/todotools/commands.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/todotools/commands.js.map +1 -1
  267. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  268. package/dist/core/extensions/builtin/todotools/index.js +6 -3
  269. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  270. package/dist/core/extensions/builtin/todotools/state.d.ts +1 -1
  271. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  272. package/dist/core/extensions/builtin/todotools/state.js +1 -1
  273. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  274. package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts +19 -0
  275. package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -0
  276. package/dist/core/extensions/builtin/todotools/todo-widget-component.js +78 -0
  277. package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -0
  278. package/dist/core/extensions/builtin/todotools/todo-widget.d.ts +13 -1
  279. package/dist/core/extensions/builtin/todotools/todo-widget.d.ts.map +1 -1
  280. package/dist/core/extensions/builtin/todotools/todo-widget.js +32 -14
  281. package/dist/core/extensions/builtin/todotools/todo-widget.js.map +1 -1
  282. package/dist/core/extensions/builtin/todotools/tools/todo.d.ts +2 -2
  283. package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/todotools/tools/todo.js +1 -1
  285. package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
  286. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts +1 -1
  287. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
  288. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js +88 -29
  289. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
  290. package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/tps.js +5 -2
  292. package/dist/core/extensions/builtin/tps.js.map +1 -1
  293. package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts +4 -0
  294. package/dist/core/extensions/builtin/ttsr/builtin-rules.d.ts.map +1 -0
  295. package/dist/core/extensions/builtin/ttsr/builtin-rules.js +20 -0
  296. package/dist/core/extensions/builtin/ttsr/builtin-rules.js.map +1 -0
  297. package/dist/core/extensions/builtin/ttsr/commands.js +9 -1
  298. package/dist/core/extensions/builtin/ttsr/commands.js.map +1 -1
  299. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  300. package/dist/core/extensions/builtin/ttsr/index.js +4 -3
  301. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  302. package/dist/core/extensions/builtin/ttsr/manager.js +1 -1
  303. package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
  304. package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/websearch/websearch/config.js +1 -0
  306. package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -1
  307. package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -1
  308. package/dist/core/extensions/builtin/websearch/websearch/native.js +16 -5
  309. package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
  310. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -1
  311. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +1 -0
  312. package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -1
  313. package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts +4 -1
  314. package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts.map +1 -1
  315. package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js +44 -37
  316. package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js.map +1 -1
  317. package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts +3 -0
  318. package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts.map +1 -0
  319. package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js +12 -0
  320. package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js.map +1 -0
  321. package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -1
  322. package/dist/core/extensions/builtin/websearch/websearch/providers.js +2 -0
  323. package/dist/core/extensions/builtin/websearch/websearch/providers.js.map +1 -1
  324. package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
  325. package/dist/core/extensions/builtin/websearch/websearch/renderers.js +3 -3
  326. package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
  327. package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -1
  328. package/dist/core/extensions/builtin/websearch/websearch/search.js +1 -3
  329. package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -1
  330. package/dist/core/extensions/builtin/websearch/websearch/tool.js +2 -2
  331. package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
  332. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -1
  333. package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
  334. package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
  335. package/dist/core/extensions/index.d.ts +1 -1
  336. package/dist/core/extensions/index.d.ts.map +1 -1
  337. package/dist/core/extensions/index.js.map +1 -1
  338. package/dist/core/extensions/loader.d.ts.map +1 -1
  339. package/dist/core/extensions/loader.js +5 -0
  340. package/dist/core/extensions/loader.js.map +1 -1
  341. package/dist/core/extensions/runner.d.ts +1 -1
  342. package/dist/core/extensions/runner.d.ts.map +1 -1
  343. package/dist/core/extensions/runner.js +3 -1
  344. package/dist/core/extensions/runner.js.map +1 -1
  345. package/dist/core/extensions/types.d.ts +22 -1
  346. package/dist/core/extensions/types.d.ts.map +1 -1
  347. package/dist/core/extensions/types.js.map +1 -1
  348. package/dist/core/model-resolver.js +2 -2
  349. package/dist/core/model-resolver.js.map +1 -1
  350. package/dist/core/thinking-levels.d.ts +5 -0
  351. package/dist/core/thinking-levels.d.ts.map +1 -1
  352. package/dist/core/thinking-levels.js +9 -39
  353. package/dist/core/thinking-levels.js.map +1 -1
  354. package/dist/index.d.ts +1 -1
  355. package/dist/index.d.ts.map +1 -1
  356. package/dist/index.js.map +1 -1
  357. package/dist/modes/app-server/server/account.d.ts +1 -1
  358. package/dist/modes/app-server/server/account.js +1 -1
  359. package/dist/modes/app-server/server/account.js.map +1 -1
  360. package/dist/modes/app-server/server/server-core.js +1 -1
  361. package/dist/modes/app-server/server/server-core.js.map +1 -1
  362. package/dist/modes/interactive/compaction-queue-transfer.d.ts +2 -0
  363. package/dist/modes/interactive/compaction-queue-transfer.d.ts.map +1 -1
  364. package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
  365. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  366. package/dist/modes/interactive/components/footer.js +9 -5
  367. package/dist/modes/interactive/components/footer.js.map +1 -1
  368. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  369. package/dist/modes/interactive/interactive-mode.js +38 -12
  370. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  371. package/dist/modes/interactive/risky-main-model-warning.d.ts +1 -1
  372. package/dist/modes/interactive/risky-main-model-warning.d.ts.map +1 -1
  373. package/dist/modes/interactive/risky-main-model-warning.js +1 -1
  374. package/dist/modes/interactive/risky-main-model-warning.js.map +1 -1
  375. package/dist/modes/rpc/connection-handler.js +3 -3
  376. package/dist/modes/rpc/connection-handler.js.map +1 -1
  377. package/docs/extensions.md +10 -0
  378. package/docs/providers.md +21 -5
  379. package/docs/release-guide.md +2 -2
  380. package/docs/settings.md +1 -1
  381. package/examples/extensions/overlay-test.ts +1 -1
  382. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +33 -0
  383. package/node_modules/@code-yeongyu/senpi-codemode/README.md +6 -3
  384. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  385. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status-ticker.ts +79 -0
  386. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/eval-status.ts +36 -3
  387. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +26 -12
  388. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +146 -0
  389. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +21 -119
  390. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +157 -0
  391. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +62 -208
  392. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +98 -0
  393. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +81 -0
  394. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-state.ts +24 -0
  395. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-eval-result.ts +140 -0
  396. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-notification-queue.ts +53 -0
  397. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +45 -0
  398. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +45 -0
  399. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +20 -342
  400. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  401. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -0
  402. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  403. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  404. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  405. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +10 -15
  406. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  407. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +2 -2
  408. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  409. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts +24 -0
  410. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -0
  411. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js +70 -0
  412. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js.map +1 -0
  413. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +2 -16
  414. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  415. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +10 -58
  416. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  417. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +2 -2
  418. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  419. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts +1 -0
  420. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts.map +1 -1
  421. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js +7 -0
  422. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js.map +1 -1
  423. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -2
  424. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  425. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -1
  426. package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
  427. package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
  428. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +14 -0
  429. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  430. package/node_modules/@earendil-works/pi-ai/dist/models.js +95 -19
  431. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  432. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  433. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  434. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  435. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  436. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  437. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  438. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  439. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  440. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  441. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  442. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -0
  443. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  444. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  445. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.d.ts +3 -0
  446. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.d.ts.map +1 -0
  447. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.js +36 -0
  448. package/node_modules/@earendil-works/pi-ai/dist/utils/unavailable-tool-text.js.map +1 -0
  449. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  450. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  451. package/node_modules/@earendil-works/pi-tui/dist/mux.js +1 -1
  452. package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
  453. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +1 -0
  454. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  455. package/node_modules/@earendil-works/pi-tui/dist/tui.js +17 -3
  456. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  457. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  458. package/package.json +6 -6
  459. package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.d.ts.map +0 -1
  460. package/dist/core/extensions/builtin/claude-agent-sdk/auth-lane.js.map +0 -1
  461. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts +0 -6
  462. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.d.ts.map +0 -1
  463. package/dist/core/extensions/builtin/claude-agent-sdk/guidance.js.map +0 -1
  464. package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts +0 -4
  465. package/dist/core/extensions/builtin/claude-agent-sdk/index.d.ts.map +0 -1
  466. package/dist/core/extensions/builtin/claude-agent-sdk/index.js.map +0 -1
  467. package/dist/core/extensions/builtin/claude-agent-sdk/oauth-login.js.map +0 -1
  468. package/dist/core/extensions/builtin/claude-agent-sdk/options.d.ts +0 -16
  469. package/dist/core/extensions/builtin/claude-agent-sdk/options.js.map +0 -1
  470. package/dist/core/extensions/builtin/claude-agent-sdk/prompt-bridge.js.map +0 -1
  471. package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts +0 -15
  472. package/dist/core/extensions/builtin/claude-agent-sdk/settings.d.ts.map +0 -1
  473. package/dist/core/extensions/builtin/claude-agent-sdk/settings.js +0 -41
  474. package/dist/core/extensions/builtin/claude-agent-sdk/settings.js.map +0 -1
  475. package/dist/core/extensions/builtin/claude-agent-sdk/stream.d.ts.map +0 -1
  476. package/dist/core/extensions/builtin/claude-agent-sdk/stream.js.map +0 -1
  477. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.d.ts +0 -0
  478. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/account-events.js +0 -0
  479. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.d.ts +0 -0
  480. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools-schema.js +0 -0
  481. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.d.ts +0 -0
  482. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/custom-tools.js +0 -0
  483. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.d.ts +0 -0
  484. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/executable.js +0 -0
  485. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/failover.d.ts +0 -0
  486. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/prompt-bridge.d.ts +0 -0
  487. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/sdk-boundary.js +0 -0
  488. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.d.ts +0 -0
  489. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/stream-protocol.js +0 -0
  490. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.d.ts +0 -0
  491. /package/dist/core/extensions/builtin/{claude-agent-sdk → claude-sdk-oauth}/tools.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server-core.js","sourceRoot":"","sources":["../../../../src/modes/app-server/server/server-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,qEAAqE,CAAC;AACrH,OAAO,EAEN,4BAA4B,GAI5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAgD,MAAM,oBAAoB,CAAC;AAElG,OAAO,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACN,uBAAuB,EAIvB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA+B,6BAA6B,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAoB5D,MAAM,OAAO,UAAU;IAStB,YAAY,OAAO,GAAsB,EAAE;QAR1B,gBAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;QAKlD,mBAAc,GAAG,IAAI,iBAAiB,EAAoB,CAAC;QAI3E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,IAAI,CAAC,SAAS;SACxB,CAAC,CAAC;QACH,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,8BAA8B,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7C,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5C,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;SACxB,CAAC,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,KAAsB;QACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,EAAgB;QAChC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,gCAAgC,GAAG,SAAS,CAAC;QACnD,CAAC;IACF,CAAC;IAED,aAAa,CAAC,EAAgB;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,YAAgC;QAC9D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IAED,mBAAmB,CAAC,YAA0B,EAAE,MAA8B;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAChD,IAAI,QAAQ,EAAE,YAAY,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACpF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,YAA0B,EAAE,QAA4B;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QAED,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,SAAS;gBACb,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC1D,OAAO;YACR,KAAK,cAAc;gBAClB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO;YACR,KAAK,UAAU;gBACd,OAAO;YACR,KAAK,kBAAkB;gBACtB,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;gBAClE,OAAO;YACR;gBACC,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,YAA0B,EAAE,YAA6B;QAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;YACtE,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,YAA6B;QACxD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAG,4BAA4B,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,IAAI,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAClD,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChC,SAAS,IAAI,CAAC,CAAC;YAChB,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,gCAAgC;QACvC,IAAI,IAAI,CAAC,gCAAgC;YAAE,OAAO;QAClD,IAAI,CAAC,gCAAgC,GAAG,8BAA8B,CAAC,CAAC,KAAK,EAAE,EAAE;YAChF,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;gBACtC,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAChD,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;gBAAE,OAAO;YAC9E,KAAK,IAAI,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,UAAsB,EAAE,OAAmB;QACzE,MAAM,QAAQ,GAAqB,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1G,IAAI,CAAC;YACJ,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,MAAM,KAAK,CAAC;QACb,CAAC;QAED,IAAI,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC;YAC/E,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,MAAM,EAAE,CAAC;QAChB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAsB,EAAE,OAAmB;QACxE,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,gBAAgB,CAAC,UAAsB,EAAE,OAAmB;QACnE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1B,KAAK,aAAa;gBACjB,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxF,KAAK,qBAAqB;gBACzB,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC;YAC7D;gBACC,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,YAA6B;QACvD,IAAI,YAAY,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC3C,OAAO;QACR,CAAC;IACF,CAAC;CACD;AAED,SAAS,WAAW,CAAC,KAAY;IAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { getAgentDir, VERSION } from \"../../../config.ts\";\nimport { subscribeProviderAccountEvents } from \"../../../core/extensions/builtin/claude-agent-sdk/account-events.ts\";\nimport {\n\ttype ClassifiedIncoming,\n\tpopulateNotificationEnvelope,\n\ttype RpcNotification,\n\ttype RpcRequest,\n\ttype RpcResponse,\n} from \"../rpc/envelope.ts\";\nimport { alreadyInitializedError, invalidParamsError, invalidRequestError } from \"../rpc/errors.ts\";\nimport { createRegistry, type MethodRegistration, type MethodRegistry } from \"../rpc/registry.ts\";\nimport type { ThreadRegistry } from \"../threads/registry.ts\";\nimport { providerAccountEventNotification, registerAppServerAccountMethods } from \"./account.ts\";\nimport { registerAppServerCatalogMethods } from \"./catalogs.ts\";\nimport { registerAppServerConfigMethods } from \"./config.ts\";\nimport {\n\tbuildInitializeResponse,\n\ttype Connection,\n\ttype ConnectionId,\n\ttype ConnectionInput,\n\tcanDeliverNotification,\n\tcreateConnection,\n\tparseInitializeParams,\n} from \"./connection.ts\";\nimport { type AppServerModelRegistry, registerAppServerModelMethods } from \"./models.ts\";\nimport { registerAppServerSkillMethods } from \"./skills.ts\";\n\nexport interface ServerCoreOptions {\n\treadonly registry?: MethodRegistry;\n\treadonly modelRegistry?: AppServerModelRegistry;\n\treadonly codexHome?: string;\n\treadonly serverCwd?: string;\n\treadonly threads?: Pick<ThreadRegistry, \"getLoadedThread\" | \"listLoaded\" | \"getMcpWireStatusAdapter\">;\n\treadonly version?: string;\n\treadonly now?: () => number;\n}\n\nexport type DeferredResponseAction = () => Promise<void> | void;\n\n/** Mutable action queue owned by exactly one in-flight request dispatch. */\ntype DeferredDispatch = {\n\treadonly connectionId: ConnectionId;\n\treadonly actions: DeferredResponseAction[];\n};\n\nexport class ServerCore {\n\tprivate readonly connections = new Map<ConnectionId, Connection>();\n\tprivate readonly registry: MethodRegistry;\n\tprivate readonly codexHome: string;\n\tprivate readonly version: string;\n\tprivate readonly now: () => number;\n\tprivate readonly activeDispatch = new AsyncLocalStorage<DeferredDispatch>();\n\tprivate unsubscribeProviderAccountEvents: (() => void) | undefined;\n\n\tconstructor(options: ServerCoreOptions = {}) {\n\t\tthis.registry = options.registry ?? createRegistry();\n\t\tthis.codexHome = options.codexHome ?? getAgentDir();\n\t\tthis.version = options.version ?? VERSION;\n\t\tthis.now = options.now ?? Date.now;\n\t\tregisterAppServerModelMethods(this.registry, {\n\t\t\tmodelRegistry: options.modelRegistry,\n\t\t\tagentDir: this.codexHome,\n\t\t});\n\t\tregisterAppServerCatalogMethods(this.registry, {\n\t\t\tmodelRegistry: options.modelRegistry,\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t\tthreads: options.threads,\n\t\t});\n\t\tregisterAppServerConfigMethods(this.registry, {\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t});\n\t\tregisterAppServerAccountMethods(this.registry, { agentDir: this.codexHome });\n\t\tregisterAppServerSkillMethods(this.registry, {\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t\tthreads: options.threads,\n\t\t});\n\t}\n\n\taddConnection(input: ConnectionInput): Connection {\n\t\tconst connection = createConnection(input);\n\t\tthis.connections.set(connection.id, connection);\n\t\tthis.subscribeToProviderAccountEvents();\n\t\treturn connection;\n\t}\n\n\tremoveConnection(id: ConnectionId): void {\n\t\tthis.connections.delete(id);\n\t\tif (this.connections.size === 0) {\n\t\t\tthis.unsubscribeProviderAccountEvents?.();\n\t\t\tthis.unsubscribeProviderAccountEvents = undefined;\n\t\t}\n\t}\n\n\tgetConnection(id: ConnectionId): Connection | undefined {\n\t\treturn this.connections.get(id);\n\t}\n\n\tregisterMethod(method: string, registration: MethodRegistration): void {\n\t\tthis.registry.register(method, registration);\n\t}\n\n\tdeferUntilResponded(connectionId: ConnectionId, action: DeferredResponseAction): boolean {\n\t\tconst dispatch = this.activeDispatch.getStore();\n\t\tif (dispatch?.connectionId !== connectionId || !this.connections.has(connectionId)) {\n\t\t\treturn false;\n\t\t}\n\t\tdispatch.actions.push(action);\n\t\treturn true;\n\t}\n\n\tasync receive(connectionId: ConnectionId, envelope: ClassifiedIncoming): Promise<void> {\n\t\tconst connection = this.connections.get(connectionId);\n\t\tif (!connection) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (envelope.kind) {\n\t\t\tcase \"request\":\n\t\t\t\tawait this.respondToRequest(connection, envelope.message);\n\t\t\t\treturn;\n\t\t\tcase \"notification\":\n\t\t\t\tthis.handleNotification(envelope.message);\n\t\t\t\treturn;\n\t\t\tcase \"response\":\n\t\t\t\treturn;\n\t\t\tcase \"protocol-invalid\":\n\t\t\t\tawait connection.send({ id: null, error: invalidRequestError() });\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn assertNever(envelope);\n\t\t}\n\t}\n\n\tasync sendNotificationToConnection(connectionId: ConnectionId, notification: RpcNotification): Promise<boolean> {\n\t\tconst connection = this.connections.get(connectionId);\n\t\tif (!connection || !canDeliverNotification(connection, notification)) {\n\t\t\treturn false;\n\t\t}\n\t\tawait connection.send(populateNotificationEnvelope(notification, this.now()));\n\t\treturn true;\n\t}\n\n\tasync broadcastNotification(notification: RpcNotification): Promise<number> {\n\t\tlet delivered = 0;\n\t\tconst envelope = populateNotificationEnvelope(notification, this.now());\n\t\tfor (const connection of this.connections.values()) {\n\t\t\tif (canDeliverNotification(connection, envelope)) {\n\t\t\t\tawait connection.send(envelope);\n\t\t\t\tdelivered += 1;\n\t\t\t}\n\t\t}\n\t\treturn delivered;\n\t}\n\n\tprivate subscribeToProviderAccountEvents(): void {\n\t\tif (this.unsubscribeProviderAccountEvents) return;\n\t\tthis.unsubscribeProviderAccountEvents = subscribeProviderAccountEvents((event) => {\n\t\t\tconst notification = providerAccountEventNotification(event);\n\t\t\tconst send = async (): Promise<void> => {\n\t\t\t\tawait this.broadcastNotification(notification);\n\t\t\t};\n\t\t\tconst dispatch = this.activeDispatch.getStore();\n\t\t\tif (dispatch && this.deferUntilResponded(dispatch.connectionId, send)) return;\n\t\t\tvoid send();\n\t\t});\n\t}\n\n\tprivate async respondToRequest(connection: Connection, request: RpcRequest): Promise<void> {\n\t\tconst dispatch: DeferredDispatch = { connectionId: connection.id, actions: [] };\n\t\tconst response = await this.activeDispatch.run(dispatch, () => this.dispatchRequest(connection, request));\n\t\ttry {\n\t\t\tawait connection.send(response);\n\t\t} catch (error) {\n\t\t\tdispatch.actions.length = 0;\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (\"error\" in response || this.connections.get(connection.id) !== connection) {\n\t\t\tdispatch.actions.length = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tconst actions = dispatch.actions.splice(0);\n\t\tfor (const action of actions) {\n\t\t\tawait action();\n\t\t}\n\t}\n\n\tprivate async dispatchRequest(connection: Connection, request: RpcRequest): Promise<RpcResponse> {\n\t\tif (request.method === \"initialize\") {\n\t\t\treturn this.handleInitialize(connection, request);\n\t\t}\n\t\treturn this.registry.dispatch(connection, request);\n\t}\n\n\tprivate handleInitialize(connection: Connection, request: RpcRequest): RpcResponse {\n\t\tif (connection.initialized) {\n\t\t\treturn { id: request.id, error: alreadyInitializedError() };\n\t\t}\n\n\t\tconst params = parseInitializeParams(request.params);\n\t\tif (!params) {\n\t\t\treturn { id: request.id, error: invalidParamsError() };\n\t\t}\n\n\t\tconst initialized = connection.initialize(params, this.version);\n\t\tswitch (initialized.kind) {\n\t\t\tcase \"initialized\":\n\t\t\t\treturn { id: request.id, result: buildInitializeResponse(connection, this.codexHome) };\n\t\t\tcase \"already-initialized\":\n\t\t\t\treturn { id: request.id, error: alreadyInitializedError() };\n\t\t\tdefault:\n\t\t\t\treturn assertNever(initialized);\n\t\t}\n\t}\n\n\tprivate handleNotification(notification: RpcNotification): void {\n\t\tif (notification.method === \"initialized\") {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unhandled app-server envelope kind: ${JSON.stringify(value)}`);\n}\n"]}
1
+ {"version":3,"file":"server-core.js","sourceRoot":"","sources":["../../../../src/modes/app-server/server/server-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { getAgentDir, VERSION } from \"../../../config.ts\";\nimport { subscribeProviderAccountEvents } from \"../../../core/extensions/builtin/claude-sdk-oauth/account-events.ts\";\nimport {\n\ttype ClassifiedIncoming,\n\tpopulateNotificationEnvelope,\n\ttype RpcNotification,\n\ttype RpcRequest,\n\ttype RpcResponse,\n} from \"../rpc/envelope.ts\";\nimport { alreadyInitializedError, invalidParamsError, invalidRequestError } from \"../rpc/errors.ts\";\nimport { createRegistry, type MethodRegistration, type MethodRegistry } from \"../rpc/registry.ts\";\nimport type { ThreadRegistry } from \"../threads/registry.ts\";\nimport { providerAccountEventNotification, registerAppServerAccountMethods } from \"./account.ts\";\nimport { registerAppServerCatalogMethods } from \"./catalogs.ts\";\nimport { registerAppServerConfigMethods } from \"./config.ts\";\nimport {\n\tbuildInitializeResponse,\n\ttype Connection,\n\ttype ConnectionId,\n\ttype ConnectionInput,\n\tcanDeliverNotification,\n\tcreateConnection,\n\tparseInitializeParams,\n} from \"./connection.ts\";\nimport { type AppServerModelRegistry, registerAppServerModelMethods } from \"./models.ts\";\nimport { registerAppServerSkillMethods } from \"./skills.ts\";\n\nexport interface ServerCoreOptions {\n\treadonly registry?: MethodRegistry;\n\treadonly modelRegistry?: AppServerModelRegistry;\n\treadonly codexHome?: string;\n\treadonly serverCwd?: string;\n\treadonly threads?: Pick<ThreadRegistry, \"getLoadedThread\" | \"listLoaded\" | \"getMcpWireStatusAdapter\">;\n\treadonly version?: string;\n\treadonly now?: () => number;\n}\n\nexport type DeferredResponseAction = () => Promise<void> | void;\n\n/** Mutable action queue owned by exactly one in-flight request dispatch. */\ntype DeferredDispatch = {\n\treadonly connectionId: ConnectionId;\n\treadonly actions: DeferredResponseAction[];\n};\n\nexport class ServerCore {\n\tprivate readonly connections = new Map<ConnectionId, Connection>();\n\tprivate readonly registry: MethodRegistry;\n\tprivate readonly codexHome: string;\n\tprivate readonly version: string;\n\tprivate readonly now: () => number;\n\tprivate readonly activeDispatch = new AsyncLocalStorage<DeferredDispatch>();\n\tprivate unsubscribeProviderAccountEvents: (() => void) | undefined;\n\n\tconstructor(options: ServerCoreOptions = {}) {\n\t\tthis.registry = options.registry ?? createRegistry();\n\t\tthis.codexHome = options.codexHome ?? getAgentDir();\n\t\tthis.version = options.version ?? VERSION;\n\t\tthis.now = options.now ?? Date.now;\n\t\tregisterAppServerModelMethods(this.registry, {\n\t\t\tmodelRegistry: options.modelRegistry,\n\t\t\tagentDir: this.codexHome,\n\t\t});\n\t\tregisterAppServerCatalogMethods(this.registry, {\n\t\t\tmodelRegistry: options.modelRegistry,\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t\tthreads: options.threads,\n\t\t});\n\t\tregisterAppServerConfigMethods(this.registry, {\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t});\n\t\tregisterAppServerAccountMethods(this.registry, { agentDir: this.codexHome });\n\t\tregisterAppServerSkillMethods(this.registry, {\n\t\t\tagentDir: this.codexHome,\n\t\t\tserverCwd: options.serverCwd,\n\t\t\tthreads: options.threads,\n\t\t});\n\t}\n\n\taddConnection(input: ConnectionInput): Connection {\n\t\tconst connection = createConnection(input);\n\t\tthis.connections.set(connection.id, connection);\n\t\tthis.subscribeToProviderAccountEvents();\n\t\treturn connection;\n\t}\n\n\tremoveConnection(id: ConnectionId): void {\n\t\tthis.connections.delete(id);\n\t\tif (this.connections.size === 0) {\n\t\t\tthis.unsubscribeProviderAccountEvents?.();\n\t\t\tthis.unsubscribeProviderAccountEvents = undefined;\n\t\t}\n\t}\n\n\tgetConnection(id: ConnectionId): Connection | undefined {\n\t\treturn this.connections.get(id);\n\t}\n\n\tregisterMethod(method: string, registration: MethodRegistration): void {\n\t\tthis.registry.register(method, registration);\n\t}\n\n\tdeferUntilResponded(connectionId: ConnectionId, action: DeferredResponseAction): boolean {\n\t\tconst dispatch = this.activeDispatch.getStore();\n\t\tif (dispatch?.connectionId !== connectionId || !this.connections.has(connectionId)) {\n\t\t\treturn false;\n\t\t}\n\t\tdispatch.actions.push(action);\n\t\treturn true;\n\t}\n\n\tasync receive(connectionId: ConnectionId, envelope: ClassifiedIncoming): Promise<void> {\n\t\tconst connection = this.connections.get(connectionId);\n\t\tif (!connection) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (envelope.kind) {\n\t\t\tcase \"request\":\n\t\t\t\tawait this.respondToRequest(connection, envelope.message);\n\t\t\t\treturn;\n\t\t\tcase \"notification\":\n\t\t\t\tthis.handleNotification(envelope.message);\n\t\t\t\treturn;\n\t\t\tcase \"response\":\n\t\t\t\treturn;\n\t\t\tcase \"protocol-invalid\":\n\t\t\t\tawait connection.send({ id: null, error: invalidRequestError() });\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn assertNever(envelope);\n\t\t}\n\t}\n\n\tasync sendNotificationToConnection(connectionId: ConnectionId, notification: RpcNotification): Promise<boolean> {\n\t\tconst connection = this.connections.get(connectionId);\n\t\tif (!connection || !canDeliverNotification(connection, notification)) {\n\t\t\treturn false;\n\t\t}\n\t\tawait connection.send(populateNotificationEnvelope(notification, this.now()));\n\t\treturn true;\n\t}\n\n\tasync broadcastNotification(notification: RpcNotification): Promise<number> {\n\t\tlet delivered = 0;\n\t\tconst envelope = populateNotificationEnvelope(notification, this.now());\n\t\tfor (const connection of this.connections.values()) {\n\t\t\tif (canDeliverNotification(connection, envelope)) {\n\t\t\t\tawait connection.send(envelope);\n\t\t\t\tdelivered += 1;\n\t\t\t}\n\t\t}\n\t\treturn delivered;\n\t}\n\n\tprivate subscribeToProviderAccountEvents(): void {\n\t\tif (this.unsubscribeProviderAccountEvents) return;\n\t\tthis.unsubscribeProviderAccountEvents = subscribeProviderAccountEvents((event) => {\n\t\t\tconst notification = providerAccountEventNotification(event);\n\t\t\tconst send = async (): Promise<void> => {\n\t\t\t\tawait this.broadcastNotification(notification);\n\t\t\t};\n\t\t\tconst dispatch = this.activeDispatch.getStore();\n\t\t\tif (dispatch && this.deferUntilResponded(dispatch.connectionId, send)) return;\n\t\t\tvoid send();\n\t\t});\n\t}\n\n\tprivate async respondToRequest(connection: Connection, request: RpcRequest): Promise<void> {\n\t\tconst dispatch: DeferredDispatch = { connectionId: connection.id, actions: [] };\n\t\tconst response = await this.activeDispatch.run(dispatch, () => this.dispatchRequest(connection, request));\n\t\ttry {\n\t\t\tawait connection.send(response);\n\t\t} catch (error) {\n\t\t\tdispatch.actions.length = 0;\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (\"error\" in response || this.connections.get(connection.id) !== connection) {\n\t\t\tdispatch.actions.length = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tconst actions = dispatch.actions.splice(0);\n\t\tfor (const action of actions) {\n\t\t\tawait action();\n\t\t}\n\t}\n\n\tprivate async dispatchRequest(connection: Connection, request: RpcRequest): Promise<RpcResponse> {\n\t\tif (request.method === \"initialize\") {\n\t\t\treturn this.handleInitialize(connection, request);\n\t\t}\n\t\treturn this.registry.dispatch(connection, request);\n\t}\n\n\tprivate handleInitialize(connection: Connection, request: RpcRequest): RpcResponse {\n\t\tif (connection.initialized) {\n\t\t\treturn { id: request.id, error: alreadyInitializedError() };\n\t\t}\n\n\t\tconst params = parseInitializeParams(request.params);\n\t\tif (!params) {\n\t\t\treturn { id: request.id, error: invalidParamsError() };\n\t\t}\n\n\t\tconst initialized = connection.initialize(params, this.version);\n\t\tswitch (initialized.kind) {\n\t\t\tcase \"initialized\":\n\t\t\t\treturn { id: request.id, result: buildInitializeResponse(connection, this.codexHome) };\n\t\t\tcase \"already-initialized\":\n\t\t\t\treturn { id: request.id, error: alreadyInitializedError() };\n\t\t\tdefault:\n\t\t\t\treturn assertNever(initialized);\n\t\t}\n\t}\n\n\tprivate handleNotification(notification: RpcNotification): void {\n\t\tif (notification.method === \"initialized\") {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unhandled app-server envelope kind: ${JSON.stringify(value)}`);\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  export type CompactionQueuedMessage = {
2
2
  readonly text: string;
3
3
  readonly mode: "steer" | "followUp";
4
+ /** Global recovery order reserved when the TUI accepts the input. */
5
+ readonly enqueueOrder?: number;
4
6
  };
5
7
  export type PromptDisposition = "handled" | "queued" | "started";
6
8
  type TransferOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-queue-transfer.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/compaction-queue-transfer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjE,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC;IACvE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,KAAK,MAAM,CAAC;IACtF,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC;IAClE,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9F,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3E,CAAC;AAEF,wBAAsB,uBAAuB,CAC5C,YAAY,EAAE,oBAAoB,EAClC,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAgB,wBAAwB,CACvC,WAAW,EAAE,CACZ,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAC3C,iBAAiB,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,KACvD,OAAO,CAAC,IAAI,CAAC,EAClB,2BAA2B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACnD,OAAO,CAAC,iBAAiB,CAAC,CAsC5B"}
1
+ {"version":3,"file":"compaction-queue-transfer.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/compaction-queue-transfer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjE,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC;IACvE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,KAAK,MAAM,CAAC;IACtF,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC;IAClE,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9F,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3E,CAAC;AAEF,wBAAsB,uBAAuB,CAC5C,YAAY,EAAE,oBAAoB,EAClC,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAgB,wBAAwB,CACvC,WAAW,EAAE,CACZ,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAC3C,iBAAiB,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,KACvD,OAAO,CAAC,IAAI,CAAC,EAClB,2BAA2B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACnD,OAAO,CAAC,iBAAiB,CAAC,CAsC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-queue-transfer.js","sourceRoot":"","sources":["../../../src/modes/interactive/compaction-queue-transfer.ts"],"names":[],"mappings":"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","sourcesContent":["export type CompactionQueuedMessage = {\n\treadonly text: string;\n\treadonly mode: \"steer\" | \"followUp\";\n};\n\nexport type PromptDisposition = \"handled\" | \"queued\" | \"started\";\n\ntype TransferOptions = {\n\treadonly willRetry?: boolean;\n\t/**\n\t * Deliver prompts through the native steer/followUp queues instead of\n\t * prompt admission. Used after an unsuccessful compaction so queued input\n\t * is never dropped and never force-admitted into an over-budget context.\n\t */\n\treadonly deferAdmission?: boolean;\n};\n\ntype TransferDependencies = {\n\treadonly takeBatch: () => CompactionQueuedMessage[];\n\treadonly commitAccepted: (message: CompactionQueuedMessage) => boolean;\n\treadonly restoreUndelivered: (messages: readonly CompactionQueuedMessage[]) => number;\n\treadonly isCommand: (message: CompactionQueuedMessage) => boolean;\n\treadonly deliverCommand: (message: CompactionQueuedMessage) => Promise<void>;\n\treadonly deliverFirstPrompt: (message: CompactionQueuedMessage) => Promise<PromptDisposition>;\n\treadonly deliverQueued: (message: CompactionQueuedMessage) => Promise<void>;\n\treadonly reportFailure: (error: unknown, undeliveredCount: number) => void;\n};\n\nexport async function transferCompactionQueue(\n\tdependencies: TransferDependencies,\n\toptions: TransferOptions = {},\n): Promise<void> {\n\tconst batch = dependencies.takeBatch();\n\tif (batch.length === 0) return;\n\n\tlet acceptedCount = 0;\n\ttry {\n\t\tif (options.willRetry || options.deferAdmission) {\n\t\t\tfor (const message of batch) {\n\t\t\t\tif (dependencies.isCommand(message)) {\n\t\t\t\t\tawait dependencies.deliverCommand(message);\n\t\t\t\t} else {\n\t\t\t\t\tawait dependencies.deliverQueued(message);\n\t\t\t\t}\n\t\t\t\tif (!dependencies.commitAccepted(message)) return;\n\t\t\t\tacceptedCount += 1;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet promptWorkOwned = false;\n\t\tfor (const message of batch) {\n\t\t\tif (dependencies.isCommand(message)) {\n\t\t\t\tawait dependencies.deliverCommand(message);\n\t\t\t} else if (!promptWorkOwned) {\n\t\t\t\tconst disposition = await dependencies.deliverFirstPrompt(message);\n\t\t\t\tpromptWorkOwned = disposition !== \"handled\";\n\t\t\t} else {\n\t\t\t\tawait dependencies.deliverQueued(message);\n\t\t\t}\n\t\t\tif (!dependencies.commitAccepted(message)) return;\n\t\t\tacceptedCount += 1;\n\t\t}\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tconst undelivered = batch.slice(acceptedCount);\n\t\tconst restoredCount = dependencies.restoreUndelivered(undelivered);\n\t\tif (restoredCount > 0) {\n\t\t\tdependencies.reportFailure(failure, restoredCount);\n\t\t}\n\t}\n}\n\nexport function waitForPromptDisposition(\n\tstartPrompt: (\n\t\tpreflightResult: (success: boolean) => void,\n\t\tpromptDisposition: (disposition: PromptDisposition) => void,\n\t) => Promise<void>,\n\treportPostAcceptanceFailure: (error: unknown) => void,\n): Promise<PromptDisposition> {\n\treturn new Promise<PromptDisposition>((resolve, reject) => {\n\t\tlet accepted = false;\n\t\tlet rejectedAtPreflight = false;\n\t\tlet disposition: PromptDisposition | undefined;\n\t\tconst resolveAcceptedDisposition = (): void => {\n\t\t\tif (accepted && disposition) resolve(disposition);\n\t\t};\n\t\tconst prompt = startPrompt(\n\t\t\t(success) => {\n\t\t\t\tif (success) {\n\t\t\t\t\taccepted = true;\n\t\t\t\t\tresolveAcceptedDisposition();\n\t\t\t\t} else {\n\t\t\t\t\trejectedAtPreflight = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t(nextDisposition) => {\n\t\t\t\tdisposition = nextDisposition;\n\t\t\t\tresolveAcceptedDisposition();\n\t\t\t},\n\t\t);\n\n\t\tvoid prompt.then(\n\t\t\t() => {\n\t\t\t\tif (rejectedAtPreflight && !accepted) {\n\t\t\t\t\treject(new Error(\"Queued prompt was rejected before acceptance\"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tif (accepted) {\n\t\t\t\t\treportPostAcceptanceFailure(error);\n\t\t\t\t} else {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t});\n}\n"]}
1
+ {"version":3,"file":"compaction-queue-transfer.js","sourceRoot":"","sources":["../../../src/modes/interactive/compaction-queue-transfer.ts"],"names":[],"mappings":"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","sourcesContent":["export type CompactionQueuedMessage = {\n\treadonly text: string;\n\treadonly mode: \"steer\" | \"followUp\";\n\t/** Global recovery order reserved when the TUI accepts the input. */\n\treadonly enqueueOrder?: number;\n};\n\nexport type PromptDisposition = \"handled\" | \"queued\" | \"started\";\n\ntype TransferOptions = {\n\treadonly willRetry?: boolean;\n\t/**\n\t * Deliver prompts through the native steer/followUp queues instead of\n\t * prompt admission. Used after an unsuccessful compaction so queued input\n\t * is never dropped and never force-admitted into an over-budget context.\n\t */\n\treadonly deferAdmission?: boolean;\n};\n\ntype TransferDependencies = {\n\treadonly takeBatch: () => CompactionQueuedMessage[];\n\treadonly commitAccepted: (message: CompactionQueuedMessage) => boolean;\n\treadonly restoreUndelivered: (messages: readonly CompactionQueuedMessage[]) => number;\n\treadonly isCommand: (message: CompactionQueuedMessage) => boolean;\n\treadonly deliverCommand: (message: CompactionQueuedMessage) => Promise<void>;\n\treadonly deliverFirstPrompt: (message: CompactionQueuedMessage) => Promise<PromptDisposition>;\n\treadonly deliverQueued: (message: CompactionQueuedMessage) => Promise<void>;\n\treadonly reportFailure: (error: unknown, undeliveredCount: number) => void;\n};\n\nexport async function transferCompactionQueue(\n\tdependencies: TransferDependencies,\n\toptions: TransferOptions = {},\n): Promise<void> {\n\tconst batch = dependencies.takeBatch();\n\tif (batch.length === 0) return;\n\n\tlet acceptedCount = 0;\n\ttry {\n\t\tif (options.willRetry || options.deferAdmission) {\n\t\t\tfor (const message of batch) {\n\t\t\t\tif (dependencies.isCommand(message)) {\n\t\t\t\t\tawait dependencies.deliverCommand(message);\n\t\t\t\t} else {\n\t\t\t\t\tawait dependencies.deliverQueued(message);\n\t\t\t\t}\n\t\t\t\tif (!dependencies.commitAccepted(message)) return;\n\t\t\t\tacceptedCount += 1;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet promptWorkOwned = false;\n\t\tfor (const message of batch) {\n\t\t\tif (dependencies.isCommand(message)) {\n\t\t\t\tawait dependencies.deliverCommand(message);\n\t\t\t} else if (!promptWorkOwned) {\n\t\t\t\tconst disposition = await dependencies.deliverFirstPrompt(message);\n\t\t\t\tpromptWorkOwned = disposition !== \"handled\";\n\t\t\t} else {\n\t\t\t\tawait dependencies.deliverQueued(message);\n\t\t\t}\n\t\t\tif (!dependencies.commitAccepted(message)) return;\n\t\t\tacceptedCount += 1;\n\t\t}\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tconst undelivered = batch.slice(acceptedCount);\n\t\tconst restoredCount = dependencies.restoreUndelivered(undelivered);\n\t\tif (restoredCount > 0) {\n\t\t\tdependencies.reportFailure(failure, restoredCount);\n\t\t}\n\t}\n}\n\nexport function waitForPromptDisposition(\n\tstartPrompt: (\n\t\tpreflightResult: (success: boolean) => void,\n\t\tpromptDisposition: (disposition: PromptDisposition) => void,\n\t) => Promise<void>,\n\treportPostAcceptanceFailure: (error: unknown) => void,\n): Promise<PromptDisposition> {\n\treturn new Promise<PromptDisposition>((resolve, reject) => {\n\t\tlet accepted = false;\n\t\tlet rejectedAtPreflight = false;\n\t\tlet disposition: PromptDisposition | undefined;\n\t\tconst resolveAcceptedDisposition = (): void => {\n\t\t\tif (accepted && disposition) resolve(disposition);\n\t\t};\n\t\tconst prompt = startPrompt(\n\t\t\t(success) => {\n\t\t\t\tif (success) {\n\t\t\t\t\taccepted = true;\n\t\t\t\t\tresolveAcceptedDisposition();\n\t\t\t\t} else {\n\t\t\t\t\trejectedAtPreflight = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t(nextDisposition) => {\n\t\t\t\tdisposition = nextDisposition;\n\t\t\t\tresolveAcceptedDisposition();\n\t\t\t},\n\t\t);\n\n\t\tvoid prompt.then(\n\t\t\t() => {\n\t\t\t\tif (rejectedAtPreflight && !accepted) {\n\t\t\t\t\treject(new Error(\"Queued prompt was rejected before acceptance\"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tif (accepted) {\n\t\t\t\t\treportPostAcceptanceFailure(error);\n\t\t\t\t} else {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAiC,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAgBxF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASlD;AAQD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYhF;AAgBD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAChD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,kBAAkB,CAAQ;IAElC,YAAY,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,0BAA0B,EAGxE;IAED,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAEtC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE5C;IAED;;;OAGG;IACH,UAAU,IAAI,IAAI,CAEjB;IAED;;;OAGG;IACH,OAAO,IAAI,IAAI,CAEd;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAyJ9B;CACD"}
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAiC,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAkBxF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASlD;AAQD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYhF;AAkBD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAChD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,kBAAkB,CAAQ;IAElC,YAAY,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,0BAA0B,EAGxE;IAED,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAEtC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE5C;IAED;;;OAGG;IACH,UAAU,IAAI,IAAI,CAEjB;IAED;;;OAGG;IACH,OAAO,IAAI,IAAI,CAEd;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA0J9B;CACD"}
@@ -2,6 +2,7 @@ import { isAbsolute, relative, resolve, sep } from "node:path";
2
2
  import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
3
3
  import { theme } from "../theme/theme.js";
4
4
  import { planFooterLayout } from "./footer-layout.js";
5
+ const FAST_MODE_INDICATOR = "\u26a1 ";
5
6
  /**
6
7
  * Sanitize text for display in a single-line status.
7
8
  * Removes newlines, tabs, carriage returns, and other control characters.
@@ -58,12 +59,14 @@ function colorRightSide(text) {
58
59
  if (!text)
59
60
  return "";
60
61
  const providerMatch = text.match(/^\(([^)]+)\) (.*)$/);
61
- const body = providerMatch ? providerMatch[2] : text;
62
+ const afterProvider = providerMatch ? providerMatch[2] : text;
62
63
  const providerPrefix = providerMatch ? theme.fg("muted", `(${providerMatch[1]}) `) : "";
64
+ const fastPrefix = afterProvider.startsWith(FAST_MODE_INDICATOR) ? theme.fg("warning", FAST_MODE_INDICATOR) : "";
65
+ const body = fastPrefix ? afterProvider.slice(FAST_MODE_INDICATOR.length) : afterProvider;
63
66
  const thinkingMatch = body.match(/^(.+):([^:]+)$/);
64
67
  if (!thinkingMatch)
65
- return providerPrefix + theme.fg("accent", body);
66
- return `${providerPrefix}${theme.fg("accent", thinkingMatch[1])}${theme.fg("dim", `:${thinkingMatch[2]}`)}`;
68
+ return providerPrefix + fastPrefix + theme.fg("accent", body);
69
+ return `${providerPrefix}${fastPrefix}${theme.fg("accent", thinkingMatch[1])}${theme.fg("dim", `:${thinkingMatch[2]}`)}`;
67
70
  }
68
71
  /**
69
72
  * Footer component that shows pwd, token stats, and context usage.
@@ -160,10 +163,11 @@ export class FooterComponent {
160
163
  // Model label pinned to the right edge; the provider prefix stays only when
161
164
  // the full line fits.
162
165
  const modelName = state.model?.id || "no-model";
163
- let minimalRight = modelName;
166
+ const fastIndicator = this.session.isFastModeActive() ? FAST_MODE_INDICATOR : "";
167
+ let minimalRight = `${fastIndicator}${modelName}`;
164
168
  if (state.model?.reasoning) {
165
169
  const thinkingLevel = state.thinkingLevel || "off";
166
- minimalRight = thinkingLevel === "off" ? `${modelName}:off` : `${modelName}:${thinkingLevel}`;
170
+ minimalRight = thinkingLevel === "off" ? `${minimalRight}:off` : `${minimalRight}:${thinkingLevel}`;
167
171
  }
168
172
  const minimal = { plain: minimalRight, colored: colorRightSide(minimalRight) };
169
173
  const providerPrefix = this.footerData.getAvailableProviderCount() > 1 && state.model ? `(${state.model.provider}) ` : "";
@@ -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\";\nimport { type FooterSegment, planFooterLayout } from \"./footer-layout.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\t// O(1) running totals maintained by SessionManager (identical to summing\n\t\t// usage over all entries; totals are not branch-scoped).\n\t\tconst usageTotals = this.session.sessionManager.getUsageTotals();\n\t\tconst totalCacheRead = usageTotals.cacheRead;\n\t\tconst totalCacheWrite = usageTotals.cacheWrite;\n\t\tconst totalCost = usageTotals.cost;\n\t\tconst latestCacheHitRate = usageTotals.latestCacheHitRate;\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// Segments in priority order: anchors (pwd, branch, context) and the model\n\t\t// label always stay; middle stats elide from the right when space runs out.\n\t\t// The width ladder itself lives in ./footer-layout.ts.\n\t\tconst separator = \" • \";\n\t\tconst sepColored = theme.fg(\"borderMuted\", separator);\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 omoNativeBadge: FooterSegment | undefined = this.footerData.isOmoNative()\n\t\t\t? { plain: \"(🏴‍☠️ OmO Native)\", colored: theme.fg(\"success\", \"(🏴‍☠️ OmO Native)\") }\n\t\t\t: undefined;\n\n\t\tconst anchor: [FooterSegment, ...FooterSegment[]] = [{ plain: pwdRaw, colored: theme.fg(\"accent\", pwdRaw) }];\n\t\tif (omoNativeBadge) anchor.unshift(omoNativeBadge);\n\t\tif (branch) anchor.push({ plain: branch, colored: theme.fg(\"warning\", branch) });\n\t\tconst pwdIndex = omoNativeBadge ? 1 : 0;\n\n\t\tconst dim = (plain: string): FooterSegment => ({ plain, colored: theme.fg(\"dim\", plain) });\n\t\tconst middle: FooterSegment[] = [];\n\t\tif (sessionName) middle.push({ plain: sessionName, colored: theme.fg(\"muted\", sessionName) });\n\t\tif ((totalCacheRead > 0 || totalCacheWrite > 0) && latestCacheHitRate !== undefined && latestCacheHitRate >= 10) {\n\t\t\tmiddle.push(dim(`CH${latestCacheHitRate.toFixed(1)}%`));\n\t\t}\n\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\tmiddle.push({ plain: costStr, colored: theme.fg(\"success\", 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\tconst tail: FooterSegment = { plain: ctxDisplay, colored: ctxColored };\n\n\t\t// Model label pinned to the right edge; the provider prefix stays only when\n\t\t// the full line fits.\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tlet minimalRight = modelName;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\tminimalRight = thinkingLevel === \"off\" ? `${modelName}:off` : `${modelName}:${thinkingLevel}`;\n\t\t}\n\t\tconst minimal: FooterSegment = { plain: minimalRight, colored: colorRightSide(minimalRight) };\n\t\tconst providerPrefix =\n\t\t\tthis.footerData.getAvailableProviderCount() > 1 && state.model ? `(${state.model.provider}) ` : \"\";\n\t\tconst full: FooterSegment | undefined = providerPrefix\n\t\t\t? { plain: `${providerPrefix}${minimalRight}`, colored: colorRightSide(`${providerPrefix}${minimalRight}`) }\n\t\t\t: undefined;\n\n\t\tconst marker: FooterSegment = { plain: \"…\", colored: theme.fg(\"dim\", \"…\") };\n\t\tconst plan = planFooterLayout({\n\t\t\twidth,\n\t\t\tanchor,\n\t\t\tpwdIndex,\n\t\t\tmiddle,\n\t\t\ttail,\n\t\t\tright: { minimal, full },\n\t\t\tseparator,\n\t\t\tminPadding: 2,\n\t\t\tellipsisMarker: marker,\n\t\t});\n\n\t\tconst joinSegments = (segments: readonly FooterSegment[]): { colored: string; width: number } => ({\n\t\t\tcolored: segments.map((segment) => segment.colored).join(sepColored),\n\t\t\twidth: visibleWidth(segments.map((segment) => segment.plain).join(separator)),\n\t\t});\n\n\t\tlet left: { colored: string; width: number };\n\t\tlet right: FooterSegment;\n\t\tif (plan.kind === \"full\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tleft = joinSegments([...anchor, ...middle, tail]);\n\t\t} else if (plan.kind === \"middle-elided\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tconst segments = [...anchor, ...middle.slice(0, plan.keptMiddleCount)];\n\t\t\tif (plan.showMarker) segments.push(marker);\n\t\t\tsegments.push(tail);\n\t\t\tleft = joinSegments(segments);\n\t\t} else if (plan.kind === \"pwd-elided\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tconst segments: FooterSegment[] = [\n\t\t\t\t...anchor.map((segment, index) =>\n\t\t\t\t\tindex === pwdIndex ? { plain: plan.pwdPlain, colored: theme.fg(\"accent\", plan.pwdPlain) } : segment,\n\t\t\t\t),\n\t\t\t\t...middle.slice(0, plan.keptMiddleCount),\n\t\t\t];\n\t\t\tif (plan.showMarker) segments.push(marker);\n\t\t\tsegments.push(tail);\n\t\t\tleft = joinSegments(segments);\n\t\t} else if (plan.kind === \"left-elided\") {\n\t\t\tright = minimal;\n\t\t\tleft = { colored: theme.fg(\"muted\", plan.leftPlain), width: visibleWidth(plan.leftPlain) };\n\t\t} else {\n\t\t\tleft = { colored: \"\", width: 0 };\n\t\t\tright = { plain: plan.rightPlain, colored: colorRightSide(plan.rightPlain) };\n\t\t}\n\n\t\tconst rightWidth = visibleWidth(right.plain);\n\t\tconst padding = \" \".repeat(Math.max(0, width - left.width - rightWidth));\n\t\tconst lines = [left.colored + padding + right.colored];\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;AAC1C,OAAO,EAAsB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC;;;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;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IAC9C,IAAI,CAAC,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IACtD,IAAI,CAAC,GAAG,UAAU;QAAE,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;IACtD,IAAI,CAAC,GAAG,aAAa;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;IAC9D,IAAI,CAAC,GAAG,cAAc;QAAE,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,iEAAiE;AACjE,SAAS,KAAK,CAAC,CAAS;IACvB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,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,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,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,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjH,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnD,IAAI,CAAC,aAAa;QAAE,OAAO,cAAc,GAAG,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClF,OAAO,GAAG,cAAc,GAAG,UAAU,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;AAC1H,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,yEAAyE;QACzE,yDAAyD;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QACjE,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC;QAC7C,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC;QAC/C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;QACnC,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC;QAE1D,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,2EAA2E;QAC3E,4EAA4E;QAC5E,uDAAuD;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC;QACxB,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACtD,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,cAAc,GAA8B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YAC9E,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE;YACrF,CAAC,CAAC,SAAS,CAAC;QAEb,MAAM,MAAM,GAAwC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7G,IAAI,cAAc;YAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,IAAI,WAAW;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;YACjH,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,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,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACxE,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,MAAM,IAAI,GAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAEvE,4EAA4E;QAC5E,sBAAsB;QACtB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,UAAU,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,YAAY,GAAG,GAAG,aAAa,GAAG,SAAS,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC;YACnD,YAAY,GAAG,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,aAAa,EAAE,CAAC;QACrG,CAAC;QACD,MAAM,OAAO,GAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9F,MAAM,cAAc,GACnB,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,GAA8B,cAAc;YACrD,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,cAAc,GAAG,YAAY,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,cAAc,GAAG,YAAY,EAAE,CAAC,EAAE;YAC5G,CAAC,CAAC,SAAS,CAAC;QAEb,MAAM,MAAM,GAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC7B,KAAK;YACL,MAAM;YACN,QAAQ;YACR,MAAM;YACN,IAAI;YACJ,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACxB,SAAS;YACT,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,MAAM;SACtB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,CAAC,QAAkC,EAAsC,EAAE,CAAC,CAAC;YACjG,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACpE,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7E,CAAC,CAAC;QAEH,IAAI,IAAwC,CAAC;QAC7C,IAAI,KAAoB,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACnD,IAAI,GAAG,YAAY,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACnD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,UAAU;gBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACnD,MAAM,QAAQ,GAAoB;gBACjC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAChC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CACnG;gBACD,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;aACxC,CAAC;YACF,IAAI,IAAI,CAAC,UAAU;gBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,KAAK,GAAG,OAAO,CAAC;YAChB,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5F,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9E,CAAC;QAED,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEvD,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\";\nimport { type FooterSegment, planFooterLayout } from \"./footer-layout.ts\";\n\nconst FAST_MODE_INDICATOR = \"\\u26a1 \";\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 afterProvider = providerMatch ? providerMatch[2] : text;\n\tconst providerPrefix = providerMatch ? theme.fg(\"muted\", `(${providerMatch[1]}) `) : \"\";\n\tconst fastPrefix = afterProvider.startsWith(FAST_MODE_INDICATOR) ? theme.fg(\"warning\", FAST_MODE_INDICATOR) : \"\";\n\tconst body = fastPrefix ? afterProvider.slice(FAST_MODE_INDICATOR.length) : afterProvider;\n\tconst thinkingMatch = body.match(/^(.+):([^:]+)$/);\n\tif (!thinkingMatch) return providerPrefix + fastPrefix + theme.fg(\"accent\", body);\n\treturn `${providerPrefix}${fastPrefix}${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\t// O(1) running totals maintained by SessionManager (identical to summing\n\t\t// usage over all entries; totals are not branch-scoped).\n\t\tconst usageTotals = this.session.sessionManager.getUsageTotals();\n\t\tconst totalCacheRead = usageTotals.cacheRead;\n\t\tconst totalCacheWrite = usageTotals.cacheWrite;\n\t\tconst totalCost = usageTotals.cost;\n\t\tconst latestCacheHitRate = usageTotals.latestCacheHitRate;\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// Segments in priority order: anchors (pwd, branch, context) and the model\n\t\t// label always stay; middle stats elide from the right when space runs out.\n\t\t// The width ladder itself lives in ./footer-layout.ts.\n\t\tconst separator = \" • \";\n\t\tconst sepColored = theme.fg(\"borderMuted\", separator);\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 omoNativeBadge: FooterSegment | undefined = this.footerData.isOmoNative()\n\t\t\t? { plain: \"(🏴‍☠️ OmO Native)\", colored: theme.fg(\"success\", \"(🏴‍☠️ OmO Native)\") }\n\t\t\t: undefined;\n\n\t\tconst anchor: [FooterSegment, ...FooterSegment[]] = [{ plain: pwdRaw, colored: theme.fg(\"accent\", pwdRaw) }];\n\t\tif (omoNativeBadge) anchor.unshift(omoNativeBadge);\n\t\tif (branch) anchor.push({ plain: branch, colored: theme.fg(\"warning\", branch) });\n\t\tconst pwdIndex = omoNativeBadge ? 1 : 0;\n\n\t\tconst dim = (plain: string): FooterSegment => ({ plain, colored: theme.fg(\"dim\", plain) });\n\t\tconst middle: FooterSegment[] = [];\n\t\tif (sessionName) middle.push({ plain: sessionName, colored: theme.fg(\"muted\", sessionName) });\n\t\tif ((totalCacheRead > 0 || totalCacheWrite > 0) && latestCacheHitRate !== undefined && latestCacheHitRate >= 10) {\n\t\t\tmiddle.push(dim(`CH${latestCacheHitRate.toFixed(1)}%`));\n\t\t}\n\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\tmiddle.push({ plain: costStr, colored: theme.fg(\"success\", 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\tconst tail: FooterSegment = { plain: ctxDisplay, colored: ctxColored };\n\n\t\t// Model label pinned to the right edge; the provider prefix stays only when\n\t\t// the full line fits.\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tconst fastIndicator = this.session.isFastModeActive() ? FAST_MODE_INDICATOR : \"\";\n\t\tlet minimalRight = `${fastIndicator}${modelName}`;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\tminimalRight = thinkingLevel === \"off\" ? `${minimalRight}:off` : `${minimalRight}:${thinkingLevel}`;\n\t\t}\n\t\tconst minimal: FooterSegment = { plain: minimalRight, colored: colorRightSide(minimalRight) };\n\t\tconst providerPrefix =\n\t\t\tthis.footerData.getAvailableProviderCount() > 1 && state.model ? `(${state.model.provider}) ` : \"\";\n\t\tconst full: FooterSegment | undefined = providerPrefix\n\t\t\t? { plain: `${providerPrefix}${minimalRight}`, colored: colorRightSide(`${providerPrefix}${minimalRight}`) }\n\t\t\t: undefined;\n\n\t\tconst marker: FooterSegment = { plain: \"…\", colored: theme.fg(\"dim\", \"…\") };\n\t\tconst plan = planFooterLayout({\n\t\t\twidth,\n\t\t\tanchor,\n\t\t\tpwdIndex,\n\t\t\tmiddle,\n\t\t\ttail,\n\t\t\tright: { minimal, full },\n\t\t\tseparator,\n\t\t\tminPadding: 2,\n\t\t\tellipsisMarker: marker,\n\t\t});\n\n\t\tconst joinSegments = (segments: readonly FooterSegment[]): { colored: string; width: number } => ({\n\t\t\tcolored: segments.map((segment) => segment.colored).join(sepColored),\n\t\t\twidth: visibleWidth(segments.map((segment) => segment.plain).join(separator)),\n\t\t});\n\n\t\tlet left: { colored: string; width: number };\n\t\tlet right: FooterSegment;\n\t\tif (plan.kind === \"full\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tleft = joinSegments([...anchor, ...middle, tail]);\n\t\t} else if (plan.kind === \"middle-elided\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tconst segments = [...anchor, ...middle.slice(0, plan.keptMiddleCount)];\n\t\t\tif (plan.showMarker) segments.push(marker);\n\t\t\tsegments.push(tail);\n\t\t\tleft = joinSegments(segments);\n\t\t} else if (plan.kind === \"pwd-elided\") {\n\t\t\tright = plan.useFullRight && full ? full : minimal;\n\t\t\tconst segments: FooterSegment[] = [\n\t\t\t\t...anchor.map((segment, index) =>\n\t\t\t\t\tindex === pwdIndex ? { plain: plan.pwdPlain, colored: theme.fg(\"accent\", plan.pwdPlain) } : segment,\n\t\t\t\t),\n\t\t\t\t...middle.slice(0, plan.keptMiddleCount),\n\t\t\t];\n\t\t\tif (plan.showMarker) segments.push(marker);\n\t\t\tsegments.push(tail);\n\t\t\tleft = joinSegments(segments);\n\t\t} else if (plan.kind === \"left-elided\") {\n\t\t\tright = minimal;\n\t\t\tleft = { colored: theme.fg(\"muted\", plan.leftPlain), width: visibleWidth(plan.leftPlain) };\n\t\t} else {\n\t\t\tleft = { colored: \"\", width: 0 };\n\t\t\tright = { plain: plan.rightPlain, colored: colorRightSide(plan.rightPlain) };\n\t\t}\n\n\t\tconst rightWidth = visibleWidth(right.plain);\n\t\tconst padding = \" \".repeat(Math.max(0, width - left.width - rightWidth));\n\t\tconst lines = [left.colored + padding + right.colored];\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 +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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"}
@@ -3822,7 +3822,7 @@ export class InteractiveMode {
3822
3822
  this.updateEditorBorderColor();
3823
3823
  const thinkingStr = result.model.reasoning && result.thinkingLevel !== "off" ? ` (thinking: ${result.thinkingLevel})` : "";
3824
3824
  const systemPromptStr = result.systemPromptChange?.systemPromptName
3825
- ? `, system prompt: ${result.systemPromptChange.systemPromptName}`
3825
+ ? `, optimized system prompt applied: ${result.systemPromptChange.systemPromptName}`
3826
3826
  : "";
3827
3827
  this.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}${systemPromptStr}`);
3828
3828
  this.showRiskyMainModelWarning(result.model);
@@ -3921,7 +3921,7 @@ export class InteractiveMode {
3921
3921
  return;
3922
3922
  this.chatContainer.addChild(new Spacer(1));
3923
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));
3924
+ this.chatContainer.addChild(new Text(`${theme.bold(theme.fg("error", "Risky model warning"))}\n${theme.fg("error", RISKY_MAIN_MODEL_WARNING)}`, 1, 0));
3925
3925
  this.chatContainer.addChild(new DynamicBorder((text) => theme.fg("error", text)));
3926
3926
  this.ui.requestRender();
3927
3927
  }
@@ -3965,8 +3965,17 @@ export class InteractiveMode {
3965
3965
  * Clear all queued messages and return their contents.
3966
3966
  * Clears both session queue and compaction queue.
3967
3967
  */
3968
- clearAllQueues() {
3969
- const { steering, followUp } = this.session.clearQueue();
3968
+ clearAllQueues(options = { abortWillFollow: false }) {
3969
+ const clearedNative = this.session.clearQueue(options);
3970
+ const { steering, followUp } = clearedNative;
3971
+ const nativeMessages = clearedNative.ordered ?? [
3972
+ ...steering.map((text, enqueueOrder) => ({ text, mode: "steer", enqueueOrder })),
3973
+ ...followUp.map((text, index) => ({
3974
+ text,
3975
+ mode: "followUp",
3976
+ enqueueOrder: steering.length + index,
3977
+ })),
3978
+ ];
3970
3979
  const compactionMessages = [...this.compactionInFlightMessages, ...this.compactionQueuedMessages];
3971
3980
  const compactionSteering = compactionMessages.filter((msg) => msg.mode === "steer").map((msg) => msg.text);
3972
3981
  const compactionFollowUp = compactionMessages.filter((msg) => msg.mode === "followUp").map((msg) => msg.text);
@@ -3975,10 +3984,20 @@ export class InteractiveMode {
3975
3984
  this.compactionInFlightMessages = [];
3976
3985
  this.compactionTransferAbortControllers.clear();
3977
3986
  this.compactionQueuedMessages = [];
3978
- return {
3987
+ const fallbackOrder = nativeMessages.reduce((maximum, message) => Math.max(maximum, message.enqueueOrder), 0);
3988
+ const ordered = [
3989
+ ...nativeMessages,
3990
+ ...compactionMessages.map((message, index) => ({
3991
+ ...message,
3992
+ enqueueOrder: message.enqueueOrder ?? fallbackOrder + index + 1,
3993
+ })),
3994
+ ].sort((a, b) => a.enqueueOrder - b.enqueueOrder);
3995
+ const cleared = {
3979
3996
  steering: [...steering, ...compactionSteering],
3980
3997
  followUp: [...followUp, ...compactionFollowUp],
3981
3998
  };
3999
+ Object.defineProperty(cleared, "ordered", { value: ordered, enumerable: false });
4000
+ return cleared;
3982
4001
  }
3983
4002
  updatePendingMessagesDisplay() {
3984
4003
  this.pendingMessagesContainer.clear();
@@ -3999,8 +4018,8 @@ export class InteractiveMode {
3999
4018
  }
4000
4019
  }
4001
4020
  restoreQueuedMessagesToEditor(options) {
4002
- const { steering, followUp } = this.clearAllQueues();
4003
- const allQueued = [...steering, ...followUp];
4021
+ const { steering, followUp, ordered } = this.clearAllQueues({ abortWillFollow: options?.abort === true });
4022
+ const allQueued = ordered?.map((message) => message.text) ?? [...steering, ...followUp];
4004
4023
  if (allQueued.length === 0) {
4005
4024
  this.updatePendingMessagesDisplay();
4006
4025
  if (options?.abort) {
@@ -4028,8 +4047,8 @@ export class InteractiveMode {
4028
4047
  * - The helper never auto-prompts restored queue text; the user decides whether to send it.
4029
4048
  */
4030
4049
  async abortAndFireQueuedMessages() {
4031
- const { steering, followUp } = this.clearAllQueues();
4032
- const allQueued = [...steering, ...followUp];
4050
+ const { steering, followUp, ordered } = this.clearAllQueues({ abortWillFollow: true });
4051
+ const allQueued = ordered?.map((message) => message.text) ?? [...steering, ...followUp];
4033
4052
  this.updatePendingMessagesDisplay();
4034
4053
  await this.session.abort();
4035
4054
  if (allQueued.length === 0) {
@@ -4042,7 +4061,7 @@ export class InteractiveMode {
4042
4061
  return allQueued.length;
4043
4062
  }
4044
4063
  queueCompactionMessage(text, mode) {
4045
- this.compactionQueuedMessages.push({ text, mode });
4064
+ this.compactionQueuedMessages.push({ text, mode, enqueueOrder: this.session.reserveQueuedInputOrder() });
4046
4065
  this.getSessionLogger().debug("compaction_queue_enqueue", { mode, count: this.compactionQueuedMessages.length });
4047
4066
  this.editor.addToHistory?.(text);
4048
4067
  this.editor.setText("");
@@ -4109,7 +4128,14 @@ export class InteractiveMode {
4109
4128
  return;
4110
4129
  this.showError(`Queued prompt failed after acceptance: ${error instanceof Error ? error.message : String(error)}`);
4111
4130
  }),
4112
- deliverQueued: (message) => message.mode === "followUp" ? session.followUp(message.text) : session.steer(message.text),
4131
+ deliverQueued: (message) => {
4132
+ if (message.enqueueOrder === undefined) {
4133
+ return message.mode === "followUp" ? session.followUp(message.text) : session.steer(message.text);
4134
+ }
4135
+ return message.mode === "followUp"
4136
+ ? session.followUp(message.text, undefined, { enqueueOrder: message.enqueueOrder })
4137
+ : session.steer(message.text, undefined, { enqueueOrder: message.enqueueOrder });
4138
+ },
4113
4139
  reportFailure: (error, undeliveredCount) => {
4114
4140
  this.showError(`Failed to send queued message${undeliveredCount === 1 ? "" : "s"}: ${error instanceof Error ? error.message : String(error)}`);
4115
4141
  },
@@ -4405,7 +4431,7 @@ export class InteractiveMode {
4405
4431
  this.updateEditorBorderColor();
4406
4432
  done?.();
4407
4433
  const systemPromptStr = systemPromptChange?.systemPromptName
4408
- ? ` (system prompt: ${systemPromptChange.systemPromptName})`
4434
+ ? ` (optimized system prompt applied: ${systemPromptChange.systemPromptName})`
4409
4435
  : "";
4410
4436
  this.showStatus(`Model: ${model.id}${systemPromptStr}`);
4411
4437
  this.showRiskyMainModelWarning(model);