@code-yeongyu/senpi 2026.9.4 → 2026.9.5-3

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 (1047) hide show
  1. package/CHANGELOG.md +143 -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 +17 -1
  9. package/dist/core/agent-session.d.ts.map +1 -1
  10. package/dist/core/agent-session.js +106 -3
  11. package/dist/core/agent-session.js.map +1 -1
  12. package/dist/core/auth-storage.d.ts.map +1 -1
  13. package/dist/core/auth-storage.js +31 -41
  14. package/dist/core/auth-storage.js.map +1 -1
  15. package/dist/core/compaction/compaction.d.ts.map +1 -1
  16. package/dist/core/compaction/compaction.js +20 -7
  17. package/dist/core/compaction/compaction.js.map +1 -1
  18. package/dist/core/credential-pool/state-store.d.ts +1 -0
  19. package/dist/core/credential-pool/state-store.d.ts.map +1 -1
  20. package/dist/core/credential-pool/state-store.js +22 -2
  21. package/dist/core/credential-pool/state-store.js.map +1 -1
  22. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  23. package/dist/core/extensions/builtin/bash-timeout/index.js +1 -5
  24. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  25. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts +0 -2
  26. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
  27. package/dist/core/extensions/builtin/bash-timeout/timeout.js +3 -4
  28. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.d.ts.map +1 -1
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js +2 -0
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +1 -1
  32. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts +5 -0
  33. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -1
  34. package/dist/core/extensions/builtin/compaction/model-usability-budget.js +11 -4
  35. package/dist/core/extensions/builtin/compaction/model-usability-budget.js.map +1 -1
  36. package/dist/core/extensions/builtin/compaction/openai-remote-convert.d.ts.map +1 -1
  37. package/dist/core/extensions/builtin/compaction/openai-remote-convert.js +2 -0
  38. package/dist/core/extensions/builtin/compaction/openai-remote-convert.js.map +1 -1
  39. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/goal/prompt.js +1 -3
  41. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
  42. package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
  43. package/dist/core/extensions/builtin/goal/store.js +8 -20
  44. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  45. package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
  46. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  47. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  48. package/dist/core/extensions/builtin/hooks/trust-storage.js +3 -1
  49. package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
  50. package/dist/core/extensions/builtin/imagegen/auth.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/imagegen/auth.js +10 -2
  52. package/dist/core/extensions/builtin/imagegen/auth.js.map +1 -1
  53. package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/loop/index.js +20 -1
  55. package/dist/core/extensions/builtin/loop/index.js.map +1 -1
  56. package/dist/core/extensions/builtin/loop/store.d.ts +8 -6
  57. package/dist/core/extensions/builtin/loop/store.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/loop/store.js +54 -88
  59. package/dist/core/extensions/builtin/loop/store.js.map +1 -1
  60. package/dist/core/extensions/builtin/loop/tools.d.ts +6 -1
  61. package/dist/core/extensions/builtin/loop/tools.d.ts.map +1 -1
  62. package/dist/core/extensions/builtin/loop/tools.js +8 -1
  63. package/dist/core/extensions/builtin/loop/tools.js.map +1 -1
  64. package/dist/core/extensions/builtin/monitor-state-event.d.ts +2 -0
  65. package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
  66. package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
  67. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +10 -6
  68. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  69. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +27 -12
  70. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  71. package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
  72. package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/recommended-models/index.js +1 -0
  74. package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
  75. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/service-tier.js +12 -4
  77. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  78. package/dist/core/extensions/builtin/terminal/durable-command.d.ts +31 -0
  79. package/dist/core/extensions/builtin/terminal/durable-command.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/terminal/durable-command.js +96 -0
  81. package/dist/core/extensions/builtin/terminal/durable-command.js.map +1 -0
  82. package/dist/core/extensions/builtin/terminal/durable-file.d.ts +42 -0
  83. package/dist/core/extensions/builtin/terminal/durable-file.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/terminal/durable-file.js +102 -0
  85. package/dist/core/extensions/builtin/terminal/durable-file.js.map +1 -0
  86. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  87. package/dist/core/extensions/builtin/terminal/extension.js +226 -3
  88. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  89. package/dist/core/extensions/builtin/terminal/manager.d.ts +10 -0
  90. package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
  91. package/dist/core/extensions/builtin/terminal/manager.js +21 -0
  92. package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
  93. package/dist/core/extensions/builtin/terminal/manifest-lease.d.ts +24 -0
  94. package/dist/core/extensions/builtin/terminal/manifest-lease.d.ts.map +1 -0
  95. package/dist/core/extensions/builtin/terminal/manifest-lease.js +105 -0
  96. package/dist/core/extensions/builtin/terminal/manifest-lease.js.map +1 -0
  97. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/terminal/monitor-notify.js +5 -1
  99. package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
  100. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +42 -2
  101. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/terminal/monitor-registry.js +73 -2
  103. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  104. package/dist/core/extensions/builtin/terminal/monitor-status.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/terminal/monitor-status.js +21 -1
  106. package/dist/core/extensions/builtin/terminal/monitor-status.js.map +1 -1
  107. package/dist/core/extensions/builtin/terminal/prompt.d.ts.map +1 -1
  108. package/dist/core/extensions/builtin/terminal/prompt.js +9 -5
  109. package/dist/core/extensions/builtin/terminal/prompt.js.map +1 -1
  110. package/dist/core/extensions/builtin/terminal/restore.d.ts +56 -0
  111. package/dist/core/extensions/builtin/terminal/restore.d.ts.map +1 -0
  112. package/dist/core/extensions/builtin/terminal/restore.js +177 -0
  113. package/dist/core/extensions/builtin/terminal/restore.js.map +1 -0
  114. package/dist/core/extensions/builtin/terminal/shared.d.ts +25 -0
  115. package/dist/core/extensions/builtin/terminal/shared.d.ts.map +1 -1
  116. package/dist/core/extensions/builtin/terminal/shared.js +25 -0
  117. package/dist/core/extensions/builtin/terminal/shared.js.map +1 -1
  118. package/dist/core/extensions/builtin/terminal/terminal-manifest-model.d.ts +91 -0
  119. package/dist/core/extensions/builtin/terminal/terminal-manifest-model.d.ts.map +1 -0
  120. package/dist/core/extensions/builtin/terminal/terminal-manifest-model.js +14 -0
  121. package/dist/core/extensions/builtin/terminal/terminal-manifest-model.js.map +1 -0
  122. package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts +62 -0
  123. package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts.map +1 -0
  124. package/dist/core/extensions/builtin/terminal/terminal-manifest.js +204 -0
  125. package/dist/core/extensions/builtin/terminal/terminal-manifest.js.map +1 -0
  126. package/dist/core/extensions/builtin/terminal/tools/bash-input.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/terminal/tools/bash-input.js +3 -2
  128. package/dist/core/extensions/builtin/terminal/tools/bash-input.js.map +1 -1
  129. package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/terminal/tools/bash-output.js +5 -4
  131. package/dist/core/extensions/builtin/terminal/tools/bash-output.js.map +1 -1
  132. package/dist/core/extensions/builtin/terminal/tools/bash-resize.d.ts.map +1 -1
  133. package/dist/core/extensions/builtin/terminal/tools/bash-resize.js +3 -2
  134. package/dist/core/extensions/builtin/terminal/tools/bash-resize.js.map +1 -1
  135. package/dist/core/extensions/builtin/terminal/tools/context.d.ts +8 -0
  136. package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
  137. package/dist/core/extensions/builtin/terminal/tools/context.js +10 -0
  138. package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
  139. package/dist/core/extensions/builtin/terminal/tools/kill-bash.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/terminal/tools/kill-bash.js +5 -4
  141. package/dist/core/extensions/builtin/terminal/tools/kill-bash.js.map +1 -1
  142. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts +4 -1
  143. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
  144. package/dist/core/extensions/builtin/terminal/tools/monitor.js +114 -22
  145. package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
  146. package/dist/core/extensions/builtin/todotools/prompt.d.ts +2 -2
  147. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  148. package/dist/core/extensions/builtin/todotools/prompt.js +3 -6
  149. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  150. package/dist/core/extensions/builtin/tool-search/index.d.ts.map +1 -1
  151. package/dist/core/extensions/builtin/tool-search/index.js +1 -1
  152. package/dist/core/extensions/builtin/tool-search/index.js.map +1 -1
  153. package/dist/core/extensions/builtin/tool-search/native-search.d.ts +9 -4
  154. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
  155. package/dist/core/extensions/builtin/tool-search/native-search.js +11 -6
  156. package/dist/core/extensions/builtin/tool-search/native-search.js.map +1 -1
  157. package/dist/core/extensions/builtin/tool-search/native-support.d.ts +13 -0
  158. package/dist/core/extensions/builtin/tool-search/native-support.d.ts.map +1 -0
  159. package/dist/core/extensions/builtin/tool-search/native-support.js +45 -0
  160. package/dist/core/extensions/builtin/tool-search/native-support.js.map +1 -0
  161. package/dist/core/extensions/index.d.ts +1 -1
  162. package/dist/core/extensions/index.d.ts.map +1 -1
  163. package/dist/core/extensions/index.js.map +1 -1
  164. package/dist/core/extensions/runner.d.ts +5 -0
  165. package/dist/core/extensions/runner.d.ts.map +1 -1
  166. package/dist/core/extensions/runner.js +44 -1
  167. package/dist/core/extensions/runner.js.map +1 -1
  168. package/dist/core/extensions/types.d.ts +26 -3
  169. package/dist/core/extensions/types.d.ts.map +1 -1
  170. package/dist/core/extensions/types.js.map +1 -1
  171. package/dist/core/footer-data-provider.d.ts.map +1 -1
  172. package/dist/core/footer-data-provider.js +18 -1
  173. package/dist/core/footer-data-provider.js.map +1 -1
  174. package/dist/core/http-dispatcher.d.ts.map +1 -1
  175. package/dist/core/http-dispatcher.js +2 -0
  176. package/dist/core/http-dispatcher.js.map +1 -1
  177. package/dist/core/lockfile-policy.d.ts +11 -0
  178. package/dist/core/lockfile-policy.d.ts.map +1 -1
  179. package/dist/core/lockfile-policy.js +19 -0
  180. package/dist/core/lockfile-policy.js.map +1 -1
  181. package/dist/core/manual-continue.d.ts +13 -0
  182. package/dist/core/manual-continue.d.ts.map +1 -0
  183. package/dist/core/manual-continue.js +19 -0
  184. package/dist/core/manual-continue.js.map +1 -0
  185. package/dist/core/messages.d.ts +7 -0
  186. package/dist/core/messages.d.ts.map +1 -1
  187. package/dist/core/messages.js +10 -2
  188. package/dist/core/messages.js.map +1 -1
  189. package/dist/core/model-config.d.ts.map +1 -1
  190. package/dist/core/model-config.js +3 -0
  191. package/dist/core/model-config.js.map +1 -1
  192. package/dist/core/provider-composer.d.ts.map +1 -1
  193. package/dist/core/provider-composer.js +13 -2
  194. package/dist/core/provider-composer.js.map +1 -1
  195. package/dist/core/retry-fallback/chains.d.ts +1 -13
  196. package/dist/core/retry-fallback/chains.d.ts.map +1 -1
  197. package/dist/core/retry-fallback/chains.js +3 -49
  198. package/dist/core/retry-fallback/chains.js.map +1 -1
  199. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  200. package/dist/core/retry-fallback/controller.js +4 -9
  201. package/dist/core/retry-fallback/controller.js.map +1 -1
  202. package/dist/core/retry-fallback/expansion.js +1 -1
  203. package/dist/core/retry-fallback/expansion.js.map +1 -1
  204. package/dist/core/retry-fallback/settings.d.ts +2 -4
  205. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  206. package/dist/core/retry-fallback/settings.js +7 -36
  207. package/dist/core/retry-fallback/settings.js.map +1 -1
  208. package/dist/core/sdk.d.ts.map +1 -1
  209. package/dist/core/sdk.js +6 -1
  210. package/dist/core/sdk.js.map +1 -1
  211. package/dist/core/session-manager.d.ts +12 -1
  212. package/dist/core/session-manager.d.ts.map +1 -1
  213. package/dist/core/session-manager.js +39 -6
  214. package/dist/core/session-manager.js.map +1 -1
  215. package/dist/core/session-sidecar-store.d.ts +62 -0
  216. package/dist/core/session-sidecar-store.d.ts.map +1 -0
  217. package/dist/core/session-sidecar-store.js +149 -0
  218. package/dist/core/session-sidecar-store.js.map +1 -0
  219. package/dist/core/settings-manager.d.ts +5 -1
  220. package/dist/core/settings-manager.d.ts.map +1 -1
  221. package/dist/core/settings-manager.js +45 -15
  222. package/dist/core/settings-manager.js.map +1 -1
  223. package/dist/core/skills.d.ts.map +1 -1
  224. package/dist/core/skills.js +19 -2
  225. package/dist/core/skills.js.map +1 -1
  226. package/dist/core/terminal-settings.d.ts +3 -0
  227. package/dist/core/terminal-settings.d.ts.map +1 -1
  228. package/dist/core/terminal-settings.js.map +1 -1
  229. package/dist/core/tools/bash.d.ts.map +1 -1
  230. package/dist/core/tools/bash.js +1 -1
  231. package/dist/core/tools/bash.js.map +1 -1
  232. package/dist/core/tools/edit.d.ts.map +1 -1
  233. package/dist/core/tools/edit.js +2 -2
  234. package/dist/core/tools/edit.js.map +1 -1
  235. package/dist/core/tools/find.d.ts.map +1 -1
  236. package/dist/core/tools/find.js +2 -2
  237. package/dist/core/tools/find.js.map +1 -1
  238. package/dist/core/tools/grep.d.ts.map +1 -1
  239. package/dist/core/tools/grep.js +2 -2
  240. package/dist/core/tools/grep.js.map +1 -1
  241. package/dist/core/tools/ls.d.ts.map +1 -1
  242. package/dist/core/tools/ls.js +2 -2
  243. package/dist/core/tools/ls.js.map +1 -1
  244. package/dist/core/tools/read.d.ts.map +1 -1
  245. package/dist/core/tools/read.js +1 -1
  246. package/dist/core/tools/read.js.map +1 -1
  247. package/dist/core/tools/write.d.ts.map +1 -1
  248. package/dist/core/tools/write.js +3 -3
  249. package/dist/core/tools/write.js.map +1 -1
  250. package/dist/index.d.ts +1 -1
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js.map +1 -1
  253. package/dist/main.d.ts.map +1 -1
  254. package/dist/main.js +2 -0
  255. package/dist/main.js.map +1 -1
  256. package/dist/modes/app-server/daemon/process.d.ts +33 -3
  257. package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
  258. package/dist/modes/app-server/daemon/process.js +57 -6
  259. package/dist/modes/app-server/daemon/process.js.map +1 -1
  260. package/dist/modes/app-server/daemon.js +9 -1
  261. package/dist/modes/app-server/daemon.js.map +1 -1
  262. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  263. package/dist/modes/interactive/components/scoped-models-selector.js +5 -11
  264. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  265. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  266. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  267. package/dist/modes/interactive/components/settings-selector.js +21 -8
  268. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  269. package/dist/modes/interactive/components/thinking-selector.js +2 -2
  270. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  271. package/dist/modes/interactive/components/trust-selector.js +2 -2
  272. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  273. package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
  274. package/dist/modes/interactive/grok/welcome-card.js +5 -2
  275. package/dist/modes/interactive/grok/welcome-card.js.map +1 -1
  276. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  277. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  278. package/dist/modes/interactive/interactive-mode.js +86 -14
  279. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  280. package/dist/modes/interactive/version-label.d.ts +7 -0
  281. package/dist/modes/interactive/version-label.d.ts.map +1 -0
  282. package/dist/modes/interactive/version-label.js +9 -0
  283. package/dist/modes/interactive/version-label.js.map +1 -0
  284. package/dist/modes/rpc/host-ensure.d.ts +2 -0
  285. package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
  286. package/dist/modes/rpc/host-ensure.js +77 -18
  287. package/dist/modes/rpc/host-ensure.js.map +1 -1
  288. package/dist/utils/version-check.d.ts.map +1 -1
  289. package/dist/utils/version-check.js +3 -4
  290. package/dist/utils/version-check.js.map +1 -1
  291. package/docs/compaction.md +2 -0
  292. package/docs/environment-variables.md +5 -0
  293. package/docs/extensions.md +22 -2
  294. package/docs/keybindings.md +1 -1
  295. package/docs/models.md +3 -0
  296. package/docs/quickstart.md +1 -1
  297. package/docs/rpc.md +1 -1
  298. package/docs/settings.md +13 -5
  299. package/docs/terminal-setup.md +27 -0
  300. package/docs/terminal-tools.md +35 -4
  301. package/docs/usage.md +5 -3
  302. package/node_modules/@anthropic-ai/sdk/CHANGELOG.md +96 -0
  303. package/node_modules/@anthropic-ai/sdk/README.md +1 -1
  304. package/node_modules/@anthropic-ai/sdk/core/credentials.d.mts.map +1 -1
  305. package/node_modules/@anthropic-ai/sdk/core/credentials.d.ts.map +1 -1
  306. package/node_modules/@anthropic-ai/sdk/core/credentials.js +5 -7
  307. package/node_modules/@anthropic-ai/sdk/core/credentials.js.map +1 -1
  308. package/node_modules/@anthropic-ai/sdk/core/credentials.mjs +5 -7
  309. package/node_modules/@anthropic-ai/sdk/core/credentials.mjs.map +1 -1
  310. package/node_modules/@anthropic-ai/sdk/core/middleware.d.mts.map +1 -1
  311. package/node_modules/@anthropic-ai/sdk/core/middleware.d.ts.map +1 -1
  312. package/node_modules/@anthropic-ai/sdk/core/middleware.js +4 -4
  313. package/node_modules/@anthropic-ai/sdk/core/middleware.js.map +1 -1
  314. package/node_modules/@anthropic-ai/sdk/core/middleware.mjs +4 -4
  315. package/node_modules/@anthropic-ai/sdk/core/middleware.mjs.map +1 -1
  316. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.mts +45 -0
  317. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.mts.map +1 -0
  318. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.ts +45 -0
  319. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.d.ts.map +1 -0
  320. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.js +58 -0
  321. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.js.map +1 -0
  322. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.mjs +54 -0
  323. package/node_modules/@anthropic-ai/sdk/helpers/beta/standard-schema.mjs.map +1 -0
  324. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.js +1 -1
  325. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.js.map +1 -1
  326. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs +1 -1
  327. package/node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs.map +1 -1
  328. package/node_modules/@anthropic-ai/sdk/internal/errors.d.mts.map +1 -1
  329. package/node_modules/@anthropic-ai/sdk/internal/errors.d.ts.map +1 -1
  330. package/node_modules/@anthropic-ai/sdk/internal/errors.js +3 -1
  331. package/node_modules/@anthropic-ai/sdk/internal/errors.js.map +1 -1
  332. package/node_modules/@anthropic-ai/sdk/internal/errors.mjs +3 -1
  333. package/node_modules/@anthropic-ai/sdk/internal/errors.mjs.map +1 -1
  334. package/node_modules/@anthropic-ai/sdk/internal/file-store.d.mts.map +1 -1
  335. package/node_modules/@anthropic-ai/sdk/internal/file-store.d.ts.map +1 -1
  336. package/node_modules/@anthropic-ai/sdk/internal/file-store.js +23 -25
  337. package/node_modules/@anthropic-ai/sdk/internal/file-store.js.map +1 -1
  338. package/node_modules/@anthropic-ai/sdk/internal/file-store.mjs +5 -6
  339. package/node_modules/@anthropic-ai/sdk/internal/file-store.mjs.map +1 -1
  340. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.mts +9 -0
  341. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.mts.map +1 -0
  342. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.ts +9 -0
  343. package/node_modules/@anthropic-ai/sdk/internal/node.browser.d.ts.map +1 -0
  344. package/node_modules/@anthropic-ai/sdk/internal/node.browser.js +22 -0
  345. package/node_modules/@anthropic-ai/sdk/internal/node.browser.js.map +1 -0
  346. package/node_modules/@anthropic-ai/sdk/internal/node.browser.mjs +19 -0
  347. package/node_modules/@anthropic-ai/sdk/internal/node.browser.mjs.map +1 -0
  348. package/node_modules/@anthropic-ai/sdk/internal/node.d.mts +14 -0
  349. package/node_modules/@anthropic-ai/sdk/internal/node.d.mts.map +1 -0
  350. package/node_modules/@anthropic-ai/sdk/internal/node.d.ts +14 -0
  351. package/node_modules/@anthropic-ai/sdk/internal/node.d.ts.map +1 -0
  352. package/node_modules/@anthropic-ai/sdk/internal/node.js +24 -0
  353. package/node_modules/@anthropic-ai/sdk/internal/node.js.map +1 -0
  354. package/node_modules/@anthropic-ai/sdk/internal/node.mjs +14 -0
  355. package/node_modules/@anthropic-ai/sdk/internal/node.mjs.map +1 -0
  356. package/node_modules/@anthropic-ai/sdk/internal/parse.js +1 -1
  357. package/node_modules/@anthropic-ai/sdk/internal/parse.js.map +1 -1
  358. package/node_modules/@anthropic-ai/sdk/internal/parse.mjs +1 -1
  359. package/node_modules/@anthropic-ai/sdk/internal/parse.mjs.map +1 -1
  360. package/node_modules/@anthropic-ai/sdk/internal/uploads.js +10 -6
  361. package/node_modules/@anthropic-ai/sdk/internal/uploads.js.map +1 -1
  362. package/node_modules/@anthropic-ai/sdk/internal/uploads.mjs +10 -6
  363. package/node_modules/@anthropic-ai/sdk/internal/uploads.mjs.map +1 -1
  364. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.mts +6 -0
  365. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.mts.map +1 -1
  366. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.ts +6 -0
  367. package/node_modules/@anthropic-ai/sdk/internal/utils/values.d.ts.map +1 -1
  368. package/node_modules/@anthropic-ai/sdk/internal/utils/values.js +7 -0
  369. package/node_modules/@anthropic-ai/sdk/internal/utils/values.js.map +1 -1
  370. package/node_modules/@anthropic-ai/sdk/internal/utils/values.mjs +6 -0
  371. package/node_modules/@anthropic-ai/sdk/internal/utils/values.mjs.map +1 -1
  372. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.d.mts.map +1 -1
  373. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.d.ts.map +1 -1
  374. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js +6 -4
  375. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js.map +1 -1
  376. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs +4 -2
  377. package/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs.map +1 -1
  378. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.mts.map +1 -1
  379. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.ts.map +1 -1
  380. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.js +3 -4
  381. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.js.map +1 -1
  382. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs +1 -2
  383. package/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs.map +1 -1
  384. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.js +1 -1
  385. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.js.map +1 -1
  386. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs +1 -1
  387. package/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs.map +1 -1
  388. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.js +1 -1
  389. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.js.map +1 -1
  390. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs +1 -1
  391. package/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs.map +1 -1
  392. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.d.mts.map +1 -1
  393. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.d.ts.map +1 -1
  394. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.js +2 -3
  395. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.js.map +1 -1
  396. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs +2 -3
  397. package/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs.map +1 -1
  398. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.js +1 -1
  399. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.js.map +1 -1
  400. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs +1 -1
  401. package/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs.map +1 -1
  402. package/node_modules/@anthropic-ai/sdk/lib/middleware.d.mts.map +1 -1
  403. package/node_modules/@anthropic-ai/sdk/lib/middleware.d.ts.map +1 -1
  404. package/node_modules/@anthropic-ai/sdk/lib/middleware.js +30 -7
  405. package/node_modules/@anthropic-ai/sdk/lib/middleware.js.map +1 -1
  406. package/node_modules/@anthropic-ai/sdk/lib/middleware.mjs +30 -7
  407. package/node_modules/@anthropic-ai/sdk/lib/middleware.mjs.map +1 -1
  408. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.mts +3 -2
  409. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.mts.map +1 -1
  410. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.ts +3 -2
  411. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.d.ts.map +1 -1
  412. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.js +3 -46
  413. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.js.map +1 -1
  414. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.mjs +3 -46
  415. package/node_modules/@anthropic-ai/sdk/lib/sessions/accumulate.mjs.map +1 -1
  416. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.mts +131 -0
  417. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.mts.map +1 -0
  418. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.ts +131 -0
  419. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.d.ts.map +1 -0
  420. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.js +45 -0
  421. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.js.map +1 -0
  422. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.mjs +41 -0
  423. package/node_modules/@anthropic-ai/sdk/lib/standard-schema.mjs.map +1 -0
  424. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.d.mts.map +1 -1
  425. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.d.ts.map +1 -1
  426. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.js +35 -6
  427. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.js.map +1 -1
  428. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs +35 -6
  429. package/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs.map +1 -1
  430. package/node_modules/@anthropic-ai/sdk/package.json +4 -11
  431. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.mts +1 -1
  432. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.mts.map +1 -1
  433. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.ts +1 -1
  434. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.d.ts.map +1 -1
  435. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.js.map +1 -1
  436. package/node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs.map +1 -1
  437. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.mts +13 -9
  438. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.mts.map +1 -1
  439. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts +13 -9
  440. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts.map +1 -1
  441. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.js +4 -0
  442. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.js.map +1 -1
  443. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs +4 -0
  444. package/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs.map +1 -1
  445. package/node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.d.mts +6 -6
  446. package/node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.d.ts +6 -6
  447. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.mts +3 -2
  448. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.mts.map +1 -1
  449. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.ts +3 -2
  450. package/node_modules/@anthropic-ai/sdk/resources/beta/deployments.d.ts.map +1 -1
  451. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.mts +28 -1
  452. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.mts.map +1 -1
  453. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.ts +28 -1
  454. package/node_modules/@anthropic-ai/sdk/resources/beta/dreams.d.ts.map +1 -1
  455. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.mts +8 -1
  456. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.mts.map +1 -1
  457. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.ts +8 -1
  458. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.d.ts.map +1 -1
  459. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.js.map +1 -1
  460. package/node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs.map +1 -1
  461. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.mts +25 -5
  462. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.mts.map +1 -1
  463. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.ts +25 -5
  464. package/node_modules/@anthropic-ai/sdk/resources/beta/files.d.ts.map +1 -1
  465. package/node_modules/@anthropic-ai/sdk/resources/beta/files.js +6 -6
  466. package/node_modules/@anthropic-ai/sdk/resources/beta/files.js.map +1 -1
  467. package/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs +7 -7
  468. package/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs.map +1 -1
  469. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.mts +5 -4
  470. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.mts.map +1 -1
  471. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts +5 -4
  472. package/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts.map +1 -1
  473. package/node_modules/@anthropic-ai/sdk/resources/beta/index.js +11 -9
  474. package/node_modules/@anthropic-ai/sdk/resources/beta/index.js.map +1 -1
  475. package/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs +1 -0
  476. package/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs.map +1 -1
  477. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.mts +12 -9
  478. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.mts.map +1 -1
  479. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.ts +12 -9
  480. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.d.ts.map +1 -1
  481. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.mts +8 -5
  482. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
  483. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.ts +8 -5
  484. package/node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
  485. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.mts +1 -1
  486. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.mts.map +1 -1
  487. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.ts +1 -1
  488. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.ts.map +1 -1
  489. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.js.map +1 -1
  490. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.mjs.map +1 -1
  491. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.mts +198 -29
  492. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.mts.map +1 -1
  493. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts +198 -29
  494. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts.map +1 -1
  495. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.js.map +1 -1
  496. package/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs.map +1 -1
  497. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.mts +177 -0
  498. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.mts.map +1 -0
  499. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.ts +177 -0
  500. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.d.ts.map +1 -0
  501. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.js +56 -0
  502. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.js.map +1 -0
  503. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs +52 -0
  504. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs.map +1 -0
  505. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.mts +74 -0
  506. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.mts.map +1 -0
  507. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.ts +74 -0
  508. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.d.ts.map +1 -0
  509. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.js +52 -0
  510. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.js.map +1 -0
  511. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs +48 -0
  512. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs.map +1 -0
  513. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.mts +272 -0
  514. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.mts.map +1 -0
  515. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.ts +272 -0
  516. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.d.ts.map +1 -0
  517. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.js +119 -0
  518. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.js.map +1 -0
  519. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs +115 -0
  520. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs.map +1 -0
  521. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.mts +14 -0
  522. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.mts.map +1 -0
  523. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.ts +14 -0
  524. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.d.ts.map +1 -0
  525. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.js +21 -0
  526. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.js.map +1 -0
  527. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs +16 -0
  528. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs.map +1 -0
  529. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.mts +4 -0
  530. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.mts.map +1 -0
  531. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.ts +4 -0
  532. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.d.ts.map +1 -0
  533. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.js +11 -0
  534. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.js.map +1 -0
  535. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.mjs +5 -0
  536. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/index.mjs.map +1 -0
  537. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.mts +353 -0
  538. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.mts.map +1 -0
  539. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.ts +353 -0
  540. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.d.ts.map +1 -0
  541. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.js +169 -0
  542. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.js.map +1 -0
  543. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs +165 -0
  544. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs.map +1 -0
  545. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.mts +3 -0
  546. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.mts.map +1 -0
  547. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.ts +3 -0
  548. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.d.ts.map +1 -0
  549. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.js +9 -0
  550. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.js.map +1 -0
  551. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.mjs +4 -0
  552. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/index.mjs.map +1 -0
  553. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.mts +468 -0
  554. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.mts.map +1 -0
  555. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.ts +468 -0
  556. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.d.ts.map +1 -0
  557. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.js +198 -0
  558. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.js.map +1 -0
  559. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs +193 -0
  560. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs.map +1 -0
  561. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.mts +124 -0
  562. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.mts.map +1 -0
  563. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.ts +124 -0
  564. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.d.ts.map +1 -0
  565. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.js +114 -0
  566. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.js.map +1 -0
  567. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs +110 -0
  568. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs.map +1 -0
  569. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.mts +2 -0
  570. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.mts.map +1 -0
  571. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.ts +2 -0
  572. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.d.ts.map +1 -0
  573. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.js +6 -0
  574. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.js.map +1 -0
  575. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.mjs +3 -0
  576. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules.mjs.map +1 -0
  577. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.mts +2 -0
  578. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.mts.map +1 -0
  579. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.ts +2 -0
  580. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.d.ts.map +1 -0
  581. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.js +6 -0
  582. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.js.map +1 -0
  583. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.mjs +3 -0
  584. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/federation.mjs.map +1 -0
  585. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.mts +11 -0
  586. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.mts.map +1 -0
  587. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.ts +11 -0
  588. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.d.ts.map +1 -0
  589. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.js +25 -0
  590. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.js.map +1 -0
  591. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.mjs +12 -0
  592. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/index.mjs.map +1 -0
  593. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.mts +162 -0
  594. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.mts.map +1 -0
  595. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.ts +162 -0
  596. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.d.ts.map +1 -0
  597. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.js +76 -0
  598. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.js.map +1 -0
  599. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs +72 -0
  600. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs.map +1 -0
  601. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.mts +73 -0
  602. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.mts.map +1 -0
  603. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.ts +73 -0
  604. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.d.ts.map +1 -0
  605. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.js +62 -0
  606. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.js.map +1 -0
  607. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs +57 -0
  608. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs.map +1 -0
  609. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.mts +77 -0
  610. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.mts.map +1 -0
  611. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.ts +77 -0
  612. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.d.ts.map +1 -0
  613. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.js +31 -0
  614. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.js.map +1 -0
  615. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs +27 -0
  616. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs.map +1 -0
  617. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.mts +3 -0
  618. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.mts.map +1 -0
  619. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.ts +3 -0
  620. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.d.ts.map +1 -0
  621. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.js +9 -0
  622. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.js.map +1 -0
  623. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.mjs +4 -0
  624. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/index.mjs.map +1 -0
  625. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.mts +258 -0
  626. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.mts.map +1 -0
  627. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.ts +258 -0
  628. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.d.ts.map +1 -0
  629. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.js +174 -0
  630. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.js.map +1 -0
  631. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs +169 -0
  632. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -0
  633. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.mts +141 -0
  634. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.mts.map +1 -0
  635. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.ts +141 -0
  636. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.d.ts.map +1 -0
  637. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.js +125 -0
  638. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.js.map +1 -0
  639. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs +121 -0
  640. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs.map +1 -0
  641. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.mts +2 -0
  642. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.mts.map +1 -0
  643. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.ts +2 -0
  644. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.d.ts.map +1 -0
  645. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.js +6 -0
  646. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.js.map +1 -0
  647. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.mjs +3 -0
  648. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts.mjs.map +1 -0
  649. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.mts +124 -0
  650. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.mts.map +1 -0
  651. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.ts +124 -0
  652. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.d.ts.map +1 -0
  653. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.js +67 -0
  654. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.js.map +1 -0
  655. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs +63 -0
  656. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs.map +1 -0
  657. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.mts +5 -0
  658. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.mts.map +1 -0
  659. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.ts +5 -0
  660. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.d.ts.map +1 -0
  661. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.js +13 -0
  662. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.js.map +1 -0
  663. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.mjs +6 -0
  664. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/index.mjs.map +1 -0
  665. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.mts +135 -0
  666. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.mts.map +1 -0
  667. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.ts +135 -0
  668. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.d.ts.map +1 -0
  669. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.js +102 -0
  670. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.js.map +1 -0
  671. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs +98 -0
  672. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs.map +1 -0
  673. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.mts +83 -0
  674. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -0
  675. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.ts +83 -0
  676. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -0
  677. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.js +34 -0
  678. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.js.map +1 -0
  679. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs +30 -0
  680. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -0
  681. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.mts +210 -0
  682. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.mts.map +1 -0
  683. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.ts +210 -0
  684. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.d.ts.map +1 -0
  685. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.js +189 -0
  686. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.js.map +1 -0
  687. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs +185 -0
  688. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs.map +1 -0
  689. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.mts +303 -0
  690. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -0
  691. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.ts +303 -0
  692. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -0
  693. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.js +112 -0
  694. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.js.map +1 -0
  695. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs +107 -0
  696. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs.map +1 -0
  697. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.mts +2 -0
  698. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.mts.map +1 -0
  699. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.ts +2 -0
  700. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.d.ts.map +1 -0
  701. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.js +6 -0
  702. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.js.map +1 -0
  703. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.mjs +3 -0
  704. package/node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces.mjs.map +1 -0
  705. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.mts +2 -0
  706. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.mts.map +1 -0
  707. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.ts +2 -0
  708. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.d.ts.map +1 -0
  709. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.js +6 -0
  710. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.js.map +1 -0
  711. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.mjs +3 -0
  712. package/node_modules/@anthropic-ai/sdk/resources/beta/organization.mjs.map +1 -0
  713. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.d.mts +1 -1
  714. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.d.ts +1 -1
  715. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.d.mts +10 -10
  716. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.d.ts +10 -10
  717. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.mts +2 -1
  718. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.mts.map +1 -1
  719. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.ts +2 -1
  720. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.d.ts.map +1 -1
  721. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.js.map +1 -1
  722. package/node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs.map +1 -1
  723. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.mts +2 -2
  724. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.mts.map +1 -1
  725. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.ts +2 -2
  726. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.ts.map +1 -1
  727. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.js.map +1 -1
  728. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.mjs.map +1 -1
  729. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.mts +48 -120
  730. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.mts.map +1 -1
  731. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.ts +48 -120
  732. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.ts.map +1 -1
  733. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.js +12 -8
  734. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.js.map +1 -1
  735. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs +12 -8
  736. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs.map +1 -1
  737. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.mts +35 -138
  738. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.mts.map +1 -1
  739. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.ts +35 -138
  740. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.ts.map +1 -1
  741. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.js +18 -18
  742. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.js.map +1 -1
  743. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs +18 -18
  744. package/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs.map +1 -1
  745. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.mts +21 -25
  746. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.mts.map +1 -1
  747. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.ts +21 -25
  748. package/node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.d.ts.map +1 -1
  749. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.mts +16 -17
  750. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.mts.map +1 -1
  751. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.ts +16 -17
  752. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.d.ts.map +1 -1
  753. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.js +21 -8
  754. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.js.map +1 -1
  755. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs +21 -8
  756. package/node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs.map +1 -1
  757. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.mts +1 -3
  758. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.mts.map +1 -1
  759. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts +1 -3
  760. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts.map +1 -1
  761. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.js.map +1 -1
  762. package/node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs.map +1 -1
  763. package/node_modules/@anthropic-ai/sdk/src/core/credentials.ts +5 -7
  764. package/node_modules/@anthropic-ai/sdk/src/core/middleware.ts +4 -3
  765. package/node_modules/@anthropic-ai/sdk/src/helpers/beta/standard-schema.ts +99 -0
  766. package/node_modules/@anthropic-ai/sdk/src/internal/detect-platform.ts +1 -1
  767. package/node_modules/@anthropic-ai/sdk/src/internal/errors.ts +3 -1
  768. package/node_modules/@anthropic-ai/sdk/src/internal/file-store.ts +11 -10
  769. package/node_modules/@anthropic-ai/sdk/src/internal/node.browser.ts +22 -0
  770. package/node_modules/@anthropic-ai/sdk/src/internal/node.ts +14 -0
  771. package/node_modules/@anthropic-ai/sdk/src/internal/parse.ts +1 -1
  772. package/node_modules/@anthropic-ai/sdk/src/internal/uploads.ts +10 -7
  773. package/node_modules/@anthropic-ai/sdk/src/internal/utils/values.ts +7 -0
  774. package/node_modules/@anthropic-ai/sdk/src/lib/BetaMessageStream.ts +5 -3
  775. package/node_modules/@anthropic-ai/sdk/src/lib/MessageStream.ts +1 -3
  776. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/credential-chain.ts +1 -1
  777. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/identity-token.ts +1 -1
  778. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/types.ts +2 -3
  779. package/node_modules/@anthropic-ai/sdk/src/lib/credentials/user-oauth.ts +1 -1
  780. package/node_modules/@anthropic-ai/sdk/src/lib/middleware.ts +33 -9
  781. package/node_modules/@anthropic-ai/sdk/src/lib/sessions/accumulate.ts +7 -49
  782. package/node_modules/@anthropic-ai/sdk/src/lib/standard-schema.ts +209 -0
  783. package/node_modules/@anthropic-ai/sdk/src/lib/tools/BetaToolRunner.ts +38 -6
  784. package/node_modules/@anthropic-ai/sdk/src/resources/beta/agents/agents.ts +1 -0
  785. package/node_modules/@anthropic-ai/sdk/src/resources/beta/beta.ts +45 -15
  786. package/node_modules/@anthropic-ai/sdk/src/resources/beta/deployment-runs.ts +6 -6
  787. package/node_modules/@anthropic-ai/sdk/src/resources/beta/deployments.ts +3 -2
  788. package/node_modules/@anthropic-ai/sdk/src/resources/beta/dreams.ts +42 -0
  789. package/node_modules/@anthropic-ai/sdk/src/resources/beta/environments/environments.ts +8 -1
  790. package/node_modules/@anthropic-ai/sdk/src/resources/beta/files.ts +34 -11
  791. package/node_modules/@anthropic-ai/sdk/src/resources/beta/index.ts +13 -7
  792. package/node_modules/@anthropic-ai/sdk/src/resources/beta/memory-stores/memories.ts +12 -9
  793. package/node_modules/@anthropic-ai/sdk/src/resources/beta/memory-stores/memory-versions.ts +8 -5
  794. package/node_modules/@anthropic-ai/sdk/src/resources/beta/messages/index.ts +5 -1
  795. package/node_modules/@anthropic-ai/sdk/src/resources/beta/messages/messages.ts +221 -38
  796. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/api-keys.ts +231 -0
  797. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/compliance-settings.ts +96 -0
  798. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/external-keys.ts +365 -0
  799. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/federation.ts +71 -0
  800. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/index.ts +31 -0
  801. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/issuers.ts +486 -0
  802. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/index.ts +23 -0
  803. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/rules.ts +624 -0
  804. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules/workspaces.ts +196 -0
  805. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation/rules.ts +3 -0
  806. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/federation.ts +3 -0
  807. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/index.ts +92 -0
  808. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/invites.ts +207 -0
  809. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/organization.ts +269 -0
  810. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/rate-limits.ts +104 -0
  811. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/index.ts +21 -0
  812. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/service-accounts.ts +389 -0
  813. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts/workspaces.ts +217 -0
  814. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/service-accounts.ts +3 -0
  815. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/users.ts +163 -0
  816. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/index.ts +43 -0
  817. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/members.ts +209 -0
  818. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/rate-limits.ts +113 -0
  819. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/service-accounts.ts +325 -0
  820. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces/workspaces.ts +450 -0
  821. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization/workspaces.ts +3 -0
  822. package/node_modules/@anthropic-ai/sdk/src/resources/beta/organization.ts +3 -0
  823. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/events.ts +1 -1
  824. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/sessions.ts +10 -10
  825. package/node_modules/@anthropic-ai/sdk/src/resources/beta/sessions/threads/threads.ts +2 -1
  826. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/index.ts +7 -10
  827. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/skills.ts +60 -150
  828. package/node_modules/@anthropic-ai/sdk/src/resources/beta/skills/versions.ts +43 -166
  829. package/node_modules/@anthropic-ai/sdk/src/resources/beta/user-profiles.ts +24 -27
  830. package/node_modules/@anthropic-ai/sdk/src/resources/beta/webhooks.ts +25 -29
  831. package/node_modules/@anthropic-ai/sdk/src/resources/messages/messages.ts +2 -8
  832. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/fs-util.ts +6 -5
  833. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/memories.ts +5 -3
  834. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/node.browser.ts +1 -5
  835. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/node.ts +122 -17
  836. package/node_modules/@anthropic-ai/sdk/src/tools/agent-toolset/skills.ts +10 -43
  837. package/node_modules/@anthropic-ai/sdk/src/version.ts +1 -1
  838. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.d.mts.map +1 -1
  839. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.d.ts.map +1 -1
  840. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.js +13 -15
  841. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.js.map +1 -1
  842. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.mjs +3 -4
  843. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/fs-util.mjs.map +1 -1
  844. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.d.mts.map +1 -1
  845. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.d.ts.map +1 -1
  846. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.js +6 -4
  847. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.js.map +1 -1
  848. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.mjs +5 -3
  849. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/memories.mjs.map +1 -1
  850. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.mts +1 -2
  851. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.mts.map +1 -1
  852. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.ts +1 -2
  853. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.d.ts.map +1 -1
  854. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.js +0 -4
  855. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.js.map +1 -1
  856. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs +0 -3
  857. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs.map +1 -1
  858. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.mts +11 -9
  859. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.mts.map +1 -1
  860. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.ts +11 -9
  861. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.d.ts.map +1 -1
  862. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.js +96 -8
  863. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.js.map +1 -1
  864. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.mjs +96 -7
  865. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.mjs.map +1 -1
  866. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.mts +0 -8
  867. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.mts.map +1 -1
  868. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.ts +0 -8
  869. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.d.ts.map +1 -1
  870. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.js +20 -46
  871. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.js.map +1 -1
  872. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.mjs +9 -33
  873. package/node_modules/@anthropic-ai/sdk/tools/agent-toolset/skills.mjs.map +1 -1
  874. package/node_modules/@anthropic-ai/sdk/version.d.mts +1 -1
  875. package/node_modules/@anthropic-ai/sdk/version.d.ts +1 -1
  876. package/node_modules/@anthropic-ai/sdk/version.js +1 -1
  877. package/node_modules/@anthropic-ai/sdk/version.mjs +1 -1
  878. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +71 -0
  879. package/node_modules/@code-yeongyu/senpi-codemode/README.md +4 -2
  880. package/node_modules/@code-yeongyu/senpi-codemode/package.json +5 -5
  881. package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +29 -0
  882. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +8 -4
  883. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +3 -1
  884. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/display-image.js +162 -0
  885. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/prelude.ts +2 -2
  886. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +29 -60
  887. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +66 -1
  888. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +35 -96
  889. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +7 -0
  890. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +6 -0
  891. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +14 -2
  892. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +12 -7
  893. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  894. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +58 -64
  895. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  896. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  897. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +3 -1
  898. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  899. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  900. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +17 -0
  901. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  903. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +1 -0
  904. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  905. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  906. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +17 -6
  907. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  908. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts +1 -1
  909. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  910. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js +6 -1
  911. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  912. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +1 -1
  913. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js +6 -0
  914. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +1 -1
  915. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.d.ts +2 -1
  916. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.d.ts.map +1 -1
  917. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js +5 -1
  918. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
  919. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  920. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js +1 -0
  921. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js.map +1 -1
  922. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts +7 -1
  923. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.js.map +1 -1
  925. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +1 -1
  926. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -1
  927. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +2 -0
  928. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  929. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js +40 -10
  930. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  931. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +8 -2
  932. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  933. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  934. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  935. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +1 -1
  936. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  937. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +130 -15
  938. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  939. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +4 -4
  940. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  941. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +3 -1
  942. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  943. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +1 -1
  944. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  945. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +3 -1
  946. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  947. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  948. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +30 -10
  949. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  950. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts +3 -3
  951. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
  952. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +15 -0
  953. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +1 -1
  955. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +8 -5
  957. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts +2 -0
  959. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  960. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +6 -0
  961. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  962. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js +1 -1
  963. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
  964. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
  965. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
  967. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  969. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  970. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  971. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  972. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +3 -1
  973. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-ai/dist/models.js +27 -3
  975. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts +2 -0
  977. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts.map +1 -1
  978. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js.map +1 -1
  979. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  980. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  981. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  982. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  983. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  984. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  985. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  986. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  987. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  988. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  989. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  990. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  991. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  992. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  993. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +2 -0
  994. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  995. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts +1 -1
  996. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.d.ts.map +1 -1
  997. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +8 -1
  998. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js.map +1 -1
  999. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +22 -2
  1000. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  1001. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  1002. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.d.ts +23 -0
  1003. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.d.ts.map +1 -0
  1004. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.js +58 -0
  1005. package/node_modules/@earendil-works/pi-ai/dist/utils/drop-failed-assistant-turns.js.map +1 -0
  1006. package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.d.ts.map +1 -1
  1007. package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.js +2 -0
  1008. package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.js.map +1 -1
  1009. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -1
  1010. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js +53 -12
  1011. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -1
  1012. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +4 -2
  1013. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  1014. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +3 -0
  1015. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  1017. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
  1018. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  1019. package/node_modules/@earendil-works/pi-ai/package.json +3 -3
  1020. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  1021. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  1022. package/node_modules/@earendil-works/pi-tui/README.md +1 -1
  1023. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -0
  1024. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  1025. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +36 -3
  1026. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  1027. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  1028. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  1029. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  1030. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1031. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +2 -0
  1032. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  1033. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +106 -6
  1034. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1035. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +6 -0
  1036. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1037. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +17 -4
  1038. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1039. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +11 -0
  1040. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1041. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +57 -15
  1042. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1043. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1044. package/node_modules/@earendil-works/pi-tui/dist/tui.js +22 -7
  1045. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1046. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  1047. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `/loop` extension factory and lifecycle wiring.\n *\n * This module owns the only impure parts of the feature: real timers, the session store,\n * the extension event wiring, and message dispatch. Every decision it makes is delegated\n * to the pure modules beside it (`scheduler.ts`, `tick-prompt.ts`, `cron-planner.ts`,\n * `loopfile.ts`, `status.ts`), so the runtime here is a thin, testable adapter.\n *\n * Load-bearing rules implemented here:\n * - A tick NEVER steers. Idle dispatch goes through `sendUserMessage(..., {\n * expandPromptTemplates: true })` so a slash payload reaches the real command path;\n * a busy session receives the tick as a follow-up instead.\n * - Shutdown SUSPENDS: timers are cancelled, the ticker disposed, and the snapshot is\n * persisted without a terminal reason (every senpi shutdown reason is resumable).\n * - Keepalive is applied only to an attributed dynamic iteration, never after an ordinary\n * user turn, and never after a user abort (an abort PAUSES the loop instead).\n * - A store failure is not swallowed: the affected loops end with `error` and the user is\n * told, because a schedule that cannot be persisted must not keep running.\n */\n\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../../../../config.ts\";\nimport type { SessionEntry } from \"../../../session-manager.ts\";\nimport { noticeEntryRenderer } from \"../../notice/index.ts\";\nimport type { EntryRenderer, ExtensionAPI, ExtensionContext, ExtensionFactory } from \"../../types.ts\";\nimport { registerLoopCommand } from \"./command-registration.ts\";\nimport { describeCron, normalizeInterval } from \"./cron-planner.ts\";\nimport { type LoopFileResult, nodeFs, resolveLoopFile as resolveLoopFileDefault } from \"./loopfile.ts\";\nimport {\n\tcreateLoopScheduler,\n\ttype LoopClock,\n\ttype LoopIdFactory,\n\ttype LoopScheduler,\n\ttype LoopTick,\n\ttype LoopTimerPort,\n} from \"./scheduler.ts\";\nimport { formatLoopStatus, formatNoopFold, LoopStatusTicker } from \"./status.ts\";\nimport { readLoopState, writeLoopState } from \"./store.ts\";\nimport { buildTickMessage, type LoopFileSnapshot, type LoopMode, type TickDelivery } from \"./tick-prompt.ts\";\nimport { registerLoopTools, type ScheduleWakeupTarget } from \"./tools.ts\";\nimport type {\n\tCronEntry,\n\tDeliveryId,\n\tEpochMs,\n\tLoopEndReason,\n\tLoopId,\n\tLoopPayload,\n\tLoopSentinel,\n\tLoopState,\n\tLoopStoreRef,\n\tRequestedInterval,\n\tSentinelDeliveryState,\n} from \"./types.ts\";\n\n/** Custom entry type carrying one dispatched tick, used for attribution and folding. */\nexport const LOOP_TICK_ENTRY_TYPE = \"loop-tick\";\n\nexport interface LoopTickEntryData {\n\treadonly loopId: LoopId;\n\treadonly deliveryId: DeliveryId;\n\treadonly scheduledForAt: EpochMs;\n\treadonly mode: LoopMode;\n\treadonly delivery: TickDelivery;\n\treadonly sentinel?: LoopSentinel;\n\t/** Consecutive quiet dynamic iterations at the moment this tick was dispatched. */\n\treadonly noopStreak: number;\n\t/** True when this tick continues a quiet streak and should render folded. */\n\treadonly folded: boolean;\n}\n\nexport interface LoopCreateOk {\n\treadonly ok: true;\n\treadonly loopId: LoopId;\n\t/** Present when a new dynamic loop replaced a previous one. */\n\treadonly supersededLoopId?: LoopId;\n\t/** Human-readable rounding notice when the requested cadence was normalized. */\n\treadonly roundingNotice?: string;\n\treadonly cronExpression?: string;\n\treadonly effectiveCadence?: string;\n\treadonly expiresAt?: EpochMs;\n}\n\nexport interface LoopCreateRejected {\n\treadonly ok: false;\n\treadonly message: string;\n}\n\nexport type LoopCreateOutcome = LoopCreateOk | LoopCreateRejected;\n\nexport interface LoopStoreFailure {\n\treadonly endReason: LoopEndReason;\n\treadonly message: string;\n\treadonly loopIds: readonly LoopId[];\n}\n\nexport interface StartFixedRequest {\n\treadonly originalArgs: string;\n\treadonly prompt: string;\n\treadonly requestedInterval: RequestedInterval;\n}\n\nexport interface StartDynamicRequest {\n\treadonly originalArgs: string;\n\treadonly prompt: string;\n}\n\nexport interface StartBareRequest {\n\treadonly originalArgs: string;\n\treadonly interval?: RequestedInterval;\n}\n\nexport interface ControllerScheduleWakeupRequest {\n\treadonly loopId: LoopId;\n\treadonly requestedDelaySeconds: number;\n\treadonly delaySeconds: number;\n\treadonly reason: string;\n\treadonly prompt: string;\n\treadonly noop: boolean;\n}\n\n/**\n * Runtime surface of a live loop extension. The `/loop` command module drives the\n * extension exclusively through this interface, so command parsing never reaches into\n * scheduler or store internals.\n */\nexport interface LoopController {\n\tstartFixed(request: StartFixedRequest): Promise<LoopCreateOutcome>;\n\tstartDynamic(request: StartDynamicRequest): Promise<LoopCreateOutcome>;\n\tstartBare(request: StartBareRequest): Promise<LoopCreateOutcome>;\n\t/** Runs the due decision for a loop at the current clock reading and dispatches it. */\n\tfireDue(loopId: LoopId): Promise<void>;\n\tscheduleWakeup(request: ControllerScheduleWakeupRequest): Promise<void>;\n\tstop(target: LoopId | \"all\", detail: string): Promise<readonly LoopId[]>;\n\tpause(target: LoopId | \"all\"): Promise<readonly LoopId[]>;\n\tresume(target: LoopId | \"all\"): Promise<readonly LoopId[]>;\n\tgetState(): LoopState;\n\tstatusLine(): string | undefined;\n\t/** Set when a store read/write failed and the affected loops were ended with `error`. */\n\tlastStoreFailure(): LoopStoreFailure | undefined;\n\t/** True when this loop was retired because its state could not be read or written. */\n\tisEndedWithError(loopId: LoopId): boolean;\n}\n\nexport interface LoopExtensionDeps {\n\treadonly clock?: LoopClock;\n\t/** Factory so each session gets its own timer port; defaults to real timeouts. */\n\treadonly timers?: () => LoopTimerPort;\n\treadonly ids?: LoopIdFactory;\n\treadonly storeRef?: (ctx: ExtensionContext) => LoopStoreRef;\n\treadonly resolveLoopFile?: (options: { cwd: string; homeDir: string }) => Promise<LoopFileResult>;\n\treadonly readState?: (ref: LoopStoreRef) => Promise<LoopState | null>;\n\treadonly writeState?: (ref: LoopStoreRef, state: LoopState) => Promise<void>;\n\t/**\n\t * Published at factory time so a command module (or a test) can drive this instance.\n\t * The controller is bound to the extension's own session state, so it stays valid across\n\t * session starts within one extension generation.\n\t */\n\treadonly onControllerReady?: (controller: LoopController) => void;\n}\n\nexport const renderLoopTickEntry: EntryRenderer<LoopTickEntryData> = noticeEntryRenderer((entry) => {\n\tconst data = entry.data;\n\tif (data === undefined) return undefined;\n\tconst folded = data.folded ? formatNoopFold(data.noopStreak) : \"\";\n\tif (folded.length > 0) {\n\t\treturn {\n\t\t\ttitle: folded,\n\t\t\twhy: \"Consecutive loop ticks reported no actionable change.\",\n\t\t};\n\t}\n\treturn {\n\t\ttitle: `↻ loop tick (${data.mode}) · ${data.delivery}`,\n\t\twhy: \"A /loop schedule dispatched this tick.\",\n\t};\n});\n\n/**\n * Real timer port: exactly one live timeout per key, replaced on re-arm.\n *\n * Follows the generation-counter discipline of `cache-keepalive/index.ts`: cancelling or\n * re-arming a key bumps its generation, so a callback whose generation is stale returns\n * without firing even if it was already scheduled on the event loop.\n */\nexport function createNodeTimerPort(): LoopTimerPort {\n\tconst handles = new Map<string, ReturnType<typeof setTimeout>>();\n\tconst generations = new Map<string, number>();\n\n\tfunction cancel(key: string): void {\n\t\tconst handle = handles.get(key);\n\t\tif (handle !== undefined) clearTimeout(handle);\n\t\thandles.delete(key);\n\t\tgenerations.set(key, (generations.get(key) ?? 0) + 1);\n\t}\n\n\treturn {\n\t\tarm(key, dueAt, callback) {\n\t\t\tcancel(key);\n\t\t\tconst generation = generations.get(key) ?? 0;\n\t\t\tconst delayMs = Math.max(0, dueAt - Date.now());\n\t\t\tconst handle = setTimeout(() => {\n\t\t\t\thandles.delete(key);\n\t\t\t\tif (generations.get(key) !== generation) return;\n\t\t\t\tcallback();\n\t\t\t}, delayMs);\n\t\t\thandle.unref?.();\n\t\t\thandles.set(key, handle);\n\t\t},\n\t\tcancel,\n\t\tcancelAll() {\n\t\t\tfor (const key of [...handles.keys()]) cancel(key);\n\t\t},\n\t};\n}\n\nfunction defaultIds(): LoopIdFactory {\n\tlet sequence = 0;\n\tconst mint = (prefix: string): string => {\n\t\tsequence += 1;\n\t\treturn `${prefix}-${Date.now().toString(36)}-${sequence.toString(36)}`;\n\t};\n\treturn {\n\t\tloopId: () => mint(\"loop\"),\n\t\twakeupId: () => mint(\"wakeup\"),\n\t\tdeliveryId: () => mint(\"delivery\"),\n\t};\n}\n\nfunction defaultStoreRef(ctx: ExtensionContext): LoopStoreRef {\n\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\tconst baseDir =\n\t\tsessionFile === undefined\n\t\t\t? join(getAgentDir(), \"extensions\", \"loop\", \"no-session\")\n\t\t\t: join(ctx.sessionManager.getSessionDir(), \"extensions\", \"loop\");\n\treturn { baseDir, sessionId: ctx.sessionManager.getSessionId() };\n}\n\nfunction emptyDeliveryState(): SentinelDeliveryState {\n\treturn { autonomousPreambleDelivered: false, lastLoopFileDelivered: null, forceFullDelivery: false };\n}\n\nfunction loopFileSnapshot(result: LoopFileResult): LoopFileSnapshot {\n\tif (!result.found) return { present: false };\n\treturn {\n\t\tpresent: true,\n\t\tpath: result.path,\n\t\tcontent: result.content,\n\t\tmtimeMs: result.fingerprint.mtimeMs,\n\t\tsize: result.fingerprint.size,\n\t\tcontentHash: result.fingerprint.contentHash,\n\t};\n}\n\nfunction sentinelFor(mode: LoopMode, loopFilePresent: boolean): LoopSentinel {\n\tif (loopFilePresent) return mode === \"fixed\" ? \"<<loop.md>>\" : \"<<loop.md-dynamic>>\";\n\treturn mode === \"fixed\" ? \"<<autonomous-loop>>\" : \"<<autonomous-loop-dynamic>>\";\n}\n\nfunction modeOf(entry: CronEntry): LoopMode {\n\treturn entry.kind === \"fixed\" ? \"fixed\" : \"dynamic\";\n}\n\ninterface AnchorPayload {\n\treadonly loopId?: string;\n\treadonly deliveryId?: string;\n}\n\n/** Reads the tick payload of a `loop-tick` entry, whichever entry kind carries it. */\nfunction anchorPayloadOf(entry: SessionEntry): AnchorPayload | undefined {\n\tif (entry.type === \"custom\") {\n\t\treturn entry.customType === LOOP_TICK_ENTRY_TYPE ? (entry.data as AnchorPayload | undefined) : undefined;\n\t}\n\tif (entry.type === \"custom_message\") {\n\t\treturn entry.customType === LOOP_TICK_ENTRY_TYPE ? (entry.details as AnchorPayload | undefined) : undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the compaction-aware context still contains the delivery that anchored a full\n * sentinel block. Compaction can drop it, and a reminder's \"established earlier in this\n * conversation\" phrasing must never dangle, so a missing anchor forces the next tick back\n * to full. When no specific anchor id was recorded (the autonomous preamble carries none),\n * any surviving tick delivery for that loop counts as the anchor.\n */\nfunction anchorPresent(ctx: ExtensionContext, loopId: LoopId, deliveryId: DeliveryId | undefined): boolean {\n\treturn ctx.sessionManager.buildContextEntries().some((entry) => {\n\t\tconst payload = anchorPayloadOf(entry);\n\t\tif (payload === undefined) return false;\n\t\tif (payload.loopId !== undefined && payload.loopId !== loopId) return false;\n\t\treturn deliveryId === undefined ? true : payload.deliveryId === deliveryId;\n\t});\n}\n\nexport function createLoopExtension(deps: LoopExtensionDeps = {}): ExtensionFactory {\n\tconst clock: LoopClock = deps.clock ?? { now: () => Date.now() };\n\tconst makeTimers = deps.timers ?? createNodeTimerPort;\n\tconst ids = deps.ids ?? defaultIds();\n\tconst storeRefOf = deps.storeRef ?? defaultStoreRef;\n\tconst resolveLoopFile =\n\t\tdeps.resolveLoopFile ??\n\t\t((options: { cwd: string; homeDir: string }) =>\n\t\t\tresolveLoopFileDefault({ cwd: options.cwd, homeDir: options.homeDir, fs: nodeFs, path: { join } }));\n\tconst readState = deps.readState ?? readLoopState;\n\tconst writeState = deps.writeState ?? writeLoopState;\n\n\treturn (pi: ExtensionAPI) => {\n\t\tlet ctx: ExtensionContext | undefined;\n\t\tlet scheduler: LoopScheduler | undefined;\n\t\tlet storeRef: LoopStoreRef | undefined;\n\t\tlet timers: LoopTimerPort = makeTimers();\n\t\tlet storeFailure: LoopStoreFailure | undefined;\n\t\tlet sessionNamed = false;\n\t\t/** Loop the currently running iteration is attributed to, for keepalive + tools. */\n\t\tlet attributedLoopId: LoopId | undefined;\n\t\t/** Delivery id of the tick that started the attributed iteration. */\n\t\tlet attributedDeliveryId: DeliveryId | undefined;\n\t\t/** True once the attributed iteration rescheduled or stopped itself. */\n\t\tlet attributionResolved = false;\n\t\t/** Ticks held back because their slash payload cannot be queued while streaming. */\n\t\tconst deferredDispatches: LoopTick[] = [];\n\t\tconst deliveryStates = new Map<LoopId, SentinelDeliveryState>();\n\t\t/** Loops retired with `error` because their state could not be read or written. */\n\t\tconst endedWithError = new Set<LoopId>();\n\t\t/** True once this session has state worth persisting (loaded or created). */\n\t\tlet storeTouched = false;\n\t\tlet persistTail: Promise<void> = Promise.resolve();\n\n\t\tconst ticker = new LoopStatusTicker({\n\t\t\trender: (key, text) => {\n\t\t\t\ttry {\n\t\t\t\t\tctx?.ui.setStatus(key, text);\n\t\t\t\t} catch {\n\t\t\t\t\t// A stale context after session replacement must not break the loop runtime.\n\t\t\t\t}\n\t\t\t},\n\t\t\tnow: () => clock.now(),\n\t\t});\n\n\t\tpi.registerEntryRenderer(LOOP_TICK_ENTRY_TYPE, renderLoopTickEntry);\n\t\tregisterLoopTools(pi, {\n\t\t\tscheduler: {\n\t\t\t\tgetWakeupTarget: (): ScheduleWakeupTarget => {\n\t\t\t\t\tif (scheduler === undefined || attributedLoopId === undefined) return null;\n\t\t\t\t\tconst entry = scheduler.getState().entries[attributedLoopId];\n\t\t\t\t\tif (entry === undefined || entry.phase === \"ended\") return null;\n\t\t\t\t\treturn { kind: entry.kind, loopId: entry.id };\n\t\t\t\t},\n\t\t\t\tscheduleWakeup: async (request) => {\n\t\t\t\t\tconst active = requireScheduler();\n\t\t\t\t\tconst result = active.onScheduleWakeup(request);\n\t\t\t\t\tif (!result.ok) throw new Error(`schedule_wakeup rejected: ${result.reason}`);\n\t\t\t\t\tattributionResolved = true;\n\t\t\t\t\tawait persist();\n\t\t\t\t\trefreshStatus();\n\t\t\t\t\treturn {\n\t\t\t\t\t\twakeupId: result.wakeupId,\n\t\t\t\t\t\t...(result.replacedWakeupId === undefined ? {} : { replacedWakeupId: result.replacedWakeupId }),\n\t\t\t\t\t\tdueAt: result.dueAt,\n\t\t\t\t\t\tnoopStreak: result.noopStreak,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstopDynamicLoop: async (request) => {\n\t\t\t\t\tconst active = requireScheduler();\n\t\t\t\t\tactive.stop(request.loopId, \"model-stop\");\n\t\t\t\t\tattributionResolved = true;\n\t\t\t\t\tawait persist();\n\t\t\t\t\trefreshStatus();\n\t\t\t\t\treturn { endedAt: clock.now() };\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tfunction requireScheduler(): LoopScheduler {\n\t\t\tif (scheduler === undefined) throw new Error(\"loop extension has no active session\");\n\t\t\treturn scheduler;\n\t\t}\n\n\t\t/** Merges extension-owned sentinel delivery state into the scheduler's snapshot. */\n\t\tfunction withDeliveryOverlay(state: LoopState): LoopState {\n\t\t\tconst entries: Record<LoopId, CronEntry> = {};\n\t\t\tfor (const [id, entry] of Object.entries(state.entries)) {\n\t\t\t\tconst delivery = deliveryStates.get(id);\n\t\t\t\tentries[id] = delivery === undefined ? entry : { ...entry, sentinelDelivery: delivery };\n\t\t\t}\n\t\t\treturn { ...state, entries };\n\t\t}\n\n\t\t/** Serializes persistence so a timer, tool, and command write cannot interleave. */\n\t\tfunction persist(): Promise<void> {\n\t\t\tconst ref = storeRef;\n\t\t\tconst active = scheduler;\n\t\t\tif (ref === undefined || active === undefined) return Promise.resolve();\n\t\t\tconst snapshot = withDeliveryOverlay(active.getState());\n\t\t\t// The extension is registered for every session, so a session that never ran a loop\n\t\t\t// must not leave a sidecar behind.\n\t\t\tif (!storeTouched && Object.keys(snapshot.entries).length === 0) return Promise.resolve();\n\t\t\tstoreTouched = true;\n\t\t\tpersistTail = persistTail.then(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait writeState(ref, snapshot);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailStore(error, Object.keys(snapshot.entries));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn persistTail;\n\t\t}\n\n\t\t/**\n\t\t * A schedule that cannot be read or written must not keep running: end the affected\n\t\t * loops with `error` and tell the user, rather than silently losing the schedule. The\n\t\t * terminal record is kept in memory because the store that would hold it is exactly the\n\t\t * thing that just failed; what matters is that nothing stays armed and the user knows.\n\t\t */\n\t\tfunction failStore(error: unknown, loopIds: readonly LoopId[]): void {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\ttimers.cancelAll();\n\t\t\tfor (const loopId of loopIds) endedWithError.add(loopId);\n\t\t\tstoreFailure = {\n\t\t\t\tendReason: \"error\",\n\t\t\t\tmessage,\n\t\t\t\tloopIds,\n\t\t\t};\n\t\t\tticker.dispose();\n\t\t\tctx?.ui.notify(`/loop state could not be used and the affected loops were ended: ${message}`, \"error\");\n\t\t}\n\n\t\tfunction refreshStatus(): void {\n\t\t\tif (scheduler === undefined) return;\n\t\t\tconst state = scheduler.getState();\n\t\t\t// The ticker owns a repeating render timer, so it only runs while a loop is armed;\n\t\t\t// a session that never used /loop must not carry one.\n\t\t\tif (Object.values(state.entries).every((entry) => entry.phase === \"ended\")) {\n\t\t\t\tif (ticker.running) ticker.dispose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tticker.sync(state);\n\t\t}\n\n\t\tfunction deliveryStateOf(loopId: LoopId): SentinelDeliveryState {\n\t\t\treturn deliveryStates.get(loopId) ?? emptyDeliveryState();\n\t\t}\n\n\t\tfunction markForceFullDelivery(): void {\n\t\t\tfor (const [id, state] of deliveryStates) {\n\t\t\t\tdeliveryStates.set(id, { ...state, forceFullDelivery: true });\n\t\t\t}\n\t\t\tconst active = scheduler;\n\t\t\tif (active === undefined) return;\n\t\t\tfor (const entry of Object.values(active.getState().entries)) {\n\t\t\t\tif (entry.phase === \"ended\") continue;\n\t\t\t\tif (deliveryStates.has(entry.id)) continue;\n\t\t\t\tdeliveryStates.set(entry.id, { ...entry.sentinelDelivery, forceFullDelivery: true });\n\t\t\t}\n\t\t}\n\n\t\tfunction isExtensionCommandPayload(text: string): boolean {\n\t\t\tif (!text.startsWith(\"/\")) return false;\n\t\t\tconst name = text.slice(1).split(/\\s+/)[0];\n\t\t\treturn pi.getCommands().some((command) => command.name === name);\n\t\t}\n\n\t\t/**\n\t\t * Delivers one tick. Idle dispatch expands prompt templates so a slash payload\n\t\t * reaches its real command handler; a busy session gets a follow-up instead of\n\t\t * steering. A slash payload cannot be queued at all, so it waits for the turn to\n\t\t * settle rather than being rewritten into plain text.\n\t\t */\n\t\tasync function dispatchTick(tick: LoopTick): Promise<void> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst entry = active.getState().entries[tick.loopId];\n\t\t\tif (entry === undefined || entry.phase === \"ended\") return;\n\t\t\tif (endedWithError.has(tick.loopId)) return;\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (currentCtx === undefined) return;\n\n\t\t\tconst mode = modeOf(entry);\n\t\t\tconst loopFile =\n\t\t\t\tentry.payload.type === \"sentinel\" ? await resolveLoopFileSafely(currentCtx) : { found: false as const };\n\t\t\tconst built = buildTickMessage({\n\t\t\t\tloopId: entry.id,\n\t\t\t\tdeliveryId: tick.deliveryId,\n\t\t\t\tmode,\n\t\t\t\tpayload: entry.payload,\n\t\t\t\treentryPrompt: entry.reentryPrompt,\n\t\t\t\tdeliveryState: deliveryStateOf(entry.id),\n\t\t\t\tloopFile: loopFileSnapshot(loopFile),\n\t\t\t});\n\t\t\tdeliveryStates.set(entry.id, built.deliveryState);\n\n\t\t\tconst busy = !currentCtx.isIdle() || currentCtx.hasPendingMessages();\n\t\t\tif (busy && isExtensionCommandPayload(built.text)) {\n\t\t\t\t// Extension commands cannot be queued; hold this delivery until the turn settles.\n\t\t\t\tdeferredDispatches.push(tick);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst noopStreak = entry.noopStreak;\n\t\t\tpi.appendEntry<LoopTickEntryData>(LOOP_TICK_ENTRY_TYPE, {\n\t\t\t\tloopId: entry.id,\n\t\t\t\tdeliveryId: tick.deliveryId,\n\t\t\t\tscheduledForAt: tick.scheduledForAt,\n\t\t\t\tmode,\n\t\t\t\tdelivery: built.delivery,\n\t\t\t\t...(built.details.sentinel === undefined ? {} : { sentinel: built.details.sentinel }),\n\t\t\t\tnoopStreak,\n\t\t\t\tfolded: noopStreak >= 2,\n\t\t\t});\n\n\t\t\tattributedLoopId = entry.id;\n\t\t\tattributedDeliveryId = tick.deliveryId;\n\t\t\tattributionResolved = false;\n\t\t\tpi.sendUserMessage(built.text, {\n\t\t\t\texpandPromptTemplates: true,\n\t\t\t\t...(busy ? { deliverAs: \"followUp\" as const } : {}),\n\t\t\t});\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t}\n\n\t\tasync function resolveLoopFileSafely(currentCtx: ExtensionContext): Promise<LoopFileResult> {\n\t\t\ttry {\n\t\t\t\treturn await resolveLoopFile({ cwd: currentCtx.cwd, homeDir: homedir() });\n\t\t\t} catch {\n\t\t\t\t// A loop file that cannot be read is treated as absent for this tick; the loop\n\t\t\t\t// stays alive and picks the file up again once it is readable.\n\t\t\t\treturn { found: false };\n\t\t\t}\n\t\t}\n\n\t\tasync function drainDeferred(): Promise<void> {\n\t\t\tif (deferredDispatches.length === 0) return;\n\t\t\tconst pending = deferredDispatches.splice(0, deferredDispatches.length);\n\t\t\tfor (const tick of pending) await dispatchTick(tick);\n\t\t}\n\n\t\tasync function fireDue(loopId: LoopId): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (active === undefined || currentCtx === undefined) return;\n\t\t\tconst busy = !currentCtx.isIdle() || currentCtx.hasPendingMessages();\n\t\t\tconst decision = active.onDue(loopId, clock.now(), busy);\n\t\t\tawait persist();\n\t\t\tif (decision.action === \"dispatch\") {\n\t\t\t\tawait dispatchTick(decision.tick);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (decision.action === \"expire\") {\n\t\t\t\tctx?.ui.notify(\"Loop expired after 7 days and is no longer armed.\", \"info\");\n\t\t\t}\n\t\t\trefreshStatus();\n\t\t}\n\n\t\t/**\n\t\t * Timer callbacks are synchronous, so the async due step is scheduled and its failure is\n\t\t * contained: a rejected dispatch must never take down the timer that owns the loop.\n\t\t */\n\t\tfunction handleTimerFire(loopId: LoopId): void {\n\t\t\tvoid fireDue(loopId).catch((error) => {\n\t\t\t\tctx?.ui.notify(`Loop tick failed: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n\t\t\t});\n\t\t}\n\n\t\tfunction payloadForPrompt(prompt: string): LoopPayload {\n\t\t\treturn { type: \"prompt\", prompt };\n\t\t}\n\n\t\tasync function startFixed(request: StartFixedRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst effective = normalizeInterval(request.requestedInterval);\n\t\t\tconst created = active.createFixed({\n\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\treentryPrompt: `/loop ${request.originalArgs}`.trimEnd(),\n\t\t\t\tpayload: payloadForPrompt(request.prompt),\n\t\t\t\trequestedInterval: request.requestedInterval,\n\t\t\t\teffectiveInterval: effective,\n\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\tintervalMs: effective.intervalMs,\n\t\t\t});\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(request.prompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\t...(effective.roundingNotice === undefined ? {} : { roundingNotice: effective.roundingNotice }),\n\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\teffectiveCadence: effective.human,\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tasync function startDynamic(request: StartDynamicRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst created = active.createDynamic({\n\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\treentryPrompt: `/loop ${request.originalArgs}`.trimEnd(),\n\t\t\t\tpayload: payloadForPrompt(request.prompt),\n\t\t\t});\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(request.prompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\t...(created.supersededLoopId === undefined ? {} : { supersededLoopId: created.supersededLoopId }),\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tasync function startBare(request: StartBareRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (currentCtx === undefined) return { ok: false, message: \"loop extension has no active session\" };\n\t\t\tconst loopFile = await resolveLoopFileSafely(currentCtx);\n\t\t\tconst mode: LoopMode = request.interval === undefined ? \"dynamic\" : \"fixed\";\n\t\t\tconst payload: LoopPayload = { type: \"sentinel\", sentinel: sentinelFor(mode, loopFile.found) };\n\t\t\tconst reentryPrompt = request.originalArgs.trim() === \"\" ? \"/loop\" : `/loop ${request.originalArgs.trim()}`;\n\n\t\t\tconst created =\n\t\t\t\trequest.interval === undefined\n\t\t\t\t\t? active.createDynamic({ originalArgs: request.originalArgs, reentryPrompt, payload })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tconst effective = normalizeInterval(request.interval);\n\t\t\t\t\t\t\treturn active.createFixed({\n\t\t\t\t\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\t\t\t\t\treentryPrompt,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\trequestedInterval: request.interval,\n\t\t\t\t\t\t\t\teffectiveInterval: effective,\n\t\t\t\t\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\t\t\t\t\tintervalMs: effective.intervalMs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})();\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(reentryPrompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tfunction nameSessionAfterLoop(prompt: string): void {\n\t\t\tif (sessionNamed) return;\n\t\t\tsessionNamed = true;\n\t\t\tif (pi.getSessionName() !== undefined) return;\n\t\t\tpi.setSessionName(`loop: ${prompt}`.trim());\n\t\t}\n\n\t\tconst controller: LoopController = {\n\t\t\tstartFixed,\n\t\t\tstartDynamic,\n\t\t\tstartBare,\n\t\t\tfireDue,\n\t\t\tscheduleWakeup: async (request) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.onScheduleWakeup(request);\n\t\t\t\tif (result.ok) attributionResolved = true;\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t},\n\t\t\tstop: async (target, detail) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.stop(target, detail);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tpause: async (target) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.pause(target);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tresume: async (target) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.resume(target);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tgetState: () => requireScheduler().getState(),\n\t\t\tstatusLine: () => formatLoopStatus(requireScheduler().getState(), clock.now()),\n\t\t\tlastStoreFailure: () => storeFailure,\n\t\t\tisEndedWithError: (loopId) => endedWithError.has(loopId),\n\t\t};\n\n\t\tdeps.onControllerReady?.(controller);\n\t\tregisterLoopCommand(pi, { controller });\n\n\t\tpi.on(\"session_start\", async (_event, nextCtx) => {\n\t\t\tctx = nextCtx;\n\t\t\ttimers.cancelAll();\n\t\t\ttimers = makeTimers();\n\t\t\tstoreFailure = undefined;\n\t\t\tendedWithError.clear();\n\t\t\tstoreTouched = false;\n\t\t\tsessionNamed = false;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tdeferredDispatches.length = 0;\n\t\t\tdeliveryStates.clear();\n\t\t\tstoreRef = storeRefOf(nextCtx);\n\n\t\t\tlet initialState: LoopState | undefined;\n\t\t\ttry {\n\t\t\t\tinitialState = (await readState(storeRef)) ?? undefined;\n\t\t\t} catch (error) {\n\t\t\t\t// Fail closed: arm nothing, end nothing silently, and tell the user.\n\t\t\t\tfailStore(error, []);\n\t\t\t\tscheduler = createLoopScheduler({\n\t\t\t\t\tsessionId: nextCtx.sessionManager.getSessionId(),\n\t\t\t\t\tclock,\n\t\t\t\t\ttimers,\n\t\t\t\t\tids,\n\t\t\t\t\tonFire: handleTimerFire,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tscheduler = createLoopScheduler({\n\t\t\t\tsessionId: nextCtx.sessionManager.getSessionId(),\n\t\t\t\tclock,\n\t\t\t\ttimers,\n\t\t\t\tids,\n\t\t\t\tonFire: handleTimerFire,\n\t\t\t\t...(initialState === undefined ? {} : { initialState }),\n\t\t\t});\n\t\t\tstoreTouched = initialState !== undefined;\n\n\t\t\tfor (const entry of Object.values(scheduler.getState().entries)) {\n\t\t\t\tconst anchorDeliveryId = entry.sentinelDelivery.lastLoopFileDelivered?.anchorDeliveryId;\n\t\t\t\tconst anchored = anchorPresent(nextCtx, entry.id, anchorDeliveryId);\n\t\t\t\tconst needsFull = !anchored && hasAnchoredDelivery(entry.sentinelDelivery);\n\t\t\t\tdeliveryStates.set(entry.id, {\n\t\t\t\t\t...entry.sentinelDelivery,\n\t\t\t\t\tforceFullDelivery: entry.sentinelDelivery.forceFullDelivery || needsFull,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst restored = scheduler.restore(clock.now());\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t\tfor (const tick of restored.recoveryTicks) await dispatchTick(tick);\n\t\t\tif (restored.expiredLoopIds.length > 0) {\n\t\t\t\tnextCtx.ui.notify(`Loop expired after 7 days: ${restored.expiredLoopIds.join(\", \")}`, \"info\");\n\t\t\t}\n\t\t});\n\n\t\tpi.on(\"session_compact\", async (event) => {\n\t\t\t// Accepted compaction may have dropped the anchor the reminders point at, so the\n\t\t\t// next sentinel tick must carry the full instructions again. Timers and phase are\n\t\t\t// deliberately untouched.\n\t\t\tif (event.accepted !== true) return;\n\t\t\tmarkForceFullDelivery();\n\t\t\tawait persist();\n\t\t});\n\n\t\tpi.on(\"input\", async (event) => {\n\t\t\t// A user turn is never an attributed loop iteration, so keepalive must not see it.\n\t\t\t// A tick dispatched by this extension arrives with source \"extension\" and MUST keep\n\t\t\t// its attribution, or no dynamic iteration would ever be judged.\n\t\t\tif (event.source === \"extension\") return;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t});\n\n\t\tpi.on(\"agent_end\", async (event) => {\n\t\t\t// A retrying turn is still in progress: neither settle it nor judge its liveness.\n\t\t\tif (event.willRetry === true) return;\n\t\t\tif (event.aborted === true && event.abortSource === \"user\") {\n\t\t\t\tawait pauseAttributedLoop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait settleAttributedTick(event.aborted === true ? \"error\" : \"completed\");\n\t\t});\n\n\t\tpi.on(\"agent_settled\", async () => {\n\t\t\tawait settleAttributedTick(\"completed\");\n\t\t\tawait drainDeferred();\n\t\t\trefreshStatus();\n\t\t});\n\n\t\tpi.on(\"session_abort\", async () => {\n\t\t\tawait pauseAttributedLoop();\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async () => {\n\t\t\tconst active = scheduler;\n\t\t\tif (active !== undefined) {\n\t\t\t\t// Shutdown SUSPENDS: every senpi shutdown reason leaves the session resumable,\n\t\t\t\t// so the snapshot must carry no terminal reason.\n\t\t\t\tactive.onShutdown();\n\t\t\t\tawait persist();\n\t\t\t}\n\t\t\ttimers.cancelAll();\n\t\t\tdeferredDispatches.length = 0;\n\t\t\tticker.dispose();\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tctx = undefined;\n\t\t});\n\n\t\tasync function pauseAttributedLoop(): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tif (active === undefined) return;\n\t\t\tconst targets =\n\t\t\t\tattributedLoopId === undefined\n\t\t\t\t\t? Object.values(active.getState().entries)\n\t\t\t\t\t\t\t.filter((entry) => entry.phase !== \"ended\")\n\t\t\t\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t\t: [attributedLoopId];\n\t\t\tconst paused: LoopId[] = [];\n\t\t\tfor (const loopId of targets) {\n\t\t\t\tif (active.onUserAbort(loopId).action === \"paused\") paused.push(loopId);\n\t\t\t}\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tif (paused.length === 0) return;\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t\tctx?.ui.notify(\"loop paused - /loop resume or /loop stop\", \"info\");\n\t\t}\n\n\t\t/**\n\t\t * Settles the tick this turn was attributed to, drains a coalesced occurrence, and\n\t\t * applies the two-strike keepalive to a dynamic iteration that ended without calling\n\t\t * `schedule_wakeup`. An ordinary user turn clears the attribution first, so keepalive\n\t\t * can never be charged to it, and a user abort takes the pause path instead.\n\t\t */\n\t\tasync function settleAttributedTick(outcome: \"completed\" | \"error\"): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tconst loopId = attributedLoopId;\n\t\t\tconst deliveryId = attributedDeliveryId;\n\t\t\tif (active === undefined || loopId === undefined) return;\n\t\t\tconst entry = active.getState().entries[loopId];\n\t\t\tif (entry === undefined) return;\n\t\t\tconst resolved = attributionResolved;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\n\t\t\tconst settled = deliveryId === undefined ? undefined : active.onTickSettled({ loopId, deliveryId, outcome });\n\t\t\tawait persist();\n\n\t\t\tif (!resolved && entry.kind === \"dynamic\") {\n\t\t\t\tconst keepalive = active.onTurnEndedWithoutSchedule(loopId);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\tif (keepalive.action === \"ended\") {\n\t\t\t\t\tctx?.ui.notify(\n\t\t\t\t\t\tkeepalive.endReason === \"keepalive_exhausted\"\n\t\t\t\t\t\t\t? \"Loop ended: the model stopped scheduling wakeups.\"\n\t\t\t\t\t\t\t: \"Loop expired after 7 days and is no longer armed.\",\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (settled?.action === \"dispatch\") {\n\t\t\t\t// Exactly one delivery drains a coalesced occurrence, however many were missed.\n\t\t\t\tawait dispatchTick(settled.tick);\n\t\t\t} else if (settled?.action === \"ended\") {\n\t\t\t\tctx?.ui.notify(`Loop ended: ${settled.endReason}.`, \"info\");\n\t\t\t}\n\t\t\trefreshStatus();\n\t\t}\n\t};\n}\n\n/** True when a reminder would refer back to a full delivery that must still exist. */\nfunction hasAnchoredDelivery(state: SentinelDeliveryState): boolean {\n\treturn state.autonomousPreambleDelivered || state.lastLoopFileDelivered !== null;\n}\n\nexport default createLoopExtension();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `/loop` extension factory and lifecycle wiring.\n *\n * This module owns the only impure parts of the feature: real timers, the session store,\n * the extension event wiring, and message dispatch. Every decision it makes is delegated\n * to the pure modules beside it (`scheduler.ts`, `tick-prompt.ts`, `cron-planner.ts`,\n * `loopfile.ts`, `status.ts`), so the runtime here is a thin, testable adapter.\n *\n * Load-bearing rules implemented here:\n * - A tick NEVER steers. Idle dispatch goes through `sendUserMessage(..., {\n * expandPromptTemplates: true })` so a slash payload reaches the real command path;\n * a busy session receives the tick as a follow-up instead.\n * - Shutdown SUSPENDS: timers are cancelled, the ticker disposed, and the snapshot is\n * persisted without a terminal reason (every senpi shutdown reason is resumable).\n * - Keepalive is applied only to an attributed dynamic iteration, never after an ordinary\n * user turn, and never after a user abort (an abort PAUSES the loop instead).\n * - A store failure is not swallowed: the affected loops end with `error` and the user is\n * told, because a schedule that cannot be persisted must not keep running.\n */\n\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../../../../config.ts\";\nimport type { SessionEntry } from \"../../../session-manager.ts\";\nimport { noticeEntryRenderer } from \"../../notice/index.ts\";\nimport type { EntryRenderer, ExtensionAPI, ExtensionContext, ExtensionFactory } from \"../../types.ts\";\nimport { registerLoopCommand } from \"./command-registration.ts\";\nimport { describeCron, normalizeInterval } from \"./cron-planner.ts\";\nimport { type LoopFileResult, nodeFs, resolveLoopFile as resolveLoopFileDefault } from \"./loopfile.ts\";\nimport {\n\tcreateLoopScheduler,\n\ttype LoopClock,\n\ttype LoopIdFactory,\n\ttype LoopScheduler,\n\ttype LoopTick,\n\ttype LoopTimerPort,\n} from \"./scheduler.ts\";\nimport { formatLoopStatus, formatNoopFold, LoopStatusTicker } from \"./status.ts\";\nimport { readLoopState, writeLoopState } from \"./store.ts\";\nimport { buildTickMessage, type LoopFileSnapshot, type LoopMode, type TickDelivery } from \"./tick-prompt.ts\";\nimport { registerLoopTools, SCHEDULE_WAKEUP_TOOL, type ScheduleWakeupTarget } from \"./tools.ts\";\nimport type {\n\tCronEntry,\n\tDeliveryId,\n\tEpochMs,\n\tLoopEndReason,\n\tLoopId,\n\tLoopPayload,\n\tLoopSentinel,\n\tLoopState,\n\tLoopStoreRef,\n\tRequestedInterval,\n\tSentinelDeliveryState,\n} from \"./types.ts\";\n\n/** Custom entry type carrying one dispatched tick, used for attribution and folding. */\nexport const LOOP_TICK_ENTRY_TYPE = \"loop-tick\";\n\nexport interface LoopTickEntryData {\n\treadonly loopId: LoopId;\n\treadonly deliveryId: DeliveryId;\n\treadonly scheduledForAt: EpochMs;\n\treadonly mode: LoopMode;\n\treadonly delivery: TickDelivery;\n\treadonly sentinel?: LoopSentinel;\n\t/** Consecutive quiet dynamic iterations at the moment this tick was dispatched. */\n\treadonly noopStreak: number;\n\t/** True when this tick continues a quiet streak and should render folded. */\n\treadonly folded: boolean;\n}\n\nexport interface LoopCreateOk {\n\treadonly ok: true;\n\treadonly loopId: LoopId;\n\t/** Present when a new dynamic loop replaced a previous one. */\n\treadonly supersededLoopId?: LoopId;\n\t/** Human-readable rounding notice when the requested cadence was normalized. */\n\treadonly roundingNotice?: string;\n\treadonly cronExpression?: string;\n\treadonly effectiveCadence?: string;\n\treadonly expiresAt?: EpochMs;\n}\n\nexport interface LoopCreateRejected {\n\treadonly ok: false;\n\treadonly message: string;\n}\n\nexport type LoopCreateOutcome = LoopCreateOk | LoopCreateRejected;\n\nexport interface LoopStoreFailure {\n\treadonly endReason: LoopEndReason;\n\treadonly message: string;\n\treadonly loopIds: readonly LoopId[];\n}\n\nexport interface StartFixedRequest {\n\treadonly originalArgs: string;\n\treadonly prompt: string;\n\treadonly requestedInterval: RequestedInterval;\n}\n\nexport interface StartDynamicRequest {\n\treadonly originalArgs: string;\n\treadonly prompt: string;\n}\n\nexport interface StartBareRequest {\n\treadonly originalArgs: string;\n\treadonly interval?: RequestedInterval;\n}\n\nexport interface ControllerScheduleWakeupRequest {\n\treadonly loopId: LoopId;\n\treadonly requestedDelaySeconds: number;\n\treadonly delaySeconds: number;\n\treadonly reason: string;\n\treadonly prompt: string;\n\treadonly noop: boolean;\n}\n\n/**\n * Runtime surface of a live loop extension. The `/loop` command module drives the\n * extension exclusively through this interface, so command parsing never reaches into\n * scheduler or store internals.\n */\nexport interface LoopController {\n\tstartFixed(request: StartFixedRequest): Promise<LoopCreateOutcome>;\n\tstartDynamic(request: StartDynamicRequest): Promise<LoopCreateOutcome>;\n\tstartBare(request: StartBareRequest): Promise<LoopCreateOutcome>;\n\t/** Runs the due decision for a loop at the current clock reading and dispatches it. */\n\tfireDue(loopId: LoopId): Promise<void>;\n\tscheduleWakeup(request: ControllerScheduleWakeupRequest): Promise<void>;\n\tstop(target: LoopId | \"all\", detail: string): Promise<readonly LoopId[]>;\n\tpause(target: LoopId | \"all\"): Promise<readonly LoopId[]>;\n\tresume(target: LoopId | \"all\"): Promise<readonly LoopId[]>;\n\tgetState(): LoopState;\n\tstatusLine(): string | undefined;\n\t/** Set when a store read/write failed and the affected loops were ended with `error`. */\n\tlastStoreFailure(): LoopStoreFailure | undefined;\n\t/** True when this loop was retired because its state could not be read or written. */\n\tisEndedWithError(loopId: LoopId): boolean;\n}\n\nexport interface LoopExtensionDeps {\n\treadonly clock?: LoopClock;\n\t/** Factory so each session gets its own timer port; defaults to real timeouts. */\n\treadonly timers?: () => LoopTimerPort;\n\treadonly ids?: LoopIdFactory;\n\treadonly storeRef?: (ctx: ExtensionContext) => LoopStoreRef;\n\treadonly resolveLoopFile?: (options: { cwd: string; homeDir: string }) => Promise<LoopFileResult>;\n\treadonly readState?: (ref: LoopStoreRef) => Promise<LoopState | null>;\n\treadonly writeState?: (ref: LoopStoreRef, state: LoopState) => Promise<void>;\n\t/**\n\t * Published at factory time so a command module (or a test) can drive this instance.\n\t * The controller is bound to the extension's own session state, so it stays valid across\n\t * session starts within one extension generation.\n\t */\n\treadonly onControllerReady?: (controller: LoopController) => void;\n}\n\nexport const renderLoopTickEntry: EntryRenderer<LoopTickEntryData> = noticeEntryRenderer((entry) => {\n\tconst data = entry.data;\n\tif (data === undefined) return undefined;\n\tconst folded = data.folded ? formatNoopFold(data.noopStreak) : \"\";\n\tif (folded.length > 0) {\n\t\treturn {\n\t\t\ttitle: folded,\n\t\t\twhy: \"Consecutive loop ticks reported no actionable change.\",\n\t\t};\n\t}\n\treturn {\n\t\ttitle: `↻ loop tick (${data.mode}) · ${data.delivery}`,\n\t\twhy: \"A /loop schedule dispatched this tick.\",\n\t};\n});\n\n/**\n * Real timer port: exactly one live timeout per key, replaced on re-arm.\n *\n * Follows the generation-counter discipline of `cache-keepalive/index.ts`: cancelling or\n * re-arming a key bumps its generation, so a callback whose generation is stale returns\n * without firing even if it was already scheduled on the event loop.\n */\nexport function createNodeTimerPort(): LoopTimerPort {\n\tconst handles = new Map<string, ReturnType<typeof setTimeout>>();\n\tconst generations = new Map<string, number>();\n\n\tfunction cancel(key: string): void {\n\t\tconst handle = handles.get(key);\n\t\tif (handle !== undefined) clearTimeout(handle);\n\t\thandles.delete(key);\n\t\tgenerations.set(key, (generations.get(key) ?? 0) + 1);\n\t}\n\n\treturn {\n\t\tarm(key, dueAt, callback) {\n\t\t\tcancel(key);\n\t\t\tconst generation = generations.get(key) ?? 0;\n\t\t\tconst delayMs = Math.max(0, dueAt - Date.now());\n\t\t\tconst handle = setTimeout(() => {\n\t\t\t\thandles.delete(key);\n\t\t\t\tif (generations.get(key) !== generation) return;\n\t\t\t\tcallback();\n\t\t\t}, delayMs);\n\t\t\thandle.unref?.();\n\t\t\thandles.set(key, handle);\n\t\t},\n\t\tcancel,\n\t\tcancelAll() {\n\t\t\tfor (const key of [...handles.keys()]) cancel(key);\n\t\t},\n\t};\n}\n\nfunction defaultIds(): LoopIdFactory {\n\tlet sequence = 0;\n\tconst mint = (prefix: string): string => {\n\t\tsequence += 1;\n\t\treturn `${prefix}-${Date.now().toString(36)}-${sequence.toString(36)}`;\n\t};\n\treturn {\n\t\tloopId: () => mint(\"loop\"),\n\t\twakeupId: () => mint(\"wakeup\"),\n\t\tdeliveryId: () => mint(\"delivery\"),\n\t};\n}\n\nfunction defaultStoreRef(ctx: ExtensionContext): LoopStoreRef {\n\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\tconst baseDir =\n\t\tsessionFile === undefined\n\t\t\t? join(getAgentDir(), \"extensions\", \"loop\", \"no-session\")\n\t\t\t: join(ctx.sessionManager.getSessionDir(), \"extensions\", \"loop\");\n\treturn { baseDir, sessionId: ctx.sessionManager.getSessionId() };\n}\n\nfunction emptyDeliveryState(): SentinelDeliveryState {\n\treturn { autonomousPreambleDelivered: false, lastLoopFileDelivered: null, forceFullDelivery: false };\n}\n\nfunction loopFileSnapshot(result: LoopFileResult): LoopFileSnapshot {\n\tif (!result.found) return { present: false };\n\treturn {\n\t\tpresent: true,\n\t\tpath: result.path,\n\t\tcontent: result.content,\n\t\tmtimeMs: result.fingerprint.mtimeMs,\n\t\tsize: result.fingerprint.size,\n\t\tcontentHash: result.fingerprint.contentHash,\n\t};\n}\n\nfunction sentinelFor(mode: LoopMode, loopFilePresent: boolean): LoopSentinel {\n\tif (loopFilePresent) return mode === \"fixed\" ? \"<<loop.md>>\" : \"<<loop.md-dynamic>>\";\n\treturn mode === \"fixed\" ? \"<<autonomous-loop>>\" : \"<<autonomous-loop-dynamic>>\";\n}\n\nfunction modeOf(entry: CronEntry): LoopMode {\n\treturn entry.kind === \"fixed\" ? \"fixed\" : \"dynamic\";\n}\n\ninterface AnchorPayload {\n\treadonly loopId?: string;\n\treadonly deliveryId?: string;\n}\n\n/** Reads the tick payload of a `loop-tick` entry, whichever entry kind carries it. */\nfunction anchorPayloadOf(entry: SessionEntry): AnchorPayload | undefined {\n\tif (entry.type === \"custom\") {\n\t\treturn entry.customType === LOOP_TICK_ENTRY_TYPE ? (entry.data as AnchorPayload | undefined) : undefined;\n\t}\n\tif (entry.type === \"custom_message\") {\n\t\treturn entry.customType === LOOP_TICK_ENTRY_TYPE ? (entry.details as AnchorPayload | undefined) : undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the compaction-aware context still contains the delivery that anchored a full\n * sentinel block. Compaction can drop it, and a reminder's \"established earlier in this\n * conversation\" phrasing must never dangle, so a missing anchor forces the next tick back\n * to full. When no specific anchor id was recorded (the autonomous preamble carries none),\n * any surviving tick delivery for that loop counts as the anchor.\n */\nfunction anchorPresent(ctx: ExtensionContext, loopId: LoopId, deliveryId: DeliveryId | undefined): boolean {\n\treturn ctx.sessionManager.buildContextEntries().some((entry) => {\n\t\tconst payload = anchorPayloadOf(entry);\n\t\tif (payload === undefined) return false;\n\t\tif (payload.loopId !== undefined && payload.loopId !== loopId) return false;\n\t\treturn deliveryId === undefined ? true : payload.deliveryId === deliveryId;\n\t});\n}\n\nexport function createLoopExtension(deps: LoopExtensionDeps = {}): ExtensionFactory {\n\tconst clock: LoopClock = deps.clock ?? { now: () => Date.now() };\n\tconst makeTimers = deps.timers ?? createNodeTimerPort;\n\tconst ids = deps.ids ?? defaultIds();\n\tconst storeRefOf = deps.storeRef ?? defaultStoreRef;\n\tconst resolveLoopFile =\n\t\tdeps.resolveLoopFile ??\n\t\t((options: { cwd: string; homeDir: string }) =>\n\t\t\tresolveLoopFileDefault({ cwd: options.cwd, homeDir: options.homeDir, fs: nodeFs, path: { join } }));\n\tconst readState = deps.readState ?? readLoopState;\n\tconst writeState = deps.writeState ?? writeLoopState;\n\n\treturn (pi: ExtensionAPI) => {\n\t\tlet ctx: ExtensionContext | undefined;\n\t\tlet scheduler: LoopScheduler | undefined;\n\t\tlet storeRef: LoopStoreRef | undefined;\n\t\tlet timers: LoopTimerPort = makeTimers();\n\t\tlet storeFailure: LoopStoreFailure | undefined;\n\t\tlet sessionNamed = false;\n\t\t/** Loop the currently running iteration is attributed to, for keepalive + tools. */\n\t\tlet attributedLoopId: LoopId | undefined;\n\t\t/** Delivery id of the tick that started the attributed iteration. */\n\t\tlet attributedDeliveryId: DeliveryId | undefined;\n\t\t/** True once the attributed iteration rescheduled or stopped itself. */\n\t\tlet attributionResolved = false;\n\t\t/** Ticks held back because their slash payload cannot be queued while streaming. */\n\t\tconst deferredDispatches: LoopTick[] = [];\n\t\tconst deliveryStates = new Map<LoopId, SentinelDeliveryState>();\n\t\t/** Loops retired with `error` because their state could not be read or written. */\n\t\tconst endedWithError = new Set<LoopId>();\n\t\t/** True once this session has state worth persisting (loaded or created). */\n\t\tlet storeTouched = false;\n\t\tlet persistTail: Promise<void> = Promise.resolve();\n\n\t\tconst ticker = new LoopStatusTicker({\n\t\t\trender: (key, text) => {\n\t\t\t\ttry {\n\t\t\t\t\tctx?.ui.setStatus(key, text);\n\t\t\t\t} catch {\n\t\t\t\t\t// A stale context after session replacement must not break the loop runtime.\n\t\t\t\t}\n\t\t\t},\n\t\t\tnow: () => clock.now(),\n\t\t});\n\n\t\tpi.registerEntryRenderer(LOOP_TICK_ENTRY_TYPE, renderLoopTickEntry);\n\t\tregisterLoopTools(pi, {\n\t\t\tscheduler: {\n\t\t\t\tgetWakeupTarget: (): ScheduleWakeupTarget => {\n\t\t\t\t\tif (scheduler === undefined || attributedLoopId === undefined) return null;\n\t\t\t\t\tconst entry = scheduler.getState().entries[attributedLoopId];\n\t\t\t\t\tif (entry === undefined || entry.phase === \"ended\") return null;\n\t\t\t\t\treturn { kind: entry.kind, loopId: entry.id };\n\t\t\t\t},\n\t\t\t\tscheduleWakeup: async (request) => {\n\t\t\t\t\tconst active = requireScheduler();\n\t\t\t\t\tconst result = active.onScheduleWakeup(request);\n\t\t\t\t\tif (!result.ok) throw new Error(`schedule_wakeup rejected: ${result.reason}`);\n\t\t\t\t\tattributionResolved = true;\n\t\t\t\t\tawait persist();\n\t\t\t\t\trefreshStatus();\n\t\t\t\t\treturn {\n\t\t\t\t\t\twakeupId: result.wakeupId,\n\t\t\t\t\t\t...(result.replacedWakeupId === undefined ? {} : { replacedWakeupId: result.replacedWakeupId }),\n\t\t\t\t\t\tdueAt: result.dueAt,\n\t\t\t\t\t\tnoopStreak: result.noopStreak,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstopDynamicLoop: async (request) => {\n\t\t\t\t\tconst active = requireScheduler();\n\t\t\t\t\tactive.stop(request.loopId, \"model-stop\");\n\t\t\t\t\tattributionResolved = true;\n\t\t\t\t\tawait persist();\n\t\t\t\t\trefreshStatus();\n\t\t\t\t\treturn { endedAt: clock.now() };\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tfunction requireScheduler(): LoopScheduler {\n\t\t\tif (scheduler === undefined) throw new Error(\"loop extension has no active session\");\n\t\t\treturn scheduler;\n\t\t}\n\n\t\t/** Merges extension-owned sentinel delivery state into the scheduler's snapshot. */\n\t\tfunction withDeliveryOverlay(state: LoopState): LoopState {\n\t\t\tconst entries: Record<LoopId, CronEntry> = {};\n\t\t\tfor (const [id, entry] of Object.entries(state.entries)) {\n\t\t\t\tconst delivery = deliveryStates.get(id);\n\t\t\t\tentries[id] = delivery === undefined ? entry : { ...entry, sentinelDelivery: delivery };\n\t\t\t}\n\t\t\treturn { ...state, entries };\n\t\t}\n\n\t\t/** Serializes persistence so a timer, tool, and command write cannot interleave. */\n\t\tfunction persist(): Promise<void> {\n\t\t\tconst ref = storeRef;\n\t\t\tconst active = scheduler;\n\t\t\tif (ref === undefined || active === undefined) return Promise.resolve();\n\t\t\tconst snapshot = withDeliveryOverlay(active.getState());\n\t\t\t// The extension is registered for every session, so a session that never ran a loop\n\t\t\t// must not leave a sidecar behind.\n\t\t\tif (!storeTouched && Object.keys(snapshot.entries).length === 0) return Promise.resolve();\n\t\t\tstoreTouched = true;\n\t\t\tpersistTail = persistTail.then(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait writeState(ref, snapshot);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailStore(error, Object.keys(snapshot.entries));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn persistTail;\n\t\t}\n\n\t\t/**\n\t\t * A schedule that cannot be read or written must not keep running: end the affected\n\t\t * loops with `error` and tell the user, rather than silently losing the schedule. The\n\t\t * terminal record is kept in memory because the store that would hold it is exactly the\n\t\t * thing that just failed; what matters is that nothing stays armed and the user knows.\n\t\t */\n\t\tfunction failStore(error: unknown, loopIds: readonly LoopId[]): void {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\ttimers.cancelAll();\n\t\t\tfor (const loopId of loopIds) endedWithError.add(loopId);\n\t\t\tstoreFailure = {\n\t\t\t\tendReason: \"error\",\n\t\t\t\tmessage,\n\t\t\t\tloopIds,\n\t\t\t};\n\t\t\tticker.dispose();\n\t\t\tctx?.ui.notify(`/loop state could not be used and the affected loops were ended: ${message}`, \"error\");\n\t\t}\n\n\t\t/**\n\t\t * `schedule_wakeup` is search-exposed, so it is callable only while this extension keeps it\n\t\t * active: exactly when a dynamic loop is live (not ended, not suspended). Idempotent, so\n\t\t * every state transition can call it without churning the active tool list.\n\t\t */\n\t\tfunction syncScheduleWakeupActivation(): void {\n\t\t\tif (scheduler === undefined) return;\n\t\t\tconst wanted = Object.values(scheduler.getState().entries).some(\n\t\t\t\t(entry) => entry.kind === \"dynamic\" && entry.phase !== \"ended\" && entry.phase !== \"suspended\",\n\t\t\t);\n\t\t\tconst active = pi.getActiveTools();\n\t\t\tconst present = active.includes(SCHEDULE_WAKEUP_TOOL);\n\t\t\tif (wanted === present) return;\n\t\t\tpi.setActiveTools(\n\t\t\t\twanted ? [...active, SCHEDULE_WAKEUP_TOOL] : active.filter((name) => name !== SCHEDULE_WAKEUP_TOOL),\n\t\t\t);\n\t\t}\n\n\t\tfunction refreshStatus(): void {\n\t\t\tsyncScheduleWakeupActivation();\n\t\t\tif (scheduler === undefined) return;\n\t\t\tconst state = scheduler.getState();\n\t\t\t// The ticker owns a repeating render timer, so it only runs while a loop is armed;\n\t\t\t// a session that never used /loop must not carry one.\n\t\t\tif (Object.values(state.entries).every((entry) => entry.phase === \"ended\")) {\n\t\t\t\tif (ticker.running) ticker.dispose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tticker.sync(state);\n\t\t}\n\n\t\tfunction deliveryStateOf(loopId: LoopId): SentinelDeliveryState {\n\t\t\treturn deliveryStates.get(loopId) ?? emptyDeliveryState();\n\t\t}\n\n\t\tfunction markForceFullDelivery(): void {\n\t\t\tfor (const [id, state] of deliveryStates) {\n\t\t\t\tdeliveryStates.set(id, { ...state, forceFullDelivery: true });\n\t\t\t}\n\t\t\tconst active = scheduler;\n\t\t\tif (active === undefined) return;\n\t\t\tfor (const entry of Object.values(active.getState().entries)) {\n\t\t\t\tif (entry.phase === \"ended\") continue;\n\t\t\t\tif (deliveryStates.has(entry.id)) continue;\n\t\t\t\tdeliveryStates.set(entry.id, { ...entry.sentinelDelivery, forceFullDelivery: true });\n\t\t\t}\n\t\t}\n\n\t\tfunction isExtensionCommandPayload(text: string): boolean {\n\t\t\tif (!text.startsWith(\"/\")) return false;\n\t\t\tconst name = text.slice(1).split(/\\s+/)[0];\n\t\t\treturn pi.getCommands().some((command) => command.name === name);\n\t\t}\n\n\t\t/**\n\t\t * Delivers one tick. Idle dispatch expands prompt templates so a slash payload\n\t\t * reaches its real command handler; a busy session gets a follow-up instead of\n\t\t * steering. A slash payload cannot be queued at all, so it waits for the turn to\n\t\t * settle rather than being rewritten into plain text.\n\t\t */\n\t\tasync function dispatchTick(tick: LoopTick): Promise<void> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst entry = active.getState().entries[tick.loopId];\n\t\t\tif (entry === undefined || entry.phase === \"ended\") return;\n\t\t\tif (endedWithError.has(tick.loopId)) return;\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (currentCtx === undefined) return;\n\n\t\t\tconst mode = modeOf(entry);\n\t\t\tconst loopFile =\n\t\t\t\tentry.payload.type === \"sentinel\" ? await resolveLoopFileSafely(currentCtx) : { found: false as const };\n\t\t\tconst built = buildTickMessage({\n\t\t\t\tloopId: entry.id,\n\t\t\t\tdeliveryId: tick.deliveryId,\n\t\t\t\tmode,\n\t\t\t\tpayload: entry.payload,\n\t\t\t\treentryPrompt: entry.reentryPrompt,\n\t\t\t\tdeliveryState: deliveryStateOf(entry.id),\n\t\t\t\tloopFile: loopFileSnapshot(loopFile),\n\t\t\t});\n\t\t\tdeliveryStates.set(entry.id, built.deliveryState);\n\n\t\t\tconst busy = !currentCtx.isIdle() || currentCtx.hasPendingMessages();\n\t\t\tif (busy && isExtensionCommandPayload(built.text)) {\n\t\t\t\t// Extension commands cannot be queued; hold this delivery until the turn settles.\n\t\t\t\tdeferredDispatches.push(tick);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst noopStreak = entry.noopStreak;\n\t\t\tpi.appendEntry<LoopTickEntryData>(LOOP_TICK_ENTRY_TYPE, {\n\t\t\t\tloopId: entry.id,\n\t\t\t\tdeliveryId: tick.deliveryId,\n\t\t\t\tscheduledForAt: tick.scheduledForAt,\n\t\t\t\tmode,\n\t\t\t\tdelivery: built.delivery,\n\t\t\t\t...(built.details.sentinel === undefined ? {} : { sentinel: built.details.sentinel }),\n\t\t\t\tnoopStreak,\n\t\t\t\tfolded: noopStreak >= 2,\n\t\t\t});\n\n\t\t\tattributedLoopId = entry.id;\n\t\t\tattributedDeliveryId = tick.deliveryId;\n\t\t\tattributionResolved = false;\n\t\t\t// The tick prompt tells the model to call schedule_wakeup, so the tool must be active\n\t\t\t// before the tick is queued, not after the turn has already read its tool list.\n\t\t\tsyncScheduleWakeupActivation();\n\t\t\tpi.sendUserMessage(built.text, {\n\t\t\t\texpandPromptTemplates: true,\n\t\t\t\t...(busy ? { deliverAs: \"followUp\" as const } : {}),\n\t\t\t});\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t}\n\n\t\tasync function resolveLoopFileSafely(currentCtx: ExtensionContext): Promise<LoopFileResult> {\n\t\t\ttry {\n\t\t\t\treturn await resolveLoopFile({ cwd: currentCtx.cwd, homeDir: homedir() });\n\t\t\t} catch {\n\t\t\t\t// A loop file that cannot be read is treated as absent for this tick; the loop\n\t\t\t\t// stays alive and picks the file up again once it is readable.\n\t\t\t\treturn { found: false };\n\t\t\t}\n\t\t}\n\n\t\tasync function drainDeferred(): Promise<void> {\n\t\t\tif (deferredDispatches.length === 0) return;\n\t\t\tconst pending = deferredDispatches.splice(0, deferredDispatches.length);\n\t\t\tfor (const tick of pending) await dispatchTick(tick);\n\t\t}\n\n\t\tasync function fireDue(loopId: LoopId): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (active === undefined || currentCtx === undefined) return;\n\t\t\tconst busy = !currentCtx.isIdle() || currentCtx.hasPendingMessages();\n\t\t\tconst decision = active.onDue(loopId, clock.now(), busy);\n\t\t\tawait persist();\n\t\t\tif (decision.action === \"dispatch\") {\n\t\t\t\tawait dispatchTick(decision.tick);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (decision.action === \"expire\") {\n\t\t\t\tctx?.ui.notify(\"Loop expired after 7 days and is no longer armed.\", \"info\");\n\t\t\t}\n\t\t\trefreshStatus();\n\t\t}\n\n\t\t/**\n\t\t * Timer callbacks are synchronous, so the async due step is scheduled and its failure is\n\t\t * contained: a rejected dispatch must never take down the timer that owns the loop.\n\t\t */\n\t\tfunction handleTimerFire(loopId: LoopId): void {\n\t\t\tvoid fireDue(loopId).catch((error) => {\n\t\t\t\tctx?.ui.notify(`Loop tick failed: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n\t\t\t});\n\t\t}\n\n\t\tfunction payloadForPrompt(prompt: string): LoopPayload {\n\t\t\treturn { type: \"prompt\", prompt };\n\t\t}\n\n\t\tasync function startFixed(request: StartFixedRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst effective = normalizeInterval(request.requestedInterval);\n\t\t\tconst created = active.createFixed({\n\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\treentryPrompt: `/loop ${request.originalArgs}`.trimEnd(),\n\t\t\t\tpayload: payloadForPrompt(request.prompt),\n\t\t\t\trequestedInterval: request.requestedInterval,\n\t\t\t\teffectiveInterval: effective,\n\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\tintervalMs: effective.intervalMs,\n\t\t\t});\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(request.prompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\t...(effective.roundingNotice === undefined ? {} : { roundingNotice: effective.roundingNotice }),\n\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\teffectiveCadence: effective.human,\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tasync function startDynamic(request: StartDynamicRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst created = active.createDynamic({\n\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\treentryPrompt: `/loop ${request.originalArgs}`.trimEnd(),\n\t\t\t\tpayload: payloadForPrompt(request.prompt),\n\t\t\t});\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(request.prompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\t...(created.supersededLoopId === undefined ? {} : { supersededLoopId: created.supersededLoopId }),\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tasync function startBare(request: StartBareRequest): Promise<LoopCreateOutcome> {\n\t\t\tconst active = requireScheduler();\n\t\t\tconst currentCtx = ctx;\n\t\t\tif (currentCtx === undefined) return { ok: false, message: \"loop extension has no active session\" };\n\t\t\tconst loopFile = await resolveLoopFileSafely(currentCtx);\n\t\t\tconst mode: LoopMode = request.interval === undefined ? \"dynamic\" : \"fixed\";\n\t\t\tconst payload: LoopPayload = { type: \"sentinel\", sentinel: sentinelFor(mode, loopFile.found) };\n\t\t\tconst reentryPrompt = request.originalArgs.trim() === \"\" ? \"/loop\" : `/loop ${request.originalArgs.trim()}`;\n\n\t\t\tconst created =\n\t\t\t\trequest.interval === undefined\n\t\t\t\t\t? active.createDynamic({ originalArgs: request.originalArgs, reentryPrompt, payload })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tconst effective = normalizeInterval(request.interval);\n\t\t\t\t\t\t\treturn active.createFixed({\n\t\t\t\t\t\t\t\toriginalArgs: request.originalArgs,\n\t\t\t\t\t\t\t\treentryPrompt,\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\trequestedInterval: request.interval,\n\t\t\t\t\t\t\t\teffectiveInterval: effective,\n\t\t\t\t\t\t\t\tcronExpression: describeCron(effective),\n\t\t\t\t\t\t\t\tintervalMs: effective.intervalMs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})();\n\t\t\tif (!created.ok) return { ok: false, message: created.message };\n\t\t\tdeliveryStates.set(created.loopId, emptyDeliveryState());\n\t\t\tawait persist();\n\t\t\tnameSessionAfterLoop(reentryPrompt);\n\t\t\tawait fireDue(created.loopId);\n\t\t\trefreshStatus();\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tloopId: created.loopId,\n\t\t\t\texpiresAt: active.getState().entries[created.loopId]?.expiresAt,\n\t\t\t};\n\t\t}\n\n\t\tfunction nameSessionAfterLoop(prompt: string): void {\n\t\t\tif (sessionNamed) return;\n\t\t\tsessionNamed = true;\n\t\t\tif (pi.getSessionName() !== undefined) return;\n\t\t\tpi.setSessionName(`loop: ${prompt}`.trim());\n\t\t}\n\n\t\tconst controller: LoopController = {\n\t\t\tstartFixed,\n\t\t\tstartDynamic,\n\t\t\tstartBare,\n\t\t\tfireDue,\n\t\t\tscheduleWakeup: async (request) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.onScheduleWakeup(request);\n\t\t\t\tif (result.ok) attributionResolved = true;\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t},\n\t\t\tstop: async (target, detail) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.stop(target, detail);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tpause: async (target) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.pause(target);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tresume: async (target) => {\n\t\t\t\tconst active = requireScheduler();\n\t\t\t\tconst result = active.resume(target);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\treturn result.affectedLoopIds;\n\t\t\t},\n\t\t\tgetState: () => requireScheduler().getState(),\n\t\t\tstatusLine: () => formatLoopStatus(requireScheduler().getState(), clock.now()),\n\t\t\tlastStoreFailure: () => storeFailure,\n\t\t\tisEndedWithError: (loopId) => endedWithError.has(loopId),\n\t\t};\n\n\t\tdeps.onControllerReady?.(controller);\n\t\tregisterLoopCommand(pi, { controller });\n\n\t\tpi.on(\"session_start\", async (_event, nextCtx) => {\n\t\t\tctx = nextCtx;\n\t\t\ttimers.cancelAll();\n\t\t\ttimers = makeTimers();\n\t\t\tstoreFailure = undefined;\n\t\t\tendedWithError.clear();\n\t\t\tstoreTouched = false;\n\t\t\tsessionNamed = false;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tdeferredDispatches.length = 0;\n\t\t\tdeliveryStates.clear();\n\t\t\tstoreRef = storeRefOf(nextCtx);\n\n\t\t\tlet initialState: LoopState | undefined;\n\t\t\ttry {\n\t\t\t\tinitialState = (await readState(storeRef)) ?? undefined;\n\t\t\t} catch (error) {\n\t\t\t\t// Fail closed: arm nothing, end nothing silently, and tell the user.\n\t\t\t\tfailStore(error, []);\n\t\t\t\tscheduler = createLoopScheduler({\n\t\t\t\t\tsessionId: nextCtx.sessionManager.getSessionId(),\n\t\t\t\t\tclock,\n\t\t\t\t\ttimers,\n\t\t\t\t\tids,\n\t\t\t\t\tonFire: handleTimerFire,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tscheduler = createLoopScheduler({\n\t\t\t\tsessionId: nextCtx.sessionManager.getSessionId(),\n\t\t\t\tclock,\n\t\t\t\ttimers,\n\t\t\t\tids,\n\t\t\t\tonFire: handleTimerFire,\n\t\t\t\t...(initialState === undefined ? {} : { initialState }),\n\t\t\t});\n\t\t\tstoreTouched = initialState !== undefined;\n\n\t\t\tfor (const entry of Object.values(scheduler.getState().entries)) {\n\t\t\t\tconst anchorDeliveryId = entry.sentinelDelivery.lastLoopFileDelivered?.anchorDeliveryId;\n\t\t\t\tconst anchored = anchorPresent(nextCtx, entry.id, anchorDeliveryId);\n\t\t\t\tconst needsFull = !anchored && hasAnchoredDelivery(entry.sentinelDelivery);\n\t\t\t\tdeliveryStates.set(entry.id, {\n\t\t\t\t\t...entry.sentinelDelivery,\n\t\t\t\t\tforceFullDelivery: entry.sentinelDelivery.forceFullDelivery || needsFull,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst restored = scheduler.restore(clock.now());\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t\tfor (const tick of restored.recoveryTicks) await dispatchTick(tick);\n\t\t\tif (restored.expiredLoopIds.length > 0) {\n\t\t\t\tnextCtx.ui.notify(`Loop expired after 7 days: ${restored.expiredLoopIds.join(\", \")}`, \"info\");\n\t\t\t}\n\t\t});\n\n\t\tpi.on(\"session_compact\", async (event) => {\n\t\t\t// Accepted compaction may have dropped the anchor the reminders point at, so the\n\t\t\t// next sentinel tick must carry the full instructions again. Timers and phase are\n\t\t\t// deliberately untouched.\n\t\t\tif (event.accepted !== true) return;\n\t\t\tmarkForceFullDelivery();\n\t\t\tawait persist();\n\t\t});\n\n\t\tpi.on(\"input\", async (event) => {\n\t\t\t// A user turn is never an attributed loop iteration, so keepalive must not see it.\n\t\t\t// A tick dispatched by this extension arrives with source \"extension\" and MUST keep\n\t\t\t// its attribution, or no dynamic iteration would ever be judged.\n\t\t\tif (event.source === \"extension\") return;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t});\n\n\t\tpi.on(\"agent_end\", async (event) => {\n\t\t\t// A retrying turn is still in progress: neither settle it nor judge its liveness.\n\t\t\tif (event.willRetry === true) return;\n\t\t\tif (event.aborted === true && event.abortSource === \"user\") {\n\t\t\t\tawait pauseAttributedLoop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait settleAttributedTick(event.aborted === true ? \"error\" : \"completed\");\n\t\t});\n\n\t\tpi.on(\"agent_settled\", async () => {\n\t\t\tawait settleAttributedTick(\"completed\");\n\t\t\tawait drainDeferred();\n\t\t\trefreshStatus();\n\t\t});\n\n\t\tpi.on(\"session_abort\", async () => {\n\t\t\tawait pauseAttributedLoop();\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async () => {\n\t\t\tconst active = scheduler;\n\t\t\tif (active !== undefined) {\n\t\t\t\t// Shutdown SUSPENDS: every senpi shutdown reason leaves the session resumable,\n\t\t\t\t// so the snapshot must carry no terminal reason.\n\t\t\t\tactive.onShutdown();\n\t\t\t\tawait persist();\n\t\t\t}\n\t\t\ttimers.cancelAll();\n\t\t\tdeferredDispatches.length = 0;\n\t\t\tticker.dispose();\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tctx = undefined;\n\t\t});\n\n\t\tasync function pauseAttributedLoop(): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tif (active === undefined) return;\n\t\t\tconst targets =\n\t\t\t\tattributedLoopId === undefined\n\t\t\t\t\t? Object.values(active.getState().entries)\n\t\t\t\t\t\t\t.filter((entry) => entry.phase !== \"ended\")\n\t\t\t\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t\t: [attributedLoopId];\n\t\t\tconst paused: LoopId[] = [];\n\t\t\tfor (const loopId of targets) {\n\t\t\t\tif (active.onUserAbort(loopId).action === \"paused\") paused.push(loopId);\n\t\t\t}\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\t\t\tif (paused.length === 0) return;\n\t\t\tawait persist();\n\t\t\trefreshStatus();\n\t\t\tctx?.ui.notify(\"loop paused - /loop resume or /loop stop\", \"info\");\n\t\t}\n\n\t\t/**\n\t\t * Settles the tick this turn was attributed to, drains a coalesced occurrence, and\n\t\t * applies the two-strike keepalive to a dynamic iteration that ended without calling\n\t\t * `schedule_wakeup`. An ordinary user turn clears the attribution first, so keepalive\n\t\t * can never be charged to it, and a user abort takes the pause path instead.\n\t\t */\n\t\tasync function settleAttributedTick(outcome: \"completed\" | \"error\"): Promise<void> {\n\t\t\tconst active = scheduler;\n\t\t\tconst loopId = attributedLoopId;\n\t\t\tconst deliveryId = attributedDeliveryId;\n\t\t\tif (active === undefined || loopId === undefined) return;\n\t\t\tconst entry = active.getState().entries[loopId];\n\t\t\tif (entry === undefined) return;\n\t\t\tconst resolved = attributionResolved;\n\t\t\tattributedLoopId = undefined;\n\t\t\tattributedDeliveryId = undefined;\n\t\t\tattributionResolved = false;\n\n\t\t\tconst settled = deliveryId === undefined ? undefined : active.onTickSettled({ loopId, deliveryId, outcome });\n\t\t\tawait persist();\n\n\t\t\tif (!resolved && entry.kind === \"dynamic\") {\n\t\t\t\tconst keepalive = active.onTurnEndedWithoutSchedule(loopId);\n\t\t\t\tawait persist();\n\t\t\t\trefreshStatus();\n\t\t\t\tif (keepalive.action === \"ended\") {\n\t\t\t\t\tctx?.ui.notify(\n\t\t\t\t\t\tkeepalive.endReason === \"keepalive_exhausted\"\n\t\t\t\t\t\t\t? \"Loop ended: the model stopped scheduling wakeups.\"\n\t\t\t\t\t\t\t: \"Loop expired after 7 days and is no longer armed.\",\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (settled?.action === \"dispatch\") {\n\t\t\t\t// Exactly one delivery drains a coalesced occurrence, however many were missed.\n\t\t\t\tawait dispatchTick(settled.tick);\n\t\t\t} else if (settled?.action === \"ended\") {\n\t\t\t\tctx?.ui.notify(`Loop ended: ${settled.endReason}.`, \"info\");\n\t\t\t}\n\t\t\trefreshStatus();\n\t\t}\n\t};\n}\n\n/** True when a reminder would refer back to a full delivery that must still exist. */\nfunction hasAnchoredDelivery(state: SentinelDeliveryState): boolean {\n\treturn state.autonomousPreambleDelivered || state.lastLoopFileDelivered !== null;\n}\n\nexport default createLoopExtension();\n"]}
@@ -1,22 +1,24 @@
1
1
  /**
2
2
  * Atomic, versioned, per-session sidecar store for `/loop` state.
3
3
  *
4
- * Mirrors the goal store's persistence discipline (temp file + rename, per-file mutation
5
- * serialization, strict versioned parsing) because scheduler state must never be half
6
- * written or silently reset: a corrupt file arms nothing and surfaces a typed error so
7
- * the extension can end affected loops with `error` instead of guessing.
4
+ * Persistence (temp file + rename, per-file mutation serialization, envelope
5
+ * version/session checks) lives in the shared session sidecar primitive. This
6
+ * module supplies the loop domain parser and keeps the historical exported
7
+ * surface so callers continue to catch {@link InvalidLoopStoreError} /
8
+ * {@link UnsupportedLoopStoreVersionError} by name.
8
9
  *
9
10
  * Session custom entries are deliberately NOT the authoritative store: they are branch
10
11
  * nodes, so a globally scanned "latest" entry can come from an abandoned branch, while
11
12
  * loop schedules are session-scoped.
12
13
  */
14
+ import { InvalidSidecarStoreError, UnsupportedSidecarStoreVersionError } from "../../../session-sidecar-store.ts";
13
15
  import { type LoopState, type LoopStoreRef } from "./types.ts";
14
- export declare class InvalidLoopStoreError extends Error {
16
+ export declare class InvalidLoopStoreError extends InvalidSidecarStoreError {
15
17
  constructor(message: string, options?: {
16
18
  cause?: unknown;
17
19
  });
18
20
  }
19
- export declare class UnsupportedLoopStoreVersionError extends Error {
21
+ export declare class UnsupportedLoopStoreVersionError extends UnsupportedSidecarStoreVersionError {
20
22
  constructor(message: string);
21
23
  }
22
24
  /** Mutation callback. May be async; its result becomes the next persisted state. */
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAqBN,KAAK,SAAS,EACd,KAAK,YAAY,EAQjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,qBAAsB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI1D;AAED,qBAAa,gCAAiC,SAAQ,KAAK;gBAC9C,OAAO,EAAE,MAAM;CAI3B;AAED,oFAAoF;AACpF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAKvF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAE3D;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAWhF;AAED,wFAAwF;AACxF,wBAAsB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAEzE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAE1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAOlG;AAED,wFAAwF;AACxF,wBAAsB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvF;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAE9D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/loop/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAGN,wBAAwB,EAIxB,mCAAmC,EACnC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAqBN,KAAK,SAAS,EACd,KAAK,YAAY,EAQjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,qBAAsB,SAAQ,wBAAwB;gBACtD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI1D;AAED,qBAAa,gCAAiC,SAAQ,mCAAmC;gBAC5E,OAAO,EAAE,MAAM;CAI3B;AAED,oFAAoF;AACpF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAIvF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAE3D;AA8BD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMhF;AAED,wFAAwF;AACxF,wBAAsB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAEzE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAE1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAIlG;AAED,wFAAwF;AACxF,wBAAsB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAE9D"}
@@ -1,60 +1,79 @@
1
1
  /**
2
2
  * Atomic, versioned, per-session sidecar store for `/loop` state.
3
3
  *
4
- * Mirrors the goal store's persistence discipline (temp file + rename, per-file mutation
5
- * serialization, strict versioned parsing) because scheduler state must never be half
6
- * written or silently reset: a corrupt file arms nothing and surfaces a typed error so
7
- * the extension can end affected loops with `error` instead of guessing.
4
+ * Persistence (temp file + rename, per-file mutation serialization, envelope
5
+ * version/session checks) lives in the shared session sidecar primitive. This
6
+ * module supplies the loop domain parser and keeps the historical exported
7
+ * surface so callers continue to catch {@link InvalidLoopStoreError} /
8
+ * {@link UnsupportedLoopStoreVersionError} by name.
8
9
  *
9
10
  * Session custom entries are deliberately NOT the authoritative store: they are branch
10
11
  * nodes, so a globally scanned "latest" entry can come from an abandoned branch, while
11
12
  * loop schedules are session-scoped.
12
13
  */
13
- import { randomUUID } from "node:crypto";
14
- import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
15
- import { dirname, join } from "node:path";
14
+ import { createSidecarStore, encodedSessionId as encodeSidecarSessionId, InvalidSidecarStoreError, sidecarFilePath, UnsupportedSidecarStoreVersionError, } from "../../../session-sidecar-store.js";
16
15
  import { EFFECTIVE_INTERVAL_UNITS, isRecord, LOOP_END_REASONS, LOOP_PHASES, LOOP_SENTINELS, LOOP_STATE_VERSION, LOOP_WAKE_SOURCE_KINDS, REQUESTED_INTERVAL_UNITS, } from "./types.js";
17
- export class InvalidLoopStoreError extends Error {
16
+ export class InvalidLoopStoreError extends InvalidSidecarStoreError {
18
17
  constructor(message, options) {
19
18
  super(message, options);
20
19
  this.name = "InvalidLoopStoreError";
21
20
  }
22
21
  }
23
- export class UnsupportedLoopStoreVersionError extends Error {
22
+ export class UnsupportedLoopStoreVersionError extends UnsupportedSidecarStoreVersionError {
24
23
  constructor(message) {
25
24
  super(message);
26
25
  this.name = "UnsupportedLoopStoreVersionError";
27
26
  }
28
27
  }
29
- const mutationTails = new Map();
30
- const snapshots = new Map();
28
+ const stores = new Map();
31
29
  export function encodedSessionId(ref) {
32
- return encodeURIComponent(ref.sessionId);
30
+ return encodeSidecarSessionId(ref.sessionId);
33
31
  }
34
32
  export function loopStateFilePath(ref) {
35
- return join(ref.baseDir, `${encodedSessionId(ref)}.json`);
33
+ return sidecarFilePath(ref);
36
34
  }
37
35
  export function emptyLoopState(sessionId) {
38
36
  return { version: LOOP_STATE_VERSION, sessionId, entries: {}, activeDynamicId: null, updatedAt: 0 };
39
37
  }
38
+ function storeFor(ref) {
39
+ const filePath = loopStateFilePath(ref);
40
+ const existing = stores.get(filePath);
41
+ if (existing !== undefined)
42
+ return existing;
43
+ const store = createSidecarStore({
44
+ baseDir: ref.baseDir,
45
+ sessionId: ref.sessionId,
46
+ version: LOOP_STATE_VERSION,
47
+ tempPrefix: "loop",
48
+ parse: parseLoopPayload,
49
+ });
50
+ stores.set(filePath, store);
51
+ return store;
52
+ }
53
+ function remapLoopStoreError(error) {
54
+ if (error instanceof InvalidLoopStoreError || error instanceof UnsupportedLoopStoreVersionError) {
55
+ throw error;
56
+ }
57
+ if (error instanceof UnsupportedSidecarStoreVersionError) {
58
+ throw new UnsupportedLoopStoreVersionError(error.message.replaceAll("sidecar store", "loop store"));
59
+ }
60
+ if (error instanceof InvalidSidecarStoreError) {
61
+ throw new InvalidLoopStoreError(error.message.replaceAll("sidecar store", "loop store"), { cause: error });
62
+ }
63
+ throw error;
64
+ }
40
65
  /**
41
66
  * Reads persisted state, or null when this session has never persisted any loop.
42
67
  * Throws {@link InvalidLoopStoreError} / {@link UnsupportedLoopStoreVersionError} on
43
68
  * unusable state so callers fail closed rather than resetting a user's schedule.
44
69
  */
45
70
  export async function readLoopState(ref) {
46
- let raw;
47
71
  try {
48
- raw = await readFile(loopStateFilePath(ref), "utf8");
72
+ return await storeFor(ref).read();
49
73
  }
50
74
  catch (error) {
51
- if (isFileSystemError(error, "ENOENT"))
52
- return null;
53
- throw error;
75
+ remapLoopStoreError(error);
54
76
  }
55
- const state = parseLoopState(raw, ref);
56
- snapshots.set(loopStateFilePath(ref), state);
57
- return state;
58
77
  }
59
78
  /** Like {@link readLoopState}, but returns an empty state when nothing is persisted. */
60
79
  export async function loadLoopState(ref) {
@@ -65,88 +84,38 @@ export async function loadLoopState(ref) {
65
84
  * (status line, tick attribution). Undefined until the store has been touched.
66
85
  */
67
86
  export function snapshotLoopState(ref) {
68
- return snapshots.get(loopStateFilePath(ref));
87
+ return storeFor(ref).snapshot();
69
88
  }
70
89
  /**
71
90
  * Serializes read-modify-write cycles through a per-file promise tail so command,
72
91
  * timer, tool, and lifecycle writes cannot interleave and lose an update.
73
92
  */
74
93
  export function mutateLoopState(ref, mutation) {
75
- return enqueue(ref, async () => {
76
- const current = await loadLoopState(ref);
77
- const next = await mutation(current);
78
- await writeLoopState(ref, next);
79
- return next;
80
- });
94
+ return storeFor(ref)
95
+ .mutate((current) => mutation(current ?? emptyLoopState(ref.sessionId)))
96
+ .catch((error) => remapLoopStoreError(error));
81
97
  }
82
98
  /** Persists a complete state atomically. Prefer {@link mutateLoopState} for updates. */
83
99
  export async function writeLoopState(ref, state) {
84
- const filePath = loopStateFilePath(ref);
85
- await mkdir(dirname(filePath), { recursive: true });
86
- await writeAtomic(filePath, `${JSON.stringify(state, null, 2)}\n`);
87
- snapshots.set(filePath, state);
100
+ await storeFor(ref).write(state);
88
101
  }
89
102
  /** Drops cached snapshots; used when a session ends or tests reset global state. */
90
103
  export function clearLoopStateSnapshot(ref) {
91
- snapshots.delete(loopStateFilePath(ref));
92
- }
93
- function enqueue(ref, operation) {
94
- const key = loopStateFilePath(ref);
95
- const previous = mutationTails.get(key) ?? Promise.resolve();
96
- const run = previous.then(operation);
97
- const tail = run.then(() => undefined, () => undefined);
98
- mutationTails.set(key, tail);
99
- void tail.then(() => {
100
- if (mutationTails.get(key) === tail)
101
- mutationTails.delete(key);
102
- });
103
- return run;
104
+ storeFor(ref).clear();
104
105
  }
105
- async function writeAtomic(filePath, contents) {
106
- const tempPath = join(dirname(filePath), `.loop-${randomUUID()}.tmp`);
107
- try {
108
- await writeFile(tempPath, contents, { encoding: "utf8", mode: 0o600 });
109
- await rename(tempPath, filePath);
110
- }
111
- catch (error) {
112
- try {
113
- await rm(tempPath, { force: true });
114
- }
115
- catch (cleanupError) {
116
- throw new AggregateError([error, cleanupError], "loop store write failed and its temporary file could not be removed");
117
- }
118
- throw error;
119
- }
120
- }
121
- function parseLoopState(raw, ref) {
122
- let parsed;
123
- try {
124
- parsed = JSON.parse(raw);
125
- }
126
- catch (error) {
127
- throw new InvalidLoopStoreError("loop store contains unparseable JSON", { cause: error });
128
- }
129
- if (!isRecord(parsed))
106
+ function parseLoopPayload(raw, ref) {
107
+ if (!isRecord(raw))
130
108
  throw new InvalidLoopStoreError("loop store must be a JSON object");
131
- if (parsed.version !== LOOP_STATE_VERSION) {
132
- throw new UnsupportedLoopStoreVersionError(`unsupported loop store version: ${JSON.stringify(parsed.version)} (expected ${LOOP_STATE_VERSION})`);
133
- }
134
- if (typeof parsed.sessionId !== "string" || parsed.sessionId.length === 0) {
135
- throw new InvalidLoopStoreError("loop store is missing a sessionId");
136
- }
137
- if (parsed.sessionId !== ref.sessionId) {
138
- throw new InvalidLoopStoreError(`loop store sessionId ${parsed.sessionId} does not match the session it was loaded for`);
139
- }
140
- if (!isEpochMs(parsed.updatedAt))
109
+ if (!isEpochMs(raw.updatedAt))
141
110
  throw new InvalidLoopStoreError("loop store has an invalid updatedAt");
142
- if (!isRecord(parsed.entries))
111
+ if (!isRecord(raw.entries))
143
112
  throw new InvalidLoopStoreError("loop store entries must be an object");
144
113
  const entries = {};
145
- for (const [id, value] of Object.entries(parsed.entries)) {
114
+ for (const [id, value] of Object.entries(raw.entries)) {
146
115
  const entry = parseEntry(id, value);
147
116
  entries[id] = entry;
148
117
  }
149
- const activeDynamicId = parsed.activeDynamicId;
118
+ const activeDynamicId = raw.activeDynamicId;
150
119
  if (activeDynamicId !== null) {
151
120
  if (typeof activeDynamicId !== "string") {
152
121
  throw new InvalidLoopStoreError("loop store activeDynamicId must be a string or null");
@@ -158,10 +127,10 @@ function parseLoopState(raw, ref) {
158
127
  }
159
128
  return {
160
129
  version: LOOP_STATE_VERSION,
161
- sessionId: parsed.sessionId,
130
+ sessionId: ref.sessionId,
162
131
  entries,
163
132
  activeDynamicId,
164
- updatedAt: parsed.updatedAt,
133
+ updatedAt: raw.updatedAt,
165
134
  };
166
135
  }
167
136
  function parseEntry(id, value) {
@@ -418,7 +387,4 @@ function isRequestedIntervalUnit(value) {
418
387
  function isEffectiveIntervalUnit(value) {
419
388
  return EFFECTIVE_INTERVAL_UNITS.includes(value);
420
389
  }
421
- function isFileSystemError(error, code) {
422
- return error instanceof Error && "code" in error && error.code === code;
423
- }
424
390
  //# sourceMappingURL=store.js.map