@code-yeongyu/senpi 2026.9.3 → 2026.9.4-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1058) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/README.md +5 -4
  3. package/dist/cli/startup-ui.d.ts.map +1 -1
  4. package/dist/cli/startup-ui.js +2 -1
  5. package/dist/cli/startup-ui.js.map +1 -1
  6. package/dist/core/agent-session-runtime.js +2 -2
  7. package/dist/core/agent-session-runtime.js.map +1 -1
  8. package/dist/core/agent-session.d.ts +2 -5
  9. package/dist/core/agent-session.d.ts.map +1 -1
  10. package/dist/core/agent-session.js +56 -30
  11. package/dist/core/agent-session.js.map +1 -1
  12. package/dist/core/compaction/compaction.d.ts.map +1 -1
  13. package/dist/core/compaction/compaction.js +16 -7
  14. package/dist/core/compaction/compaction.js.map +1 -1
  15. package/dist/core/dynamic-prompt/style.js +1 -1
  16. package/dist/core/dynamic-prompt/style.js.map +1 -1
  17. package/dist/core/dynamic-prompt/working-task.js +1 -1
  18. package/dist/core/dynamic-prompt/working-task.js.map +1 -1
  19. package/dist/core/extensions/builtin/bash-timeout/index.d.ts +1 -1
  20. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  21. package/dist/core/extensions/builtin/bash-timeout/index.js +3 -1
  22. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  23. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts +9 -7
  24. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
  25. package/dist/core/extensions/builtin/bash-timeout/timeout.js +4 -9
  26. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  27. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js +15 -18
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +1 -1
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.d.ts +3 -0
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.d.ts.map +1 -0
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.js +80 -0
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.js.map +1 -0
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts +18 -1
  35. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.js +57 -1
  37. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.js.map +1 -1
  38. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts +1 -0
  39. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js +13 -0
  41. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js.map +1 -1
  42. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts.map +1 -1
  43. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js +6 -1
  44. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +1 -1
  45. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js +2 -23
  47. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +1 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts +2 -2
  49. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js +30 -24
  51. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
  52. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +2 -0
  53. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +15 -1
  55. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
  56. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts +1 -1
  57. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js +1 -0
  59. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js.map +1 -1
  60. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +6 -1
  61. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
  62. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +1 -0
  63. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
  64. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js +19 -3
  66. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -1
  67. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +31 -13
  69. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +1 -1
  70. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +1 -0
  71. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
  72. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +1 -0
  73. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -1
  74. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -1
  75. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +8 -14
  76. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
  77. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  78. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js +23 -6
  79. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +1 -1
  80. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts.map +1 -1
  81. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js +4 -2
  82. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js.map +1 -1
  83. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts +1 -1
  84. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts.map +1 -1
  85. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -1
  86. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js +13 -6
  87. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -1
  88. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts +11 -3
  89. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js +12 -3
  91. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js.map +1 -1
  92. package/dist/core/extensions/builtin/eval-only-routing.d.ts +10 -0
  93. package/dist/core/extensions/builtin/eval-only-routing.d.ts.map +1 -0
  94. package/dist/core/extensions/builtin/eval-only-routing.js +16 -0
  95. package/dist/core/extensions/builtin/eval-only-routing.js.map +1 -0
  96. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/goal/prompt.js +1 -3
  98. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
  99. package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
  100. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  101. package/dist/core/extensions/builtin/gpt-account.d.ts +3 -0
  102. package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -0
  103. package/dist/core/extensions/builtin/gpt-account.js +115 -0
  104. package/dist/core/extensions/builtin/gpt-account.js.map +1 -0
  105. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/index.js +2 -0
  107. package/dist/core/extensions/builtin/index.js.map +1 -1
  108. package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/loop/index.js +20 -1
  110. package/dist/core/extensions/builtin/loop/index.js.map +1 -1
  111. package/dist/core/extensions/builtin/loop/tools.d.ts +6 -1
  112. package/dist/core/extensions/builtin/loop/tools.d.ts.map +1 -1
  113. package/dist/core/extensions/builtin/loop/tools.js +8 -1
  114. package/dist/core/extensions/builtin/loop/tools.js.map +1 -1
  115. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
  116. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js +1 -3
  117. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  118. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  119. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js +1 -11
  120. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  121. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js +2 -2
  122. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  123. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js +3 -3
  124. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js.map +1 -1
  125. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +56 -43
  127. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
  128. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts +4 -15
  129. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js +12 -21
  131. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js.map +1 -1
  132. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.d.ts +1 -1
  133. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.js +2 -11
  135. package/dist/core/extensions/builtin/prompt-preset/glm-5-2.js.map +1 -1
  136. package/dist/core/extensions/builtin/prompt-preset/glm-5-3.d.ts +1 -1
  137. package/dist/core/extensions/builtin/prompt-preset/glm-5-3.d.ts.map +1 -1
  138. package/dist/core/extensions/builtin/prompt-preset/glm-5-3.js +2 -11
  139. package/dist/core/extensions/builtin/prompt-preset/glm-5-3.js.map +1 -1
  140. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts +4 -0
  141. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts.map +1 -0
  142. package/dist/core/extensions/builtin/prompt-preset/glm-5.js +16 -0
  143. package/dist/core/extensions/builtin/prompt-preset/glm-5.js.map +1 -0
  144. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +1 -5
  145. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -6
  147. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  148. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +123 -0
  149. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -0
  150. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +202 -0
  151. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -0
  152. package/dist/core/extensions/builtin/prompt-preset/gpt-eval-routing.d.ts.map +1 -1
  153. package/dist/core/extensions/builtin/prompt-preset/gpt-eval-routing.js +1 -2
  154. package/dist/core/extensions/builtin/prompt-preset/gpt-eval-routing.js.map +1 -1
  155. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +60 -76
  157. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  158. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  159. package/dist/core/extensions/builtin/prompt-preset/presets.js +17 -0
  160. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  161. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  162. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
  164. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  165. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  166. package/dist/core/extensions/builtin/terminal/extension.js +5 -2
  167. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  168. package/dist/core/extensions/builtin/terminal/prompt.d.ts +13 -2
  169. package/dist/core/extensions/builtin/terminal/prompt.d.ts.map +1 -1
  170. package/dist/core/extensions/builtin/terminal/prompt.js +18 -7
  171. package/dist/core/extensions/builtin/terminal/prompt.js.map +1 -1
  172. package/dist/core/extensions/builtin/todotools/prompt.d.ts +2 -2
  173. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/todotools/prompt.js +3 -6
  175. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  176. package/dist/core/extensions/builtin/tool-search/native-search.d.ts +1 -1
  177. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/tool-search/native-search.js +1 -1
  179. package/dist/core/extensions/builtin/tool-search/native-search.js.map +1 -1
  180. package/dist/core/extensions/builtin/ttsr/detectors/collapse-paragraphs.d.ts +34 -0
  181. package/dist/core/extensions/builtin/ttsr/detectors/collapse-paragraphs.d.ts.map +1 -0
  182. package/dist/core/extensions/builtin/ttsr/detectors/collapse-paragraphs.js +121 -0
  183. package/dist/core/extensions/builtin/ttsr/detectors/collapse-paragraphs.js.map +1 -0
  184. package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts +2 -0
  185. package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts.map +1 -1
  186. package/dist/core/extensions/builtin/ttsr/detectors/collapse.js +6 -2
  187. package/dist/core/extensions/builtin/ttsr/detectors/collapse.js.map +1 -1
  188. package/dist/core/extensions/index.d.ts +1 -1
  189. package/dist/core/extensions/index.d.ts.map +1 -1
  190. package/dist/core/extensions/index.js.map +1 -1
  191. package/dist/core/extensions/runner.d.ts +5 -0
  192. package/dist/core/extensions/runner.d.ts.map +1 -1
  193. package/dist/core/extensions/runner.js +44 -1
  194. package/dist/core/extensions/runner.js.map +1 -1
  195. package/dist/core/extensions/types.d.ts +26 -3
  196. package/dist/core/extensions/types.d.ts.map +1 -1
  197. package/dist/core/extensions/types.js.map +1 -1
  198. package/dist/core/http-dispatcher.d.ts.map +1 -1
  199. package/dist/core/http-dispatcher.js +2 -0
  200. package/dist/core/http-dispatcher.js.map +1 -1
  201. package/dist/core/manual-continue.d.ts +13 -0
  202. package/dist/core/manual-continue.d.ts.map +1 -0
  203. package/dist/core/manual-continue.js +19 -0
  204. package/dist/core/manual-continue.js.map +1 -0
  205. package/dist/core/messages.d.ts.map +1 -1
  206. package/dist/core/messages.js +8 -2
  207. package/dist/core/messages.js.map +1 -1
  208. package/dist/core/model-config.d.ts.map +1 -1
  209. package/dist/core/model-config.js +3 -0
  210. package/dist/core/model-config.js.map +1 -1
  211. package/dist/core/provider-composer.d.ts.map +1 -1
  212. package/dist/core/provider-composer.js +13 -2
  213. package/dist/core/provider-composer.js.map +1 -1
  214. package/dist/core/session-manager.d.ts.map +1 -1
  215. package/dist/core/session-manager.js +28 -4
  216. package/dist/core/session-manager.js.map +1 -1
  217. package/dist/core/settings-manager.d.ts +5 -5
  218. package/dist/core/settings-manager.d.ts.map +1 -1
  219. package/dist/core/settings-manager.js +34 -6
  220. package/dist/core/settings-manager.js.map +1 -1
  221. package/dist/core/skills.d.ts.map +1 -1
  222. package/dist/core/skills.js +19 -2
  223. package/dist/core/skills.js.map +1 -1
  224. package/dist/core/terminal-settings.d.ts +3 -0
  225. package/dist/core/terminal-settings.d.ts.map +1 -1
  226. package/dist/core/terminal-settings.js.map +1 -1
  227. package/dist/core/tools/bash.d.ts.map +1 -1
  228. package/dist/core/tools/bash.js +1 -1
  229. package/dist/core/tools/bash.js.map +1 -1
  230. package/dist/core/tools/edit.d.ts.map +1 -1
  231. package/dist/core/tools/edit.js +2 -2
  232. package/dist/core/tools/edit.js.map +1 -1
  233. package/dist/core/tools/find.d.ts.map +1 -1
  234. package/dist/core/tools/find.js +2 -2
  235. package/dist/core/tools/find.js.map +1 -1
  236. package/dist/core/tools/grep.d.ts.map +1 -1
  237. package/dist/core/tools/grep.js +2 -2
  238. package/dist/core/tools/grep.js.map +1 -1
  239. package/dist/core/tools/ls.d.ts.map +1 -1
  240. package/dist/core/tools/ls.js +2 -2
  241. package/dist/core/tools/ls.js.map +1 -1
  242. package/dist/core/tools/read.d.ts.map +1 -1
  243. package/dist/core/tools/read.js +1 -1
  244. package/dist/core/tools/read.js.map +1 -1
  245. package/dist/core/tools/write.d.ts.map +1 -1
  246. package/dist/core/tools/write.js +3 -3
  247. package/dist/core/tools/write.js.map +1 -1
  248. package/dist/index.d.ts +1 -1
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js.map +1 -1
  251. package/dist/main.d.ts.map +1 -1
  252. package/dist/main.js +2 -0
  253. package/dist/main.js.map +1 -1
  254. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/scoped-models-selector.js +5 -11
  256. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  257. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  258. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  259. package/dist/modes/interactive/components/settings-selector.js +21 -8
  260. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  261. package/dist/modes/interactive/components/thinking-selector.js +2 -2
  262. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  263. package/dist/modes/interactive/components/trust-selector.js +2 -2
  264. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  265. package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
  266. package/dist/modes/interactive/grok/welcome-card.js +5 -2
  267. package/dist/modes/interactive/grok/welcome-card.js.map +1 -1
  268. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  269. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  270. package/dist/modes/interactive/interactive-mode.js +74 -14
  271. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  272. package/dist/modes/interactive/version-label.d.ts +7 -0
  273. package/dist/modes/interactive/version-label.d.ts.map +1 -0
  274. package/dist/modes/interactive/version-label.js +9 -0
  275. package/dist/modes/interactive/version-label.js.map +1 -0
  276. package/dist/modes/print-mode.d.ts.map +1 -1
  277. package/dist/modes/print-mode.js +9 -0
  278. package/dist/modes/print-mode.js.map +1 -1
  279. package/dist/modes/rpc/connection-handler.d.ts +2 -0
  280. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  281. package/dist/modes/rpc/connection-handler.js +71 -12
  282. package/dist/modes/rpc/connection-handler.js.map +1 -1
  283. package/dist/modes/rpc/custom-capability.d.ts +5 -0
  284. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  285. package/dist/modes/rpc/custom-capability.js +5 -0
  286. package/dist/modes/rpc/custom-capability.js.map +1 -1
  287. package/dist/modes/rpc/login-prompts.d.ts +24 -0
  288. package/dist/modes/rpc/login-prompts.d.ts.map +1 -0
  289. package/dist/modes/rpc/login-prompts.js +44 -0
  290. package/dist/modes/rpc/login-prompts.js.map +1 -0
  291. package/dist/modes/rpc/media-placeholders.d.ts +49 -0
  292. package/dist/modes/rpc/media-placeholders.d.ts.map +1 -0
  293. package/dist/modes/rpc/media-placeholders.js +151 -0
  294. package/dist/modes/rpc/media-placeholders.js.map +1 -0
  295. package/dist/modes/rpc/multi-session-host.js +3 -0
  296. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  297. package/dist/modes/rpc/rpc-client.d.ts +8 -0
  298. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  299. package/dist/modes/rpc/rpc-client.js +11 -0
  300. package/dist/modes/rpc/rpc-client.js.map +1 -1
  301. package/dist/modes/rpc/rpc-types.d.ts +23 -1
  302. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  303. package/dist/modes/rpc/rpc-types.js +1 -0
  304. package/dist/modes/rpc/rpc-types.js.map +1 -1
  305. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  306. package/dist/modes/rpc/session-command-router.js +2 -1
  307. package/dist/modes/rpc/session-command-router.js.map +1 -1
  308. package/dist/modes/rpc/session-event-fanout.d.ts +13 -2
  309. package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
  310. package/dist/modes/rpc/session-event-fanout.js +36 -12
  311. package/dist/modes/rpc/session-event-fanout.js.map +1 -1
  312. package/dist/modes/rpc/session-event-writer.d.ts +3 -1
  313. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  314. package/dist/modes/rpc/session-event-writer.js +23 -13
  315. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  316. package/dist/modes/rpc/socket-event-fanout.d.ts +8 -1
  317. package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -1
  318. package/dist/modes/rpc/socket-event-fanout.js +32 -9
  319. package/dist/modes/rpc/socket-event-fanout.js.map +1 -1
  320. package/dist/utils/version-check.d.ts.map +1 -1
  321. package/dist/utils/version-check.js +3 -4
  322. package/dist/utils/version-check.js.map +1 -1
  323. package/docs/compaction.md +2 -0
  324. package/docs/environment-variables.md +5 -0
  325. package/docs/extensions.md +22 -2
  326. package/docs/keybindings.md +1 -1
  327. package/docs/models.md +3 -0
  328. package/docs/quickstart.md +1 -1
  329. package/docs/rpc.md +105 -1
  330. package/docs/settings.md +17 -32
  331. package/docs/terminal-setup.md +27 -0
  332. package/docs/usage.md +5 -3
  333. package/docs/windows.md +1 -1
  334. package/node_modules/@anthropic-ai/claude-agent-sdk/bridge.d.ts +18 -1
  335. package/node_modules/@anthropic-ai/claude-agent-sdk/bridge.mjs +155 -106
  336. package/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.js +144 -83
  337. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.json +21 -32
  338. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.zst.json +25 -36
  339. package/node_modules/@anthropic-ai/claude-agent-sdk/package.json +2 -2
  340. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk-tools.d.ts +93 -31
  341. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.d.ts +473 -31
  342. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +140 -93
  343. package/node_modules/@anthropic-ai/sdk/CHANGELOG.md +96 -0
  344. package/node_modules/@anthropic-ai/sdk/README.md +1 -1
  345. package/node_modules/@anthropic-ai/sdk/core/credentials.d.mts.map +1 -1
  346. package/node_modules/@anthropic-ai/sdk/core/credentials.d.ts.map +1 -1
  347. package/node_modules/@anthropic-ai/sdk/core/credentials.js +5 -7
  348. package/node_modules/@anthropic-ai/sdk/core/credentials.js.map +1 -1
  349. package/node_modules/@anthropic-ai/sdk/core/credentials.mjs +5 -7
  350. package/node_modules/@anthropic-ai/sdk/core/credentials.mjs.map +1 -1
  351. package/node_modules/@anthropic-ai/sdk/core/middleware.d.mts.map +1 -1
  352. package/node_modules/@anthropic-ai/sdk/core/middleware.d.ts.map +1 -1
  353. package/node_modules/@anthropic-ai/sdk/core/middleware.js +4 -4
  354. package/node_modules/@anthropic-ai/sdk/core/middleware.js.map +1 -1
  355. package/node_modules/@anthropic-ai/sdk/core/middleware.mjs +4 -4
  356. package/node_modules/@anthropic-ai/sdk/core/middleware.mjs.map +1 -1
  357. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.mts +45 -0
  358. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.mts.map +1 -0
  359. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.ts +45 -0
  360. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.ts.map +1 -0
  361. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.js +58 -0
  362. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.js.map +1 -0
  363. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.mjs +54 -0
  364. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.mjs.map +1 -0
  365. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.js +1 -1
  366. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.js.map +1 -1
  367. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs +1 -1
  368. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs.map +1 -1
  369. package/node_modules/@anthropic-ai/sdk/internal/errors.d.mts.map +1 -1
  370. package/node_modules/@anthropic-ai/sdk/internal/errors.d.ts.map +1 -1
  371. package/node_modules/@anthropic-ai/sdk/internal/errors.js +3 -1
  372. package/node_modules/@anthropic-ai/sdk/internal/errors.js.map +1 -1
  373. package/node_modules/@anthropic-ai/sdk/internal/errors.mjs +3 -1
  374. package/node_modules/@anthropic-ai/sdk/internal/errors.mjs.map +1 -1
  375. package/node_modules/@anthropic-ai/sdk/internal/file-store.d.mts.map +1 -1
  376. package/node_modules/@anthropic-ai/sdk/internal/file-store.d.ts.map +1 -1
  377. package/node_modules/@anthropic-ai/sdk/internal/file-store.js +23 -25
  378. package/node_modules/@anthropic-ai/sdk/internal/file-store.js.map +1 -1
  379. package/node_modules/@anthropic-ai/sdk/internal/file-store.mjs +5 -6
  380. package/node_modules/@anthropic-ai/sdk/internal/file-store.mjs.map +1 -1
  381. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.mts +9 -0
  382. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.mts.map +1 -0
  383. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.ts +9 -0
  384. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.ts.map +1 -0
  385. package/node_modules/@anthropic-ai/sdk/internal/node.browser.js +22 -0
  386. package/node_modules/@anthropic-ai/sdk/internal/node.browser.js.map +1 -0
  387. package/node_modules/@anthropic-ai/sdk/internal/node.browser.mjs +19 -0
  388. package/node_modules/@anthropic-ai/sdk/internal/node.browser.mjs.map +1 -0
  389. package/node_modules/@anthropic-ai/sdk/internal/node.d.mts +14 -0
  390. package/node_modules/@anthropic-ai/sdk/internal/node.d.mts.map +1 -0
  391. package/node_modules/@anthropic-ai/sdk/internal/node.d.ts +14 -0
  392. package/node_modules/@anthropic-ai/sdk/internal/node.d.ts.map +1 -0
  393. package/node_modules/@anthropic-ai/sdk/internal/node.js +24 -0
  394. package/node_modules/@anthropic-ai/sdk/internal/node.js.map +1 -0
  395. package/node_modules/@anthropic-ai/sdk/internal/node.mjs +14 -0
  396. package/node_modules/@anthropic-ai/sdk/internal/node.mjs.map +1 -0
  397. package/node_modules/@anthropic-ai/sdk/internal/parse.js +1 -1
  398. package/node_modules/@anthropic-ai/sdk/internal/parse.js.map +1 -1
  399. package/node_modules/@anthropic-ai/sdk/internal/parse.mjs +1 -1
  400. package/node_modules/@anthropic-ai/sdk/internal/parse.mjs.map +1 -1
  401. package/node_modules/@anthropic-ai/sdk/internal/uploads.js +10 -6
  402. package/node_modules/@anthropic-ai/sdk/internal/uploads.js.map +1 -1
  403. package/node_modules/@anthropic-ai/sdk/internal/uploads.mjs +10 -6
  404. package/node_modules/@anthropic-ai/sdk/internal/uploads.mjs.map +1 -1
  405. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.mts +6 -0
  406. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.mts.map +1 -1
  407. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.ts +6 -0
  408. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.ts.map +1 -1
  409. package/node_modules/@anthropic-ai/sdk/internal/utils/values.js +7 -0
  410. package/node_modules/@anthropic-ai/sdk/internal/utils/values.js.map +1 -1
  411. package/node_modules/@anthropic-ai/sdk/internal/utils/values.mjs +6 -0
  412. package/node_modules/@anthropic-ai/sdk/internal/utils/values.mjs.map +1 -1
  413. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.d.mts.map +1 -1
  414. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.d.ts.map +1 -1
  415. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js +6 -4
  416. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js.map +1 -1
  417. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs +4 -2
  418. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs.map +1 -1
  419. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.mts.map +1 -1
  420. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.ts.map +1 -1
  421. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.js +3 -4
  422. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.js.map +1 -1
  423. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs +1 -2
  424. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs.map +1 -1
  425. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.js +1 -1
  426. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.js.map +1 -1
  427. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs +1 -1
  428. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs.map +1 -1
  429. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.js +1 -1
  430. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.js.map +1 -1
  431. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs +1 -1
  432. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs.map +1 -1
  433. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.d.mts.map +1 -1
  434. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.d.ts.map +1 -1
  435. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.js +2 -3
  436. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.js.map +1 -1
  437. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs +2 -3
  438. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs.map +1 -1
  439. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.js +1 -1
  440. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.js.map +1 -1
  441. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs +1 -1
  442. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs.map +1 -1
  443. package/node_modules/@anthropic-ai/sdk/lib/middleware.d.mts.map +1 -1
  444. package/node_modules/@anthropic-ai/sdk/lib/middleware.d.ts.map +1 -1
  445. package/node_modules/@anthropic-ai/sdk/lib/middleware.js +30 -7
  446. package/node_modules/@anthropic-ai/sdk/lib/middleware.js.map +1 -1
  447. package/node_modules/@anthropic-ai/sdk/lib/middleware.mjs +30 -7
  448. package/node_modules/@anthropic-ai/sdk/lib/middleware.mjs.map +1 -1
  449. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.mts +3 -2
  450. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.mts.map +1 -1
  451. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.ts +3 -2
  452. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.ts.map +1 -1
  453. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.js +3 -46
  454. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.js.map +1 -1
  455. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.mjs +3 -46
  456. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.mjs.map +1 -1
  457. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.mts +131 -0
  458. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.mts.map +1 -0
  459. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.ts +131 -0
  460. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.ts.map +1 -0
  461. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.js +45 -0
  462. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.js.map +1 -0
  463. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.mjs +41 -0
  464. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.mjs.map +1 -0
  465. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.d.mts.map +1 -1
  466. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.d.ts.map +1 -1
  467. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.js +35 -6
  468. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.js.map +1 -1
  469. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs +35 -6
  470. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs.map +1 -1
  471. package/node_modules/@anthropic-ai/sdk/package.json +4 -11
  472. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.mts +1 -1
  473. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.mts.map +1 -1
  474. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.ts +1 -1
  475. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.ts.map +1 -1
  476. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.js.map +1 -1
  477. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs.map +1 -1
  478. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.mts +13 -9
  479. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.mts.map +1 -1
  480. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts +13 -9
  481. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts.map +1 -1
  482. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.js +4 -0
  483. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.js.map +1 -1
  484. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs +4 -0
  485. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs.map +1 -1
  486. package/node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.d.mts +6 -6
  487. package/node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.d.ts +6 -6
  488. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.mts +3 -2
  489. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.mts.map +1 -1
  490. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.ts +3 -2
  491. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.ts.map +1 -1
  492. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.mts +28 -1
  493. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.mts.map +1 -1
  494. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.ts +28 -1
  495. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.ts.map +1 -1
  496. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.mts +8 -1
  497. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.mts.map +1 -1
  498. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.ts +8 -1
  499. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.ts.map +1 -1
  500. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.js.map +1 -1
  501. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs.map +1 -1
  502. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.mts +25 -5
  503. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.mts.map +1 -1
  504. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.ts +25 -5
  505. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.ts.map +1 -1
  506. package/node_modules/@anthropic-ai/sdk/resources/beta/files.js +6 -6
  507. package/node_modules/@anthropic-ai/sdk/resources/beta/files.js.map +1 -1
  508. package/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs +7 -7
  509. package/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs.map +1 -1
  510. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.mts +5 -4
  511. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.mts.map +1 -1
  512. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts +5 -4
  513. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts.map +1 -1
  514. package/node_modules/@anthropic-ai/sdk/resources/beta/index.js +11 -9
  515. package/node_modules/@anthropic-ai/sdk/resources/beta/index.js.map +1 -1
  516. package/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs +1 -0
  517. package/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs.map +1 -1
  518. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.mts +12 -9
  519. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.mts.map +1 -1
  520. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.ts +12 -9
  521. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.ts.map +1 -1
  522. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.mts +8 -5
  523. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
  524. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.ts +8 -5
  525. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
  526. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.mts +1 -1
  527. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.mts.map +1 -1
  528. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.ts +1 -1
  529. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.ts.map +1 -1
  530. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.js.map +1 -1
  531. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.mjs.map +1 -1
  532. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.mts +198 -29
  533. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.mts.map +1 -1
  534. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts +198 -29
  535. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts.map +1 -1
  536. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.js.map +1 -1
  537. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs.map +1 -1
  538. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.mts +177 -0
  539. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.mts.map +1 -0
  540. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.ts +177 -0
  541. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.ts.map +1 -0
  542. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.js +56 -0
  543. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.js.map +1 -0
  544. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs +52 -0
  545. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs.map +1 -0
  546. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.mts +74 -0
  547. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.mts.map +1 -0
  548. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.ts +74 -0
  549. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.ts.map +1 -0
  550. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.js +52 -0
  551. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.js.map +1 -0
  552. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs +48 -0
  553. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs.map +1 -0
  554. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.mts +272 -0
  555. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.mts.map +1 -0
  556. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.ts +272 -0
  557. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.ts.map +1 -0
  558. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.js +119 -0
  559. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.js.map +1 -0
  560. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs +115 -0
  561. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs.map +1 -0
  562. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.mts +14 -0
  563. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.mts.map +1 -0
  564. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.ts +14 -0
  565. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.ts.map +1 -0
  566. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.js +21 -0
  567. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.js.map +1 -0
  568. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs +16 -0
  569. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs.map +1 -0
  570. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.mts +4 -0
  571. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.mts.map +1 -0
  572. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.ts +4 -0
  573. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.ts.map +1 -0
  574. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.js +11 -0
  575. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.js.map +1 -0
  576. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.mjs +5 -0
  577. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.mjs.map +1 -0
  578. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.mts +353 -0
  579. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.mts.map +1 -0
  580. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.ts +353 -0
  581. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.ts.map +1 -0
  582. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.js +169 -0
  583. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.js.map +1 -0
  584. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs +165 -0
  585. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs.map +1 -0
  586. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.mts +3 -0
  587. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.mts.map +1 -0
  588. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.ts +3 -0
  589. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.ts.map +1 -0
  590. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.js +9 -0
  591. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.js.map +1 -0
  592. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.mjs +4 -0
  593. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.mjs.map +1 -0
  594. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.mts +468 -0
  595. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.mts.map +1 -0
  596. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.ts +468 -0
  597. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.ts.map +1 -0
  598. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.js +198 -0
  599. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.js.map +1 -0
  600. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs +193 -0
  601. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs.map +1 -0
  602. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.mts +124 -0
  603. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.mts.map +1 -0
  604. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.ts +124 -0
  605. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.ts.map +1 -0
  606. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.js +114 -0
  607. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.js.map +1 -0
  608. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs +110 -0
  609. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs.map +1 -0
  610. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.mts +2 -0
  611. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.mts.map +1 -0
  612. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.ts +2 -0
  613. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.ts.map +1 -0
  614. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.js +6 -0
  615. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.js.map +1 -0
  616. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.mjs +3 -0
  617. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.mjs.map +1 -0
  618. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.mts +2 -0
  619. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.mts.map +1 -0
  620. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.ts +2 -0
  621. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.ts.map +1 -0
  622. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.js +6 -0
  623. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.js.map +1 -0
  624. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.mjs +3 -0
  625. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.mjs.map +1 -0
  626. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.mts +11 -0
  627. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.mts.map +1 -0
  628. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.ts +11 -0
  629. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.ts.map +1 -0
  630. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.js +25 -0
  631. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.js.map +1 -0
  632. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.mjs +12 -0
  633. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.mjs.map +1 -0
  634. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.mts +162 -0
  635. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.mts.map +1 -0
  636. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.ts +162 -0
  637. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.ts.map +1 -0
  638. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.js +76 -0
  639. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.js.map +1 -0
  640. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs +72 -0
  641. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs.map +1 -0
  642. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.mts +73 -0
  643. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.mts.map +1 -0
  644. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.ts +73 -0
  645. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.ts.map +1 -0
  646. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.js +62 -0
  647. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.js.map +1 -0
  648. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs +57 -0
  649. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs.map +1 -0
  650. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.mts +77 -0
  651. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.mts.map +1 -0
  652. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.ts +77 -0
  653. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.ts.map +1 -0
  654. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.js +31 -0
  655. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.js.map +1 -0
  656. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs +27 -0
  657. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs.map +1 -0
  658. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.mts +3 -0
  659. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.mts.map +1 -0
  660. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.ts +3 -0
  661. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.ts.map +1 -0
  662. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.js +9 -0
  663. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.js.map +1 -0
  664. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.mjs +4 -0
  665. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.mjs.map +1 -0
  666. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.mts +258 -0
  667. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.mts.map +1 -0
  668. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.ts +258 -0
  669. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.ts.map +1 -0
  670. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.js +174 -0
  671. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.js.map +1 -0
  672. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs +169 -0
  673. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -0
  674. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.mts +141 -0
  675. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.mts.map +1 -0
  676. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.ts +141 -0
  677. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.ts.map +1 -0
  678. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.js +125 -0
  679. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.js.map +1 -0
  680. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs +121 -0
  681. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs.map +1 -0
  682. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.mts +2 -0
  683. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.mts.map +1 -0
  684. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.ts +2 -0
  685. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.ts.map +1 -0
  686. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.js +6 -0
  687. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.js.map +1 -0
  688. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.mjs +3 -0
  689. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.mjs.map +1 -0
  690. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.mts +124 -0
  691. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.mts.map +1 -0
  692. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.ts +124 -0
  693. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.ts.map +1 -0
  694. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.js +67 -0
  695. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.js.map +1 -0
  696. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs +63 -0
  697. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs.map +1 -0
  698. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.mts +5 -0
  699. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.mts.map +1 -0
  700. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.ts +5 -0
  701. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.ts.map +1 -0
  702. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.js +13 -0
  703. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.js.map +1 -0
  704. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.mjs +6 -0
  705. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.mjs.map +1 -0
  706. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.mts +135 -0
  707. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.mts.map +1 -0
  708. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.ts +135 -0
  709. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.ts.map +1 -0
  710. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.js +102 -0
  711. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.js.map +1 -0
  712. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs +98 -0
  713. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs.map +1 -0
  714. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.mts +83 -0
  715. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -0
  716. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.ts +83 -0
  717. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -0
  718. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.js +34 -0
  719. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.js.map +1 -0
  720. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs +30 -0
  721. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -0
  722. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.mts +210 -0
  723. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.mts.map +1 -0
  724. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.ts +210 -0
  725. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.ts.map +1 -0
  726. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.js +189 -0
  727. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.js.map +1 -0
  728. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs +185 -0
  729. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs.map +1 -0
  730. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.mts +303 -0
  731. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -0
  732. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.ts +303 -0
  733. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -0
  734. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.js +112 -0
  735. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.js.map +1 -0
  736. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs +107 -0
  737. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs.map +1 -0
  738. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.mts +2 -0
  739. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.mts.map +1 -0
  740. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.ts +2 -0
  741. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.ts.map +1 -0
  742. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.js +6 -0
  743. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.js.map +1 -0
  744. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.mjs +3 -0
  745. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.mjs.map +1 -0
  746. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.mts +2 -0
  747. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.mts.map +1 -0
  748. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.ts +2 -0
  749. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.ts.map +1 -0
  750. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.js +6 -0
  751. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.js.map +1 -0
  752. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.mjs +3 -0
  753. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.mjs.map +1 -0
  754. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.d.mts +1 -1
  755. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.d.ts +1 -1
  756. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.d.mts +10 -10
  757. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.d.ts +10 -10
  758. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.mts +2 -1
  759. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.mts.map +1 -1
  760. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.ts +2 -1
  761. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.ts.map +1 -1
  762. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.js.map +1 -1
  763. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs.map +1 -1
  764. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.mts +2 -2
  765. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.mts.map +1 -1
  766. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.ts +2 -2
  767. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.ts.map +1 -1
  768. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.js.map +1 -1
  769. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.mjs.map +1 -1
  770. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.mts +48 -120
  771. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.mts.map +1 -1
  772. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.ts +48 -120
  773. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.ts.map +1 -1
  774. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.js +12 -8
  775. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.js.map +1 -1
  776. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs +12 -8
  777. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs.map +1 -1
  778. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.mts +35 -138
  779. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.mts.map +1 -1
  780. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.ts +35 -138
  781. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.ts.map +1 -1
  782. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.js +18 -18
  783. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.js.map +1 -1
  784. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs +18 -18
  785. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs.map +1 -1
  786. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.mts +21 -25
  787. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.mts.map +1 -1
  788. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.ts +21 -25
  789. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.ts.map +1 -1
  790. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.mts +16 -17
  791. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.mts.map +1 -1
  792. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.ts +16 -17
  793. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.ts.map +1 -1
  794. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.js +21 -8
  795. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.js.map +1 -1
  796. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs +21 -8
  797. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs.map +1 -1
  798. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.mts +1 -3
  799. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.mts.map +1 -1
  800. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts +1 -3
  801. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts.map +1 -1
  802. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.js.map +1 -1
  803. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs.map +1 -1
  804. package/node_modules/@anthropic-ai/sdk/src/core/credentials.ts +5 -7
  805. package/node_modules/@anthropic-ai/sdk/src/core/middleware.ts +4 -3
  806. package/node_modules/@anthropic-ai/sdk/src/helpers/beta/standard-schema.ts +99 -0
  807. package/node_modules/@anthropic-ai/sdk/src/internal/detect-platform.ts +1 -1
  808. package/node_modules/@anthropic-ai/sdk/src/internal/errors.ts +3 -1
  809. package/node_modules/@anthropic-ai/sdk/src/internal/file-store.ts +11 -10
  810. package/node_modules/@anthropic-ai/sdk/src/internal/node.browser.ts +22 -0
  811. package/node_modules/@anthropic-ai/sdk/src/internal/node.ts +14 -0
  812. package/node_modules/@anthropic-ai/sdk/src/internal/parse.ts +1 -1
  813. package/node_modules/@anthropic-ai/sdk/src/internal/uploads.ts +10 -7
  814. package/node_modules/@anthropic-ai/sdk/src/internal/utils/values.ts +7 -0
  815. package/node_modules/@anthropic-ai/sdk/src/lib/BetaMessageStream.ts +5 -3
  816. package/node_modules/@anthropic-ai/sdk/src/lib/MessageStream.ts +1 -3
  817. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/credential-chain.ts +1 -1
  818. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/identity-token.ts +1 -1
  819. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/types.ts +2 -3
  820. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/user-oauth.ts +1 -1
  821. package/node_modules/@anthropic-ai/sdk/src/lib/middleware.ts +33 -9
  822. package/node_modules/@anthropic-ai/sdk/src/lib/sessions/accumulate.ts +7 -49
  823. package/node_modules/@anthropic-ai/sdk/src/lib/standard-schema.ts +209 -0
  824. package/node_modules/@anthropic-ai/sdk/src/lib/tools/BetaToolRunner.ts +38 -6
  825. package/node_modules/@anthropic-ai/sdk/src/resources/beta/agents/agents.ts +1 -0
  826. package/node_modules/@anthropic-ai/sdk/src/resources/beta/beta.ts +45 -15
  827. package/node_modules/@anthropic-ai/sdk/src/resources/beta/deployment-runs.ts +6 -6
  828. package/node_modules/@anthropic-ai/sdk/src/resources/beta/deployments.ts +3 -2
  829. package/node_modules/@anthropic-ai/sdk/src/resources/beta/dreams.ts +42 -0
  830. package/node_modules/@anthropic-ai/sdk/src/resources/beta/environments/environments.ts +8 -1
  831. package/node_modules/@anthropic-ai/sdk/src/resources/beta/files.ts +34 -11
  832. package/node_modules/@anthropic-ai/sdk/src/resources/beta/index.ts +13 -7
  833. package/node_modules/@anthropic-ai/sdk/src/resources/beta/memory-stores/memories.ts +12 -9
  834. package/node_modules/@anthropic-ai/sdk/src/resources/beta/memory-stores/memory-versions.ts +8 -5
  835. package/node_modules/@anthropic-ai/sdk/src/resources/beta/messages/index.ts +5 -1
  836. package/node_modules/@anthropic-ai/sdk/src/resources/beta/messages/messages.ts +221 -38
  837. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/api-keys.ts +231 -0
  838. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/compliance-settings.ts +96 -0
  839. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/external-keys.ts +365 -0
  840. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/federation.ts +71 -0
  841. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/index.ts +31 -0
  842. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/issuers.ts +486 -0
  843. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/index.ts +23 -0
  844. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/rules.ts +624 -0
  845. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/workspaces.ts +196 -0
  846. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules.ts +3 -0
  847. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation.ts +3 -0
  848. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/index.ts +92 -0
  849. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/invites.ts +207 -0
  850. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/organization.ts +269 -0
  851. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/rate-limits.ts +104 -0
  852. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/index.ts +21 -0
  853. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/service-accounts.ts +389 -0
  854. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/workspaces.ts +217 -0
  855. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts.ts +3 -0
  856. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/users.ts +163 -0
  857. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/index.ts +43 -0
  858. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/members.ts +209 -0
  859. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/rate-limits.ts +113 -0
  860. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/service-accounts.ts +325 -0
  861. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/workspaces.ts +450 -0
  862. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces.ts +3 -0
  863. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization.ts +3 -0
  864. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/events.ts +1 -1
  865. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/sessions.ts +10 -10
  866. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/threads/threads.ts +2 -1
  867. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/index.ts +7 -10
  868. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/skills.ts +60 -150
  869. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/versions.ts +43 -166
  870. package/node_modules/@anthropic-ai/sdk/src/resources/beta/user-profiles.ts +24 -27
  871. package/node_modules/@anthropic-ai/sdk/src/resources/beta/webhooks.ts +25 -29
  872. package/node_modules/@anthropic-ai/sdk/src/resources/messages/messages.ts +2 -8
  873. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/fs-util.ts +6 -5
  874. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/memories.ts +5 -3
  875. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/node.browser.ts +1 -5
  876. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/node.ts +122 -17
  877. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/skills.ts +10 -43
  878. package/node_modules/@anthropic-ai/sdk/src/version.ts +1 -1
  879. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.d.mts.map +1 -1
  880. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.d.ts.map +1 -1
  881. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.js +13 -15
  882. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.js.map +1 -1
  883. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.mjs +3 -4
  884. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.mjs.map +1 -1
  885. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.d.mts.map +1 -1
  886. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.d.ts.map +1 -1
  887. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.js +6 -4
  888. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.js.map +1 -1
  889. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.mjs +5 -3
  890. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.mjs.map +1 -1
  891. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.mts +1 -2
  892. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.mts.map +1 -1
  893. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.ts +1 -2
  894. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.ts.map +1 -1
  895. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.js +0 -4
  896. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.js.map +1 -1
  897. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs +0 -3
  898. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs.map +1 -1
  899. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.mts +11 -9
  900. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.mts.map +1 -1
  901. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.ts +11 -9
  902. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.ts.map +1 -1
  903. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.js +96 -8
  904. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.js.map +1 -1
  905. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.mjs +96 -7
  906. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.mjs.map +1 -1
  907. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.mts +0 -8
  908. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.mts.map +1 -1
  909. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.ts +0 -8
  910. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.ts.map +1 -1
  911. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.js +20 -46
  912. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.js.map +1 -1
  913. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.mjs +9 -33
  914. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.mjs.map +1 -1
  915. package/node_modules/@anthropic-ai/sdk/version.d.mts +1 -1
  916. package/node_modules/@anthropic-ai/sdk/version.d.ts +1 -1
  917. package/node_modules/@anthropic-ai/sdk/version.js +1 -1
  918. package/node_modules/@anthropic-ai/sdk/version.mjs +1 -1
  919. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +57 -0
  920. package/node_modules/@code-yeongyu/senpi-codemode/README.md +2 -0
  921. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  922. package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +29 -0
  923. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +20 -1
  924. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +6 -0
  925. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.d.ts +10 -0
  926. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.js +126 -0
  927. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +33 -91
  928. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +7 -0
  929. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +8 -0
  930. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +15 -2
  931. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +10 -5
  932. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  933. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +58 -64
  934. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  936. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +16 -6
  937. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  938. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts +1 -1
  939. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  940. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js +6 -1
  941. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  942. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +1 -1
  943. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -1
  944. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +2 -0
  945. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js +40 -10
  947. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  948. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +6 -2
  949. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  950. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  952. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +1 -1
  953. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +130 -15
  955. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts +20 -0
  957. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts.map +1 -0
  958. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.js +40 -0
  959. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.js.map +1 -0
  960. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +1 -1
  961. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  962. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  963. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +16 -1
  964. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  965. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +2 -1
  967. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts +2 -0
  969. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  970. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +6 -0
  971. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  972. package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.d.ts +1 -3
  973. package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +2 -16
  975. package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js +1 -1
  977. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
  978. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +16 -3
  979. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -1
  980. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +40 -6
  981. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -1
  982. package/node_modules/@earendil-works/pi-ai/dist/compat/extension-oauth-types.d.ts +8 -0
  983. package/node_modules/@earendil-works/pi-ai/dist/compat/extension-oauth-types.d.ts.map +1 -1
  984. package/node_modules/@earendil-works/pi-ai/dist/compat/extension-oauth-types.js.map +1 -1
  985. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  986. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  988. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-ai/dist/models.js +3 -2
  991. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  992. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts +2 -0
  993. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts.map +1 -1
  994. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js.map +1 -1
  995. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  996. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  997. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  998. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  999. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  1000. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  1001. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  1002. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  1003. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  1004. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  1005. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  1006. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  1007. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  1008. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  1009. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts +1 -1
  1010. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts.map +1 -1
  1011. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +8 -1
  1012. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js.map +1 -1
  1013. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -1
  1014. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.d.ts +23 -0
  1017. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.d.ts.map +1 -0
  1018. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.js +58 -0
  1019. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.js.map +1 -0
  1020. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -1
  1021. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js +53 -12
  1022. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -1
  1023. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  1024. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +2 -0
  1025. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  1026. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +4 -2
  1027. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  1028. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +3 -0
  1029. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  1030. package/node_modules/@earendil-works/pi-ai/package.json +3 -3
  1031. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  1032. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  1033. package/node_modules/@earendil-works/pi-tui/README.md +1 -1
  1034. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -0
  1035. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  1036. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +36 -3
  1037. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  1038. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  1039. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  1040. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  1041. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1042. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +2 -0
  1043. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  1044. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +106 -6
  1045. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1046. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +6 -0
  1047. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1048. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +17 -4
  1049. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1050. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +11 -0
  1051. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1052. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +57 -15
  1053. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1054. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1055. package/node_modules/@earendil-works/pi-tui/dist/tui.js +22 -7
  1056. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1057. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  1058. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAA6B,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAqB,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,aAAa,CAC5B,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/C,MAAM,CAWR;AA2BD,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACjD,aAAa,CAAC,EAAE,MAAM,GACpB,iBAAiB,EAAE,CA+CrB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,CASlG"}
1
+ {"version":3,"file":"prompt-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,aAAa,CAC5B,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/C,MAAM,CAWR;AAMD,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACjD,aAAa,CAAC,EAAE,MAAM,GACpB,iBAAiB,EAAE,CA+CrB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,CASlG"}
@@ -1,3 +1,4 @@
1
+ import { appendSdkContentBlocks } from "./content-blocks.js";
1
2
  import { mapPiToolNameToSdk } from "./tools.js";
2
3
  export { mapPiToolNameToSdk } from "./tools.js";
3
4
  export function contentToText(content, customToolNameToSdk) {
@@ -15,29 +16,7 @@ export function contentToText(content, customToolNameToSdk) {
15
16
  .join("\n");
16
17
  }
17
18
  function appendContentBlocks(blocks, content) {
18
- if (typeof content === "string") {
19
- if (content.length > 0)
20
- blocks.push({ type: "text", text: content });
21
- return content.trim().length > 0;
22
- }
23
- let hasText = false;
24
- for (const block of content) {
25
- if (block.type === "text") {
26
- blocks.push({ type: "text", text: block.text });
27
- hasText ||= block.text.trim().length > 0;
28
- }
29
- else {
30
- blocks.push({
31
- type: "image",
32
- source: {
33
- type: "base64",
34
- media_type: block.mimeType,
35
- data: block.data,
36
- },
37
- });
38
- }
39
- }
40
- return hasText;
19
+ return appendSdkContentBlocks(blocks, content);
41
20
  }
42
21
  export function buildPromptBlocks(context, customToolNameToSdk, toolWatchNote) {
43
22
  const blocks = [];
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-bridge.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Context, ImageContent, TextContent } from \"@earendil-works/pi-ai\";\nimport type { Base64ImageSource, ContentBlockParam, SDKUserMessage } from \"./sdk-boundary.ts\";\nimport { mapPiToolNameToSdk } from \"./tools.ts\";\n\nexport { mapPiToolNameToSdk } from \"./tools.ts\";\n\ntype PromptContent = string | readonly (TextContent | ImageContent)[];\n\nexport function contentToText(\n\tcontent: AssistantMessage[\"content\"],\n\tcustomToolNameToSdk?: ReadonlyMap<string, string>,\n): string {\n\treturn content\n\t\t.map((block) => {\n\t\t\tif (block.type === \"text\") return block.text;\n\t\t\tif (block.type === \"thinking\") return block.thinking;\n\t\t\tif (block.type === \"toolCall\") {\n\t\t\t\treturn `Historical tool call (non-executable): ${mapPiToolNameToSdk(block.name, customToolNameToSdk)} args=${JSON.stringify(block.arguments)}`;\n\t\t\t}\n\t\t\treturn `[${block.type}]`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction appendContentBlocks(blocks: ContentBlockParam[], content: PromptContent): boolean {\n\tif (typeof content === \"string\") {\n\t\tif (content.length > 0) blocks.push({ type: \"text\", text: content });\n\t\treturn content.trim().length > 0;\n\t}\n\n\tlet hasText = false;\n\tfor (const block of content) {\n\t\tif (block.type === \"text\") {\n\t\t\tblocks.push({ type: \"text\", text: block.text });\n\t\t\thasText ||= block.text.trim().length > 0;\n\t\t} else {\n\t\t\tblocks.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\tsource: {\n\t\t\t\t\ttype: \"base64\",\n\t\t\t\t\tmedia_type: block.mimeType as Base64ImageSource[\"media_type\"],\n\t\t\t\t\tdata: block.data,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\treturn hasText;\n}\n\nexport function buildPromptBlocks(\n\tcontext: Context,\n\tcustomToolNameToSdk?: ReadonlyMap<string, string>,\n\ttoolWatchNote?: string,\n): ContentBlockParam[] {\n\tconst blocks: ContentBlockParam[] = [];\n\tconst pushText = (text: string): void => {\n\t\tblocks.push({ type: \"text\", text });\n\t};\n\tconst finalMessage = context.messages.at(-1);\n\tconst finalUserMessage = finalMessage?.role === \"user\" ? finalMessage : undefined;\n\tconst history = finalUserMessage ? context.messages.slice(0, -1) : context.messages;\n\n\tif (history.length > 0) {\n\t\tpushText(\"<conversation_history>\\n\");\n\t\tlet hasPreviousTurn = false;\n\t\tconst pushPrefix = (label: string): void => {\n\t\t\tpushText(`${hasPreviousTurn ? \"\\n\\n\" : \"\"}${label}\\n`);\n\t\t\thasPreviousTurn = true;\n\t\t};\n\n\t\tfor (const message of history) {\n\t\t\tif (message.role === \"user\") {\n\t\t\t\tpushPrefix(\"USER:\");\n\t\t\t\tif (!appendContentBlocks(blocks, message.content)) pushText(\"(see attached image)\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tpushPrefix(\"ASSISTANT:\");\n\t\t\t\tconst text = contentToText(message.content, customToolNameToSdk);\n\t\t\t\tif (text.length > 0) pushText(text);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpushPrefix(\n\t\t\t\t`TOOL RESULT (historical ${mapPiToolNameToSdk(message.toolName, customToolNameToSdk)}, id=${message.toolCallId}):`,\n\t\t\t);\n\t\t\tif (!appendContentBlocks(blocks, message.content)) pushText(\"(see attached image)\");\n\t\t}\n\t\tpushText(\"\\n</conversation_history>\");\n\t}\n\n\tif (toolWatchNote?.trim()) {\n\t\tpushText(\"<recovered_tool_results>\\n\");\n\t\tpushText(toolWatchNote.trim());\n\t\tpushText(\"\\n</recovered_tool_results>\");\n\t}\n\tpushText(\n\t\t'The above is the conversation history so far, provided as context. Respond as the assistant to the user message below only. Never emit \"USER:\" or \"ASSISTANT:\" labels or continue the transcript.',\n\t);\n\tif (finalUserMessage && !appendContentBlocks(blocks, finalUserMessage.content)) pushText(\"(see attached image)\");\n\treturn blocks;\n}\n\nexport function buildPromptStream(promptBlocks: ContentBlockParam[]): AsyncIterable<SDKUserMessage> {\n\treturn (async function* () {\n\t\tyield {\n\t\t\ttype: \"user\",\n\t\t\tmessage: { role: \"user\", content: promptBlocks } as SDKUserMessage[\"message\"],\n\t\t\tparent_tool_use_id: null,\n\t\t\tsession_id: \"prompt\",\n\t\t};\n\t})();\n}\n"]}
1
+ {"version":3,"file":"prompt-bridge.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,UAAU,aAAa,CAC5B,OAAoC,EACpC,mBAAiD;IAEjD,OAAO,OAAO;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;QACrD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,0CAA0C,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAChJ,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2B,EAAE,OAAoC;IAC7F,OAAO,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,OAAgB,EAChB,mBAAiD,EACjD,aAAsB;IAEtB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACvC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,YAAY,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QACrC,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,UAAU,GAAG,CAAC,KAAa,EAAQ,EAAE;YAC1C,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;YACvD,eAAe,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,UAAU,CAAC,OAAO,CAAC,CAAC;gBACpB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;oBAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;gBACpF,SAAS;YACV,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;gBACjE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpC,SAAS;YACV,CAAC;YACD,UAAU,CACT,2BAA2B,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,OAAO,CAAC,UAAU,IAAI,CAClH,CAAC;YACF,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;gBAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACrF,CAAC;QACD,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3B,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/B,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACzC,CAAC;IACD,QAAQ,CACP,mMAAmM,CACnM,CAAC;IACF,IAAI,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACjH,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAiC;IAClE,OAAO,CAAC,KAAK,SAAS,CAAC;QACtB,MAAM;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAA+B;YAC7E,kBAAkB,EAAE,IAAI;YACxB,UAAU,EAAE,QAAQ;SACpB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACN,CAAC","sourcesContent":["import type { AssistantMessage, Context } from \"@earendil-works/pi-ai\";\nimport { appendSdkContentBlocks } from \"./content-blocks.ts\";\nimport type { ContentBlockParam, SDKUserMessage } from \"./sdk-boundary.ts\";\nimport { mapPiToolNameToSdk } from \"./tools.ts\";\n\nexport { mapPiToolNameToSdk } from \"./tools.ts\";\n\nexport function contentToText(\n\tcontent: AssistantMessage[\"content\"],\n\tcustomToolNameToSdk?: ReadonlyMap<string, string>,\n): string {\n\treturn content\n\t\t.map((block) => {\n\t\t\tif (block.type === \"text\") return block.text;\n\t\t\tif (block.type === \"thinking\") return block.thinking;\n\t\t\tif (block.type === \"toolCall\") {\n\t\t\t\treturn `Historical tool call (non-executable): ${mapPiToolNameToSdk(block.name, customToolNameToSdk)} args=${JSON.stringify(block.arguments)}`;\n\t\t\t}\n\t\t\treturn `[${block.type}]`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction appendContentBlocks(blocks: ContentBlockParam[], content: string | readonly unknown[]): boolean {\n\treturn appendSdkContentBlocks(blocks, content);\n}\n\nexport function buildPromptBlocks(\n\tcontext: Context,\n\tcustomToolNameToSdk?: ReadonlyMap<string, string>,\n\ttoolWatchNote?: string,\n): ContentBlockParam[] {\n\tconst blocks: ContentBlockParam[] = [];\n\tconst pushText = (text: string): void => {\n\t\tblocks.push({ type: \"text\", text });\n\t};\n\tconst finalMessage = context.messages.at(-1);\n\tconst finalUserMessage = finalMessage?.role === \"user\" ? finalMessage : undefined;\n\tconst history = finalUserMessage ? context.messages.slice(0, -1) : context.messages;\n\n\tif (history.length > 0) {\n\t\tpushText(\"<conversation_history>\\n\");\n\t\tlet hasPreviousTurn = false;\n\t\tconst pushPrefix = (label: string): void => {\n\t\t\tpushText(`${hasPreviousTurn ? \"\\n\\n\" : \"\"}${label}\\n`);\n\t\t\thasPreviousTurn = true;\n\t\t};\n\n\t\tfor (const message of history) {\n\t\t\tif (message.role === \"user\") {\n\t\t\t\tpushPrefix(\"USER:\");\n\t\t\t\tif (!appendContentBlocks(blocks, message.content)) pushText(\"(see attached image)\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tpushPrefix(\"ASSISTANT:\");\n\t\t\t\tconst text = contentToText(message.content, customToolNameToSdk);\n\t\t\t\tif (text.length > 0) pushText(text);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpushPrefix(\n\t\t\t\t`TOOL RESULT (historical ${mapPiToolNameToSdk(message.toolName, customToolNameToSdk)}, id=${message.toolCallId}):`,\n\t\t\t);\n\t\t\tif (!appendContentBlocks(blocks, message.content)) pushText(\"(see attached image)\");\n\t\t}\n\t\tpushText(\"\\n</conversation_history>\");\n\t}\n\n\tif (toolWatchNote?.trim()) {\n\t\tpushText(\"<recovered_tool_results>\\n\");\n\t\tpushText(toolWatchNote.trim());\n\t\tpushText(\"\\n</recovered_tool_results>\");\n\t}\n\tpushText(\n\t\t'The above is the conversation history so far, provided as context. Respond as the assistant to the user message below only. Never emit \"USER:\" or \"ASSISTANT:\" labels or continue the transcript.',\n\t);\n\tif (finalUserMessage && !appendContentBlocks(blocks, finalUserMessage.content)) pushText(\"(see attached image)\");\n\treturn blocks;\n}\n\nexport function buildPromptStream(promptBlocks: ContentBlockParam[]): AsyncIterable<SDKUserMessage> {\n\treturn (async function* () {\n\t\tyield {\n\t\t\ttype: \"user\",\n\t\t\tmessage: { role: \"user\", content: promptBlocks } as SDKUserMessage[\"message\"],\n\t\t\tparent_tool_use_id: null,\n\t\t\tsession_id: \"prompt\",\n\t\t};\n\t})();\n}\n"]}
@@ -39,8 +39,8 @@ export type BindingEntryState = {
39
39
  * absent sent-stream.
40
40
  */
41
41
  export declare function storedBindingFromEntry(entry: BindingEntryState, hashes: readonly string[], anchor: StoredBindingAnchor): StoredBinding;
42
- /** Hashes for the user/toolResult messages the persisted branch already carries. */
43
- export declare function sentHashesFromBranch(branch: readonly BranchEntry[]): string[];
42
+ /** Persist a completed turn whose resident registry entry closed before `message_end`. */
43
+ export declare function storedBindingFromBinding(binding: ContinuityBinding, hashes: readonly string[], anchor: StoredBindingAnchor): StoredBinding | undefined;
44
44
  export declare function bindingFromStoredBranch(branch: readonly BranchEntry[], stored: StoredBinding): ContinuityBinding | undefined;
45
45
  export {};
46
46
  //# sourceMappingURL=session-binding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-binding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,cAAc;;;CAA8C,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,EAAE,mBAAmB,GACzB,aAAa,CAgBf;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,EAAE,CAW7E;AASD,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,MAAM,EAAE,aAAa,GACnB,iBAAiB,GAAG,SAAS,CAe/B"}
1
+ {"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,cAAc;;;CAA8C,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,EAAE,mBAAmB,GACzB,aAAa,CAgBf;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,EAAE,mBAAmB,GACzB,aAAa,GAAG,SAAS,CAsB3B;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,MAAM,EAAE,aAAa,GACnB,iBAAiB,GAAG,SAAS,CAe/B"}
@@ -1,5 +1,6 @@
1
+ import { GOAL_CONTINUATION_MESSAGE_TYPE } from "../../../messages.js";
1
2
  import { assistantContentHash } from "./session-commit-boundary.js";
2
- import { isTransmittedMessage, sentHashPrefixDigest, sentMessageHashes } from "./session-sync.js";
3
+ import { sentHashPrefixDigest } from "./session-sync.js";
3
4
  export const BINDING_ENTRY_TYPE = "claude-sdk-oauth-binding";
4
5
  export const BINDING_MARKER = { schemaVersion: 2, marker: true };
5
6
  /**
@@ -26,29 +27,31 @@ export function storedBindingFromEntry(entry, hashes, anchor) {
26
27
  toolsetHash: entry.toolsetHash,
27
28
  };
28
29
  }
29
- /** Hashes for the user/toolResult messages the persisted branch already carries. */
30
- export function sentHashesFromBranch(branch) {
31
- // This walk is not compaction-aware, but admission compares against the
32
- // compaction-truncated context. Anchoring across a boundary would inflate
33
- // sentCount and flatten every later restart, so decline to anchor instead.
34
- if (branch.some((entry) => entry.type === "compaction"))
35
- return [];
36
- const messages = [];
37
- for (const entry of branch) {
38
- if (entry.type !== "message")
39
- continue;
40
- if (isSentMessage(entry.message))
41
- messages.push(entry.message);
42
- }
43
- return sentMessageHashes(messages);
44
- }
45
- function isSentMessage(value) {
46
- if (typeof value !== "object" || value === null)
47
- return false;
48
- if (!("role" in value) || typeof value.role !== "string" || !("content" in value))
49
- return false;
50
- // Same selection rule the context path uses, so the digests cannot diverge.
51
- return isTransmittedMessage(value);
30
+ /** Persist a completed turn whose resident registry entry closed before `message_end`. */
31
+ export function storedBindingFromBinding(binding, hashes, anchor) {
32
+ if (binding.sdkSessionIdConfirmed === false)
33
+ return undefined;
34
+ if (binding.sentCount !== hashes.length)
35
+ return undefined;
36
+ const expectedDigest = sentHashPrefixDigest(hashes);
37
+ const bindingDigest = binding.sentPrefixHash ?? (binding.sentHashes.length > 0 ? sentHashPrefixDigest(binding.sentHashes) : undefined);
38
+ if (bindingDigest === undefined || bindingDigest !== expectedDigest)
39
+ return undefined;
40
+ return {
41
+ schemaVersion: 1,
42
+ sessionPath: anchor.sessionPath,
43
+ sessionId: anchor.sessionId,
44
+ markerEntryId: anchor.markerEntryId,
45
+ sdkSessionId: binding.sdkSessionId,
46
+ sentCount: hashes.length,
47
+ sentPrefixHash: sentHashPrefixDigest(hashes),
48
+ assistantContentHash: anchor.assistantContentHash,
49
+ lastAssistantUuid: binding.lastAssistantUuid,
50
+ accountName: binding.accountName,
51
+ modelId: binding.modelId,
52
+ systemPromptHash: binding.systemPromptHash,
53
+ toolsetHash: binding.toolsetHash,
54
+ };
52
55
  }
53
56
  export function bindingFromStoredBranch(branch, stored) {
54
57
  const markerIndex = newestBindingEntryIndex(branch);
@@ -78,10 +81,13 @@ const SAFE_BINDING_SUFFIX_TYPES = new Set([
78
81
  "senpi.hooks.stop-output",
79
82
  "pi-rules.scan",
80
83
  "rule-activation",
84
+ "goal-cache-warmup",
81
85
  ]);
82
86
  function isSafeBindingSuffix(entry) {
83
87
  if (entry.type === "label")
84
88
  return true;
89
+ if (entry.type === "custom_message")
90
+ return entry.customType === GOAL_CONTINUATION_MESSAGE_TYPE;
85
91
  return entry.type === "custom" && entry.customType !== undefined && SAFE_BINDING_SUFFIX_TYPES.has(entry.customType);
86
92
  }
87
93
  function newestBindingEntryIndex(branch) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-binding.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai\";\nimport type { StoredBinding } from \"./session-binding-store.ts\";\nimport { assistantContentHash } from \"./session-commit-boundary.ts\";\nimport type { ContinuityBinding } from \"./session-reattach.ts\";\nimport { isTransmittedMessage, type SentMessage, sentHashPrefixDigest, sentMessageHashes } from \"./session-sync.ts\";\n\nexport const BINDING_ENTRY_TYPE = \"claude-sdk-oauth-binding\";\nexport const BINDING_MARKER = { schemaVersion: 2, marker: true } as const;\n\nexport type BindingInvalidation = {\n\treadonly schemaVersion: 1;\n\treadonly invalidated: true;\n\treadonly reason: string;\n};\n\ntype BranchEntry = {\n\treadonly id?: string;\n\treadonly type: string;\n\treadonly customType?: string;\n\treadonly data?: unknown;\n\treadonly message?: unknown;\n};\n\nexport type StoredBindingAnchor = {\n\treadonly sessionPath: string;\n\treadonly sessionId: string;\n\treadonly markerEntryId: string;\n\treadonly assistantContentHash: string;\n};\n\nexport type BindingEntryState = {\n\treadonly sdkSessionId: string;\n\treadonly accountName: string;\n\treadonly modelId: string;\n\treadonly systemPromptHash: string;\n\treadonly toolsetHash: string;\n\treadonly assistantUuidByIndex: ReadonlyMap<number, string>;\n};\n\n/**\n * The record is derived from the registry entry plus the hashes the branch\n * actually carries, never from the process binding map: that map holds the\n * previous turn's state while `message_end` runs (and only a prefix digest right\n * after a restart), so reading it would anchor this turn's marker to a stale or\n * absent sent-stream.\n */\nexport function storedBindingFromEntry(\n\tentry: BindingEntryState,\n\thashes: readonly string[],\n\tanchor: StoredBindingAnchor,\n): StoredBinding {\n\treturn {\n\t\tschemaVersion: 1,\n\t\tsessionPath: anchor.sessionPath,\n\t\tsessionId: anchor.sessionId,\n\t\tmarkerEntryId: anchor.markerEntryId,\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tsentCount: hashes.length,\n\t\tsentPrefixHash: sentHashPrefixDigest(hashes),\n\t\tassistantContentHash: anchor.assistantContentHash,\n\t\tlastAssistantUuid: entry.assistantUuidByIndex.get(hashes.length) ?? null,\n\t\taccountName: entry.accountName,\n\t\tmodelId: entry.modelId,\n\t\tsystemPromptHash: entry.systemPromptHash,\n\t\ttoolsetHash: entry.toolsetHash,\n\t};\n}\n\n/** Hashes for the user/toolResult messages the persisted branch already carries. */\nexport function sentHashesFromBranch(branch: readonly BranchEntry[]): string[] {\n\t// This walk is not compaction-aware, but admission compares against the\n\t// compaction-truncated context. Anchoring across a boundary would inflate\n\t// sentCount and flatten every later restart, so decline to anchor instead.\n\tif (branch.some((entry) => entry.type === \"compaction\")) return [];\n\tconst messages: SentMessage[] = [];\n\tfor (const entry of branch) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tif (isSentMessage(entry.message)) messages.push(entry.message);\n\t}\n\treturn sentMessageHashes(messages);\n}\n\nfunction isSentMessage(value: unknown): value is SentMessage {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (!(\"role\" in value) || typeof value.role !== \"string\" || !(\"content\" in value)) return false;\n\t// Same selection rule the context path uses, so the digests cannot diverge.\n\treturn isTransmittedMessage(value as { role: string });\n}\n\nexport function bindingFromStoredBranch(\n\tbranch: readonly BranchEntry[],\n\tstored: StoredBinding,\n): ContinuityBinding | undefined {\n\tconst markerIndex = newestBindingEntryIndex(branch);\n\tif (markerIndex < 0) return undefined;\n\tconst marker = branch[markerIndex];\n\tif (\n\t\tmarker?.id !== stored.markerEntryId ||\n\t\t!isBindingMarker(marker.data) ||\n\t\t!branch.slice(markerIndex + 2).every(isSafeBindingSuffix)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst committedAssistant = branch[markerIndex + 1]?.message;\n\tif (!isAssistantMessage(committedAssistant)) return undefined;\n\tif (assistantContentHash(committedAssistant) !== stored.assistantContentHash) return undefined;\n\treturn bindingFromStored(stored);\n}\n\n/**\n * Display-only metadata the co-resident builtins append after the committed\n * assistant (stop-hook state/diagnostics/output, rule activations, rule scans).\n * None participates in the sent stream, so none can shift the prefix digest.\n */\nconst SAFE_BINDING_SUFFIX_TYPES: ReadonlySet<string> = new Set([\n\t\"senpi.hooks.stop-state\",\n\t\"senpi.hooks.stop-diagnostics\",\n\t\"senpi.hooks.stop-output\",\n\t\"pi-rules.scan\",\n\t\"rule-activation\",\n]);\n\nfunction isSafeBindingSuffix(entry: BranchEntry): boolean {\n\tif (entry.type === \"label\") return true;\n\treturn entry.type === \"custom\" && entry.customType !== undefined && SAFE_BINDING_SUFFIX_TYPES.has(entry.customType);\n}\n\nfunction newestBindingEntryIndex(branch: readonly BranchEntry[]): number {\n\tfor (let index = branch.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = branch[index];\n\t\tif (entry?.type === \"custom\" && entry.customType === BINDING_ENTRY_TYPE) return index;\n\t}\n\treturn -1;\n}\n\nfunction isBindingMarker(value: unknown): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\treturn \"schemaVersion\" in value && value.schemaVersion === 2 && \"marker\" in value && value.marker === true;\n}\n\nfunction isAssistantMessage(value: unknown): value is AssistantMessage {\n\tif (typeof value !== \"object\" || value === null) return false;\n\treturn (\n\t\t\"role\" in value &&\n\t\tvalue.role === \"assistant\" &&\n\t\t\"api\" in value &&\n\t\ttypeof value.api === \"string\" &&\n\t\t\"provider\" in value &&\n\t\ttypeof value.provider === \"string\" &&\n\t\t\"model\" in value &&\n\t\ttypeof value.model === \"string\" &&\n\t\t\"content\" in value &&\n\t\tArray.isArray(value.content)\n\t);\n}\n\nfunction bindingFromStored(stored: StoredBinding): ContinuityBinding {\n\treturn {\n\t\tsenpiSessionId: stored.sessionId,\n\t\tsdkSessionId: stored.sdkSessionId,\n\t\tsentCount: stored.sentCount,\n\t\tsentHashes: [],\n\t\tsentPrefixHash: stored.sentPrefixHash,\n\t\tlastAssistantUuid: stored.lastAssistantUuid,\n\t\tassistantUuidByIndex: stored.lastAssistantUuid === null ? [] : [[stored.sentCount, stored.lastAssistantUuid]],\n\t\taccountName: stored.accountName,\n\t\tmodelId: stored.modelId,\n\t\tsystemPromptHash: stored.systemPromptHash,\n\t\ttoolsetHash: stored.toolsetHash,\n\t};\n}\n"]}
1
+ {"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-binding.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai\";\nimport { GOAL_CONTINUATION_MESSAGE_TYPE } from \"../../../messages.ts\";\nimport type { StoredBinding } from \"./session-binding-store.ts\";\nimport { assistantContentHash } from \"./session-commit-boundary.ts\";\nimport type { ContinuityBinding } from \"./session-reattach.ts\";\nimport { sentHashPrefixDigest } from \"./session-sync.ts\";\n\nexport const BINDING_ENTRY_TYPE = \"claude-sdk-oauth-binding\";\nexport const BINDING_MARKER = { schemaVersion: 2, marker: true } as const;\n\nexport type BindingInvalidation = {\n\treadonly schemaVersion: 1;\n\treadonly invalidated: true;\n\treadonly reason: string;\n};\n\ntype BranchEntry = {\n\treadonly id?: string;\n\treadonly type: string;\n\treadonly customType?: string;\n\treadonly data?: unknown;\n\treadonly message?: unknown;\n};\n\nexport type StoredBindingAnchor = {\n\treadonly sessionPath: string;\n\treadonly sessionId: string;\n\treadonly markerEntryId: string;\n\treadonly assistantContentHash: string;\n};\n\nexport type BindingEntryState = {\n\treadonly sdkSessionId: string;\n\treadonly accountName: string;\n\treadonly modelId: string;\n\treadonly systemPromptHash: string;\n\treadonly toolsetHash: string;\n\treadonly assistantUuidByIndex: ReadonlyMap<number, string>;\n};\n\n/**\n * The record is derived from the registry entry plus the hashes the branch\n * actually carries, never from the process binding map: that map holds the\n * previous turn's state while `message_end` runs (and only a prefix digest right\n * after a restart), so reading it would anchor this turn's marker to a stale or\n * absent sent-stream.\n */\nexport function storedBindingFromEntry(\n\tentry: BindingEntryState,\n\thashes: readonly string[],\n\tanchor: StoredBindingAnchor,\n): StoredBinding {\n\treturn {\n\t\tschemaVersion: 1,\n\t\tsessionPath: anchor.sessionPath,\n\t\tsessionId: anchor.sessionId,\n\t\tmarkerEntryId: anchor.markerEntryId,\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tsentCount: hashes.length,\n\t\tsentPrefixHash: sentHashPrefixDigest(hashes),\n\t\tassistantContentHash: anchor.assistantContentHash,\n\t\tlastAssistantUuid: entry.assistantUuidByIndex.get(hashes.length) ?? null,\n\t\taccountName: entry.accountName,\n\t\tmodelId: entry.modelId,\n\t\tsystemPromptHash: entry.systemPromptHash,\n\t\ttoolsetHash: entry.toolsetHash,\n\t};\n}\n\n/** Persist a completed turn whose resident registry entry closed before `message_end`. */\nexport function storedBindingFromBinding(\n\tbinding: ContinuityBinding,\n\thashes: readonly string[],\n\tanchor: StoredBindingAnchor,\n): StoredBinding | undefined {\n\tif (binding.sdkSessionIdConfirmed === false) return undefined;\n\tif (binding.sentCount !== hashes.length) return undefined;\n\tconst expectedDigest = sentHashPrefixDigest(hashes);\n\tconst bindingDigest =\n\t\tbinding.sentPrefixHash ?? (binding.sentHashes.length > 0 ? sentHashPrefixDigest(binding.sentHashes) : undefined);\n\tif (bindingDigest === undefined || bindingDigest !== expectedDigest) return undefined;\n\treturn {\n\t\tschemaVersion: 1,\n\t\tsessionPath: anchor.sessionPath,\n\t\tsessionId: anchor.sessionId,\n\t\tmarkerEntryId: anchor.markerEntryId,\n\t\tsdkSessionId: binding.sdkSessionId,\n\t\tsentCount: hashes.length,\n\t\tsentPrefixHash: sentHashPrefixDigest(hashes),\n\t\tassistantContentHash: anchor.assistantContentHash,\n\t\tlastAssistantUuid: binding.lastAssistantUuid,\n\t\taccountName: binding.accountName,\n\t\tmodelId: binding.modelId,\n\t\tsystemPromptHash: binding.systemPromptHash,\n\t\ttoolsetHash: binding.toolsetHash,\n\t};\n}\n\nexport function bindingFromStoredBranch(\n\tbranch: readonly BranchEntry[],\n\tstored: StoredBinding,\n): ContinuityBinding | undefined {\n\tconst markerIndex = newestBindingEntryIndex(branch);\n\tif (markerIndex < 0) return undefined;\n\tconst marker = branch[markerIndex];\n\tif (\n\t\tmarker?.id !== stored.markerEntryId ||\n\t\t!isBindingMarker(marker.data) ||\n\t\t!branch.slice(markerIndex + 2).every(isSafeBindingSuffix)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst committedAssistant = branch[markerIndex + 1]?.message;\n\tif (!isAssistantMessage(committedAssistant)) return undefined;\n\tif (assistantContentHash(committedAssistant) !== stored.assistantContentHash) return undefined;\n\treturn bindingFromStored(stored);\n}\n\n/**\n * Display-only metadata the co-resident builtins append after the committed\n * assistant (stop-hook state/diagnostics/output, rule activations, rule scans).\n * None participates in the sent stream, so none can shift the prefix digest.\n */\nconst SAFE_BINDING_SUFFIX_TYPES: ReadonlySet<string> = new Set([\n\t\"senpi.hooks.stop-state\",\n\t\"senpi.hooks.stop-diagnostics\",\n\t\"senpi.hooks.stop-output\",\n\t\"pi-rules.scan\",\n\t\"rule-activation\",\n\t\"goal-cache-warmup\",\n]);\n\nfunction isSafeBindingSuffix(entry: BranchEntry): boolean {\n\tif (entry.type === \"label\") return true;\n\tif (entry.type === \"custom_message\") return entry.customType === GOAL_CONTINUATION_MESSAGE_TYPE;\n\treturn entry.type === \"custom\" && entry.customType !== undefined && SAFE_BINDING_SUFFIX_TYPES.has(entry.customType);\n}\n\nfunction newestBindingEntryIndex(branch: readonly BranchEntry[]): number {\n\tfor (let index = branch.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = branch[index];\n\t\tif (entry?.type === \"custom\" && entry.customType === BINDING_ENTRY_TYPE) return index;\n\t}\n\treturn -1;\n}\n\nfunction isBindingMarker(value: unknown): boolean {\n\tif (typeof value !== \"object\" || value === null) return false;\n\treturn \"schemaVersion\" in value && value.schemaVersion === 2 && \"marker\" in value && value.marker === true;\n}\n\nfunction isAssistantMessage(value: unknown): value is AssistantMessage {\n\tif (typeof value !== \"object\" || value === null) return false;\n\treturn (\n\t\t\"role\" in value &&\n\t\tvalue.role === \"assistant\" &&\n\t\t\"api\" in value &&\n\t\ttypeof value.api === \"string\" &&\n\t\t\"provider\" in value &&\n\t\ttypeof value.provider === \"string\" &&\n\t\t\"model\" in value &&\n\t\ttypeof value.model === \"string\" &&\n\t\t\"content\" in value &&\n\t\tArray.isArray(value.content)\n\t);\n}\n\nfunction bindingFromStored(stored: StoredBinding): ContinuityBinding {\n\treturn {\n\t\tsenpiSessionId: stored.sessionId,\n\t\tsdkSessionId: stored.sdkSessionId,\n\t\tsentCount: stored.sentCount,\n\t\tsentHashes: [],\n\t\tsentPrefixHash: stored.sentPrefixHash,\n\t\tlastAssistantUuid: stored.lastAssistantUuid,\n\t\tassistantUuidByIndex: stored.lastAssistantUuid === null ? [] : [[stored.sentCount, stored.lastAssistantUuid]],\n\t\taccountName: stored.accountName,\n\t\tmodelId: stored.modelId,\n\t\tsystemPromptHash: stored.systemPromptHash,\n\t\ttoolsetHash: stored.toolsetHash,\n\t};\n}\n"]}
@@ -24,6 +24,8 @@ export type ContinuityBindingSnapshot = {
24
24
  toolsetHash: string;
25
25
  /** Sent-stream digest of a turn that was pushed but never answered (retry checkpoint). */
26
26
  unansweredTurnDigest?: string;
27
+ /** False until the SDK acknowledged the id; a resume/fork of an unconfirmed id is never attempted. */
28
+ sdkSessionIdConfirmed?: boolean;
27
29
  };
28
30
  export type ContinuityDecisionInput = {
29
31
  entry: ContinuityEntrySnapshot | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"session-continuity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-continuity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,MAAM,MAAM,uBAAuB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAC/C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC3B;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AA4HjD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,YAAY,CAAC;IACvB,2BAA2B,EAAE,OAAO,CAAC;IACrC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACrF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAmB3F;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CA8BzF"}
1
+ {"version":3,"file":"session-continuity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-continuity.ts"],"names":[],"mappings":"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"}
@@ -78,6 +78,20 @@ function retryCheckpointDecision(input, binding) {
78
78
  reason: "timeout_retry",
79
79
  };
80
80
  }
81
+ /**
82
+ * A binding whose SDK id was minted locally and never acknowledged (no init, no
83
+ * replay echo before the attempt failed) must not be resumed: Claude Code
84
+ * answers "No conversation found with session ID" and every retry would mint
85
+ * another dead id (oh-my-openagent#7562). Cold-seed instead.
86
+ */
87
+ function withoutUnconfirmedResume(decision, binding) {
88
+ if (binding.sdkSessionIdConfirmed !== false)
89
+ return decision;
90
+ if (decision.kind === "reattach" || decision.kind === "fork") {
91
+ return { kind: "flatten", reason: "session_unconfirmed" };
92
+ }
93
+ return decision;
94
+ }
81
95
  function decideFromBinding(input, binding) {
82
96
  if (!input.transcriptAvailable)
83
97
  return { kind: "flatten", reason: "transcript_missing" };
@@ -155,7 +169,7 @@ export function decideNativeContinuity(input) {
155
169
  if (!entry) {
156
170
  if (!binding)
157
171
  return { kind: "bootstrap" };
158
- return decideFromBinding(input, binding);
172
+ return withoutUnconfirmedResume(decideFromBinding(input, binding), binding);
159
173
  }
160
174
  const divergence = entry.pendingForkReason ?? entry.taintedReason;
161
175
  if (divergence) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-continuity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-continuity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAgDzD,MAAM,oBAAoB,GAA+C;IACxE,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,oBAAoB;CAChC,CAAC;AAEF,SAAS,kBAAkB,CAAC,IAAuB,EAAE,KAAwB;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAA8B,EAAE,KAAa;IACpE,KAAK,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CACrB,KAA8B,EAC9B,UAAkB,EAClB,MAAwB;IAExB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAClD,OAAO;QACN,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,QAAQ,CAAC,IAAI;QACrB,IAAI,EAAE,QAAQ,CAAC,KAAK;QACpB,MAAM;KACN,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACrB,KAA8B,EAC9B,KAAoG;IAEpG,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;QAAE,OAAO,iBAAiB,CAAC;IACtE,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,OAAO,eAAe,CAAC;IAC5D,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,WAAW,CAAC,gBAAgB;QAAE,OAAO,iBAAiB,CAAC;IAC5F,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,WAAW;QAAE,OAAO,iBAAiB,CAAC;IAClF,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAC/B,KAA8B,EAC9B,OAAkC;IAElC,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjE,IAAI,oBAAoB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC5G,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,aAAa,GAClB,OAAO,CAAC,cAAc,KAAK,SAAS;QACnC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,cAAc;QACzF,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC;IACtF,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,iBAAiB;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACpF,OAAO;QACN,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,iBAAiB;QACjC,IAAI,EAAE,OAAO,CAAC,SAAS;QACvB,MAAM,EAAE,eAAe;KACvB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA8B,EAAE,OAAkC;IAC5F,IAAI,CAAC,KAAK,CAAC,mBAAmB;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACzF,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,aAAa,GAClB,KAAK,CAAC,aAAa,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS;YAC/C,oBAAoB,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC;QACzF,IAAI,aAAa,EAAE,CAAC;YACnB,OAAO;gBACN,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,MAAM,EAAE,eAAe;aACvB,CAAC;QACH,CAAC;QACD,OAAO;YACN,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;SACvG,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACnH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,iBAAiB;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACpF,OAAO;QACN,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,iBAAiB;QACjC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;KACnF,CAAC;AACH,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAA8B;IACtE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAClG,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC;QACvC,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,KAAK,CAAC,SAAS;YACrB,MAAM,EAAE,iBAAiB;SACzB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;IAChG,OAAO;QACN,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,KAAK,CAAC,iBAAiB;QAC/B,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,MAAM,EAAE,iBAAiB;KACzB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA8B;IACpE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC3C,OAAO,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACzE,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;QACzG,OAAO,UAAU;YAChB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,qBAAqB,CAAC;YACzE,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC1G,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrG,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AACjD,CAAC","sourcesContent":["import type { ContinuityReason } from \"./session-observability.ts\";\nimport { sentHashPrefixDigest } from \"./session-sync.ts\";\n\nexport type ContinuityEntrySnapshot = {\n\tsdkSessionId: string;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tlastAssistantUuid: string | null;\n\tassistantUuidByIndex: ReadonlyMap<number, string>;\n\tpendingForkReason: string | null;\n\ttaintedReason?: string | null;\n};\n\nexport type ContinuityBindingSnapshot = {\n\tsdkSessionId: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tsentPrefixHash?: string;\n\tlastAssistantUuid: string | null;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\t/** Sent-stream digest of a turn that was pushed but never answered (retry checkpoint). */\n\tunansweredTurnDigest?: string;\n};\n\nexport type ContinuityDecisionInput = {\n\tentry: ContinuityEntrySnapshot | undefined;\n\tbinding: ContinuityBindingSnapshot | undefined;\n\tcurrentHashes: readonly string[];\n\taccountName: string;\n\tmodelId: string;\n\tfingerprint: { systemPromptHash: string; toolsetHash: string };\n\ttranscriptAvailable: boolean;\n\tidleExpired?: boolean;\n};\n\nexport type ContinuityDecision =\n\t| { kind: \"bootstrap\" }\n\t| { kind: \"delta\"; from: number }\n\t| { kind: \"reattach\"; sdkSessionId: string; from: number; reason: ContinuityReason }\n\t| { kind: \"fork\"; sdkSessionId: string; atUuid: string; from: number; reason: ContinuityReason }\n\t| { kind: \"flatten\"; reason: ContinuityReason };\n\nconst PENDING_FORK_REASONS: Readonly<Record<string, ContinuityReason>> = {\n\tassistant_rewritten: \"assistant_rewritten\",\n\tcompaction: \"tainted_compaction\",\n};\n\nfunction commonPrefixLength(left: readonly string[], right: readonly string[]): number {\n\tconst limit = Math.min(left.length, right.length);\n\tlet index = 0;\n\twhile (index < limit && left[index] === right[index]) index += 1;\n\treturn index;\n}\n\n/**\n * The fork point is the last assistant boundary STRICTLY BEFORE the divergence:\n * forking at the diverged turn itself would carry the stale assistant into the new\n * branch and leave nothing to re-send.\n */\nfunction boundaryBefore(entry: ContinuityEntrySnapshot, count: number): { index: number; uuid: string } | undefined {\n\tfor (let candidate = count - 1; candidate >= 1; candidate -= 1) {\n\t\tconst uuid = entry.assistantUuidByIndex.get(candidate);\n\t\tif (uuid) return { index: candidate, uuid };\n\t}\n\treturn undefined;\n}\n\nfunction forkOrFlatten(\n\tentry: ContinuityEntrySnapshot,\n\tdivergesAt: number,\n\treason: ContinuityReason,\n): ContinuityDecision {\n\tconst boundary = boundaryBefore(entry, divergesAt);\n\tif (!boundary) return { kind: \"flatten\", reason };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tatUuid: boundary.uuid,\n\t\tfrom: boundary.index,\n\t\treason,\n\t};\n}\n\nfunction identityDrift(\n\tinput: ContinuityDecisionInput,\n\tentry: Pick<ContinuityEntrySnapshot, \"accountName\" | \"modelId\" | \"systemPromptHash\" | \"toolsetHash\">,\n): ContinuityReason | null {\n\tif (entry.accountName !== input.accountName) return \"account_changed\";\n\tif (entry.modelId !== input.modelId) return \"model_changed\";\n\tif (entry.systemPromptHash !== input.fingerprint.systemPromptHash) return \"options_changed\";\n\tif (entry.toolsetHash !== input.fingerprint.toolsetHash) return \"options_changed\";\n\treturn null;\n}\n\n/**\n * Same-turn retry after a stream-start timeout: the abandoned attempt already\n * appended its user message to the lineage, so re-attaching would append it a\n * SECOND time and re-bill the whole conversation. Forking at the pre-turn\n * assistant boundary rewinds past the un-answered message, so the retry's\n * request byte-layout matches the failed attempt's (prefix cache read).\n * Requires the FULL current turn to hash-match the checkpoint, so a different\n * turn falls through to the ordinary branches below.\n */\nfunction retryCheckpointDecision(\n\tinput: ContinuityDecisionInput,\n\tbinding: ContinuityBindingSnapshot,\n): ContinuityDecision | undefined {\n\tif (binding.unansweredTurnDigest === undefined) return undefined;\n\tif (sentHashPrefixDigest(input.currentHashes, input.currentHashes.length) !== binding.unansweredTurnDigest) {\n\t\treturn undefined;\n\t}\n\tif (input.currentHashes.length < binding.sentCount) return undefined;\n\tconst prefixMatches =\n\t\tbinding.sentPrefixHash !== undefined\n\t\t\t? sentHashPrefixDigest(input.currentHashes, binding.sentCount) === binding.sentPrefixHash\n\t\t\t: commonPrefixLength(binding.sentHashes, input.currentHashes) === binding.sentCount;\n\tif (!prefixMatches) return undefined;\n\tif (!binding.lastAssistantUuid) return { kind: \"flatten\", reason: \"timeout_retry\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: binding.sdkSessionId,\n\t\tatUuid: binding.lastAssistantUuid,\n\t\tfrom: binding.sentCount,\n\t\treason: \"timeout_retry\",\n\t};\n}\n\nfunction decideFromBinding(input: ContinuityDecisionInput, binding: ContinuityBindingSnapshot): ContinuityDecision {\n\tif (!input.transcriptAvailable) return { kind: \"flatten\", reason: \"transcript_missing\" };\n\tconst drift = identityDrift(input, binding);\n\tif (drift) return { kind: \"flatten\", reason: drift };\n\tconst retry = retryCheckpointDecision(input, binding);\n\tif (retry) return retry;\n\tif (binding.sentPrefixHash !== undefined) {\n\t\tconst prefixMatches =\n\t\t\tinput.currentHashes.length >= binding.sentCount &&\n\t\t\tsentHashPrefixDigest(input.currentHashes, binding.sentCount) === binding.sentPrefixHash;\n\t\tif (prefixMatches) {\n\t\t\treturn {\n\t\t\t\tkind: \"reattach\",\n\t\t\t\tsdkSessionId: binding.sdkSessionId,\n\t\t\t\tfrom: binding.sentCount,\n\t\t\t\treason: \"registry_miss\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"flatten\",\n\t\t\treason: input.currentHashes.length < binding.sentCount ? \"history_rolled_back\" : \"sent_stream_diverged\",\n\t\t};\n\t}\n\tconst shared = commonPrefixLength(binding.sentHashes, input.currentHashes);\n\tif (shared === binding.sentCount) {\n\t\treturn { kind: \"reattach\", sdkSessionId: binding.sdkSessionId, from: binding.sentCount, reason: \"registry_miss\" };\n\t}\n\tif (!binding.lastAssistantUuid) return { kind: \"flatten\", reason: \"registry_miss\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: binding.sdkSessionId,\n\t\tatUuid: binding.lastAssistantUuid,\n\t\tfrom: shared,\n\t\treason: shared < binding.sentCount ? \"history_rolled_back\" : \"sent_stream_diverged\",\n\t};\n}\n\nexport type FailoverLane = \"oauth-slots\" | \"ambient\" | \"config-dir\";\n\nexport type FailoverContinuityInput = {\n\tauthLane: FailoverLane;\n\tcrossAccountResumeSupported: boolean;\n\tentry: { sdkSessionId: string; sentCount: number; lastAssistantUuid: string | null };\n};\n\n/**\n * The config-dir lane keeps each account's credentials inside its own\n * CLAUDE_CONFIG_DIR, and no official SDK API moves a transcript across roots, so\n * its failover is the one declared residual that must still flatten.\n */\nexport function decideFailoverContinuity(input: FailoverContinuityInput): ContinuityDecision {\n\tconst { entry } = input;\n\tif (input.authLane === \"config-dir\") return { kind: \"flatten\", reason: \"cross_root_unsupported\" };\n\tif (input.crossAccountResumeSupported) {\n\t\treturn {\n\t\t\tkind: \"reattach\",\n\t\t\tsdkSessionId: entry.sdkSessionId,\n\t\t\tfrom: entry.sentCount,\n\t\t\treason: \"account_changed\",\n\t\t};\n\t}\n\tif (!entry.lastAssistantUuid) return { kind: \"flatten\", reason: \"branch_boundary_unavailable\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tatUuid: entry.lastAssistantUuid,\n\t\tfrom: entry.sentCount,\n\t\treason: \"account_changed\",\n\t};\n}\n\n/**\n * Resume-first: a live session is never abandoned for a flattened re-send. Only a\n * missing transcript or an unrecoverable boundary reaches `flatten`; every other\n * divergence resolves to `fork` (same lineage, new branch) or `reattach` (same\n * session, new query).\n */\nexport function decideNativeContinuity(input: ContinuityDecisionInput): ContinuityDecision {\n\tconst { entry, binding } = input;\n\tif (!entry) {\n\t\tif (!binding) return { kind: \"bootstrap\" };\n\t\treturn decideFromBinding(input, binding);\n\t}\n\n\tconst divergence = entry.pendingForkReason ?? entry.taintedReason;\n\tif (divergence) {\n\t\treturn forkOrFlatten(entry, entry.sentCount, PENDING_FORK_REASONS[divergence] ?? \"other\");\n\t}\n\n\tconst shared = commonPrefixLength(entry.sentHashes, input.currentHashes);\n\tif (shared < entry.sentCount) {\n\t\tconst rolledBack = input.currentHashes.length < entry.sentCount && shared === input.currentHashes.length;\n\t\treturn rolledBack\n\t\t\t? forkOrFlatten(entry, input.currentHashes.length, \"history_rolled_back\")\n\t\t\t: forkOrFlatten(entry, shared + 1, \"sent_stream_diverged\");\n\t}\n\n\tif (input.idleExpired) {\n\t\treturn { kind: \"reattach\", sdkSessionId: entry.sdkSessionId, from: entry.sentCount, reason: \"idle_ttl\" };\n\t}\n\n\tconst drift = identityDrift(input, entry);\n\tif (drift) {\n\t\treturn { kind: \"reattach\", sdkSessionId: entry.sdkSessionId, from: entry.sentCount, reason: drift };\n\t}\n\n\treturn { kind: \"delta\", from: entry.sentCount };\n}\n"]}
1
+ {"version":3,"file":"session-continuity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-continuity.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ContinuityReason } from \"./session-observability.ts\";\nimport { sentHashPrefixDigest } from \"./session-sync.ts\";\n\nexport type ContinuityEntrySnapshot = {\n\tsdkSessionId: string;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tlastAssistantUuid: string | null;\n\tassistantUuidByIndex: ReadonlyMap<number, string>;\n\tpendingForkReason: string | null;\n\ttaintedReason?: string | null;\n};\n\nexport type ContinuityBindingSnapshot = {\n\tsdkSessionId: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tsentPrefixHash?: string;\n\tlastAssistantUuid: string | null;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\t/** Sent-stream digest of a turn that was pushed but never answered (retry checkpoint). */\n\tunansweredTurnDigest?: string;\n\t/** False until the SDK acknowledged the id; a resume/fork of an unconfirmed id is never attempted. */\n\tsdkSessionIdConfirmed?: boolean;\n};\n\nexport type ContinuityDecisionInput = {\n\tentry: ContinuityEntrySnapshot | undefined;\n\tbinding: ContinuityBindingSnapshot | undefined;\n\tcurrentHashes: readonly string[];\n\taccountName: string;\n\tmodelId: string;\n\tfingerprint: { systemPromptHash: string; toolsetHash: string };\n\ttranscriptAvailable: boolean;\n\tidleExpired?: boolean;\n};\n\nexport type ContinuityDecision =\n\t| { kind: \"bootstrap\" }\n\t| { kind: \"delta\"; from: number }\n\t| { kind: \"reattach\"; sdkSessionId: string; from: number; reason: ContinuityReason }\n\t| { kind: \"fork\"; sdkSessionId: string; atUuid: string; from: number; reason: ContinuityReason }\n\t| { kind: \"flatten\"; reason: ContinuityReason };\n\nconst PENDING_FORK_REASONS: Readonly<Record<string, ContinuityReason>> = {\n\tassistant_rewritten: \"assistant_rewritten\",\n\tcompaction: \"tainted_compaction\",\n};\n\nfunction commonPrefixLength(left: readonly string[], right: readonly string[]): number {\n\tconst limit = Math.min(left.length, right.length);\n\tlet index = 0;\n\twhile (index < limit && left[index] === right[index]) index += 1;\n\treturn index;\n}\n\n/**\n * The fork point is the last assistant boundary STRICTLY BEFORE the divergence:\n * forking at the diverged turn itself would carry the stale assistant into the new\n * branch and leave nothing to re-send.\n */\nfunction boundaryBefore(entry: ContinuityEntrySnapshot, count: number): { index: number; uuid: string } | undefined {\n\tfor (let candidate = count - 1; candidate >= 1; candidate -= 1) {\n\t\tconst uuid = entry.assistantUuidByIndex.get(candidate);\n\t\tif (uuid) return { index: candidate, uuid };\n\t}\n\treturn undefined;\n}\n\nfunction forkOrFlatten(\n\tentry: ContinuityEntrySnapshot,\n\tdivergesAt: number,\n\treason: ContinuityReason,\n): ContinuityDecision {\n\tconst boundary = boundaryBefore(entry, divergesAt);\n\tif (!boundary) return { kind: \"flatten\", reason };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tatUuid: boundary.uuid,\n\t\tfrom: boundary.index,\n\t\treason,\n\t};\n}\n\nfunction identityDrift(\n\tinput: ContinuityDecisionInput,\n\tentry: Pick<ContinuityEntrySnapshot, \"accountName\" | \"modelId\" | \"systemPromptHash\" | \"toolsetHash\">,\n): ContinuityReason | null {\n\tif (entry.accountName !== input.accountName) return \"account_changed\";\n\tif (entry.modelId !== input.modelId) return \"model_changed\";\n\tif (entry.systemPromptHash !== input.fingerprint.systemPromptHash) return \"options_changed\";\n\tif (entry.toolsetHash !== input.fingerprint.toolsetHash) return \"options_changed\";\n\treturn null;\n}\n\n/**\n * Same-turn retry after a stream-start timeout: the abandoned attempt already\n * appended its user message to the lineage, so re-attaching would append it a\n * SECOND time and re-bill the whole conversation. Forking at the pre-turn\n * assistant boundary rewinds past the un-answered message, so the retry's\n * request byte-layout matches the failed attempt's (prefix cache read).\n * Requires the FULL current turn to hash-match the checkpoint, so a different\n * turn falls through to the ordinary branches below.\n */\nfunction retryCheckpointDecision(\n\tinput: ContinuityDecisionInput,\n\tbinding: ContinuityBindingSnapshot,\n): ContinuityDecision | undefined {\n\tif (binding.unansweredTurnDigest === undefined) return undefined;\n\tif (sentHashPrefixDigest(input.currentHashes, input.currentHashes.length) !== binding.unansweredTurnDigest) {\n\t\treturn undefined;\n\t}\n\tif (input.currentHashes.length < binding.sentCount) return undefined;\n\tconst prefixMatches =\n\t\tbinding.sentPrefixHash !== undefined\n\t\t\t? sentHashPrefixDigest(input.currentHashes, binding.sentCount) === binding.sentPrefixHash\n\t\t\t: commonPrefixLength(binding.sentHashes, input.currentHashes) === binding.sentCount;\n\tif (!prefixMatches) return undefined;\n\tif (!binding.lastAssistantUuid) return { kind: \"flatten\", reason: \"timeout_retry\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: binding.sdkSessionId,\n\t\tatUuid: binding.lastAssistantUuid,\n\t\tfrom: binding.sentCount,\n\t\treason: \"timeout_retry\",\n\t};\n}\n\n/**\n * A binding whose SDK id was minted locally and never acknowledged (no init, no\n * replay echo before the attempt failed) must not be resumed: Claude Code\n * answers \"No conversation found with session ID\" and every retry would mint\n * another dead id (oh-my-openagent#7562). Cold-seed instead.\n */\nfunction withoutUnconfirmedResume(\n\tdecision: ContinuityDecision,\n\tbinding: ContinuityBindingSnapshot,\n): ContinuityDecision {\n\tif (binding.sdkSessionIdConfirmed !== false) return decision;\n\tif (decision.kind === \"reattach\" || decision.kind === \"fork\") {\n\t\treturn { kind: \"flatten\", reason: \"session_unconfirmed\" };\n\t}\n\treturn decision;\n}\n\nfunction decideFromBinding(input: ContinuityDecisionInput, binding: ContinuityBindingSnapshot): ContinuityDecision {\n\tif (!input.transcriptAvailable) return { kind: \"flatten\", reason: \"transcript_missing\" };\n\tconst drift = identityDrift(input, binding);\n\tif (drift) return { kind: \"flatten\", reason: drift };\n\tconst retry = retryCheckpointDecision(input, binding);\n\tif (retry) return retry;\n\tif (binding.sentPrefixHash !== undefined) {\n\t\tconst prefixMatches =\n\t\t\tinput.currentHashes.length >= binding.sentCount &&\n\t\t\tsentHashPrefixDigest(input.currentHashes, binding.sentCount) === binding.sentPrefixHash;\n\t\tif (prefixMatches) {\n\t\t\treturn {\n\t\t\t\tkind: \"reattach\",\n\t\t\t\tsdkSessionId: binding.sdkSessionId,\n\t\t\t\tfrom: binding.sentCount,\n\t\t\t\treason: \"registry_miss\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"flatten\",\n\t\t\treason: input.currentHashes.length < binding.sentCount ? \"history_rolled_back\" : \"sent_stream_diverged\",\n\t\t};\n\t}\n\tconst shared = commonPrefixLength(binding.sentHashes, input.currentHashes);\n\tif (shared === binding.sentCount) {\n\t\treturn { kind: \"reattach\", sdkSessionId: binding.sdkSessionId, from: binding.sentCount, reason: \"registry_miss\" };\n\t}\n\tif (!binding.lastAssistantUuid) return { kind: \"flatten\", reason: \"registry_miss\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: binding.sdkSessionId,\n\t\tatUuid: binding.lastAssistantUuid,\n\t\tfrom: shared,\n\t\treason: shared < binding.sentCount ? \"history_rolled_back\" : \"sent_stream_diverged\",\n\t};\n}\n\nexport type FailoverLane = \"oauth-slots\" | \"ambient\" | \"config-dir\";\n\nexport type FailoverContinuityInput = {\n\tauthLane: FailoverLane;\n\tcrossAccountResumeSupported: boolean;\n\tentry: { sdkSessionId: string; sentCount: number; lastAssistantUuid: string | null };\n};\n\n/**\n * The config-dir lane keeps each account's credentials inside its own\n * CLAUDE_CONFIG_DIR, and no official SDK API moves a transcript across roots, so\n * its failover is the one declared residual that must still flatten.\n */\nexport function decideFailoverContinuity(input: FailoverContinuityInput): ContinuityDecision {\n\tconst { entry } = input;\n\tif (input.authLane === \"config-dir\") return { kind: \"flatten\", reason: \"cross_root_unsupported\" };\n\tif (input.crossAccountResumeSupported) {\n\t\treturn {\n\t\t\tkind: \"reattach\",\n\t\t\tsdkSessionId: entry.sdkSessionId,\n\t\t\tfrom: entry.sentCount,\n\t\t\treason: \"account_changed\",\n\t\t};\n\t}\n\tif (!entry.lastAssistantUuid) return { kind: \"flatten\", reason: \"branch_boundary_unavailable\" };\n\treturn {\n\t\tkind: \"fork\",\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tatUuid: entry.lastAssistantUuid,\n\t\tfrom: entry.sentCount,\n\t\treason: \"account_changed\",\n\t};\n}\n\n/**\n * Resume-first: a live session is never abandoned for a flattened re-send. Only a\n * missing transcript or an unrecoverable boundary reaches `flatten`; every other\n * divergence resolves to `fork` (same lineage, new branch) or `reattach` (same\n * session, new query).\n */\nexport function decideNativeContinuity(input: ContinuityDecisionInput): ContinuityDecision {\n\tconst { entry, binding } = input;\n\tif (!entry) {\n\t\tif (!binding) return { kind: \"bootstrap\" };\n\t\treturn withoutUnconfirmedResume(decideFromBinding(input, binding), binding);\n\t}\n\n\tconst divergence = entry.pendingForkReason ?? entry.taintedReason;\n\tif (divergence) {\n\t\treturn forkOrFlatten(entry, entry.sentCount, PENDING_FORK_REASONS[divergence] ?? \"other\");\n\t}\n\n\tconst shared = commonPrefixLength(entry.sentHashes, input.currentHashes);\n\tif (shared < entry.sentCount) {\n\t\tconst rolledBack = input.currentHashes.length < entry.sentCount && shared === input.currentHashes.length;\n\t\treturn rolledBack\n\t\t\t? forkOrFlatten(entry, input.currentHashes.length, \"history_rolled_back\")\n\t\t\t: forkOrFlatten(entry, shared + 1, \"sent_stream_diverged\");\n\t}\n\n\tif (input.idleExpired) {\n\t\treturn { kind: \"reattach\", sdkSessionId: entry.sdkSessionId, from: entry.sentCount, reason: \"idle_ttl\" };\n\t}\n\n\tconst drift = identityDrift(input, entry);\n\tif (drift) {\n\t\treturn { kind: \"reattach\", sdkSessionId: entry.sdkSessionId, from: entry.sentCount, reason: drift };\n\t}\n\n\treturn { kind: \"delta\", from: entry.sentCount };\n}\n"]}
@@ -9,7 +9,7 @@
9
9
  */
10
10
  export type ContinuityKind = "bootstrap" | "delta" | "reattach" | "fork" | "flatten" | "disabled";
11
11
  /** Fixed vocabulary — arbitrary error text never reaches an observation. */
12
- export type ContinuityReason = "prefix_matched" | "registry_miss" | "idle_ttl" | "capacity" | "model_selected" | "thinking_level_selected" | "bound_account_token_expiring" | "account_changed" | "model_changed" | "toolset_changed" | "system_prompt_changed" | "assistant_stream_diverged" | "sent_stream_diverged" | "options_changed" | "history_rolled_back" | "assistant_rewritten" | "transcript_missing" | "cross_root_unsupported" | "branch_diverged" | "branch_boundary_unavailable" | "branch_resume" | "tainted_compaction" | "tainted_fork" | "tainted_abort" | "tainted_assistant_provenance_unverified" | "resume_initialization_failed" | "resume_initialization_aborted" | "resume_mode_off" | "query_failed" | "turn_attribution_failed" | "abort_timeout" | "extensions_removed" | "session_shutdown" | "timeout_retry" | "other";
12
+ export type ContinuityReason = "prefix_matched" | "registry_miss" | "idle_ttl" | "capacity" | "model_selected" | "thinking_level_selected" | "bound_account_token_expiring" | "account_changed" | "model_changed" | "toolset_changed" | "system_prompt_changed" | "assistant_stream_diverged" | "sent_stream_diverged" | "options_changed" | "history_rolled_back" | "assistant_rewritten" | "transcript_missing" | "cross_root_unsupported" | "branch_diverged" | "branch_boundary_unavailable" | "branch_resume" | "tainted_compaction" | "tainted_fork" | "tainted_abort" | "tainted_assistant_provenance_unverified" | "resume_initialization_failed" | "resume_initialization_aborted" | "resume_mode_off" | "query_failed" | "turn_attribution_failed" | "session_unconfirmed" | "abort_timeout" | "extensions_removed" | "session_shutdown" | "timeout_retry" | "other";
13
13
  export type ContinuityObservation = {
14
14
  kind: ContinuityKind;
15
15
  reason: ContinuityReason;
@@ -1 +1 @@
1
- {"version":3,"file":"session-observability.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-observability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-observability.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-observability.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ const SANITIZED_REASONS = new Set([
31
31
  "resume_mode_off",
32
32
  "query_failed",
33
33
  "turn_attribution_failed",
34
+ "session_unconfirmed",
34
35
  "abort_timeout",
35
36
  "extensions_removed",
36
37
  "session_shutdown",
@@ -1 +1 @@
1
- {"version":3,"file":"session-observability.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-observability.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAgentDir } from \"../../../../config.ts\";\nimport { createSessionLogger, type SessionLogger } from \"../../../session-log.ts\";\n\n/**\n * Per-turn continuity observability for the claude-sdk-oauth lane.\n *\n * Emission semantics: a decision is STAGED per attempt at its final outcome\n * point and EMITTED only when the auth-lane retain/discard wrapper retains that\n * attempt (auth-attempt.ts). A discarded attempt emits nothing, so every\n * completed turn yields exactly one observation; a turn where every attempt\n * fails yields one terminal error observation instead.\n */\nexport type ContinuityKind = \"bootstrap\" | \"delta\" | \"reattach\" | \"fork\" | \"flatten\" | \"disabled\";\n\n/** Fixed vocabulary — arbitrary error text never reaches an observation. */\nexport type ContinuityReason =\n\t| \"prefix_matched\"\n\t| \"registry_miss\"\n\t| \"idle_ttl\"\n\t| \"capacity\"\n\t| \"model_selected\"\n\t| \"thinking_level_selected\"\n\t| \"bound_account_token_expiring\"\n\t| \"account_changed\"\n\t| \"model_changed\"\n\t| \"toolset_changed\"\n\t| \"system_prompt_changed\"\n\t| \"assistant_stream_diverged\"\n\t| \"sent_stream_diverged\"\n\t| \"options_changed\"\n\t| \"history_rolled_back\"\n\t| \"assistant_rewritten\"\n\t| \"transcript_missing\"\n\t| \"cross_root_unsupported\"\n\t| \"branch_diverged\"\n\t| \"branch_boundary_unavailable\"\n\t| \"branch_resume\"\n\t| \"tainted_compaction\"\n\t| \"tainted_fork\"\n\t| \"tainted_abort\"\n\t| \"tainted_assistant_provenance_unverified\"\n\t| \"resume_initialization_failed\"\n\t| \"resume_initialization_aborted\"\n\t| \"resume_mode_off\"\n\t| \"query_failed\"\n\t| \"turn_attribution_failed\"\n\t| \"abort_timeout\"\n\t| \"extensions_removed\"\n\t| \"session_shutdown\"\n\t| \"timeout_retry\"\n\t| \"other\";\n\nexport type ContinuityObservation = {\n\tkind: ContinuityKind;\n\treason: ContinuityReason;\n\tdeltaMessages?: number;\n\tpayloadBytes?: number;\n\tcollapsedDirectives?: number;\n};\n\nexport type ContinuityObservabilityBoundary = {\n\temit: (observation: ContinuityObservation) => void;\n\tlog: (event: string, data: Record<string, unknown>) => void;\n};\n\nconst SANITIZED_REASONS = new Set<string>([\n\t\"prefix_matched\",\n\t\"registry_miss\",\n\t\"idle_ttl\",\n\t\"capacity\",\n\t\"model_selected\",\n\t\"thinking_level_selected\",\n\t\"bound_account_token_expiring\",\n\t\"account_changed\",\n\t\"model_changed\",\n\t\"toolset_changed\",\n\t\"system_prompt_changed\",\n\t\"assistant_stream_diverged\",\n\t\"options_changed\",\n\t\"history_rolled_back\",\n\t\"assistant_rewritten\",\n\t\"transcript_missing\",\n\t\"cross_root_unsupported\",\n\t\"sent_stream_diverged\",\n\t\"branch_diverged\",\n\t\"branch_boundary_unavailable\",\n\t\"branch_resume\",\n\t\"tainted_compaction\",\n\t\"tainted_fork\",\n\t\"tainted_abort\",\n\t\"tainted_assistant_provenance_unverified\",\n\t\"resume_initialization_failed\",\n\t\"resume_initialization_aborted\",\n\t\"resume_mode_off\",\n\t\"query_failed\",\n\t\"turn_attribution_failed\",\n\t\"abort_timeout\",\n\t\"extensions_removed\",\n\t\"session_shutdown\",\n\t\"timeout_retry\",\n\t\"other\",\n]);\n\nlet cachedLogger: SessionLogger | undefined;\n\nfunction sessionLogger(): SessionLogger {\n\tcachedLogger ??= createSessionLogger(getAgentDir());\n\treturn cachedLogger;\n}\n\nconst defaultBoundary: ContinuityObservabilityBoundary = {\n\temit: () => {},\n\tlog: (event, data) => sessionLogger().info(event, data),\n};\nlet activeBoundary = defaultBoundary;\n\nexport function overrideContinuityObservabilityBoundary(override: Partial<ContinuityObservabilityBoundary>): void {\n\tactiveBoundary = { ...defaultBoundary, ...override };\n}\n\nexport function resetContinuityObservabilityBoundary(): void {\n\tactiveBoundary = defaultBoundary;\n}\n\n/** Maps a fixed vocabulary member through, and anything else to a bucketed cause. */\nexport function sanitizeReason(value: unknown): ContinuityReason {\n\tconst text = typeof value === \"string\" ? value : value instanceof Error ? value.message : \"\";\n\tif (SANITIZED_REASONS.has(text)) return text as ContinuityReason;\n\tconst tainted = /^tainted:(.+)$/.exec(text);\n\tif (tainted) {\n\t\tconst mapped = `tainted_${tainted[1]}`;\n\t\tif (SANITIZED_REASONS.has(mapped)) return mapped as ContinuityReason;\n\t}\n\treturn sanitizeCloseCause(value);\n}\n\n/** Buckets arbitrary close/pump failures into the fixed close-cause vocabulary. */\nexport function sanitizeCloseCause(value: unknown): ContinuityReason {\n\tconst text = typeof value === \"string\" ? value : value instanceof Error ? value.message : \"\";\n\tif (SANITIZED_REASONS.has(text)) return text as ContinuityReason;\n\tif (/did not terminate|interrupt failed/i.test(text)) return \"abort_timeout\";\n\tif (/user_message_uuid did not match|result arrived before replay claim|pre-replay buffer overflow/i.test(text)) {\n\t\treturn \"turn_attribution_failed\";\n\t}\n\tif (/query ended before|Claude SDK OAuth query|Claude Code/i.test(text)) return \"query_failed\";\n\treturn \"other\";\n}\n\n/**\n * Classifies the failure that ended a turn after every auth attempt failed.\n * Anything reaching here came out of the SDK query path, so an Error is a query\n * failure unless it matches a more specific bucket; the raw text never escapes.\n */\nexport function sanitizeTerminalFailure(value: unknown): ContinuityReason {\n\tconst cause = sanitizeCloseCause(value);\n\tif (cause !== \"other\") return cause;\n\treturn value instanceof Error ? \"query_failed\" : \"other\";\n}\n\n/**\n * One-shot pending close causes keyed by senpi session id. `closeSession`\n * records the cause here; the next admission consumes it so a first-turn\n * `registry_miss` is attributed to the real cause instead.\n */\nconst pendingCloseCauses = new Map<string, ContinuityReason>();\n// Long-running processes can stage many closes: the map is FIFO-bounded so it\n// cannot grow without limit. 256 pending causes per process is far beyond any\n// realistic session count; the oldest entry is evicted first.\nconst PENDING_CLOSE_CAUSE_LIMIT = 256;\n\nexport function recordPendingCloseCause(senpiSessionId: string, reason: unknown): void {\n\tconst cause = sanitizeReason(reason);\n\t// Delete first so a re-recorded cause moves to the newest position.\n\tpendingCloseCauses.delete(senpiSessionId);\n\tif (pendingCloseCauses.size >= PENDING_CLOSE_CAUSE_LIMIT) {\n\t\tconst oldest = pendingCloseCauses.keys().next().value;\n\t\tif (oldest !== undefined) pendingCloseCauses.delete(oldest);\n\t}\n\tpendingCloseCauses.set(senpiSessionId, cause);\n\tactiveBoundary.log(\"claude_sdk_oauth_session_close\", { reason: cause });\n}\n\n/** Read the pending close cause WITHOUT consuming it (consumed at emit time). */\nexport function peekPendingCloseCause(senpiSessionId: string): ContinuityReason | undefined {\n\treturn pendingCloseCauses.get(senpiSessionId);\n}\n\nexport function consumePendingCloseCause(senpiSessionId: string): ContinuityReason | undefined {\n\tconst cause = pendingCloseCauses.get(senpiSessionId);\n\tpendingCloseCauses.delete(senpiSessionId);\n\treturn cause;\n}\n\n/**\n * Maps the continuity decision families onto the observation vocabulary:\n * incremental→delta, resume→fork, cold-seed→flatten.\n */\nexport function observeSessionSyncDecision(input: {\n\tkind: \"incremental\" | \"resume\" | \"cold-seed\";\n\treason?: string;\n\tdeltaMessages: number;\n\tfirstTurn: boolean;\n\tsenpiSessionId: string;\n\tpayloadBytes?: number;\n\tcollapsedDirectives?: number;\n}): ContinuityObservation {\n\tif (input.kind === \"incremental\") {\n\t\treturn { kind: \"delta\", reason: \"prefix_matched\", deltaMessages: input.deltaMessages };\n\t}\n\tif (input.kind === \"resume\") {\n\t\tconst retainedCause =\n\t\t\tinput.reason === \"registry_miss\" ? consumePendingCloseCause(input.senpiSessionId) : undefined;\n\t\treturn {\n\t\t\tkind: \"fork\",\n\t\t\treason: retainedCause ?? (input.reason === undefined ? \"branch_resume\" : sanitizeReason(input.reason)),\n\t\t\tdeltaMessages: input.deltaMessages,\n\t\t};\n\t}\n\t// Peek, not consume: the staged observation is emitted only when the\n\t// auth-lane RETAINS this attempt. Consuming here would lose the cause when\n\t// the attempt is discarded; the emit path consumes it (session-stream.ts).\n\tconst retained = input.reason === \"registry_miss\" ? peekPendingCloseCause(input.senpiSessionId) : undefined;\n\tconst reason = retained ?? sanitizeReason(input.reason);\n\treturn {\n\t\tkind: input.firstTurn && reason === \"registry_miss\" ? \"bootstrap\" : \"flatten\",\n\t\treason,\n\t\tdeltaMessages: input.deltaMessages,\n\t\t...(input.payloadBytes !== undefined ? { payloadBytes: input.payloadBytes } : {}),\n\t\t...(input.collapsedDirectives !== undefined ? { collapsedDirectives: input.collapsedDirectives } : {}),\n\t};\n}\n\nexport type StagedContinuityDecision = {\n\tobservation: ContinuityObservation;\n\temit: () => void;\n};\n\n/** Stages an attempt's decision; `emit` fires only when the attempt is retained. */\nexport function stageContinuityDecision(\n\tobservation: ContinuityObservation,\n\tonDecision?: (observation: ContinuityObservation) => void,\n\tbeforeEmit?: () => void,\n): StagedContinuityDecision {\n\tlet emitted = false;\n\treturn {\n\t\tobservation,\n\t\temit: () => {\n\t\t\tif (emitted) return;\n\t\t\temitted = true;\n\t\t\tbeforeEmit?.();\n\t\t\temitContinuityObservation(observation, onDecision);\n\t\t},\n\t};\n}\n\nexport function emitContinuityObservation(\n\tobservation: ContinuityObservation,\n\tonDecision?: (observation: ContinuityObservation) => void,\n): void {\n\tonDecision?.(observation);\n\tactiveBoundary.emit(observation);\n\tactiveBoundary.log(\"claude_sdk_oauth_session_continuity\", {\n\t\tkind: observation.kind,\n\t\treason: observation.reason,\n\t\t...(observation.deltaMessages === undefined ? {} : { count: observation.deltaMessages }),\n\t});\n}\n"]}
1
+ {"version":3,"file":"session-observability.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-observability.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAgentDir } from \"../../../../config.ts\";\nimport { createSessionLogger, type SessionLogger } from \"../../../session-log.ts\";\n\n/**\n * Per-turn continuity observability for the claude-sdk-oauth lane.\n *\n * Emission semantics: a decision is STAGED per attempt at its final outcome\n * point and EMITTED only when the auth-lane retain/discard wrapper retains that\n * attempt (auth-attempt.ts). A discarded attempt emits nothing, so every\n * completed turn yields exactly one observation; a turn where every attempt\n * fails yields one terminal error observation instead.\n */\nexport type ContinuityKind = \"bootstrap\" | \"delta\" | \"reattach\" | \"fork\" | \"flatten\" | \"disabled\";\n\n/** Fixed vocabulary — arbitrary error text never reaches an observation. */\nexport type ContinuityReason =\n\t| \"prefix_matched\"\n\t| \"registry_miss\"\n\t| \"idle_ttl\"\n\t| \"capacity\"\n\t| \"model_selected\"\n\t| \"thinking_level_selected\"\n\t| \"bound_account_token_expiring\"\n\t| \"account_changed\"\n\t| \"model_changed\"\n\t| \"toolset_changed\"\n\t| \"system_prompt_changed\"\n\t| \"assistant_stream_diverged\"\n\t| \"sent_stream_diverged\"\n\t| \"options_changed\"\n\t| \"history_rolled_back\"\n\t| \"assistant_rewritten\"\n\t| \"transcript_missing\"\n\t| \"cross_root_unsupported\"\n\t| \"branch_diverged\"\n\t| \"branch_boundary_unavailable\"\n\t| \"branch_resume\"\n\t| \"tainted_compaction\"\n\t| \"tainted_fork\"\n\t| \"tainted_abort\"\n\t| \"tainted_assistant_provenance_unverified\"\n\t| \"resume_initialization_failed\"\n\t| \"resume_initialization_aborted\"\n\t| \"resume_mode_off\"\n\t| \"query_failed\"\n\t| \"turn_attribution_failed\"\n\t| \"session_unconfirmed\"\n\t| \"abort_timeout\"\n\t| \"extensions_removed\"\n\t| \"session_shutdown\"\n\t| \"timeout_retry\"\n\t| \"other\";\n\nexport type ContinuityObservation = {\n\tkind: ContinuityKind;\n\treason: ContinuityReason;\n\tdeltaMessages?: number;\n\tpayloadBytes?: number;\n\tcollapsedDirectives?: number;\n};\n\nexport type ContinuityObservabilityBoundary = {\n\temit: (observation: ContinuityObservation) => void;\n\tlog: (event: string, data: Record<string, unknown>) => void;\n};\n\nconst SANITIZED_REASONS = new Set<string>([\n\t\"prefix_matched\",\n\t\"registry_miss\",\n\t\"idle_ttl\",\n\t\"capacity\",\n\t\"model_selected\",\n\t\"thinking_level_selected\",\n\t\"bound_account_token_expiring\",\n\t\"account_changed\",\n\t\"model_changed\",\n\t\"toolset_changed\",\n\t\"system_prompt_changed\",\n\t\"assistant_stream_diverged\",\n\t\"options_changed\",\n\t\"history_rolled_back\",\n\t\"assistant_rewritten\",\n\t\"transcript_missing\",\n\t\"cross_root_unsupported\",\n\t\"sent_stream_diverged\",\n\t\"branch_diverged\",\n\t\"branch_boundary_unavailable\",\n\t\"branch_resume\",\n\t\"tainted_compaction\",\n\t\"tainted_fork\",\n\t\"tainted_abort\",\n\t\"tainted_assistant_provenance_unverified\",\n\t\"resume_initialization_failed\",\n\t\"resume_initialization_aborted\",\n\t\"resume_mode_off\",\n\t\"query_failed\",\n\t\"turn_attribution_failed\",\n\t\"session_unconfirmed\",\n\t\"abort_timeout\",\n\t\"extensions_removed\",\n\t\"session_shutdown\",\n\t\"timeout_retry\",\n\t\"other\",\n]);\n\nlet cachedLogger: SessionLogger | undefined;\n\nfunction sessionLogger(): SessionLogger {\n\tcachedLogger ??= createSessionLogger(getAgentDir());\n\treturn cachedLogger;\n}\n\nconst defaultBoundary: ContinuityObservabilityBoundary = {\n\temit: () => {},\n\tlog: (event, data) => sessionLogger().info(event, data),\n};\nlet activeBoundary = defaultBoundary;\n\nexport function overrideContinuityObservabilityBoundary(override: Partial<ContinuityObservabilityBoundary>): void {\n\tactiveBoundary = { ...defaultBoundary, ...override };\n}\n\nexport function resetContinuityObservabilityBoundary(): void {\n\tactiveBoundary = defaultBoundary;\n}\n\n/** Maps a fixed vocabulary member through, and anything else to a bucketed cause. */\nexport function sanitizeReason(value: unknown): ContinuityReason {\n\tconst text = typeof value === \"string\" ? value : value instanceof Error ? value.message : \"\";\n\tif (SANITIZED_REASONS.has(text)) return text as ContinuityReason;\n\tconst tainted = /^tainted:(.+)$/.exec(text);\n\tif (tainted) {\n\t\tconst mapped = `tainted_${tainted[1]}`;\n\t\tif (SANITIZED_REASONS.has(mapped)) return mapped as ContinuityReason;\n\t}\n\treturn sanitizeCloseCause(value);\n}\n\n/** Buckets arbitrary close/pump failures into the fixed close-cause vocabulary. */\nexport function sanitizeCloseCause(value: unknown): ContinuityReason {\n\tconst text = typeof value === \"string\" ? value : value instanceof Error ? value.message : \"\";\n\tif (SANITIZED_REASONS.has(text)) return text as ContinuityReason;\n\tif (/did not terminate|interrupt failed/i.test(text)) return \"abort_timeout\";\n\tif (/user_message_uuid did not match|result arrived before replay claim|pre-replay buffer overflow/i.test(text)) {\n\t\treturn \"turn_attribution_failed\";\n\t}\n\tif (/query ended before|Claude SDK OAuth query|Claude Code/i.test(text)) return \"query_failed\";\n\treturn \"other\";\n}\n\n/**\n * Classifies the failure that ended a turn after every auth attempt failed.\n * Anything reaching here came out of the SDK query path, so an Error is a query\n * failure unless it matches a more specific bucket; the raw text never escapes.\n */\nexport function sanitizeTerminalFailure(value: unknown): ContinuityReason {\n\tconst cause = sanitizeCloseCause(value);\n\tif (cause !== \"other\") return cause;\n\treturn value instanceof Error ? \"query_failed\" : \"other\";\n}\n\n/**\n * One-shot pending close causes keyed by senpi session id. `closeSession`\n * records the cause here; the next admission consumes it so a first-turn\n * `registry_miss` is attributed to the real cause instead.\n */\nconst pendingCloseCauses = new Map<string, ContinuityReason>();\n// Long-running processes can stage many closes: the map is FIFO-bounded so it\n// cannot grow without limit. 256 pending causes per process is far beyond any\n// realistic session count; the oldest entry is evicted first.\nconst PENDING_CLOSE_CAUSE_LIMIT = 256;\n\nexport function recordPendingCloseCause(senpiSessionId: string, reason: unknown): void {\n\tconst cause = sanitizeReason(reason);\n\t// Delete first so a re-recorded cause moves to the newest position.\n\tpendingCloseCauses.delete(senpiSessionId);\n\tif (pendingCloseCauses.size >= PENDING_CLOSE_CAUSE_LIMIT) {\n\t\tconst oldest = pendingCloseCauses.keys().next().value;\n\t\tif (oldest !== undefined) pendingCloseCauses.delete(oldest);\n\t}\n\tpendingCloseCauses.set(senpiSessionId, cause);\n\tactiveBoundary.log(\"claude_sdk_oauth_session_close\", { reason: cause });\n}\n\n/** Read the pending close cause WITHOUT consuming it (consumed at emit time). */\nexport function peekPendingCloseCause(senpiSessionId: string): ContinuityReason | undefined {\n\treturn pendingCloseCauses.get(senpiSessionId);\n}\n\nexport function consumePendingCloseCause(senpiSessionId: string): ContinuityReason | undefined {\n\tconst cause = pendingCloseCauses.get(senpiSessionId);\n\tpendingCloseCauses.delete(senpiSessionId);\n\treturn cause;\n}\n\n/**\n * Maps the continuity decision families onto the observation vocabulary:\n * incremental→delta, resume→fork, cold-seed→flatten.\n */\nexport function observeSessionSyncDecision(input: {\n\tkind: \"incremental\" | \"resume\" | \"cold-seed\";\n\treason?: string;\n\tdeltaMessages: number;\n\tfirstTurn: boolean;\n\tsenpiSessionId: string;\n\tpayloadBytes?: number;\n\tcollapsedDirectives?: number;\n}): ContinuityObservation {\n\tif (input.kind === \"incremental\") {\n\t\treturn { kind: \"delta\", reason: \"prefix_matched\", deltaMessages: input.deltaMessages };\n\t}\n\tif (input.kind === \"resume\") {\n\t\tconst retainedCause =\n\t\t\tinput.reason === \"registry_miss\" ? consumePendingCloseCause(input.senpiSessionId) : undefined;\n\t\treturn {\n\t\t\tkind: \"fork\",\n\t\t\treason: retainedCause ?? (input.reason === undefined ? \"branch_resume\" : sanitizeReason(input.reason)),\n\t\t\tdeltaMessages: input.deltaMessages,\n\t\t};\n\t}\n\t// Peek, not consume: the staged observation is emitted only when the\n\t// auth-lane RETAINS this attempt. Consuming here would lose the cause when\n\t// the attempt is discarded; the emit path consumes it (session-stream.ts).\n\tconst retained = input.reason === \"registry_miss\" ? peekPendingCloseCause(input.senpiSessionId) : undefined;\n\tconst reason = retained ?? sanitizeReason(input.reason);\n\treturn {\n\t\tkind: input.firstTurn && reason === \"registry_miss\" ? \"bootstrap\" : \"flatten\",\n\t\treason,\n\t\tdeltaMessages: input.deltaMessages,\n\t\t...(input.payloadBytes !== undefined ? { payloadBytes: input.payloadBytes } : {}),\n\t\t...(input.collapsedDirectives !== undefined ? { collapsedDirectives: input.collapsedDirectives } : {}),\n\t};\n}\n\nexport type StagedContinuityDecision = {\n\tobservation: ContinuityObservation;\n\temit: () => void;\n};\n\n/** Stages an attempt's decision; `emit` fires only when the attempt is retained. */\nexport function stageContinuityDecision(\n\tobservation: ContinuityObservation,\n\tonDecision?: (observation: ContinuityObservation) => void,\n\tbeforeEmit?: () => void,\n): StagedContinuityDecision {\n\tlet emitted = false;\n\treturn {\n\t\tobservation,\n\t\temit: () => {\n\t\t\tif (emitted) return;\n\t\t\temitted = true;\n\t\t\tbeforeEmit?.();\n\t\t\temitContinuityObservation(observation, onDecision);\n\t\t},\n\t};\n}\n\nexport function emitContinuityObservation(\n\tobservation: ContinuityObservation,\n\tonDecision?: (observation: ContinuityObservation) => void,\n): void {\n\tonDecision?.(observation);\n\tactiveBoundary.emit(observation);\n\tactiveBoundary.log(\"claude_sdk_oauth_session_continuity\", {\n\t\tkind: observation.kind,\n\t\treason: observation.reason,\n\t\t...(observation.deltaMessages === undefined ? {} : { count: observation.deltaMessages }),\n\t});\n}\n"]}
@@ -7,6 +7,11 @@ export type ContinuityBinding = {
7
7
  sentCount: number;
8
8
  sentHashes: readonly string[];
9
9
  sentPrefixHash?: string;
10
+ /**
11
+ * False while the SDK has not yet acknowledged this session id (no init and
12
+ * no replay echo): continuity must never resume or fork such an id.
13
+ */
14
+ sdkSessionIdConfirmed?: boolean;
10
15
  lastAssistantUuid: string | null;
11
16
  accountName: string;
12
17
  modelId: string;
@@ -34,7 +39,7 @@ export declare function evaluateAbortOutcome(receipt: unknown): AbortOutcome;
34
39
  export declare function rememberBinding(binding: ContinuityBinding): void;
35
40
  export declare function getBinding(senpiSessionId: string): ContinuityBinding | undefined;
36
41
  export declare function forgetBinding(senpiSessionId: string): void;
37
- export declare function bindingFromEntry(entry: Pick<ClaudeSdkOauthSessionEntry, "senpiSessionId" | "sdkSessionId" | "sentCount" | "accountName" | "modelId" | "systemPromptHash" | "toolsetHash" | "assistantUuidByIndex">, sentHashes: readonly string[]): ContinuityBinding;
42
+ export declare function bindingFromEntry(entry: Pick<ClaudeSdkOauthSessionEntry, "senpiSessionId" | "sdkSessionId" | "sentCount" | "accountName" | "modelId" | "systemPromptHash" | "toolsetHash" | "assistantUuidByIndex" | "sdkSessionIdConfirmed">, sentHashes: readonly string[]): ContinuityBinding;
38
43
  export declare function verifyRestoredTranscript(binding: ContinuityBinding, cwd: string, authLane: ClaudeSdkOauthAuthLane): Promise<boolean>;
39
44
  /**
40
45
  * A new query is not a new session: `resume` re-attaches to the existing lineage.
@@ -1 +1 @@
1
- {"version":3,"file":"session-reattach.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-reattach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,KAAK,0BAA0B,EAAoC,MAAM,uBAAuB,CAAC;AAG1G,MAAM,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC9D;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;AAU/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAInE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAEhE;AAED,wBAAgB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAGhF;AAED,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,CACV,0BAA0B,EACxB,gBAAgB,GAChB,cAAc,GACd,WAAW,GACX,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,sBAAsB,CACxB,EACD,UAAU,EAAE,SAAS,MAAM,EAAE,GAC3B,iBAAiB,CAanB;AAED,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,sBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAoBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA4B/F"}
1
+ {"version":3,"file":"session-reattach.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-reattach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,KAAK,0BAA0B,EAAoC,MAAM,uBAAuB,CAAC;AAG1G,MAAM,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC9D;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;AAU/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAInE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAEhE;AAED,wBAAgB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAGhF;AAED,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,CACV,0BAA0B,EACxB,gBAAgB,GAChB,cAAc,GACd,WAAW,GACX,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,sBAAsB,GACtB,uBAAuB,CACzB,EACD,UAAU,EAAE,SAAS,MAAM,EAAE,GAC3B,iBAAiB,CAcnB;AAED,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,sBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAoBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA4B/F"}
@@ -29,6 +29,7 @@ export function bindingFromEntry(entry, sentHashes) {
29
29
  return {
30
30
  senpiSessionId: entry.senpiSessionId,
31
31
  sdkSessionId: entry.sdkSessionId,
32
+ sdkSessionIdConfirmed: entry.sdkSessionIdConfirmed,
32
33
  sentCount: entry.sentCount,
33
34
  sentHashes: [...sentHashes],
34
35
  lastAssistantUuid: entry.assistantUuidByIndex.get(entry.sentCount) ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"session-reattach.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-reattach.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ClaudeSdkOauthAuthLane } from \"./options.ts\";\nimport type { Options, SessionMessage } from \"./sdk-boundary.ts\";\nimport { getSdkBoundary, loadClaudeAgentSdk } from \"./sdk-boundary.ts\";\nimport { type ClaudeSdkOauthSessionEntry, closeSession, getOrCreateSession } from \"./session-registry.ts\";\nimport { recordSyncedStream } from \"./session-sync.ts\";\n\nexport type ContinuityBinding = {\n\tsenpiSessionId: string;\n\tsdkSessionId: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tsentPrefixHash?: string;\n\tlastAssistantUuid: string | null;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\t/** Assistant boundaries kept as entries so a later fork still has a resume point. */\n\tassistantUuidByIndex?: readonly (readonly [number, string])[];\n\t/**\n\t * Digest of the FULL sent stream an attempt pushed but never got answered\n\t * (stream-start timeout abort/failure). Purely in-memory: it lets the SAME\n\t * turn's retry fork at the pre-turn boundary instead of re-appending its user\n\t * message to a lineage that already carries it. Never persisted — the sidecar\n\t * schema is fixed at schemaVersion 1 and restart retries are out of scope.\n\t */\n\tunansweredTurnDigest?: string;\n};\n\nexport type ReattachInput = {\n\tbinding: ContinuityBinding;\n\toptions: Options;\n\tatUuid?: string;\n\tsignal?: AbortSignal;\n};\n\nconst bindings = new Map<string, ContinuityBinding>();\n\nexport type AbortOutcome = \"keep\" | \"reattach\";\n\nfunction cloneBinding(binding: ContinuityBinding): ContinuityBinding {\n\treturn {\n\t\t...binding,\n\t\tsentHashes: [...binding.sentHashes],\n\t\tassistantUuidByIndex: binding.assistantUuidByIndex?.map(([index, uuid]) => [index, uuid]),\n\t};\n}\n\nexport function evaluateAbortOutcome(receipt: unknown): AbortOutcome {\n\tif (!receipt || typeof receipt !== \"object\") return \"reattach\";\n\tconst queued = (receipt as { still_queued?: unknown }).still_queued;\n\treturn Array.isArray(queued) && queued.length === 0 ? \"keep\" : \"reattach\";\n}\n\nexport function rememberBinding(binding: ContinuityBinding): void {\n\tbindings.set(binding.senpiSessionId, cloneBinding(binding));\n}\n\nexport function getBinding(senpiSessionId: string): ContinuityBinding | undefined {\n\tconst binding = bindings.get(senpiSessionId);\n\treturn binding ? cloneBinding(binding) : undefined;\n}\n\nexport function forgetBinding(senpiSessionId: string): void {\n\tbindings.delete(senpiSessionId);\n}\n\nexport function bindingFromEntry(\n\tentry: Pick<\n\t\tClaudeSdkOauthSessionEntry,\n\t\t| \"senpiSessionId\"\n\t\t| \"sdkSessionId\"\n\t\t| \"sentCount\"\n\t\t| \"accountName\"\n\t\t| \"modelId\"\n\t\t| \"systemPromptHash\"\n\t\t| \"toolsetHash\"\n\t\t| \"assistantUuidByIndex\"\n\t>,\n\tsentHashes: readonly string[],\n): ContinuityBinding {\n\treturn {\n\t\tsenpiSessionId: entry.senpiSessionId,\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tsentCount: entry.sentCount,\n\t\tsentHashes: [...sentHashes],\n\t\tlastAssistantUuid: entry.assistantUuidByIndex.get(entry.sentCount) ?? null,\n\t\tassistantUuidByIndex: [...entry.assistantUuidByIndex.entries()],\n\t\taccountName: entry.accountName,\n\t\tmodelId: entry.modelId,\n\t\tsystemPromptHash: entry.systemPromptHash,\n\t\ttoolsetHash: entry.toolsetHash,\n\t};\n}\n\nexport async function verifyRestoredTranscript(\n\tbinding: ContinuityBinding,\n\tcwd: string,\n\tauthLane: ClaudeSdkOauthAuthLane,\n): Promise<boolean> {\n\tif (authLane === \"config-dir\") return false;\n\tlet messages: SessionMessage[];\n\ttry {\n\t\tmessages = await getSdkBoundary().getSessionMessages(binding.sdkSessionId, { dir: cwd });\n\t} catch (error) {\n\t\tif (error instanceof Error) return false;\n\t\tthrow error;\n\t}\n\tif (messages.length === 0 || messages.some((message) => message.session_id !== binding.sdkSessionId)) {\n\t\treturn false;\n\t}\n\tif (binding.lastAssistantUuid === null) return true;\n\treturn messages.some(\n\t\t(message) =>\n\t\t\tmessage.type === \"assistant\" &&\n\t\t\tmessage.uuid === binding.lastAssistantUuid &&\n\t\t\tmessage.parent_tool_use_id === null,\n\t);\n}\n\nasync function awaitInitialization(entry: ClaudeSdkOauthSessionEntry, signal?: AbortSignal): Promise<void> {\n\tconst initialize = entry.query.initializationResult;\n\tif (!initialize) return;\n\tif (!signal) {\n\t\tawait initialize.call(entry.query);\n\t\treturn;\n\t}\n\tconst aborted = new Promise<never>((_resolve, reject) => {\n\t\tconst onAbort = (): void => {\n\t\t\tcloseSession(entry.senpiSessionId, \"resume_initialization_aborted\");\n\t\t\treject(new Error(\"Claude SDK OAuth reattach aborted\"));\n\t\t};\n\t\tif (signal.aborted) onAbort();\n\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n\tawait Promise.race([initialize.call(entry.query), aborted]);\n}\n\n/**\n * A new query is not a new session: `resume` re-attaches to the existing lineage.\n * `sessionId` must stay absent unless forking, because the SDK rejects the pair\n * (sdk.d.ts:1805-1808) and would otherwise silently start an unrelated session.\n */\nexport async function reattachSession(input: ReattachInput): Promise<ClaudeSdkOauthSessionEntry> {\n\t// getOrCreateSession() reaches the synchronous SDK `query` through the\n\t// session-registry boundary - see sdk-boundary.lazy.ts.\n\tawait loadClaudeAgentSdk();\n\tconst { binding, atUuid } = input;\n\tcloseSession(binding.senpiSessionId, \"reattach\");\n\tconst entry = getOrCreateSession({\n\t\tsenpiSessionId: binding.senpiSessionId,\n\t\taccountName: binding.accountName,\n\t\tmodelId: binding.modelId,\n\t\tsystemPromptHash: binding.systemPromptHash,\n\t\ttoolsetHash: binding.toolsetHash,\n\t\toptions: input.options,\n\t\tresume: atUuid ? { sdkSessionId: binding.sdkSessionId, atUuid } : { sdkSessionId: binding.sdkSessionId },\n\t});\n\n\ttry {\n\t\tawait awaitInitialization(entry, input.signal);\n\t} catch (error) {\n\t\tcloseSession(binding.senpiSessionId, \"resume_initialization_failed\");\n\t\tthrow error;\n\t}\n\n\trecordSyncedStream(entry, binding.sentHashes);\n\tfor (const [index, uuid] of binding.assistantUuidByIndex ?? []) entry.assistantUuidByIndex.set(index, uuid);\n\tif (binding.lastAssistantUuid) entry.assistantUuidByIndex.set(binding.sentCount, binding.lastAssistantUuid);\n\trememberBinding({ ...binding, sdkSessionId: entry.sdkSessionId });\n\treturn entry;\n}\n"]}
1
+ {"version":3,"file":"session-reattach.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/claude-sdk-oauth/session-reattach.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ClaudeSdkOauthAuthLane } from \"./options.ts\";\nimport type { Options, SessionMessage } from \"./sdk-boundary.ts\";\nimport { getSdkBoundary, loadClaudeAgentSdk } from \"./sdk-boundary.ts\";\nimport { type ClaudeSdkOauthSessionEntry, closeSession, getOrCreateSession } from \"./session-registry.ts\";\nimport { recordSyncedStream } from \"./session-sync.ts\";\n\nexport type ContinuityBinding = {\n\tsenpiSessionId: string;\n\tsdkSessionId: string;\n\tsentCount: number;\n\tsentHashes: readonly string[];\n\tsentPrefixHash?: string;\n\t/**\n\t * False while the SDK has not yet acknowledged this session id (no init and\n\t * no replay echo): continuity must never resume or fork such an id.\n\t */\n\tsdkSessionIdConfirmed?: boolean;\n\tlastAssistantUuid: string | null;\n\taccountName: string;\n\tmodelId: string;\n\tsystemPromptHash: string;\n\ttoolsetHash: string;\n\t/** Assistant boundaries kept as entries so a later fork still has a resume point. */\n\tassistantUuidByIndex?: readonly (readonly [number, string])[];\n\t/**\n\t * Digest of the FULL sent stream an attempt pushed but never got answered\n\t * (stream-start timeout abort/failure). Purely in-memory: it lets the SAME\n\t * turn's retry fork at the pre-turn boundary instead of re-appending its user\n\t * message to a lineage that already carries it. Never persisted — the sidecar\n\t * schema is fixed at schemaVersion 1 and restart retries are out of scope.\n\t */\n\tunansweredTurnDigest?: string;\n};\n\nexport type ReattachInput = {\n\tbinding: ContinuityBinding;\n\toptions: Options;\n\tatUuid?: string;\n\tsignal?: AbortSignal;\n};\n\nconst bindings = new Map<string, ContinuityBinding>();\n\nexport type AbortOutcome = \"keep\" | \"reattach\";\n\nfunction cloneBinding(binding: ContinuityBinding): ContinuityBinding {\n\treturn {\n\t\t...binding,\n\t\tsentHashes: [...binding.sentHashes],\n\t\tassistantUuidByIndex: binding.assistantUuidByIndex?.map(([index, uuid]) => [index, uuid]),\n\t};\n}\n\nexport function evaluateAbortOutcome(receipt: unknown): AbortOutcome {\n\tif (!receipt || typeof receipt !== \"object\") return \"reattach\";\n\tconst queued = (receipt as { still_queued?: unknown }).still_queued;\n\treturn Array.isArray(queued) && queued.length === 0 ? \"keep\" : \"reattach\";\n}\n\nexport function rememberBinding(binding: ContinuityBinding): void {\n\tbindings.set(binding.senpiSessionId, cloneBinding(binding));\n}\n\nexport function getBinding(senpiSessionId: string): ContinuityBinding | undefined {\n\tconst binding = bindings.get(senpiSessionId);\n\treturn binding ? cloneBinding(binding) : undefined;\n}\n\nexport function forgetBinding(senpiSessionId: string): void {\n\tbindings.delete(senpiSessionId);\n}\n\nexport function bindingFromEntry(\n\tentry: Pick<\n\t\tClaudeSdkOauthSessionEntry,\n\t\t| \"senpiSessionId\"\n\t\t| \"sdkSessionId\"\n\t\t| \"sentCount\"\n\t\t| \"accountName\"\n\t\t| \"modelId\"\n\t\t| \"systemPromptHash\"\n\t\t| \"toolsetHash\"\n\t\t| \"assistantUuidByIndex\"\n\t\t| \"sdkSessionIdConfirmed\"\n\t>,\n\tsentHashes: readonly string[],\n): ContinuityBinding {\n\treturn {\n\t\tsenpiSessionId: entry.senpiSessionId,\n\t\tsdkSessionId: entry.sdkSessionId,\n\t\tsdkSessionIdConfirmed: entry.sdkSessionIdConfirmed,\n\t\tsentCount: entry.sentCount,\n\t\tsentHashes: [...sentHashes],\n\t\tlastAssistantUuid: entry.assistantUuidByIndex.get(entry.sentCount) ?? null,\n\t\tassistantUuidByIndex: [...entry.assistantUuidByIndex.entries()],\n\t\taccountName: entry.accountName,\n\t\tmodelId: entry.modelId,\n\t\tsystemPromptHash: entry.systemPromptHash,\n\t\ttoolsetHash: entry.toolsetHash,\n\t};\n}\n\nexport async function verifyRestoredTranscript(\n\tbinding: ContinuityBinding,\n\tcwd: string,\n\tauthLane: ClaudeSdkOauthAuthLane,\n): Promise<boolean> {\n\tif (authLane === \"config-dir\") return false;\n\tlet messages: SessionMessage[];\n\ttry {\n\t\tmessages = await getSdkBoundary().getSessionMessages(binding.sdkSessionId, { dir: cwd });\n\t} catch (error) {\n\t\tif (error instanceof Error) return false;\n\t\tthrow error;\n\t}\n\tif (messages.length === 0 || messages.some((message) => message.session_id !== binding.sdkSessionId)) {\n\t\treturn false;\n\t}\n\tif (binding.lastAssistantUuid === null) return true;\n\treturn messages.some(\n\t\t(message) =>\n\t\t\tmessage.type === \"assistant\" &&\n\t\t\tmessage.uuid === binding.lastAssistantUuid &&\n\t\t\tmessage.parent_tool_use_id === null,\n\t);\n}\n\nasync function awaitInitialization(entry: ClaudeSdkOauthSessionEntry, signal?: AbortSignal): Promise<void> {\n\tconst initialize = entry.query.initializationResult;\n\tif (!initialize) return;\n\tif (!signal) {\n\t\tawait initialize.call(entry.query);\n\t\treturn;\n\t}\n\tconst aborted = new Promise<never>((_resolve, reject) => {\n\t\tconst onAbort = (): void => {\n\t\t\tcloseSession(entry.senpiSessionId, \"resume_initialization_aborted\");\n\t\t\treject(new Error(\"Claude SDK OAuth reattach aborted\"));\n\t\t};\n\t\tif (signal.aborted) onAbort();\n\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n\tawait Promise.race([initialize.call(entry.query), aborted]);\n}\n\n/**\n * A new query is not a new session: `resume` re-attaches to the existing lineage.\n * `sessionId` must stay absent unless forking, because the SDK rejects the pair\n * (sdk.d.ts:1805-1808) and would otherwise silently start an unrelated session.\n */\nexport async function reattachSession(input: ReattachInput): Promise<ClaudeSdkOauthSessionEntry> {\n\t// getOrCreateSession() reaches the synchronous SDK `query` through the\n\t// session-registry boundary - see sdk-boundary.lazy.ts.\n\tawait loadClaudeAgentSdk();\n\tconst { binding, atUuid } = input;\n\tcloseSession(binding.senpiSessionId, \"reattach\");\n\tconst entry = getOrCreateSession({\n\t\tsenpiSessionId: binding.senpiSessionId,\n\t\taccountName: binding.accountName,\n\t\tmodelId: binding.modelId,\n\t\tsystemPromptHash: binding.systemPromptHash,\n\t\ttoolsetHash: binding.toolsetHash,\n\t\toptions: input.options,\n\t\tresume: atUuid ? { sdkSessionId: binding.sdkSessionId, atUuid } : { sdkSessionId: binding.sdkSessionId },\n\t});\n\n\ttry {\n\t\tawait awaitInitialization(entry, input.signal);\n\t} catch (error) {\n\t\tcloseSession(binding.senpiSessionId, \"resume_initialization_failed\");\n\t\tthrow error;\n\t}\n\n\trecordSyncedStream(entry, binding.sentHashes);\n\tfor (const [index, uuid] of binding.assistantUuidByIndex ?? []) entry.assistantUuidByIndex.set(index, uuid);\n\tif (binding.lastAssistantUuid) entry.assistantUuidByIndex.set(binding.sentCount, binding.lastAssistantUuid);\n\trememberBinding({ ...binding, sdkSessionId: entry.sdkSessionId });\n\treturn entry;\n}\n"]}