botmancers 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (969) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +9 -5
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/app-path-routes-manifest.json +9 -0
  5. package/app/.next/build-manifest.json +3 -3
  6. package/app/.next/node_modules/@slack/socket-mode-77e8cba3b9ba4738/index.js +1 -0
  7. package/app/.next/node_modules/@slack/socket-mode-77e8cba3b9ba4738/package.json +1 -0
  8. package/app/.next/node_modules/@slack/web-api-d6dbe405b6902642/index.js +1 -0
  9. package/app/.next/node_modules/@slack/web-api-d6dbe405b6902642/package.json +1 -0
  10. package/app/.next/prerender-manifest.json +3 -3
  11. package/app/.next/required-server-files.json +8 -3
  12. package/app/.next/routes-manifest.json +67 -0
  13. package/app/.next/server/app/_global-error/page.js +1 -1
  14. package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
  15. package/app/.next/server/app/_global-error.html +1 -1
  16. package/app/.next/server/app/_global-error.rsc +1 -1
  17. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  18. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  19. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/app/.next/server/app/_not-found/page.js +1 -1
  21. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/_not-found.html +1 -1
  24. package/app/.next/server/app/_not-found.rsc +2 -2
  25. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  26. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  27. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/app/.next/server/app/api/agent-deck/decks/route.js +3 -3
  29. package/app/.next/server/app/api/agent-deck/decks/route.js.nft.json +1 -1
  30. package/app/.next/server/app/api/agent-deck/settings/route.js +3 -3
  31. package/app/.next/server/app/api/agent-deck/settings/route.js.nft.json +1 -1
  32. package/app/.next/server/app/api/bots/[id]/config/route.js +3 -3
  33. package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
  34. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js +5 -6
  35. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js.nft.json +1 -1
  36. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js +3 -3
  37. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -1
  38. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route/app-paths-manifest.json +3 -0
  39. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route/build-manifest.json +12 -0
  40. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route/server-reference-manifest.json +4 -0
  41. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js +11 -0
  42. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js.nft.json +1 -0
  43. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route_client-reference-manifest.js +3 -0
  44. package/app/.next/server/app/api/bots/[id]/sessions/route.js +5 -6
  45. package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -1
  46. package/app/.next/server/app/api/bots/[id]/share-policy/route/app-paths-manifest.json +3 -0
  47. package/app/.next/server/app/api/bots/[id]/share-policy/route/build-manifest.json +12 -0
  48. package/app/.next/server/app/api/bots/[id]/share-policy/route/server-reference-manifest.json +4 -0
  49. package/app/.next/server/app/api/bots/[id]/share-policy/route.js +11 -0
  50. package/app/.next/server/app/api/bots/[id]/share-policy/route.js.nft.json +1 -0
  51. package/app/.next/server/app/api/bots/[id]/share-policy/route_client-reference-manifest.js +3 -0
  52. package/app/.next/server/app/api/bots/[id]/skill/route.js +3 -3
  53. package/app/.next/server/app/api/bots/[id]/skill/route.js.nft.json +1 -1
  54. package/app/.next/server/app/api/bots/availability/route.js +1 -1
  55. package/app/.next/server/app/api/bots/availability/route.js.nft.json +1 -1
  56. package/app/.next/server/app/api/bots/delete-preview/route.js +3 -3
  57. package/app/.next/server/app/api/bots/delete-preview/route.js.nft.json +1 -1
  58. package/app/.next/server/app/api/bots/import/route.js +3 -3
  59. package/app/.next/server/app/api/bots/import/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/bots/manage/route.js +3 -3
  61. package/app/.next/server/app/api/bots/manage/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/bots/name-migrations/route.js +3 -3
  63. package/app/.next/server/app/api/bots/name-migrations/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/bots/route.js +6 -6
  65. package/app/.next/server/app/api/bots/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/conversations/[id]/approve/route.js +4 -4
  67. package/app/.next/server/app/api/conversations/[id]/approve/route.js.nft.json +1 -1
  68. package/app/.next/server/app/api/conversations/[id]/deny/route.js +4 -4
  69. package/app/.next/server/app/api/conversations/[id]/deny/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/conversations/[id]/draft/route.js +4 -4
  71. package/app/.next/server/app/api/conversations/[id]/draft/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js +3 -3
  73. package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/conversations/[id]/messages/route.js +5 -5
  75. package/app/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/conversations/[id]/route.js +3 -3
  77. package/app/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/conversations/[id]/stop/route.js +7 -7
  79. package/app/.next/server/app/api/conversations/[id]/stop/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/conversations/route.js +3 -3
  81. package/app/.next/server/app/api/conversations/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js +4 -4
  83. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js.nft.json +1 -1
  84. package/app/.next/server/app/api/exchanges/[id]/route.js +5 -5
  85. package/app/.next/server/app/api/exchanges/[id]/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/exchanges/route.js +5 -5
  87. package/app/.next/server/app/api/exchanges/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/files/[name]/route.js +1 -1
  89. package/app/.next/server/app/api/files/[name]/route.js.nft.json +1 -1
  90. package/app/.next/server/app/api/groups/route.js +3 -3
  91. package/app/.next/server/app/api/groups/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/health/route.js +5 -2
  93. package/app/.next/server/app/api/health/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/import-capabilities/route.js +1 -1
  95. package/app/.next/server/app/api/import-capabilities/route.js.nft.json +1 -1
  96. package/app/.next/server/app/api/marketplace-handoff/route.js +1 -1
  97. package/app/.next/server/app/api/marketplace-handoff/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/marketplace-handoff/status/route.js +1 -1
  99. package/app/.next/server/app/api/marketplace-handoff/status/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/mcp/route.js +3 -3
  101. package/app/.next/server/app/api/mcp/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/messages/[id]/between/route.js +3 -3
  103. package/app/.next/server/app/api/messages/[id]/between/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/runtime-connections/route.js +3 -3
  105. package/app/.next/server/app/api/runtime-connections/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/service-grants/route.js +3 -3
  107. package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/shares/[shareRef]/revoke/route/app-paths-manifest.json +3 -0
  109. package/app/.next/server/app/api/shares/[shareRef]/revoke/route/build-manifest.json +12 -0
  110. package/app/.next/server/app/api/shares/[shareRef]/revoke/route/server-reference-manifest.json +4 -0
  111. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js +11 -0
  112. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js.nft.json +1 -0
  113. package/app/.next/server/app/api/shares/[shareRef]/revoke/route_client-reference-manifest.js +3 -0
  114. package/app/.next/server/app/api/shares/route/app-paths-manifest.json +3 -0
  115. package/app/.next/server/app/api/shares/route/build-manifest.json +12 -0
  116. package/app/.next/server/app/api/shares/route/server-reference-manifest.json +4 -0
  117. package/app/.next/server/app/api/shares/route.js +11 -0
  118. package/app/.next/server/app/api/shares/route.js.nft.json +1 -0
  119. package/app/.next/server/app/api/shares/route_client-reference-manifest.js +3 -0
  120. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +5 -6
  121. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +5 -6
  123. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js +4 -4
  125. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js +5 -6
  127. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/v0/agents/[agentId]/route.js +5 -6
  129. package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +5 -6
  131. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -1
  132. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +5 -6
  133. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -1
  134. package/app/.next/server/app/api/v0/agents/route.js +5 -6
  135. package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -1
  136. package/app/.next/server/app/api/v0/capabilities/route.js +5 -6
  137. package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/v0/conversations/[id]/route.js +4 -4
  139. package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
  140. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +5 -6
  141. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -1
  142. package/app/.next/server/app/api/v0/exchanges/[id]/route.js +5 -6
  143. package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -1
  144. package/app/.next/server/app/api/v0/exchanges/route.js +5 -6
  145. package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/v0/mcp/route.js +6 -7
  147. package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
  148. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js +5 -6
  149. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js +5 -6
  151. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js.nft.json +1 -1
  152. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js +5 -6
  153. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/v0/requests/[id]/route.js +4 -4
  155. package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +5 -6
  157. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js +5 -6
  159. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js.nft.json +1 -1
  160. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route/app-paths-manifest.json +3 -0
  161. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route/build-manifest.json +12 -0
  162. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route/server-reference-manifest.json +4 -0
  163. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js +11 -0
  164. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js.nft.json +1 -0
  165. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route_client-reference-manifest.js +3 -0
  166. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route/app-paths-manifest.json +3 -0
  167. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route/build-manifest.json +12 -0
  168. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route/server-reference-manifest.json +4 -0
  169. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js +11 -0
  170. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js.nft.json +1 -0
  171. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route_client-reference-manifest.js +3 -0
  172. package/app/.next/server/app/api/v0/shares/[shareRef]/route/app-paths-manifest.json +3 -0
  173. package/app/.next/server/app/api/v0/shares/[shareRef]/route/build-manifest.json +12 -0
  174. package/app/.next/server/app/api/v0/shares/[shareRef]/route/server-reference-manifest.json +4 -0
  175. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js +11 -0
  176. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js.nft.json +1 -0
  177. package/app/.next/server/app/api/v0/shares/[shareRef]/route_client-reference-manifest.js +3 -0
  178. package/app/.next/server/app/api/v0/shares/current/route/app-paths-manifest.json +3 -0
  179. package/app/.next/server/app/api/v0/shares/current/route/build-manifest.json +12 -0
  180. package/app/.next/server/app/api/v0/shares/current/route/server-reference-manifest.json +4 -0
  181. package/app/.next/server/app/api/v0/shares/current/route.js +11 -0
  182. package/app/.next/server/app/api/v0/shares/current/route.js.nft.json +1 -0
  183. package/app/.next/server/app/api/v0/shares/current/route_client-reference-manifest.js +3 -0
  184. package/app/.next/server/app/api/v0/shares/route/app-paths-manifest.json +3 -0
  185. package/app/.next/server/app/api/v0/shares/route/build-manifest.json +12 -0
  186. package/app/.next/server/app/api/v0/shares/route/server-reference-manifest.json +4 -0
  187. package/app/.next/server/app/api/v0/shares/route.js +11 -0
  188. package/app/.next/server/app/api/v0/shares/route.js.nft.json +1 -0
  189. package/app/.next/server/app/api/v0/shares/route_client-reference-manifest.js +3 -0
  190. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +4 -4
  191. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
  192. package/app/.next/server/app/api/wakes/[id]/decision/route.js +4 -4
  193. package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
  194. package/app/.next/server/app/api/wakes/[id]/retry/route.js +4 -4
  195. package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
  196. package/app/.next/server/app/bots/[id]/config/page.js +1 -1
  197. package/app/.next/server/app/bots/[id]/config/page.js.nft.json +1 -1
  198. package/app/.next/server/app/bots/[id]/config/page_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/exchanges/page.js +1 -1
  200. package/app/.next/server/app/exchanges/page.js.nft.json +1 -1
  201. package/app/.next/server/app/exchanges/page_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/exchanges.html +1 -1
  203. package/app/.next/server/app/exchanges.rsc +3 -3
  204. package/app/.next/server/app/exchanges.segments/_full.segment.rsc +3 -3
  205. package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +2 -2
  206. package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +3 -3
  207. package/app/.next/server/app/index.html +1 -1
  208. package/app/.next/server/app/index.rsc +3 -3
  209. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  210. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  211. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  212. package/app/.next/server/app/page.js +1 -1
  213. package/app/.next/server/app/page.js.nft.json +1 -1
  214. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  215. package/app/.next/server/app/settings/page.js +1 -1
  216. package/app/.next/server/app/settings/page.js.nft.json +1 -1
  217. package/app/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  218. package/app/.next/server/app/settings.html +1 -1
  219. package/app/.next/server/app/settings.rsc +2 -2
  220. package/app/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  221. package/app/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  222. package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  223. package/app/.next/server/app/threads/[id]/page.js +1 -1
  224. package/app/.next/server/app/threads/[id]/page.js.nft.json +1 -1
  225. package/app/.next/server/app/threads/[id]/page_client-reference-manifest.js +1 -1
  226. package/app/.next/server/app-paths-manifest.json +9 -0
  227. package/app/.next/server/chunks/1oeh_server_app_api_bots_[id]_sessions_[ref]_shares_route_actions_1jr6f0v.js +3 -0
  228. package/app/.next/server/chunks/[externals]_@slack_0owayck._.js +3 -0
  229. package/app/.next/server/chunks/[externals]__17bolvp._.js +3 -0
  230. package/app/.next/server/chunks/{[externals]__06lqs5i._.js → [externals]__1eaoma8._.js} +1 -1
  231. package/app/.next/server/chunks/[root-of-the-server]__0-vcyi-._.js +3 -0
  232. package/app/.next/server/chunks/[root-of-the-server]__0-w_t2y._.js +3 -0
  233. package/app/.next/server/chunks/{[root-of-the-server]__1_01-13._.js → [root-of-the-server]__029-_9t._.js} +2 -2
  234. package/app/.next/server/chunks/[root-of-the-server]__02vrtib._.js +4 -0
  235. package/app/.next/server/chunks/[root-of-the-server]__04b3ml2._.js +3 -0
  236. package/app/.next/server/chunks/[root-of-the-server]__06w5xhe._.js +3 -0
  237. package/app/.next/server/chunks/[root-of-the-server]__07q5mnr._.js +3 -0
  238. package/app/.next/server/chunks/[root-of-the-server]__0888o0_._.js +3 -0
  239. package/app/.next/server/chunks/[root-of-the-server]__0aincj4._.js +3 -0
  240. package/app/.next/server/chunks/[root-of-the-server]__0e_agq4._.js +3 -0
  241. package/app/.next/server/chunks/[root-of-the-server]__0ey3_2x._.js +3 -0
  242. package/app/.next/server/chunks/[root-of-the-server]__0fku-bw._.js +3 -0
  243. package/app/.next/server/chunks/[root-of-the-server]__0iqh5ta._.js +3 -0
  244. package/app/.next/server/chunks/[root-of-the-server]__0ivjcgs._.js +4 -0
  245. package/app/.next/server/chunks/[root-of-the-server]__0j4pjyg._.js +3 -0
  246. package/app/.next/server/chunks/[root-of-the-server]__0kgnysc._.js +3 -0
  247. package/app/.next/server/chunks/[root-of-the-server]__0mo_kn3._.js +48 -0
  248. package/app/.next/server/chunks/[root-of-the-server]__0mp8bap._.js +3 -0
  249. package/app/.next/server/chunks/[root-of-the-server]__0o9ijih._.js +3 -0
  250. package/app/.next/server/chunks/[root-of-the-server]__0qaiqut._.js +44 -0
  251. package/app/.next/server/chunks/{[root-of-the-server]__1kvvs4u._.js → [root-of-the-server]__0zrx1iz._.js} +1 -1
  252. package/app/.next/server/chunks/[root-of-the-server]__10b5-i-._.js +3 -0
  253. package/app/.next/server/chunks/[root-of-the-server]__17xl_55._.js +3 -0
  254. package/app/.next/server/chunks/[root-of-the-server]__1dxr858._.js +3 -0
  255. package/app/.next/server/chunks/[root-of-the-server]__1eps2a4._.js +3 -0
  256. package/app/.next/server/chunks/[root-of-the-server]__1g_n99l._.js +3 -0
  257. package/app/.next/server/chunks/[root-of-the-server]__1ggmit0._.js +4 -0
  258. package/app/.next/server/chunks/{[root-of-the-server]__1y_j43n._.js → [root-of-the-server]__1hwy3jx._.js} +1 -1
  259. package/app/.next/server/chunks/[root-of-the-server]__1i8glt4._.js +4 -0
  260. package/app/.next/server/chunks/{[root-of-the-server]__0j0i8xz._.js → [root-of-the-server]__1igzl05._.js} +1 -1
  261. package/app/.next/server/chunks/[root-of-the-server]__1kczttr._.js +3 -0
  262. package/app/.next/server/chunks/{[root-of-the-server]__1c3e2ds._.js → [root-of-the-server]__1kik2zt._.js} +1 -1
  263. package/app/.next/server/chunks/[root-of-the-server]__1t4ybp2._.js +48 -0
  264. package/app/.next/server/chunks/[root-of-the-server]__1v3ikuo._.js +3 -0
  265. package/app/.next/server/chunks/{[root-of-the-server]__0-45blq._.js → [root-of-the-server]__1z5l5cg._.js} +2 -2
  266. package/app/.next/server/chunks/[root-of-the-server]__200ep0k._.js +3 -0
  267. package/app/.next/server/chunks/_0061c2q._.js +48 -1
  268. package/app/.next/server/chunks/_04e2bgj._.js +3 -0
  269. package/app/.next/server/chunks/_05po7b4._.js +3 -0
  270. package/app/.next/server/chunks/_06sxx0e._.js +3 -0
  271. package/app/.next/server/chunks/_0a2do3x._.js +1 -1
  272. package/app/.next/server/chunks/_0ar2ooe._.js +3 -0
  273. package/app/.next/server/chunks/_0fmotaz._.js +3 -0
  274. package/app/.next/server/chunks/_0kpfto_._.js +3 -0
  275. package/app/.next/server/chunks/_0lm6uis._.js +3 -0
  276. package/app/.next/server/chunks/_0mpu5tl._.js +3 -0
  277. package/app/.next/server/chunks/_0qv-4by._.js +3 -0
  278. package/app/.next/server/chunks/_0u9cfq9._.js +3 -0
  279. package/app/.next/server/chunks/_0ul8k7g._.js +3 -0
  280. package/app/.next/server/chunks/_1-5mthb._.js +1 -1
  281. package/app/.next/server/chunks/_1-60d3o._.js +3 -0
  282. package/app/.next/server/chunks/_133y3b0._.js +3 -0
  283. package/app/.next/server/chunks/_167960a._.js +3 -0
  284. package/app/.next/server/chunks/_17vgjlt._.js +3 -0
  285. package/app/.next/server/chunks/_1amx9_4._.js +3 -0
  286. package/app/.next/server/chunks/_1b01v-_._.js +3 -0
  287. package/app/.next/server/chunks/_1c-g4gq._.js +3 -0
  288. package/app/.next/server/chunks/_1ey6l4p._.js +3 -0
  289. package/app/.next/server/chunks/_1nlg4x_._.js +3 -0
  290. package/app/.next/server/chunks/_1x4dqzv._.js +3 -0
  291. package/app/.next/server/chunks/_1z0qbzc._.js +3 -0
  292. package/app/.next/server/chunks/_next-internal_server_app_api_bots_[id]_share-policy_route_actions_0x-p250.js +3 -0
  293. package/app/.next/server/chunks/_next-internal_server_app_api_shares_[shareRef]_revoke_route_actions_1cu5kah.js +3 -0
  294. package/app/.next/server/chunks/_next-internal_server_app_api_shares_route_actions_0wk7x1r.js +3 -0
  295. package/app/.next/server/chunks/_next-internal_server_app_api_v0_sessions_[ref]_shares_route_actions_11fh--7.js +3 -0
  296. package/app/.next/server/chunks/_next-internal_server_app_api_v0_shares_[shareRef]_revoke_route_actions_00rzyj9.js +3 -0
  297. package/app/.next/server/chunks/_next-internal_server_app_api_v0_shares_[shareRef]_route_actions_0i1t5qb.js +3 -0
  298. package/app/.next/server/chunks/_next-internal_server_app_api_v0_shares_current_route_actions_1w_bpas.js +3 -0
  299. package/app/.next/server/chunks/_next-internal_server_app_api_v0_shares_route_actions_1b38was.js +3 -0
  300. package/app/.next/server/chunks/lib_0v4d9w0._.js +339 -0
  301. package/app/.next/server/chunks/lib_0zzo6zb._.js +339 -0
  302. package/app/.next/server/chunks/lib_15adnlz._.js +2189 -0
  303. package/app/.next/server/chunks/lib_1_u7n-u._.js +339 -0
  304. package/app/.next/server/chunks/lib_1muhwn7._.js +339 -0
  305. package/app/.next/server/chunks/lib_1xnxg-q._.js +339 -0
  306. package/app/.next/server/chunks/lib_1zc7-gl._.js +2189 -0
  307. package/app/.next/server/chunks/lib_agent-api_ts_0iv52-o._.js +3 -0
  308. package/app/.next/server/chunks/{[root-of-the-server]__0izjfmr._.js → lib_db_ts_1ttuckb._.js} +3 -3
  309. package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +5 -5
  310. package/app/.next/server/chunks/lib_slack-runtime_ts_0fgsejy._.js +63 -0
  311. package/app/.next/server/chunks/ssr/{[root-of-the-server]__03186rx._.js → [root-of-the-server]__1smmfpx._.js} +1 -1
  312. package/app/.next/server/chunks/ssr/_0_fa0na._.js +3 -0
  313. package/app/.next/server/chunks/ssr/_1cvuhjt._.js +1 -1
  314. package/app/.next/server/chunks/ssr/_1i02yyi._.js +3 -0
  315. package/app/.next/server/chunks/ssr/_1n5mvo5._.js +1 -1
  316. package/app/.next/server/chunks/ssr/_1o94bnv._.js +1 -1
  317. package/app/.next/server/chunks/ssr/app_bots_[id]_config_page_tsx_1e0uue9._.js +1 -1
  318. package/app/.next/server/instrumentation.js +4 -0
  319. package/app/.next/server/middleware-build-manifest.js +3 -3
  320. package/app/.next/server/middleware.js +1 -1
  321. package/app/.next/server/pages/404.html +1 -1
  322. package/app/.next/server/pages/500.html +1 -1
  323. package/app/.next/server/server-reference-manifest.js +1 -1
  324. package/app/.next/server/server-reference-manifest.json +1 -1
  325. package/app/.next/static/chunks/{2a8bomryx66oj.css → 0jon21u-9j2aw.css} +1 -1
  326. package/app/.next/static/chunks/14k6cvywgknx2.js +3 -0
  327. package/app/.next/static/chunks/1r5tqd-7h1xjn.js +1 -0
  328. package/app/.next/static/chunks/22xbkclbkct3s.js +1 -0
  329. package/app/.next/static/chunks/2c953okoei6ip.js +1 -0
  330. package/app/.next/static/chunks/2t_2gf3xoxz_m.js +1 -0
  331. package/app/.next/static/chunks/34vnvo1qssbaj.js +1 -0
  332. package/app/BUILD_INFO.json +2 -2
  333. package/app/node_modules/@slack/logger/dist/index.js +94 -0
  334. package/app/node_modules/@slack/logger/package.json +43 -0
  335. package/app/node_modules/@slack/socket-mode/dist/package.json +67 -0
  336. package/app/node_modules/@slack/socket-mode/dist/src/SlackWebSocket.js +242 -0
  337. package/app/node_modules/@slack/socket-mode/dist/src/SocketModeClient.js +363 -0
  338. package/app/node_modules/@slack/socket-mode/dist/src/UnrecoverableSocketModeStartError.js +14 -0
  339. package/app/node_modules/@slack/socket-mode/dist/src/errors.js +68 -0
  340. package/app/node_modules/@slack/socket-mode/dist/src/index.js +13 -0
  341. package/app/node_modules/@slack/socket-mode/dist/src/logger.js +26 -0
  342. package/app/node_modules/@slack/socket-mode/package.json +67 -0
  343. package/app/node_modules/@slack/types/dist/block-kit/block-elements.js +4 -0
  344. package/app/node_modules/@slack/types/dist/block-kit/blocks.js +3 -0
  345. package/app/node_modules/@slack/types/dist/block-kit/composition-objects.js +4 -0
  346. package/app/node_modules/@slack/types/dist/block-kit/extensions.js +3 -0
  347. package/app/node_modules/@slack/types/dist/calls.js +6 -0
  348. package/app/node_modules/@slack/types/dist/chunk.js +3 -0
  349. package/app/node_modules/@slack/types/dist/dialog.js +3 -0
  350. package/app/node_modules/@slack/types/dist/events/app.js +3 -0
  351. package/app/node_modules/@slack/types/dist/events/assistant.js +3 -0
  352. package/app/node_modules/@slack/types/dist/events/call.js +3 -0
  353. package/app/node_modules/@slack/types/dist/events/channel.js +3 -0
  354. package/app/node_modules/@slack/types/dist/events/dnd.js +3 -0
  355. package/app/node_modules/@slack/types/dist/events/email.js +3 -0
  356. package/app/node_modules/@slack/types/dist/events/emoji.js +3 -0
  357. package/app/node_modules/@slack/types/dist/events/file.js +4 -0
  358. package/app/node_modules/@slack/types/dist/events/function.js +3 -0
  359. package/app/node_modules/@slack/types/dist/events/grid-migration.js +3 -0
  360. package/app/node_modules/@slack/types/dist/events/group.js +3 -0
  361. package/app/node_modules/@slack/types/dist/events/im.js +3 -0
  362. package/app/node_modules/@slack/types/dist/events/index.js +43 -0
  363. package/app/node_modules/@slack/types/dist/events/invite.js +3 -0
  364. package/app/node_modules/@slack/types/dist/events/link-shared.js +3 -0
  365. package/app/node_modules/@slack/types/dist/events/member.js +3 -0
  366. package/app/node_modules/@slack/types/dist/events/message-metadata.js +3 -0
  367. package/app/node_modules/@slack/types/dist/events/message.js +3 -0
  368. package/app/node_modules/@slack/types/dist/events/pin.js +3 -0
  369. package/app/node_modules/@slack/types/dist/events/reaction.js +3 -0
  370. package/app/node_modules/@slack/types/dist/events/shared-channel.js +3 -0
  371. package/app/node_modules/@slack/types/dist/events/star.js +3 -0
  372. package/app/node_modules/@slack/types/dist/events/steps-from-apps.js +3 -0
  373. package/app/node_modules/@slack/types/dist/events/subteam.js +3 -0
  374. package/app/node_modules/@slack/types/dist/events/team.js +3 -0
  375. package/app/node_modules/@slack/types/dist/events/token.js +3 -0
  376. package/app/node_modules/@slack/types/dist/events/user.js +3 -0
  377. package/app/node_modules/@slack/types/dist/index.js +28 -0
  378. package/app/node_modules/@slack/types/dist/message-attachments.js +3 -0
  379. package/app/node_modules/@slack/types/dist/message-metadata.js +27 -0
  380. package/app/node_modules/@slack/types/dist/views.js +3 -0
  381. package/app/node_modules/@slack/types/package.json +47 -0
  382. package/app/node_modules/@slack/web-api/dist/WebClient.js +818 -0
  383. package/app/node_modules/@slack/web-api/dist/chat-stream.js +178 -0
  384. package/app/node_modules/@slack/web-api/dist/errors.js +80 -0
  385. package/app/node_modules/@slack/web-api/dist/file-upload.js +360 -0
  386. package/app/node_modules/@slack/web-api/dist/helpers.js +14 -0
  387. package/app/node_modules/@slack/web-api/dist/index.js +39 -0
  388. package/app/node_modules/@slack/web-api/dist/instrument.js +87 -0
  389. package/app/node_modules/@slack/web-api/dist/logger.js +29 -0
  390. package/app/node_modules/@slack/web-api/dist/methods.js +1647 -0
  391. package/app/node_modules/@slack/web-api/dist/retry-policies.js +34 -0
  392. package/app/node_modules/@slack/web-api/dist/types/helpers.js +3 -0
  393. package/app/node_modules/@slack/web-api/dist/types/request/admin/analytics.js +3 -0
  394. package/app/node_modules/@slack/web-api/dist/types/request/admin/apps.js +3 -0
  395. package/app/node_modules/@slack/web-api/dist/types/request/admin/auth.js +3 -0
  396. package/app/node_modules/@slack/web-api/dist/types/request/admin/barriers.js +3 -0
  397. package/app/node_modules/@slack/web-api/dist/types/request/admin/conversations.js +3 -0
  398. package/app/node_modules/@slack/web-api/dist/types/request/admin/emoji.js +3 -0
  399. package/app/node_modules/@slack/web-api/dist/types/request/admin/functions.js +3 -0
  400. package/app/node_modules/@slack/web-api/dist/types/request/admin/inviteRequests.js +3 -0
  401. package/app/node_modules/@slack/web-api/dist/types/request/admin/roles.js +3 -0
  402. package/app/node_modules/@slack/web-api/dist/types/request/admin/teams.js +3 -0
  403. package/app/node_modules/@slack/web-api/dist/types/request/admin/usergroups.js +3 -0
  404. package/app/node_modules/@slack/web-api/dist/types/request/admin/users.js +3 -0
  405. package/app/node_modules/@slack/web-api/dist/types/request/admin/workflows.js +3 -0
  406. package/app/node_modules/@slack/web-api/dist/types/request/api.js +3 -0
  407. package/app/node_modules/@slack/web-api/dist/types/request/apps.js +3 -0
  408. package/app/node_modules/@slack/web-api/dist/types/request/assistant.js +3 -0
  409. package/app/node_modules/@slack/web-api/dist/types/request/auth.js +3 -0
  410. package/app/node_modules/@slack/web-api/dist/types/request/bookmarks.js +3 -0
  411. package/app/node_modules/@slack/web-api/dist/types/request/bots.js +3 -0
  412. package/app/node_modules/@slack/web-api/dist/types/request/calls.js +3 -0
  413. package/app/node_modules/@slack/web-api/dist/types/request/canvas.js +3 -0
  414. package/app/node_modules/@slack/web-api/dist/types/request/chat.js +3 -0
  415. package/app/node_modules/@slack/web-api/dist/types/request/common.js +4 -0
  416. package/app/node_modules/@slack/web-api/dist/types/request/conversations.js +3 -0
  417. package/app/node_modules/@slack/web-api/dist/types/request/dialog.js +3 -0
  418. package/app/node_modules/@slack/web-api/dist/types/request/dnd.js +3 -0
  419. package/app/node_modules/@slack/web-api/dist/types/request/emoji.js +3 -0
  420. package/app/node_modules/@slack/web-api/dist/types/request/entity.js +3 -0
  421. package/app/node_modules/@slack/web-api/dist/types/request/files.js +3 -0
  422. package/app/node_modules/@slack/web-api/dist/types/request/functions.js +3 -0
  423. package/app/node_modules/@slack/web-api/dist/types/request/index.js +3 -0
  424. package/app/node_modules/@slack/web-api/dist/types/request/manifest.js +3 -0
  425. package/app/node_modules/@slack/web-api/dist/types/request/migration.js +3 -0
  426. package/app/node_modules/@slack/web-api/dist/types/request/oauth.js +3 -0
  427. package/app/node_modules/@slack/web-api/dist/types/request/openid.js +3 -0
  428. package/app/node_modules/@slack/web-api/dist/types/request/pins.js +3 -0
  429. package/app/node_modules/@slack/web-api/dist/types/request/reactions.js +3 -0
  430. package/app/node_modules/@slack/web-api/dist/types/request/reminders.js +3 -0
  431. package/app/node_modules/@slack/web-api/dist/types/request/rtm.js +3 -0
  432. package/app/node_modules/@slack/web-api/dist/types/request/search.js +3 -0
  433. package/app/node_modules/@slack/web-api/dist/types/request/slackLists.js +3 -0
  434. package/app/node_modules/@slack/web-api/dist/types/request/stars.js +3 -0
  435. package/app/node_modules/@slack/web-api/dist/types/request/team.js +3 -0
  436. package/app/node_modules/@slack/web-api/dist/types/request/tooling.js +3 -0
  437. package/app/node_modules/@slack/web-api/dist/types/request/usergroups.js +3 -0
  438. package/app/node_modules/@slack/web-api/dist/types/request/users.js +3 -0
  439. package/app/node_modules/@slack/web-api/dist/types/request/views.js +3 -0
  440. package/app/node_modules/@slack/web-api/dist/types/request/workflows.js +3 -0
  441. package/app/node_modules/@slack/web-api/dist/types/response/AdminAnalyticsGetFileResponse.js +3 -0
  442. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsActivitiesListResponse.js +11 -0
  443. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsApproveResponse.js +11 -0
  444. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsApprovedListResponse.js +11 -0
  445. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsClearResolutionResponse.js +11 -0
  446. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsConfigLookupResponse.js +11 -0
  447. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsConfigSetResponse.js +11 -0
  448. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsRequestsCancelResponse.js +11 -0
  449. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsRequestsListResponse.js +11 -0
  450. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsRestrictResponse.js +11 -0
  451. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsRestrictedListResponse.js +11 -0
  452. package/app/node_modules/@slack/web-api/dist/types/response/AdminAppsUninstallResponse.js +11 -0
  453. package/app/node_modules/@slack/web-api/dist/types/response/AdminAuthPolicyAssignEntitiesResponse.js +11 -0
  454. package/app/node_modules/@slack/web-api/dist/types/response/AdminAuthPolicyGetEntitiesResponse.js +11 -0
  455. package/app/node_modules/@slack/web-api/dist/types/response/AdminAuthPolicyRemoveEntitiesResponse.js +11 -0
  456. package/app/node_modules/@slack/web-api/dist/types/response/AdminBarriersCreateResponse.js +11 -0
  457. package/app/node_modules/@slack/web-api/dist/types/response/AdminBarriersDeleteResponse.js +11 -0
  458. package/app/node_modules/@slack/web-api/dist/types/response/AdminBarriersListResponse.js +11 -0
  459. package/app/node_modules/@slack/web-api/dist/types/response/AdminBarriersUpdateResponse.js +11 -0
  460. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsArchiveResponse.js +11 -0
  461. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsBulkArchiveResponse.js +11 -0
  462. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsBulkDeleteResponse.js +11 -0
  463. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsBulkMoveResponse.js +11 -0
  464. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsConvertToPrivateResponse.js +11 -0
  465. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsConvertToPublicResponse.js +11 -0
  466. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsCreateResponse.js +11 -0
  467. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsDeleteResponse.js +11 -0
  468. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsDisconnectSharedResponse.js +11 -0
  469. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsEkmListOriginalConnectedChannelInfoResponse.js +11 -0
  470. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsGetConversationPrefsResponse.js +11 -0
  471. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsGetCustomRetentionResponse.js +11 -0
  472. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsGetTeamsResponse.js +11 -0
  473. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsInviteResponse.js +11 -0
  474. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsLookupResponse.js +11 -0
  475. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsRemoveCustomRetentionResponse.js +11 -0
  476. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsRenameResponse.js +11 -0
  477. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsRestrictAccessAddGroupResponse.js +11 -0
  478. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsRestrictAccessListGroupsResponse.js +11 -0
  479. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsRestrictAccessRemoveGroupResponse.js +11 -0
  480. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsSearchResponse.js +11 -0
  481. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsSetConversationPrefsResponse.js +11 -0
  482. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsSetCustomRetentionResponse.js +11 -0
  483. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsSetTeamsResponse.js +11 -0
  484. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsUnarchiveResponse.js +11 -0
  485. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsWhitelistAddResponse.js +11 -0
  486. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsWhitelistListGroupsLinkedToChannelResponse.js +11 -0
  487. package/app/node_modules/@slack/web-api/dist/types/response/AdminConversationsWhitelistRemoveResponse.js +11 -0
  488. package/app/node_modules/@slack/web-api/dist/types/response/AdminEmojiAddAliasResponse.js +11 -0
  489. package/app/node_modules/@slack/web-api/dist/types/response/AdminEmojiAddResponse.js +11 -0
  490. package/app/node_modules/@slack/web-api/dist/types/response/AdminEmojiListResponse.js +11 -0
  491. package/app/node_modules/@slack/web-api/dist/types/response/AdminEmojiRemoveResponse.js +11 -0
  492. package/app/node_modules/@slack/web-api/dist/types/response/AdminEmojiRenameResponse.js +11 -0
  493. package/app/node_modules/@slack/web-api/dist/types/response/AdminFunctionsListResponse.js +11 -0
  494. package/app/node_modules/@slack/web-api/dist/types/response/AdminFunctionsPermissionsLookupResponse.js +11 -0
  495. package/app/node_modules/@slack/web-api/dist/types/response/AdminFunctionsPermissionsSetResponse.js +11 -0
  496. package/app/node_modules/@slack/web-api/dist/types/response/AdminInviteRequestsApproveResponse.js +11 -0
  497. package/app/node_modules/@slack/web-api/dist/types/response/AdminInviteRequestsApprovedListResponse.js +11 -0
  498. package/app/node_modules/@slack/web-api/dist/types/response/AdminInviteRequestsDeniedListResponse.js +11 -0
  499. package/app/node_modules/@slack/web-api/dist/types/response/AdminInviteRequestsDenyResponse.js +11 -0
  500. package/app/node_modules/@slack/web-api/dist/types/response/AdminInviteRequestsListResponse.js +11 -0
  501. package/app/node_modules/@slack/web-api/dist/types/response/AdminRolesAddAssignmentsResponse.js +11 -0
  502. package/app/node_modules/@slack/web-api/dist/types/response/AdminRolesListAssignmentsResponse.js +11 -0
  503. package/app/node_modules/@slack/web-api/dist/types/response/AdminRolesRemoveAssignmentsResponse.js +11 -0
  504. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsAdminsListResponse.js +11 -0
  505. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsCreateResponse.js +11 -0
  506. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsListResponse.js +11 -0
  507. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsOwnersListResponse.js +11 -0
  508. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsInfoResponse.js +11 -0
  509. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsSetDefaultChannelsResponse.js +11 -0
  510. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsSetDescriptionResponse.js +11 -0
  511. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsSetDiscoverabilityResponse.js +11 -0
  512. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsSetIconResponse.js +11 -0
  513. package/app/node_modules/@slack/web-api/dist/types/response/AdminTeamsSettingsSetNameResponse.js +11 -0
  514. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsergroupsAddChannelsResponse.js +11 -0
  515. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsergroupsAddTeamsResponse.js +11 -0
  516. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsergroupsListChannelsResponse.js +11 -0
  517. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsergroupsRemoveChannelsResponse.js +11 -0
  518. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersAssignResponse.js +11 -0
  519. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersInviteResponse.js +11 -0
  520. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersListResponse.js +11 -0
  521. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersRemoveResponse.js +11 -0
  522. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionClearSettingsResponse.js +11 -0
  523. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionGetSettingsResponse.js +11 -0
  524. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionInvalidateResponse.js +11 -0
  525. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionListResponse.js +11 -0
  526. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionResetBulkResponse.js +11 -0
  527. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionResetResponse.js +11 -0
  528. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSessionSetSettingsResponse.js +11 -0
  529. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSetAdminResponse.js +11 -0
  530. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSetExpirationResponse.js +11 -0
  531. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSetOwnerResponse.js +11 -0
  532. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersSetRegularResponse.js +11 -0
  533. package/app/node_modules/@slack/web-api/dist/types/response/AdminUsersUnsupportedVersionsExportResponse.js +11 -0
  534. package/app/node_modules/@slack/web-api/dist/types/response/AdminWorkflowsCollaboratorsAddResponse.js +11 -0
  535. package/app/node_modules/@slack/web-api/dist/types/response/AdminWorkflowsCollaboratorsRemoveResponse.js +11 -0
  536. package/app/node_modules/@slack/web-api/dist/types/response/AdminWorkflowsPermissionsLookupResponse.js +11 -0
  537. package/app/node_modules/@slack/web-api/dist/types/response/AdminWorkflowsSearchResponse.js +11 -0
  538. package/app/node_modules/@slack/web-api/dist/types/response/AdminWorkflowsUnpublishResponse.js +11 -0
  539. package/app/node_modules/@slack/web-api/dist/types/response/ApiTestResponse.js +11 -0
  540. package/app/node_modules/@slack/web-api/dist/types/response/AppsConnectionsOpenResponse.js +11 -0
  541. package/app/node_modules/@slack/web-api/dist/types/response/AppsEventAuthorizationsListResponse.js +11 -0
  542. package/app/node_modules/@slack/web-api/dist/types/response/AppsManifestCreateResponse.js +11 -0
  543. package/app/node_modules/@slack/web-api/dist/types/response/AppsManifestDeleteResponse.js +11 -0
  544. package/app/node_modules/@slack/web-api/dist/types/response/AppsManifestExportResponse.js +11 -0
  545. package/app/node_modules/@slack/web-api/dist/types/response/AppsManifestUpdateResponse.js +11 -0
  546. package/app/node_modules/@slack/web-api/dist/types/response/AppsManifestValidateResponse.js +11 -0
  547. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsInfoResponse.js +11 -0
  548. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsRequestResponse.js +11 -0
  549. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsResourcesListResponse.js +11 -0
  550. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsScopesListResponse.js +11 -0
  551. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsUsersListResponse.js +11 -0
  552. package/app/node_modules/@slack/web-api/dist/types/response/AppsPermissionsUsersRequestResponse.js +11 -0
  553. package/app/node_modules/@slack/web-api/dist/types/response/AppsUninstallResponse.js +11 -0
  554. package/app/node_modules/@slack/web-api/dist/types/response/AppsUserConnectionUpdateResponse.js +11 -0
  555. package/app/node_modules/@slack/web-api/dist/types/response/AssistantThreadsSetStatusResponse.js +11 -0
  556. package/app/node_modules/@slack/web-api/dist/types/response/AssistantThreadsSetSuggestedPromptsResponse.js +11 -0
  557. package/app/node_modules/@slack/web-api/dist/types/response/AssistantThreadsSetTitleResponse.js +11 -0
  558. package/app/node_modules/@slack/web-api/dist/types/response/AuthRevokeResponse.js +11 -0
  559. package/app/node_modules/@slack/web-api/dist/types/response/AuthTeamsListResponse.js +11 -0
  560. package/app/node_modules/@slack/web-api/dist/types/response/AuthTestResponse.js +11 -0
  561. package/app/node_modules/@slack/web-api/dist/types/response/BookmarksAddResponse.js +11 -0
  562. package/app/node_modules/@slack/web-api/dist/types/response/BookmarksEditResponse.js +11 -0
  563. package/app/node_modules/@slack/web-api/dist/types/response/BookmarksListResponse.js +11 -0
  564. package/app/node_modules/@slack/web-api/dist/types/response/BookmarksRemoveResponse.js +11 -0
  565. package/app/node_modules/@slack/web-api/dist/types/response/BotsInfoResponse.js +11 -0
  566. package/app/node_modules/@slack/web-api/dist/types/response/CallsAddResponse.js +11 -0
  567. package/app/node_modules/@slack/web-api/dist/types/response/CallsEndResponse.js +11 -0
  568. package/app/node_modules/@slack/web-api/dist/types/response/CallsInfoResponse.js +11 -0
  569. package/app/node_modules/@slack/web-api/dist/types/response/CallsParticipantsAddResponse.js +11 -0
  570. package/app/node_modules/@slack/web-api/dist/types/response/CallsParticipantsRemoveResponse.js +11 -0
  571. package/app/node_modules/@slack/web-api/dist/types/response/CallsUpdateResponse.js +11 -0
  572. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesAccessDeleteResponse.js +11 -0
  573. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesAccessSetResponse.js +11 -0
  574. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesCreateResponse.js +11 -0
  575. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesDeleteResponse.js +11 -0
  576. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesEditResponse.js +11 -0
  577. package/app/node_modules/@slack/web-api/dist/types/response/CanvasesSectionsLookupResponse.js +11 -0
  578. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsArchiveResponse.js +11 -0
  579. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsCreateResponse.js +11 -0
  580. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsHistoryResponse.js +11 -0
  581. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsInfoResponse.js +11 -0
  582. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsInviteResponse.js +11 -0
  583. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsJoinResponse.js +11 -0
  584. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsKickResponse.js +11 -0
  585. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsLeaveResponse.js +11 -0
  586. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsListResponse.js +11 -0
  587. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsMarkResponse.js +11 -0
  588. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsRenameResponse.js +11 -0
  589. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsRepliesResponse.js +11 -0
  590. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsSetPurposeResponse.js +11 -0
  591. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsSetTopicResponse.js +11 -0
  592. package/app/node_modules/@slack/web-api/dist/types/response/ChannelsUnarchiveResponse.js +11 -0
  593. package/app/node_modules/@slack/web-api/dist/types/response/ChatAppendStreamResponse.js +3 -0
  594. package/app/node_modules/@slack/web-api/dist/types/response/ChatDeleteResponse.js +11 -0
  595. package/app/node_modules/@slack/web-api/dist/types/response/ChatDeleteScheduledMessageResponse.js +11 -0
  596. package/app/node_modules/@slack/web-api/dist/types/response/ChatGetPermalinkResponse.js +11 -0
  597. package/app/node_modules/@slack/web-api/dist/types/response/ChatMeMessageResponse.js +11 -0
  598. package/app/node_modules/@slack/web-api/dist/types/response/ChatPostEphemeralResponse.js +11 -0
  599. package/app/node_modules/@slack/web-api/dist/types/response/ChatPostMessageResponse.js +67 -0
  600. package/app/node_modules/@slack/web-api/dist/types/response/ChatScheduleMessageResponse.js +48 -0
  601. package/app/node_modules/@slack/web-api/dist/types/response/ChatScheduledMessagesListResponse.js +11 -0
  602. package/app/node_modules/@slack/web-api/dist/types/response/ChatStartStreamResponse.js +3 -0
  603. package/app/node_modules/@slack/web-api/dist/types/response/ChatStopStreamResponse.js +3 -0
  604. package/app/node_modules/@slack/web-api/dist/types/response/ChatUnfurlResponse.js +11 -0
  605. package/app/node_modules/@slack/web-api/dist/types/response/ChatUpdateResponse.js +48 -0
  606. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsAcceptSharedInviteResponse.js +11 -0
  607. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsApproveSharedInviteResponse.js +11 -0
  608. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsArchiveResponse.js +11 -0
  609. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsCanvasesCreateResponse.js +11 -0
  610. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsCloseResponse.js +11 -0
  611. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsCreateResponse.js +11 -0
  612. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsDeclineSharedInviteResponse.js +11 -0
  613. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsExternalInvitePermissionsSetResponse.js +11 -0
  614. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsHistoryResponse.js +67 -0
  615. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsInfoResponse.js +11 -0
  616. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsInviteResponse.js +11 -0
  617. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsInviteSharedResponse.js +11 -0
  618. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsJoinResponse.js +11 -0
  619. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsKickResponse.js +11 -0
  620. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsLeaveResponse.js +11 -0
  621. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsListConnectInvitesResponse.js +11 -0
  622. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsListResponse.js +11 -0
  623. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsMarkResponse.js +11 -0
  624. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsMembersResponse.js +11 -0
  625. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsOpenResponse.js +48 -0
  626. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsRenameResponse.js +11 -0
  627. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsRepliesResponse.js +67 -0
  628. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsRequestSharedInviteApproveResponse.js +11 -0
  629. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsRequestSharedInviteDenyResponse.js +11 -0
  630. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsRequestSharedInviteListResponse.js +11 -0
  631. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsSetPurposeResponse.js +11 -0
  632. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsSetTopicResponse.js +11 -0
  633. package/app/node_modules/@slack/web-api/dist/types/response/ConversationsUnarchiveResponse.js +11 -0
  634. package/app/node_modules/@slack/web-api/dist/types/response/DialogOpenResponse.js +11 -0
  635. package/app/node_modules/@slack/web-api/dist/types/response/DndEndDndResponse.js +11 -0
  636. package/app/node_modules/@slack/web-api/dist/types/response/DndEndSnoozeResponse.js +11 -0
  637. package/app/node_modules/@slack/web-api/dist/types/response/DndInfoResponse.js +11 -0
  638. package/app/node_modules/@slack/web-api/dist/types/response/DndSetSnoozeResponse.js +11 -0
  639. package/app/node_modules/@slack/web-api/dist/types/response/DndTeamInfoResponse.js +11 -0
  640. package/app/node_modules/@slack/web-api/dist/types/response/EmojiListResponse.js +11 -0
  641. package/app/node_modules/@slack/web-api/dist/types/response/EntityPresentDetailsResponse.js +11 -0
  642. package/app/node_modules/@slack/web-api/dist/types/response/FilesCommentsAddResponse.js +11 -0
  643. package/app/node_modules/@slack/web-api/dist/types/response/FilesCommentsDeleteResponse.js +11 -0
  644. package/app/node_modules/@slack/web-api/dist/types/response/FilesCommentsEditResponse.js +11 -0
  645. package/app/node_modules/@slack/web-api/dist/types/response/FilesCompleteUploadExternalResponse.js +11 -0
  646. package/app/node_modules/@slack/web-api/dist/types/response/FilesDeleteResponse.js +11 -0
  647. package/app/node_modules/@slack/web-api/dist/types/response/FilesGetUploadURLExternalResponse.js +11 -0
  648. package/app/node_modules/@slack/web-api/dist/types/response/FilesInfoResponse.js +37 -0
  649. package/app/node_modules/@slack/web-api/dist/types/response/FilesListResponse.js +37 -0
  650. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteAddResponse.js +37 -0
  651. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteInfoResponse.js +37 -0
  652. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteListResponse.js +37 -0
  653. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteRemoveResponse.js +11 -0
  654. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteShareResponse.js +37 -0
  655. package/app/node_modules/@slack/web-api/dist/types/response/FilesRemoteUpdateResponse.js +37 -0
  656. package/app/node_modules/@slack/web-api/dist/types/response/FilesRevokePublicURLResponse.js +37 -0
  657. package/app/node_modules/@slack/web-api/dist/types/response/FilesSharedPublicURLResponse.js +37 -0
  658. package/app/node_modules/@slack/web-api/dist/types/response/FilesUploadResponse.js +37 -0
  659. package/app/node_modules/@slack/web-api/dist/types/response/FunctionsCompleteErrorResponse.js +11 -0
  660. package/app/node_modules/@slack/web-api/dist/types/response/FunctionsCompleteSuccessResponse.js +11 -0
  661. package/app/node_modules/@slack/web-api/dist/types/response/GroupsArchiveResponse.js +11 -0
  662. package/app/node_modules/@slack/web-api/dist/types/response/GroupsCloseResponse.js +11 -0
  663. package/app/node_modules/@slack/web-api/dist/types/response/GroupsCreateChildResponse.js +11 -0
  664. package/app/node_modules/@slack/web-api/dist/types/response/GroupsCreateResponse.js +11 -0
  665. package/app/node_modules/@slack/web-api/dist/types/response/GroupsHistoryResponse.js +11 -0
  666. package/app/node_modules/@slack/web-api/dist/types/response/GroupsInfoResponse.js +11 -0
  667. package/app/node_modules/@slack/web-api/dist/types/response/GroupsInviteResponse.js +11 -0
  668. package/app/node_modules/@slack/web-api/dist/types/response/GroupsKickResponse.js +11 -0
  669. package/app/node_modules/@slack/web-api/dist/types/response/GroupsLeaveResponse.js +11 -0
  670. package/app/node_modules/@slack/web-api/dist/types/response/GroupsListResponse.js +11 -0
  671. package/app/node_modules/@slack/web-api/dist/types/response/GroupsMarkResponse.js +11 -0
  672. package/app/node_modules/@slack/web-api/dist/types/response/GroupsOpenResponse.js +11 -0
  673. package/app/node_modules/@slack/web-api/dist/types/response/GroupsRenameResponse.js +11 -0
  674. package/app/node_modules/@slack/web-api/dist/types/response/GroupsRepliesResponse.js +11 -0
  675. package/app/node_modules/@slack/web-api/dist/types/response/GroupsSetPurposeResponse.js +11 -0
  676. package/app/node_modules/@slack/web-api/dist/types/response/GroupsSetTopicResponse.js +11 -0
  677. package/app/node_modules/@slack/web-api/dist/types/response/GroupsUnarchiveResponse.js +11 -0
  678. package/app/node_modules/@slack/web-api/dist/types/response/ImCloseResponse.js +11 -0
  679. package/app/node_modules/@slack/web-api/dist/types/response/ImHistoryResponse.js +11 -0
  680. package/app/node_modules/@slack/web-api/dist/types/response/ImListResponse.js +11 -0
  681. package/app/node_modules/@slack/web-api/dist/types/response/ImMarkResponse.js +11 -0
  682. package/app/node_modules/@slack/web-api/dist/types/response/ImOpenResponse.js +11 -0
  683. package/app/node_modules/@slack/web-api/dist/types/response/ImRepliesResponse.js +11 -0
  684. package/app/node_modules/@slack/web-api/dist/types/response/MigrationExchangeResponse.js +11 -0
  685. package/app/node_modules/@slack/web-api/dist/types/response/MpimCloseResponse.js +11 -0
  686. package/app/node_modules/@slack/web-api/dist/types/response/MpimHistoryResponse.js +11 -0
  687. package/app/node_modules/@slack/web-api/dist/types/response/MpimListResponse.js +11 -0
  688. package/app/node_modules/@slack/web-api/dist/types/response/MpimMarkResponse.js +11 -0
  689. package/app/node_modules/@slack/web-api/dist/types/response/MpimOpenResponse.js +11 -0
  690. package/app/node_modules/@slack/web-api/dist/types/response/MpimRepliesResponse.js +11 -0
  691. package/app/node_modules/@slack/web-api/dist/types/response/OauthAccessResponse.js +11 -0
  692. package/app/node_modules/@slack/web-api/dist/types/response/OauthTokenResponse.js +11 -0
  693. package/app/node_modules/@slack/web-api/dist/types/response/OauthV2AccessResponse.js +11 -0
  694. package/app/node_modules/@slack/web-api/dist/types/response/OauthV2ExchangeResponse.js +11 -0
  695. package/app/node_modules/@slack/web-api/dist/types/response/OpenIDConnectTokenResponse.js +11 -0
  696. package/app/node_modules/@slack/web-api/dist/types/response/OpenIDConnectUserInfoResponse.js +11 -0
  697. package/app/node_modules/@slack/web-api/dist/types/response/PinsAddResponse.js +11 -0
  698. package/app/node_modules/@slack/web-api/dist/types/response/PinsListResponse.js +37 -0
  699. package/app/node_modules/@slack/web-api/dist/types/response/PinsRemoveResponse.js +11 -0
  700. package/app/node_modules/@slack/web-api/dist/types/response/ReactionsAddResponse.js +11 -0
  701. package/app/node_modules/@slack/web-api/dist/types/response/ReactionsGetResponse.js +48 -0
  702. package/app/node_modules/@slack/web-api/dist/types/response/ReactionsListResponse.js +67 -0
  703. package/app/node_modules/@slack/web-api/dist/types/response/ReactionsRemoveResponse.js +11 -0
  704. package/app/node_modules/@slack/web-api/dist/types/response/RemindersAddResponse.js +11 -0
  705. package/app/node_modules/@slack/web-api/dist/types/response/RemindersCompleteResponse.js +11 -0
  706. package/app/node_modules/@slack/web-api/dist/types/response/RemindersDeleteResponse.js +11 -0
  707. package/app/node_modules/@slack/web-api/dist/types/response/RemindersInfoResponse.js +11 -0
  708. package/app/node_modules/@slack/web-api/dist/types/response/RemindersListResponse.js +11 -0
  709. package/app/node_modules/@slack/web-api/dist/types/response/RtmConnectResponse.js +11 -0
  710. package/app/node_modules/@slack/web-api/dist/types/response/RtmStartResponse.js +77 -0
  711. package/app/node_modules/@slack/web-api/dist/types/response/SearchAllResponse.js +82 -0
  712. package/app/node_modules/@slack/web-api/dist/types/response/SearchFilesResponse.js +63 -0
  713. package/app/node_modules/@slack/web-api/dist/types/response/SearchMessagesResponse.js +67 -0
  714. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsAccessDeleteResponse.js +3 -0
  715. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsAccessSetResponse.js +3 -0
  716. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsCreateResponse.js +3 -0
  717. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsDownloadGetResponse.js +3 -0
  718. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsDownloadStartResponse.js +3 -0
  719. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsCreateResponse.js +3 -0
  720. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsDeleteMultipleResponse.js +3 -0
  721. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsDeleteResponse.js +3 -0
  722. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsInfoResponse.js +3 -0
  723. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsListResponse.js +3 -0
  724. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsItemsUpdateResponse.js +3 -0
  725. package/app/node_modules/@slack/web-api/dist/types/response/SlackListsUpdateResponse.js +3 -0
  726. package/app/node_modules/@slack/web-api/dist/types/response/StarsAddResponse.js +11 -0
  727. package/app/node_modules/@slack/web-api/dist/types/response/StarsListResponse.js +11 -0
  728. package/app/node_modules/@slack/web-api/dist/types/response/StarsRemoveResponse.js +11 -0
  729. package/app/node_modules/@slack/web-api/dist/types/response/TeamAccessLogsResponse.js +11 -0
  730. package/app/node_modules/@slack/web-api/dist/types/response/TeamBillableInfoResponse.js +11 -0
  731. package/app/node_modules/@slack/web-api/dist/types/response/TeamBillingInfoResponse.js +11 -0
  732. package/app/node_modules/@slack/web-api/dist/types/response/TeamExternalTeamsDisconnectResponse.js +11 -0
  733. package/app/node_modules/@slack/web-api/dist/types/response/TeamExternalTeamsListResponse.js +11 -0
  734. package/app/node_modules/@slack/web-api/dist/types/response/TeamInfoResponse.js +11 -0
  735. package/app/node_modules/@slack/web-api/dist/types/response/TeamIntegrationLogsResponse.js +11 -0
  736. package/app/node_modules/@slack/web-api/dist/types/response/TeamPreferencesListResponse.js +11 -0
  737. package/app/node_modules/@slack/web-api/dist/types/response/TeamProfileGetResponse.js +11 -0
  738. package/app/node_modules/@slack/web-api/dist/types/response/ToolingTokensRotateResponse.js +11 -0
  739. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsCreateResponse.js +11 -0
  740. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsDisableResponse.js +11 -0
  741. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsEnableResponse.js +11 -0
  742. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsListResponse.js +11 -0
  743. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsUpdateResponse.js +11 -0
  744. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsUsersListResponse.js +11 -0
  745. package/app/node_modules/@slack/web-api/dist/types/response/UsergroupsUsersUpdateResponse.js +11 -0
  746. package/app/node_modules/@slack/web-api/dist/types/response/UsersConversationsResponse.js +11 -0
  747. package/app/node_modules/@slack/web-api/dist/types/response/UsersDeletePhotoResponse.js +11 -0
  748. package/app/node_modules/@slack/web-api/dist/types/response/UsersDiscoverableContactsLookupResponse.js +11 -0
  749. package/app/node_modules/@slack/web-api/dist/types/response/UsersGetPresenceResponse.js +11 -0
  750. package/app/node_modules/@slack/web-api/dist/types/response/UsersIdentityResponse.js +11 -0
  751. package/app/node_modules/@slack/web-api/dist/types/response/UsersInfoResponse.js +11 -0
  752. package/app/node_modules/@slack/web-api/dist/types/response/UsersListResponse.js +11 -0
  753. package/app/node_modules/@slack/web-api/dist/types/response/UsersLookupByEmailResponse.js +11 -0
  754. package/app/node_modules/@slack/web-api/dist/types/response/UsersProfileGetResponse.js +11 -0
  755. package/app/node_modules/@slack/web-api/dist/types/response/UsersProfileSetResponse.js +11 -0
  756. package/app/node_modules/@slack/web-api/dist/types/response/UsersSetActiveResponse.js +11 -0
  757. package/app/node_modules/@slack/web-api/dist/types/response/UsersSetPhotoResponse.js +11 -0
  758. package/app/node_modules/@slack/web-api/dist/types/response/UsersSetPresenceResponse.js +11 -0
  759. package/app/node_modules/@slack/web-api/dist/types/response/ViewsOpenResponse.js +31 -0
  760. package/app/node_modules/@slack/web-api/dist/types/response/ViewsPublishResponse.js +31 -0
  761. package/app/node_modules/@slack/web-api/dist/types/response/ViewsPushResponse.js +31 -0
  762. package/app/node_modules/@slack/web-api/dist/types/response/ViewsUpdateResponse.js +31 -0
  763. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsFeaturedAddResponse.js +3 -0
  764. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsFeaturedListResponse.js +3 -0
  765. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsFeaturedRemoveResponse.js +3 -0
  766. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsFeaturedSetResponse.js +3 -0
  767. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsStepCompletedResponse.js +11 -0
  768. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsStepFailedResponse.js +11 -0
  769. package/app/node_modules/@slack/web-api/dist/types/response/WorkflowsUpdateStepResponse.js +11 -0
  770. package/app/node_modules/@slack/web-api/dist/types/response/index.js +3 -0
  771. package/app/node_modules/@slack/web-api/package.json +75 -0
  772. package/app/node_modules/agent-base/dist/src/index.js +203 -0
  773. package/app/node_modules/agent-base/dist/src/promisify.js +18 -0
  774. package/app/node_modules/agent-base/package.json +64 -0
  775. package/app/node_modules/asynckit/index.js +6 -0
  776. package/app/node_modules/asynckit/lib/abort.js +29 -0
  777. package/app/node_modules/asynckit/lib/async.js +34 -0
  778. package/app/node_modules/asynckit/lib/defer.js +26 -0
  779. package/app/node_modules/asynckit/lib/iterate.js +75 -0
  780. package/app/node_modules/asynckit/lib/state.js +37 -0
  781. package/app/node_modules/asynckit/lib/terminator.js +29 -0
  782. package/app/node_modules/asynckit/package.json +63 -0
  783. package/app/node_modules/asynckit/parallel.js +43 -0
  784. package/app/node_modules/asynckit/serial.js +17 -0
  785. package/app/node_modules/asynckit/serialOrdered.js +75 -0
  786. package/app/node_modules/axios/dist/node/axios.cjs +6808 -0
  787. package/app/node_modules/axios/package.json +203 -0
  788. package/app/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  789. package/app/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  790. package/app/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  791. package/app/node_modules/call-bind-apply-helpers/index.js +15 -0
  792. package/app/node_modules/call-bind-apply-helpers/package.json +85 -0
  793. package/app/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  794. package/app/node_modules/combined-stream/lib/combined_stream.js +208 -0
  795. package/app/node_modules/combined-stream/package.json +25 -0
  796. package/app/node_modules/debug/package.json +64 -0
  797. package/app/node_modules/debug/src/browser.js +272 -0
  798. package/app/node_modules/debug/src/common.js +292 -0
  799. package/app/node_modules/debug/src/index.js +10 -0
  800. package/app/node_modules/debug/src/node.js +263 -0
  801. package/app/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
  802. package/app/node_modules/delayed-stream/package.json +27 -0
  803. package/app/node_modules/dunder-proto/get.js +30 -0
  804. package/app/node_modules/dunder-proto/package.json +76 -0
  805. package/app/node_modules/es-define-property/index.js +14 -0
  806. package/app/node_modules/es-define-property/package.json +81 -0
  807. package/app/node_modules/es-errors/eval.js +4 -0
  808. package/app/node_modules/es-errors/index.js +4 -0
  809. package/app/node_modules/es-errors/package.json +80 -0
  810. package/app/node_modules/es-errors/range.js +4 -0
  811. package/app/node_modules/es-errors/ref.js +4 -0
  812. package/app/node_modules/es-errors/syntax.js +4 -0
  813. package/app/node_modules/es-errors/type.js +4 -0
  814. package/app/node_modules/es-errors/uri.js +4 -0
  815. package/app/node_modules/es-object-atoms/index.js +4 -0
  816. package/app/node_modules/es-object-atoms/package.json +79 -0
  817. package/app/node_modules/es-set-tostringtag/index.js +35 -0
  818. package/app/node_modules/es-set-tostringtag/package.json +78 -0
  819. package/app/node_modules/eventemitter3/index.js +336 -0
  820. package/app/node_modules/eventemitter3/package.json +62 -0
  821. package/app/node_modules/follow-redirects/debug.js +15 -0
  822. package/app/node_modules/follow-redirects/index.js +709 -0
  823. package/app/node_modules/follow-redirects/package.json +58 -0
  824. package/app/node_modules/form-data/lib/browser.js +4 -0
  825. package/app/node_modules/form-data/lib/form_data.js +506 -0
  826. package/app/node_modules/form-data/lib/populate.js +10 -0
  827. package/app/node_modules/form-data/package.json +82 -0
  828. package/app/node_modules/function-bind/implementation.js +84 -0
  829. package/app/node_modules/function-bind/index.js +5 -0
  830. package/app/node_modules/function-bind/package.json +87 -0
  831. package/app/node_modules/get-intrinsic/index.js +378 -0
  832. package/app/node_modules/get-intrinsic/package.json +97 -0
  833. package/app/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  834. package/app/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  835. package/app/node_modules/get-proto/index.js +27 -0
  836. package/app/node_modules/get-proto/package.json +81 -0
  837. package/app/node_modules/gopd/gOPD.js +4 -0
  838. package/app/node_modules/gopd/index.js +15 -0
  839. package/app/node_modules/gopd/package.json +77 -0
  840. package/app/node_modules/has-flag/index.js +8 -0
  841. package/app/node_modules/has-flag/package.json +46 -0
  842. package/app/node_modules/has-symbols/index.js +14 -0
  843. package/app/node_modules/has-symbols/package.json +111 -0
  844. package/app/node_modules/has-symbols/shams.js +45 -0
  845. package/app/node_modules/has-tostringtag/package.json +108 -0
  846. package/app/node_modules/has-tostringtag/shams.js +8 -0
  847. package/app/node_modules/hasown/index.js +8 -0
  848. package/app/node_modules/hasown/package.json +91 -0
  849. package/app/node_modules/https-proxy-agent/dist/agent.js +177 -0
  850. package/app/node_modules/https-proxy-agent/dist/index.js +14 -0
  851. package/app/node_modules/https-proxy-agent/dist/parse-proxy-response.js +66 -0
  852. package/app/node_modules/https-proxy-agent/package.json +56 -0
  853. package/app/node_modules/is-electron/index.js +21 -0
  854. package/app/node_modules/is-electron/package.json +34 -0
  855. package/app/node_modules/is-stream/index.js +28 -0
  856. package/app/node_modules/is-stream/package.json +42 -0
  857. package/app/node_modules/math-intrinsics/abs.js +4 -0
  858. package/app/node_modules/math-intrinsics/floor.js +4 -0
  859. package/app/node_modules/math-intrinsics/isNaN.js +6 -0
  860. package/app/node_modules/math-intrinsics/max.js +4 -0
  861. package/app/node_modules/math-intrinsics/min.js +4 -0
  862. package/app/node_modules/math-intrinsics/package.json +86 -0
  863. package/app/node_modules/math-intrinsics/pow.js +4 -0
  864. package/app/node_modules/math-intrinsics/round.js +4 -0
  865. package/app/node_modules/math-intrinsics/sign.js +11 -0
  866. package/app/node_modules/mime-db/db.json +8519 -0
  867. package/app/node_modules/mime-db/index.js +12 -0
  868. package/app/node_modules/mime-db/package.json +60 -0
  869. package/app/node_modules/mime-types/index.js +188 -0
  870. package/app/node_modules/mime-types/package.json +44 -0
  871. package/app/node_modules/ms/index.js +162 -0
  872. package/app/node_modules/ms/package.json +38 -0
  873. package/app/node_modules/p-finally/index.js +15 -0
  874. package/app/node_modules/p-finally/package.json +42 -0
  875. package/app/node_modules/p-queue/dist/index.js +279 -0
  876. package/app/node_modules/p-queue/dist/lower-bound.js +21 -0
  877. package/app/node_modules/p-queue/dist/priority-queue.js +32 -0
  878. package/app/node_modules/p-queue/node_modules/eventemitter3/index.js +336 -0
  879. package/app/node_modules/p-queue/node_modules/eventemitter3/package.json +56 -0
  880. package/app/node_modules/p-queue/package.json +92 -0
  881. package/app/node_modules/p-retry/index.js +85 -0
  882. package/app/node_modules/p-retry/package.json +51 -0
  883. package/app/node_modules/p-timeout/index.js +57 -0
  884. package/app/node_modules/p-timeout/package.json +45 -0
  885. package/app/node_modules/retry/index.js +1 -0
  886. package/app/node_modules/retry/lib/retry.js +100 -0
  887. package/app/node_modules/retry/lib/retry_operation.js +162 -0
  888. package/app/node_modules/retry/package.json +36 -0
  889. package/app/node_modules/supports-color/index.js +135 -0
  890. package/app/node_modules/supports-color/package.json +53 -0
  891. package/app/node_modules/ws/index.js +22 -0
  892. package/app/node_modules/ws/lib/buffer-util.js +131 -0
  893. package/app/node_modules/ws/lib/constants.js +19 -0
  894. package/app/node_modules/ws/lib/event-target.js +292 -0
  895. package/app/node_modules/ws/lib/extension.js +203 -0
  896. package/app/node_modules/ws/lib/limiter.js +55 -0
  897. package/app/node_modules/ws/lib/permessage-deflate.js +530 -0
  898. package/app/node_modules/ws/lib/receiver.js +743 -0
  899. package/app/node_modules/ws/lib/sender.js +607 -0
  900. package/app/node_modules/ws/lib/stream.js +161 -0
  901. package/app/node_modules/ws/lib/subprotocol.js +62 -0
  902. package/app/node_modules/ws/lib/validation.js +152 -0
  903. package/app/node_modules/ws/lib/websocket-server.js +562 -0
  904. package/app/node_modules/ws/lib/websocket.js +1421 -0
  905. package/app/node_modules/ws/package.json +74 -0
  906. package/app/package.json +1 -1
  907. package/app/server.js +1 -1
  908. package/dist/cli.js +5 -2
  909. package/dist/product.d.ts +8 -0
  910. package/dist/product.js +69 -3
  911. package/package.json +2 -2
  912. package/schemas/botmancers.mcp.v2.tools.json +767 -2
  913. package/skills/botmancers-collaboration/SKILL.md +5 -1
  914. package/skills/botmancers-collaboration/references/workflows.md +21 -0
  915. package/app/.next/server/chunks/[root-of-the-server]__06qkt0f._.js +0 -3
  916. package/app/.next/server/chunks/[root-of-the-server]__08qhrch._.js +0 -3
  917. package/app/.next/server/chunks/[root-of-the-server]__097ptn_._.js +0 -3
  918. package/app/.next/server/chunks/[root-of-the-server]__09m9-pe._.js +0 -3
  919. package/app/.next/server/chunks/[root-of-the-server]__0b7w1z3._.js +0 -3
  920. package/app/.next/server/chunks/[root-of-the-server]__0f5yqjs._.js +0 -3
  921. package/app/.next/server/chunks/[root-of-the-server]__0g4um3-._.js +0 -44
  922. package/app/.next/server/chunks/[root-of-the-server]__0hro5ey._.js +0 -3
  923. package/app/.next/server/chunks/[root-of-the-server]__0hwpgxq._.js +0 -3
  924. package/app/.next/server/chunks/[root-of-the-server]__0uq7sci._.js +0 -3
  925. package/app/.next/server/chunks/[root-of-the-server]__13cd2fb._.js +0 -44
  926. package/app/.next/server/chunks/[root-of-the-server]__1879cge._.js +0 -3
  927. package/app/.next/server/chunks/[root-of-the-server]__1a2dh11._.js +0 -3
  928. package/app/.next/server/chunks/[root-of-the-server]__1co3sok._.js +0 -44
  929. package/app/.next/server/chunks/[root-of-the-server]__1eh30sp._.js +0 -3
  930. package/app/.next/server/chunks/[root-of-the-server]__1fmsid0._.js +0 -44
  931. package/app/.next/server/chunks/[root-of-the-server]__1qbgs3m._.js +0 -3
  932. package/app/.next/server/chunks/[root-of-the-server]__1s6h1sj._.js +0 -3
  933. package/app/.next/server/chunks/[root-of-the-server]__1slu7d7._.js +0 -7
  934. package/app/.next/server/chunks/[root-of-the-server]__1tuqc5v._.js +0 -3
  935. package/app/.next/server/chunks/[root-of-the-server]__1v609eq._.js +0 -44
  936. package/app/.next/server/chunks/[root-of-the-server]__1zdv-vb._.js +0 -3
  937. package/app/.next/server/chunks/[root-of-the-server]__1zjs2tr._.js +0 -3
  938. package/app/.next/server/chunks/_023se5j._.js +0 -44
  939. package/app/.next/server/chunks/_02pb_qv._.js +0 -44
  940. package/app/.next/server/chunks/_05ro-21._.js +0 -44
  941. package/app/.next/server/chunks/_07on0dc._.js +0 -44
  942. package/app/.next/server/chunks/_08208nz._.js +0 -44
  943. package/app/.next/server/chunks/_0fe5qz5._.js +0 -44
  944. package/app/.next/server/chunks/_0qoji5a._.js +0 -44
  945. package/app/.next/server/chunks/_0uv2pi5._.js +0 -44
  946. package/app/.next/server/chunks/_0wdl90-._.js +0 -44
  947. package/app/.next/server/chunks/_11ijk9k._.js +0 -44
  948. package/app/.next/server/chunks/_198sn69._.js +0 -44
  949. package/app/.next/server/chunks/_1ba_5hd._.js +0 -44
  950. package/app/.next/server/chunks/_1m89jq5._.js +0 -44
  951. package/app/.next/server/chunks/_1n39wr_._.js +0 -44
  952. package/app/.next/server/chunks/_1ryxqo1._.js +0 -44
  953. package/app/.next/server/chunks/_1vemgly._.js +0 -44
  954. package/app/.next/server/chunks/lib_0lqoyb4._.js +0 -217
  955. package/app/.next/server/chunks/lib_0riiofz._.js +0 -44
  956. package/app/.next/server/chunks/lib_16j2293._.js +0 -217
  957. package/app/.next/server/chunks/lib_1nb_61e._.js +0 -217
  958. package/app/.next/server/chunks/lib_session-pins_ts_0lmxnwj._.js +0 -20
  959. package/app/.next/server/chunks/ssr/app_components_ExchangeCard_tsx_1shfcgn._.js +0 -3
  960. package/app/.next/server/chunks/ssr/node_modules_next_dist_client_components_server-async-storage_0t1dato.js +0 -3
  961. package/app/.next/static/chunks/0bhd8eso48g27.js +0 -1
  962. package/app/.next/static/chunks/3230ywnpii0s6.js +0 -3
  963. package/app/.next/static/chunks/35l2c95bd-jud.js +0 -1
  964. package/app/.next/static/chunks/3cijpn6vx3yzv.js +0 -1
  965. package/app/.next/static/chunks/3ue9194j59kem.js +0 -1
  966. package/app/.next/static/chunks/44ese2s4gzze_.js +0 -1
  967. /package/app/.next/static/{gh3shm8hnVqXLr75rmvsL → _yrIZIFsIbXA0Gaxkytjd}/_buildManifest.js +0 -0
  968. /package/app/.next/static/{gh3shm8hnVqXLr75rmvsL → _yrIZIFsIbXA0Gaxkytjd}/_clientMiddlewareManifest.js +0 -0
  969. /package/app/.next/static/{gh3shm8hnVqXLr75rmvsL → _yrIZIFsIbXA0Gaxkytjd}/_ssgManifest.js +0 -0
@@ -0,0 +1,339 @@
1
+ module.exports=[45383,e=>{"use strict";e.s(["AgentApiError",()=>v,"MCP_IDEMPOTENCY_PREFIX",()=>y,"acceptAgentMessage",()=>q,"apiStateOf",()=>S,"cancelExchangeCommand",()=>eo,"createExchangeCommand",()=>ei,"decideWakeGrantCommand",()=>J,"dispatchExchange",()=>es,"exchanges",()=>er,"getAgentRequest",()=>ep,"getAuthorizedWorkRequest",()=>el,"getConversation",()=>eh,"getExchangeView",()=>ea,"isPrincipalKind",()=>k,"recoverCoordinatorLoops",()=>en,"retryWakeCommand",()=>V,"revokeWakeGrantCommand",()=>Y,"samePrincipal",()=>E,"startAgentDispatch",()=>Q,"sweepDispatch",()=>G]);var t=e.i(54799),n=e.i(62294),r=e.i(27510),i=e.i(53059),s=e.i(35613),a=e.i(57281),o=e.i(54226),d=e.i(64974),u=e.i(76459),l=e.i(39872),c=e.i(17834),_=e.i(142),p=e.i(40712),f=e.i(63020),h=e.i(93399),m=e.i(91253);let g=["person","bot","service"],y="mcp:",w={authentication_unavailable:503,unauthenticated:401,principal_mismatch:403,invalid_request:400,agent_not_found:404,conversation_not_found:404,conversation_not_writable:409,request_not_found:404,idempotency_conflict:409,internal_error:500};class v extends Error{code;constructor(e,t){super(t),this.name="AgentApiError",this.code=e}get status(){return w[this.code]}}function k(e){return"string"==typeof e&&g.includes(e)}function E(e,t){return e.kind===t.kind&&e.id===t.id}function b(e){return"string"==typeof e&&e.trim().length>0}function I(e,t){return!!n.default.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(e,t.kind,t.id)}function S(e){switch(e){case"running":case"waiting":return"dispatched";case"completed":return"completed";case"failed":case"cancelled":return"failed";default:return"accepted"}}function T(e){if(!k(e.kind)||!b(e.id)||"bot"===e.kind&&!n.bots.getById(e.id))throw new v("unauthenticated","Authentication failed.")}let A={invalid_request:"invalid_request",conversation_not_found:"conversation_not_found",conversation_not_writable:"conversation_not_writable",target_not_found:"agent_not_found",idempotency_conflict:"idempotency_conflict",unknown_principal:"unauthenticated",intake_failed:"internal_error"};function R(e){return Promise.all(e.requestIds.map(Q)).then(()=>void 0)}function q(e,t,n){let r;if(T(e),!b(t.agentId))throw new v("invalid_request","agentId is required.");if(!b(t.content))throw new v("invalid_request","content is required.");if(!b(t.idempotencyKey)||t.idempotencyKey.length>200)throw new v("invalid_request","An idempotency key (1-200 characters) is required.");if(void 0!==t.conversationId&&null!==t.conversationId&&!b(t.conversationId))throw new v("invalid_request","conversationId must be a non-empty string when present.");try{r=(0,u.acceptConversationMessage)({surface:"api",requester:e,idempotencyKey:t.idempotencyKey,conversation:t.conversationId?{id:t.conversationId}:{create:!0},content:t.content,fingerprint:[t.agentId,t.conversationId??null,t.content],route:()=>({deliveries:[{agentId:t.agentId}]}),beforeCommit:n,dispatch:R})}catch(e){if(e instanceof u.IntakeError)throw new v(A[e.code],"intake_failed"===e.code?"The request could not be processed.":e.message);throw e}let i=r.requests[0];return{accepted:{requestId:i?eu(i):r.requestIds[0],conversationId:r.conversationId,acceptedMessageId:r.acceptedMessageId,state:i?S(i.state):"accepted",replayed:r.replayed},dispatched:r.dispatched}}function x(e,t,r,i){n.engine.transaction(()=>{t&&n.engine.finishAttempt(t,{outcome:"failed",errorCategory:r,errorMessage:i});let s=n.engine.getWorkRequest(e);s&&("queued"===s.state||"running"===s.state)&&n.engine.transitionWorkRequest(e,{from:s.state,to:"failed",errorCode:r,errorMessage:i})})}let N=(0,o.createDispatcher)(n.default,n.engine);class C extends Error{reason;constructor(e){super(`Commit deferred: ${e}`),this.reason=e}}async function O(e){let t=await $(e);D(e,t||n.engine.getWorkRequest(e)?.state!=="queued")}function D(e,t){for(let t of(0,l.continueAfterTerminal)(e))Q(t);for(let t of(function(e){let t=er.forHopRequest(e);if(t)try{for(let e of er.advance(t.id))Q(e)}catch(e){console.error("Exchange advance failed:",e instanceof Error?e.message:"unknown error")}}(e),(0,p.openFinalizationIds)()))ee.has(t)||et(t);t&&L()}function L(){for(let e of N.deferredRequestIds())Z.has(e)||Q(e)}async function $(e){let t,a,u=n.engine.getWorkRequest(e);if(!u||"queued"!==u.state||null!==u.next_eligible_at&&N.now()<u.next_eligible_at)return!1;let c=n.bots.getById(u.target_agent_id);if(!c)return x(e,null,"agent_unavailable","The agent is no longer registered."),!1;let _=(0,d.authorizeWorkRequest)(u);if(!_.ok){try{n.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:u.version,reason:"policy_rejected",errorCode:_.code,errorMessage:_.reason})}catch(e){if(!(e instanceof s.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let p=_.policy,f=(0,r.agentForDispatch)(c),h=er.resumeFor(u,f)??(0,l.resumeBindingFor)(u,f);if(!h.ok){try{n.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:u.version,reason:"session_unavailable",errorCode:"session_unavailable",errorMessage:h.reason})}catch(e){if(!(e instanceof s.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let m=null,g=null;try{m=(0,r.prepareDispatch)({bot:c,history:[...n.default.prepare(`SELECT * FROM messages WHERE conversation_id = ?
2
+ AND rowid <= (SELECT rowid FROM messages WHERE id = ?)
3
+ ORDER BY rowid ASC`).all(u.source_conversation_id,u.source_event_id).map(e=>({speakerLabel:function(e){if("bot"===e.sender_kind&&e.sender_id){let t=n.bots.getById(e.sender_id);return t?t.name:`bot:${e.sender_id}`}return`${e.sender_kind??"person"}:${e.sender_id??"unknown"}`}(e),fromAgent:"bot"===e.sender_kind&&e.sender_id===c.id,content:e.content})),...(0,l.turnContext)(u),...er.turnContext(u)??[]],toolProfile:p.tool_profile,sessionBinding:h.binding?{bindingId:h.binding.id,externalSessionId:h.binding.external_session_id}:null,..."freshSession"in h&&h.freshSession?{freshSession:!0}:{},prepareFinalization:"implementation"===p.execution_kind||"revision"===p.execution_kind})}catch(e){g=e instanceof r.DispatchFailure?e:new r.DispatchFailure("runtime_failed","The agent runtime did not complete the turn.")}let y={agent:f,agent_id:c.id,execution_kind:p.execution_kind,tool_profile:p.tool_profile,policy_rule:p.rule},w=new AbortController;try{t=n.engine.transaction(()=>{let t=N.claim(e,{expectedVersion:u.version,data:{agent:f}});if(!t.ok)return a=t.blockedBy,null;if(m){let r=N.now(),s=N.control.attemptDeadlineFor(t.request,r),a={...m.input,deadlineAt:s,signal:w.signal},o=(0,i.beginAttempt)(n.engine,e,{agent:f,adapter:m.adapter,input:a,snapshot:y,now:r});return N.recordLaunchIntent(t.lease,o.attempt.id,m.adapter.name,m.adapter.launchIntent?.(o.input)??null),er.hopClaimed(e,o.attempt.id,r),{lease:t.lease,attempt:o}}let r=n.engine.createAttempt(e,{kind:"launch",adapter:f,toolProfile:p.tool_profile,launchSnapshot:y});return er.hopClaimed(e,r.id,r.started_at),{lease:t.lease,attempt:r.id}})}catch(e){if(e instanceof s.EngineStoreError&&"stale_state"===e.code)return!1;throw e}if(!t)return a&&Q(a),!1;let{lease:v}=t;if(!m||"string"==typeof t.attempt){let i=g??new r.DispatchFailure("runtime_failed","The agent runtime did not complete the turn."),s="string"==typeof t.attempt?t.attempt:t.attempt.attempt.id;return n.engine.transaction(()=>{N.assertHeld(v),x(e,s,i.code,i.message),N.release(v,"failed")}),!0}let k=t.attempt.attempt.id;return M.set(e,{attemptId:k,controller:w}),await P(v,async()=>{(0,o.dispatchFault)("before_launch",e);try{let r=await (0,i.runAttempt)(n.engine,t.attempt,m.adapter,{fence:()=>N.holds(v),onEvent:t=>{"started"===t.type&&(0,o.dispatchFault)("after_run_id_persisted",e),H(v,k,t)},sanitize:e=>er.sanitizeHopResult(u,e),project:(e,t)=>z(v,u,t,e)});r.abandoned&&await U(r.abandoned,{localSignalled:!0,launched:!0}),r.projected?.retryAt!=null&&W(e,r.projected.retryAt)}catch(e){j(v,k,e)}},w),M.get(e)?.attemptId===k&&M.delete(e),!0}let M=new Map;function W(e,t){let n=setTimeout(()=>{Q(e)},Math.max(0,t-N.now()));n.unref&&n.unref()}async function F(e){let t=M.get(e.requestId);if(t&&t.attemptId===e.attemptId){t.controller.abort();let n=Z.get(e.requestId);if(n){let t=`abandoned:${e.attemptId}`;Z.delete(e.requestId),Z.set(t,n),n.finally(()=>{Z.get(t)===n&&Z.delete(t)})}}await U(e,{localSignalled:!!t&&t.attemptId===e.attemptId,launched:e.launched})}async function U(e,t){let i,s=e.transport?(0,r.adapterForTransport)(e.transport)?.reconciler??null:null;i="failed"===e.externalCancel?"failed":e.externalRunId?s?.cancel?await s.cancel(e.externalRunId):"unsupported":t.launched?"unsupported":"not_launched",n.engine.appendEvent(e.requestId,{type:"external_cancel",attemptId:e.attemptId,data:{status:i,reason:e.reason,external_run_id:e.externalRunId,transport:e.transport,local_signalled:t.localSignalled},now:N.now()})}function H(e,t,r){if("progress"===r.type&&"finalization_prepared"===r.detail.phase&&"string"==typeof r.detail.baseline_ref&&"string"==typeof r.detail.baseline_digest){let i={baselineRef:r.detail.baseline_ref,baselineDigest:r.detail.baseline_digest};n.engine.transaction(()=>{N.holds(e)&&(0,p.recordAttemptBaseline)(t,i,r.at)})}}async function P(e,t,r){let i=setInterval(()=>{try{N.heartbeat(e);let t=n.engine.getWorkRequest(e.requestId);r&&t&&(null!==t.cancel_requested_at||s.TERMINAL_STATES.includes(t.state))&&r.abort()}catch(e){console.error("Dispatch heartbeat failed:",e)}},N.config.heartbeatMs);i.unref&&i.unref();try{return await t()}finally{clearInterval(i)}}function j(e,t,n){if(!(n instanceof o.LeaseLostError)){if(n instanceof C){try{N.defer(e,n.reason,t)}catch(e){if(!(e instanceof o.LeaseLostError))throw e}return}throw n}}function z(e,s,a,d){if((0,o.dispatchFault)("before_terminal_commit",s.id),N.assertHeld(e),"failed"===d.status&&d.failure?.code==="agent_deck_unreachable"&&a.external_run_id)throw new C("unreachable");if("failed"===d.status&&d.launchUnconfirmed&&!a.external_run_id)throw new C("launch_unconfirmed");let u=s.id,l=N.now();(0,p.recordPreparedEvidence)(s,a,d,l);let c=n.engine.getWorkRequest(u)??s,_=null!==c.cancel_requested_at;if(_||null!==c.deadline_at&&l>=c.deadline_at)return _?n.engine.transitionWorkRequest(u,{from:"running",to:"cancelled",reason:"cancel_requested",errorCode:"cancelled",errorMessage:c.cancel_reason??"The request was cancelled.",data:{attempt_outcome:a.outcome},now:l}):n.engine.transitionWorkRequest(u,{from:"running",to:"failed",reason:"timed_out",errorCode:"timed_out",errorMessage:"The request passed its deadline.",data:{deadline_at:c.deadline_at,attempt_outcome:a.outcome},now:l}),"completed"===d.status&&(0,i.recordLateResult)(n.engine,a,d,l),N.release(e,_?"cancelled":"timed_out"),{retryAt:null};if("completed"!==d.status||null===d.output){let t=(0,r.dispatchFailureFor)(d),n=N.control.settleFailure(u,{category:"completed"===d.status?"result_contract":d.failure?.category??"runtime_failed",code:d.failure?.code??null,errorCode:t.code,errorMessage:t.message,..."failed"===d.externalCancel?{attention:"external_cancel_failed"}:{}},l);return N.release(e,n.outcome),{retryAt:"retry"===n.decision.action?n.decision.nextEligibleAt:null}}let h=(0,f.hopOf)(s);if(h){let t=er.commitHop(s,a,d,l);return n.engine.transitionWorkRequest(u,{from:"running",to:"completed",result:t,now:l}),N.release(e,"completed"),er.advance(h.exchangeId,l),{retryAt:null}}let m=(0,t.randomUUID)();return n.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(m,s.source_conversation_id,"bot",s.target_agent_id,"bot",u,d.output,l),"edit"===s.tool_profile&&d.externalSessionId&&n.engine.bindSession({agentId:s.target_agent_id,adapter:a.adapter,externalSessionId:d.externalSessionId,conversationId:s.source_conversation_id,requestId:u,sourceAttemptId:a.id,now:l}),n.engine.transitionWorkRequest(u,{from:"running",to:"completed",result:{reply_message_id:m},now:l}),N.release(e,"completed"),{retryAt:null}}function B(e){return e?{kind:e.kind,..."run"===e.kind?{state:e.state}:{},..."accepted"===e.kind?{run_id:e.runId}:{},..."rejected"===e.kind?{status:e.status,code:e.code}:{}}:null}async function K(e){let t=n.engine.getWorkRequest(e.requestId);if(!t||"running"!==t.state)return void N.release(e,"stale");let s=async(r,i)=>{let s=n.engine.transaction(()=>{N.assertHeld(e);let n=N.control.enforceRequest(t.id,N.now(),{force:!0});return n?(i?.(),{enforced:n}):{value:r()}});return"enforced"in s?(s.enforced.abandoned&&await F(s.enforced.abandoned),{won:!0}):{won:!1,value:s.value}},a=null;try{let f;if((await s(()=>void 0)).won)return;let h=n.engine.listAttempts(t.id).find(e=>null===e.finished_at);if(!h)return void n.engine.transaction(()=>{N.assertHeld(e),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"interrupted",errorMessage:"The request was interrupted before its Attempt was recorded."}),N.release(e,"interrupted")});a=h.id;let m={};try{m=JSON.parse(h.launch_snapshot)}catch{}let g="string"==typeof m.transport?(0,r.adapterForTransport)(m.transport):null,y=g?.reconciler??null,w=async(e,r,i,a)=>!(await s(()=>{n.engine.appendEvent(t.id,{type:"reconcile_decided",attemptId:h.id,data:{phase:e,...r,external_run_id:a,observation:B(i)}})})).won,v=h.external_run_id,k=null;if(v){if(y){if(k=await y.inspect(v),f=(0,o.decideWithRunId)(k),!await w("run",f,k,v))return}else if(f={action:"interrupted",reason:"runtime_unobservable"},!await w("run",f,null,v))return}else{let r=N.launchIntent(h.id);if(f=(0,o.decideWithoutRunId)({reconcilable:!!y,intent:r,currentGrantFingerprint:y?.currentGrantFingerprint()??null}),"repost"===f.action&&y&&r?.body&&r.idempotency_key){if(!await w("launch",f,null,null))return;if(k=await y.repost({idempotencyKey:r.idempotency_key,body:r.body}),f=(0,o.decideRepostResult)(k),"accepted"===k.kind){var d,u,l,c,_;let r=k.runId,i=(d=e,u=t.id,l=h.id,c=r,_=g?.name??null,n.engine.transaction(()=>{let e=n.engine.getAttempt(l);if(!e)return null;if(null===e.finished_at)return N.assertHeld(d),n.engine.recordAttemptExternalIds(l,{externalRunId:c}),n.engine.appendEvent(u,{type:"runtime_started",attemptId:l,data:{adapter:_,external_run_id:c,recovered:!0}}),null;n.default.prepare("UPDATE work_attempts SET external_run_id = ? WHERE id = ? AND external_run_id IS NULL").run(c,l),n.engine.appendEvent(u,{type:"runtime_started",attemptId:l,data:{adapter:_,external_run_id:c,recovered:!0,after_abandon:!0}});let t="timed_out"===e.outcome?"timed_out":"cancelled"===e.outcome?"cancelled":"retried",r=null;try{let t=JSON.parse(e.launch_snapshot);r="string"==typeof t.transport?t.transport:null}catch{}return{requestId:u,attemptId:l,externalRunId:c,transport:r,reason:t,launched:!0}}));if(i)return void await U(i,{localSignalled:!1,launched:!0});v=r}}if(!await w("launch",f,k,v))return}let E=!0===m.prepare_finalization;switch(f.action){case"defer":await s(()=>N.defer(e,f.reason,h.id));return;case"attention":await s(()=>N.setAttention(e,{attemptId:h.id,reason:f.reason,detail:k?JSON.stringify(B(k)):null}));return;case"interrupted_attention":{let r=E&&y&&v?await y.evidence(v):null,i=e=>{r&&e&&(0,p.recordPreparedEvidence)(t,e,{finalization:r})};await s(()=>{n.engine.recordAttemptUsage(h.id,{usage:null,observedAt:Date.now()}),i(n.engine.finishAttempt(h.id,{outcome:"interrupted",errorCategory:"interrupted",errorMessage:`Agent Deck run ${v} died.`})),N.setAttention(e,{attemptId:h.id,reason:f.reason})},()=>i(n.engine.getAttempt(h.id)));return}case"fail":await s(()=>{n.engine.finishAttempt(h.id,{outcome:"failed",errorCategory:f.category,errorMessage:`Agent Deck refused the launch (${f.code}).`}),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"runtime_failed",errorMessage:"The agent runtime did not start the turn."}),N.release(e,"failed")});return;case"interrupted":await s(()=>{v&&n.engine.recordAttemptUsage(h.id,{usage:null,observedAt:Date.now()}),n.engine.finishAttempt(h.id,{outcome:"interrupted",errorCategory:"interrupted",errorMessage:"The runtime cannot be observed after a restart; the outcome is unknown."}),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"interrupted",errorMessage:"The agent turn was interrupted by a restart. It was not relaunched."}),N.release(e,"interrupted")});return}if(!y||!v)return;let b=v,I="string"==typeof m.session_binding_id?m.session_binding_id:null,S=I?n.default.prepare("SELECT external_session_id FROM session_bindings WHERE id = ?").get(I):void 0,T=new AbortController;if((await s(()=>M.set(t.id,{attemptId:h.id,controller:T}))).won)return;await P(e,async()=>{let r=await y.follow(b,{resumeSessionId:S?.external_session_id??null,prepareFinalization:E,deadlineAt:"number"==typeof m.deadline_at?m.deadline_at:null,signal:T.signal},t=>H(e,h.id,t)),s=er.sanitizeHopResult(t,r),a=null,o=n.engine.transaction(()=>{let r=n.engine.getAttempt(h.id);if(r&&null!==r.finished_at)return(0,i.recordLateResult)(n.engine,r,s,N.now()),{retryAt:null};if(N.assertHeld(e),"failed"===s.status&&s.failure?.code==="agent_deck_unreachable")throw new C("unreachable");let o=(a=g?(0,i.abandonedLocally)(h,g,T.signal,s):null)?(0,i.recordAbandonedResult)(n.engine,a,s):(0,i.recordAttemptResult)(n.engine,h.id,s);return z(e,t,o,s)});a&&await U(a,{localSignalled:!0,launched:!0}),null!==o.retryAt&&W(t.id,o.retryAt)},T).finally(()=>{M.get(t.id)?.attemptId===h.id&&M.delete(t.id)})}catch(t){j(e,a,t)}}function G(){let e=[];for(let t of N.control.enforceDue())e.push((t.abandoned?F(t.abandoned):Promise.resolve()).then(()=>D(t.requestId,!0)).catch(e=>{console.error("Request enforcement follow-up failed:",e)}));for(let t of N.recoverable()){let n=`reconcile:${t.requestId}`;if(Z.has(n)||Z.has(t.requestId))continue;let r=N.takeOver(t);if(!r)continue;let i=K(r).then(()=>D(t.requestId,!N.holds(r))).catch(e=>{console.error("Dispatch reconciliation failed unexpectedly:",e)}).finally(()=>{Z.delete(n)});Z.set(n,i),e.push(i)}for(let e of(L(),n.default.prepare(`
4
+ SELECT id FROM work_requests
5
+ WHERE state = 'queued' AND legacy_agent_request_id IS NULL AND executor = 'dispatcher' AND next_eligible_at IS NOT NULL AND next_eligible_at <= ?
6
+ ORDER BY next_eligible_at ASC, id ASC
7
+ `).all(N.now()).map(e=>e.id)))Z.has(e)||Q(e);return Promise.all(e).then(()=>void 0)}async function X(e,t={}){let n=N.control.cancel(e,t);return"cancel_requested"!==n.outcome||n.replayed||M.get(e)?.controller.abort(),n.abandoned&&await F(n.abandoned),"cancelled"!==n.outcome||n.replayed||D(e,!0),n}function J(e,t,n){let r=(0,c.decideWakeGrant)({wakeId:e,decision:t,caller:n});if(r.request&&r.runnable&&Q(r.request.id),r.request&&r.ended)for(let e of(0,l.continueAfterTerminal)(r.request.id))Q(e);return r}function V(e){let t=(0,c.retryWake)(e);return t.request?.state==="queued"&&Q(t.request.id),t}function Y(e,t){return(0,_.revokeWakeGrant)(e,t)}let Z=new Map;function Q(e){let t=Z.get(e);if(t)return t;let n=O(e).catch(e=>{console.error("Agent dispatch failed unexpectedly:",e)}).finally(()=>{Z.get(e)===n&&Z.delete(e)});return Z.set(e,n),n}let ee=new Set;function et(e){let t=`finalization:${e}`,n=Z.get(t);if(n)return n;ee.add(e);let r=(0,p.runFinalization)(e).then(e=>{if(e&&"preparing"!==e.state)for(let t of(0,l.continueAfterFinalization)(e.id))Q(t)}).catch(e=>{console.error("Finalization failed unexpectedly:",e instanceof Error?e.message:"unknown error")}).finally(()=>{Z.delete(t)});return Z.set(t,r),r}function en(){return Promise.all([G(),...(0,l.pendingCoordinatorWork)().map(Q),...(0,p.openFinalizationIds)().map(et),...(function(){let e=[];for(let t of er.openIds())try{e.push(...er.advance(t))}catch(e){console.error("Exchange recovery failed:",e instanceof Error?e.message:"unknown error")}return e})().map(Q)]).then(()=>void 0)}let er=(0,f.createExchangeStore)(n.default,n.engine);function ei(e){let{exchange:t,created:n}=er.create(e),r=es(t.id);return{exchange:er.view(t.id),created:n,dispatched:r}}function es(e){return Promise.all(er.advance(e).map(Q)).then(()=>void 0)}function ea(e){return er.view(e)}async function eo(e,t,r=null,i){let{hopRequestId:o,replayed:d}=n.default.transaction(()=>{let n=er.requestCancel(e,t,r);return i?.(n.exchange),n}).immediate();if(o){let e=n.engine.getWorkRequest(o);if(e&&!s.TERMINAL_STATES.includes(e.state))try{await X(o,{actor:t,reason:r??"The exchange was cancelled."})}catch(e){if(!(e instanceof a.ControlError))throw e}}return er.advance(e),{exchange:er.view(e),replayed:d}}let ed=["attempt_started","attempt_finished","session_bound","backfilled","runtime_progress","policy_selected","dispatch_claimed","dispatch_released","dispatch_deferred","dispatch_lease_taken_over","launch_intent_recorded","reconcile_decided","reconcile_deferred","attention_set","attempt_abandoned","external_cancel","late_result_recorded"];function eu(e){return e.legacy_agent_request_id??e.id}function el(e,t){T(e);let r=n.default.prepare("SELECT id FROM work_requests WHERE legacy_agent_request_id = ?").get(t),i=n.engine.getWorkRequest(r?r.id:t),s=!!i&&"service"===e.kind&&!!(0,f.hopOf)(i);if(!i||!(s?ec(e,i):I(i.source_conversation_id,e)||ec(e,i)))throw new v("request_not_found","No request with that id is visible to this principal.");return i}function ec(e,t){if(!(0,f.hopOf)(t))return!1;let n=er.forHopRequest(t.id);return!!n&&n.requester_kind===e.kind&&n.requester_id===e.id&&("service"!==e.kind||e_(e,n))}function e_(e,t){let r=(0,m.loadServiceGrants)();if("absent"===r.state||"invalid"===r.state)return!1;let i=r.grants.get(e.id),s=t.idempotency_key.startsWith(m.MESSAGE_KEY_PREFIX)?"sessions:message":"exchanges:read",a=e=>!!i?.get(e)?.has(s)&&!!n.bots.getById(e);return a(t.source_agent_id)&&(null===t.destination_agent_id||a(t.destination_agent_id))}function ep(e,t){var r;let i,s,a,o,d,u,l=(i=(r=el(e,t)).result?JSON.parse(r.result):null,o=(a=(s=(0,f.hopOf)(r)?.hop==="ask"?er.forHopRequest(r.id):void 0)?i?.answer_message_id:i?.reply_message_id)?n.default.prepare("SELECT id, content FROM messages WHERE id = ?").get(a):void 0,d=s?n.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(s.origin_conversation_id,r.id,s.requester_kind):void 0,u="failed"===r.state||"cancelled"===r.state,{requestId:eu(r),conversationId:s?s.origin_conversation_id:r.source_conversation_id,agentId:r.target_agent_id,acceptedMessageId:d?d.id:r.source_event_id,state:S(r.state),reply:o?{messageId:o.id,content:o.content}:null,failure:u?{code:r.error_code??r.state,message:r.error_message??""}:null,events:n.engine.listEvents(r.id).flatMap(e=>{let t=function(e){if("state_changed"===e.type){let t=e.data?JSON.parse(e.data).to:void 0;return"running"===t?"dispatched":"completed"===t?"completed":"failed"===t||"cancelled"===t?"failed":t??null}return ed.includes(e.type)?null:e.type}(e);return t?[{type:t,at:e.created_at}]:[]}),createdAt:r.created_at,updatedAt:r.updated_at});return"service"!==e.kind?l:(0,h.serviceRedactor)().deep(l)}let ef={agent:"agent",bot:"direct",group:"group"};function eh(e,t){T(e);let r=n.default.prepare("SELECT * FROM conversations WHERE id = ?").get(t);if(!r||!I(r.id,e))throw new v("conversation_not_found","No conversation with that id is visible to this principal.");let i=n.default.prepare("SELECT participant_kind, participant_id, joined_at FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(r.id),s=function(e){if("service"!==e.kind)return()=>!1;let t=new Map;return n=>{if(!n)return!1;let r=t.get(n);if(void 0===r){let i=er.forHopRequest(n);r=!!i&&!(i.requester_kind===e.kind&&i.requester_id===e.id&&e_(e,i)),t.set(n,r)}return r}}(e),a=n.default.prepare("SELECT * FROM messages WHERE conversation_id = ? ORDER BY rowid ASC").all(r.id).filter(e=>!s(e.request_id)),o={conversationId:r.id,type:ef[r.type]??"agent",origin:r.origin_kind&&r.origin_id?{kind:r.origin_kind,id:r.origin_id}:null,participants:i.map(e=>({kind:e.participant_kind,id:e.participant_id,joinedAt:e.joined_at})),messages:a.map((e,t)=>{var n,i;let s;return{messageId:e.id,seq:t+1,sender:(n=e,i=r,s=n.sender_kind??("bot"===n.sender_type?"bot":"person"),n.sender_id?{kind:s,id:n.sender_id}:"bot"!==s&&i.origin_kind===s&&i.origin_id?{kind:s,id:i.origin_id}:{kind:s,id:"unknown"}),content:e.content,requestId:e.request_id,createdAt:e.created_at}}),events:n.projector.listConversationEvents(r.id).filter(e=>!s(e.requestId)).map((e,t)=>({...e,seq:t+1}))};return"service"!==e.kind?o:(0,h.serviceRedactor)().deep(o)}},27510,9346,57281,54226,53059,e=>{"use strict";var t=e.i(22734),n=e.i(14747),r=e.i(62349),i=e.i(51749),s=e.i(29370),a=e.i(54799),o=e.i(67505);let d="AGENT_DECK_RUN_TOKEN",u=["ended","error","died","canceled"],l=["starting","running","ended","error","died","canceled"];class c extends Error{code;status;deckCode;constructor(e,t,n=null,r=null){super(t.slice(0,300)),this.name="AgentDeckApiError",this.code=e,this.status=n,this.deckCode=r}}let _={agent_deck_token_missing:`Agent Deck API token is not configured on the Botmancers server (set ${d}).`,agent_deck_unauthorized:`Agent Deck rejected the Botmancers run token (check ${d} and that its grant is not revoked or expired).`,agent_deck_forbidden:"Agent Deck refused this run for the Botmancers grant (enable runs and finalization on the grant and allow this deck).",agent_deck_unreachable:"The Agent Deck server is unreachable at the workspace Agent Deck URL (start it or correct the URL).",agent_deck_rejected:"Agent Deck rejected the request.",agent_deck_invalid_response:"Agent Deck returned an unexpected response."};function p(){let e=process.env[d];return"string"==typeof e&&e.trim().length>0?e.trim():null}function f(){let e=p();return e?(0,a.createHash)("sha256").update(`botmancers-grant-v1:${e}`).digest("hex").slice(0,16):null}function h(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function m(e){return"string"==typeof e&&e.length>0?e:null}async function g(e,t,n={}){var r,i,s;let a,d=p();if(!d)throw new c("agent_deck_token_missing",_.agent_deck_token_missing);let u={authorization:`Bearer ${d}`,accept:"application/json"};n.idempotencyKey&&(u["idempotency-key"]=n.idempotencyKey),void 0!==n.body&&(u["content-type"]="application/json");let l=`${(0,o.getAgentDeckServerUrl)()}${t}`;try{a=await (r={method:e,headers:u,...void 0!==n.body?{body:JSON.stringify(n.body)}:{},...n.signal?{signal:n.signal}:{}},fetch(l,r).then(e=>({status:e.status,json:()=>e.json()})))}catch{throw new c("agent_deck_unreachable",_.agent_deck_unreachable)}let f=null;try{f=h(await a.json())}catch{f=null}if(a.status<200||a.status>=300||f?.success!==!0){let e,t;if(a.status>=200&&a.status<300)throw new c("agent_deck_invalid_response",_.agent_deck_invalid_response,a.status);throw i=a.status,s=f,t=(e=m(s?.error_code))&&/^[A-Z][A-Z0-9_]{0,63}$/.test(e)?e:null,401===i?new c("agent_deck_unauthorized",_.agent_deck_unauthorized,i,t):403===i?new c("agent_deck_forbidden",`${_.agent_deck_forbidden}${t?` (${t})`:""}`,i,t):new c("agent_deck_rejected",`Agent Deck rejected the request (${i}${t?` ${t}`:""}).`,i,t)}let y=h(f.data);if(!y)throw new c("agent_deck_invalid_response",_.agent_deck_invalid_response,a.status);return y}function y(e){return new c("agent_deck_invalid_response",`${_.agent_deck_invalid_response} (${e})`)}function w(e){if("string"!=typeof e||!l.includes(e))throw y("run state");return e}let v=/^[0-9a-f]{64}$/,k=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/,E=/^bl_[0-9a-f]{24}$/;function b(e){var t;let n=h(e);if(!n||Object.keys(n).some(e=>!["path","sha256","mode"].includes(e)))throw y("manifest entry");if(!(!("string"!=typeof(t=n.path)||0===t.length||t.length>1024||t.startsWith("/")||t.includes("\\")||/^[A-Za-z]:/.test(t)||t.includes("\0"))&&t.split("/").every(e=>e.length>0&&"."!==e&&".."!==e&&".git"!==e)))throw y("manifest path");let r=null===n.sha256&&null===n.mode,i="string"==typeof n.sha256&&v.test(n.sha256)&&("100644"===n.mode||"100755"===n.mode);if(!r&&!i)throw y("manifest digest or mode");return{path:n.path,sha256:n.sha256,mode:n.mode}}async function I(e,t){let n=await g("POST","/api/agent-runs",{body:e,idempotencyKey:t}),r=m(n.runId);if(!r)throw y("runId");return{runId:r,state:w(n.state)}}async function S(e){let t=await g("GET",`/api/agent-runs/${encodeURIComponent(e)}`);if(!m(t.runId)||!m(t.deckId)||!m(t.client)||"edit"!==t.tools&&"readonly"!==t.tools)throw y("run status");return{runId:m(t.runId),deckId:m(t.deckId),client:m(t.client),tools:t.tools,state:w(t.state),sessionId:m(t.sessionId),finalization:function(e){if(null==e)return null;let t=h(e);if(!t||"string"!=typeof t.baselineRef||!E.test(t.baselineRef)||"string"!=typeof t.baselineDigest||!v.test(t.baselineDigest)||!["prepared","finalizing","finalized"].includes(String(t.state)))throw y("finalization status");let n="string"==typeof t.commit&&k.test(t.commit)?t.commit:null;return{baselineRef:t.baselineRef,baselineDigest:t.baselineDigest,state:t.state,commit:n}}(t.finalization)}}async function T(e,t){let n=t?`?after=${encodeURIComponent(t)}`:"",r=await g("GET",`/api/agent-runs/${encodeURIComponent(e)}/events${n}`);if(!Array.isArray(r.events))throw y("events");return{runId:m(r.runId)??e,state:w(r.state),events:r.events.filter(e=>!!h(e)&&"string"==typeof e.type),nextCursor:"string"==typeof r.nextCursor?r.nextCursor:t??"0"}}async function A(e){return w((await g("POST",`/api/agent-runs/${encodeURIComponent(e)}/cancel`)).state)}async function R(e){let t=await g("GET",`/api/agent-runs/${encodeURIComponent(e)}/changes`);if("string"!=typeof t.baselineRef||!E.test(t.baselineRef))throw y("baselineRef");if("string"!=typeof t.baselineDigest||!v.test(t.baselineDigest))throw y("baselineDigest");if("string"!=typeof t.baseCommit||!k.test(t.baseCommit))throw y("baseCommit");if("string"!=typeof t.manifestDigest||!v.test(t.manifestDigest))throw y("manifestDigest");if(!Array.isArray(t.files))throw y("files");return{runId:m(t.runId)??e,baselineRef:t.baselineRef,baselineDigest:t.baselineDigest,baseCommit:t.baseCommit,files:t.files.map(b),manifestDigest:t.manifestDigest}}async function q(e,t,n){let r=await g("POST",`/api/agent-runs/${encodeURIComponent(e)}/finalize`,{body:t,idempotencyKey:n});if("finalized"!==r.finalizationState||"string"!=typeof r.commit||!k.test(r.commit)||"string"!=typeof r.tree||!k.test(r.tree)||"string"!=typeof r.manifestDigest||!v.test(r.manifestDigest))throw y("finalize result");return{runId:m(r.runId)??e,finalizationState:"finalized",commit:r.commit,tree:r.tree,..."string"==typeof r.parent&&k.test(r.parent)?{parent:r.parent}:{},manifestDigest:r.manifestDigest,..."number"==typeof r.fileCount?{fileCount:r.fileCount}:{},..."string"==typeof r.reviewId?{reviewId:r.reviewId}:{}}}e.s(["AGENT_DECK_API_MESSAGES",0,_,"AGENT_DECK_TERMINAL_STATES",0,u,"AgentDeckApiError",0,c,"agentDeckGrantFingerprint",0,f,"cancelAgentDeckRun",0,A,"finalizeAgentDeckRun",0,q,"getAgentDeckRun",0,S,"getAgentDeckRunChanges",0,R,"getAgentDeckRunEvents",0,T,"hasAgentDeckRunToken",0,function(){return null!==p()},"startAgentDeckRun",0,I],9346);var x=e.i(39229),N=e.i(40596),C=e.i(46786),O=e.i(11626),D=e.i(35613);class L extends Error{code;constructor(e,t){super(t),this.name="ControlError",this.code=e}}let $=["queued","blocked","running","waiting"];function M(e){try{let t=JSON.parse(e.launch_snapshot);return t&&"object"==typeof t?t:{}}catch{return{}}}function W(e,t,n={}){let r=n.now??Date.now,i=n.cancelGraceMs??3e4,s=e.prepare("SELECT * FROM work_attempts WHERE request_id = ? AND finished_at IS NULL"),o=e.prepare("SELECT COUNT(*) AS n FROM work_attempts WHERE request_id = ?"),d=e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?"),u=e.prepare("SELECT 1 FROM engine_events WHERE attempt_id = ? AND type = 'runtime_started' LIMIT 1");function l(e){let n=t.getWorkRequest(e);if(!n)throw new L("not_found",`No work request ${e}.`);return n}function c(e,t,n,r){if(r&&(!e||!r(e,t,n)))throw new L("forbidden",`Not allowed to ${n} this request.`)}function _(e){return Math.max(e.attempt_count,o.get(e.id).n)}function p(t,n){e.prepare("UPDATE dispatch_attention SET cleared_at = ? WHERE request_id = ? AND cleared_at IS NULL").run(n,t)}function f(n,r,i){let s=d.get(n);s&&(e.prepare("DELETE FROM dispatch_leases WHERE request_id = ?").run(n),t.appendEvent(n,{type:"dispatch_released",data:{owner:s.owner,outcome:r,forced:!0},now:i}))}function h(e,n,r){let i=s.get(e.id);if(!i)return null;let a=M(i).transport;return t.finishAttempt(i.id,{outcome:"timed_out"===n?"timed_out":"cancelled"===n?"cancelled":"interrupted",errorCategory:"abandoned",errorMessage:{cancelled:"The request was cancelled while this Attempt was open; its result is no longer awaited.",timed_out:"The Attempt passed its deadline; its result is no longer awaited.",retried:"An operator retried the request; this Attempt is superseded."}[n],now:r}),t.appendEvent(e.id,{type:"attempt_abandoned",attemptId:i.id,data:{reason:n,attempt_number:i.attempt_number,external_run_id:i.external_run_id,transport:"string"==typeof a?a:null},now:r}),{requestId:e.id,attemptId:i.id,externalRunId:i.external_run_id,transport:"string"==typeof a?a:null,reason:n,launched:!!i.external_run_id||!!i.external_session_id||!!u.get(i.id)}}function m(n,r,i,s){let a=r?`${r.kind}:${r.id}`:null;e.prepare("UPDATE work_requests SET cancel_requested_at = ?, cancel_requested_by = ?, cancel_reason = ?, updated_at = ? WHERE id = ? AND cancel_requested_at IS NULL").run(s,a,i,s,n.id),t.appendEvent(n.id,{type:"cancel_requested",data:{by:a,reason:i,state:n.state},now:s})}function g(e,n,r={}){return t.transitionWorkRequest(e.id,{from:e.state,to:"cancelled",reason:"cancel_requested",errorCode:"cancelled",errorMessage:e.cancel_reason??"The request was cancelled.",data:r,now:n})}function y(e,n,r={}){return t.transitionWorkRequest(e.id,{from:e.state,to:"failed",reason:"timed_out",errorCode:"timed_out",errorMessage:"The request passed its deadline.",data:{...r,deadline_at:e.deadline_at},now:n})}function w(n,r,i){let s=(0,O.storedRetryPolicy)(n.retry_policy),o=(0,O.classifyFailure)(r.category,r.code),d=_(n),u=(0,O.decideRetry)({policy:s,attemptCount:d,disposition:o,deadlineAt:n.deadline_at,now:i}),l=r.attention&&"retry"===u.action?{action:"attention"}:u,c={category:r.category,disposition:o,attempt_count:d,max_attempts:s.max_attempts};switch(l.action){case"retry":{e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(l.nextEligibleAt,n.id);let s=t.transitionWorkRequest(n.id,{from:"running",to:"queued",reason:"retry_scheduled",data:{...c,retry:l.retry,delay_ms:l.delayMs,next_eligible_at:l.nextEligibleAt,error_code:r.errorCode},now:i});return{outcome:"retry_scheduled",decision:l,request:s}}case"deadline":return{outcome:"timed_out",decision:l,request:y(n,i,c)};case"attention":{let s=r.attention??`failure:${r.category??"unknown"}`;return e.prepare("INSERT INTO dispatch_attention (id, request_id, attempt_id, reason, detail, created_at) VALUES (?, ?, NULL, ?, ?, ?)").run((0,a.randomUUID)(),n.id,s,r.code,i),t.appendEvent(n.id,{type:"attention_set",data:{reason:s,detail:r.code},now:i}),{outcome:"attention",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"waiting",reason:`manual_attention:${r.attention??r.category??"unknown"}`,data:c,now:i})}}case"exhausted":if(s.max_attempts>1)return{outcome:"retries_exhausted",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",reason:"retries_exhausted",errorCode:r.errorCode,errorMessage:r.errorMessage,data:c,now:i})};case"fail":return{outcome:"failed",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",errorCode:r.errorCode,errorMessage:r.errorMessage,data:"fail"===l.action?c:{},now:i})}}}let v={now:r,cancelGraceMs:i,cancel:(e,n={})=>t.transaction(()=>{let t=l(e);if(c(n.actor,t,"cancel",n.authorize),D.TERMINAL_STATES.includes(t.state))return{outcome:"already_terminal",state:t.state,replayed:!0,abandoned:null};let i=n.now??r();if("running"===t.state)return null!==t.cancel_requested_at?{outcome:"cancel_requested",state:"running",replayed:!0,abandoned:null}:(m(t,n.actor,n.reason??null,i),{outcome:"cancel_requested",state:"running",replayed:!1,abandoned:null});null===t.cancel_requested_at&&m(t,n.actor,n.reason??null,i);let s=l(e),a=h(s,"cancelled",i);return p(e,i),f(e,"cancelled",i),{outcome:"cancelled",state:g(s,i,{from_state:t.state}).state,replayed:!1,abandoned:a}}),retry:(n,i={})=>t.transaction(()=>{let s=l(n);if(c(i.actor,s,"retry",i.authorize),D.TERMINAL_STATES.includes(s.state))return{outcome:"already_terminal",state:s.state,abandoned:null};if("queued"===s.state)return{outcome:"already_queued",state:"queued",abandoned:null};if("waiting"!==s.state||null!==s.cancel_requested_at)return{outcome:"not_retryable",state:s.state,abandoned:null};let a=(0,O.storedRetryPolicy)(s.retry_policy),o=_(s);if(o>=a.max_attempts)return{outcome:"retries_exhausted",state:s.state,abandoned:null};let d=i.now??r();if(null!==s.deadline_at&&d>=s.deadline_at)return{outcome:"not_retryable",state:s.state,abandoned:null};let u=h(s,"retried",d);return p(n,d),e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(d,n),{outcome:"retry_scheduled",state:t.transitionWorkRequest(n,{from:"waiting",to:"queued",reason:"retry_scheduled",data:{manual:!0,by:i.actor?`${i.actor.kind}:${i.actor.id}`:null,attempt_count:o,max_attempts:a.max_attempts,retry:o,delay_ms:0,next_eligible_at:d},now:d}).state,abandoned:u}}),timeOut:(e,n)=>t.transaction(()=>{let i=t.getWorkRequest(e),s=n??r();if(!i||!$.includes(i.state)||null===i.deadline_at||s<i.deadline_at)return null;let a=h(i,"timed_out",s);return p(e,s),f(e,"timed_out",s),y(i,s,{from_state:i.state}),{requestId:e,outcome:"timed_out",abandoned:a}}),settleFailure:(e,n,i)=>t.transaction(()=>{let t=l(e);if("running"!==t.state)throw new D.EngineStoreError("stale_state",`Work request ${e} is ${t.state}, not running.`);return w(t,n,i??r())}),enforceRequest:(e,n,a={})=>t.transaction(()=>{let o,u=t.getWorkRequest(e),c=n??r();if(!u||!$.includes(u.state)||null!==u.legacy_agent_request_id)return null;if(null!==u.deadline_at&&c>=u.deadline_at)return v.timeOut(e,c);if("running"!==u.state)return null;if(null!==u.cancel_requested_at){let t=d.get(e);if(!(!0===a.force||!t||t.expires_at<=c)&&c-u.cancel_requested_at<i)return null;let n=h(u,"cancelled",c);return f(e,"cancelled",c),g(u,c,{abandoned:null!==n}),{requestId:e,outcome:"cancelled",abandoned:n}}let _=s.get(e),p=_&&"number"==typeof(o=M(_).deadline_at)?o:null;if(!_||null===p||c<p)return null;let m=h(u,"timed_out",c);f(e,"attempt_timed_out",c);let y=w(l(e),{category:"timed_out",code:null,errorCode:"timed_out",errorMessage:"The Attempt passed its deadline."},c);return{requestId:e,outcome:y.outcome,abandoned:m}}),dueRequests(t){let n=t??r();return e.prepare(`
8
+ SELECT id FROM work_requests
9
+ WHERE state IN ('queued', 'blocked', 'running', 'waiting') AND legacy_agent_request_id IS NULL AND executor = 'dispatcher'
10
+ AND ((deadline_at IS NOT NULL AND deadline_at <= ?) OR state = 'running')
11
+ ORDER BY created_at ASC, id ASC
12
+ `).all(n).map(e=>e.id)},enforceDue(e){let t=e??r(),n=[];for(let e of v.dueRequests(t)){let r=v.enforceRequest(e,t);r&&n.push(r)}return n},attemptDeadlineFor:(e,t)=>(0,O.attemptDeadline)((0,O.storedRetryPolicy)(e.retry_policy),e.deadline_at,t),attemptsUsed:_};return v}e.s(["ControlError",0,L,"createRequestControl",0,W],57281);let F="'grant_requested', 'grant_approved', 'grant_denied', 'grant_revoked'",U=Object.freeze({maxGlobal:4,maxPerTarget:1,leaseMs:6e4,heartbeatMs:15e3,deferMs:5e3,cancelGraceMs:3e4}),H={maxGlobal:"BOTMANCERS_DISPATCH_MAX_GLOBAL",maxPerTarget:"BOTMANCERS_DISPATCH_MAX_PER_TARGET",leaseMs:"BOTMANCERS_DISPATCH_LEASE_MS",heartbeatMs:"BOTMANCERS_DISPATCH_HEARTBEAT_MS",deferMs:"BOTMANCERS_DISPATCH_DEFER_MS",cancelGraceMs:"BOTMANCERS_DISPATCH_CANCEL_GRACE_MS"},P=Object.freeze({maxGlobal:U.maxGlobal,maxPerTarget:U.maxPerTarget});class j extends Error{requestId;constructor(e){super(`The dispatch lease for ${e} is no longer held.`),this.name="LeaseLostError",this.requestId=e}}let z=[{status:400,code:/.*/},{status:404,code:/^DECK_NOT_FOUND$/},{status:422,code:/^(WORKSPACE_[A-Z0-9_]+|PROFILE_UNSUPPORTED|RESUME_UNVERIFIED|FINALIZATION_INVALID)$/},{status:409,code:/^INDEX_DIRTY$/},{status:503,code:/^CLIENT_UNAVAILABLE$/}];function B(e){return z.some(t=>t.status===e.status&&t.code.test(e.code??""))}function K(e){switch(e.kind){case"no_grant":case"unauthorized":case"forbidden":return!0;case"rejected":return B(e);default:return!1}}function G(e){let t=e.correlation.attemptId;return t?`botmancers-attempt-${t}`:`botmancers-direct-${(0,a.randomUUID)()}`}function X(e,t){if(e instanceof c)return(0,s.attemptFailure)(e instanceof c?"agent_deck_token_missing"===e.code||"agent_deck_unauthorized"===e.code||"agent_deck_forbidden"===e.code||"agent_deck_unreachable"===e.code?"unavailable":"agent_deck_invalid_response"===e.code?"result_contract":t:t,`[${e.code}${e.deckCode?` ${e.deckCode}`:""}] ${e.message}`,e.code);return(0,s.attemptFailure)(t,e instanceof Error?e.message:String(e))}e.s(["LeaseLostError",0,j,"createDispatcher",0,function(e,t,n={}){let r=n.owner??`${C.default.hostname()}:${process.pid}:${(0,a.randomUUID)().slice(0,8)}`,i={...function(e=process.env){let t={...U};for(let n of Object.keys(H)){let r=e[H[n]];if(void 0===r||!/^\d+$/.test(r.trim()))continue;let i=Number(r.trim());Number.isSafeInteger(i)&&i>0&&(t[n]=i)}return t.maxGlobal=Math.min(t.maxGlobal,P.maxGlobal),t.maxPerTarget=Math.min(t.maxPerTarget,P.maxPerTarget),t}(),...n.config??{}},s=n.now??Date.now,o=W(e,t,{now:s,cancelGraceMs:i.cancelGraceMs}),d=e.prepare("SELECT COUNT(*) AS n FROM dispatch_leases"),u=e.prepare("SELECT COUNT(*) AS n FROM dispatch_leases WHERE target_agent_id = ?"),l=e.prepare("SELECT * FROM dispatch_attention WHERE request_id = ? AND cleared_at IS NULL"),c=e.prepare(`SELECT type, data FROM engine_events WHERE request_id = ? AND type NOT IN (${F}) ORDER BY sequence DESC LIMIT 1`),_=e.prepare(`
13
+ SELECT w.id FROM work_requests w
14
+ WHERE w.state = 'queued' AND w.executor = 'dispatcher'
15
+ AND (SELECT e.type FROM engine_events e WHERE e.request_id = w.id AND e.type NOT IN (${F}) ORDER BY e.sequence DESC LIMIT 1) = 'dispatch_deferred'
16
+ ORDER BY w.created_at ASC, w.id ASC
17
+ `),p=e.prepare("SELECT 1 FROM dispatch_leases WHERE request_id = ? AND token = ?"),f=e.prepare("SELECT decision FROM wake_safety_decisions WHERE request_id = ? ORDER BY sequence DESC LIMIT 1"),h=e.prepare("SELECT status FROM wakes WHERE id = ?"),m=e.prepare(`
18
+ SELECT w.id FROM work_requests w
19
+ WHERE w.state = 'queued' AND w.legacy_agent_request_id IS NULL AND w.executor = 'dispatcher' AND w.id <> ?
20
+ AND (w.created_at < ? OR (w.created_at = ? AND w.rowid < (SELECT rowid FROM work_requests WHERE id = ?)))
21
+ AND (w.next_eligible_at IS NULL OR w.next_eligible_at <= ?)
22
+ AND (w.deadline_at IS NULL OR w.deadline_at > ?)
23
+ AND NOT EXISTS (SELECT 1 FROM dispatch_attention a WHERE a.request_id = w.id AND a.cleared_at IS NULL)
24
+ AND (SELECT d.decision FROM wake_safety_decisions d WHERE d.request_id = w.id ORDER BY d.sequence DESC LIMIT 1) = 'allowed'
25
+ AND (w.wake_event_id IS NULL OR EXISTS (SELECT 1 FROM wakes k WHERE k.id = w.wake_event_id AND k.status = 'accepted'))
26
+ AND (SELECT COUNT(*) FROM dispatch_leases l WHERE l.target_agent_id = w.target_agent_id) < ?
27
+ ORDER BY w.created_at ASC, w.rowid ASC
28
+ LIMIT 1
29
+ `);function g(e,n,r,a){let o=c.get(e.id);return(o?.type==="dispatch_deferred"&&o.data?JSON.parse(o.data).reason:null)!==n&&t.appendEvent(e.id,{type:"dispatch_deferred",data:{reason:n,active_global:r.global,active_target:r.target,max_global:i.maxGlobal,max_per_target:i.maxPerTarget,...a?{waiting_behind:a}:{}},now:s()}),a?{ok:!1,reason:n,blockedBy:a}:{ok:!1,reason:n}}function y(e){if(!p.get(e.requestId,e.token))throw new j(e.requestId)}let w={owner:r,config:i,now:s,control:o,claim:(n,c={})=>t.transaction(()=>{let _=t.getWorkRequest(n);if(!_||"queued"!==_.state||void 0!==c.expectedVersion&&_.version!==c.expectedVersion)return{ok:!1,reason:"not_queued"};let p=s();if(null!==_.deadline_at&&p>=_.deadline_at)return o.timeOut(n,p),{ok:!1,reason:"timed_out"};if(null!==_.next_eligible_at&&p<_.next_eligible_at)return{ok:!1,reason:"not_eligible"};if(l.get(n))return{ok:!1,reason:"attention"};let y=function(e){let t=f.get(e.id);if(t?.decision!=="allowed")return"The request has no allowed safety decision.";if(null!==e.wake_event_id){let t=h.get(e.wake_event_id);if(t?.status!=="accepted")return"The Wake that created this request was not accepted."}return null}(_);if(y)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"not_authorized",expectedVersion:_.version,errorCode:"not_authorized",errorMessage:y,now:p}),{ok:!1,reason:"not_authorized"};let w=(0,O.storedRetryPolicy)(_.retry_policy),v=o.attemptsUsed(_);if(v>=w.max_attempts)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"retries_exhausted",expectedVersion:_.version,errorCode:"retries_exhausted",errorMessage:"No Attempt is left in the retry budget.",data:{attempt_count:v,max_attempts:w.max_attempts},now:p}),{ok:!1,reason:"exhausted"};let k=d.get().n,E=u.get(_.target_agent_id).n;if(k>=i.maxGlobal)return g(_,"global_limit",{global:k,target:E});if(E>=i.maxPerTarget)return g(_,"target_limit",{global:k,target:E});let b=m.get(n,_.created_at,_.created_at,n,p,p,i.maxPerTarget);if(b)return g(_,"older_waiting",{global:k,target:E},b.id);let I={requestId:n,owner:r,token:(0,a.randomUUID)(),expiresAt:p+i.leaseMs};return e.prepare(`
30
+ INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
31
+ VALUES (?, ?, ?, ?, ?, ?, ?)
32
+ `).run(n,_.target_agent_id,r,I.token,p,p,I.expiresAt),t.appendEvent(n,{type:"dispatch_claimed",data:{owner:r,lease_expires_at:I.expiresAt,active_global:k+1,active_target:E+1,attempt_number:v+1,max_attempts:w.max_attempts},now:p}),e.prepare("UPDATE work_requests SET attempt_count = ?, next_eligible_at = NULL WHERE id = ?").run(v+1,n),{ok:!0,lease:I,request:t.transitionWorkRequest(n,{from:"queued",to:"running",expectedVersion:_.version,data:c.data,now:p})}}),claimNext(t){let n=t??e.prepare(`
33
+ SELECT id FROM work_requests WHERE state = 'queued' AND legacy_agent_request_id IS NULL AND executor = 'dispatcher'
34
+ AND (next_eligible_at IS NULL OR next_eligible_at <= ?)
35
+ ORDER BY created_at ASC, rowid ASC
36
+ `).all(s()).map(e=>e.id),r="not_queued";for(let e of n){let t=w.claim(e);if(t.ok||"global_limit"===t.reason)return t;("target_limit"===t.reason||"older_waiting"===t.reason)&&(r=t.reason)}return{ok:!1,reason:r}},recordLaunchIntent:(n,i,o,d)=>t.transaction(()=>{y(n);let u=s(),l=d?(0,a.createHash)("sha256").update(d.body).digest("hex"):null;return e.prepare(`
37
+ INSERT INTO attempt_launch_intents (attempt_id, request_id, transport, idempotency_key, body, body_hash, grant_fingerprint, owner, created_at)
38
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
39
+ `).run(i,n.requestId,o,d?.idempotencyKey??null,d?.body??null,l,d?.grantFingerprint??null,r,u),t.appendEvent(n.requestId,{type:"launch_intent_recorded",attemptId:i,data:{transport:o,idempotency_key:d?.idempotencyKey??null,body_hash:l,grant_fingerprint:d?.grantFingerprint??null},now:u}),w.launchIntent(i)}),launchIntent:t=>e.prepare("SELECT * FROM attempt_launch_intents WHERE attempt_id = ?").get(t),heartbeat(t){let n=s(),r=n+i.leaseMs,a=1===e.prepare("UPDATE dispatch_leases SET heartbeat_at = ?, expires_at = ? WHERE request_id = ? AND token = ?").run(n,r,t.requestId,t.token).changes;return a&&(t.expiresAt=r),a},holds:e=>!!p.get(e.requestId,e.token),assertHeld(e){y(e)},release(n,i){t.transaction(()=>{y(n),e.prepare("DELETE FROM dispatch_leases WHERE request_id = ? AND token = ?").run(n.requestId,n.token),t.appendEvent(n.requestId,{type:"dispatch_released",data:{owner:r,outcome:i},now:s()})})},defer(n,a,o=null){t.transaction(()=>{y(n);let d=s();n.expiresAt=d+i.deferMs,e.prepare("UPDATE dispatch_leases SET heartbeat_at = ?, expires_at = ? WHERE request_id = ? AND token = ?").run(d,n.expiresAt,n.requestId,n.token),t.appendEvent(n.requestId,{type:"reconcile_deferred",attemptId:o,data:{owner:r,reason:a,retry_at:n.expiresAt},now:d})})},setAttention:(n,i)=>t.transaction(()=>{y(n);let o=s(),d=(0,a.randomUUID)();e.prepare("INSERT INTO dispatch_attention (id, request_id, attempt_id, reason, detail, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(d,n.requestId,i.attemptId,i.reason,i.detail??null,o),t.appendEvent(n.requestId,{type:"attention_set",attemptId:i.attemptId,data:{reason:i.reason,detail:i.detail??null},now:o});let u=t.getWorkRequest(n.requestId);return u?.state==="running"&&t.transitionWorkRequest(n.requestId,{from:"running",to:"waiting",reason:`manual_attention:${i.reason}`,now:o}),e.prepare("DELETE FROM dispatch_leases WHERE request_id = ? AND token = ?").run(n.requestId,n.token),t.appendEvent(n.requestId,{type:"dispatch_released",data:{owner:r,outcome:"attention"},now:o}),l.get(n.requestId)}),attention:e=>l.get(e),recoverable(){let t=s(),n=[];for(let i of e.prepare("SELECT request_id, owner, token, expires_at FROM dispatch_leases ORDER BY acquired_at ASC, request_id ASC").all()){if(i.owner===r&&i.expires_at>t)continue;let e=i.expires_at<=t?"lease_expired":!function(e){let t=/^(.*):(\d+):[^:]+$/.exec(e);if(!t||t[1]!==C.default.hostname())return!1;let n=Number(t[2]);if(n===process.pid)return!1;try{return process.kill(n,0),!1}catch(e){return"ESRCH"===e.code}}(i.owner)?null:"owner_exited";e&&n.push({requestId:i.request_id,reason:e,priorToken:i.token,priorOwner:i.owner})}for(let t of e.prepare(`
40
+ SELECT w.id FROM work_requests w
41
+ WHERE w.state = 'running' AND w.legacy_agent_request_id IS NULL AND w.executor = 'dispatcher'
42
+ AND NOT EXISTS (SELECT 1 FROM dispatch_leases l WHERE l.request_id = w.id)
43
+ AND NOT EXISTS (SELECT 1 FROM dispatch_attention a WHERE a.request_id = w.id AND a.cleared_at IS NULL)
44
+ ORDER BY w.updated_at ASC, w.id ASC
45
+ `).all())n.push({requestId:t.id,reason:"unleased_running",priorToken:null,priorOwner:null});return n},takeOver:n=>t.transaction(()=>{let o=s(),d={requestId:n.requestId,owner:r,token:(0,a.randomUUID)(),expiresAt:o+i.leaseMs};if(n.priorToken){let t="lease_expired"===n.reason?"AND expires_at <= ?":"",i=[r,d.token,o,o,d.expiresAt,n.requestId,n.priorToken];if(t&&i.push(o),1!==e.prepare(`
46
+ UPDATE dispatch_leases SET owner = ?, token = ?, acquired_at = ?, heartbeat_at = ?, expires_at = ?
47
+ WHERE request_id = ? AND token = ? ${t}
48
+ `).run(...i).changes)return null}else{let i=t.getWorkRequest(n.requestId);if(!i||"running"!==i.state||e.prepare("SELECT 1 FROM dispatch_leases WHERE request_id = ?").get(n.requestId)||l.get(n.requestId))return null;e.prepare(`
49
+ INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
50
+ VALUES (?, ?, ?, ?, ?, ?, ?)
51
+ `).run(n.requestId,i.target_agent_id,r,d.token,o,o,d.expiresAt)}return t.appendEvent(n.requestId,{type:"dispatch_lease_taken_over",data:{owner:r,previous_owner:n.priorOwner,reason:n.reason},now:o}),d}),deferredRequestIds:()=>_.all().map(e=>e.id),leaseOf:t=>e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?").get(t)};return w},"decideRepostResult",0,function(e){switch(e.kind){case"accepted":return{action:"reattach"};case"unreachable":return{action:"defer",reason:"unreachable"};case"unauthorized":case"forbidden":case"no_grant":return{action:"attention",reason:"grant"};case"rejected":if(409===e.status&&"IDEMPOTENCY_CONFLICT"===e.code)return{action:"attention",reason:"idempotency_conflict"};if(B(e))return{action:"fail",category:"launch_failed",code:e.code??String(e.status)};if(null!==e.status&&e.status>=500)return{action:"defer",reason:"server_error"};return{action:"attention",reason:"unrecognized_response"};default:return{action:"attention",reason:"unrecognized_response"}}},"decideWithRunId",0,function(e){switch(e.kind){case"run":if("died"===e.state)return{action:"interrupted_attention",reason:"run_died"};return{action:"reattach"};case"not_found":return{action:"attention",reason:"run_not_found"};case"unauthorized":return{action:"attention",reason:"grant_expired"};case"forbidden":return{action:"attention",reason:"grant_scope"};case"no_grant":return{action:"attention",reason:"grant_unavailable"};case"unreachable":return{action:"defer",reason:"unreachable"};case"rejected":if(null!==e.status&&e.status>=500)return{action:"defer",reason:"server_error"};return{action:"attention",reason:"unrecognized_response"};default:return{action:"attention",reason:"unrecognized_response"}}},"decideWithoutRunId",0,function(e){return e.reconcilable?e.intent?.body&&e.intent.idempotency_key?e.currentGrantFingerprint?e.intent.grant_fingerprint!==e.currentGrantFingerprint?{action:"attention",reason:"grant_mismatch"}:{action:"repost"}:{action:"attention",reason:"grant_unavailable"}:{action:"attention",reason:"launch_intent_missing"}:{action:"interrupted",reason:"runtime_unobservable"}},"dispatchFault",0,function(e,t){},"launchRejectedBeforeWork",0,K],54226);let J=e=>u.includes(e);async function V(e){let t={state:"starting",result:null,resultMismatch:null,sessionId:null,usage:null},n=[],r=null;for(;;){let i=await T(e,r);for(let e of i.events)(0,N.usageFromEvent)(e)&&n.push(e),"sessionId"in e&&"string"==typeof e.sessionId&&e.sessionId&&(t.sessionId=e.sessionId),"result"===e.type&&("string"==typeof e.result&&e.result.length>0?(t.result=e.result,t.resultMismatch=null):(t.result=null,t.resultMismatch=null===e.result?"null":Array.isArray(e.result)?"array":""===e.result?"empty string":typeof e.result));t.state=i.state;let s=i.nextCursor!==(r??"0")&&i.events.length>0;if(r=i.nextCursor,J(i.state)&&!s)return t.usage=(0,N.usageFromEvents)(n),t;s||await new Promise(e=>setTimeout(e,1e3))}}async function Y(e,t){if(!t?.finalization)return{baselineRef:null,baselineDigest:null,candidate:{ok:!1,code:"FINALIZATION_NOT_PREPARED",message:"The run reported no finalization baseline."}};let n={baselineRef:t.finalization.baselineRef,baselineDigest:t.finalization.baselineDigest};try{let r=await R(e);if(r.baselineRef!==t.finalization.baselineRef||r.baselineDigest!==t.finalization.baselineDigest)return{...n,candidate:{ok:!1,code:"BASELINE_MISMATCH",message:"Agent Deck returned candidate evidence for a different baseline."}};return{...n,candidate:{ok:!0,manifest:{baselineRef:r.baselineRef,baselineDigest:r.baselineDigest,baseCommit:r.baseCommit,manifestDigest:r.manifestDigest,files:r.files}}}}catch(r){let e=r instanceof c?r.deckCode??r.code:"agent_deck_invalid_response",t=r instanceof c?r.message:"The candidate manifest could not be read.";return{...n,candidate:{ok:!1,code:e,message:t}}}}function Z(e){let t;if("readonly"!==e.toolProfile&&"edit"!==e.toolProfile)return{ok:!1,failure:(0,s.attemptFailure)("unsupported_authority",`Unsupported tool profile: ${JSON.stringify(String(e.toolProfile))}.`)};if(e.prepareFinalization&&"edit"!==e.toolProfile)return{ok:!1,failure:(0,s.attemptFailure)("unsupported_authority","Only an edit Attempt can prepare Git finalization.")};if(!e.deck)return{ok:!1,failure:(0,s.attemptFailure)("unavailable","An Agent Deck run requires a deck.")};if(!e.cwd)return{ok:!1,failure:(0,s.attemptFailure)("unavailable","An Agent Deck run requires a working directory.")};try{t=(0,x.parseDeckRuntime)(e.target.agent)}catch(e){return{ok:!1,failure:(0,s.attemptFailure)("unavailable",e instanceof Error?e.message:String(e))}}let n=e.sessionBinding?.externalSessionId??null;return{ok:!0,body:{deckId:e.deck,client:t,cwd:e.cwd,prompt:(0,x.deckPromptForAttempt)(e.prompt),tools:e.toolProfile,...n?{resumeSessionId:n}:{},...!0===e.prepareFinalization?{prepareFinalization:!0}:{}}}}function Q(e){if(!(e instanceof c))return{kind:"rejected",status:null,code:null};switch(e.code){case"agent_deck_token_missing":return{kind:"no_grant"};case"agent_deck_unauthorized":return{kind:"unauthorized"};case"agent_deck_forbidden":return{kind:"forbidden"};case"agent_deck_unreachable":return{kind:"unreachable"};default:if(404===e.status&&("RUN_NOT_FOUND"===e.deckCode||null===e.deckCode))return{kind:"not_found"};return{kind:"rejected",status:e.status,code:e.deckCode}}}let ee="agent-deck-api";function et(e){let t=t=>({adapter:ee,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:e,finishedAt:Date.now(),failure:null,...t});return{result:t,failed:(e,n={})=>t({status:"failed",failure:e,...n})}}async function en(e,t,n,r){let{result:i,failed:a}=et(r),o=t.resumeSessionId,d=t.prepareFinalization,u=(0,s.interruption)({signal:t.signal??null,deadlineAt:t.deadlineAt}),l={externalRunId:e};try{if(d)try{let t=await S(e);t.finalization&&n?.({type:"progress",adapter:ee,at:Date.now(),detail:{phase:"finalization_prepared",baseline_ref:t.finalization.baselineRef,baseline_digest:t.finalization.baselineDigest}})}catch{}let t=V(e);t.catch(()=>{});let r=await Promise.race([t.then(e=>({observed:e}),e=>({error:e})),u.promise.then(e=>({interrupted:e}))]);if("interrupted"in r){let t="requested";try{await A(e)}catch{t="failed"}return a(r.interrupted,{...l,externalCancel:t})}if("error"in r){let t="requested";try{await A(e)}catch{t="failed"}return a(X(r.error,"runtime_failed"),{...l,externalCancel:t})}let{observed:c}=r,_=null;try{_=await S(e)}catch(e){if(!d)return a(X(e,"runtime_failed"),{...l,usage:c.usage})}let p=_?.sessionId??c.sessionId,f=d?await Y(e,_):void 0,h={...l,externalSessionId:p,usage:c.usage,...f?{finalization:f}:{}};if("canceled"===c.state)return a((0,s.attemptFailure)("cancelled",`Agent Deck run ${e} was canceled.`),h);if("ended"!==c.state)return a((0,s.attemptFailure)("runtime_failed",`Agent Deck run ${e} ended in state ${c.state}.`),h);if(null===c.result)return a((0,s.attemptFailure)("result_contract",`Agent Deck run ${e} result contract mismatch: expected a non-empty string result, got ${c.resultMismatch??"no result event"}.`),h);if(o&&null!==p&&p!==o)return a((0,s.attemptFailure)("session_mismatch",`resume run ${e} forked the session (expected ${o}, got ${p}); failing closed.`),h);let m=f?.candidate?.ok?f.candidate.manifest:null;return i({status:"completed",...h,externalSessionId:p??o,output:c.result,artifacts:m?[{kind:"candidate_manifest",ref:m.manifestDigest}]:[]})}finally{u.dispose()}}let er={currentGrantFingerprint:f,async inspect(e){try{let t=await S(e);return{kind:"run",state:t.state}}catch(e){return Q(e)}},async repost(e){let t;try{t=JSON.parse(e.body)}catch{return{kind:"rejected",status:null,code:"INTENT_UNREADABLE"}}try{let n=await I(t,e.idempotencyKey);return{kind:"accepted",runId:n.runId}}catch(e){return Q(e)}},follow:(e,t,n)=>en(e,t,n,Date.now()),async evidence(e){let t=null;try{t=await S(e)}catch{}return Y(e,t)},async cancel(e){try{return await A(e),"requested"}catch{return"failed"}}};var ei=e.i(64974);class es extends Error{code;constructor(e,t){super(t),this.name="DispatchFailure",this.code=e}}let ea={"hermes-gateway":()=>(function(e={}){let t="hermes-gateway";return{name:t,async run(n,r){let a=Date.now(),o=(e,n=null)=>({status:"failed",adapter:t,externalRunId:null,externalSessionId:n,output:null,artifacts:[],startedAt:a,finishedAt:Date.now(),failure:e});if("readonly"!==n.toolProfile)return o((0,s.attemptFailure)("unsupported_authority",`The Hermes gateway does not support the ${n.toolProfile} tool profile.`));let d=(e.loadConfig??i.loadHermesConfig)();if(!d)return o((0,s.attemptFailure)("unavailable","The Hermes gateway is not configured."));let u=(0,s.preLaunchInterruption)(n);if(u)return o(u);if(n.freshSession&&n.sessionBinding)return o((0,s.attemptFailure)("session_mismatch","A fresh-session turn cannot resume a session."));let l=n.sessionBinding?.externalSessionId??(n.freshSession?(0,i.hermesFreshSessionIdForBot)(n.target.agentId,d):(0,i.hermesSessionIdForBot)(n.target.agentId,d)),c=new AbortController,_=(0,s.interruption)(n),p=null;_.promise.then(e=>{p=e,c.abort()}),r?.({type:"started",adapter:t,at:Date.now(),externalRunId:null,externalSessionId:l});try{var f;let r=await (0,i.hermesChat)({config:d,profilePath:n.target.hermesProfilePath||i.HERMES_DEFAULT_CHAT_PATH,sessionId:l,messages:(f=n.prompt,"text"===f.kind?[{role:"user",content:f.text}]:[{role:"system",content:f.system},...f.history.map(e=>e.fromAgent?{role:"assistant",content:e.content}:{role:"user",content:`[From ${e.speakerLabel}] ${e.content}`})]),signal:c.signal,...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});return{status:"completed",adapter:t,externalRunId:null,externalSessionId:l,output:r,artifacts:[],startedAt:a,finishedAt:Date.now(),failure:null}}catch(r){let e=r instanceof i.HermesError?r.code:"unknown";if(p)return o({...p,code:e},l);let t="timeout"===e?"timed_out":"runtime_failed",n=r instanceof i.HermesError&&void 0!==r.status?` ${r.status}`:"";return o((0,s.attemptFailure)(t,`The Hermes gateway did not complete the turn (${e}${n}).`,e),l)}finally{_.dispose()}}}})({fetchImpl:null}),"agent-deck-run":()=>({name:ee,reconciler:er,externalCancel:!0,launchIntent(e){let t=Z(e);return t.ok?{idempotencyKey:G(e),body:JSON.stringify(t.body),grantFingerprint:f()}:null},async run(e,t){let n,r=Date.now(),{failed:i}=et(r),a=Z(e);if(!a.ok)return i(a.failure);let o=(0,s.preLaunchInterruption)(e);if(o)return i(o);try{n=(await I(a.body,G(e))).runId}catch(t){let e=K(Q(t));return i(X(t,"launch_failed"),e?{}:{launchUnconfirmed:!0})}return t?.({type:"started",adapter:ee,at:Date.now(),externalRunId:n,externalSessionId:null}),en(n,{resumeSessionId:e.sessionBinding?.externalSessionId??null,prepareFinalization:!0===e.prepareFinalization,deadlineAt:e.deadlineAt??null,signal:e.signal??null},t,r)}})},eo=["agent_deck_token_missing","agent_deck_unauthorized","agent_deck_forbidden","agent_deck_unreachable"];function ed(e){return"completed"===e.status?"succeeded":e.failure?.category==="cancelled"?"cancelled":e.failure?.category==="timed_out"?"timed_out":"failed"}function eu(e,t,n){(function(e){if(e.usage||"completed"===e.status||e.externalRunId)return!0;let t=e.failure?.category;return void 0!==t&&!["unavailable","unsupported_authority","launch_failed"].includes(t)})(n)&&e.recordAttemptUsage(t,{usage:n.usage??null,observedAt:n.finishedAt})}function el(e,t,n){return eu(e,t,n),e.finishAttempt(t,{outcome:ed(n),output:n.output,errorCategory:n.failure?.category??null,errorMessage:n.failure?.message??null,artifacts:n.artifacts,...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{},now:n.finishedAt})}function ec(e,t,n,r=Date.now()){eu(e,t.id,n);let i=e.getWorkRequest(t.request_id);e.appendEvent(t.request_id,{type:"late_result_recorded",attemptId:t.id,data:{attempt_number:t.attempt_number,attempt_outcome:t.outcome,result_status:n.status,result_outcome:ed(n),error_category:n.failure?.category??null,external_run_id:n.externalRunId,output:n.output,request_state:i?.state??null},now:r})}async function e_(e,t,n,r={}){let i,a=!1,o=!1;try{i=await n.run(t.input,n=>{var i,s;if("started"===n.type&&(o=!0),a||(i=t.attempt,s=r.fence,!e.transaction(()=>(!s||!!s())&&("started"===n.type?((n.externalRunId||n.externalSessionId)&&e.recordAttemptExternalIds(i.id,{...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{}}),e.appendEvent(i.request_id,{type:"runtime_started",attemptId:i.id,data:{adapter:n.adapter,external_run_id:n.externalRunId},now:n.at})):e.appendEvent(i.request_id,{type:"runtime_progress",attemptId:i.id,data:{adapter:n.adapter,...n.detail},now:n.at}),!0)))){a=!0;return}r.onEvent?.(n)})}catch(r){let e=Date.now();i={status:"failed",adapter:n.name,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:t.attempt.started_at,finishedAt:e,failure:(0,s.attemptFailure)("runtime_failed",r instanceof Error?r.message:String(r))}}return r.sanitize&&(i=r.sanitize(i)),e.transaction(()=>{let s=e.getAttempt(t.attempt.id);if(s&&null!==s.finished_at)return ec(e,s,i),{attempt:s,result:i,projected:void 0,late:!0,abandoned:null};let a=o?ep(t.attempt,n,t.input.signal??null,i):null,d=a?ef(e,a,i):el(e,t.attempt.id,i),u=r.project?r.project(i,d):void 0;return{attempt:d,result:i,projected:u,late:!1,abandoned:a}})}function ep(e,t,n,r){if("failed"!==r.status)return null;let i=r.failure?.category,s="failed"===r.externalCancel,a={requestId:e.request_id,attemptId:e.id,externalRunId:r.externalRunId,transport:t.name};return"cancelled"!==i&&"timed_out"!==i?s?{...a,reason:"observation_lost",externalCancel:"failed"}:null:("cancelled"!==i||n?.aborted)&&(!t.externalCancel||s)?{...a,reason:i,externalCancel:s?"failed":null}:null}function ef(e,t,n){eu(e,t.attemptId,n);let r="failed"===t.externalCancel?"The runtime did not accept the cancel request":"The runtime cannot stop the run",i=e.finishAttempt(t.attemptId,{outcome:ed(n),errorCategory:"abandoned",errorMessage:`${n.failure?.message??"The attempt was interrupted."} ${r}; it may continue and a later result is not awaited.`.slice(0,500),artifacts:n.artifacts,...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{},now:n.finishedAt});return t.externalRunId=i.external_run_id,e.appendEvent(t.requestId,{type:"attempt_abandoned",attemptId:t.attemptId,data:{reason:t.reason,attempt_number:i.attempt_number,external_run_id:i.external_run_id,transport:t.transport,local_only:!0,error_code:n.failure?.code??null,external_cancel:t.externalCancel},now:n.finishedAt}),i}e.s(["DispatchFailure",0,es,"adapterForTransport",0,function(e){return"hermes-gateway"===e?ea["hermes-gateway"]():"agent-deck-api"===e?ea["agent-deck-run"]():null},"agentForDispatch",0,function(e){return(0,r.resolveAgent)(e).agent},"dispatchFailureFor",0,function(e){var t;let n,r=e.failure?.category??"runtime_failed";if("hermes-gateway"===e.adapter)return"unavailable"===r?new es("agent_unavailable","The agent runtime is not configured."):new es("runtime_failed",`The agent runtime did not complete the turn (${e.failure?.code??"unknown"}).`);let i="agent-deck-api"===e.adapter?(t=e,(n=t.failure?.code)&&eo.includes(n)?n:null):null;return i?new es("agent_unavailable",`${_[i]} [${i}]`):"unavailable"===r?new es("agent_unavailable","The agent runtime is not available."):"cancelled"===r?new es("runtime_failed","The agent run was cancelled."):"launch_failed"===r?new es("runtime_failed","The agent runtime did not start the turn."):new es("runtime_failed","The agent runtime did not complete the turn.")},"prepareDispatch",0,function(e){var s,a;let d,u,l=(0,r.resolveAgent)(e.bot);if(!l.launchable||"agent_deck"===l.launch_profile&&!l.deck_id)throw new es("agent_unavailable","launch_profile"===(s=l.launch_blocker)?"The agent has no launch profile chosen.":"session_scope"===s?"The agent has no session scope.":"direct_runtime"===s?"Direct launch is not available for this agent yet.":"The agent has no Agent Deck selected.");let c={prompt:{kind:"conversation",system:(u=(a=e.bot).title?`${a.name} (${a.title})`:a.name,`You are ${u}.
52
+ ${a.description}`),history:e.history},deck:l.deck_id,toolProfile:e.toolProfile??ei.TOOL_PROFILE_FOR_KIND.conversation,sessionBinding:e.sessionBinding??null,correlation:{},...e.freshSession?{freshSession:!0}:{}};if("hermes-gateway"===(0,r.agentTransport)(l.agent))return{agent:l.agent,adapter:ea["hermes-gateway"](),input:{...c,target:{agentId:e.bot.id,agent:l.agent,hermesProfilePath:(0,i.hermesProfilePathForBot)(e.bot)},cwd:null}};try{d=(0,o.resolveAndEnsureBotWorkdir)(e.bot.id,l.working_directory)}catch{throw new es("agent_unavailable","The agent working directory is unavailable.")}return{agent:l.agent,adapter:ea["agent-deck-run"](),input:{...c,target:{agentId:e.bot.id,agent:l.agent},cwd:d,...e.prepareFinalization&&"edit"===c.toolProfile&&function(e){let r=n.default.resolve(e);for(;;){if(t.default.existsSync(n.default.join(r,".git")))return!0;let e=n.default.dirname(r);if(e===r)return!1;r=e}}(d)?{prepareFinalization:!0}:{}}}}],27510),e.s(["abandonedLocally",0,ep,"beginAttempt",0,function(e,t,n){let r=n.input.sessionBinding;if(r&&!r.bindingId)throw new D.EngineStoreError("invalid_input","A persisted resume attempt names its Session Binding.");if(r&&n.input.freshSession)throw new D.EngineStoreError("invalid_input","A fresh-session attempt cannot resume a Session Binding.");let i=e.createAttempt(t,{kind:r?"resume":"launch",adapter:n.agent,toolProfile:n.input.toolProfile,launchSnapshot:function(e){let{input:t}=e;return{...e.snapshot??{},agent:e.agent,agent_id:t.target.agentId,transport:e.adapter.name,deck:t.deck,cwd:t.cwd,tool_profile:t.toolProfile,hermes_profile_path:t.target.hermesProfilePath??null,prompt_kind:t.prompt.kind,prompt_hash:(0,a.createHash)("sha256").update(JSON.stringify(t.prompt)).digest("hex"),session_binding_id:t.sessionBinding?.bindingId??null,prepare_finalization:!0===t.prepareFinalization,fresh_session:!0===t.freshSession,deadline_at:t.deadlineAt??null}}(n),resumedSessionBindingId:r?.bindingId??null,now:n.now});return{attempt:i,input:(0,s.freezeAttemptInput)({...n.input,correlation:{...n.input.correlation,requestId:t,attemptId:i.id}})}},"recordAbandonedResult",0,ef,"recordAttemptResult",0,el,"recordLateResult",0,ec,"runAttempt",0,e_],53059)},76459,e=>{"use strict";var t=e.i(54799),n=e.i(62294),r=e.i(35613),i=e.i(64974),s=e.i(142);let a={invalid_request:400,conversation_not_found:404,conversation_not_writable:409,target_not_found:404,idempotency_conflict:409,unknown_principal:403,intake_failed:500};class o extends Error{code;constructor(e,t){super(t),this.name="IntakeError",this.code=e}get status(){return a[this.code]}}let d={ui:["bot","group"],api:["agent"]};function u(e){return"string"==typeof e&&e.trim().length>0}function l(e,t,r){n.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)").run(e,t.kind,t.id,r)}function c(e,r,i,s,a,o){let d=(0,t.randomUUID)();return n.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, content, handoff_targets, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(d,r,"bot"===i.kind?"bot":"user","ui"===e?null:i.id,i.kind,s,a&&a.length>0?JSON.stringify(a):null,o),d}function _(e){return e.map(e=>n.engine.getWorkRequest(e)).filter(e=>!!e)}e.s(["IntakeError",0,o,"acceptConversationMessage",0,function(e){var a,p;let f,h;if(!e.requester||!["person","bot","service"].includes(e.requester.kind)||!u(e.requester.id))throw new o("invalid_request","A requester principal is required.");if("unknown"===(0,s.categorizeIntakeCaller)(e.surface,e.requester))throw new o("unknown_principal","The caller is not a recognized principal.");if(!u(e.content))throw new o("invalid_request","content is required.");if(!u(e.idempotencyKey)||e.idempotencyKey.length>200)throw new o("invalid_request","An idempotency key (1-200 characters) is required.");let m=(a=e.surface,p=e.fingerprint,(0,t.createHash)("sha256").update(JSON.stringify([a,p??null])).digest("hex"));try{f=function(e,r){let{surface:a,requester:p}=e;return n.default.transaction(()=>{let f,h=n.default.prepare("SELECT * FROM conversation_intakes WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(p.kind,p.id,e.idempotencyKey);if(h){var m;if(h.request_hash!==r)throw new o("idempotency_conflict","The idempotency key was already used with a different payload.");let e=JSON.parse(h.work_request_ids);return{surface:h.surface,conversationId:h.conversation_id,acceptedMessageId:h.source_event_id,requestIds:e,requests:_(e),replayed:!0}}let g=Date.now();if("id"in e.conversation){let t=n.default.prepare("SELECT * FROM conversations WHERE id = ?").get(e.conversation.id);if(!t||(m=t.id,!n.default.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(m,p.kind,p.id)))throw new o("conversation_not_found","No conversation with that id is visible to this requester.");if(!d[a].includes(t.type))throw new o("conversation_not_writable","api"===a?"UI conversations are written through the UI compatibility routes.":"Agent conversations are written through the agent conversation API.");f=t}else{if("api"!==a)throw new o("invalid_request","Only the agent conversation API opens new conversations.");f={id:(0,t.randomUUID)(),type:"agent",origin_kind:p.kind,origin_id:p.id,created_at:g},n.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(f.id,f.type,p.kind,p.id,g),l(f.id,p,g)}let y=e.route(f),w=new Set,v=[];for(let e of y.deliveries){let t=e.conversationId??f.id,r=`${t}:${e.agentId}`;if(!w.has(r)){if(w.add(r),!u(e.agentId)||!n.bots.getById(e.agentId))throw new o("target_not_found","No registered agent has that id.");if("bot"===p.kind&&p.id===e.agentId)throw new o("invalid_request","An agent cannot address itself.");if(t!==f.id&&!n.default.prepare("SELECT 1 FROM conversations WHERE id = ?").get(t))throw new o("target_not_found","The target conversation does not exist.");v.push({agentId:e.agentId,conversationId:t})}}let k=new Map;for(let t of(k.set(f.id,c(a,f.id,p,e.content,y.handoffTargets,g)),v))k.has(t.conversationId)||k.set(t.conversationId,c(a,t.conversationId,p,e.content,y.handoffTargets,g));let E=(0,i.selectExecutionPolicy)({entryPoint:a,executionKind:"conversation"});if(!E.ok)throw new o("invalid_request",E.reason);let b=E.policy,I=(0,s.categorizeIntakeCaller)(a,p);if("unknown"===I)throw new o("unknown_principal","The caller is not a recognized principal.");let S={safety_version:s.WAKE_SAFETY_VERSION,root_principal:{kind:p.kind,id:p.id},wake_depth:0,grant_rule:"readonly_default",grant_id:null},T=[];for(let t of v){l(t.conversationId,{kind:"bot",id:t.agentId},g);let r=1===v.length?e.idempotencyKey:`${e.idempotencyKey}#${t.conversationId}:${t.agentId}`,{request:i}=n.engine.createOrGetWorkRequest({sourceConversationId:t.conversationId,sourceEventId:k.get(t.conversationId),requester:p,targetAgentId:t.agentId,intent:e.content,executionKind:b.execution_kind,toolProfile:b.tool_profile,idempotencyKey:r,policy:{source:"conversation_intake",surface:a},executionPolicy:b,rootPrincipal:p,wakeDepth:0,safetySnapshot:S,safety:{principalType:I,principal:p,decision:"allowed",grantRule:"readonly_default",snapshot:S,now:g},executor:e.executor,now:g});T.push(i.id)}for(let[e,t]of k){let r=v.flatMap((t,n)=>t.conversationId===e?[T[n]]:[]);1===r.length&&n.default.prepare("UPDATE messages SET request_id = ? WHERE id = ?").run(r[0],t)}return n.default.prepare(`
53
+ INSERT INTO conversation_intakes (
54
+ requester_kind, requester_id, idempotency_key, request_hash, surface,
55
+ conversation_id, source_event_id, work_request_ids, created_at
56
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
57
+ `).run(p.kind,p.id,e.idempotencyKey,r,a,f.id,k.get(f.id),JSON.stringify(T),g),e.beforeCommit?.(),{surface:a,conversationId:f.id,acceptedMessageId:k.get(f.id),requestIds:T,requests:_(T),replayed:!1}}).immediate()}(e,m)}catch(e){if(e instanceof o)throw e;if(e instanceof r.EngineStoreError&&"idempotency_conflict"===e.code)throw new o("idempotency_conflict","The idempotency key was already used with a different payload.");throw console.error("Conversation intake failed:",e),new o("intake_failed","The message could not be accepted.")}let g=e.dispatch;try{h=g(f)}catch(e){h=Promise.reject(e)}let y=Promise.resolve(h).catch(e=>{console.error("Intake dispatch failed:",e)});return{...f,dispatched:y}},"getAcceptedMessage",0,function(e){return n.default.prepare("SELECT * FROM messages WHERE id = ?").get(e)}])},39872,17834,40712,e=>{"use strict";var t=e.i(62294),n=e.i(64974),r=e.i(54799),i=e.i(62349),s=e.i(51749);let a=new Set(["version","target","executionKind","objective","contextWorkRequests","resumeWorkRequest","limits"]),o=new Set(["maxAttempts","deadlineSeconds"]),d=new Set(["conversation","implementation","review","revision"]);function u(e,t){return"string"==typeof e&&e.trim().length>0&&e.length<=t}function l(e,t,n){return Number.isInteger(e)&&e>=t&&e<=n}function c(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"envelope must be a JSON object"};let t=Object.keys(e).filter(e=>!a.has(e));if(t.length>0)return{ok:!1,reason:`unknown field ${t.join(", ")}`};if(1!==e.version)return{ok:!1,reason:"version must be 1"};if(!u(e.target,120))return{ok:!1,reason:"target must be a non-empty Agent name (max 120 characters)"};if("string"!=typeof e.executionKind||!d.has(e.executionKind))return{ok:!1,reason:"unknown executionKind"};if(!u(e.objective,2e4))return{ok:!1,reason:"objective must be non-empty (max 20000 characters)"};let n={version:1,target:e.target.trim(),executionKind:e.executionKind,objective:e.objective.trim()};if(void 0!==e.contextWorkRequests){let t=e.contextWorkRequests;if(!Array.isArray(t)||t.length>8||t.some(e=>!u(e,160)))return{ok:!1,reason:"contextWorkRequests must be at most 8 Work Request references"};if(new Set(t).size!==t.length)return{ok:!1,reason:"contextWorkRequests must be unique"};n.contextWorkRequests=[...t]}let r=Object.prototype.hasOwnProperty.call(e,"resumeWorkRequest");if("revision"===n.executionKind){if(!r||!u(e.resumeWorkRequest,160))return{ok:!1,reason:"revision requires resumeWorkRequest"};n.resumeWorkRequest=e.resumeWorkRequest}else if(r)return{ok:!1,reason:"resumeWorkRequest is revision-only"};if(void 0!==e.limits){let t=e.limits;if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"limits must be an object"};if(Object.keys(t).some(e=>!o.has(e)))return{ok:!1,reason:"unknown limits field"};if(void 0!==t.maxAttempts&&!l(t.maxAttempts,1,10))return{ok:!1,reason:"limits.maxAttempts must be 1-10"};if(void 0!==t.deadlineSeconds&&!l(t.deadlineSeconds,1,86400))return{ok:!1,reason:"limits.deadlineSeconds must be 1-86400"};n.limits={},void 0!==t.maxAttempts&&(n.limits.maxAttempts=t.maxAttempts),void 0!==t.deadlineSeconds&&(n.limits.deadlineSeconds=t.deadlineSeconds)}return{ok:!0,envelope:n}}let _=/```botmancers-wake[^\S\r\n]*\r?\n([\s\S]*?)```/g,p=/WAKE\s+([A-Za-z0-9_-]+)\s*:/gi;function f(e){return JSON.stringify(function e(t){return Array.isArray(t)?t.map(e):t&&"object"==typeof t?Object.fromEntries(Object.keys(t).sort().map(n=>[n,e(t[n])])):t}(e.validation.ok?{syntax:e.syntax,envelope:e.validation.envelope}:{syntax:e.syntax,raw:e.raw}))}var h=e.i(142);(0,h.wakeSafetyLimits)().maxWakeDepth,(0,h.wakeSafetyLimits)().rootBudget;class m extends Error{code;constructor(e,t){super(t),this.name="WakeRouterError",this.code=e}}let g=t.default.prepare("SELECT * FROM wakes WHERE id = ?"),y=t.default.prepare("SELECT * FROM wakes WHERE idempotency_key = ?"),w=t.default.prepare("SELECT * FROM wakes WHERE source_event_id = ? AND position = ?");function v(e){return g.get(e)}function k(e,n){return{wake:e,request:e.work_request_id?t.engine.getWorkRequest(e.work_request_id)??null:null,created:n}}function E(e){return"accepted"===e.status||"blocked"===e.status}function b(e){return t.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND wake_event_id IS NOT NULL").get(e).n}function I(e){let{rootBudget:t}=(0,h.wakeSafetyLimits)(),n=b(e);return n<t?null:{status:"rejected",code:"root_budget_exhausted",limit:t,observed:n,reason:`This work already used ${n} Wakes (limit ${t}).`}}function S(e,n,r){let i=(0,t.resolveWakeTarget)(e.target);if(!i.ok){var s;return"ambiguous"===i.reason?{status:"unavailable",code:"target_ambiguous",reason:`More than one Agent is named ${e.target}; rename one to restore routing.`}:(s=e.target,t.default.prepare("SELECT 1 FROM groups WHERE lower(trim(name)) = lower(trim(?))").get(s))?{status:"rejected",code:"target_is_group",reason:`${e.target} is a Group; wake one Agent by name.`}:{status:"unavailable",code:"target_not_found",reason:`No Agent is named ${e.target}.`}}return T(e,n,{id:i.agentId,name:i.displayName},r)}function T(e,r,a,o){let d=o.parent?.root_request_id??null,u=(0,n.selectExecutionPolicy)({entryPoint:"wake",executionKind:e.executionKind,wakeSyntax:r,resumesWorkRequest:!!e.resumeWorkRequest});if(!u.ok)return{status:"rejected",code:"unsupported_policy",reason:u.reason,target:a};let l=u.policy;if(e.resumeWorkRequest){let n=t.engine.getWorkRequest(e.resumeWorkRequest);if(!n||n.target_agent_id!==a.id||!["implementation","revision"].includes(n.execution_kind))return{status:"rejected",code:"invalid_reference",reason:"A revision resumes an implementation Work Request of the same Agent.",target:a}}if("review"===e.executionKind&&((e.contextWorkRequests??[]).some(e=>{let n=t.engine.getWorkRequest(e);return n&&["implementation","revision"].includes(n.execution_kind)&&n.target_agent_id===a.id})||null!==d&&t.default.prepare("SELECT 1 FROM work_requests WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision') LIMIT 1").get(d,a.id)))return{status:"rejected",code:"reviewer_not_independent",reason:`${a.name} did the work under review; wake a different reviewer or ask the person.`,target:a};let c=function(e,n,r){if(!(0,h.needsEditGrant)(e.executionKind))return{rule:"readonly_default",id:null};if(function(e,n,r){let i=r.parent;if("implementation"!==e.executionKind||n.id!==r.agentId||!i||null!==i.wake_event_id||0!==i.wake_depth||null!==i.parent_request_id||i.target_agent_id!==r.agentId||!(0,h.isOwnerPrincipal)({kind:i.root_principal_kind??"",id:i.root_principal_id??""}))return!1;let s=t.engine.listSafetyDecisions(i.id)[0];return s?.principal_type==="human_owner"}(e,n,r))return{rule:"owner_direct_self_wake",id:null};let i=(0,h.activeEditGrant)(r.agentId,n.id);return i?{rule:"edit_grant",id:i.id}:null}(e,a,o);return c?function(e,n,r){var a;let o=t.bots.getById(e.id),d=(0,i.resolveAgent)(o);if(!d.launchable)return{status:"blocked",code:"target_unconfigured",reason:"launch_profile"===d.launch_blocker?`${e.name} has no Agent Deck selected and no launch profile chosen.`:"session_scope"===d.launch_blocker?`${e.name} has no session scope.`:"direct_runtime"===d.launch_blocker?`${e.name} launches directly; direct ${d.agent} sessions are not available yet.`:d.needs_deck_selection?`${e.name} has no Agent Deck selected.`:`${e.name} has an unsupported Agent type.`,target:e,policy:n,grant:r};let u=(a=o,"hermes-gateway"===(0,i.agentTransport)((0,i.resolveAgent)(a).agent)?(0,s.loadHermesConfig)()?{available:!0}:{available:!1,reason:"The Hermes gateway is not configured (HERMES_API_SERVER_KEY is unset)."}:{available:!0});return u.available?{status:"accepted",code:null,reason:null,target:e,policy:n,grant:r}:{status:"blocked",code:"target_unavailable",reason:u.reason,target:e,policy:n,grant:r}}(a,l,c):{status:"blocked",code:"grant_required",reason:`${a.name} needs your approval for edit work.`,target:a,policy:l,grant:null}}function A(e){let t=(0,h.wakeSafetyLimits)(),n=e.rootRequestId?b(e.rootRequestId):0;return{safety_version:h.WAKE_SAFETY_VERSION,root_principal:e.rootPrincipal,wake_depth:e.wakeDepth,grant_rule:e.grant?.rule??null,grant_id:e.grant?.id??null,root_budget:{used:n+ +!!e.counting,limit:t.rootBudget},safety_limits:{max_wake_depth:t.maxWakeDepth,root_budget:t.rootBudget}}}function R(e,t,n,r,i){return{principalType:"agent_principal",principal:{kind:"bot",id:n},decision:"accepted"===e.status?"allowed":"blocked",reasonCode:e.code,grantRule:e.grant?.rule??null,grantId:e.grant?.id??null,wakeId:t,snapshot:r,now:i}}function q(e,n,r,i){let s=e.parent_request_id?t.engine.getWorkRequest(e.parent_request_id)??null:null;if(!s)throw new m("invalid_input","A Wake creates work only in a tracked lineage.");let a=A({rootPrincipal:{kind:s.root_principal_kind??"unknown",id:s.root_principal_id??"unknown"},wakeDepth:s.wake_depth+1,grant:r.grant,rootRequestId:s.root_request_id,counting:!0}),{request:o}=t.engine.createOrGetWorkRequest({sourceConversationId:e.source_conversation_id,sourceEventId:e.source_event_id,requester:{kind:"bot",id:e.requester_agent_id},targetAgentId:r.target.id,intent:n.objective,executionKind:r.policy.execution_kind,toolProfile:r.policy.tool_profile,idempotencyKey:e.idempotency_key,parentRequestId:e.parent_request_id,wakeEventId:e.id,policy:{source:"wake",wake_version:1,wake_syntax:e.syntax,root_wake_id:e.root_wake_id,requested_target:n.target,target_name_snapshot:r.target.name,context_work_requests:n.contextWorkRequests??[],resume_work_request:n.resumeWorkRequest??null,limits:n.limits??{},return_to:{agent_id:e.requester_agent_id,conversation_id:e.source_conversation_id}},executionPolicy:r.policy,initialState:"blocked"===r.status?"blocked":"queued",stateReason:"blocked"===r.status?`${r.code}: ${r.reason}`:null,safetySnapshot:a,safety:R(r,e.id,e.requester_agent_id,a,i),now:i});return"grant_required"===r.code&&x(o,e.id,i),o}function x(e,n,r){t.engine.appendEvent(e.id,{type:"grant_requested",data:{wake_id:n,caller_agent_id:e.requester_id,target_agent_id:e.target_agent_id,authority:"edit",execution_kind:e.execution_kind},now:r})}function N(e){if("string"!=typeof e.sourceEventId||!e.sourceEventId.trim())throw new m("invalid_input","sourceEventId is required.");return t.default.transaction(()=>{let n=t.default.prepare("SELECT * FROM messages WHERE id = ?").get(e.sourceEventId);if(!n)throw new m("source_not_found",`No conversation event ${e.sourceEventId}.`);if("bot"!==n.sender_type||!n.sender_id||!t.bots.getById(n.sender_id))throw new m("invalid_input","Wakes are routed only from an Agent message.");let i=null;if(e.parentRequestId){if(!(i=t.engine.getWorkRequest(e.parentRequestId)??null))throw new m("not_found",`No parent Work Request ${e.parentRequestId}.`);if(i.target_agent_id!==n.sender_id||i.source_conversation_id!==n.conversation_id)throw new m("parent_mismatch","The parent Work Request was not run by this Agent in this conversation.")}let s=e.now??Date.now();return(function(e){let t=[],n=0,r=(n,r)=>{var i;let s;for(let a of(i=e.slice(n,r),(s=[...i.matchAll(p)]).map((e,t)=>{let r=t+1<s.length?s[t+1].index:i.length,a=i.slice(e.index,r);return{at:n+e.index,raw:a.trim(),target:e[1],message:a.slice(e[0].length).trim()}}))){let e="GROUP"===a.target.toUpperCase()?{ok:!1,reason:"group wakes are not supported; wake one Agent by name"}:0===a.message.length?{ok:!1,reason:"objective must be non-empty (max 20000 characters)"}:c({version:1,target:a.target,executionKind:"conversation",objective:a.message});t.push({at:a.at,syntax:"legacy",raw:a.raw,validation:e})}};for(let i of e.matchAll(_)){let e,s=i.index;r(n,s);try{e=c(JSON.parse(i[1]))}catch{e={ok:!1,reason:"block is not valid JSON"}}t.push({at:s,syntax:"structured",raw:i[0],validation:e}),n=s+i[0].length}return r(n,e.length),t.sort((e,t)=>e.at-t.at).map((e,t)=>({position:t,syntax:e.syntax,raw:e.raw,validation:e.validation}))})(n.content).map(e=>(function(e,n,i,s,a){var o;let d,u,l=(o=n.id,u=(0,r.createHash)("sha256").update(f(e)).digest("hex").slice(0,32),`wake:v1:${o}:${e.position}:${u}`),c=y.get(l);if(c)return k(c,!1);if(w.get(n.id,e.position))throw new m("idempotency_conflict",`Wake ${e.position} of event ${n.id} was already recorded with a different payload.`);let _=(0,r.randomUUID)(),p=s?.wake_event_id?v(s.wake_event_id):void 0,g={id:_,idempotency_key:l,source_conversation_id:n.conversation_id,source_event_id:n.id,requester_agent_id:i,parent_request_id:s?.id??null,root_wake_id:p?.root_wake_id??_,syntax:e.syntax},b=null;if(e.validation.ok)if(s){let r=function(e,n,r){for(let i of[...e.contextWorkRequests??[],...e.resumeWorkRequest?[e.resumeWorkRequest]:[]]){let e=t.engine.getWorkRequest(i);if(!(e&&(r?e.root_request_id===r.root_request_id:e.source_conversation_id===n)))return`Work Request ${i} is not in this conversation lineage.`}return null}(b=e.validation.envelope,n.conversation_id,s);d=r?{status:"rejected",code:"invalid_reference",reason:r}:function(e){let{maxWakeDepth:t}=(0,h.wakeSafetyLimits)(),n=e.wake_depth+1;return n>t?{status:"rejected",code:"depth_exceeded",limit:t,observed:n,reason:`This work is already ${e.wake_depth} Wakes deep (limit ${t}).`}:I(e.root_request_id)}(s)??S(b,e.syntax,{agentId:i,parent:s})}else b=e.validation.envelope,d={status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};else d={status:"rejected",code:"invalid_envelope",reason:e.validation.reason};let T=b&&E(d)?q(g,b,d,a):null;return t.default.prepare(`
58
+ INSERT INTO wakes (
59
+ id, idempotency_key, source_conversation_id, source_event_id, position, syntax, payload,
60
+ requester_agent_id, requested_target, target_agent_id, target_name_snapshot, execution_kind,
61
+ parent_request_id, root_request_id, root_wake_id, depth, status, reason_code, reason,
62
+ work_request_id, limit_value, observed_value, created_at, updated_at
63
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
64
+ `).run(_,l,n.conversation_id,n.id,e.position,e.syntax,f(e),i,b?.target??null,d.target?.id??null,d.target?.name??null,b?.executionKind??null,s?.id??null,T?.root_request_id??s?.root_request_id??null,g.root_wake_id,T?.wake_depth??(s?s.wake_depth+1:0),d.status,d.code,d.reason,T?.id??null,E(d)?null:d.limit??null,E(d)?null:d.observed??null,a,a),k(v(_),!0)})(e,n,n.sender_id,i,s))}).immediate()}function C(e,n,r,i,s){let a=t.default.prepare("UPDATE wakes SET status = ?, reason_code = ?, reason = ?, updated_at = ? WHERE id = ?");if("blocked"===r.status){var o,d;if(r.code===e.reason_code&&r.reason===e.reason)return k(e,!1);a.run("blocked",r.code,r.reason,s,e.id);let i=A({rootPrincipal:{kind:n.root_principal_kind??"unknown",id:n.root_principal_id??"unknown"},wakeDepth:n.wake_depth,grant:r.grant,rootRequestId:null,counting:!1});return t.engine.recordSafetyDecision(n.id,R(r,e.id,e.requester_agent_id,i,s)),"grant_required"===r.code&&x(n,e.id,s),o=r.code,d=r.reason,t.engine.reblockWorkRequest(n.id,{reason:`${o}: ${d}`,type:"wake_reblocked",data:{reason_code:o,reason:d},now:s}),k(v(e.id),!1)}if("accepted"!==r.status)return k(e,!1);let u=A({rootPrincipal:{kind:n.root_principal_kind??"unknown",id:n.root_principal_id??"unknown"},wakeDepth:n.wake_depth,grant:r.grant,rootRequestId:null,counting:!1});return t.engine.recordSafetyDecision(n.id,R(r,e.id,e.requester_agent_id,u,s)),t.engine.transitionWorkRequest(n.id,{from:"blocked",to:"queued",reason:i,data:{grant_rule:r.grant?.rule??null,grant_id:r.grant?.id??null},now:s}),a.run("accepted",null,null,s,e.id),k(v(e.id),!0)}e.s(["WakeRouterError",0,m,"decideWakeGrant",0,function(e){if((0,h.assertOwner)(e.caller.category),"allow"!==e.decision&&"deny"!==e.decision)throw new m("invalid_input","decision must be allow or deny.");let n=e.now??Date.now();return t.default.transaction(()=>{let r=v(e.wakeId);if(!r)throw new h.WakeSafetyError("not_found",`No Wake ${e.wakeId}.`);let i=r.work_request_id?t.engine.getWorkRequest(r.work_request_id):void 0,s=(t,n)=>({...t,decision:e.decision,grant:n,runnable:t.request?.state==="queued",ended:t.request?.terminal_at!==null&&t.request?.terminal_at!==void 0});if("blocked"!==r.status||"grant_required"!==r.reason_code||!i||"blocked"!==i.state){let t=i?(0,h.activeEditGrant)(r.requester_agent_id,i.target_agent_id)??null:null;if("deny"===e.decision&&"grant_denied"===r.reason_code)return{...s(k(r,!1),null),runnable:!1};if("allow"===e.decision&&t&&"grant_denied"!==r.reason_code)return{...s(k(r,!1),t),runnable:!1};throw new h.WakeSafetyError("not_pending","This Wake is not waiting for an owner grant decision.")}let a={kind:e.caller.principal.kind,id:e.caller.principal.id};if("deny"===e.decision)return t.default.prepare("UPDATE wakes SET reason_code = 'grant_denied', reason = ?, updated_at = ? WHERE id = ?").run("The owner denied this edit Wake.",n,r.id),t.engine.appendEvent(i.id,{type:"grant_denied",data:{wake_id:r.id,caller_agent_id:r.requester_agent_id,target_agent_id:i.target_agent_id,authority:"edit",decided_by:a},now:n}),t.engine.recordSafetyDecision(i.id,{principalType:"human_owner",principal:a,decision:"denied",reasonCode:"grant_denied",wakeId:r.id,snapshot:{safety_version:h.WAKE_SAFETY_VERSION,decision:"deny",decided_by:a},now:n}),t.engine.transitionWorkRequest(i.id,{from:"blocked",to:"cancelled",reason:"grant_denied",expectedVersion:i.version,errorCode:"grant_denied",errorMessage:"The owner denied this edit Wake; no work ran.",now:n}),s(k(v(r.id),!1),null);let{grant:o}=(0,h.ensureEditGrant)({callerAgentId:r.requester_agent_id,targetAgentId:i.target_agent_id,grantedBy:a,sourceWakeId:r.id,now:n});t.engine.appendEvent(i.id,{type:"grant_approved",data:{wake_id:r.id,grant_id:o.id,caller_agent_id:o.caller_agent_id,target_agent_id:o.target_agent_id,authority:"edit",decided_by:a},now:n});let d=JSON.parse(r.payload).envelope,u=t.bots.getById(i.target_agent_id),l=r.parent_request_id?t.engine.getWorkRequest(r.parent_request_id)??null:null,c=T(d,r.syntax,{id:u.id,name:u.name},{agentId:r.requester_agent_id,parent:l});return s(C(r,i,c,"grant_approved",n),o)}).immediate()},"retryWake",0,function(e,n=Date.now()){return t.default.transaction(()=>{let r=v(e);if(!r)throw new m("not_found",`No Wake ${e}.`);if("unavailable"!==r.status&&"blocked"!==r.status||"grant_denied"===r.reason_code)return k(r,!1);let i=JSON.parse(r.payload).envelope,s=t.default.prepare(`
65
+ UPDATE wakes SET status = ?, reason_code = ?, reason = ?, target_agent_id = ?, target_name_snapshot = ?,
66
+ work_request_id = ?, root_request_id = ?, limit_value = ?, observed_value = ?, updated_at = ?
67
+ WHERE id = ?
68
+ `),a=r.parent_request_id?t.engine.getWorkRequest(r.parent_request_id)??null:null,o={agentId:r.requester_agent_id,parent:a};if("unavailable"===r.status){let e=a?I(a.root_request_id)??S(i,r.syntax,o):{status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};if(!E(e))return(e.status!==r.status||e.code!==r.reason_code||e.reason!==r.reason)&&s.run(e.status,e.code,e.reason,null,null,null,r.root_request_id,e.limit??null,e.observed??null,n,r.id),k(v(r.id),!1);let t=q(r,i,e,n);return s.run(e.status,e.code,e.reason,e.target.id,e.target.name,t.id,t.root_request_id,null,null,n,r.id),k(v(r.id),!0)}let d=t.engine.getWorkRequest(r.work_request_id),u=t.bots.getById(d.target_agent_id);if(!u||"blocked"!==d.state)return k(r,!1);let l=T(i,r.syntax,{id:u.id,name:u.name},o);return C(r,d,l,"target_available",n)}).immediate()},"routeAgentWakes",0,N],17834);var O=e.i(9346);let D=new Set(["version","decision","implementationAttemptId","reviewAttemptId","commitMessage"]);function L(e){return"string"==typeof e&&e.trim().length>0&&e.length<=160}let $=/```botmancers-finalize[^\S\r\n]*\r?\n([\s\S]*?)```/g;function M(e){return(0,r.createHash)("sha256").update(e).digest("hex")}function W(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}let F=["implementation","revision"];function U(e){return t.default.prepare("SELECT * FROM work_attempts WHERE request_id = ? ORDER BY attempt_number DESC LIMIT 1").get(e)}function H(e){return t.default.prepare("SELECT * FROM candidate_manifests WHERE attempt_id = ?").get(e)}function P(e){return t.default.prepare("SELECT * FROM finalizations WHERE id = ?").get(e)}function j(e){return JSON.parse(e.files)}function z(e,n,r=Date.now()){let i=t.engine.getAttempt(e);if(!i?.external_run_id)return!1;let s=t.default.prepare("SELECT baseline_ref, baseline_digest FROM attempt_finalization_baselines WHERE attempt_id = ?").get(e);return s?s.baseline_ref===n.baselineRef&&s.baseline_digest===n.baselineDigest:(t.default.prepare(`
69
+ INSERT OR IGNORE INTO attempt_finalization_baselines (attempt_id, request_id, external_run_id, baseline_ref, baseline_digest, created_at)
70
+ VALUES (?, ?, ?, ?, ?, ?)
71
+ `).run(e,i.request_id,i.external_run_id,n.baselineRef,n.baselineDigest,r),!0)}function B(e){if(!F.includes(e.execution_kind))return null;let n=U(e.id);if(!n)return null;let r=H(n.id);if(r){let e=j(r),t=e.slice(0,50).map(e=>`- ${e.path} ${e.sha256?`sha256=${e.sha256} mode=${e.mode}`:"deleted"}`);return e.length>50&&t.push(`- ... ${e.length-50} more`),[`Candidate manifest: ${r.manifest_digest} (${e.length} ${1===e.length?"file":"files"}, base commit ${r.base_commit}, baseline ${r.baseline_digest})`,...t].join("\n")}let i=t.default.prepare("SELECT data FROM engine_events WHERE request_id = ? AND attempt_id = ? AND type = 'candidate_manifest_unavailable' ORDER BY sequence DESC LIMIT 1").get(e.id,n.id);if(i){let e=JSON.parse(i.data);return`Candidate manifest: unavailable (${e.reason_code??"unknown"}); this work cannot be finalized.`}return null}function K(e,t,n,r){return`botmancers-finalize-v1-${M([e,t,n,r].join(":")).slice(0,48)}`}function G(e,t){return{finalization_id:e.id,decision_event_id:e.decision_event_id,coordinator_agent_id:e.coordinator_agent_id,implementation_request_id:e.implementation_request_id,implementation_attempt_id:e.implementation_attempt_id,review_request_id:e.review_request_id,review_attempt_id:e.review_attempt_id,external_run_id:e.external_run_id,manifest_id:e.manifest_id,manifest_digest:t?.manifest_digest??null,baseline_digest:t?.baseline_digest??null,base_commit:t?.base_commit??null,file_count:t?.file_count??null}}function X(e,n,i=Date.now()){let s=[...e.content.matchAll($)].map((e,t)=>{let n;try{n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"decision must be a JSON object"};let t=Object.keys(e).filter(e=>!D.has(e));if(t.length>0)return{ok:!1,reason:`unknown field ${t.join(", ")} (the manifest is never supplied in a decision)`};if(1!==e.version)return{ok:!1,reason:"version must be 1"};if("accept"!==e.decision&&"reject"!==e.decision)return{ok:!1,reason:'decision must be "accept" or "reject"'};if(!L(e.implementationAttemptId))return{ok:!1,reason:"implementationAttemptId must name an Attempt"};if(!L(e.reviewAttemptId))return{ok:!1,reason:"reviewAttemptId must name an Attempt"};let n={version:1,decision:e.decision,implementationAttemptId:e.implementationAttemptId.trim(),reviewAttemptId:e.reviewAttemptId.trim()};if(void 0!==e.commitMessage){if("string"!=typeof e.commitMessage||0===e.commitMessage.trim().length||e.commitMessage.length>2e3||e.commitMessage.includes("\0"))return{ok:!1,reason:"commitMessage must be non-empty text (max 2000 characters)"};n.commitMessage=e.commitMessage.trim()}return{ok:!0,decision:n}}(JSON.parse(e[1]))}catch{n={ok:!1,reason:"block is not valid JSON"}}return{position:t,validation:n}});return 0===s.length?[]:t.engine.transaction(()=>s.map(s=>{let a={position:s.position,finalizationId:null,reasonCode:null,reason:null,implementationRequestId:null,reviewRequestId:null},o=(r,o)=>(t.engine.appendEvent(n.id,{type:"finalization_rejected",data:{decision_event_id:e.id,position:s.position,reason_code:r,reason:o,implementation_request_id:a.implementationRequestId,review_request_id:a.reviewRequestId},now:i}),{...a,reasonCode:r,reason:o});if(!s.validation.ok)return o("invalid_decision",s.validation.reason);let d=s.validation.decision,u=t.engine.getAttempt(d.implementationAttemptId),l=t.engine.getAttempt(d.reviewAttemptId);if(a.implementationRequestId=u?.request_id??null,a.reviewRequestId=l?.request_id??null,"reject"===d.decision)return o("review_rejected","The coordinator rejected the review; nothing was finalized.");let c=function(e,n,r){let i=n.target_agent_id,s=(e,t)=>({ok:!1,code:e,reason:t}),a=t.engine.getAttempt(e.implementationAttemptId),o=a?t.engine.getWorkRequest(a.request_id):void 0;if(!o||!F.includes(o.execution_kind))return s("invalid_implementation",`Attempt ${e.implementationAttemptId} is not an implementation or revision Attempt.`);let d=t.engine.getAttempt(e.reviewAttemptId),u=d?t.engine.getWorkRequest(d.request_id):void 0;if(!u||"review"!==u.execution_kind||"readonly"!==u.tool_profile)return s("invalid_review",`Attempt ${e.reviewAttemptId} is not a readonly review Attempt.`);if(o.source_conversation_id!==r||u.source_conversation_id!==r)return s("cross_conversation","The implementation and review must belong to this conversation.");for(let e of[o,u])if(e.root_request_id!==n.root_request_id||function(e){if(!e.wake_event_id)return null;let t=W(e).return_to;return t&&"string"==typeof t.agent_id?t.agent_id:null}(e)!==i)return s("lineage_mismatch",`Work Request ${e.id} was not woken by this coordinator in this lineage.`);if("completed"!==o.state)return s("implementation_not_completed",`Implementation ${o.id} is ${o.state}, not completed.`);let l=U(o.id);if(!l||l.id!==a?.id||"succeeded"!==l.outcome)return s("implementation_not_completed",`Implementation ${o.id} has no successful Attempt.`);let c=H(l.id);if(!c)return s("not_finalizable",`Implementation ${o.id} has no candidate manifest to finalize.`);let _=W(u).context_work_requests;if(!Array.isArray(_)||!_.includes(o.id))return s("review_not_linked",`Review ${u.id} does not reference implementation ${o.id}.`);if(u.target_agent_id===o.target_agent_id)return s("reviewer_not_independent","The reviewer did the work under review.");let p=U(u.id);if("completed"!==u.state||!p||p.id!==d?.id||"succeeded"!==p.outcome)return s("review_not_completed",`Review ${u.id} did not complete.`);if(u.created_at<=c.created_at)return s("stale_manifest",`Review ${u.id} was requested before the candidate manifest was recorded.`);let f=t.default.prepare(`
72
+ SELECT candidate.id FROM work_requests candidate
73
+ WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision')
74
+ AND id <> ? AND (
75
+ created_at > ? OR (created_at = ? AND candidate.rowid > (SELECT rowid FROM work_requests WHERE id = ?))
76
+ ) LIMIT 1
77
+ `).get(o.root_request_id,o.target_agent_id,o.id,o.created_at,o.created_at,o.id);if(f)return s("stale_manifest",`A later edit (${f.id}) replaced the manifest of ${o.id}.`);let h=t.default.prepare("SELECT id FROM finalizations WHERE implementation_attempt_id = ? AND state IN ('preparing', 'committed') LIMIT 1").get(l.id);return{ok:!0,chain:{implementation:o,implementationAttempt:l,review:u,reviewAttempt:p,manifest:c},existing:h?.id??null}}(d,n,e.conversation_id);if(!c.ok)return o(c.code,c.reason);let _=K(e.id,c.chain.implementationAttempt.id,c.chain.reviewAttempt.id,c.chain.manifest.manifest_digest),p=t.default.prepare("SELECT id FROM finalizations WHERE idempotency_key = ?").get(_);if(c.existing&&!p)return o("already_finalized",`Implementation ${c.chain.implementation.id} already has a finalization (${c.existing}).`);let{row:f}=function(e,n,i,s,a){var o,d;let u,l,c=K(s.id,e.implementationAttempt.id,e.reviewAttempt.id,e.manifest.manifest_digest),_=t.default.prepare("SELECT * FROM finalizations WHERE idempotency_key = ?").get(c);if(_)return{row:_,created:!1};let p=JSON.stringify({baselineDigest:e.manifest.baseline_digest,expectedBaseCommit:e.manifest.base_commit,reviewId:e.review.id,commitMessage:(o=e.implementation,d=e.review,u=n.commitMessage??`Botmancers: ${(o.intent.split("\n").find(e=>e.trim())??"reviewed change").trim().slice(0,60)}`,l=`
78
+
79
+ Botmancers-Work-Request: ${o.id}
80
+ Botmancers-Review: ${d.id}`,`${u.slice(0,4e3-l.length)}${l}`),files:j(e.manifest)}),f=(0,r.randomUUID)();t.default.prepare(`
81
+ INSERT INTO finalizations (
82
+ id, idempotency_key, conversation_id, decision_event_id, decision_request_id, coordinator_agent_id,
83
+ implementation_request_id, implementation_attempt_id, review_request_id, review_attempt_id,
84
+ manifest_id, external_run_id, request_body, request_hash, state, created_at, updated_at
85
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'preparing', ?, ?)
86
+ `).run(f,c,s.conversation_id,s.id,i.id,i.target_agent_id,e.implementation.id,e.implementationAttempt.id,e.review.id,e.reviewAttempt.id,e.manifest.id,e.manifest.external_run_id,p,M(p),a,a);let h=P(f);return t.engine.appendEvent(e.implementation.id,{type:"finalization_preparing",attemptId:e.implementationAttempt.id,data:G(h,e.manifest),now:a}),{row:h,created:!0}}(c.chain,d,n,e,i);return{...a,finalizationId:f.id}}))}let J=new Set(["BASE_MISMATCH","INDEX_DIRTY","BASELINE_MISMATCH","PATH_INVALID","PATH_UNEXPECTED","DIGEST_MISMATCH","IDEMPOTENCY_CONFLICT","GIT_LOCK_CONFLICT","REF_RACE","FINALIZATION_NOT_PREPARED","RUN_NOT_TERMINAL","FINALIZATION_INVALID","RUN_NOT_FOUND"]);function V(e,n,r,i){return t.engine.transaction(()=>{let s=t.default.prepare(`
87
+ UPDATE finalizations SET state = ?, reason_code = ?, reason = ?, commit_id = ?, tree_id = ?, parent_commit = ?,
88
+ result_manifest_digest = ?, file_count = ?, updated_at = ?, finished_at = ?
89
+ WHERE id = ? AND finished_at IS NULL
90
+ `).run(n,r.reasonCode??null,r.reason?.slice(0,300)??null,r.commit??null,r.tree??null,r.parent??null,r.manifestDigest??null,r.fileCount??null,i,i,e.id),a=P(e.id);if(1!==s.changes)return a;let o=t.default.prepare("SELECT * FROM candidate_manifests WHERE id = ?").get(e.manifest_id);return t.engine.appendEvent(e.implementation_request_id,{type:`finalization_${n}`,attemptId:e.implementation_attempt_id,data:{...G(a,o),reason_code:a.reason_code,reason:a.reason,commit:a.commit_id,tree:a.tree_id,parent:a.parent_commit,result_manifest_digest:a.result_manifest_digest},now:i}),a})}function Y(e,t=!1){if(!(e instanceof O.AgentDeckApiError))return{state:t?null:"failed",reasonCode:"finalization_failed",reason:"The finalization outcome is unknown; retrying with the same idempotency key is safe."};if("agent_deck_unreachable"===e.code||t&&"agent_deck_invalid_response"===e.code)return{state:null,reasonCode:e.code,reason:e.message};if("agent_deck_rejected"!==e.code)return{state:"failed",reasonCode:e.code,reason:e.message};let n=e.deckCode??"";return"FINALIZATION_CANCELED"===n?{state:"canceled",reasonCode:n.toLowerCase(),reason:e.message}:J.has(n)?{state:"blocked",reasonCode:n.toLowerCase(),reason:e.message}:t&&(!n||null!==e.status&&e.status>=500)?{state:null,reasonCode:n?n.toLowerCase():"finalization_failed",reason:"The finalization outcome is unknown; retrying with the same idempotency key is safe."}:{state:"failed",reasonCode:n?n.toLowerCase():"finalization_failed",reason:e.message}}function Z(e,n,r,i){return t.engine.appendEvent(e.implementation_request_id,{type:"finalization_retry_pending",attemptId:e.implementation_attempt_id,data:{finalization_id:e.id,external_run_id:e.external_run_id,reason_code:n,reason:r},now:i}),P(e.id)}async function Q(e){let n=P(e);if(!n||"preparing"!==n.state)return n;if(!(0,O.hasAgentDeckRunToken)())return V(n,"failed",{reasonCode:"agent_deck_token_missing",reason:O.AGENT_DECK_API_MESSAGES.agent_deck_token_missing},Date.now());let r=JSON.parse(n.request_body),i=t.default.prepare("SELECT * FROM candidate_manifests WHERE id = ?").get(n.manifest_id);if(null===n.submitted_at){try{var s,a;let e=await (0,O.getAgentDeckRunChanges)(n.external_run_id);if(e.manifestDigest!==i.manifest_digest||e.baselineDigest!==i.baseline_digest||e.baseCommit!==i.base_commit||(s=e.files,a=r.files,JSON.stringify(s)!==JSON.stringify(a)))return V(n,"blocked",{reasonCode:"manifest_changed",reason:`The workspace changed after review (candidate manifest ${e.manifestDigest}, reviewed ${i.manifest_digest}); nothing was committed.`},Date.now())}catch(t){let e=Y(t);if(!e.state)return Z(n,e.reasonCode,e.reason,Date.now());return V(n,e.state,{reasonCode:e.reasonCode,reason:e.reason},Date.now())}t.default.prepare("UPDATE finalizations SET submitted_at = ?, updated_at = ? WHERE id = ? AND submitted_at IS NULL AND finished_at IS NULL").run(Date.now(),Date.now(),n.id),n=P(e)}try{let e=await (0,O.finalizeAgentDeckRun)(n.external_run_id,r,n.idempotency_key);if(e.manifestDigest!==i.manifest_digest||void 0!==e.fileCount&&e.fileCount!==i.file_count||void 0!==e.reviewId&&e.reviewId!==n.review_request_id||void 0!==e.parent&&e.parent!==i.base_commit)return V(n,"failed",{reasonCode:"agent_deck_invalid_response",reason:"Agent Deck returned commit evidence that does not match the persisted finalization request."},Date.now());return V(n,"committed",{commit:e.commit,tree:e.tree,parent:e.parent??i.base_commit,manifestDigest:e.manifestDigest,fileCount:e.fileCount??i.file_count},Date.now())}catch(t){let e=Y(t,!0);if(!e.state)return Z(n,e.reasonCode,e.reason,Date.now());return V(n,e.state,{reasonCode:e.reasonCode,reason:e.reason},Date.now())}}function ee(e){let t=[`Finalization: ${e.id}`,`Implementation: ${e.implementation_request_id}`,`Review: ${e.review_request_id}`,`State: ${e.state}`];return"committed"===e.state?t.push(`Commit: ${e.commit_id}`,`Tree: ${e.tree_id}`,`Manifest: ${e.result_manifest_digest}`,`Files: ${e.file_count}`):e.reason_code&&t.push(`Reason: ${e.reason_code}${e.reason?` - ${e.reason}`:""}`),t.join("\n")}e.s(["candidateEvidence",0,B,"finalizationEvidence",0,ee,"getFinalization",0,P,"openFinalizationIds",0,function(){return t.default.prepare("SELECT id FROM finalizations WHERE state = 'preparing' ORDER BY created_at ASC, id ASC").all().map(e=>e.id)},"recordAttemptBaseline",0,z,"recordFinalizeDecisions",0,X,"recordPreparedEvidence",0,function(e,n,i,s=Date.now()){let a=i.finalization;if(!a||!n.external_run_id||!F.includes(e.execution_kind)||"edit"!==e.tool_profile)return;if(a.baselineRef&&a.baselineDigest&&!z(n.id,{baselineRef:a.baselineRef,baselineDigest:a.baselineDigest},s))return void t.engine.appendEvent(e.id,{type:"candidate_manifest_unavailable",attemptId:n.id,data:{external_run_id:n.external_run_id,reason_code:"BASELINE_MISMATCH",reason:"The terminal baseline did not match the baseline captured at launch."},now:s});let o=a.candidate;if(!o)return;if(!o.ok)return void t.engine.appendEvent(e.id,{type:"candidate_manifest_unavailable",attemptId:n.id,data:{external_run_id:n.external_run_id,reason_code:o.code,reason:o.message.slice(0,300)},now:s});let d=o.manifest;if(H(n.id))return;let u=(0,r.randomUUID)();t.default.prepare(`
91
+ INSERT INTO candidate_manifests (
92
+ id, attempt_id, request_id, conversation_id, external_run_id, baseline_ref, baseline_digest,
93
+ base_commit, manifest_digest, files, file_count, created_at
94
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
95
+ `).run(u,n.id,e.id,e.source_conversation_id,n.external_run_id,d.baselineRef,d.baselineDigest,d.baseCommit,d.manifestDigest,JSON.stringify(d.files),d.files.length,s),t.engine.appendEvent(e.id,{type:"candidate_manifest_recorded",attemptId:n.id,data:{manifest_id:u,external_run_id:n.external_run_id,baseline_ref:d.baselineRef,baseline_digest:d.baselineDigest,base_commit:d.baseCommit,manifest_digest:d.manifestDigest,file_count:d.files.length},now:s})},"runFinalization",0,Q],40712),(0,h.wakeSafetyLimits)().maxContinuations;let et={kind:"service",id:"botmancers-engine"},en="Botmancers";function er(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function ei(e){return t.bots.getById(e)?.name??`agent:${e}`}function es(e){let n;if("completed"!==e.state||!e.result)return null;try{n=JSON.parse(e.result).reply_message_id}catch{return null}if("string"!=typeof n)return null;let r=t.default.prepare("SELECT * FROM messages WHERE id = ?").get(n);return r&&"bot"===r.sender_type&&r.sender_id===e.target_agent_id?r:null}function ea(e,n=!1){let r=t.engine.listAttempts(e.id),i=r.length>0?r[r.length-1]:null,s=[`Work Request: ${e.id}`,...i?[`Attempt: ${i.id}`]:[],`Agent: ${ei(e.target_agent_id)}`,`Execution kind: ${e.execution_kind}`,`State: ${e.state}`],a=es(e);if(a){var o;s.push(n?`Result: the ${ei(e.target_agent_id)} reply above.`:`Result:
96
+ ${(o=a.content).length>8e3?`${o.slice(0,8e3)}
97
+ [truncated]`:o}`)}else"failed"===e.state||"cancelled"===e.state?s.push(`Failure: ${e.error_code??e.state}${e.error_message?` - ${e.error_message}`:""}`):null===e.terminal_at&&s.push("Result: not finished yet.");let d=B(e);return d&&s.push(d),s.join("\n")}let eo='You coordinate this work. Decide the next step yourself: reply to the person, ask a question, or emit a botmancers-wake block (one per Agent). Reference earlier work with "contextWorkRequests"; a revision names the implementation it resumes in "resumeWorkRequest". Never report a review that did not run.',ed=t.default.prepare("SELECT * FROM work_requests WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?");function eu(e){let r=ed.get(et.kind,et.id,e.key);if(r)return r;if(!t.bots.getById(e.coordinatorId)||!t.default.prepare("SELECT 1 FROM conversations WHERE id = ?").get(e.conversationId))return null;let i=t.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND requester_kind = ? AND requester_id = ?").get(e.parent.root_request_id,et.kind,et.id),s=(0,h.wakeSafetyLimits)().maxContinuations;if(i.n>=s)return t.default.prepare("SELECT 1 FROM engine_events WHERE request_id = ? AND type = 'lineage_stopped'").get(e.parent.id)||t.engine.appendEvent(e.parent.id,{type:"lineage_stopped",data:{reason:"continuation_budget_exhausted",limit:s,observed:i.n,continues:e.continues,coordinator_agent_id:e.coordinatorId},now:e.now}),null;let a=(0,n.selectExecutionPolicy)({entryPoint:"continuation",executionKind:"conversation"});if(!a.ok)return null;let o="result"===e.continues?Math.max(e.parent.wake_depth-1,0):e.parent.wake_depth,d={safety_version:h.WAKE_SAFETY_VERSION,root_principal:{kind:e.parent.root_principal_kind??"unknown",id:e.parent.root_principal_id??"unknown"},wake_depth:o,grant_rule:"readonly_default",grant_id:null,continuations:{used:i.n+1,limit:s}};return t.engine.createOrGetWorkRequest({sourceConversationId:e.conversationId,sourceEventId:e.sourceEventId,requester:et,targetAgentId:e.coordinatorId,intent:e.intent,executionKind:a.policy.execution_kind,toolProfile:a.policy.tool_profile,idempotencyKey:e.key,parentRequestId:e.parent.id,policy:{source:"coordinator_continuation",continues:e.continues,work_requests:e.subjects},executionPolicy:a.policy,wakeDepth:o,safetySnapshot:d,safety:{principalType:"engine",principal:et,decision:"allowed",grantRule:"readonly_default",snapshot:d,now:e.now},now:e.now}).request}let el=t.default.prepare("SELECT 1 FROM terminal_followups WHERE request_id = ? AND done_at IS NULL"),ec=t.default.prepare("UPDATE terminal_followups SET done_at = ? WHERE request_id = ? AND done_at IS NULL");function e_(e,n=Date.now()){return t.engine.transaction(()=>{var r;if(!el.get(e))return[];let i=t.engine.getWorkRequest(e);if(!i||null===i.terminal_at||null!==i.legacy_agent_request_id)return[];ec.run(n,e);let s=[],a=e=>{e&&"queued"===e.state&&s.push(e.id)},o=es(i);if(o){let e,t,r=[],s=null;try{r=N({sourceEventId:o.id,parentRequestId:i.id,now:n})}catch(e){if(!(e instanceof m))throw e;console.error(`Wakes of ${o.id} could not be routed:`,e.message),s=e}for(let e of r)a(e.request);let d=X(o,i,n).filter(e=>null!==e.reasonCode&&"review_rejected"!==e.reasonCode);d.length>0&&a(eu({key:`continuation:v1:finalize-decision:${o.id}`,coordinatorId:i.target_agent_id,conversationId:o.conversation_id,sourceEventId:o.id,parent:i,intent:(e=d.map(e=>`- Decision ${e.position+1}: ${e.reasonCode} - ${e.reason}`),[`[Finalization not started] ${1===d.length?"One finalization decision":`${d.length} finalization decisions`} from your last message committed nothing:`,e.join("\n"),eo].join("\n\n")),continues:"finalize_decision",subjects:d.flatMap(e=>e.implementationRequestId?[e.implementationRequestId]:[]),now:n}));let u=r.filter(e=>"rejected"===e.wake.status||"unavailable"===e.wake.status);(s||u.length>0)&&a(eu({key:`continuation:v1:wakes:${o.id}`,coordinatorId:i.target_agent_id,conversationId:o.conversation_id,sourceEventId:o.id,parent:i,intent:s?["[Wake not started] The Wakes in your last message could not be routed, so no work started:",s.message,eo].join("\n\n"):(t=u.map(({wake:e})=>{let t=e.target_name_snapshot??e.requested_target??"an unnamed target",n=e.execution_kind??"unknown",r="blocked"===e.status?"is waiting (blocked)":`was ${e.status}`;return`- Wake ${e.position+1} (${n}) to ${t} ${r}: ${e.reason??e.reason_code??"no reason recorded"}`+(e.work_request_id?` Work Request: ${e.work_request_id}.`:" No Work Request was created.")}),[`[Wake not started] ${1===u.length?"One Wake":`${u.length} Wakes`} from your last message did not start any work:`,t.join("\n"),eo].join("\n\n")),continues:"wake_outcome",subjects:u.flatMap(e=>e.wake.work_request_id?[e.wake.work_request_id]:[]),now:n}))}let d=function(e){if(!e.wake_event_id)return null;let t=er(e).return_to;return t&&"string"==typeof t.agent_id&&"string"==typeof t.conversation_id?{agentId:t.agent_id,conversationId:t.conversation_id}:null}(i);return d&&a(eu({key:`continuation:v1:result:${i.id}`,coordinatorId:d.agentId,conversationId:d.conversationId,sourceEventId:o?.id??i.source_event_id,parent:i,intent:(r=o?.conversation_id===d.conversationId,[`[Work Request result] ${ei(i.target_agent_id)} finished the ${i.execution_kind} you requested.`,ea(i,r),..."review"===i.execution_kind&&"completed"===i.state?['If this review satisfies you and the implementation has a candidate manifest, you may commit it by emitting a botmancers-finalize block: {"version": 1, "decision": "accept", "implementationAttemptId": "<id>", "reviewAttemptId": "<id>", "commitMessage": "<optional>"}, or "decision": "reject". Botmancers commits exactly the reviewed manifest; never list files or digests.']:[],eo].join("\n\n")),continues:"result",subjects:[i.id],now:n})),s})}e.s(["continueAfterFinalization",0,function(e,n=Date.now()){return t.engine.transaction(()=>{let r=P(e);if(!r||"preparing"===r.state)return[];let i=t.engine.getWorkRequest(r.decision_request_id);if(!i)return[];let s=eu({key:`continuation:v1:finalization:${r.id}`,coordinatorId:r.coordinator_agent_id,conversationId:r.conversation_id,sourceEventId:r.decision_event_id,parent:i,intent:["committed"===r.state?"[Finalization committed] The reviewed manifest was committed.":`[Finalization ${r.state}] The reviewed manifest was not committed.`,ee(r),eo].join("\n\n"),continues:"finalization",subjects:[r.implementation_request_id,r.review_request_id],now:n});return s&&"queued"===s.state?[s.id]:[]})},"continueAfterTerminal",0,e_,"pendingCoordinatorWork",0,function(e=Date.now()){let n=t.default.prepare("SELECT request_id AS id FROM terminal_followups WHERE done_at IS NULL ORDER BY created_at ASC, request_id ASC").all(),r=new Set;for(let t of n)for(let n of e_(t.id,e))r.add(n);for(let e of t.default.prepare(`
98
+ SELECT w.id FROM work_requests w JOIN terminal_followups f ON f.request_id = w.parent_request_id
99
+ WHERE w.state = 'queued' AND (w.wake_event_id IS NOT NULL OR (w.requester_kind = ? AND w.requester_id = ?))
100
+ ORDER BY w.created_at ASC, w.id ASC
101
+ `).all(et.kind,et.id))r.add(e.id);return[...r]},"resumeBindingFor",0,function(e,n){if("revision"!==e.execution_kind)return{ok:!0,binding:null};let r=er(e).resume_work_request,i="string"==typeof r?t.engine.getWorkRequest(r):void 0;if(!i||i.root_request_id!==e.root_request_id||i.target_agent_id!==e.target_agent_id||!["implementation","revision"].includes(i.execution_kind))return{ok:!1,reason:"The revision does not reference an implementation of this Agent in this lineage."};let s=t.engine.getActiveSessionBinding({agentId:e.target_agent_id,adapter:n,conversationId:i.source_conversation_id,requestId:i.id});return s?{ok:!0,binding:s}:{ok:!1,reason:"The session of the referenced implementation is not available to resume."}},"turnContext",0,function(e){if(e.requester_kind===et.kind&&e.requester_id===et.id&&"coordinator_continuation"===er(e).source)return[{speakerLabel:en,fromAgent:!1,content:e.intent}];if(!e.wake_event_id)return[];let n=er(e),r=Array.isArray(n.context_work_requests)?n.context_work_requests.filter(e=>"string"==typeof e):[],i=[`[${e.execution_kind} Wake from ${ei(e.requester_id)}] Work Request: ${e.id}`,`Objective:
102
+ ${e.intent}`];for(let s of("string"==typeof n.resume_work_request&&i.push(`This revision continues your session from Work Request ${n.resume_work_request}.`),r)){let n=t.engine.getWorkRequest(s);n&&n.root_request_id===e.root_request_id&&i.push(`Context:
103
+ ${ea(n)}`)}return[{speakerLabel:en,fromAgent:!1,content:i.join("\n\n")}]}],39872)},16789,81449,e=>{"use strict";e.s(["ProviderSessionError",()=>x,"agentProviderCapabilities",()=>X,"getProviderSessionRow",()=>F,"getProviderTurn",()=>e_,"observeProviderTurn",()=>ec,"privateProviderIds",()=>ep,"refreshProviderSession",()=>Y,"sendProviderTurn",()=>ed,"startProviderSession",()=>eo,"syncAgentSessionHistory",()=>V,"warmAgentProvider",()=>G],16789),e.s(["SESSION_CONTEXT_PRINCIPAL",()=>p,"SESSION_CONTEXT_REASONS",()=>f,"SESSION_CONTEXT_SERVICE_ID",()=>_,"attachSessionContextsToTurn",()=>E,"bindSessionContext",()=>k,"endSessionContext",()=>S,"endTurnSessionContexts",()=>I,"mintSessionContext",()=>v,"resolveSessionContext",()=>q,"revokeAgentSessionContexts",()=>T,"sessionContextHeader",()=>R],81449);var t=e.i(54799),n=e.i(18966),r=e.i(99446),i=e.i(91466),s=e.i(27776);e.i(96474);var a=e.i(40596),o=e.i(28420),d=e.i(73688),u=e.i(62294),l=e.i(35034),c=e.i(49066);let _="botmancers-session-context",p=Object.freeze({kind:"service",id:_}),f=["missing","ambiguous","unsupported","unknown","stale","revoked"],h=/^bmsc_[A-Za-z0-9_-]{43}$/;function m(){return`${process.pid}:${Math.round(performance.timeOrigin)}`}u.default.exec(`
104
+ CREATE TABLE IF NOT EXISTS session_contexts (
105
+ id TEXT PRIMARY KEY CHECK (id LIKE 'sctx_%'),
106
+ token_sha256 TEXT NOT NULL UNIQUE CHECK (length(token_sha256) = 64),
107
+ agent_id TEXT NOT NULL,
108
+ -- The public session_ref the context names; null until a started
109
+ -- session is recorded (then bound once).
110
+ session_ref TEXT,
111
+ -- The registry row whose turns keep the context live (the same ref, or
112
+ -- the provider row behind a binding).
113
+ registry_ref TEXT,
114
+ launch_kind TEXT NOT NULL CHECK (launch_kind IN ('claude_turn', 'codex_thread_load', 'codex_exec')),
115
+ launch_digest TEXT NOT NULL,
116
+ -- Set for a launch that cannot outlive the Botmancers process (a thread
117
+ -- load in its app-server child).
118
+ process_ref TEXT,
119
+ -- The Botmancers turn whose launch this is (a Claude turn process, a
120
+ -- codex exec run); null for a Codex thread load, which outlives a turn.
121
+ turn_ref TEXT,
122
+ state TEXT NOT NULL CHECK (state IN ('live', 'ended', 'revoked')),
123
+ end_reason TEXT,
124
+ created_at INTEGER NOT NULL,
125
+ ended_at INTEGER,
126
+ updated_at INTEGER NOT NULL
127
+ );
128
+ CREATE INDEX IF NOT EXISTS idx_session_contexts_launch ON session_contexts(launch_digest, state);
129
+ CREATE INDEX IF NOT EXISTS idx_session_contexts_agent ON session_contexts(agent_id, state);
130
+ CREATE INDEX IF NOT EXISTS idx_session_contexts_turn ON session_contexts(turn_ref, state);
131
+ `);let g=e=>(0,t.createHash)("sha256").update(e,"utf8").digest("hex");function y(e){let t=u.default.prepare("SELECT id FROM provider_sessions WHERE id = ?").get(e);if(t)return t.id;let n=u.default.prepare("SELECT id FROM provider_sessions WHERE binding_id = ?").get(e);return n?.id??null}function w(e){let t=u.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);if(t)return t.agent_id;let n=u.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ?").get(e);return n?.agent_id??null}function v(e){var n,r;if(A(),!u.bots.getById(e.agentId)||!(0,l.shareFromTurnEnabled)(e.agentId)||null!==e.sessionRef&&w(e.sessionRef)!==e.agentId)return null;let i=`bmsc_${(0,t.randomBytes)(32).toString("base64url")}`,s=`sctx_${(0,t.randomBytes)(16).toString("base64url")}`,a=Date.now();return u.default.prepare(`
132
+ INSERT INTO session_contexts (id, token_sha256, agent_id, session_ref, registry_ref, launch_kind, launch_digest, process_ref, state, created_at, updated_at)
133
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'live', ?, ?)
134
+ `).run(s,g(i),e.agentId,e.sessionRef,null===e.sessionRef?null:y(e.sessionRef),e.launch.kind,(n=e.launch.kind,r=e.launch.ref,g(`botmancers-session-launch
135
+ ${n}
136
+ ${r}`)),e.processBound?m():null,a,a),{id:s,token:i,url:function(e=process.env){let t=(e.BOTMANCERS_SESSION_CONTEXT_URL||"").trim();if(t)return t;let n=/^\d{1,5}$/.test((e.PORT||"").trim())?e.PORT.trim():"3333";return`http://127.0.0.1:${n}/api/v0/mcp`}(e.env)}}function k(e,t){return u.default.transaction(()=>{var n;let r=(n=e,u.default.prepare("SELECT * FROM session_contexts WHERE id = ?").get(n));return!!r&&"live"===r.state&&(null!==r.session_ref?r.session_ref===t:w(t)!==r.agent_id?(b(r.id,"ended","session_changed"),!1):(u.default.prepare("UPDATE session_contexts SET session_ref = ?, registry_ref = ?, updated_at = ? WHERE id = ? AND session_ref IS NULL").run(t,y(t),Date.now(),e),!0))}).immediate()}function E(e,t){let n=u.default.prepare("UPDATE session_contexts SET turn_ref = ?, updated_at = ? WHERE id = ? AND state = 'live' AND turn_ref IS NULL"),r=Date.now();for(let i of e)n.run(t,r,i)}function b(e,t,n){let r=Date.now();return u.default.prepare("UPDATE session_contexts SET state = ?, end_reason = ?, ended_at = ?, updated_at = ? WHERE id = ? AND state = 'live'").run(t,n,r,r,e).changes}function I(e,t="turn_end"){let n=Date.now();return u.default.prepare(`
137
+ UPDATE session_contexts SET state = 'ended', end_reason = ?, ended_at = ?, updated_at = ?
138
+ WHERE turn_ref = ? AND state = 'live' AND launch_kind IN ('claude_turn', 'codex_exec')
139
+ `).run(t,n,n,e).changes}function S(e,t){return 1===b(e,"ended",t)}function T(e){let t=Date.now();return u.default.prepare("UPDATE session_contexts SET state = 'revoked', end_reason = 'owner_off', ended_at = ?, updated_at = ? WHERE agent_id = ? AND state = 'live'").run(t,t,e).changes}function A(){let e=u.default.prepare("SELECT DISTINCT agent_id FROM session_contexts WHERE state = 'live'").all(),t=0;for(let{agent_id:n}of e)u.bots.getById(n)&&(0,l.shareFromTurnEnabled)(n)||(t+=T(n));return t}function R(e){return e.get(c.SESSION_CONTEXT_HEADER)}function q(e){let t=e=>({ok:!1,reason:e});if(A(),null==e)return t("missing");if(e.length>4096)return t("unsupported");let n=e.split(/[\s,]+/).filter(Boolean);if(0===n.length)return t("missing");if(n.length>1)return t("ambiguous");if(!h.test(n[0]))return t("unsupported");let r=u.default.prepare("SELECT * FROM session_contexts WHERE token_sha256 = ?").get(g(n[0]));if(!r)return t("unknown");if("revoked"===r.state)return t("revoked");if(!u.bots.getById(r.agent_id)||!(0,l.shareFromTurnEnabled)(r.agent_id))return"live"===r.state&&T(r.agent_id),t("revoked");if("live"!==r.state||null===r.session_ref)return t("stale");if(null!==r.process_ref&&r.process_ref!==m())return b(r.id,"ended","restart"),t("stale");if(w(r.session_ref)!==r.agent_id)return b(r.id,"ended","session_changed"),t("stale");let i=r.registry_ref?function(e){if(!u.default.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_session_turns'").get())return{running:!1,at:null};let t=u.default.prepare(`
140
+ SELECT MAX(CASE WHEN state = 'running' THEN 1 ELSE 0 END) AS running, MAX(COALESCE(finished_at, created_at)) AS at
141
+ FROM provider_session_turns WHERE session_ref = ?
142
+ `).get(e);return{running:1===t.running,at:t.at}}(r.registry_ref):{running:!1,at:null};return!i.running&&Date.now()-Math.max(r.created_at,i.at??0)>9e5?(b(r.id,"ended","idle_timeout"),t("stale")):{ok:!0,contextId:r.id,agentId:r.agent_id,sessionRef:r.session_ref}}(0,r.registerBuiltinSessionProvider)("claude",()=>(0,i.createClaudeSessionProvider)()),(0,r.registerSessionProvider)({provider:d.CURSOR_PROVIDER_KIND},d.cursorSessionProviderFactory),(0,r.registerBuiltinSessionProvider)("muse",e=>(0,s.createMuseSessionProvider)(e.id));class x extends Error{code;constructor(e,t){super(t),this.name="ProviderSessionError",this.code=e}}function N(e,t){let i=e.prepare(`
143
+ SELECT id, runtime_connection_id, session_scope_kind, session_scope_items, policy_mode, allow_new_sessions, allow_resume_with_edits
144
+ FROM bots WHERE id = ?
145
+ `).get(t);if(!i)throw new x("agent_not_found","No such Agent.");let s=i.runtime_connection_id?e.prepare("SELECT id, provider FROM runtime_connections WHERE id = ?").get(i.runtime_connection_id):void 0,a=s?(0,r.sessionProviderFor)(s):null;if(!s||!a)throw new x("provider_unavailable","The Agent's runtime connection has no session provider.");return{agentId:t,connection:s,provider:a,capabilities:(0,r.normalizeCapabilities)(a.capabilities()),scope:(0,n.readStoredScope)(i),policy:(0,n.readStoredPolicy)(i)}}async function C(e,t,n={}){let i=N(e,t);if(!i.provider.ready)return i;let s=await i.provider.ready($(n));return s.ok||L(s.error),{...i,capabilities:(0,r.normalizeCapabilities)(i.provider.capabilities())}}function O(e,t){if(!e.capabilities[t])throw new x("unsupported",`The session provider does not support ${t}.`)}function D(e){if(!e.scope)throw new x("scope_missing","The Agent has no session scope.");return e.scope}function L(e,t="provider_failed"){throw new x("unsupported"===e.code?"unsupported":"unsupported_authority"===e.code?"authority_not_allowed":"not_found"===e.code?"session_missing":"busy"===e.code?"busy":"not_resumable"===e.code?"not_resumable":"invalid_input"===e.code?"invalid_input":"unavailable"===e.code?"provider_unavailable":"auth_required"===e.code||"permission_denied"===e.code||"incompatible_version"===e.code||"usage_limit"===e.code?e.code:t,`The session provider refused the call (${e.code}).`)}function $(e){return{correlation:{...e.correlation??{}},signal:e.signal??null,deadline_at:e.deadlineAt??null}}function M(e,t){let n=[];return{minted:n,minter:{mint:r=>{let i=v({agentId:e,sessionRef:t,launch:{kind:r.kind,ref:r.ref},processBound:!0===r.processBound});if(!i)return null;n.push(i.id);let s=i.id;return{token:i.token,url:i.url,end:e=>{S(s,e)}}}},record:(e,t)=>{for(let t of n)k(t,e);E(n,t)},abandon:()=>{for(let e of n)S(e,"launch_failed")}}}let W="SELECT * FROM provider_sessions";function F(e,t,n){return e.prepare(`${W} WHERE id = ? AND agent_id = ?`).get(n,t)}function U(e,t,n){let r=F(e,t,n);if(!r)throw new x("session_not_found","No session with that reference.");return r}function H(e,n){e.prepare("INSERT INTO provider_session_events (id, agent_id, session_ref, turn_id, type, detail, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.agentId,n.sessionRef??null,n.turnId??null,n.type,JSON.stringify(n.detail??{}),n.now)}function P(e){let t=(e??"").split("\n").map(e=>e.trim()).find(e=>e.length>0);return t?t.length>80?`${t.slice(0,79).trimEnd()}…`:t:null}function j(e){return"string"==typeof e&&e.startsWith("/")?e:null}function z(e,n,r,i,s,a=null){var o;let d=(o=r.provider_session_id,e.prepare(`
146
+ ${W} WHERE agent_id = ? AND runtime_connection_id = ? AND provider_session_id = ?
147
+ ORDER BY (binding_id IS NULL) DESC, created_at DESC, id DESC LIMIT 1
148
+ `).get(n.agentId,n.connection.id,o));if(d)return B(e,n,d.id,r,s),{ref:d.id,created:!1};let u=(0,t.randomUUID)();return e.prepare(`
149
+ INSERT INTO provider_sessions (
150
+ id, agent_id, runtime_connection_id, provider_kind, provider_session_id, binding_id, origin, title, workspace,
151
+ provider_created_at, provider_updated_at, availability, lifecycle, resumable, busy, capabilities, last_synced_at, created_at, updated_at
152
+ ) VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, 'available', ?, ?, ?, ?, ?, ?, ?)
153
+ `).run(u,n.agentId,n.connection.id,n.provider.kind,r.provider_session_id,i,P(r.title)??a,j(r.workspace),r.created_at,r.updated_at,"archived"===r.lifecycle?"archived":"open",+!!r.resumable,+!!r.busy,JSON.stringify(n.capabilities),s,s,s),{ref:u,created:!0}}function B(e,t,n,r,i){e.prepare(`
154
+ UPDATE provider_sessions SET title = COALESCE(?, title), workspace = COALESCE(?, workspace),
155
+ provider_created_at = COALESCE(?, provider_created_at), provider_updated_at = COALESCE(?, provider_updated_at),
156
+ availability = 'available', lifecycle = ?, resumable = ?, busy = ?, capabilities = ?, last_synced_at = ?, updated_at = ?
157
+ WHERE id = ?
158
+ `).run(P(r.title),j(r.workspace),r.created_at,r.updated_at,"archived"===r.lifecycle?"archived":"open",+!!r.resumable,+!!r.busy,JSON.stringify(t.capabilities),i,i,n)}function K(e,t,n){"missing"===t.availability?e.prepare("UPDATE provider_sessions SET last_synced_at = ? WHERE id = ?").run(n,t.id):(e.prepare("UPDATE provider_sessions SET availability = 'missing', busy = 0, last_synced_at = ?, updated_at = ? WHERE id = ?").run(n,n,t.id),H(e,{agentId:t.agent_id,sessionRef:t.id,type:"session_missing",now:n}))}async function G(e,t,n={}){let r;if(!n.onlyWithSessions||e.prepare("SELECT 1 FROM provider_sessions WHERE agent_id = ? LIMIT 1").get(t)){try{r=N(e,t)}catch{return}if(r.provider.ready)try{await r.provider.ready($({deadlineAt:Date.now()+1e4}))}catch{}}}function X(e,t){try{let n=N(e,t);return{provider_kind:n.provider.kind,...n.capabilities,explicit_import:"function"==typeof n.provider.importSession}}catch(e){if(e instanceof x&&"provider_unavailable"===e.code)return null;throw e}}async function J(e,t,r={}){let i=await C(e,t,r);O(i,"list");let s="string"==typeof r.query&&r.query.trim()?r.query.trim().slice(0,200):null;s&&O(i,"search");let a=D(i),o="sessions"!==a.kind||0===a.sessions.length?new Set:new Set(e.prepare(`
159
+ SELECT provider_session_id FROM provider_sessions
160
+ WHERE agent_id = ? AND runtime_connection_id = ? AND id IN (SELECT value FROM json_each(?))
161
+ `).all(i.agentId,i.connection.id,JSON.stringify(a.sessions)).map(e=>e.provider_session_id)),d=function(e,t){let n=Number(t??e.capabilities.max_page_size);if(!Number.isInteger(n)||n<1)throw new x("invalid_input","limit must be a positive integer.");return Math.min(n,e.capabilities.max_page_size)}(i,r.limit),u=await i.provider.listSessions({...$(r),scope:{kind:a.kind,workspaces:[...a.workspaces],provider_session_ids:[...o]},query:s,cursor:r.cursor??null,limit:d});u.ok||L(u.error);let l=r.now??Date.now(),c=u.value.items.slice(0,d);return e.transaction(()=>{let r={imported:[],updated:[],rejected_out_of_scope:0,next_cursor:u.value.next_cursor??null};for(let s of c){if(!s||"string"!=typeof s.provider_session_id||!s.provider_session_id)continue;if(!function(e,t,r){if("all_provider_sessions"===e.kind)return!0;if("sessions"===e.kind)return r.has(t.provider_session_id);let i=j(t.workspace);return null!==i&&e.workspaces.some(e=>(0,n.workspaceContains)(e,i))}(a,s,o)){r.rejected_out_of_scope++;continue}let{ref:d,created:u}=z(e,i,s,"discovered",l);(u?r.imported:r.updated).push(d),H(e,{agentId:t,sessionRef:d,type:u?"session_imported":"session_synced",now:l})}return r.rejected_out_of_scope>0&&H(e,{agentId:t,type:"sync_rejected_out_of_scope",detail:{count:r.rejected_out_of_scope},now:l}),r}).immediate()}async function V(e,t,n={}){let r=[],i=[],s=0,a=n.cursor??null,o=0,d=new Set;for(;o<1e3;){if(null!==a){if(d.has(a))return{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:a,pages:o,complete:!1};d.add(a)}let u=await J(e,t,{...n,cursor:a});if(r.push(...u.imported),i.push(...u.updated),s+=u.rejected_out_of_scope,o++,null===(a=u.next_cursor))return{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:null,pages:o,complete:!0}}return{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:a,pages:o,complete:!1}}async function Y(e,t,n,r={}){let i=await C(e,t,r),s=U(e,t,n);if(s.runtime_connection_id!==i.connection.id)throw new x("provider_unavailable","The session belongs to another runtime connection.");let a=await i.provider.getSession({...$(r),provider_session_id:s.provider_session_id});a.ok||L(a.error);let o=r.now??Date.now();return e.transaction(()=>{null===a.value?K(e,s,o):(B(e,i,s.id,a.value,o),H(e,{agentId:t,sessionRef:s.id,type:"session_synced",now:o}))}).immediate(),U(e,t,n)}function Z(e){if("string"!=typeof e.prompt||!e.prompt.trim())throw new x("invalid_input","prompt is required.");if(e.prompt.length>2e4)throw new x("invalid_input","prompt is longer than 20000 characters.");if("read_only"!==e.authority&&"workspace_write"!==e.authority)throw new x("invalid_input","authority must be read_only or workspace_write.");if("string"!=typeof e.idempotencyKey||!e.idempotencyKey.trim()||e.idempotencyKey.length>200)throw new x("invalid_input","idempotencyKey is required.");if(!e.requester||!["person","bot","service"].includes(e.requester.kind)||!e.requester.id)throw new x("invalid_input","requester is required.")}function Q(e,t,n){if(!e.capabilities.authorities.includes(t))throw new x("authority_not_allowed",`The session provider cannot enforce ${t}.`);if(!e.policy)throw new x("authority_not_allowed","The Agent has no launch policy.");if("workspace_write"===t){if("workspace_write"!==e.policy.mode)throw new x("authority_not_allowed","The Agent's policy is read only.");if("send"===n&&!e.policy.allow_resume_with_edits)throw new x("authority_not_allowed","The Agent's policy does not allow resuming with edits.")}}function ee(e){return(0,t.createHash)("sha256").update(JSON.stringify(e)).digest("hex")}function et(e,n,r){return`bm-${(0,t.createHash)("sha256").update(`${e}
162
+ ${n.kind}
163
+ ${n.id}
164
+ ${r}`).digest("hex").slice(0,32)}`}function en(e,t,n){return e.prepare("SELECT * FROM provider_session_turns WHERE agent_id = ? AND requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(t,n.requester.kind,n.requester.id,n.idempotencyKey)}function er(e,t){if(e){if(e.request_hash!==t)throw new x("idempotency_conflict","That idempotency key was used for a different turn.");return e}}function ei(e,t){let n=function(e,t=[]){let n=[e.provider_session_id,...t].filter(e=>e.length>0).sort((e,t)=>t.length-e.length);return e=>n.reduce((e,t)=>e.split(t).join("[redacted]"),e)}(e.prepare(`${W} WHERE id = ?`).get(t.session_ref),[t.provider_turn_id]);return{turn_ref:t.id,session_ref:t.session_ref,kind:t.kind,authority:t.authority,state:t.state,output:null===t.output?null:n(t.output),failure_code:t.failure_code,usage:"running"===t.state?null:{input_tokens:t.input_tokens??null,output_tokens:t.output_tokens??null,total_cost_usd:t.total_cost_usd??null},created_at:t.created_at,finished_at:t.finished_at}}function es(e,t){return e.prepare(`
165
+ INSERT INTO provider_session_turns (
166
+ id, session_ref, agent_id, kind, authority, requester_kind, requester_id, idempotency_key, request_hash,
167
+ provider_turn_id, state, output, failure_code, correlation, created_at, finished_at
168
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', NULL, NULL, ?, ?, NULL)
169
+ `).run(t.id,t.session_ref,t.agent_id,t.kind,t.authority,t.requester_kind,t.requester_id,t.idempotency_key,t.request_hash,t.provider_turn_id,t.correlation,t.created_at),e.prepare("UPDATE provider_sessions SET busy = 1, updated_at = ? WHERE id = ?").run(t.created_at,t.session_ref),H(e,{agentId:t.agent_id,sessionRef:t.session_ref,turnId:t.id,type:"turn_started",detail:{kind:t.kind,authority:t.authority},now:t.created_at}),e.prepare("SELECT * FROM provider_session_turns WHERE id = ?").get(t.id)}function ea(e){return e instanceof Error&&/UNIQUE constraint failed: provider_session_turns/.test(e.message)}async function eo(e,r,i){Z(i);let s=j(i.workspace);if(!s)throw new x("invalid_input","workspace must be an absolute path.");N(e,r);let a=ee({kind:"start",workspace:s,prompt:i.prompt,authority:i.authority}),o=er(en(e,r,i),a);if(o)return{turn:ei(e,o),replayed:!0};let d=await C(e,r,i);O(d,"start");let u=D(d);if("sessions"===u.kind)throw new x("out_of_scope","The Agent is scoped to selected sessions; it cannot start new ones.");if("workspaces"===u.kind&&!u.workspaces.some(e=>(0,n.workspaceContains)(e,s)))throw new x("out_of_scope","The workspace is outside the Agent's session scope.");if(!d.policy?.allow_new_sessions)throw new x("new_sessions_not_allowed","The Agent's policy does not allow new sessions.");Q(d,i.authority,"start");let l=M(r,null),c=await d.provider.startSession({...$(i),workspace:s,prompt:i.prompt,authority:i.authority,idempotency_key:et(r,i.requester,i.idempotencyKey),session_context:l.minter});c.ok||(l.abandon(),L(c.error));let _=c.value,p=await d.provider.getSession({...$(i),provider_session_id:_.provider_session_id}),f=i.now??Date.now();try{let n=e.transaction(()=>{let n=p.ok&&p.value?{...p.value,provider_session_id:_.provider_session_id,workspace:p.value.workspace??s}:{provider_session_id:_.provider_session_id,title:null,workspace:s,created_at:f,updated_at:f,lifecycle:"open",resumable:!1,busy:!0},{ref:o,created:u}=z(e,d,n,"started",f,P(i.prompt));return u&&H(e,{agentId:r,sessionRef:o,type:"session_started",detail:{authority:i.authority},now:f}),es(e,{id:(0,t.randomUUID)(),session_ref:o,agent_id:r,kind:"start",authority:i.authority,requester_kind:i.requester.kind,requester_id:i.requester.id,idempotency_key:i.idempotencyKey,request_hash:a,provider_turn_id:_.provider_turn_id,correlation:JSON.stringify(i.correlation??{}),created_at:f})}).immediate();return l.record(n.session_ref,n.id),{turn:ei(e,n),replayed:!1}}catch(t){if(l.abandon(),ea(t))return{turn:ei(e,er(en(e,r,i),a)),replayed:!0};throw t}}async function ed(e,r,i,s){Z(s),N(e,r);let a=U(e,r,i),o=ee({kind:"send",ref:i,prompt:s.prompt,authority:s.authority}),d=er(en(e,r,s),o);if(d)return{turn:ei(e,d),replayed:!0};let u=await C(e,r,s);if(O(u,"resume"),a.runtime_connection_id!==u.connection.id)throw new x("provider_unavailable","The session belongs to another runtime connection.");let l=D(u);if("binding"!==a.origin&&!("all_provider_sessions"===l.kind||"sessions"===l.kind&&l.sessions.includes(a.id)||"workspaces"===l.kind&&null!==a.workspace&&l.workspaces.some(e=>(0,n.workspaceContains)(e,a.workspace))))throw new x("out_of_scope","The session is outside the Agent's session scope.");Q(u,s.authority,"send");let c=await Y(e,r,i,s);if("missing"===c.availability)throw new x("session_missing","The provider no longer has this session.");if(1!==c.resumable)throw new x("not_resumable","The provider cannot resume this session.");let _=e.prepare("SELECT 1 FROM provider_session_turns WHERE session_ref = ? AND state = 'running'").get(i);if(1===c.busy||_)throw new x("busy","The session has a turn in flight.");let p=M(r,i),f=await u.provider.sendTurn({...$(s),provider_session_id:a.provider_session_id,prompt:s.prompt,authority:s.authority,idempotency_key:et(r,s.requester,s.idempotencyKey),session_context:p.minter});f.ok||(p.abandon(),L(f.error));let h=s.now??Date.now();try{let n=e.transaction(()=>es(e,{id:(0,t.randomUUID)(),session_ref:i,agent_id:r,kind:"send",authority:s.authority,requester_kind:s.requester.kind,requester_id:s.requester.id,idempotency_key:s.idempotencyKey,request_hash:o,provider_turn_id:f.value.provider_turn_id,correlation:JSON.stringify(s.correlation??{}),created_at:h})).immediate();return p.record(i,n.id),{turn:ei(e,n),replayed:!1}}catch(t){if(p.abandon(),ea(t))return{turn:ei(e,er(en(e,r,s),o)),replayed:!0};throw t}}function eu(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);if(!r)throw new x("turn_not_found","No turn with that reference.");return r}function el(e){return"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null}async function ec(e,t,n,i={}){var s,d;let u=eu(e,t,n);if("running"!==u.state)return ei(e,u);let l=await C(e,t,i),c=await l.provider.observeTurn({...$(i),provider_turn_id:u.provider_turn_id});if(!c.ok){if("cancelled"===c.error.code||"timed_out"===c.error.code)return ei(e,eu(e,t,n));L(c.error)}return s=c.value,d=i.now??Date.now(),e.transaction(()=>{var t;let n="completed"===s.status?"completed":"cancelled"===s.status?"cancelled":"failed",i=s.usage??null;if(0===e.prepare(`
170
+ UPDATE provider_session_turns SET state = ?, output = ?, failure_code = ?, finished_at = ?, input_tokens = ?, output_tokens = ?, total_cost_usd = ?
171
+ WHERE id = ? AND state = 'running'
172
+ `).run(n,"string"==typeof s.output?s.output:null,s.failure?String(s.failure.code).slice(0,100):null,"number"==typeof s.finished_at?s.finished_at:d,el(i?.input_tokens),el(i?.output_tokens),"number"==typeof(t=i?.total_cost_usd)&&Number.isFinite(t)&&t>=0?t:null,u.id).changes)return;if(I(u.id),s.failure?.code==="session_missing"){let t=e.prepare(`${W} WHERE id = ?`).get(u.session_ref);K(e,t,d)}let l=e.prepare("SELECT provider_kind FROM provider_sessions WHERE id = ?").get(u.session_ref);(0,o.recordTurnUsageSample)(e,u.id,u.session_ref,{agentId:u.agent_id,provider:l?.provider_kind??"unknown",usage:function(e){try{return(0,a.usageFromEvent)(e)}catch{return null}}(s.usage),observedAt:"number"==typeof s.finished_at?s.finished_at:d,now:d}),e.prepare(`
173
+ UPDATE provider_sessions SET busy = CASE WHEN EXISTS (
174
+ SELECT 1 FROM provider_session_turns WHERE session_ref = ? AND state = 'running') THEN 1 ELSE 0 END,
175
+ provider_updated_at = ?, updated_at = ? WHERE id = ?
176
+ `).run(u.session_ref,d,d,u.session_ref);let c=(0,r.normalizeUsage)(i&&void 0===i.cost_usd&&"total_cost_usd"in i?{...i,cost_usd:i.total_cost_usd}:i);H(e,{agentId:u.agent_id,sessionRef:u.session_ref,turnId:u.id,type:`turn_${n}`,detail:c?{usage:c}:{},now:d})}).immediate(),ei(e,eu(e,t,n))}function e_(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);return r?ei(e,r):void 0}function ep(e){return e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get()?[...e.prepare("SELECT provider_session_id AS id FROM provider_sessions").all(),...e.prepare("SELECT provider_turn_id AS id FROM provider_session_turns").all()].map(e=>e.id):[]}},93399,e=>{"use strict";e.s(["serviceRedactor",()=>c]);var t=e.i(46786),n=e.i(62294),r=e.i(16789);let i=/^(cwd|working_directory|workspace|default_workspace|workspaces|deck|deck_id|deck_name|hermes_profile|hermes_profile_path)$/,s=/(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,a=/^(id|ref|session_ref|sessionRef|kind)$|(request|conversation|agent|message|attempt|exchange|event|wake|grant|binding|finalization|bot|participant|sender|requester|origin|group)_?id$/i;function o(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function d(e){try{return JSON.parse(e)}catch{return null}}function u(e,t,n=!1){if("string"==typeof e)n&&t.add(e);else if(Array.isArray(e))for(let r of e)u(r,t,n);else if(o(e))for(let[r,s]of Object.entries(e))u(s,t,n||i.test(r))}function l(e,t,n){return t.reduce((e,t)=>t.length>=6?e.includes(t)?e.split(t).join(n):e:e.includes(t)?e.replace(RegExp(`(?<![A-Za-z0-9])${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![A-Za-z0-9])`,"g"),n):e,e)}function c(){let e,i=function(){let e=new Set;for(let t of n.default.prepare("SELECT external_session_id AS id FROM session_bindings").all())e.add(t.id);for(let t of(0,r.privateProviderIds)(n.default))e.add(t);for(let t of n.default.prepare("SELECT external_session_id, external_run_id FROM work_attempts WHERE external_session_id IS NOT NULL OR external_run_id IS NOT NULL").all())t.external_session_id&&e.add(t.external_session_id),t.external_run_id&&e.add(t.external_run_id);return[...e].filter(e=>e.length>0).sort((e,t)=>t.length-e.length)}(),c=function(){let e=new Set;for(let t of n.bots.getAll())u(t,e),"string"==typeof t.session_scope_items&&u(d(t.session_scope_items),e,!0);if(n.default.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())for(let t of n.default.prepare("SELECT workspace FROM provider_sessions WHERE workspace IS NOT NULL").all())e.add(t.workspace);for(let n of[...e]){var r;let i="~"===(r=n)?t.default.homedir():r.startsWith("~/")?`${t.default.homedir()}/${r.slice(2)}`:null;i&&e.add(i),n.length>1&&n.endsWith("/")&&e.add(n.replace(/\/+$/,""))}for(let t of n.default.prepare(`
177
+ SELECT launch_snapshot AS snapshot FROM work_attempts WHERE launch_snapshot IS NOT NULL
178
+ UNION ALL SELECT snapshot FROM launch_snapshots
179
+ `).all())u(d(t.snapshot),e);return[...new Set([...[...e].filter(e=>e.trim().length>=4),...Object.entries(process.env).filter(([e,t])=>s.test(e)&&"string"==typeof t).flatMap(([,e])=>[e,...e.split(/[\s,=]+/)]).filter(e=>e.length>=8)])].sort((e,t)=>t.length-e.length)}(),_=(e=t.default.homedir().replace(/\/+$/,"")).length<4?null:RegExp(`${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?=$|[/\\s"'\`)\\]}>,;:])[^\\s"'\`)\\]}>,;]*`,"g"),p=e=>{let t=l(l(e,i,"[redacted runtime id]"),c,"[redacted]");return _?t.replace(_,"[redacted]"):t},f=(e,t)=>"string"==typeof e?null!==t&&a.test(t)?e:p(e):Array.isArray(e)?e.map(e=>f(e,null)):o(e)?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,f(t,e)])):e;return{text:p,deep:e=>f(e,null)}}},63020,e=>{"use strict";var t=e.i(54799),n=e.i(62349),r=e.i(35613),i=e.i(64974),s=e.i(11626),a=e.i(142);let o=Object.freeze({kind:"service",id:"botmancers-exchanges"}),d=["ask","continue"],u={invalid_request:400,authority_not_allowed:403,recursive_exchange:403,conversation_not_found:404,agent_not_found:404,session_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,idempotency_conflict:409,exchange_not_found:404,exchange_terminal:409,invalid_transition:409};class l extends Error{code;constructor(e,t){super(t),this.name="ExchangeError",this.code=e}get status(){return u[this.code]}}let c=["decisions","constraints","artifacts","open_questions"];function _(e){return"string"==typeof e&&e.trim().length>0}function p(e,...t){return t.reduce((e,t)=>t?e.split(t).join("[redacted session id]"):e,e)}let f="\n[truncated]";function h(e,t){return e.length<=t?{content:e,truncated:!1}:t<=f.length?{content:e.slice(0,t),truncated:!0}:{content:`${e.slice(0,t-f.length)}${f}`,truncated:!0}}let m="This is a read-only turn: do not edit files, change state, start other work, or emit Wakes.";function g(e,t){return`${e}:
180
+ ${t.length>0?t.map(e=>`- ${e}`).join("\n"):"(none)"}`}function y(e){let t;if(e.requester_kind!==o.kind||e.requester_id!==o.id)return null;try{t=JSON.parse(e.policy_snapshot)}catch{return null}return t&&"session_exchange"===t.source&&"string"==typeof t.exchange_id&&("ask"===t.hop||"extract"===t.hop||"deliver"===t.hop)?{exchangeId:t.exchange_id,hop:t.hop,resumeBindingId:"string"==typeof t.resume_session_binding?t.resume_session_binding:null}:null}let w=new Set(["mode","idempotency_key","origin_conversation_id","source","destination","instruction","execution_kind","tool_profile"]),v=["exchange_id","parent_exchange_id"];function k(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}e.s(["ExchangeError",0,l,"cancelReasonFromBody",0,function(e){let t;if(0===e.trim().length)return null;try{t=JSON.parse(e)}catch{throw new l("invalid_request","The body must be a JSON object.")}if(!k(t))throw new l("invalid_request","The body must be a JSON object.");let n=Object.keys(t).filter(e=>"reason"!==e);if(n.length>0)throw new l("invalid_request",`Unknown field ${n[0]}.`);let r=t.reason;if(null!=r&&("string"!=typeof r||r.length>500))throw new l("invalid_request","reason must be a string of at most 500 characters.");return"string"==typeof r?r:null},"createExchangeStore",0,function(e,u){let f=e.prepare("SELECT * FROM session_exchanges WHERE id = ?"),w=e.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?"),v=e.prepare("SELECT * FROM session_exchanges WHERE source_request_id = ? OR destination_request_id = ?"),k=e.prepare("SELECT * FROM session_bindings WHERE id = ?"),E=e.prepare("SELECT * FROM bots WHERE id = ?"),b=e.prepare(`
181
+ INSERT INTO session_exchange_events (id, exchange_id, sequence, type, data, created_at)
182
+ SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, ?, ?, ? FROM session_exchange_events WHERE exchange_id = ?
183
+ `);function I(e){let t=f.get(e);if(!t)throw new l("exchange_not_found",`No exchange ${e}.`);return t}function S(e,n,r,i){b.run((0,t.randomUUID)(),e,n,null==r?null:JSON.stringify(r),i,e)}function T(e){return e?E.get(e)?.name??null:null}function A(e){return r.EXCHANGE_TERMINAL_STATES.includes(e)}function R(t,n,i,s={}){if(!r.EXCHANGE_TRANSITIONS[t.state].includes(n))throw new l("invalid_transition",`Cannot move an exchange from ${t.state} to ${n}.`);let a=A(n);if(1!==e.prepare(`
184
+ UPDATE session_exchanges SET state = ?, version = version + 1, updated_at = ?, terminal_at = ?,
185
+ failure_code = ?, failure_message = ?
186
+ WHERE id = ? AND state = ? AND version = ?
187
+ `).run(n,i,a?i:null,"failed"===n?s.failureCode??"failed":t.failure_code,"failed"===n?s.failureMessage??"The exchange failed.":t.failure_message,t.id,t.state,t.version).changes)throw new l("invalid_transition",`Exchange ${t.id} changed concurrently.`);return S(t.id,"state_changed",{from:t.state,to:n,reason:s.reason??null,..."failed"===n?{failure_code:s.failureCode??"failed"}:{}},i),I(t.id)}function q(t,n,r){let i=Object.keys(n);if(0===i.length)return t;if(1!==e.prepare(`UPDATE session_exchanges SET ${i.map(e=>`${e} = ?`).join(", ")}, version = version + 1, updated_at = ? WHERE id = ? AND version = ?`).run(...i.map(e=>n[e]??null),r,t.id,t.version).changes)throw new l("invalid_transition",`Exchange ${t.id} changed concurrently.`);return I(t.id)}function x(e,t,n){let d,c={kind:e.requester_kind,id:e.requester_id},_=`exchange:${e.id}:${t}`;if(n.intent.length>r.EXCHANGE_LIMITS.promptChars)throw new l("invalid_request",`The ${t} prompt exceeds ${r.EXCHANGE_LIMITS.promptChars} characters.`);return u.createOrGetWorkRequest({sourceConversationId:n.conversationId,sourceEventId:_,requester:o,targetAgentId:n.targetAgentId,intent:n.intent,executionKind:"conversation",toolProfile:"readonly",idempotencyKey:_,parentRequestId:n.parentRequestId,policy:{source:"session_exchange",exchange_id:e.id,hop:t,...n.resumeBindingId?{resume_session_binding:n.resumeBindingId}:{}},executionPolicy:function(){let e=(0,i.selectExecutionPolicy)({entryPoint:"exchange",executionKind:"conversation"});if(!e.ok)throw Error(e.reason);return e.policy}(),rootPrincipal:c,retryPolicy:{...s.DEFAULT_RETRY_POLICY},...{safetySnapshot:d={safety_version:a.WAKE_SAFETY_VERSION,root_principal:{kind:c.kind,id:c.id},grant_rule:"readonly_default",grant_id:null,exchange:!0},safety:{principalType:"service"===c.kind?"api_principal":"human_owner",principal:c,decision:"allowed",grantRule:"readonly_default",snapshot:d}},now:n.now}).request}function N(e,t){let r=E.get(e);if(!r)throw new l("agent_not_found",`No ${t} Agent ${e}.`);let i=(0,n.resolveAgent)(r);if(!i.launchable){let e="launch_profile"===i.launch_blocker?"has no launch profile chosen":"session_scope"===i.launch_blocker?"has no session scope":"direct_runtime"===i.launch_blocker?"launches directly, which is not available yet":"has no Agent Deck selected";throw new l("agent_unavailable",`The ${t} Agent ${r.name} ${e}.`)}return{id:r.id,name:r.name,agent:i.agent}}function C(t,n,r){if(!e.prepare("SELECT 1 FROM conversations WHERE id = ?").get(t)||!e.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(t,n.kind,n.id))throw new l("conversation_not_found",`No ${r} conversation ${t} is visible to the owner.`)}let O={create(n){var s;if(!n.requester||!_(n.requester.id)||!["person","bot","service"].includes(n.requester.kind))throw new l("invalid_request","A requester principal is required.");let a="service"===n.requester.kind&&!0===n.serviceGrant&&n.requester.id!==o.id;if("person"!==n.requester.kind&&!a)throw new l("recursive_exchange","Exchanges are started by the owner; an Agent or exchange hop cannot start another exchange.");if(!_(n.idempotencyKey)||n.idempotencyKey.length>200)throw new l("invalid_request","An idempotency key (1-200 characters) is required.");if(!d.includes(n.mode))throw new l("invalid_request",'mode must be "ask" or "continue".');if(!_(n.originConversationId))throw new l("invalid_request","origin_conversation_id is required.");if(!_(n.sourceAgentId))throw new l("invalid_request","source.agent_id is required.");if(!_(n.sessionRef))throw new l("invalid_request","source.session_ref is required.");if(!_(n.instruction))throw new l("invalid_request","instruction is required.");if(n.instruction.length>r.EXCHANGE_LIMITS.instructionChars)throw new l("invalid_request",`instruction exceeds ${r.EXCHANGE_LIMITS.instructionChars} characters.`);if(void 0!==n.executionKind){let e=(0,i.selectExecutionPolicy)({entryPoint:"exchange",executionKind:n.executionKind});if(!e.ok)throw new l("authority_not_allowed",`${e.reason} An exchange never requests edit authority.`)}if("ask"===n.mode&&(null!=n.destinationAgentId||null!=n.destinationConversationId))throw new l("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===n.mode){if(!_(n.destinationAgentId))throw new l("destination_invalid","A Continue names destination.agent_id.");if(n.destinationAgentId===n.sourceAgentId)throw new l("destination_invalid","A Continue hands off to another Agent; the destination cannot be the source Agent.");if(null!=n.destinationConversationId&&!_(n.destinationConversationId))throw new l("destination_invalid","destination.conversation_id must be a non-empty string when present.")}let c=(s=JSON.stringify([n.mode,n.originConversationId,n.sourceAgentId,n.sessionRef,n.destinationAgentId??null,n.destinationConversationId??null,n.instruction]),(0,t.createHash)("sha256").update(s).digest("hex"));return e.transaction(()=>{var i,s;let a=w.get(n.requester.kind,n.requester.id,n.idempotencyKey);if(a){if(a.request_hash!==c)throw new l("idempotency_conflict","The idempotency key was already used with a different exchange.");return{exchange:a,created:!1}}let o=n.now??Date.now();if(C(n.originConversationId,n.requester,"origin"),!E.get(n.sourceAgentId))throw new l("agent_not_found",`No source Agent ${n.sourceAgentId}.`);let d=k.get(n.sessionRef);if(!d||d.agent_id!==n.sourceAgentId)throw new l("session_not_found",`Session ${n.sessionRef} is not a session of Agent ${n.sourceAgentId}.`);if(null!==d.released_at)throw new l("session_ended",`Session ${d.id} has ended and cannot be resumed.`);let _=N(n.sourceAgentId,"source");if(d.adapter!==_.agent)throw new l("session_not_resumable",`Session ${d.id} was bound under ${d.adapter}; ${_.name} now runs ${_.agent}.`);let p=d.conversation_id?d.conversation_id:d.request_id?u.getWorkRequest(d.request_id)?.source_conversation_id??null:null;if(!p)throw new l("session_not_resumable",`Session ${d.id} has no conversation to resume in.`);if(e.prepare("SELECT 1 FROM session_exchanges WHERE source_binding_id = ? AND terminal_at IS NULL").get(d.id))throw new l("source_session_busy",`Session ${d.id} already has an exchange in progress; wait for it or cancel it.`);let f=null,h=null;if("continue"===n.mode)if(f=N(n.destinationAgentId,"destination"),n.destinationConversationId)C(n.destinationConversationId,n.requester,"destination"),h=n.destinationConversationId;else if("service"===n.requester.kind)throw new l("destination_invalid","A service-started Continue names destination.conversation_id.");else{let t=e.prepare("SELECT id FROM conversations WHERE bot_id = ?").get(f.id);if(!t)throw new l("destination_invalid",`${f.name} has no direct thread; name destination.conversation_id.`);h=t.id}let g=(0,t.randomUUID)();e.prepare(`
188
+ INSERT INTO session_exchanges (
189
+ id, requester_kind, requester_id, idempotency_key, request_hash, mode, origin_conversation_id,
190
+ source_agent_id, source_binding_id, destination_agent_id, destination_conversation_id, instruction,
191
+ state, created_at, updated_at
192
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, ?)
193
+ `).run(g,n.requester.kind,n.requester.id,n.idempotencyKey,c,n.mode,n.originConversationId,n.sourceAgentId,d.id,f?.id??null,h,n.instruction,o,o),S(g,"created",{mode:n.mode,source_agent_id:n.sourceAgentId,source_binding_id:d.id,destination_agent_id:f?.id??null,destination_conversation_id:h},o);let y=I(g),v="ask"===n.mode?"ask":"extract",b=x(y,v,{conversationId:p,targetAgentId:n.sourceAgentId,intent:"ask"===v?function(e,t,n="the owner"){return`[Session Ask from ${n}] Exchange: ${e}
194
+
195
+ Answer one question from the context of this session. ${m} Reply with the answer only.
196
+
197
+ Question:
198
+ ${t}`}(g,n.instruction,"service"===y.requester_kind?`service ${y.requester_id}`:"the owner"):(i=f?.name??"another Agent",s=n.instruction,`[Session Continue handoff from the owner] Exchange: ${g}
199
+
200
+ The owner is handing this session's work to ${i}, who starts a fresh session and cannot see this one. ${m}
201
+
202
+ Reply with exactly one JSON object and nothing else:
203
+
204
+ {"objective": string, "decisions": [string], "constraints": [string], "artifacts": [string], "open_questions": [string]}
205
+
206
+ objective: what ${i} should achieve. decisions: what was decided and why. constraints: requirements and limits to respect. artifacts: files, branches, Work Requests, and other references. open_questions: what is still unresolved.
207
+
208
+ Limits: objective at most ${r.EXCHANGE_LIMITS.packetObjectiveChars} characters; each list at most ${r.EXCHANGE_LIMITS.packetListItems} entries of at most ${r.EXCHANGE_LIMITS.packetItemChars} characters.
209
+
210
+ Owner instruction:
211
+ ${s}`),parentRequestId:d.request_id,resumeBindingId:d.id,now:o}),T=q(y,{source_request_id:b.id},o);return S(g,"hop_queued",{hop:v,request_id:b.id},o),{exchange:T,created:!0}}).immediate()},get:e=>f.get(e),require:I,listEvents:t=>e.prepare("SELECT * FROM session_exchange_events WHERE exchange_id = ? ORDER BY sequence ASC").all(t),forHopRequest:e=>v.get(e,e),resumeFor(e,t){let n=y(e);if(!n)return null;if("deliver"===n.hop)return{ok:!0,binding:null,freshSession:!0};let r=O.get(n.exchangeId),i=n.resumeBindingId?k.get(n.resumeBindingId):void 0;return r&&i&&r.source_binding_id===i.id&&r.source_request_id===e.id?null!==i.released_at?{ok:!1,reason:"The selected session has ended."}:i.agent_id!==e.target_agent_id||i.adapter!==t?{ok:!1,reason:"The selected session belongs to another Agent or runtime."}:{ok:!0,binding:i}:{ok:!1,reason:"The exchange does not name this session."}},turnContext:e=>y(e)?[{speakerLabel:"Botmancers",fromAgent:!1,content:e.intent}]:null,hopClaimed(e,t,n){let r=O.forHopRequest(e);if(!(!r||A(r.state))){if(r.source_request_id===e){let i=r.source_attempt_id?r:q(r,{source_attempt_id:t},n);"queued"===i.state&&R(i,"extracting",n,{reason:"hop_started"}),S(r.id,"hop_started",{hop:"ask"===r.mode?"ask":"extract",request_id:e,attempt_id:t},n);return}r.destination_attempt_id||q(r,{destination_attempt_id:t},n),S(r.id,"hop_started",{hop:"deliver",request_id:e,attempt_id:t},n)}},sanitizeHopResult(e,t){let n=y(e),i=n?O.get(n.exchangeId):void 0;if(!n||!i)return t;let s=k.get(i.source_binding_id)?.external_session_id??null,a="ask"===n.hop?r.EXCHANGE_LIMITS.answerChars:"extract"===n.hop?r.EXCHANGE_LIMITS.extractionOutputChars:r.EXCHANGE_LIMITS.replyChars,o=t.externalSessionId??null,d=null===t.output?null:h(p(t.output,s,o),a);return{...t,output:d?d.content:null,outputTruncated:!0===t.outputTruncated||d?.truncated===!0,failure:t.failure?{...t.failure,message:p(t.failure.message,s,o)}:null}},commitHop(n,i,s,a){let o=y(n),d=o?O.get(o.exchangeId):void 0;if(!o||!d)return{exchange_id:o?.exchangeId??null,discarded:"exchange_missing"};if(A(d.state)||null!==d.cancel_requested_at)return S(d.id,"hop_result_discarded",{hop:o.hop,request_id:n.id,reason:A(d.state)?d.state:"cancel_requested"},a),{exchange_id:d.id,discarded:"cancel_requested"};let l=s.output??"",f=k.get(d.source_binding_id)?.external_session_id??null;if("ask"===o.hop){let o=h(p(l,f),r.EXCHANGE_LIMITS.answerChars),{content:u}=o,c=o.truncated||!0===s.outputTruncated,_=(0,t.randomUUID)();return e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(_,d.origin_conversation_id,"bot",d.source_agent_id,"bot",n.id,u,a),q(d,{answer_message_id:_},a),S(d.id,"answer_returned",{request_id:n.id,attempt_id:i.id,message_id:_,conversation_id:d.origin_conversation_id,truncated:c},a),{exchange_id:d.id,answer_message_id:_}}if("extract"===o.hop){var m;let e=s.outputTruncated?{ok:!1,reason:`The extraction output exceeds ${r.EXCHANGE_LIMITS.extractionOutputChars} characters.`}:function(e){let t;if(e.length>r.EXCHANGE_LIMITS.extractionOutputChars)return{ok:!1,reason:`The extraction output exceeds ${r.EXCHANGE_LIMITS.extractionOutputChars} characters.`};let n=/```(?:json)?\s*([\s\S]*?)```/.exec(e),i=(n?n[1]:e).trim(),s=i.indexOf("{"),a=i.lastIndexOf("}");if(s<0||a<s)return{ok:!1,reason:"The handoff packet is not a JSON object."};try{t=JSON.parse(i.slice(s,a+1))}catch{return{ok:!1,reason:"The handoff packet is not valid JSON."}}if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"The handoff packet is not a JSON object."};let o=t;if(!_(o.objective))return{ok:!1,reason:"The handoff packet has no objective."};if(o.objective.length>r.EXCHANGE_LIMITS.packetObjectiveChars)return{ok:!1,reason:`The handoff packet objective exceeds ${r.EXCHANGE_LIMITS.packetObjectiveChars} characters.`};let d={objective:o.objective.trim(),decisions:[],constraints:[],artifacts:[],open_questions:[]};for(let e of c){let t=o[e]??[];if(!Array.isArray(t)||t.some(e=>"string"!=typeof e))return{ok:!1,reason:`The handoff packet field ${e} must be a list of strings.`};if(t.length>r.EXCHANGE_LIMITS.packetListItems)return{ok:!1,reason:`The handoff packet field ${e} has ${t.length} entries (limit ${r.EXCHANGE_LIMITS.packetListItems}).`};if(t.some(e=>e.length>r.EXCHANGE_LIMITS.packetItemChars))return{ok:!1,reason:`An entry of the handoff packet field ${e} exceeds ${r.EXCHANGE_LIMITS.packetItemChars} characters.`};d[e]=t.map(e=>e.trim()).filter(e=>e.length>0)}return JSON.stringify(d).length>r.EXCHANGE_LIMITS.packetChars?{ok:!1,reason:`The handoff packet exceeds ${r.EXCHANGE_LIMITS.packetChars} characters.`}:{ok:!0,packet:d}}(l);if(!e.ok)return S(d.id,"packet_rejected",{request_id:n.id,attempt_id:i.id,reason:e.reason},a),R(d,"failed",a,{reason:"packet_invalid",failureCode:"packet_invalid",failureMessage:e.reason}),{exchange_id:d.id,packet:"rejected"};let t=(m=e.packet,{objective:p(m.objective,f),decisions:m.decisions.map(e=>p(e,f)),constraints:m.constraints.map(e=>p(e,f)),artifacts:m.artifacts.map(e=>p(e,f)),open_questions:m.open_questions.map(e=>p(e,f))});return q(d,{packet:JSON.stringify(t)},a),S(d.id,"packet_extracted",{request_id:n.id,attempt_id:i.id,size:JSON.stringify(t).length,counts:Object.fromEntries(c.map(e=>[e,t[e].length]))},a),{exchange_id:d.id,packet:"stored"}}let g=s.externalSessionId??null,w=!1;try{w=!0===JSON.parse(i.launch_snapshot).fresh_session}catch{w=!1}if(!(w&&g&&g!==f&&!e.prepare("SELECT 1 FROM session_bindings WHERE external_session_id = ?").get(g)&&!e.prepare("SELECT 1 FROM work_attempts WHERE external_session_id = ? AND id != ?").get(g,i.id))){let e=w?g?"reused":"not_reported":"not_fresh_launch";return S(d.id,"destination_session_rejected",{request_id:n.id,attempt_id:i.id,reason:e},a),R(d,"failed",a,{reason:"destination_session_invalid",failureCode:"destination_session_invalid",failureMessage:g?"The destination Agent reported a session that is not new; the hand-off needs a fresh destination-owned session.":"The destination Agent reported no session; the hand-off needs a fresh destination-owned session."}),{exchange_id:d.id,destination_session:"rejected"}}let v=(0,t.randomUUID)(),E=d.destination_conversation_id,b=h(p(l,f,g),r.EXCHANGE_LIMITS.replyChars),{content:I}=b,T=b.truncated||!0===s.outputTruncated;e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(v,E,"bot",n.target_agent_id,"bot",n.id,I,a);let x=u.bindSession({agentId:n.target_agent_id,adapter:i.adapter,externalSessionId:g,conversationId:E,requestId:n.id,sourceAttemptId:i.id,now:a}).id;return q(d,{destination_binding_id:x},a),S(d.id,"destination_replied",{request_id:n.id,attempt_id:i.id,message_id:v,conversation_id:E,session_ref:x,truncated:T},a),{exchange_id:d.id,destination_message_id:v}},advance:(t,n=Date.now())=>e.transaction(()=>{let i=O.get(t);if(!i||A(i.state))return[];if("queued"===i.state||"extracting"===i.state){var s,a,o,d;let t=i.source_request_id?u.getWorkRequest(i.source_request_id):void 0;if(!t)return R(i,"failed",n,{reason:"hop_missing",failureCode:"hop_missing",failureMessage:"The source session turn is missing."}),[];if(!r.TERMINAL_STATES.includes(t.state))return"queued"!==t.state&&"queued"===i.state&&R(i,"extracting",n,{reason:"hop_started"}),"queued"===t.state&&null===i.cancel_requested_at?[t.id]:[];if(null!==i.cancel_requested_at||"cancelled"===t.state)return R(i,"cancelled",n,{reason:null!==i.cancel_requested_at?"cancel_requested":"hop_cancelled"}),[];if("failed"===t.state)return R(i,"failed",n,{reason:"hop_failed",failureCode:"source_turn_failed",failureMessage:`The source session turn failed (${t.error_code??"failed"}): ${t.error_message??"no detail"}`}),[];if("queued"===i.state&&(i=R(i,"extracting",n,{reason:"hop_started"})),"ask"===i.mode)return i.answer_message_id?R(i,"completed",n,{reason:"answered"}):R(i,"failed",n,{reason:"answer_missing",failureCode:"answer_missing",failureMessage:"The source session turn returned no answer."}),[];if(!i.packet)return R(i,"failed",n,{reason:"packet_missing",failureCode:"packet_missing",failureMessage:"The source session turn returned no handoff packet."}),[];let l=JSON.parse(i.packet),c=i.destination_conversation_id,_=i.destination_agent_id;s={kind:"bot",id:_},e.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)").run(c,s.kind,s.id,n);let p=x(i,"deliver",{conversationId:c,targetAgentId:_,intent:(a=i.id,o=T(i.source_agent_id)??"the source Agent",d=i.instruction,[`Continue from ${o}: ${function(e,t=80){let n=e.split("\n").map(e=>e.trim()).find(e=>e.length>0)??"";return n.length>t?`${n.slice(0,t-1).trimEnd()}…`:n}(l.objective)}`,`[Session Continue] Exchange: ${a}`,`The owner handed you this work from ${o}'s session. You start a fresh session of your own: ${o}'s session is not available to you, and this handoff packet is everything carried over.`,`Objective:
212
+ ${l.objective}`,g("Decisions",l.decisions),g("Constraints",l.constraints),g("Artifacts and references",l.artifacts),g("Open questions",l.open_questions),`Owner instruction:
213
+ ${d}`].join("\n\n")),parentRequestId:null,resumeBindingId:null,now:n});return S((i=q(i,{destination_request_id:p.id},n)).id,"hop_queued",{hop:"deliver",request_id:p.id},n),R(i,"delivering",n,{reason:"packet_extracted"}),[p.id]}let l=i.destination_request_id?u.getWorkRequest(i.destination_request_id):void 0;return l?r.TERMINAL_STATES.includes(l.state)?(null!==i.cancel_requested_at||"cancelled"===l.state?R(i,"cancelled",n,{reason:null!==i.cancel_requested_at?"cancel_requested":"hop_cancelled"}):"failed"===l.state?R(i,"failed",n,{reason:"hop_failed",failureCode:"destination_turn_failed",failureMessage:`The destination turn failed (${l.error_code??"failed"}): ${l.error_message??"no detail"}`}):i.destination_binding_id?R(i,"completed",n,{reason:"delivered"}):R(i,"failed",n,{reason:"destination_session_missing",failureCode:"destination_session_invalid",failureMessage:"The destination turn bound no fresh destination-owned session."}),[]):"queued"===l.state&&null===i.cancel_requested_at?[l.id]:[]:(R(i,"failed",n,{reason:"hop_missing",failureCode:"hop_missing",failureMessage:"The destination turn is missing."}),[])}).immediate(),requestCancel:(t,n,r,i=Date.now())=>e.transaction(()=>{let s=I(t);if(A(s.state))throw new l("exchange_terminal",`Exchange ${t} is already ${s.state}; it cannot be cancelled.`);let a="delivering"===s.state?s.destination_request_id:s.source_request_id;return null!==s.cancel_requested_at?{exchange:s,hopRequestId:a,replayed:!0}:(e.prepare("UPDATE session_exchanges SET cancel_requested_at = ?, cancel_requested_by = ?, cancel_reason = ?, version = version + 1, updated_at = ? WHERE id = ? AND cancel_requested_at IS NULL").run(i,`${n.kind}:${n.id}`,r,i,t),S(t,"cancel_requested",{by:`${n.kind}:${n.id}`,reason:r,state:s.state,request_id:a},i),{exchange:I(t),hopRequestId:a,replayed:!1})}).immediate(),openIds:()=>e.prepare("SELECT id FROM session_exchanges WHERE terminal_at IS NULL ORDER BY created_at ASC, id ASC").all().map(e=>e.id),view(t){let n=I(t),i=(e,t)=>{let n=e?u.getWorkRequest(e):void 0;return n?{request_id:n.id,attempt_id:t,state:n.state,execution_kind:n.execution_kind,tool_profile:n.tool_profile}:null},s=n.answer_message_id?e.prepare("SELECT id, conversation_id, content FROM messages WHERE id = ?").get(n.answer_message_id):void 0;return{id:n.id,mode:n.mode,state:n.state,requester:{kind:n.requester_kind,id:n.requester_id},origin_conversation_id:n.origin_conversation_id,instruction:n.instruction,source:{agent_id:n.source_agent_id,agent_name:T(n.source_agent_id),session_ref:n.source_binding_id},destination:n.destination_agent_id&&n.destination_conversation_id?{agent_id:n.destination_agent_id,agent_name:T(n.destination_agent_id),conversation_id:n.destination_conversation_id,session_ref:n.destination_binding_id}:null,hops:{source:i(n.source_request_id,n.source_attempt_id),destination:i(n.destination_request_id,n.destination_attempt_id)},answer:s?{message_id:s.id,conversation_id:s.conversation_id,content:s.content}:null,packet:n.packet?JSON.parse(n.packet):null,failure:"failed"===n.state?{code:n.failure_code??"failed",message:n.failure_message??""}:null,cancel:null!==n.cancel_requested_at?{requested_at:n.cancel_requested_at,reason:n.cancel_reason}:null,events:O.listEvents(n.id).map(e=>({sequence:e.sequence,type:e.type,at:e.created_at,data:e.data?JSON.parse(e.data):null})),limits:r.EXCHANGE_LIMITS,created_at:n.created_at,updated_at:n.updated_at,terminal_at:n.terminal_at}}};return O},"exchangeErrorBody",0,function(e){return{error:{code:e.code,message:e.message}}},"exchangeInputFromBody",0,function(e,t){if(!k(e))throw new l("invalid_request","The body must be a JSON object.");for(let t of v)if(t in e)throw new l("recursive_exchange","An exchange cannot be started from another exchange.");let n=Object.keys(e).filter(e=>!w.has(e));if(n.length>0)throw new l("invalid_request",`Unknown field ${n[0]}.`);if(void 0!==e.tool_profile&&"readonly"!==e.tool_profile)throw new l("authority_not_allowed","An exchange runs read-only; it never requests edit authority.");if(!k(e.source))throw new l("invalid_request","source must be one object { agent_id, session_ref }.");if(void 0!==e.destination&&null!==e.destination&&!k(e.destination))throw new l("destination_invalid","destination must be one object { agent_id, conversation_id? }.");let r=k(e.destination)?e.destination:null,i=(e,t)=>{if("string"!=typeof e)throw new l("invalid_request",`${t} must be a string.`);return e},s=(e,t)=>null==e?null:i(e,t);return{requester:t,mode:i(e.mode,"mode"),idempotencyKey:i(e.idempotency_key,"idempotency_key"),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:i(e.source.session_ref,"source.session_ref"),destinationAgentId:r?s(r.agent_id,"destination.agent_id"):null,destinationConversationId:r?s(r.conversation_id,"destination.conversation_id"):null,instruction:i(e.instruction,"instruction"),...void 0!==e.execution_kind?{executionKind:e.execution_kind}:{}}},"hopOf",0,y])},674,50081,e=>{"use strict";e.s(["PinError",()=>y,"createPin",()=>B,"detachPin",()=>en,"messageAgent",()=>ee,"pinErrorBody",()=>w,"pinView",()=>P,"readPin",()=>et,"requirePin",()=>q,"sendPinTurn",()=>Z,"sessionOwner",()=>x,"sessionsWithActions",()=>L],674);var t=e.i(46786),n=e.i(54799),r=e.i(62294),i=e.i(18966),s=e.i(35613),a=e.i(90027),o=e.i(16789),d=e.i(63020),u=e.i(45383);let l={ask:"Ask from this context",resume:"Resume work here",handoff:"Hand off to…"},c={session_missing:"choose_session",session_ended:"choose_session",session_not_resumable:"choose_session",source_session_busy:"retry_later",action_unavailable:"choose_action",authority_not_allowed:"ask_owner"},_={...c,workspace_required:"ask_owner",no_eligible_session:"ask_owner",grant_required:"ask_owner",agent_unavailable:"ask_owner",approval_required:"approve_write",pin_not_found:"pin_again",pin_detached:"pin_again",provider_failed:"retry_later",rate_limited:"retry_later",session_context_required:"choose_session"};function p(e){return Object.prototype.hasOwnProperty.call(_,e)?_[e]:null}function f(e,t,n){return{available:!1,code:t,reason:`${l[e]} is unavailable: ${n}`,recovery:c[t]}}function h(e,t,n){if(null===n)return f(e,"session_not_resumable",`nothing can reach this session under ${t.agent.name}’s current runtime. Its history stays here.`);if("provider"===n){if("missing"===t.state.availability)return f(e,"session_missing","the runtime no longer has this session. Its history stays here; choose another session.");if(!1===t.state.resumable)return f(e,"session_not_resumable","the runtime says this session can’t be resumed. Choose another session.")}else{if("ended"===t.status)return f(e,"session_ended","this session has ended. Its history stays here.");if(!t.resumable)return f(e,"session_not_resumable",`Botmancers can’t resume this session under ${t.agent.name}’s current runtime.`)}return t.state.busy?f(e,"source_session_busy","a turn is running in this session. Try again when it finishes."):{available:!0}}function m(e,t){let n=h("ask",e,t.route),r=h("resume",e,t.route);return r.available&&("provider"!==t.route?r=f("resume","action_unavailable","this runtime can’t resume a session with edits. Ask from this context, or hand off to another Agent."):t.provider?.authorities.includes("workspace_write")?t.policy&&"workspace_write"===t.policy.mode?t.policy.allow_resume_with_edits||(r=f("resume","authority_not_allowed",`${e.agent.name}’s policy doesn’t allow resuming with edits. The owner can allow it in Config.`)):r=f("resume","authority_not_allowed",`${e.agent.name}’s policy is read only. The owner can allow workspace write in Config.`):r=f("resume","action_unavailable","this runtime can’t enforce edit access in a resumed session. Ask from this context instead.")),{ask:n,resume:r,handoff:"botmancers"!==e.source?f("handoff","action_unavailable","hand off starts from a Botmancers-launched session. Ask from this context or resume this one instead."):h("handoff",e,"engine")}}e.s(["recoveryFor",0,p,"sessionActions",0,m],50081);let g={invalid_request:400,agent_not_found:404,session_not_found:404,conversation_not_found:404,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,session_ended:409,session_not_resumable:409,source_session_busy:409,action_unavailable:409,approval_required:403,authority_not_allowed:403,agent_unavailable:409,grant_required:403,provider_failed:502,idempotency_conflict:409};class y extends Error{code;recovery;constructor(e,t){super(t),this.name="PinError",this.code=e,this.recovery=p(e)}get status(){return g[this.code]}}function w(e){return{error:{code:e.code,message:e.message,...e.recovery?{recovery:e.recovery}:{}}}}function v(e){return(0,n.createHash)("sha256").update(JSON.stringify(e)).digest("hex")}function k(e){return"string"==typeof e&&e.trim().length>0}function E(e){if(!k(e)||e.length>200)throw new y("invalid_request","An idempotency key (1-200 characters) is required.");return e}function b(e){if(!k(e))throw new y("invalid_request","content is required.");if(e.length>s.EXCHANGE_LIMITS.instructionChars)throw new y("invalid_request",`content exceeds ${s.EXCHANGE_LIMITS.instructionChars} characters.`);return e}function I(e){if(e instanceof y)throw e;if(e instanceof o.ProviderSessionError)throw function(e){switch(e.code){case"agent_not_found":return new y("agent_not_found","No such Agent.");case"session_not_found":return new y("session_not_found","No session with that reference.");case"session_missing":return new y("session_missing","The runtime no longer has this session. The pin stays on it; detach it or switch to another session.");case"not_resumable":return new y("session_not_resumable","The runtime cannot resume this session now. The pin stays on it; detach it or switch to another session.");case"out_of_scope":return new y("session_not_resumable","The session is outside the Agent’s session scope.");case"busy":return new y("source_session_busy","A turn is already running in this session; wait for it, then send again.");case"authority_not_allowed":return new y("authority_not_allowed",`The Agent’s policy or runtime refused this authority: ${e.message}`);case"new_sessions_not_allowed":return new y("no_eligible_session","The Agent’s policy does not allow new sessions.");case"unsupported":return new y("action_unavailable","The Agent’s runtime does not support this action.");case"scope_missing":return new y("agent_unavailable","The Agent has no session scope; the owner must choose one.");case"provider_unavailable":return new y("agent_unavailable","The Agent’s runtime connection is not available.");case"idempotency_conflict":return new y("idempotency_conflict","That idempotency key was used for a different turn.");case"invalid_input":return new y("invalid_request",e.message);default:return new y("provider_failed","The runtime failed this turn. The pin stays on the same session; retry later.")}}(e);if(e instanceof d.ExchangeError)throw function(e){switch(e.code){case"session_not_found":return new y("session_not_found","No session with that reference.");case"agent_not_found":return new y("agent_not_found","No such Agent.");case"conversation_not_found":return new y("conversation_not_found","No conversation with that id is visible.");case"session_ended":return new y("session_ended","This session has ended. The pin stays on it; detach it or switch to another session.");case"session_not_resumable":return new y("session_not_resumable","Botmancers cannot resume this session under the Agent’s current runtime.");case"source_session_busy":return new y("source_session_busy","This session already has a turn in progress; wait for it, then send again.");case"agent_unavailable":return new y("agent_unavailable",e.message);case"idempotency_conflict":return new y("idempotency_conflict","That idempotency key was used for a different turn.");default:return new y("invalid_request",e.message)}}(e);throw e}function S(e,t,i,s){r.default.prepare(`
214
+ INSERT INTO session_pin_events (id, pin_id, sequence, type, data, created_at)
215
+ SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, ?, ?, ? FROM session_pin_events WHERE pin_id = ?
216
+ `).run((0,n.randomUUID)(),e,t,JSON.stringify(i),s,e)}function T(e){return r.default.prepare("SELECT * FROM session_pins WHERE id = ?").get(e)}function A(e,t){return r.default.prepare("SELECT * FROM session_pins WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function R(e,t){return r.default.prepare("SELECT * FROM session_pin_turns WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function q(e,t){let n="string"==typeof t&&t.length<=200?T(t):void 0;if(!n||n.requester_kind!==e.kind||n.requester_id!==e.id)throw new y("pin_not_found","No pin with that reference is visible to this requester.");return n}function x(e){if("string"!=typeof e||0===e.length||e.length>200)return null;let t=r.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);if(t)return t.agent_id;let n=r.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ?").get(e);return n?.agent_id??null}function N(e){return e?"~"===e?t.default.homedir():e.startsWith("~/")?`${t.default.homedir()}/${e.slice(2)}`:e.startsWith("/")?e:null:null}function C(e){let t=r.bots.getById(e);if(!t)throw new y("agent_not_found","No such Agent.");return{bot:t,provider:(0,o.agentProviderCapabilities)(r.default,e),connectionId:t.runtime_connection_id??null,policy:(0,i.readStoredPolicy)(t)}}function O(e,t){if(e.provider?.resume){let n=(0,o.getProviderSessionRow)(r.default,e.bot.id,t.ref);if(n&&n.runtime_connection_id===e.connectionId)return"provider"}return"botmancers"===t.source?"engine":null}function D(e,t){return{route:O(e,t),provider:e.provider?{resume:e.provider.resume,authorities:[...e.provider.authorities]}:null,policy:e.policy?{mode:e.policy.mode,allow_resume_with_edits:e.policy.allow_resume_with_edits}:null}}function L(e,t){let n=C(e);return t.map(e=>{let t=D(n,e);return{...e,route:t.route,home:n.bot.home_session_id===e.ref,actions:m(e,t)}})}async function $(e,t){let n=(0,a.getAgentSession)(r.default,e.bot.id,t);if(!n||"provider"!==O(e,n))return n;try{await (0,o.refreshProviderSession)(r.default,e.bot.id,t)}catch(e){I(e)}return(0,a.getAgentSession)(r.default,e.bot.id,t)}function M(e,t,i){let s=(0,n.randomUUID)();r.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s,"agent",e.kind,e.id,i);let a=r.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return a.run(s,e.kind,e.id,i),a.run(s,"bot",t,i),s}function W(e,t){if(!r.default.prepare(`
217
+ SELECT 1 FROM conversations c JOIN conversation_participants p ON p.conversation_id = c.id
218
+ WHERE c.id = ? AND p.participant_kind = ? AND p.participant_id = ?
219
+ `).get(t,e.kind,e.id))throw new y("conversation_not_found","No conversation with that id is visible to this requester.")}function F(e,t,i,s){let a=(0,n.randomUUID)();return r.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(a,e,t.type,t.id,t.kind,null,i,s),a}function U(e){if(e.provider_turn_ref){let t=T(e.pin_id),n=(0,o.getProviderTurn)(r.default,t.agent_id,e.provider_turn_ref);return n?{state:n.state,answer:"completed"===n.state?n.output:null,failure:"failed"===n.state||"cancelled"===n.state?{code:n.failure_code??n.state}:null,finished_at:n.finished_at}:{state:"failed",answer:null,failure:{code:"turn_missing"},finished_at:null}}let t=u.exchanges.get(e.exchange_id);if(!t)return{state:"failed",answer:null,failure:{code:"turn_missing"},finished_at:null};let n="completed"===t.state?"completed":"failed"===t.state?"failed":"cancelled"===t.state?"cancelled":"running",i=t.answer_message_id?r.default.prepare("SELECT content FROM messages WHERE id = ?").get(t.answer_message_id)?.content??null:null;return{state:n,answer:"completed"===n?i:null,failure:"failed"===n?{code:t.failure_code??"failed"}:"cancelled"===n?{code:"cancelled"}:null,finished_at:t.terminal_at}}function H(e,t){let n=U(t);return{turn_ref:t.id,seq:t.seq,state:n.state,authority:e.authority,content:t.content,answer:n.answer,failure:n.failure,exchange_id:t.exchange_id,created_at:t.created_at,finished_at:n.finished_at}}function P(e){let t=(0,a.getAgentSession)(r.default,e.agent_id,e.session_ref),n=r.default.prepare("SELECT COUNT(*) AS n FROM session_pin_turns WHERE pin_id = ?").get(e.id).n;return{pin_ref:e.id,agent:{id:e.agent_id,name:r.bots.getById(e.agent_id)?.name??null},session:{ref:e.session_ref,title:t?.title??null},action:e.action,authority:e.authority,resolution:e.resolution,state:e.state,conversation_id:e.conversation_id,approved:null!==e.approved_at,replaced_by:e.replaced_by,turn_count:n,created_at:e.created_at,updated_at:e.updated_at,detached_at:e.detached_at}}function j(e){let t=(0,n.randomUUID)();return r.default.prepare(`
220
+ INSERT INTO session_pins (
221
+ id, requester_kind, requester_id, idempotency_key, request_hash, agent_id, session_ref, action, authority, resolution, route,
222
+ conversation_id, approved_at, state, created_at, updated_at
223
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'attached', ?, ?)
224
+ `).run(t,e.requester.kind,e.requester.id,e.key,e.hash,e.agentId,e.sessionRef,e.action,"ask"===e.action?"read_only":"workspace_write",e.resolution,e.route,e.conversationId,e.approved?e.now:null,e.now,e.now),S(t,"created",{agent_id:e.agentId,session_ref:e.sessionRef,action:e.action,resolution:e.resolution,route:e.route,authority:"ask"===e.action?"read_only":"workspace_write",approved:e.approved},e.now),T(t)}function z(e,t,n,i){r.default.prepare("UPDATE session_pins SET state = 'detached', detach_reason = ?, replaced_by = ?, detached_at = ?, updated_at = ? WHERE id = ? AND state = 'attached'").run(t,n,i,i,e.id),S(e.id,t,n?{replaced_by:n}:{},i)}async function B(e){let t=`pin:${E(e.idempotencyKey)}`;if("ask"!==e.action&&"resume"!==e.action)throw new y("invalid_request",'action must be "ask" or "resume".');let n=v(["pin",e.sessionRef,e.agentId??null,e.action,!0===e.approveWrite,e.conversationId??null,e.replacePinRef??null]),i=A(e.requester,t);if(i){if(i.request_hash!==n)throw new y("idempotency_conflict","That idempotency key was used for a different pin.");return{pin:i,created:!1,replaced:null}}let s=x(e.sessionRef);if(!s||e.agentId&&e.agentId!==s)throw new y("session_not_found","No session with that reference.");await (0,o.warmAgentProvider)(r.default,s,{onlyWithSessions:!0});let a=C(s),d=await $(a,e.sessionRef);if(!d)throw new y("session_not_found","No session with that reference.");let u=function(e,t,n){let r=D(e,t),i=m(t,r)[n];if(!i.available&&"source_session_busy"!==i.code)throw new y(i.code,i.reason);return r.route}(a,d,e.action);if("resume"===e.action&&!0!==e.approveWrite)throw new y("approval_required","Resume work here runs with workspace-write authority. Ask the person you act for to approve edits, then pin again with approve_write: true.");let l=e.replacePinRef?q(e.requester,e.replacePinRef):null;if(l&&"attached"!==l.state)throw new y("pin_detached","The pin to replace is already detached.");if(e.conversationId)W(e.requester,e.conversationId);else if("service"!==e.requester.kind)throw new y("invalid_request","conversation_id is required: the thread that holds this conversation.");return r.default.transaction(()=>{let r=A(e.requester,t);if(r)return{pin:r,created:!1,replaced:null};let i=e.now??Date.now(),a=j({requester:e.requester,key:t,hash:n,agentId:s,sessionRef:d.ref,action:e.action,resolution:"exact",route:u,conversationId:e.conversationId??M(e.requester,s,i),approved:"resume"===e.action,now:i});return l&&z(l,"switched",a.id,i),e.onCommit?.(a),{pin:a,created:!0,replaced:l?T(l.id):null}}).immediate()}function K(e,t,n){let i=t;try{I(t)}catch(e){i=e}if(i instanceof y){let t=i.code;r.default.transaction(()=>S(e.id,"turn_refused",{code:t,session_ref:e.session_ref},n)).immediate()}throw i}function G(e,t){return`pin-${(0,n.createHash)("sha256").update(`${e}
225
+ ${t}`).digest("hex").slice(0,40)}`}function X(e,t,i,s,a,o,d){var u;let l=(0,n.randomUUID)(),c=o.exchangeId?null:F(e.conversation_id,{type:"user",id:t.id,kind:t.kind},a,d);return r.default.prepare(`
226
+ INSERT INTO session_pin_turns (
227
+ id, pin_id, seq, requester_kind, requester_id, idempotency_key, request_hash, content, exchange_id, provider_turn_ref,
228
+ question_message_id, answer_message_id, created_at
229
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?)
230
+ `).run(l,e.id,(u=e.id,(r.default.prepare("SELECT MAX(seq) AS n FROM session_pin_turns WHERE pin_id = ?").get(u).n??0)+1),t.kind,t.id,i,s,a,o.exchangeId??null,o.providerTurnRef??null,c,d),r.default.prepare("UPDATE session_pins SET updated_at = ? WHERE id = ?").run(d,e.id),S(e.id,"turn_sent",{turn_ref:l,session_ref:e.session_ref,authority:e.authority,route:e.route},d),r.default.prepare("SELECT * FROM session_pin_turns WHERE id = ?").get(l)}function J(e){r.default.transaction(()=>{let t=r.default.prepare("SELECT * FROM session_pin_turns WHERE id = ?").get(e);if(!t||!t.provider_turn_ref||t.answer_message_id)return;let n=T(t.pin_id),i=(0,o.getProviderTurn)(r.default,n.agent_id,t.provider_turn_ref);if(i&&"running"!==i.state&&"completed"===i.state&&null!==i.output){let e=Date.now(),s=F(n.conversation_id,{type:"bot",id:n.agent_id,kind:"bot"},i.output,e);r.default.prepare("UPDATE session_pin_turns SET answer_message_id = ? WHERE id = ? AND answer_message_id IS NULL").run(s,t.id),S(n.id,"turn_answered",{turn_ref:t.id},e)}}).immediate()}async function V(e,t,n){if(t.provider_turn_ref)try{let i=await (0,o.observeProviderTurn)(r.default,e.agent_id,t.provider_turn_ref,null===n?{}:{deadlineAt:Date.now()+n});"running"!==i.state&&J(t.id)}catch(e){console.error("Pin turn observe failed:",e instanceof Error?e.message:"unknown error")}}async function Y(e,t,i,s,a,d,l){let c;if("provider"===e.route){let n;try{n=await (0,o.sendProviderTurn)(r.default,e.agent_id,e.session_ref,{prompt:a,authority:e.authority,idempotencyKey:G(e.id,i),requester:t})}catch(t){K(e,t,d)}let u=r.default.transaction(()=>{let r=R(t,i);if(r)return r;let o=X(e,t,i,s,a,{providerTurnRef:n.turn.turn_ref},d);return l?.(e,o),o}).immediate();return{pin:T(e.id),turn:H(e,u),replayed:!1,settled:V(e,u,null)}}try{c=r.default.transaction(()=>{let o=R(t,i);if(o)return o;let{exchange:c}=u.exchanges.create({requester:t,serviceGrant:"service"===t.kind,idempotencyKey:G(e.id,i),mode:"ask",originConversationId:e.conversation_id,sourceAgentId:e.agent_id,sessionRef:e.session_ref,instruction:a,now:d});r.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,n.randomUUID)(),e.conversation_id,"user",t.id,t.kind,c.source_request_id,a,d);let _=X(e,t,i,s,a,{exchangeId:c.id},d);return l?.(e,_),_}).immediate()}catch(t){K(e,t,d)}return{pin:T(e.id),turn:H(e,c),replayed:!1,settled:(0,u.dispatchExchange)(c.exchange_id)}}async function Z(e){let t=`turn:${E(e.idempotencyKey)}`,n=b(e.content),r=q(e.requester,e.pinRef),i=v(["turn",r.id,n]),s=R(e.requester,t);if(s){if(s.request_hash!==i)throw new y("idempotency_conflict","That idempotency key was used for a different turn.");return{pin:r,turn:H(r,s),replayed:!0,settled:Promise.resolve()}}if("attached"!==r.state)throw new y("pin_detached",`This pin was ${"switched"===r.detach_reason?"switched to another pin":"detached"}; it no longer sends. Pin a session again.`);return Y(r,e.requester,t,i,n,e.now??Date.now(),e.onCommit)}async function Q(e,t){let n=e.bot.id,s=!1,o=async t=>{let n=await $(e,t);if(!n)return null;let r=D(e,n),i=m(n,r).ask;return i.available?{summary:n,route:r.route}:"source_session_busy"===i.code?"busy":null},d=e.bot.home_session_id;if(d&&(0,a.getAgentSession)(r.default,n,d)){let e=await o(d);if("busy"===e)throw new y("source_session_busy","The Agent’s home session has a turn in progress; send again when it finishes.");if(e)return{kind:"session",...e,resolution:"home"}}for(let t of(0,a.listAgentSessions)(r.default,n,"all").filter(e=>e.ref!==d).filter(t=>{let n=D(e,t),r=m(t,n).ask;return r.available||"source_session_busy"===r.code||"provider"===n.route&&null===t.state.resumable}).slice(0,10)){let e=await o(t.ref);if("busy"===e)s=!0;else if(e)return{kind:"session",...e,resolution:"newest"}}if(s)throw new y("source_session_busy","Every eligible session of this Agent has a turn in progress; send again when one finishes.");if(!e.policy?.allow_new_sessions)throw new y("no_eligible_session","This Agent has no session that can take a message, and its policy does not allow new sessions. Pin one of its sessions, or ask the owner to allow new sessions.");if(!e.provider?.start)throw new y("no_eligible_session","This Agent has no session that can take a message, and its runtime cannot start a new one from here.");let u=(0,i.readStoredScope)(e.bot);if(!u)throw new y("agent_unavailable","The Agent has no session scope; the owner must choose one.");if("sessions"===u.kind)throw new y("no_eligible_session","This Agent is limited to selected sessions and none can take a message now; it cannot start a new one.");let l=N(e.bot.default_workspace)??("workspaces"===u.kind&&1===u.workspaces.length?N(u.workspaces[0]):null);if(!l)throw new y("workspace_required","This Agent has no session that can take a message, and no default workspace for a new one. Ask the owner to set a default workspace, or pin one of its sessions.");if(!t)throw new y("grant_required","Starting a new session for this Agent needs the sessions:start grant, which only the Botmancers owner can give. Pin one of its sessions instead.");return{kind:"start",workspace:l}}async function ee(e){let t,n=E(e.idempotencyKey),i=`agent:${n}`,s=`agent:${n}`,a=b(e.content),d=v(["agent",e.agentId,a,e.conversationId??null]),u=A(e.requester,i);if(u){if(u.request_hash!==d)throw new y("idempotency_conflict","That idempotency key was used for a different message.");e.onResolved?.({agentId:u.agent_id,sessionRef:u.session_ref,resolution:u.resolution});let t=R(e.requester,s);if(t)return{pin:u,turn:H(u,t),replayed:!0,resolution:u.resolution,settled:Promise.resolve()};if("attached"!==u.state)throw new y("pin_detached","This pin was detached before its first turn ran. Message the Agent again with a new key.");return{...await Y(u,e.requester,s,v(["turn",u.id,a]),a,e.now??Date.now()),resolution:u.resolution}}if(e.conversationId)W(e.requester,e.conversationId);else if("service"!==e.requester.kind)throw new y("invalid_request","conversation_id is required: the thread that holds this conversation.");r.bots.getById(e.agentId)&&await (0,o.warmAgentProvider)(r.default,e.agentId);let l=C(e.agentId),c=await Q(l,e.mayStart),_=e.now??Date.now();if("session"===c.kind){e.onResolved?.({agentId:e.agentId,sessionRef:c.summary.ref,resolution:c.resolution});let t=r.default.transaction(()=>{let t=A(e.requester,i);if(t)return t;let n=j({requester:e.requester,key:i,hash:d,agentId:e.agentId,sessionRef:c.summary.ref,action:"ask",resolution:c.resolution,route:c.route,conversationId:e.conversationId??M(e.requester,e.agentId,_),approved:!1,now:_});return e.onCommit?.(n),n}).immediate();return{...await Y(t,e.requester,s,v(["turn",t.id,a]),a,_),resolution:c.resolution}}e.onResolved?.({agentId:e.agentId,sessionRef:null,resolution:"started"});try{t=await (0,o.startProviderSession)(r.default,e.agentId,{workspace:c.workspace,prompt:a,authority:"read_only",idempotencyKey:G(e.agentId,s),requester:e.requester})}catch(e){I(e)}e.onResolved?.({agentId:e.agentId,sessionRef:t.turn.session_ref,resolution:"started"});let{pin:p,turn:f}=r.default.transaction(()=>{let n=A(e.requester,i);if(n)return{pin:n,turn:R(e.requester,s)};let r=j({requester:e.requester,key:i,hash:d,agentId:e.agentId,sessionRef:t.turn.session_ref,action:"ask",resolution:"started",route:"provider",conversationId:e.conversationId??M(e.requester,e.agentId,_),approved:!1,now:_}),o=X(r,e.requester,s,v(["turn",r.id,a]),a,{providerTurnRef:t.turn.turn_ref},_);return e.onCommit?.(r),{pin:r,turn:o}}).immediate();return{pin:p,turn:H(p,f),replayed:!1,resolution:"started",settled:V(p,f,null)}}async function et(e,t){let n=q(e,t),i=r.default.prepare("SELECT * FROM session_pin_turns WHERE pin_id = ? ORDER BY seq DESC LIMIT ?").all(n.id,20).reverse();for(let e of i)e.provider_turn_ref&&!e.answer_message_id&&("running"===U(e).state?await V(n,e,25):J(e.id));return{pin:n,turns:i.map(e=>H(n,r.default.prepare("SELECT * FROM session_pin_turns WHERE id = ?").get(e.id)))}}function en(e,t,n={}){return r.default.transaction(()=>{let r=q(e,t);if("detached"===r.state)return n.onCommit?.(r),{pin:r,replayed:!0};z(r,"detached",null,n.now??Date.now());let i=T(r.id);return n.onCommit?.(i),{pin:i,replayed:!1}}).immediate()}},99446,49066,91466,27776,96474,73688,e=>{"use strict";let t=["read_only","workspace_write"];function n(e){let t;if(!e||"object"!=typeof e)return null;let n=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null;return{input_tokens:n(e.input_tokens),output_tokens:n(e.output_tokens),..."cached_input_tokens"in e?{cached_input_tokens:n(e.cached_input_tokens)}:{},cost_usd:"number"==typeof(t=e.cost_usd)&&Number.isFinite(t)&&t>=0?t:null}}function r(e,t){return{ok:!1,error:{code:e,message:t.slice(0,500)}}}function i(e){return{ok:!0,value:e}}let s=new Map,a=new Map,o=new Map;function d(e,t){o.set(e,t)}e.s(["normalizeCapabilities",0,function(e){let n=Number(e?.max_page_size);return{list:!0===e?.list,search:!0===e?.search,read:!0===e?.read,resume:!0===e?.resume,start:!0===e?.start,cancel:!0===e?.cancel,usage:!0===e?.usage,authorities:t.filter(t=>Array.isArray(e?.authorities)&&e.authorities.includes(t)),max_page_size:Number.isInteger(n)&&n>0?Math.min(n,100):25}},"normalizeUsage",0,n,"providerError",0,r,"providerOk",0,i,"registerBuiltinSessionProvider",0,d,"registerSessionProvider",0,function(e,t){let n="connectionId"in e?s:a,r="connectionId"in e?e.connectionId:e.provider;t?n.set(r,t):n.delete(r)},"sessionProviderFor",0,function(e){if(!e)return null;let t=s.get(e.id)??a.get(e.provider)??o.get(e.provider);return t?t(e):null}],99446);var u=e.i(33405),l=e.i(54799),c=e.i(22734),_=e.i(14747),p=e.i(52036);let f="Botmancers-Session-Context",h="BOTMANCERS_SESSION_CONTEXT",m="BOTMANCERS_SESSION_CONTEXT_TOKEN",g="botmancers",y="botmancers_share_current_session",w=`mcp__${g}__${y}`;function v(e){let t={};for(let[n,r]of Object.entries(e))void 0!==r&&n!==h&&n!==m&&(t[n]=r);return t}function k(e){return{mcpServers:{[g]:{type:"http",url:e,headers:{[f]:`\${${h}}`}}}}}let E={enabled_tools:[y],tools:{[y]:{approval_mode:"approve"}}};function b(e){return{mcp_servers:{[g]:{url:e.url,http_headers:{[f]:e.token},...E}}}}function I(e){let t=`mcp_servers.${g}`;return["-c",`${t}.url=${JSON.stringify(e.url)}`,"-c",`${t}.env_http_headers={ ${JSON.stringify(f)} = ${JSON.stringify(m)} }`,"-c",`${t}.enabled_tools=[${JSON.stringify(y)}]`,"-c",`${t}.tools.${y}.approval_mode="approve"`]}e.s(["SESSION_CONTEXT_ENV",0,h,"SESSION_CONTEXT_EXEC_ENV",0,m,"SESSION_CONTEXT_HEADER",0,f,"SHARE_CURRENT_CLAUDE_TOOL",0,w,"SHARE_CURRENT_TOOL",0,y,"claudeMcpConfig",0,k,"codexExecMcpArgs",0,I,"codexThreadMcpConfig",0,b,"withoutSessionContextEnv",0,v],49066);var S=e.i(46786);let T=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function A(e){return"string"==typeof e&&T.test(e)}function R(e){return e.replace(/[^a-zA-Z0-9]/g,"-")}function q(e){return _.default.join(e,"projects")}function x(e){try{return c.default.readdirSync(e)}catch{return[]}}function N(e){let t=new Set([R(e.replace(/\/+$/,""))]);try{t.add(R(c.default.realpathSync(e)))}catch{}return[...t]}function C(e,t){if(!A(t))return null;for(let n of x(q(e))){let r=_.default.join(q(e),n,`${t}.jsonl`);try{if(c.default.statSync(r).isFile())return r}catch{}}return null}function O(e){let t;try{t=c.default.readFileSync(e,"utf8")}catch{return null}let n=[],r=0;for(let e of t.split("\n"))if(e.trim())try{let t=JSON.parse(e);t&&"object"==typeof t&&!Array.isArray(t)?n.push(t):r++}catch{r++}return{records:n,malformed:r}}function D(e){let t="string"==typeof e.timestamp?Date.parse(e.timestamp):NaN;return Number.isFinite(t)?t:null}function L(e){let t=e.message;if(!t||"object"!=typeof t)return null;let n=t.content;return"string"==typeof n||Array.isArray(n)?n:null}function $(e){return("user"===e.type||"assistant"===e.type)&&!0!==e.isSidechain&&!0!==e.isMeta}function M(e){let t=O(e.file);if(!t)return null;let{records:n,malformed:r}=t,i=null,s=null,a=null,o=null,d=null,u=null,l=null,c=0;for(let t of n){if(void 0!==t.sessionId&&t.sessionId!==e.id)continue;null===i&&"string"==typeof t.cwd&&t.cwd.startsWith("/")&&(i=t.cwd),"string"==typeof t.version&&(l=t.version);let n=D(t);null!==n&&(d=null===d?n:Math.min(d,n),u=null===u?n:Math.max(u,n)),"custom-title"===t.type&&"string"==typeof t.customTitle&&(s=t.customTitle),"ai-title"===t.type&&"string"==typeof t.aiTitle&&(a=t.aiTitle),"summary"===t.type&&"string"==typeof t.summary&&(o=t.summary),$(t)&&c++}return null===i?null:{id:e.id,workspace:i,title:s??a??o??function(e){for(let t of e){if("user"!==t.type||!$(t))continue;let e=L(t),n="string"==typeof e?e:Array.isArray(e)?e.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join(""):"";if(n.trim()&&!n.trim().startsWith("<"))return n.trim()}return null}(n),created_at:d,updated_at:u??Math.floor(e.mtime_ms),messages:c,claude_code_version:l,malformed:r}}function W(e){try{let t=JSON.parse(c.default.readFileSync(_.default.join(e,"settings.json"),"utf8")),n=Number(t.cleanupPeriodDays);return Number.isFinite(n)&&n>0?n:30}catch{return 30}}function F(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function U(e){let{events:t,malformed:n}=function(e){let t=[],n=0;for(let r of(e.endsWith("\n")?e:e.slice(0,e.lastIndexOf("\n")+1)).split("\n"))if(r.trim())try{let e=JSON.parse(r);F(e)&&"string"==typeof e.type?t.push(e):n++}catch{n++}return{events:t,malformed:n}}(e),r={session_id:null,claude_code_version:null,result:null,rate_limit_rejected:!1,malformed:n};for(let e of t)"system"===e.type&&"init"===e.subtype&&null===r.session_id?("string"==typeof e.session_id&&(r.session_id=e.session_id),"string"==typeof e.claude_code_version&&(r.claude_code_version=e.claude_code_version)):"result"===e.type&&null===r.result?r.result=e:"rate_limit_event"===e.type&&F(e.rate_limit_info)&&"rejected"===e.rate_limit_info.status&&(r.rate_limit_rejected=!0);return r}let H=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null,P=/no conversation found/i,j=/not logged in|please run \/login|\/login|invalid api key|authentication|unauthori[sz]ed|oauth token|credentials? (?:expired|missing|invalid)/i,z=/usage limit|rate limit|limit reached|quota|credit balance/i;function B(e){return!0!==e.is_error&&"success"===e.subtype}function K(e,t){let n=function(e){let t=[];if(Array.isArray(e.errors))for(let n of e.errors)"string"==typeof n&&t.push(n);return!0===e.is_error&&"string"==typeof e.result&&t.push(e.result),t.join("\n").slice(0,2e3)}(e),r="number"==typeof e.api_error_status?e.api_error_status:null,i=Array.isArray(e.permission_denials)?e.permission_denials.length:0;return{code:P.test(n)?"session_missing":401===r||403===r||j.test(n)?"auth_required":429===r||t.rate_limit_rejected||z.test(n)?"usage_limit":i>0?"permission_denied":"runtime_error",message:n||`Claude Code reported ${String(e.subtype??"an error")}.`}}let G="2.1.0",X={read_only:{permission_mode:"dontAsk",tools:["Read","Glob","Grep"]},workspace_write:{permission_mode:"acceptEdits",tools:["Read","Glob","Grep","Edit","Write","NotebookEdit"]}},J={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:25},V=new Map;function Y(e){try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function Z(e,t=null){let n={};for(let[t,r]of Object.entries(v(e)))/^AGENT_DECK/.test(t)||void 0===r||(n[t]=r);return null!==t&&(n[h]=t),n}let Q={session_missing:"not_found",auth_required:"auth_required",permission_denied:"permission_denied",usage_limit:"usage_limit",incompatible_version:"incompatible_version",session_mismatch:"not_resumable",process_exited:"unavailable",cancelled:"cancelled",runtime_error:"unavailable"};e.s(["createClaudeSessionProvider",0,function(e={}){let t=e.env??process.env,n=e.bin??((t.BOTMANCERS_CLAUDE_BIN||"").trim()||"claude"),s=e.configDir??function(e=process.env){let t=(e.CLAUDE_CONFIG_DIR||"").trim();return t?_.default.resolve(t):_.default.join(S.default.homedir(),".claude")}(t),a=e.stateDir??function(e=process.env){let t=(e.BOTMANCERS_CLAUDE_STATE_DIR||"").trim();return t?_.default.resolve(t):_.default.join(_.default.dirname(_.default.resolve((0,p.dbPath)(e))),"claude-provider")}(t),o=e.spawn??u.spawn,d=e.isPidAlive??Y,f=e.startupTimeoutMs??6e4,h=e.exitGraceMs??1e4,m=e.pollMs??100,g=e.now??Date.now,y=_.default.join(a,"turns"),v=_.default.join(a,"keys"),E=(e,t)=>_.default.join(y,`${e}.${t}`),b=e=>{if(!/^ct-[0-9a-f-]{36}$/.test(e))return null;try{return JSON.parse(c.default.readFileSync(E(e,"json"),"utf8"))}catch{return null}},I=e=>{let t=E(e.id,`json.${process.pid}.tmp`);c.default.writeFileSync(t,JSON.stringify(e)),c.default.renameSync(t,E(e.id,"json"))},T=e=>{try{return c.default.readFileSync(e,"utf8")}catch{return""}};function R(e,t,n,r){return{provider_session_id:e.id,title:e.title,workspace:e.workspace,created_at:e.created_at,updated_at:e.updated_at,lifecycle:null!==e.updated_at&&n-e.updated_at>r?"archived":"open",resumable:e.messages>0,busy:t.has(e.id)}}function P(){return new Set([...function(e,t){let n=new Set,r=_.default.join(e,"sessions");for(let e of x(r))if(/^\d+\.json$/.test(e))try{let i=JSON.parse(c.default.readFileSync(_.default.join(r,e),"utf8"));A(i.sessionId)&&"number"==typeof i.pid&&t(i.pid)&&n.add(i.sessionId)}catch{}return n}(s,d),...function(){let e=new Set;for(let t of c.default.existsSync(y)?c.default.readdirSync(y):[]){if(!t.endsWith(".json"))continue;let n=b(t.slice(0,-5));n&&"running"===n.state&&!j(n)&&e.add(n.session_id)}return e}()])}function j(e){var t;let n,r,i=U(T(E(e.id,"out.jsonl"))),s=e.finished_at??Date.now(),a={provider_session_id:e.session_id,usage:{input_tokens:H((n=(t=i.result)&&F(t.usage)?t.usage:{}).input_tokens)??H(n.inputTokens),output_tokens:H(n.output_tokens)??H(n.outputTokens),total_cost_usd:t&&"number"==typeof(r=t.total_cost_usd)&&Number.isFinite(r)&&r>=0?r:null},finished_at:s};if(null!==i.session_id&&i.session_id!==e.session_id)return{...a,status:"failed",output:null,failure:{code:"session_mismatch",message:"Claude Code ran a different session than the one requested."}};if(i.result)return B(i.result)?{...a,status:"completed",output:"string"==typeof i.result.result?i.result.result:null,failure:null}:{...a,status:"failed",output:null,failure:K(i.result,i)};if("cancelled"===e.state)return{...a,status:"cancelled",output:null,failure:{code:"cancelled",message:"Cancelled."}};if(!("exited"===e.state||"spawn_failed"===e.state||null===e.pid||!d(e.pid)))return null;let o=T(E(e.id,"err.log")),u=/unknown option|unrecognized option|invalid option/i.test(o);return{...a,status:"failed",output:null,failure:u?{code:"incompatible_version",message:"The installed Claude Code rejected the non-interactive flag set."}:{code:"process_exited",message:`Claude Code exited without a result${null===e.exit_code?"":` (exit ${e.exit_code})`}.`}}}let z=e=>_.default.join(v,e.replace(/[^a-zA-Z0-9_-]/g,"_"));async function ee(e,i,s,a){let d,u=`ct-${(0,l.randomUUID)()}`;c.default.mkdirSync(y,{recursive:!0});let _=i.session_context?.mint({kind:"claude_turn",ref:u})??null,p=_?E(u,"mcp.json"):null;_&&p&&function(e,t){c.default.rmSync(e,{force:!0});let n=c.default.openSync(e,"wx",384);try{c.default.writeFileSync(n,JSON.stringify(k(t)))}finally{c.default.closeSync(n)}c.default.chmodSync(e,384)}(p,_.url);let h={id:u,session_id:s,kind:e,authority:i.authority,workspace:a,pid:null,state:"running",exit_code:null,created_at:Date.now(),finished_at:null},g=c.default.openSync(E(u,"out.jsonl"),"a"),v=c.default.openSync(E(u,"err.log"),"a"),S=null;try{d=o(n,function(e,t,n=null){let r=X[e],i=n?[...r.tools,w]:r.tools;return["-p","--output-format","stream-json","--verbose","--input-format","text","--permission-mode",r.permission_mode,"--permission-prompts","none","--tools",r.tools.join(","),"--allowedTools",i.join(","),"--strict-mcp-config",...n?["--mcp-config",n]:[],..."resume"in t?["--resume",t.resume]:["--session-id",t.sessionId]]}(i.authority,"send"===e?{resume:s}:{sessionId:s},p),{cwd:a,env:Z(t,_?.token??null),stdio:["pipe",g,v],detached:!0})}finally{c.default.closeSync(g),c.default.closeSync(v)}d.on("error",e=>{S=e}),h.pid=d.pid??null,I(h),d.on("exit",e=>{let t=b(u);t&&"running"===t.state&&I({...t,state:"exited",exit_code:e,finished_at:Date.now()})}),d.stdin?.on("error",()=>{}),d.stdin?.end(i.prompt),d.unref();let A=Date.now()+f;for(;;){let e=b(u),t=U(T(E(u,"out.jsonl")));if(S)return I({...e,state:"spawn_failed",finished_at:Date.now()}),{turn:null,error:r("unavailable",`Claude Code could not start: ${S.message}`)};if(null!==t.session_id&&t.session_id!==s)return et(e),I({...e,state:"cancelled",finished_at:Date.now()}),{turn:null,error:r("not_resumable","Claude Code started a different session; it was stopped.")};if(null===t.session_id&&t.result&&!B(t.result)){let e=K(t.result,t);return{turn:null,error:r(Q[e.code],e.message)}}if(null!==t.session_id||t.result)return{turn:e,error:null};let n=j(e);if(n){let e=n.failure?.code;return{turn:null,error:r(e?Q[e]??"unavailable":"unavailable",n.failure?.message??"Claude Code exited.")}}if(Date.now()>=A)return{turn:e,error:null};await new Promise(e=>setTimeout(e,Math.min(m,25)))}}function et(e){if(null!==e.pid)for(let t of[-e.pid,e.pid])try{process.kill(t,"SIGTERM");return}catch{}}async function en(e,s,a,o){if(!X[s.authority])return r("unsupported_authority",`No Claude Code mode for ${String(s.authority)}.`);let d=function(e){c.default.mkdirSync(v,{recursive:!0});let t=_.default.join(v,e.replace(/[^a-zA-Z0-9_-]/g,"_"));try{return c.default.writeFileSync(t,"",{flag:"wx"}),{existing:null,claimed:!0}}catch{let e=T(t).trim();return{existing:e?b(e):null,claimed:!1}}}(s.idempotency_key);if(!d.claimed)return d.existing?i({provider_turn_id:d.existing.id,provider_session_id:d.existing.session_id}):r("busy","A turn with this idempotency key is starting.");let l=()=>c.default.rmSync(z(s.idempotency_key),{force:!0}),p=function(){let e,r=V.get(n);if(r)return r;try{let r=(0,u.execFileSync)(n,["--version"],{env:Z(t),encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","pipe"]}),i=/(\d+\.\d+\.\d+)/.exec(r)?.[1]??null;e=i?0>function(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let e=0;e<3;e++)if((n[e]??0)!==(r[e]??0))return(n[e]??0)-(r[e]??0);return 0}(i,G)?{ok:!1,code:"incompatible_version",message:`Claude Code ${i} is older than ${G}.`}:{ok:!0,version:i}:{ok:!1,code:"incompatible_version",message:"Claude Code did not report a version."}}catch(e){return{ok:!1,code:"unavailable",message:`Claude Code is not runnable: ${e.message}`}}return V.set(n,e),e}();if(!p.ok)return l(),r(p.code,p.message);let f=await ee(e,s,a,o);return f.turn?(c.default.writeFileSync(z(s.idempotency_key),f.turn.id),i({provider_turn_id:f.turn.id,provider_session_id:a})):(l(),f.error)}return{kind:"claude-code",capabilities:()=>({...J,authorities:[...J.authorities]}),async listSessions(e){let t=e.scope;if("workspaces"===t.kind&&0===t.workspaces.length)return i({items:[],next_cursor:null});let n="sessions"===t.kind?t.provider_session_ids.map(e=>C(s,e)).filter(e=>!!e).map(e=>({id:_.default.basename(e,".jsonl"),file:e,mtime_ms:c.default.statSync(e).mtimeMs})):function(e,t){let n=t?t.flatMap(N):null,r=[];for(let t of x(q(e))){if(n&&!n.some(e=>t===e||t.startsWith(`${e}-`)))continue;let i=_.default.join(q(e),t);for(let e of x(i)){if(!e.endsWith(".jsonl"))continue;let t=e.slice(0,-6);if(A(t))try{let n=c.default.statSync(_.default.join(i,e));n.isFile()&&r.push({id:t,file:_.default.join(i,e),mtime_ms:n.mtimeMs})}catch{}}}return r.sort((e,t)=>t.mtime_ms-e.mtime_ms||e.id.localeCompare(t.id))}(s,"workspaces"===t.kind?t.workspaces:null),a=Math.max(0,Number(e.cursor??0)||0),o=(e.query??"").trim().toLowerCase(),d=P(),u=g(),l=864e5*W(s),p=[],f=20*e.limit,h=a;for(;h<n.length&&p.length<e.limit&&h-a<f;h++){if(e.signal?.aborted)return r("cancelled","list aborted");let i=M(n[h]);i&&function(e,t){return"all_provider_sessions"===e.kind||("sessions"===e.kind?e.provider_session_ids.includes(t.id):null!==t.workspace&&e.workspaces.some(e=>{var n;let r;return n=t.workspace,n===(r=e.replace(/\/+$/,"")||"/")||n.startsWith("/"===r?"/":`${r}/`)}))}(t,i)&&(!o||`${i.title??""}
231
+ ${i.workspace??""}`.toLowerCase().includes(o))&&p.push(R(i,d,u,l))}return i({items:p,next_cursor:h<n.length?String(h):null})},async getSession(e){let t=C(s,e.provider_session_id);if(!t)return i(null);let n=M({id:e.provider_session_id,file:t,mtime_ms:c.default.statSync(t).mtimeMs});return i(n?R(n,P(),g(),864e5*W(s)):null)},async readTranscript(e){let t=C(s,e.provider_session_id),n=t?function(e,t){let n=O(e);if(!n)return null;let r=[],i=(e,t,n)=>{t.trim()&&r.push({seq:r.length+1,role:e,text:t.length>4e3?`${t.slice(0,3999)}…`:t,at:n})};for(let e of n.records){if(!$(e)||void 0!==e.sessionId&&e.sessionId!==t)continue;let n=D(e),r=L(e),s="user"===e.type?"user":"assistant";if("string"==typeof r){i(s,r,n);continue}for(let e of r??[])if(e&&"object"==typeof e){if("text"===e.type)i(s,String(e.text??""),n);else if("tool_use"===e.type)i("tool",`tool call: ${String(e.name??"unknown")}`,n);else if("tool_result"===e.type){let t="string"==typeof e.content?e.content:Array.isArray(e.content)?e.content.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join("\n"):"";i("tool",`tool result: ${t||"(no text)"}`,n)}}}return r}(t,e.provider_session_id):null;if(!n)return r("not_found","Claude Code has no such session.");let a=Math.max(0,Number(e.cursor??0)||0);return i({items:n.slice(a,a+e.limit),next_cursor:a+e.limit<n.length?String(a+e.limit):null})},async startSession(e){let t=null;try{t=c.default.statSync(e.workspace)}catch{t=null}return t?.isDirectory()?en("start",e,(0,l.randomUUID)(),e.workspace):r("invalid_input","The workspace is not a directory here.")},async sendTurn(e){if(!A(e.provider_session_id))return r("not_found","Not a Claude Code session id.");let t=C(s,e.provider_session_id);if(!t)return r("not_found","Claude Code has no such session.");let n=M({id:e.provider_session_id,file:t,mtime_ms:c.default.statSync(t).mtimeMs});if(!n||0===n.messages||!n.workspace)return r("not_resumable","The session has no conversation to resume.");if(P().has(n.id)){let t,n=(t=T(z(e.idempotency_key)).trim())?b(t):null;return n?i({provider_turn_id:n.id,provider_session_id:n.session_id}):r("busy","The session is open in a running Claude Code process.")}return en("send",e,n.id,n.workspace)},async observeTurn(e){let t=null;for(;;){let n=b(e.provider_turn_id);if(!n)return r("not_found","No such turn.");let s=j(n);if(s&&"running"===n.state&&null!==n.pid&&d(n.pid)&&(t??=Date.now(),Date.now()-t<h&&!e.signal?.aborted&&!("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at))){await new Promise(e=>setTimeout(e,m));continue}if(s)return"running"===n.state&&I({...n,state:"exited",finished_at:s.finished_at}),c.default.rmSync(E(n.id,"mcp.json"),{force:!0}),i(s);if(e.signal?.aborted)return r("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return r("timed_out","observe deadline");await new Promise(e=>setTimeout(e,m))}},async cancelTurn(e){let t=b(e.provider_turn_id);return t?j(t)?i("already_terminal"):(et(t),I({...t,state:"cancelled",finished_at:Date.now()}),c.default.rmSync(E(t.id,"mcp.json"),{force:!0}),i("cancelled")):r("not_found","No such turn.")}}}],91466);let ee={name:"botmancers",version:"1"},et={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:50},en={list:!1,search:!1,read:!1,resume:!1,start:!1,cancel:!1,usage:!1,authorities:[],max_page_size:50};function er(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function ei(e){return"string"==typeof e&&e.length>0?e:null}function es(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0?e:null}function ea(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function eo(e,t="durable"){let n=er(e),r=ei(n?.sessionId);if(!n||!r||"subagent"===n.kind)return null;let i=ei(n.workspaceRoot),s=ei(n.status);return{provider_session_id:r,title:ei(n.title)??ei(n.firstUserPrompt)??ei(n.name),workspace:i&&i.startsWith("/")?i:null,created_at:ea(n.createdAt),updated_at:ea(n.lastActivityAt)??ea(n.updatedAt),lifecycle:"open",resumable:"durable"===t&&"string"==typeof n.path&&n.path.length>0,busy:"running"===s||null!==ei(n.activeTurnId)}}function ed(e,t){if(!Array.isArray(e))return null;let n=e.map(er).filter(e=>!!e&&"agentMessage"===e.kind&&e.turnId===t&&!0!==e.retracted).map(e=>ei(e.text)).filter(e=>null!==e);return n.length>0?n.join("\n"):null}function eu(e){return 0===e.length||e.some(e=>null===e)?null:e.reduce((e,t)=>e+t,0)}function el(e){let t="string"==typeof e?/^(\d+)\.(\d+)\.(\d+)/.exec(e.trim()):null;return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}let ec=/login is no longer valid|authentication failed|missing \w+ credentials|api key .*rejected|unauthenticated|unauthori[sz]ed|not (signed|logged) in|\b401\b|\b403\b|forbidden|authRequired/i,e_=/rate[\s_-]*limit|usage[\s_-]*limit|quota|\b429\b|rate_limited/i;function ep(e=Date.now()){let t=Buffer.alloc(16),n=Math.floor(e);for(let e=5;e>=0;e--)t[e]=n%256,n=Math.floor(n/256);(0,l.randomBytes)(10).copy(t,6),t[6]=112|15&t[6],t[8]=128|63&t[8];let r=t.toString("hex");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function ef(e){let t=e.lastIndexOf(":");return t<=0||t===e.length-1?null:{sessionId:e.slice(0,t),turnId:e.slice(t+1)}}class eh{options;authority;child;buffer;seq;pending;listeners;ready;loaded;turns;info;constructor(e,t){this.options=e,this.authority=t,this.child=null,this.buffer="",this.seq=0,this.pending=new Map,this.listeners=new Set,this.ready=null,this.loaded=new Set,this.turns=new Map,this.info=null}alive(){return null!==this.child}start(){return this.ready&&this.child||(this.ready=this.spawnAndInitialize()),this.ready}async spawnAndInitialize(){let e,t="read_only"===this.authority?["--disable-write","--disable-shell"]:[];try{e=(0,u.spawn)(this.options.command,[...this.options.commandArgs,"serve",...t,...this.options.serveArgs],{cwd:S.default.homedir(),stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env}})}catch{return{code:"unavailable",message:"spawn_failed"}}this.child=e;let n=null,r="";e.on("error",t=>{n="ENOENT"===t.code?"binary_missing":"spawn_failed",this.drop(e)}),e.stdin.on("error",()=>this.drop(e)),e.stderr.on("data",e=>{r=`${r}${e.toString()}`.slice(-2e3)}),e.stdout.on("data",t=>this.onData(e,t)),e.on("close",()=>this.drop(e));let i=await this.request("initialize",{clientInfo:{...ee}});if(!i.ok)return(this.close(),n)?{code:"unavailable",message:n}:ec.test(r)?{code:"unavailable",message:"auth_required (host exited)"}:i.error;let s=er(i.result.serverInfo),a=er(i.result.schema);this.info={muse_version:ei(s?.version),schema_version:"number"==typeof a?.version?a.version:null,schema_fingerprint:ei(a?.fingerprint),durability:ei(i.result.sessionDurability)??"durable"};try{e.stdin.write(`${JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})}
232
+ `)}catch{return this.close(),{code:"unavailable",message:"transport_error"}}return null}onData(e,t){let n;if(e===this.child){if(this.buffer+=t.toString(),this.buffer.length>0x1000000)return void this.close();for(;(n=this.buffer.indexOf("\n"))>=0;){let e=this.buffer.slice(0,n);this.buffer=this.buffer.slice(n+1),this.onLine(e)}}}onLine(e){let t=null;try{t=er(JSON.parse(e))}catch{return}if(!t)return;if("number"==typeof t.id&&this.pending.has(t.id)){let e,n,r,i=this.pending.get(t.id);this.pending.delete(t.id);let s=er(t.error);i(s?{ok:!1,error:(e="number"==typeof s.code?s.code:null,n=ei(er(s.data)?.kind)??"unknown",r=`${n} ${"string"==typeof s.message?s.message:""}`,ec.test(r)||401===e||403===e?{code:"unavailable",message:`auth_required (${n})`}:-32601===e||"methodNotFound"===n||"experimentalRequired"===n||"capabilityRequired"===n||-32010===e?{code:"unsupported",message:`unsupported (${n})`}:-32020===e||-32011===e||"sessionNotFound"===n||"notFound"===n?{code:"not_found",message:`not_found (${n})`}:-32021===e||"sessionInUse"===n?{code:"busy",message:`busy (${n})`}:-32602===e||-32002===e||"invalidParams"===n||"inputTooLarge"===n?{code:"invalid_input",message:`invalid_input (${n})`}:{code:"unavailable",message:`provider_error (${n})`})}:{ok:!0,result:er(t.result)??{}});return}if("string"!=typeof t.method||void 0!==t.id||"turn/completed"!==t.method&&"session/tokenUsage"!==t.method)return;let n=er(t.params),r=ei(n?.turnId),i=ei(n?.sessionId);if(!n||!r||!i)return;let s=this.turns.get(r);s||(s={sessionId:i,completed:null,usageRecords:[]},this.turns.set(r,s)),"turn/completed"===t.method?(s.completed=n,this.notify()):"session/tokenUsage"===t.method&&s.usageRecords.push(n.usage)}notify(){for(let e of[...this.listeners])e()}async waitFor(e,t,n){for(;;){if(e())return"done";if(!this.alive())return"dead";if(t?.aborted)return"cancelled";let r="number"==typeof n?n-Date.now():1e3;if(r<=0)return"timed_out";await new Promise(e=>{let n=()=>{clearTimeout(i),t?.removeEventListener("abort",n),this.listeners.delete(n),e()},i=setTimeout(n,Math.min(r,1e3));this.listeners.add(n),t?.addEventListener("abort",n,{once:!0})})}}request(e,t){let n=this.child;if(!n)return Promise.resolve({ok:!1,error:{code:"unavailable",message:"host_not_running"}});let r=++this.seq;return new Promise(i=>{let s=setTimeout(()=>{this.pending.delete(r),i({ok:!1,error:{code:"unavailable",message:`rpc_timeout (${e})`}})},this.options.rpcTimeoutMs);this.pending.set(r,e=>{clearTimeout(s),i(e)});try{n.stdin.write(`${JSON.stringify({jsonrpc:"2.0",id:r,method:e,params:t})}
233
+ `)}catch{this.pending.delete(r),clearTimeout(s),i({ok:!1,error:{code:"unavailable",message:"transport_error"}})}})}drop(e){if(e===this.child){for(let e of(this.child=null,this.ready=null,this.loaded.clear(),this.pending.values()))e({ok:!1,error:{code:"unavailable",message:"host_exited"}});this.pending.clear(),this.notify()}}close(){let e=this.child;if(e){this.drop(e);try{e.kill("SIGTERM")}catch{}}}runningTurns(){let e=0;for(let t of this.turns.values())!t.completed&&e++;return e}}let em=new Map;function eg(e,t){let n=e??{muse_version:null,schema_version:null,schema_fingerprint:null,durability:null};if(t){let e=/^auth_required/.test(t.message)?"auth_required":"unsupported"===t.code?"unsupported":"unavailable";return{...n,status:e,reason:t.message,capabilities:{...en}}}let r=el(n.muse_version);if(1!==n.schema_version)return{...n,status:"unsupported",reason:`msp_schema_${n.schema_version??"unknown"}`,capabilities:{...en}};if(!r||!function(e,t){for(let n=0;n<3;n++)if(e[n]!==t[n])return e[n]>t[n];return!0}(r,el("1.4.0")))return{...n,status:"unsupported",reason:`muse_version_${n.muse_version??"unknown"}`,capabilities:{...en}};let i="durable"===n.durability;return{...n,status:"ready",reason:null,capabilities:i?{...et,authorities:[...et.authorities]}:{...et,list:!1,search:!1,read:!1,resume:!1,authorities:[...et.authorities]}}}process.once("exit",()=>(function(){for(let e of em.values())for(let t of Object.values(e.hosts))t?.close();em.clear()})()),e.s(["createMuseSessionProvider",0,function(e,t={}){let n,s=((n=em.get(e))||(n={hosts:{},probe:null,startKeys:new Map},em.set(e,n)),n),a={command:t.command??process.env.BOTMANCERS_MUSE_BIN??"muse",commandArgs:t.commandArgs??[],serveArgs:t.serveArgs??function(){let e=process.env.BOTMANCERS_MUSE_SERVE_ARGS;if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}(),env:t.env??{},rpcTimeoutMs:t.rpcTimeoutMs??3e4},o=t.cancelSettleMs??1e4;async function d(e){let t=s.hosts[e];t||(t=new eh(a,e),s.hosts[e]=t);let n=await t.start();return(s.probe=eg(t.info,n),n)?{ok:!1,error:n}:"ready"!==s.probe.status?(t.close(),{ok:!1,error:{code:"unsupported",message:s.probe.reason??"unsupported"}}):{ok:!0,host:t}}function u(){return d(["read_only","workspace_write"].find(e=>s.hosts[e]?.alive())??"read_only")}async function l(e,t,n){return e.request(t,n)}async function c(e,t){let n=await u();return n.ok?l(n.host,"session/read",{sessionId:e,excludeItems:!t}):n}function _(){return s.probe?.durability??"durable"}async function p(e,t){for(let n of Object.values(s.hosts))if(n&&n!==e&&n.loaded.has(t)){if(n.runningTurns()>0)return{ok:!1,error:{code:"busy",message:"busy (loaded by another host)"}};n.close()}if(e.loaded.has(t)){let n=await l(e,"session/read",{sessionId:t,excludeItems:!0});return n.ok?{ok:!0,session:er(n.result.session)??{}}:n}let n=await l(e,"session/resume",{commandId:ep(),sessionId:t,excludeItems:!0});return n.ok?(e.loaded.add(t),{ok:!0,session:er(n.result.session)??{}}):n}async function f(e,t,n){let s=await l(e,"turn/start",{commandId:ep(),sessionId:t,input:[{type:"text",text:n}]});if(!s.ok)return s;let a=ei(s.result.turnId);return a?(e.turns.has(a)||e.turns.set(a,{sessionId:t,completed:null,usageRecords:[]}),i(a)):r("unavailable","provider_error (turn/start without turnId)")}async function h(e,t,n,r,i,s,a){let o,d,u,l,_=a;if(void 0===_){let t=await c(e,!0);_=t.ok?er(t.result.history)?.items:null}let p="completed"===n?"completed":"cancelled"===n?"cancelled":"failed";return{status:p,provider_session_id:e,output:ed(_,t),failure:"completed"===p?null:"cancelled"===p?{code:"cancelled",message:ei(i)??"cancelled"}:(o=er(r),d=ei(o?.kind)??"",u=(ei(o?.message)??ei(i)??d)||"turn failed",l=`${d} ${u}`,{code:ec.test(l)?"auth":e_.test(l)||o?.quota?"usage_cap":d||"failed",message:u.slice(0,500)}),usage:s?{input_tokens:s.input_tokens,output_tokens:s.output_tokens}:null,finished_at:Date.now()}}function m(e){for(let t of Object.values(s.hosts)){let n=t?.alive()?t.turns.get(e):void 0;if(t&&n)return{host:t,track:n}}return null}async function g(e,t,n,s){for(;;){let a=await c(e,!0);if(!a.ok)return a;let o=er(a.result.session),d=er(a.result.lastTurn),u=er(a.result.history)?.items;if(d&&d.turnId===t)return i(await h(e,t,d.terminal,d.error,d.reason,null,u));if(o?.activeTurnId!==t)return i({status:"failed",provider_session_id:e,output:ed(u,t),failure:{code:"host_lost",message:"The Muse host running this turn exited before it finished."},usage:null,finished_at:Date.now()});if(n?.aborted)return r("cancelled","observe aborted");if("number"==typeof s&&Date.now()>=s)return r("timed_out","observe deadline");await new Promise(e=>setTimeout(e,500))}}return{kind:"muse-msp",capabilities(){let e=s.probe?.capabilities??et;return{...e,authorities:[...e.authorities]}},async probe(){let e=await u();return s.probe??eg(null,e.ok?null:e.error)},async listSessions(e){let t=await u();if(!t.ok)return t;let n={},s="sessions"===e.scope.kind?e.scope.provider_session_ids:null;if(s){if(0===s.length)return i({items:[],next_cursor:null});n.sessionId={anyOf:s.slice(0,200)}}let a=(e.query??"").trim().split(/\s+/).filter(Boolean).slice(0,16);a.length>0&&(n.text={allOf:a,fields:["name","title"]});let o=await l(t.host,"session/list",{limit:Math.min(Math.max(1,e.limit),50),...e.cursor?{cursor:e.cursor}:{},...Object.keys(n).length>0?{filter:n}:{}});if(!o.ok)return o;let d=er(o.result.appliedFilter);return n.text&&!er(d?.text)?r("unsupported","unsupported (session/list text filter)"):i({items:(Array.isArray(o.result.sessions)?o.result.sessions:[]).map(e=>eo(e,_())).filter(e=>null!==e).filter(e=>!s||s.includes(e.provider_session_id)),next_cursor:ei(o.result.nextCursor)})},async getSession(e){let t=await c(e.provider_session_id,!1);if(!t.ok)return"not_found"===t.error.code?i(null):t;let n=eo(t.result.session,_());return i(n&&n.provider_session_id===e.provider_session_id?n:null)},async readTranscript(e){let t=await c(e.provider_session_id,!0);if(!t.ok)return t;let n=er(t.result.history);if(n?.mode!=="inline")return r("unavailable",`history_${ei(n?.mode)??"missing"}`);let s=function(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=er(n);if(!e||!0===e.retracted)continue;let r="userMessage"===e.kind?"user":"agentMessage"===e.kind?"assistant":null,i=ei(e.text)??("user"===r?ei(e.displayText):null);r&&i&&t.push({seq:t.length+1,role:r,text:i,at:ea(e.recordedAt)})}return t}(n.items),a=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0;return i({items:s.slice(a,a+e.limit),next_cursor:a+e.limit<s.length?String(a+e.limit):null})},async startSession(e){var t;let n=s.startKeys.get(e.idempotency_key);if(n)return i(n);let a=await d(e.authority);if(!a.ok)return a;let o=await l(a.host,"session/start",{commandId:ep(),workspaceRoot:e.workspace,approvalMode:"denyUnmatched"});if(!o.ok)return o;let u=ei(er(o.result.session)?.sessionId);if(!u)return r("unavailable","provider_error (session/start without sessionId)");a.host.loaded.add(u);let c=await f(a.host,u,e.prompt);if(!c.ok)return c;let _={provider_session_id:u,provider_turn_id:(t=c.value,`${u}:${t}`)};return s.startKeys.set(e.idempotency_key,_),i(_)},async sendTurn(e){var t,n;let a=s.startKeys.get(e.idempotency_key);if(a)return i(a);let o=await d(e.authority);if(!o.ok)return o;let u=await p(o.host,e.provider_session_id);if(!u.ok)return u;if("running"===u.session.status||ei(u.session.activeTurnId))return r("busy","busy (turn in flight)");let l=await f(o.host,e.provider_session_id,e.prompt);if(!l.ok)return l;let c={provider_session_id:e.provider_session_id,provider_turn_id:(t=e.provider_session_id,n=l.value,`${t}:${n}`)};return s.startKeys.set(e.idempotency_key,c),i(c)},async observeTurn(e){let t=ef(e.provider_turn_id);if(!t)return r("not_found","not_found (turn handle)");let n=m(t.turnId);if(n){let s=await n.host.waitFor(()=>null!==n.track.completed,e.signal,e.deadline_at);if("cancelled"===s)return r("cancelled","observe aborted");if("timed_out"===s)return r("timed_out","observe deadline");let a=n.track.completed;if(a)return i(await h(t.sessionId,t.turnId,a.terminal,a.error,a.reason,function(e,t=[]){let n=er(e);if(n)return{input_tokens:es(n.inputTokens),output_tokens:es(n.outputTokens),cost_usd:null};let r=t.map(er).filter(e=>null!==e);return 0===r.length?null:{input_tokens:eu(r.map(e=>es(e.inputTokens))),output_tokens:eu(r.map(e=>es(e.outputTokens))),cost_usd:null}}(a.usage,n.track.usageRecords)))}return g(t.sessionId,t.turnId,e.signal,e.deadline_at)},async cancelTurn(e){let t=ef(e.provider_turn_id);if(!t)return r("not_found","not_found (turn handle)");let n=m(t.turnId);if(!n){let e=await c(t.sessionId,!1);return e.ok?er(e.result.session)?.activeTurnId===t.turnId?r("unavailable","turn runs in another Muse host"):i("already_terminal"):e}if(n.track.completed)return i("already_terminal");let s=await l(n.host,"turn/cancel",{commandId:ep(),sessionId:t.sessionId,turnId:t.turnId});if(!s.ok)return s;await n.host.waitFor(()=>null!==n.track.completed,null,Date.now()+o);let a=n.track.completed?.terminal;return i(void 0===a||"cancelled"===a?"cancelled":"already_terminal")}}}],27776);class ey{defaultTimeoutMs;transport;pending;listeners;closeListeners;nextId;serverRequestHandler;closed;closeReason;constructor(e,t=3e4){this.defaultTimeoutMs=t,this.pending=new Map,this.listeners=new Set,this.closeListeners=new Set,this.nextId=1,this.serverRequestHandler=null,this.closed=!1,this.closeReason=null,this.transport=e,e.onLine(e=>this.receive(e)),e.onClose(e=>{for(let[t,n]of(this.closed=!0,this.closeReason=e,this.pending))this.pending.delete(t),n.cleanup(),n.resolve({ok:!1,kind:"closed",error:{code:-1,message:e}});for(let t of this.closeListeners)t(e)})}request(e,t,n={}){if(this.closed)return Promise.resolve({ok:!1,kind:"closed",error:{code:-1,message:this.closeReason??"closed"}});let r=this.nextId++;return new Promise(i=>{let s=n.signal??null,a=()=>l({ok:!1,kind:"aborted",error:{code:-1,message:"aborted"}}),o=n.timeoutMs??this.defaultTimeoutMs,d=o>0?setTimeout(()=>l({ok:!1,kind:"timeout",error:{code:-1,message:`${e} timed out`}}),o):null,u=()=>{d&&clearTimeout(d),s?.removeEventListener("abort",a)},l=e=>{this.pending.has(r)&&(this.pending.delete(r),u(),i(e))};if(this.pending.set(r,{resolve:e=>i(e),timer:d,cleanup:u}),s?.aborted)return a();s?.addEventListener("abort",a,{once:!0}),this.transport.send(JSON.stringify({id:r,method:e,params:t}))})}notify(e,t){this.transport.send(JSON.stringify(void 0===t?{method:e}:{method:e,params:t}))}onNotification(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onClose(e){return this.closeListeners.add(e),()=>this.closeListeners.delete(e)}handleServerRequests(e){this.serverRequestHandler=e}close(){this.transport.close()}receive(e){let t;try{t=JSON.parse(e)}catch{return}if(!t||"object"!=typeof t)return;let n="number"==typeof t.id||"string"==typeof t.id;if(n&&"string"==typeof t.method){let e=this.serverRequestHandler?this.serverRequestHandler(t.method,t.params??{}):{error:{code:-32601,message:"not handled"}};this.transport.send(JSON.stringify({id:t.id,...e}));return}if(n){let e=this.pending.get(Number(t.id));if(!e)return;if(this.pending.delete(Number(t.id)),e.cleanup(),t.error&&"object"==typeof t.error){let n=t.error;e.resolve({ok:!1,kind:"rpc",error:{code:Number(n.code??-32603),message:String(n.message??"")}})}else e.resolve({ok:!0,result:t.result});return}if("string"==typeof t.method){let e={method:t.method,params:t.params??{}};for(let t of this.listeners)t(e)}}}function ew(e){let t=[];for(let n of e.split("\n")){let e=n.trim();if(e)try{let n=JSON.parse(e);n&&"object"==typeof n&&!Array.isArray(n)&&t.push(n)}catch{}}return t}let ev=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0?Math.trunc(e):null;function ek(e,t,n){return null===e&&null===n?null:{input_tokens:e,output_tokens:n,cached_input_tokens:t,cost_usd:null}}function eE(e){let t=null,n=null,r=null,i=null;for(let s of e)if("thread.started"===s.type&&"string"==typeof s.thread_id)t=s.thread_id;else if("item.completed"===s.type&&s.item&&"object"==typeof s.item){let e=s.item;"agent_message"===e.type&&"string"==typeof e.text&&e.text&&(n=e.text)}else if("turn.completed"===s.type)r="completed";else if("turn.failed"===s.type||"error"===s.type){r="failed";let e=s.error;i="string"==typeof e?e:e&&"object"==typeof e&&"string"==typeof e.message?e.message:"string"==typeof s.message?s.message:"codex turn failed"}return{thread_id:t,terminal:r,output:n,error:i,usage:function(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if("turn.completed"!==n.type)continue;let r=n.usage;if(!r||"object"!=typeof r)break;return ek(ev(r.input_tokens),ev(r.cached_input_tokens),ev(r.output_tokens))}return null}(e)}}var eb=e.i(18966);let eI=["cli","vscode","exec","appServer"],eS=["thread/list","thread/read","thread/items/list","thread/turns/list","thread/start","thread/resume","turn/start","turn/interrupt"],eT={"thread/list":{limit:"probe"},"thread/read":{threadId:0},"thread/items/list":{threadId:0},"thread/turns/list":{threadId:0},"thread/start":{cwd:0},"thread/resume":{threadId:0},"turn/start":{threadId:0},"turn/interrupt":{threadId:0}},eA=Object.fromEntries(eS.map(e=>[e,!1]));function eR(e,t,n){return`codex:${e}:${t}:${n}`}function eq(e){let t=e.split(":");return 4===t.length&&"codex"===t[0]&&("as"===t[1]||"ex"===t[1])&&t[2]&&t[3]?{kind:t[1],threadId:t[2],id:t[3]}:null}function ex(e){return Buffer.from(JSON.stringify(e)).toString("base64url")}function eN(e){if(!e)return null;try{let t=JSON.parse(Buffer.from(e,"base64url").toString("utf8"));return t&&"object"==typeof t?t:null}catch{return null}}let eC=e=>"number"==typeof e&&Number.isFinite(e)?Math.round(1e3*e):null;function eO(e,t){let n="string"==typeof e.cwd&&e.cwd.startsWith("/")?e.cwd:null,r=e.status?.type,i="string"==typeof e.name&&e.name.trim()?e.name:null,s="string"==typeof e.preview&&e.preview.trim()?e.preview:null;return{provider_session_id:e.id,title:i??s,workspace:n,created_at:eC(e.createdAt),updated_at:eC(e.updatedAt),lifecycle:t??("string"==typeof e.path&&e.path.split(/[\\/]/).includes("archived_sessions")?"archived":"open"),resumable:!0!==e.ephemeral&&"systemError"!==r&&null!==n&&c.default.existsSync(n),busy:"active"===r}}function eD(e,t,n){if("userMessage"===e.type)return{seq:t,role:"user",text:(Array.isArray(e.content)?e.content:[]).map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join("").trim(),at:n};return"agentMessage"===e.type&&"string"==typeof e.text?{seq:t,role:"assistant",text:e.text,at:n}:"commandExecution"===e.type&&"string"==typeof e.command?{seq:t,role:"tool",text:`$ ${e.command}`,at:n}:null}function eL(e){let t=null,n=null;for(let r of e??[])r?.type==="agentMessage"&&"string"==typeof r.text&&r.text&&(t=r.text,"final_answer"===r.phase&&(n=r.text));return n??t}function e$(e){return"workspace_write"===e?"workspace-write":"read-only"}function eM(e){return!e.ok&&"rpc"===e.kind&&/thread not (found|loaded)|no rollout|invalid thread id|not found/i.test(e.error.message)}function eW(e,t){return"timeout"===e.kind?r("timed_out",`${t} timed out`):"aborted"===e.kind?r("cancelled",`${t} aborted`):"closed"===e.kind?r("unavailable",`${t}: app-server closed`):r("invalid_input",`${t} refused (${e.error.code})`)}class eF{options;client;connecting;probe;trackers;keys;idleTimer;loads;command;env;constructor(e={}){this.options=e,this.client=null,this.connecting=null,this.probe=null,this.trackers=new Map,this.keys=new Map,this.idleTimer=null,this.loads=new Map,this.command=e.command??[process.env.BOTMANCERS_CODEX_BIN||"codex"],this.env=e.env??process.env}get runsDir(){return this.options.runsDir??_.default.join(_.default.dirname(_.default.resolve((0,p.dbPath)(this.env))),"codex-exec-runs")}capabilities(){let e=this.probe?.status==="ready"?this.probe:null,t=e?.methods??eA,n=!!e?.exec_fallback,r=t["thread/start"]&&t["turn/start"],i=t["thread/resume"]&&t["turn/start"];return{list:t["thread/list"],search:t["thread/list"],read:t["thread/items/list"]||t["thread/turns/list"],resume:i||n&&t["thread/read"],start:r||n,cancel:t["turn/interrupt"]||n&&(!r||!i),usage:!!e,authorities:e?["read_only","workspace_write"]:[],max_page_size:25}}selection(){let e=this.capabilities(),t=this.probe?.methods??eA;return{start:e.start?t["thread/start"]&&t["turn/start"]?"app-server":"exec":null,resume:e.resume?t["thread/resume"]&&t["turn/start"]?"app-server":"exec":null}}async ready(){let e=await this.connect();return"ready"===e.status?i(void 0):r("auth_required"===e.status?"auth_required":"unsupported"===e.status?"unsupported":"unavailable",e.detail)}async connect(){return this.client&&!this.client.closed&&this.probe?.status==="ready"?this.probe:(this.connecting||(this.connecting=this.doConnect().finally(()=>{this.connecting=null})),this.connecting)}cliVersion(){return new Promise(e=>{(0,u.execFile)(this.command[0],[...this.command.slice(1),"--version"],{env:this.env,timeout:1e4},(t,n)=>{if(t)return e(null);let r=/(\d+\.\d+\.\d+[0-9A-Za-z.+-]*)/.exec(String(n));e(r?r[1]:null)})})}async doConnect(){let e=await this.cliVersion(),t=(t,n)=>(this.probe={status:t,cli_version:e,methods:{...eA},exec_fallback:!1,detail:n},this.probe);this.client?.close(),this.client=null;let n=new ey((this.options.transport??((e,t)=>(function(e,t={}){let n,r=[],i=[],s=!1,a=e=>{if(!s)for(let t of(s=!0,i))t(e)};try{n=(0,u.spawn)(e[0],e.slice(1),{stdio:["pipe","pipe","pipe"],env:t.env??process.env,cwd:t.cwd})}catch(e){return queueMicrotask(()=>a(`spawn failed: ${e.message}`)),{send:()=>{},onLine:e=>r.push(e),onClose:e=>i.push(e),close:()=>{}}}let o="";return n.stdout?.setEncoding("utf8"),n.stdout?.on("data",e=>{let t;for(o+=e;(t=o.indexOf("\n"))>=0;){let e=o.slice(0,t).trim();if(o=o.slice(t+1),e)for(let t of r)t(e)}}),n.stderr?.resume(),n.stdin?.on("error",()=>{}),n.on("error",e=>a(`spawn failed: ${e.code??e.message}`)),n.on("exit",(e,t)=>a(`exited (${t??e})`)),{send(e){!s&&n.stdin?.writable&&n.stdin.write(`${e}
234
+ `)},onLine:e=>r.push(e),onClose:e=>i.push(e),close(){s||(n.stdin?.end(),n.kill("SIGTERM"))}}})([...e,"app-server"],{env:v(t)})))(this.command,this.env),this.options.requestTimeoutMs??3e4),r=await n.request("initialize",{clientInfo:{name:"botmancers",title:"Botmancers",version:"1"},capabilities:null},{timeoutMs:2e4});if(!r.ok)return(n.close(),null===e)?t("unavailable",`codex is not installed or did not start (${r.error.message})`):t("rpc"===r.kind?"unsupported":"unavailable",`codex ${e}: app-server initialize failed (${r.error.message})`);n.notify("initialized");let i=await Promise.all(eS.map(e=>n.request(e,eT[e],{timeoutMs:1e4}))),s={...eA};if(eS.forEach((e,t)=>{var n;let r=i[t];s[e]=r.ok||"rpc"===r.kind&&(n=r.error,!(!(-32601!==n.code||/not supported yet/i.test(n.message))||n.message.includes(`unknown variant \`${e}\``)))}),!s["thread/list"])return n.close(),t("unsupported",`codex ${e??"unknown"}: app-server has no thread/list`);let a=await n.request("account/read",{},{timeoutMs:1e4});return a.ok&&a.result&&null==a.result.account&&!0===a.result.requiresOpenaiAuth?(n.close(),t("auth_required","codex is not signed in")):(this.attach(n),this.probe={status:"ready",cli_version:e,methods:s,exec_fallback:!1!==this.options.execFallback&&null!==e,detail:`codex ${e??"unknown"} app-server`},this.probe)}attach(e){this.client=e;let t=new Map;this.loads=t,e.onClose(()=>{for(let e of t.values())e?.end("app_server_exit");t.clear()}),e.handleServerRequests(e=>"item/commandExecution/requestApproval"===e||"item/fileChange/requestApproval"===e?{result:{decision:"decline"}}:"applyPatchApproval"===e||"execCommandApproval"===e?{result:{decision:{denied:{rejection:"Botmancers turns run with a fixed authority."}}}}:{error:{code:-32601,message:"not supported by Botmancers"}}),e.onNotification(({method:e,params:n})=>{if("thread/closed"===e&&"string"==typeof n.threadId){t.get(n.threadId)?.end("thread_unload"),t.delete(n.threadId);return}let r="string"==typeof n.turnId?n.turnId:n.turn&&"string"==typeof n.turn.id?n.turn.id:null;if(!r||"string"!=typeof n.threadId)return;let i=this.tracker(r,n.threadId);if("item/completed"===e){let e=n.item;e?.type==="agentMessage"&&"string"==typeof e.text&&e.text&&(i.output=e.text,"final_answer"===e.phase&&(i.finalOutput=e.text))}else if("thread/tokenUsage/updated"===e){var s;i.usage=function(e,t){if(!e)return t;if(!t)return e;let n=(e,t)=>null==e&&null==t?null:(e??0)+(t??0);return{input_tokens:n(e.input_tokens,t.input_tokens),output_tokens:n(e.output_tokens,t.output_tokens),cached_input_tokens:n(e.cached_input_tokens,t.cached_input_tokens),cost_usd:null}}(i.usage,(s=n.tokenUsage?.last)&&"object"==typeof s?ek(ev(s.inputTokens),ev(s.cachedInputTokens),ev(s.outputTokens)):null)}else if("turn/completed"===e){let e=n.turn;this.settle(i,e)}}),e.onClose(()=>{for(let e of this.trackers.values())"inProgress"===e.status&&(e.status="lost",e.error="the Codex app-server exited during the turn",e.finishedAt=Date.now(),e.waiters.splice(0).forEach(e=>e()))})}tracker(e,t){let n=this.trackers.get(e);return n||(n={threadId:t,status:"inProgress",output:null,finalOutput:null,usage:null,error:null,finishedAt:null,waiters:[]},this.trackers.set(e,n)),n}settle(e,t){"inProgress"!==t.status&&"inProgress"===e.status&&(e.status="completed"===t.status?"completed":"interrupted"===t.status?"interrupted":"failed",e.output=e.finalOutput??e.output??eL(t.items),e.error=t.error?.message??("failed"===e.status?"codex turn failed":null),e.finishedAt=eC(t.completedAt)??Date.now(),e.waiters.splice(0).forEach(e=>e()),this.scheduleIdle())}scheduleIdle(){this.idleTimer&&clearTimeout(this.idleTimer);let e=this.options.idleMs??3e5;this.idleTimer=setTimeout(()=>{if([...this.trackers.values()].some(e=>"inProgress"===e.status))return this.scheduleIdle();this.client?.close()},e),this.idleTimer.unref?.()}async rpc(e,t,n){let r=await this.connect();return"ready"===r.status&&this.client?(this.scheduleIdle(),this.client.request(e,t,{signal:n.signal??null})):{ok:!1,kind:"closed",error:{code:-1,message:r.detail}}}isLoaded(e){return!!this.client&&!this.client.closed&&this.loads.has(e)}markLoaded(e,t){this.loads.has(e)?t?.end("launch_failed"):this.loads.set(e,t)}mintLoad(e){return e?.mint({kind:"codex_thread_load",ref:`load-${(0,l.randomUUID)()}`,processBound:!0})??null}has(e){return!!this.probe?.methods[e]}shutdown(){this.idleTimer&&clearTimeout(this.idleTimer),this.client?.close(),this.client=null,this.probe=null}async listSessions(e){let t=eN(e.cursor);if("sessions"===e.scope.kind){let n=Number(t?.i??0),r=e.scope.provider_session_ids.slice(n,n+e.limit),s=[];for(let t of r){let n=await this.getSession({...e,provider_session_id:t});if(!n.ok)return n;n.value&&s.push(n.value)}return i({items:s,next_cursor:n+e.limit<e.scope.provider_session_ids.length?ex({i:n+e.limit}):null})}let n=t?.phase==="archived"?"archived":"open",r=await this.rpc("thread/list",{limit:e.limit,cursor:"string"==typeof t?.c?t.c:null,archived:"archived"===n,sourceKinds:eI,sortKey:"updated_at",...e.query?{searchTerm:e.query}:{}},e);if(!r.ok)return eW(r,"thread/list");let s=(Array.isArray(r.result?.data)?r.result.data:[]).filter(e=>e&&"string"==typeof e.id&&!0!==e.ephemeral&&!e.parentThreadId).map(e=>eO(e,n)).filter(t=>"all_provider_sessions"===e.scope.kind||null!==t.workspace&&e.scope.workspaces.some(e=>(0,eb.workspaceContains)(e,t.workspace))),a=r.result?.nextCursor??null;return i({items:s,next_cursor:a?ex({phase:n,c:a}):"open"===n?ex({phase:"archived"}):null})}async getSession(e){let t=await this.rpc("thread/read",{threadId:e.provider_session_id},e);if(!t.ok)return eM(t)?i(null):eW(t,"thread/read");let n=t.result?.thread;return i(n&&"string"==typeof n.id?eO(n):null)}async readTranscript(e){let t=eN(e.cursor)??{},n=Number(t.n??0),s=e.provider_session_id;if("turns"!==t.mode&&this.has("thread/items/list")){let a=await this.rpc("thread/items/list",{threadId:s,cursor:"string"==typeof t.c?t.c:null,limit:e.limit,sortDirection:"asc"},e);if(a.ok){let t=(a.result?.data??[]).slice(0,e.limit);return i({items:t.map((e,t)=>eD(e.item??{},n+t+1,e.completedAtMs??e.startedAtMs??null)).filter(e=>null!==e),next_cursor:a.result?.nextCursor?ex({c:a.result.nextCursor,n:n+t.length}):null})}if(eM(a))return r("not_found","no such thread");if("rpc"!==a.kind||-32601!==a.error.code)return eW(a,"thread/items/list")}if(!this.has("thread/turns/list"))return r("unsupported","no transcript method");let a="string"==typeof t.c?t.c:null,o=Number(t.skip??0),d=await this.rpc("thread/turns/list",{threadId:s,cursor:a,limit:1,sortDirection:"asc",itemsView:"full"},e);if(!d.ok)return eM(d)?r("not_found","no such thread"):eW(d,"thread/turns/list");let u=(d.result?.data??[])[0];if(!u)return i({items:[],next_cursor:null});let l=Array.isArray(u.items)?u.items:[],c=l.slice(o,o+e.limit),_=c.map((e,t)=>eD(e,n+t+1,null)).filter(e=>null!==e),p=n+c.length;return i({items:_,next_cursor:o+e.limit<l.length?ex({mode:"turns",c:a,skip:o+e.limit,n:p}):d.result?.nextCursor?ex({mode:"turns",c:d.result.nextCursor,skip:0,n:p}):null})}turnInput(e){return[{type:"text",text:e,text_elements:[]}]}async beginTurn(e,t,n){var s;let a=await this.rpc("turn/start",{threadId:e,input:this.turnInput(n.prompt),cwd:t,approvalPolicy:"never",sandboxPolicy:(s=n.authority,"workspace_write"===s?{type:"workspaceWrite",writableRoots:[t],networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}:{type:"readOnly",networkAccess:!1}),clientUserMessageId:n.idempotency_key},n);if(!a.ok)return eM(a)?r("not_found","no such thread"):eW(a,"turn/start");let o=a.result?.turn;if(!o||"string"!=typeof o.id)return r("unavailable","turn/start returned no turn");let d=this.tracker(o.id,e);this.settle(d,o);let u={provider_turn_id:eR("as",e,o.id),provider_session_id:e};return this.keys.set(n.idempotency_key,u),i(u)}async startSession(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return i(t);let n=this.selection().start;if(null===n)return r("unsupported","this Codex cannot start sessions");if("exec"===n)return this.execStart(null,e.workspace,e);let s=this.mintLoad(e.session_context),a=await this.rpc("thread/start",{cwd:e.workspace,approvalPolicy:"never",sandbox:e$(e.authority),ephemeral:!1,...s?{config:b(s)}:{}},e),o=a.ok?a.result?.thread?.id:void 0;return("string"!=typeof o&&s?.end("launch_failed"),a.ok)?"string"!=typeof o?r("unavailable","thread/start returned no thread"):(this.markLoaded(o,s),this.beginTurn(o,e.workspace,e)):eW(a,"thread/start")}async findKeyedTurn(e,t,n){if(!this.has("thread/turns/list"))return null;let r=await this.rpc("thread/turns/list",{threadId:e,limit:5,sortDirection:"desc",itemsView:"full"},n);if(!r.ok)return null;for(let e of r.result?.data??[])if((e.items??[]).some(e=>e?.type==="userMessage"&&e.clientId===t))return e.id;return null}async sendTurn(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return i(t);let n=e.provider_session_id,s=this.selection().resume;if(null===s)return r("unsupported","this Codex cannot resume sessions");if("exec"===s){let t=await this.getSession(e);return t.ok?t.value?t.value.resumable&&t.value.workspace?this.execStart(n,t.value.workspace,e):r("not_resumable","the thread cannot be resumed"):r("not_found","no such thread"):t}await this.connect();let a=this.isLoaded(n)?null:this.mintLoad(e.session_context),o=await this.rpc("thread/resume",{threadId:n,approvalPolicy:"never",sandbox:e$(e.authority),excludeTurns:!0,...a?{config:b(a)}:{}},e);if(!o.ok)return a?.end("launch_failed"),eM(o)?r("not_found","no such thread"):eW(o,"thread/resume");this.isLoaded(n)||this.markLoaded(n,a);let d="string"==typeof o.result?.cwd?o.result.cwd:o.result?.thread?.cwd;if(!d||!c.default.existsSync(d))return r("not_resumable","the thread workspace no longer exists");let u=await this.findKeyedTurn(n,e.idempotency_key,e);if(u){let t={provider_turn_id:eR("as",n,u),provider_session_id:n};return this.keys.set(e.idempotency_key,t),i(t)}return o.result?.thread?.status?.type==="active"?r("busy","the thread has a turn in flight"):this.beginTurn(n,d,e)}result(e){let t="completed"===e.status?"completed":"interrupted"===e.status?"cancelled":"failed";return{status:t,provider_session_id:e.threadId,output:e.output,failure:"completed"===t?null:"cancelled"===t?{code:"cancelled",message:"interrupted"}:{code:"lost"===e.status?"interrupted":"codex_turn_failed",message:e.error??"codex turn failed"},usage:e.usage,finished_at:e.finishedAt??Date.now()}}async recover(e,t,n){let s=null;for(let a=0;a<10;a++){let a=await this.rpc("thread/turns/list",{threadId:e,cursor:s,limit:10,sortDirection:"desc",itemsView:"full"},n);if(!a.ok)return eM(a)?r("not_found","no such thread"):eW(a,"thread/turns/list");let o=(a.result?.data??[]).find(e=>e.id===t);if(o){let r=this.tracker(t,e);if("inProgress"!==o.status)return this.settle(r,o),i(r);let s=await this.rpc("thread/read",{threadId:e},n);if(s.ok&&s.result?.thread?.status?.type==="active")return(await this.rpc("thread/resume",{threadId:e,excludeTurns:!0},n)).ok&&!this.isLoaded(e)&&this.markLoaded(e,null),i(r);return r.status="lost",r.output=eL(o.items),r.error="the turn ended without a result (its Codex app-server exited)",r.finishedAt=Date.now(),i(r)}if(!(s=a.result?.nextCursor??null))break}return r("not_found","no such turn")}async liveTracker(e,t,n){let s=this.trackers.get(t);return s&&("inProgress"!==s.status||this.client&&!this.client.closed)?i(s):this.has("thread/turns/list")||(await this.connect(),this.has("thread/turns/list"))?this.recover(e,t,n):r("unsupported","cannot read turn history")}async observeTurn(e){let t=eq(e.provider_turn_id);if(!t)return r("not_found","unknown turn handle");if("ex"===t.kind)return this.execObserve(t.threadId,t.id,e);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let s=n.value;for(;"inProgress"===s.status;){let t=await new Promise(t=>{let n=()=>o("done"),r=()=>o("aborted"),i="number"==typeof e.deadline_at?Math.max(0,e.deadline_at-Date.now()):null,a=null===i?null:setTimeout(()=>o("deadline"),i);function o(i){a&&clearTimeout(a),e.signal?.removeEventListener("abort",r);let o=s.waiters.indexOf(n);o>=0&&s.waiters.splice(o,1),t(i)}if(e.signal?.aborted)return o("aborted");s.waiters.push(n),e.signal?.addEventListener("abort",r,{once:!0})});if("aborted"===t)return r("cancelled","observe aborted");if("deadline"===t)return r("timed_out","observe deadline")}return i(this.result(s))}async cancelTurn(e){let t=eq(e.provider_turn_id);if(!t)return r("not_found","unknown turn handle");if("ex"===t.kind)return this.execCancel(t.id);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let s=n.value;if("inProgress"!==s.status)return i("already_terminal");if(!this.has("turn/interrupt"))return r("unsupported","this Codex cannot interrupt turns");let a=await this.rpc("turn/interrupt",{threadId:t.threadId,turnId:t.id},e);if(!a.ok)return"inProgress"!==s.status?i("already_terminal"):eW(a,"turn/interrupt");let o=Date.now()+1e4;for(;"inProgress"===s.status&&Date.now()<o;)await new Promise(e=>setTimeout(e,20));return"inProgress"===s.status||"interrupted"===s.status?(s.status="interrupted",s.finishedAt=s.finishedAt??Date.now(),s.waiters.splice(0).forEach(e=>e()),i("cancelled")):i("already_terminal")}runPath(e,t){return _.default.join(this.runsDir,`${e.replace(/[^A-Za-z0-9-]/g,"")}.${t}`)}readMeta(e){try{return JSON.parse(c.default.readFileSync(this.runPath(e,"json"),"utf8"))}catch{return null}}execRunByKey(e){if(!c.default.existsSync(this.runsDir))return null;for(let t of c.default.readdirSync(this.runsDir)){if(!t.endsWith(".json"))continue;let n=this.readMeta(t.slice(0,-5));if(n?.key===e&&"string"==typeof n.thread_id)return{provider_turn_id:eR("ex",n.thread_id,String(n.run_id)),provider_session_id:n.thread_id}}return null}async execStart(e,t,n){let s;c.default.mkdirSync(this.runsDir,{recursive:!0});let a=(0,l.randomUUID)(),o=n.session_context?.mint({kind:"codex_exec",ref:a})??null,d=["-c",`sandbox_mode="${e$(n.authority)}"`,"-c",'approval_policy="never"',...o?I(o):[]],_=v(this.env);o&&(_[m]=o.token);let p=e?[...this.command.slice(1),"exec","resume","--json",...d,e,"-"]:[...this.command.slice(1),"exec","--json","-C",t,...d,"-"],f=c.default.openSync(this.runPath(a,"jsonl"),"a");try{s=(0,u.spawn)(this.command[0],p,{cwd:t,env:_,detached:!0,stdio:["pipe",f,"ignore"]})}catch(e){return c.default.closeSync(f),o?.end("launch_failed"),r("unavailable",`codex exec did not start: ${e.message}`)}c.default.closeSync(f);let h=new Promise(e=>s.once("error",t=>e(t.message)));s.stdin?.on("error",()=>{}),s.stdin?.end(n.prompt);let g={run_id:a,pid:s.pid??null,thread_id:e,key:n.idempotency_key,authority:n.authority,cwd:t,correlation:n.correlation??{},cancelled:!1,started_at:Date.now()};if(c.default.writeFileSync(this.runPath(a,"json"),JSON.stringify(g)),s.unref(),!e){let e=Date.now()+3e4,t=null;for(h.then(e=>{t=e});;){let n=eE(ew(this.readLog(a)));if(n.thread_id){g.thread_id=n.thread_id,c.default.writeFileSync(this.runPath(a,"json"),JSON.stringify(g));break}if(t||n.terminal||Date.now()>e||g.pid&&!eU(g.pid))return r("unavailable",`codex exec reported no thread${t?`: ${t}`:""}`);await new Promise(e=>setTimeout(e,25))}}return i({provider_turn_id:eR("ex",g.thread_id,a),provider_session_id:g.thread_id})}readLog(e){try{return c.default.readFileSync(this.runPath(e,"jsonl"),"utf8")}catch{return""}}execResult(e,t){let n=this.readMeta(t);if(!n)return null;let r=eE(ew(this.readLog(t))),i="number"==typeof n.pid&&eU(n.pid);if(!r.terminal&&i&&!n.cancelled)return null;let s=n.cancelled&&"completed"!==r.terminal?"cancelled":"completed"===r.terminal?"completed":"failed";return{status:s,provider_session_id:e,output:r.output,failure:"completed"===s?null:"cancelled"===s?{code:"cancelled",message:"interrupted"}:{code:r.terminal?"codex_turn_failed":"interrupted",message:r.error??"codex exec ended without a result"},usage:r.usage,finished_at:Number(n.finished_at??Date.now())}}async execObserve(e,t,n){if(!this.readMeta(t))return r("not_found","no such run");for(;;){let s=this.execResult(e,t);if(s)return i(s);if(n.signal?.aborted)return r("cancelled","observe aborted");if("number"==typeof n.deadline_at&&Date.now()>=n.deadline_at)return r("timed_out","observe deadline");await new Promise(e=>setTimeout(e,25))}}execCancel(e){let t=this.readMeta(e);if(!t)return r("not_found","no such run");let n=eE(ew(this.readLog(e)));if(t.cancelled||n.terminal||"number"!=typeof t.pid||!eU(t.pid))return i("already_terminal");try{process.kill(t.pid,"SIGINT")}catch{return i("already_terminal")}return c.default.writeFileSync(this.runPath(e,"json"),JSON.stringify({...t,cancelled:!0,finished_at:Date.now()})),i("cancelled")}}function eU(e){try{return process.kill(e,0),!0}catch{return!1}}let eH=null;"off"!==process.env.BOTMANCERS_CODEX_PROVIDER&&d("codex",()=>{var e;return eH||(eH=new eF),e=eH,{kind:"codex-direct",capabilities:()=>e.capabilities(),ready:()=>e.ready(),listSessions:t=>e.listSessions(t),getSession:t=>e.getSession(t),readTranscript:t=>e.readTranscript(t),startSession:t=>e.startSession(t),sendTurn:t=>e.sendTurn(t),observeTurn:t=>e.observeTurn(t),cancelTurn:t=>e.cancelTurn(t)}}),e.s([],96474);let eP="cursor",ej=/^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$/,ez=new Map,eB=`
235
+ import { createRequire } from 'module';
236
+ import { pathToFileURL } from 'url';
237
+ import path from 'path';
238
+ const [op, spec, ...rest] = process.argv.slice(1);
239
+ const out = value => process.stdout.write(JSON.stringify(value) + '\\n');
240
+ async function load() {
241
+ const abs = path.isAbsolute(spec) ? spec : createRequire(path.join(process.cwd(), 'package.json')).resolve(spec);
242
+ const mod = await import(pathToFileURL(abs).href);
243
+ return mod.default && mod.default.Agent ? mod.default : mod;
244
+ }
245
+ try {
246
+ const sdk = await load();
247
+ const Agent = sdk.Agent;
248
+ if (op === 'probe') {
249
+ out({ resume: typeof Agent?.resume === 'function', create: typeof Agent?.create === 'function', list: typeof Agent?.list === 'function', version: typeof sdk.version === 'string' ? sdk.version : null });
250
+ } else if (op === 'create') {
251
+ const chat = await Agent.create({ cwd: rest[0] });
252
+ out({ id: chat && chat.id });
253
+ } else if (op === 'list') {
254
+ out(await Agent.list({}));
255
+ } else if (op === 'turn') {
256
+ const [id, cwd, mode, prompt] = rest;
257
+ const agent = await Agent.resume(id, { cwd, mode: mode === '-' ? null : mode });
258
+ for await (const event of agent.stream(prompt)) out(event);
259
+ } else {
260
+ process.exit(2);
261
+ }
262
+ } catch (error) {
263
+ if (op === 'turn') out({ type: 'result', subtype: 'sdk_error', is_error: true, result: null });
264
+ process.exit(op === 'probe' ? 3 : 1);
265
+ }
266
+ `;function eK(e,t,n){return["--input-type=module","-e",eB,e,t.sdkModule,...n]}function eG(e){return"string"==typeof e?e:null}function eX(e,t){let n=e.env??process.env,r=e.stateDir??(n.BOTMANCERS_CURSOR_STATE_DIR?.trim()||_.default.join(_.default.dirname(_.default.resolve((0,p.dbPath)(n))),"providers","cursor"));return{cliPath:e.cliPath??(n.BOTMANCERS_CURSOR_CLI?.trim()||"cursor-agent"),sdkModule:e.sdkModule??(n.BOTMANCERS_CURSOR_SDK_MODULE?.trim()||"@cursor/sdk"),stateDir:_.default.join(r,t.replace(/[^A-Za-z0-9._-]/g,"_")),pollMs:e.pollMs??100,env:void 0!==n[h]||void 0!==n[m]?v(n):n}}function eJ(e){return _.default.join(e.stateDir,"state.json")}function eV(e,t,n){return _.default.join(e.stateDir,"turns",`${t}.${n}`)}function eY(e){try{let t=JSON.parse(c.default.readFileSync(eJ(e),"utf8"));if(t&&1===t.version)return t}catch{}return{version:1,chats:{},turns:{},keys:{}}}function eZ(e,t){c.default.mkdirSync(_.default.join(e.stateDir,"turns"),{recursive:!0});let n=`${eJ(e)}.${process.pid}.${(0,l.randomUUID)()}.tmp`;c.default.writeFileSync(n,JSON.stringify(t)),c.default.renameSync(n,eJ(e))}function eQ(e){try{return c.default.readFileSync(e,"utf8")}catch{return null}}function e0(e){if(!e)return!1;try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function e1(e){try{return c.default.realpathSync(e)}catch{return _.default.resolve(e)}}function e4(e){try{return c.default.statSync(e).isDirectory()}catch{return!1}}function e2(e,t,n,r){return{state:"terminal",parsed:n,result:{status:"failed",provider_session_id:e.chat,output:null,failure:{code:t,message:t},usage:n.result?.usage??null,finished_at:r}}}function e6(e,t){let r=eQ(eV(e,t.id,"exit")),i=null!==r||!e0(t.pid),s=function(e,t=!1){let r={init:null,steps:[],result:null,result_events:0,malformed:0},i=e.split("\n");for(let e of(t||i.pop(),i)){let t,i=e.trim();if(!i)continue;try{let e=JSON.parse(i);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("not an object");t=e}catch{r.malformed++;continue}let s="number"==typeof t.timestamp_ms?t.timestamp_ms:null;if("system"!==t.type||"init"!==t.subtype||r.init)if("assistant"===t.type){let e=function(e){let t=e?.content;if("string"==typeof t)return t;if(!Array.isArray(t))return null;let n=t.map(e=>e&&"text"===e.type?eG(e.text):null).filter(e=>null!==e);return n.length?n.join(""):null}(t.message);e&&r.steps.push({role:"assistant",text:e,at:s})}else"tool_call"===t.type&&"completed"===t.subtype?r.steps.push({role:"tool",text:`${function(e){let t=Object.keys(e.tool_call&&"object"==typeof e.tool_call?e.tool_call:{}).find(e=>/ToolCall$/.test(e));return t?t.replace(/ToolCall$/,""):"tool"}(t)} (completed)`,at:s}):"result"===t.type&&(r.result_events++,r.result||(r.result={ok:!1===t.is_error&&"success"===t.subtype,subtype:eG(t.subtype),text:eG(t.result),usage:function(e){let t=e.usage&&"object"==typeof e.usage?e.usage:null,r=e.total_cost_usd??t?.costUsd??t?.cost_usd;return t||void 0!==r?n({input_tokens:t?.inputTokens??t?.input_tokens,output_tokens:t?.outputTokens??t?.output_tokens,cost_usd:r}):null}(t)}));else r.init={session_id:eG(t.session_id),cwd:eG(t.cwd)}}return r}(eQ(eV(e,t.id,"out"))??"",i),a=Date.now();if(s.init){if(s.init.session_id!==t.chat)return e2(t,"session_mismatch",s,a);if(null!==s.init.cwd&&e1(s.init.cwd)!==e1(t.workspace))return e2(t,"workspace_mismatch",s,a)}if(s.result){if(!s.result.ok)return e2(t,`cursor_${(s.result.subtype??"error").replace(/[^A-Za-z0-9_]/g,"_").slice(0,40)}`,s,a);let e=s.result.text??(s.steps.filter(e=>"assistant"===e.role).map(e=>e.text).join("\n")||null);return{state:"terminal",parsed:s,result:{status:"completed",provider_session_id:t.chat,output:e,failure:null,usage:s.result.usage,finished_at:a}}}return null!==t.cancel_requested_at?{state:"terminal",parsed:s,result:{status:"cancelled",provider_session_id:t.chat,output:null,failure:{code:"cancelled",message:"cancelled"},usage:null,finished_at:t.cancel_requested_at}}:null!==r?e2(t,`exit_${String(Number.parseInt(r,10))}`,s,a):e0(t.pid)?{state:"running",parsed:s}:e2(t,"process_lost",s,a)}function e9(e,t,n,r,i){return new Promise(s=>{let a=(0,u.spawn)(e,t,{cwd:n,env:r.env,stdio:["ignore","pipe","ignore"]}),o="",d=setTimeout(()=>a.kill("SIGKILL"),i);a.stdout?.on("data",e=>{o+=String(e)}),a.on("error",()=>{clearTimeout(d),s({status:null,stdout:o})}),a.on("close",e=>{clearTimeout(d),s({status:e,stdout:o})})})}async function e3(e,t,n){let r="cli"===t?await e9(e.cliPath,["create-chat"],n,e,6e4):await e9(process.execPath,eK("create",e,[n]),n,e,6e4);if(0!==r.status)return null;let i=r.stdout.trim().split("\n").pop()?.trim()??"",s=i;if("sdk"===t)try{s=JSON.parse(i).id}catch{s=null}return"string"==typeof s&&ej.test(s)?s:null}function e5(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=Date.parse(e);return Number.isFinite(t)?t:null}return null}async function e7(e,t){let n;c.default.mkdirSync(e.stateDir,{recursive:!0});let r="cli"===t?await e9(e.cliPath,["ls","--output-format","json"],e.stateDir,e,6e4):await e9(process.execPath,eK("list",e,[]),e.stateDir,e,6e4);if(0!==r.status)return null;try{n=JSON.parse(r.stdout.trim())}catch{return null}let i=Array.isArray(n)?n:n?.sessions??n?.chats;if(!Array.isArray(i))return null;let s=[];for(let e of i){if(!e||"object"!=typeof e)continue;let t=eG(e.id)??eG(e.chatId)??eG(e.session_id);if(!t||!ej.test(t))continue;let n=eG(e.cwd)??eG(e.workspace);s.push({id:t,workspace:n&&_.default.isAbsolute(n)?n:null,title:eG(e.title)??eG(e.name),created_at:e5(e.createdAt??e.created_at),updated_at:e5(e.updatedAt??e.updated_at)})}return s}e.s(["CURSOR_PROVIDER_KIND",0,eP,"cursorSessionProviderFactory",0,function(e){return function(e,t={}){let n=eX(t,e.id),s=()=>(function(e={}){let t=eX(e,"probe"),n=`${t.cliPath}
267
+ ${t.sdkModule}
268
+ ${t.env===process.env?"":JSON.stringify(t.env)}`,r=ez.get(n);if(r&&Date.now()-r.at<3e5)return r.probe;let i=function(e){let t=(0,u.spawnSync)(e.cliPath,["--version"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]}),n=0===t.status?String(t.stdout??"").trim().split("\n").pop()?.trim()??"":"";if(!/^[0-9][\w.+-]{0,80}$/.test(n))return{available:!1,version:null,list:!1};let r=(0,u.spawnSync)(e.cliPath,["ls","--help"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});return{available:!0,version:n,list:0===r.status&&/--output-format\b[^\n]*\bjson\b/.test(String(r.stdout??""))}}(t),s=i.available?{available:!1,version:null,list:!1}:function(e){let t=(0,u.spawnSync)(process.execPath,eK("probe",e,[]),{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});if(0!==t.status)return{available:!1,version:null,list:!1};try{let e=JSON.parse(String(t.stdout).trim().split("\n").pop()??""),n=!0===e.resume&&!0===e.create;return{available:n,version:n&&"string"==typeof e.version?e.version.slice(0,80):null,list:n&&!0===e.list}}catch{return{available:!1,version:null,list:!1}}}(t),a={backend:i.available?"cli":s.available?"sdk":null,cli:i,sdk:s};return ez.set(n,{at:Date.now(),probe:a}),a})(t),a=()=>{var e;let t;return t=null!==(e=s()).backend,{list:"cli"===e.backend?e.cli.list:"sdk"===e.backend&&e.sdk.list,search:!1,read:t,resume:t,start:t,cancel:t,usage:t,authorities:t?["read_only","workspace_write"]:[],max_page_size:50}},o=e=>r(null===s().backend?"unavailable":"unsupported",`Cursor ${e} is not available.`);function d(e,t,r){let i=r.turns.some(t=>e.turns[t]&&"running"===e6(n,e.turns[t]).state),s=r.turns.length?e.turns[r.turns[r.turns.length-1]]?.started_at??r.updated_at:r.updated_at;return{provider_session_id:t,title:r.title,workspace:r.workspace,created_at:r.created_at,updated_at:Math.max(r.updated_at,s),lifecycle:"open",resumable:!0,busy:i}}async function p(e){let t=await e7(n,e);return t?i(t):r("unavailable","Cursor session listing failed.")}function f(e,t,r,s){let a=e.chats[r],o={id:`ct-${(0,l.randomUUID)()}`,chat:r,workspace:a.workspace,prompt:s.prompt,authority:s.authority,backend:t,pid:null,started_at:Date.now(),cancel_requested_at:null,correlation:{...s.correlation}};return e.turns[o.id]=o,e.keys[s.idempotency_key]=o.id,a.turns.push(o.id),eZ(n,e),o.pid=function(e,t){c.default.mkdirSync(_.default.join(e.stateDir,"turns"),{recursive:!0});let[n,r]="cli"===t.backend?[e.cliPath,["--print","--output-format","stream-json","--trust","--workspace",t.workspace,..."read_only"===t.authority?["--mode","ask"]:[],"--resume",t.chat,t.prompt]]:[process.execPath,eK("turn",e,[t.chat,t.workspace,"read_only"===t.authority?"ask":"-",t.prompt])];try{let i=(0,u.spawn)("/bin/sh",["-c",'"$@" >"$BM_OUT" 2>"$BM_ERR" </dev/null; echo $? >"$BM_EXIT.tmp" && mv "$BM_EXIT.tmp" "$BM_EXIT"',"sh",n,...r],{cwd:t.workspace,detached:!0,stdio:"ignore",env:{...e.env,BM_OUT:eV(e,t.id,"out"),BM_ERR:eV(e,t.id,"err"),BM_EXIT:eV(e,t.id,"exit"),BOTMANCERS_CORRELATION:JSON.stringify(t.correlation)}});return i.on("error",()=>{}),i.unref(),i.pid??null}catch{return null}}(n,o),eZ(n,e),i({provider_turn_id:o.id,provider_session_id:r})}function h(e,t){let n=e.keys[t];return n&&e.turns[n]?i({provider_turn_id:n,provider_session_id:e.turns[n].chat}):null}return{kind:eP,probe:s,capabilities:a,async listSessions(e){let t=s().backend;if(!t||!a().list)return o("session listing");let r=await p(t);if(!r.ok)return r;let u=eY(n),l=r.value.filter(t=>{var n,r,i;return n=e.scope,r=t.id,i=t.workspace,"all_provider_sessions"===n.kind||("sessions"===n.kind?n.provider_session_ids.includes(r):null!==i&&n.workspaces.some(e=>i===e||i.startsWith(`${e.replace(/\/+$/,"")}/`)))}),c=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,_=l.slice(c,c+Math.min(e.limit,50)),f=Date.now();for(let e of _)!u.chats[e.id]&&e.workspace&&(u.chats[e.id]={workspace:e.workspace,title:e.title,origin:"listed",created_at:e.created_at??f,updated_at:e.updated_at??f,turns:[]});return eZ(n,u),i({items:_.map(e=>u.chats[e.id]?{...d(u,e.id,u.chats[e.id]),title:e.title??u.chats[e.id].title}:{provider_session_id:e.id,title:e.title,workspace:null,created_at:e.created_at,updated_at:e.updated_at,lifecycle:"open",resumable:!1,busy:!1}),next_cursor:c+_.length<l.length?String(c+_.length):null})},async getSession(e){let t=s().backend;if(!t)return o("sessions");let r=eY(n),u=r.chats[e.provider_session_id];if(!u)return i(null);if(a().list){let n=await p(t);if(!n.ok)return n;if(!n.value.some(t=>t.id===e.provider_session_id))return i(null)}return i(d(r,e.provider_session_id,u))},async importSession(e){let t=s().backend;if(!t)return o("sessions");if(!ej.test(e.provider_session_id))return r("invalid_input","Not a Cursor session id.");if(!_.default.isAbsolute(e.workspace)||!e4(e.workspace))return r("invalid_input","workspace must be an existing absolute directory.");let u=eY(n),l=u.chats[e.provider_session_id];if(l)return i(d(u,e.provider_session_id,l));let c=e.workspace,f=null;if(a().list){let n=await p(t);if(!n.ok)return n;let i=n.value.find(t=>t.id===e.provider_session_id);if(!i)return r("not_found","Cursor does not list that session.");c=i.workspace??c,f=i.title}let h=Date.now();return u.chats[e.provider_session_id]={workspace:c,title:f,origin:a().list?"listed":"imported",created_at:h,updated_at:h,turns:[]},eZ(n,u),i(d(u,e.provider_session_id,u.chats[e.provider_session_id]))},async readTranscript(e){if(!s().backend)return o("transcripts");let t=eY(n),a=t.chats[e.provider_session_id];if(!a)return r("not_found","Unknown Cursor session.");let d=[];for(let e of a.turns){let r=t.turns[e];if(r)for(let e of(d.push({seq:d.length+1,role:"user",text:r.prompt,at:r.started_at}),e6(n,r).parsed.steps))d.push({seq:d.length+1,role:e.role,text:e.text,at:e.at})}let u=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,l=d.slice(u,u+Math.min(e.limit,50));return i({items:l,next_cursor:u+l.length<d.length?String(u+l.length):null})},async startSession(e){let t=s().backend;if(!t)return o("sessions");let i=h(eY(n),e.idempotency_key);if(i)return i;if(!_.default.isAbsolute(e.workspace)||!e4(e.workspace))return r("invalid_input","workspace must be an existing absolute directory.");let a=await e3(n,t,e.workspace);if(!a)return r("unavailable","Cursor did not create a chat.");let d=eY(n),u=Date.now();return d.chats[a]={workspace:e.workspace,title:null,origin:"created",created_at:u,updated_at:u,turns:[]},f(d,t,a,e)},async sendTurn(e){let t=s().backend;if(!t)return o("sessions");let i=eY(n),a=h(i,e.idempotency_key);if(a)return a;let d=i.chats[e.provider_session_id];return d?d.turns.some(e=>i.turns[e]&&"running"===e6(n,i.turns[e]).state)?r("busy","A turn is in flight."):f(i,t,e.provider_session_id,e):r("not_found","Unknown Cursor session.")},async observeTurn(e){for(;;){let t=eY(n).turns[e.provider_turn_id];if(!t)return r("not_found","Unknown Cursor turn.");let s=e6(n,t);if("terminal"===s.state)return i(s.result);if(e.signal?.aborted)return r("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return r("timed_out","observe deadline");await new Promise(e=>setTimeout(e,n.pollMs))}},async cancelTurn(e){let t=eY(n),s=t.turns[e.provider_turn_id];if(!s)return r("not_found","Unknown Cursor turn.");if("terminal"===e6(n,s).state)return i("already_terminal");if(s.cancel_requested_at=Date.now(),eZ(n,t),s.pid){try{process.kill(-s.pid,"SIGTERM")}catch{}let e=s.pid;setTimeout(()=>{try{process.kill(-e,"SIGKILL")}catch{}},2e3).unref()}return i("cancelled")}}}(e)}],73688)},35034,e=>{"use strict";e.s(["SESSION_SHARES_VERSION",()=>p,"SHARE_LIMITS",()=>d,"SessionSharesConfigError",()=>g,"ShareError",()=>l,"createShare",()=>O,"isSlackAudience",()=>v,"loadSessionSharesConfig",()=>I,"parseSessionSharesConfig",()=>k,"resetSessionSharesConfigCache",()=>S,"revokeShare",()=>D,"sessionSharesPath",()=>E,"shareFromTurnEnabled",()=>T,"shareInflight",()=>$,"shareRow",()=>A,"shareState",()=>R,"shareView",()=>q,"sharesCreatedBy",()=>N,"sweepExpiredShares",()=>L]);var t=e.i(22734),n=e.i(14747),r=e.i(54799),i=e.i(62294),s=e.i(52036);e.i(93399);var a=e.i(674);let o=Object.freeze({kind:"service",id:"botmancers-session-share"}),d=Object.freeze({ttl:Object.freeze({min:300,default:3600,max:86400}),turns:Object.freeze({min:1,default:20,max:100}),questionChars:4e3,replyChars:3e3}),u={invalid_request:400,session_not_found:404,share_not_found:404,share_expired:410,share_revoked:410,share_turn_in_progress:409,share_turn_limit:409,audience_not_allowed:403,idempotency_conflict:409};class l extends Error{code;constructor(e,t){super(t),this.name="ShareError",this.code=e}get status(){return u[this.code]}}i.default.exec(`
269
+ CREATE TABLE IF NOT EXISTS session_shares (
270
+ id TEXT PRIMARY KEY CHECK (id LIKE 'shr_%'),
271
+ creator_kind TEXT NOT NULL,
272
+ creator_id TEXT NOT NULL,
273
+ idempotency_key TEXT NOT NULL,
274
+ request_hash TEXT NOT NULL,
275
+ agent_id TEXT NOT NULL,
276
+ session_ref TEXT NOT NULL,
277
+ pin_ref TEXT NOT NULL UNIQUE,
278
+ authority TEXT NOT NULL CHECK (authority = 'ask'),
279
+ audience_kind TEXT NOT NULL CHECK (audience_kind = 'slack'),
280
+ audience_team_id TEXT NOT NULL,
281
+ audience_channel_id TEXT NOT NULL,
282
+ created_via TEXT NOT NULL CHECK (created_via IN ('session_ref', 'current_session')),
283
+ ttl_seconds INTEGER NOT NULL CHECK (ttl_seconds BETWEEN 300 AND 86400),
284
+ max_turns INTEGER NOT NULL CHECK (max_turns BETWEEN 1 AND 100),
285
+ turns_used INTEGER NOT NULL DEFAULT 0 CHECK (turns_used >= 0 AND turns_used <= max_turns),
286
+ state TEXT NOT NULL CHECK (state IN ('active', 'revoked')),
287
+ inflight_key TEXT,
288
+ inflight_owner TEXT,
289
+ inflight_turn_ref TEXT,
290
+ created_at INTEGER NOT NULL,
291
+ expires_at INTEGER NOT NULL,
292
+ revoked_at INTEGER,
293
+ updated_at INTEGER NOT NULL,
294
+ UNIQUE (creator_kind, creator_id, idempotency_key)
295
+ );
296
+ CREATE INDEX IF NOT EXISTS idx_session_shares_creator ON session_shares(creator_kind, creator_id, created_at);
297
+ CREATE TABLE IF NOT EXISTS session_share_events (
298
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
299
+ share_ref TEXT NOT NULL REFERENCES session_shares(id),
300
+ sequence INTEGER NOT NULL,
301
+ type TEXT NOT NULL CHECK (type IN ('created', 'revoked', 'turn_sent', 'turn_refused')),
302
+ turn_ref TEXT,
303
+ code TEXT,
304
+ at INTEGER NOT NULL,
305
+ UNIQUE (share_ref, sequence)
306
+ );
307
+ -- Idempotent turn accounting: a turn is counted once, whatever replays it.
308
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_session_share_turn_sent ON session_share_events(share_ref, turn_ref) WHERE type = 'turn_sent';
309
+ CREATE TRIGGER IF NOT EXISTS trg_session_share_events_no_update BEFORE UPDATE ON session_share_events
310
+ BEGIN
311
+ SELECT RAISE(ABORT, 'session_share_events are append-only');
312
+ END;
313
+ CREATE TRIGGER IF NOT EXISTS trg_session_share_events_no_delete BEFORE DELETE ON session_share_events
314
+ BEGIN
315
+ SELECT RAISE(ABORT, 'session_share_events are append-only');
316
+ END;
317
+ `);let c=(0,r.randomBytes)(9).toString("base64url"),_=new Set,p=1,f=/^T[A-Z0-9]{2,20}$/,h=/^[CG][A-Z0-9]{2,20}$/,m=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;class g extends Error{constructor(e){super(e),this.name="SessionSharesConfigError"}}function y(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function w(e,t,n){let r=Object.keys(e).find(e=>!t.includes(e));if(void 0!==r)throw new g(`${n} has an unknown field "${r}".`)}function v(e){return y(e)&&Object.keys(e).every(e=>["kind","team_id","channel_id"].includes(e))&&"slack"===e.kind&&"string"==typeof e.team_id&&f.test(e.team_id)&&"string"==typeof e.channel_id&&h.test(e.channel_id)}function k(e,t){let n;try{n=JSON.parse(e)}catch{throw new g("The document is not valid JSON.")}if(!y(n))throw new g("The document must be a JSON object.");if(w(n,["version","audiences","agents"],"The document"),n.version!==p)throw new g(`version must be ${p}.`);let r=n.audiences??[],i=n.agents??[];if(!Array.isArray(r))throw new g("audiences must be a list.");if(!Array.isArray(i))throw new g("agents must be a list.");if(r.length>512||i.length>512)throw new g("A list has more than 512 entries.");let s=new Set,a=r.map((e,t)=>{let n=`audiences[${t}]`;if(!y(e))throw new g(`${n} must be an object.`);if(w(e,["kind","team_id","channel_id"],n),!v(e))throw new g(`${n} must be { kind: "slack", team_id: "T…", channel_id: "C…" } with exact ids; wildcards are not allowed.`);let r=`${e.team_id}:${e.channel_id}`;if(s.has(r))throw new g(`${n} repeats an audience.`);return s.add(r),Object.freeze({kind:"slack",team_id:e.team_id,channel_id:e.channel_id})}),o=new Set,d=new Set;return i.forEach((e,n)=>{let r=`agents[${n}]`;if(!y(e))throw new g(`${r} must be an object.`);if(w(e,["agent","share_from_turn"],r),"string"!=typeof e.agent||!m.test(e.agent))throw new g(`${r}.agent must be one Agent id; wildcards are not allowed.`);if(t&&!t.has(e.agent))throw new g(`${r}.agent is not a registered Agent.`);if("boolean"!=typeof e.share_from_turn)throw new g(`${r}.share_from_turn must be true or false.`);if(d.has(e.agent))throw new g(`${r} repeats that Agent.`);d.add(e.agent),e.share_from_turn&&o.add(e.agent)}),{audiences:Object.freeze(a),shareFromTurn:o}}function E(e=process.env){let t=(e.BOTMANCERS_SESSION_SHARES_PATH||"").trim();if(t)return n.default.resolve(t);let r=(0,s.botmancersHome)(e);return r?n.default.join(r,"config/session-shares.json"):null}let b=null;function I(e=process.env){let n,s=E(e);if(!s)return{state:"absent",path:null};try{n=t.default.statSync(s)}catch(e){if("ENOENT"===e.code)return{state:"absent",path:s};return{state:"invalid",path:s,reason:"The document cannot be read."}}let a=new Set(i.default.prepare("SELECT id FROM bots").all().map(e=>e.id)),o=(0,r.createHash)("sha256").update([...a].sort().join("\n"),"utf8").digest("hex"),d=[s,n.ino,n.size,n.mode,n.uid,n.mtimeMs,o].join(":");if(b&&b.key===d)return b.state;let u=function(e,n,r){let i;if(!n.isFile())return{state:"invalid",path:e,reason:"The document is not a regular file."};if("function"==typeof process.getuid&&n.uid!==process.getuid())return{state:"invalid",path:e,reason:"The document must be owned by the user running Botmancers."};if((63&n.mode)!=0)return{state:"invalid",path:e,reason:"The document must not be readable or writable by group or others (chmod 600)."};if(n.size>65536)return{state:"invalid",path:e,reason:"The document exceeds 65536 bytes."};try{i=t.default.readFileSync(e,"utf8")}catch{return{state:"invalid",path:e,reason:"The document cannot be read."}}try{return{state:"loaded",path:e,config:k(i,r)}}catch(t){if(t instanceof g)return{state:"invalid",path:e,reason:t.message};throw t}}(s,n,a);return b={key:d,state:u},u}function S(){b=null}function T(e){let t=I();return"loaded"===t.state&&t.config.shareFromTurn.has(e)}function A(e){if("string"==typeof e&&0!==e.length&&!(e.length>200))return i.default.prepare("SELECT * FROM session_shares WHERE id = ?").get(e)}function R(e,t=Date.now()){return"revoked"===e.state?"revoked":t>=e.expires_at?"expired":"active"}function q(e,t=Date.now()){return{share_ref:e.id,agent_id:e.agent_id,session_ref:e.session_ref,authority:"ask",state:R(e,t),audience:{kind:"slack",team_id:e.audience_team_id,channel_id:e.audience_channel_id},created_via:e.created_via,created_at:e.created_at,expires_at:e.expires_at,revoked_at:e.revoked_at,max_turns:e.max_turns,turns_used:e.turns_used}}function x(e,t,n,r={}){i.default.prepare(`
318
+ INSERT INTO session_share_events (share_ref, sequence, type, turn_ref, code, at)
319
+ SELECT ?, COALESCE(MAX(sequence), 0) + 1, ?, ?, ?, ? FROM session_share_events WHERE share_ref = ?
320
+ `).run(e,t,r.turnRef??null,r.code??null,n,e)}function N(e,t={}){return t.sessionRef?i.default.prepare("SELECT * FROM session_shares WHERE creator_kind = ? AND creator_id = ? AND session_ref = ? ORDER BY created_at DESC, id ASC").all(e.kind,e.id,t.sessionRef):i.default.prepare("SELECT * FROM session_shares WHERE creator_kind = ? AND creator_id = ? ORDER BY created_at DESC, id ASC").all(e.kind,e.id)}function C(e,t,n){let r=e??t.default;if(!Number.isInteger(r)||r<t.min||r>t.max)throw new l("invalid_request",`${n} must be an integer from ${t.min} to ${t.max}.`);return r}async function O(e){var t,n,s,u;let c,_=e.idempotencyKey;if("string"!=typeof _||0===_.trim().length||_.length>200)throw new l("invalid_request","An idempotency key (1-200 characters) is required.");if(!v(e.audience))throw new l("invalid_request",'audience must be { kind: "slack", team_id: "T…", channel_id: "C…" }.');let p=C(e.ttlSeconds,d.ttl,"ttl_seconds"),f=C(e.maxTurns,d.turns,"max_turns"),h=e.createdVia??"session_ref",m=(t=["share",e.sessionRef,e.agentId??null,e.audience.team_id,e.audience.channel_id,p,f,h],(0,r.createHash)("sha256").update(JSON.stringify(t)).digest("hex")),g=(n=e.creator,i.default.prepare("SELECT * FROM session_shares WHERE creator_kind = ? AND creator_id = ? AND idempotency_key = ?").get(n.kind,n.id,_));if(g){if(g.request_hash!==m)throw new l("idempotency_conflict","That idempotency key was used for a different share.");return i.default.transaction(()=>e.onCommit?.(g)).immediate(),{share:g,created:!1}}if(s=e.audience,!("loaded"===(c=I()).state&&c.config.audiences.some(e=>e.team_id===s.team_id&&e.channel_id===s.channel_id)))throw new l("audience_not_allowed","That audience is not on the owner's share allowlist (session-shares.json).");let y=(0,a.sessionOwner)(e.sessionRef);if(!y||e.agentId&&e.agentId!==y)throw new l("session_not_found","No session with that reference.");let w=null,{pin:k}=await (0,a.createPin)({requester:o,sessionRef:e.sessionRef,agentId:y,action:"ask",idempotencyKey:(u=e.creator,`share-${(0,r.createHash)("sha256").update(`${u.kind}:${u.id}
321
+ ${_}`).digest("hex").slice(0,40)}`),onCommit:t=>{let n=Date.now(),s=`shr_${(0,r.randomBytes)(16).toString("base64url")}`;i.default.prepare(`
322
+ INSERT INTO session_shares (
323
+ id, creator_kind, creator_id, idempotency_key, request_hash, agent_id, session_ref, pin_ref, authority,
324
+ audience_kind, audience_team_id, audience_channel_id, created_via, ttl_seconds, max_turns, turns_used, state,
325
+ created_at, expires_at, updated_at
326
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'ask', 'slack', ?, ?, ?, ?, ?, 0, 'active', ?, ?, ?)
327
+ `).run(s,e.creator.kind,e.creator.id,_,m,y,t.session_ref,t.id,e.audience.team_id,e.audience.channel_id,h,p,f,n,n+1e3*p,n),x(s,"created",n),w=A(s),e.onCommit?.(w)}});if(w)return{share:w,created:!0};let E=i.default.prepare("SELECT * FROM session_shares WHERE pin_ref = ?").get(k.id);if(!E)throw new l("idempotency_conflict","That idempotency key is being used by a concurrent request; retry it.");if(E.request_hash!==m)throw new l("idempotency_conflict","That idempotency key was used for a different share.");return i.default.transaction(()=>e.onCommit?.(E)).immediate(),{share:E,created:!1}}function D(e,t={}){return i.default.transaction(()=>{let n=A(e);if(!n)throw new l("share_not_found","No share with that reference.");if("revoked"===n.state)return t.onCommit?.(n),{share:n,replayed:!0};let r=Date.now();i.default.prepare("UPDATE session_shares SET state = 'revoked', revoked_at = ?, updated_at = ? WHERE id = ? AND state = 'active'").run(r,r,n.id),x(n.id,"revoked",r),(0,a.detachPin)(o,n.pin_ref,{now:r});let s=A(n.id);return t.onCommit?.(s),{share:s,replayed:!1}}).immediate()}function L(){let e=Date.now(),t=i.default.prepare(`
328
+ SELECT s.id FROM session_shares s JOIN session_pins p ON p.id = s.pin_ref
329
+ WHERE s.state = 'active' AND s.expires_at <= ? AND p.state = 'attached'
330
+ ORDER BY s.expires_at, s.id LIMIT 500
331
+ `).all(e),n=[];for(let{id:r}of t)i.default.transaction(()=>{let t=A(r);if(!t||"expired"!==R(t,e))return;let{replayed:s}=(0,a.detachPin)(o,t.pin_ref,{now:e});s||(i.serviceAudit.append({principal:o,operation:"shares.expire",capability:"shares:ask",targetKind:"session",targetRef:t.session_ref,agentId:t.agent_id,outcome:"allowed",code:"expired"}),n.push(r))}).immediate();return{swept:n}}function $(e){return e.inflight_turn_ref?"answering":e.inflight_key?e.inflight_owner===c&&_.has(e.id)?"answering":"recovering":"none"}},142,e=>{"use strict";var t=e.i(54799),n=e.i(62294);let r=Object.freeze({maxWakeDepth:3,rootBudget:12,maxContinuations:24,globalConcurrency:4,perTargetConcurrency:1}),i={maxWakeDepth:"BOTMANCERS_WAKE_MAX_DEPTH",rootBudget:"BOTMANCERS_WAKE_ROOT_BUDGET"},s=Object.freeze({kind:"person",id:"local-owner"});function a(e){return!!e&&e.kind===s.kind&&e.id===s.id}let o={owner_required:403,not_found:404,not_pending:409};class d extends Error{code;constructor(e,t){super(t),this.name="WakeSafetyError",this.code=e}get status(){return o[this.code]}}function u(e){if("human_owner"!==e)throw new d("owner_required","Only the owner can allow, deny, or revoke Wake grants.")}function l(e,t){return n.default.prepare("SELECT * FROM wake_grants WHERE caller_agent_id = ? AND target_agent_id = ? AND authority = 'edit' AND revoked_at IS NULL").get(e,t)}function c(e){return n.default.prepare("SELECT * FROM wake_grants WHERE id = ?").get(e)}e.s(["WAKE_SAFETY_VERSION",0,1,"WakeSafetyError",0,d,"activeEditGrant",0,l,"assertOwner",0,u,"categorizeIntakeCaller",0,function(e,t){return t&&["person","bot","service"].includes(t.kind)&&"string"==typeof t.id&&t.id.trim()?"ui"===e?a(t)?"human_owner":"unknown":"api"===e?"api_principal":"unknown":"unknown"},"ensureEditGrant",0,function(e){let r=l(e.callerAgentId,e.targetAgentId);if(r)return{grant:r,created:!1};let i=(0,t.randomUUID)();return n.default.prepare(`
332
+ INSERT INTO wake_grants (id, caller_agent_id, target_agent_id, authority, granted_by_kind, granted_by_id, source_wake_id, created_at)
333
+ VALUES (?, ?, ?, 'edit', ?, ?, ?, ?)
334
+ `).run(i,e.callerAgentId,e.targetAgentId,e.grantedBy.kind,e.grantedBy.id,e.sourceWakeId,e.now),{grant:c(i),created:!0}},"isOwnerPrincipal",0,a,"needsEditGrant",0,function(e){return"implementation"===e||"revision"===e},"revokeWakeGrant",0,function(e,r,i=Date.now()){return u(r.category),n.default.transaction(()=>{let s=c(e);if(!s)throw new d("not_found",`No Wake grant ${e}.`);if(null!==s.revoked_at)return{grant:s,revoked:!1};n.default.prepare("UPDATE wake_grants SET revoked_at = ?, revoked_by_kind = ?, revoked_by_id = ? WHERE id = ? AND revoked_at IS NULL").run(i,r.principal.kind,r.principal.id,e);let a=s.source_wake_id?n.default.prepare("SELECT work_request_id FROM wakes WHERE id = ?").get(s.source_wake_id):void 0;return a?.work_request_id&&n.default.prepare(`
335
+ INSERT INTO engine_events (id, request_id, sequence, attempt_id, type, data, created_at)
336
+ SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, NULL, 'grant_revoked', ?, ? FROM engine_events WHERE request_id = ?
337
+ `).run((0,t.randomUUID)(),a.work_request_id,JSON.stringify({grant_id:s.id,wake_id:s.source_wake_id,caller_agent_id:s.caller_agent_id,target_agent_id:s.target_agent_id,decided_by:{kind:r.principal.kind,id:r.principal.id}}),i,a.work_request_id),{grant:c(e),revoked:!0}}).immediate()},"wakeSafetyLimits",0,function(e=process.env){let t=(t,n)=>{let s=e[i[t]]?.trim(),a=s&&/^\d+$/.test(s)?Number(s):NaN;return Number.isSafeInteger(a)&&a>=n&&a<r[t]?a:r[t]},n=t("rootBudget",1);return{...r,maxWakeDepth:t("maxWakeDepth",0),rootBudget:n,maxContinuations:2*n}}])}];
338
+
339
+ //# sourceMappingURL=lib_0v4d9w0._.js.map