botmancers 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/README.md +17 -15
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +2 -2
  7. package/app/.next/server/app/_global-error.html +1 -1
  8. package/app/.next/server/app/_global-error.rsc +1 -1
  9. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/_not-found.html +1 -1
  15. package/app/.next/server/app/_not-found.rsc +2 -2
  16. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  18. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/app/.next/server/app/agents/[id]/activity/page.js.nft.json +1 -1
  20. package/app/.next/server/app/agents/[id]/activity/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/agents/[id]/config/page.js.nft.json +1 -1
  22. package/app/.next/server/app/agents/[id]/config/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/agents/[id]/conversations/[conversationId]/page.js.nft.json +1 -1
  24. package/app/.next/server/app/agents/[id]/conversations/[conversationId]/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/agents/[id]/conversations/page.js.nft.json +1 -1
  26. package/app/.next/server/app/agents/[id]/conversations/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  28. package/app/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/agents/[id]/sessions/page.js.nft.json +1 -1
  30. package/app/.next/server/app/agents/[id]/sessions/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/agents/[id]/slack/page.js.nft.json +1 -1
  32. package/app/.next/server/app/agents/[id]/slack/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/api/bots/[id]/activity/route.js.nft.json +1 -1
  34. package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
  35. package/app/.next/server/app/api/bots/[id]/conversations/[conversationId]/route.js +3 -3
  36. package/app/.next/server/app/api/bots/[id]/conversations/[conversationId]/route.js.nft.json +1 -1
  37. package/app/.next/server/app/api/bots/[id]/conversations/route.js +3 -3
  38. package/app/.next/server/app/api/bots/[id]/conversations/route.js.nft.json +1 -1
  39. package/app/.next/server/app/api/bots/[id]/overview/route.js +2 -2
  40. package/app/.next/server/app/api/bots/[id]/overview/route.js.nft.json +1 -1
  41. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js +2 -2
  42. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js.nft.json +1 -1
  43. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -1
  44. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js +2 -2
  45. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js.nft.json +1 -1
  46. package/app/.next/server/app/api/bots/[id]/sessions/route.js +2 -2
  47. package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -1
  48. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js +1 -1
  49. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js.nft.json +1 -1
  50. package/app/.next/server/app/api/bots/[id]/share-policy/route.js +2 -2
  51. package/app/.next/server/app/api/bots/[id]/share-policy/route.js.nft.json +1 -1
  52. package/app/.next/server/app/api/bots/[id]/skill/route.js.nft.json +1 -1
  53. package/app/.next/server/app/api/bots/availability/route.js.nft.json +1 -1
  54. package/app/.next/server/app/api/bots/delete-preview/route.js.nft.json +1 -1
  55. package/app/.next/server/app/api/bots/import/route.js.nft.json +1 -1
  56. package/app/.next/server/app/api/bots/manage/route.js.nft.json +1 -1
  57. package/app/.next/server/app/api/bots/name-migrations/route.js.nft.json +1 -1
  58. package/app/.next/server/app/api/bots/route.js +4 -4
  59. package/app/.next/server/app/api/bots/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/conversations/[id]/approve/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/conversations/[id]/deny/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/conversations/[id]/draft/route.js.nft.json +1 -1
  63. package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/conversations/[id]/messages/route.js +3 -3
  65. package/app/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/conversations/[id]/stop/route.js +4 -4
  68. package/app/.next/server/app/api/conversations/[id]/stop/route.js.nft.json +1 -1
  69. package/app/.next/server/app/api/conversations/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js +2 -2
  71. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/exchanges/[id]/route.js +1 -1
  73. package/app/.next/server/app/api/exchanges/[id]/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/exchanges/route.js +4 -4
  75. package/app/.next/server/app/api/exchanges/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/files/[name]/route.js.nft.json +1 -1
  77. package/app/.next/server/app/api/groups/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/health/route.js +3 -3
  79. package/app/.next/server/app/api/health/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/mcp/route.js.nft.json +1 -1
  81. package/app/.next/server/app/api/messages/[id]/between/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/runtime-capacity/route.js.nft.json +1 -1
  83. package/app/.next/server/app/api/runtime-connections/route.js.nft.json +1 -1
  84. package/app/.next/server/app/api/service-grants/route.js +1 -1
  85. package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js +2 -2
  87. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/shares/route.js +2 -2
  89. package/app/.next/server/app/api/shares/route.js.nft.json +1 -1
  90. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +5 -5
  91. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +5 -5
  93. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js +2 -2
  95. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
  96. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js +5 -5
  97. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/v0/agents/[agentId]/route.js +5 -5
  99. package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +5 -5
  101. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +5 -5
  103. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/v0/agents/route.js +5 -5
  105. package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/v0/capabilities/route.js +5 -5
  107. package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/v0/conversations/[id]/route.js +2 -2
  109. package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +5 -5
  111. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/v0/exchanges/[id]/route.js +5 -5
  113. package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/v0/exchanges/route.js +5 -5
  115. package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/v0/mcp/route.js +4 -4
  117. package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js +5 -5
  119. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js +5 -5
  121. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js +5 -5
  123. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/v0/requests/[id]/route.js +2 -2
  125. package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +5 -5
  127. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js +5 -5
  129. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js.nft.json +1 -1
  130. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js +5 -5
  131. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js.nft.json +1 -1
  132. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js +5 -5
  133. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  134. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js +5 -5
  135. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js.nft.json +1 -1
  136. package/app/.next/server/app/api/v0/shares/current/route.js +5 -5
  137. package/app/.next/server/app/api/v0/shares/current/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/v0/shares/route.js +5 -5
  139. package/app/.next/server/app/api/v0/shares/route.js.nft.json +1 -1
  140. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +2 -2
  141. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
  142. package/app/.next/server/app/api/wakes/[id]/decision/route.js +2 -2
  143. package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
  144. package/app/.next/server/app/api/wakes/[id]/retry/route.js +2 -2
  145. package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
  146. package/app/.next/server/app/bots/[id]/config/page.js.nft.json +1 -1
  147. package/app/.next/server/app/bots/[id]/config/page_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/exchanges/page.js.nft.json +1 -1
  149. package/app/.next/server/app/exchanges/page_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/exchanges.html +1 -1
  151. package/app/.next/server/app/exchanges.rsc +3 -3
  152. package/app/.next/server/app/exchanges.segments/_full.segment.rsc +3 -3
  153. package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +2 -2
  154. package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +3 -3
  155. package/app/.next/server/app/index.html +1 -1
  156. package/app/.next/server/app/index.rsc +3 -3
  157. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  158. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  159. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  160. package/app/.next/server/app/page.js.nft.json +1 -1
  161. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/settings/page.js.nft.json +1 -1
  163. package/app/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/settings.html +1 -1
  165. package/app/.next/server/app/settings.rsc +3 -3
  166. package/app/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  167. package/app/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  168. package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
  169. package/app/.next/server/app/threads/[id]/route.js.nft.json +1 -1
  170. package/app/.next/server/chunks/[root-of-the-server]__0aincj4._.js +1 -1
  171. package/app/.next/server/chunks/[root-of-the-server]__0anfwiu._.js +1 -1
  172. package/app/.next/server/chunks/[root-of-the-server]__0fku-bw._.js +1 -1
  173. package/app/.next/server/chunks/[root-of-the-server]__1273j55._.js +52 -0
  174. package/app/.next/server/chunks/[root-of-the-server]__13wghn3._.js +4 -4
  175. package/app/.next/server/chunks/[root-of-the-server]__1fdy1d8._.js +3 -0
  176. package/app/.next/server/chunks/[root-of-the-server]__1n7hlu8._.js +46 -0
  177. package/app/.next/server/chunks/_0061c2q._.js +1 -1
  178. package/app/.next/server/chunks/_031id45._.js +3 -0
  179. package/app/.next/server/chunks/_04o493a._.js +3 -0
  180. package/app/.next/server/chunks/_06yp-l-._.js +3 -0
  181. package/app/.next/server/chunks/_0bl1uw-._.js +3 -0
  182. package/app/.next/server/chunks/_0gh03eo._.js +3 -0
  183. package/app/.next/server/chunks/_0h0j5ta._.js +3 -0
  184. package/app/.next/server/chunks/_0hzb8hh._.js +3 -0
  185. package/app/.next/server/chunks/_0oodw7g._.js +3 -0
  186. package/app/.next/server/chunks/_0owd_4q._.js +3 -0
  187. package/app/.next/server/chunks/_0venewj._.js +3 -0
  188. package/app/.next/server/chunks/_0wzia1p._.js +3 -0
  189. package/app/.next/server/chunks/_1-5mthb._.js +1 -1
  190. package/app/.next/server/chunks/_1-8493l._.js +3 -0
  191. package/app/.next/server/chunks/_1a0er16._.js +3 -3
  192. package/app/.next/server/chunks/_1bvoyii._.js +3 -0
  193. package/app/.next/server/chunks/_1gyq3w2._.js +3 -0
  194. package/app/.next/server/chunks/_1j3c311._.js +3 -0
  195. package/app/.next/server/chunks/{_1ey6l4p._.js → _1k74ggt._.js} +2 -2
  196. package/app/.next/server/chunks/_1l_t4_r._.js +3 -0
  197. package/app/.next/server/chunks/_1lac7c3._.js +3 -0
  198. package/app/.next/server/chunks/_1mlmzwb._.js +3 -0
  199. package/app/.next/server/chunks/_1rg79tr._.js +3 -0
  200. package/app/.next/server/chunks/_1s5qnlr._.js +3 -0
  201. package/app/.next/server/chunks/{_1x4dqzv._.js → _1u-wiq_._.js} +2 -2
  202. package/app/.next/server/chunks/_1uxmsh3._.js +3 -3
  203. package/app/.next/server/chunks/_1xaqb38._.js +3 -0
  204. package/app/.next/server/chunks/_1zw-w5h._.js +3 -0
  205. package/app/.next/server/chunks/lib_0-opbv7._.js +30 -30
  206. package/app/.next/server/chunks/lib_0aejojj._.js +30 -30
  207. package/app/.next/server/chunks/lib_0al5wbc._.js +30 -30
  208. package/app/.next/server/chunks/lib_0il0ml1._.js +30 -30
  209. package/app/.next/server/chunks/lib_0iujsdg._.js +30 -30
  210. package/app/.next/server/chunks/lib_15a9ejf._.js +35 -28
  211. package/app/.next/server/chunks/lib_19pzc33._.js +35 -28
  212. package/app/.next/server/chunks/lib_1a4ucxv._.js +30 -30
  213. package/app/.next/server/chunks/lib_1dehbst._.js +30 -30
  214. package/app/.next/server/chunks/lib_1h919zb._.js +3 -0
  215. package/app/.next/server/chunks/lib_1z4vnh4._.js +30 -30
  216. package/app/.next/server/chunks/lib_1z7d95m._.js +35 -28
  217. package/app/.next/server/chunks/lib_db_ts_1ttuckb._.js +9 -2
  218. package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +1 -1
  219. package/app/.next/server/chunks/lib_service-api_ts_18eok4w._.js +5 -5
  220. package/app/.next/server/chunks/lib_slack-runtime_ts_0fgsejy._.js +6 -6
  221. package/app/.next/server/chunks/ssr/_00qrupp._.js +3 -0
  222. package/app/.next/server/chunks/ssr/_01ngpwj._.js +1 -1
  223. package/app/.next/server/chunks/ssr/_0d7gv3q._.js +3 -0
  224. package/app/.next/server/chunks/ssr/_0iywd5g._.js +1 -1
  225. package/app/.next/server/chunks/ssr/_0mxifu3._.js +1 -1
  226. package/app/.next/server/chunks/ssr/_0u7urta._.js +1 -1
  227. package/app/.next/server/chunks/ssr/app_agents_[id]_0sr4fdg._.js +1 -1
  228. package/app/.next/server/chunks/ssr/app_agents_[id]_activity_AgentActivityPage_tsx_042-590._.js +1 -1
  229. package/app/.next/server/chunks/ssr/app_agents_[id]_config_page_tsx_1f_gu1l._.js +1 -1
  230. package/app/.next/server/chunks/ssr/app_agents_[id]_sessions_page_tsx_0tfup-2._.js +3 -3
  231. package/app/.next/server/chunks/ssr/app_agents_[id]_slack_AgentSlackPage_tsx_20njhs1._.js +1 -1
  232. package/app/.next/server/chunks/ssr/app_page_tsx_0pxmutw._.js +1 -1
  233. package/app/.next/server/chunks/ssr/lib_0pfn9gs._.js +1 -1
  234. package/app/.next/server/chunks/ssr/lib_agent-registration-ui_ts_1z582mm._.js +1 -1
  235. package/app/.next/server/chunks/ssr/lib_exchange-view_ts_1a4q9ju._.js +1 -1
  236. package/app/.next/server/chunks/ssr/lib_share-view_ts_08psw5o._.js +1 -1
  237. package/app/.next/server/middleware-build-manifest.js +3 -3
  238. package/app/.next/server/pages/404.html +1 -1
  239. package/app/.next/server/pages/500.html +1 -1
  240. package/app/.next/server/server-reference-manifest.js +1 -1
  241. package/app/.next/server/server-reference-manifest.json +1 -1
  242. package/app/.next/static/chunks/{2dtkykrnob8wk.js → 00pca1oa16xc5.js} +1 -1
  243. package/app/.next/static/chunks/{3x56k5qa012au.js → 0apccyvpyjlo7.js} +1 -1
  244. package/app/.next/static/chunks/{04nfr73lkk7pz.js → 0l9r-x310007w.js} +1 -1
  245. package/app/.next/static/chunks/{0eqgs3167zj2j.js → 0xo3nwo_nscvf.js} +1 -1
  246. package/app/.next/static/chunks/{326jto9l-m8vj.js → 0z_bq7h1mwcf3.js} +4 -4
  247. package/app/.next/static/chunks/18btj4qlun8o7.js +1 -0
  248. package/app/.next/static/chunks/{2cc4uzbhs_v23.js → 1k8e6j67zksws.js} +1 -1
  249. package/app/.next/static/chunks/{0h567k13e53r-.js → 1y9hc8qm0hqds.js} +1 -1
  250. package/app/.next/static/chunks/{2ebpfmg4vni8e.js → 2wbcr5n_vcynr.js} +1 -1
  251. package/app/.next/static/chunks/3_lwv2zgy_-bw.css +3 -0
  252. package/app/.next/static/chunks/3a_ffnuma49te.js +1 -0
  253. package/app/.next/static/chunks/{3whw2-l4a2sli.js → 3fm68xa8a4-es.js} +1 -1
  254. package/app/.next/static/chunks/{0cjh4u-f7mlwd.js → 3gw1ytgjq4pxu.js} +1 -1
  255. package/app/.next/static/chunks/3wlqn3gd_jv_r.js +1 -0
  256. package/app/.next/static/chunks/3xjoca0z2onuc.js +1 -0
  257. package/app/BUILD_INFO.json +2 -2
  258. package/app/package.json +1 -1
  259. package/app/server.js +1 -1
  260. package/dist/contract.js +2 -2
  261. package/package.json +1 -1
  262. package/schemas/botmancers.mcp.v2.tools.json +48 -83
  263. package/skills/botmancers-collaboration/SKILL.md +10 -10
  264. package/skills/botmancers-collaboration/references/workflows.md +20 -14
  265. package/app/.next/server/chunks/[root-of-the-server]__07q5mnr._.js +0 -3
  266. package/app/.next/server/chunks/[root-of-the-server]__1280ke1._.js +0 -46
  267. package/app/.next/server/chunks/[root-of-the-server]__1jxwu9_._.js +0 -52
  268. package/app/.next/server/chunks/_04e2bgj._.js +0 -3
  269. package/app/.next/server/chunks/_05po7b4._.js +0 -3
  270. package/app/.next/server/chunks/_06sxx0e._.js +0 -3
  271. package/app/.next/server/chunks/_0ar2ooe._.js +0 -3
  272. package/app/.next/server/chunks/_0fmotaz._.js +0 -3
  273. package/app/.next/server/chunks/_0kpfto_._.js +0 -3
  274. package/app/.next/server/chunks/_0lm6uis._.js +0 -3
  275. package/app/.next/server/chunks/_0mpu5tl._.js +0 -3
  276. package/app/.next/server/chunks/_0u9cfq9._.js +0 -3
  277. package/app/.next/server/chunks/_0ul8k7g._.js +0 -3
  278. package/app/.next/server/chunks/_1-60d3o._.js +0 -3
  279. package/app/.next/server/chunks/_11-q8k1._.js +0 -3
  280. package/app/.next/server/chunks/_133y3b0._.js +0 -3
  281. package/app/.next/server/chunks/_167960a._.js +0 -3
  282. package/app/.next/server/chunks/_17vgjlt._.js +0 -3
  283. package/app/.next/server/chunks/_1amx9_4._.js +0 -3
  284. package/app/.next/server/chunks/_1b01v-_._.js +0 -3
  285. package/app/.next/server/chunks/_1c-g4gq._.js +0 -3
  286. package/app/.next/server/chunks/_1ess5if._.js +0 -3
  287. package/app/.next/server/chunks/_1i0zod4._.js +0 -3
  288. package/app/.next/server/chunks/_1nlg4x_._.js +0 -3
  289. package/app/.next/server/chunks/_1z0qbzc._.js +0 -3
  290. package/app/.next/server/chunks/lib_0i8cm07._.js +0 -3
  291. package/app/.next/server/chunks/ssr/_0g3y1u9._.js +0 -3
  292. package/app/.next/server/chunks/ssr/app_agents_[id]_conversations_page_tsx_15zl_c8._.js +0 -3
  293. package/app/.next/static/chunks/10i-rrea371m2.js +0 -1
  294. package/app/.next/static/chunks/17qi6hcgg0nlz.css +0 -3
  295. package/app/.next/static/chunks/1ypwptc0fsn4w.js +0 -1
  296. package/app/.next/static/chunks/2myfan3i8z-jy.js +0 -1
  297. package/app/.next/static/chunks/34v8aumua0x5n.js +0 -1
  298. /package/app/.next/static/{92gsyY5d-nMkxJ7iQxKkY → 45V8A9u4-Y-aZNxovpZCu}/_buildManifest.js +0 -0
  299. /package/app/.next/static/{92gsyY5d-nMkxJ7iQxKkY → 45V8A9u4-Y-aZNxovpZCu}/_clientMiddlewareManifest.js +0 -0
  300. /package/app/.next/static/{92gsyY5d-nMkxJ7iQxKkY → 45V8A9u4-Y-aZNxovpZCu}/_ssgManifest.js +0 -0
@@ -1590,7 +1590,14 @@ module.exports=[62294,18966,64974,11626,40596,28420,35613,30098,e=>{"use strict"
1590
1590
  BEGIN
1591
1591
  SELECT RAISE(ABORT, 'session_pin_events are append-only');
1592
1592
  END;
1593
- `)}}];function ek(e){return e.prepare("PRAGMA table_info(bots)").all().some(e=>"runtime_connection_id"===e.name)?"COALESCE(bot.runtime_connection_id, 'rc-local-' || b.adapter)":"'rc-local-' || b.adapter"}let ef=new WeakMap;function eh(e){let t=ef.get(e);if(!t){t=new Set,ef.set(e,t);let n=t;e.function("engine_event_purge_authorized",{deterministic:!1},e=>"string"==typeof e&&n.has(e)?1:0)}return t}function ew(e,t={}){eh(e),e.exec(`
1593
+ `)}},{version:21,name:"wake_edit_approval_reason_code",up:e=>{let t=["invalid_envelope","invalid_reference","unsupported_policy","target_is_group","target_not_found","target_ambiguous","target_unconfigured","target_unavailable","limit_exceeded","reviewer_not_independent","depth_exceeded","root_budget_exhausted","untracked_lineage","grant_denied","edit_approval_required"],n=t.map(()=>"?").join(", "),i=e.prepare(`SELECT id, work_request_id, reason FROM wakes WHERE reason_code IS NOT NULL AND reason_code NOT IN (${n})`).all(...t);if(0===i.length)return;let r=Date.now(),a=e.prepare("UPDATE wakes SET reason_code = 'edit_approval_required', updated_at = ? WHERE id = ?"),o=e.prepare(`
1594
+ UPDATE work_requests SET state_reason = 'edit_approval_required' || substr(state_reason, instr(state_reason, ':')),
1595
+ version = version + 1, updated_at = ?
1596
+ WHERE id = ? AND state = 'blocked' AND instr(state_reason, ':') > 0
1597
+ `),_=e.prepare(`
1598
+ INSERT INTO engine_events (id, request_id, sequence, attempt_id, type, data, created_at)
1599
+ SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, NULL, 'wake_reblocked', ?, ? FROM engine_events WHERE request_id = ?
1600
+ `);for(let e of i)if(a.run(r,e.id),e.work_request_id&&1===o.run(r,e.work_request_id).changes){let t=JSON.stringify({reason_code:"edit_approval_required",reason:e.reason});_.run((0,s.randomUUID)(),e.work_request_id,t,r,e.work_request_id)}}}];function ek(e){return e.prepare("PRAGMA table_info(bots)").all().some(e=>"runtime_connection_id"===e.name)?"COALESCE(bot.runtime_connection_id, 'rc-local-' || b.adapter)":"'rc-local-' || b.adapter"}let ef=new WeakMap;function eh(e){let t=ef.get(e);if(!t){t=new Set,ef.set(e,t);let n=t;e.function("engine_event_purge_authorized",{deterministic:!1},e=>"string"==typeof e&&n.has(e)?1:0)}return t}function ew(e,t={}){eh(e),e.exec(`
1594
1601
  CREATE TABLE IF NOT EXISTS schema_migrations (
1595
1602
  version INTEGER PRIMARY KEY,
1596
1603
  name TEXT NOT NULL,
@@ -1651,7 +1658,7 @@ module.exports=[62294,18966,64974,11626,40596,28420,35613,30098,e=>{"use strict"
1651
1658
  UNION SELECT destination_request_id AS id FROM session_exchanges WHERE id IN ${d} AND destination_request_id IS NOT NULL`,_(r),_(r))),u=o(i,n(`SELECT id FROM work_requests WHERE parent_request_id IN ${d} OR root_request_id IN ${d}`,_(i),_(i))),c=o(i,n(`SELECT request_id AS id FROM work_attempts WHERE id IN ${d}`,_(a))),l=o(a,n(`SELECT id FROM work_attempts WHERE request_id IN ${d} OR resumed_session_binding_id IN ${d}`,_(i),_(s))),T=o(s,n(`SELECT id FROM session_bindings WHERE request_id IN ${d} OR source_attempt_id IN ${d}`,_(i),_(a)));if(!e&&!E&&!u&&!c&&!l&&!T)break}(function(e,t,...n){let i=e.prepare(`SELECT id FROM session_exchanges WHERE ${t}`).all(...n).map(e=>e.id);if(0===i.length)return;let r=eh(e);for(let e of i)r.add(e);try{e.prepare("DELETE FROM session_exchange_events WHERE exchange_id IN (SELECT value FROM json_each(?))").run(JSON.stringify(i))}finally{r.clear()}e.prepare("DELETE FROM session_exchanges WHERE id IN (SELECT value FROM json_each(?))").run(JSON.stringify(i))})(e,`id IN ${d}`,_(r)),e.prepare(`DELETE FROM conversation_events WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM finalizations WHERE implementation_request_id IN ${d} OR review_request_id IN ${d} OR decision_request_id IN ${d}`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM candidate_manifests WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM attempt_finalization_baselines WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM conversation_projection_cursors WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM wake_safety_decisions WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM dispatch_leases WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM attempt_launch_intents WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM dispatch_attention WHERE request_id IN ${d}`).run(_(i));let E=eh(e);for(let e of i)E.add(e);try{e.prepare(`DELETE FROM engine_events WHERE request_id IN ${d}`).run(_(i))}finally{E.clear()}for(eB(e,`origin = 'binding' AND binding_id IN ${d}`,_(s)),e.prepare(`UPDATE provider_sessions SET binding_id = NULL WHERE binding_id IN ${d}`).run(_(s)),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare(`DELETE FROM usage_samples WHERE attempt_id IN ${d}`).run(_(a));a.size>0||s.size>0;){let t=n(`SELECT id FROM session_bindings WHERE id IN ${d}
1652
1659
  AND NOT EXISTS (SELECT 1 FROM work_attempts a WHERE a.resumed_session_binding_id = session_bindings.id)`,_(s));for(let n of t)e.prepare("DELETE FROM session_bindings WHERE id = ?").run(n),s.delete(n);let i=n(`SELECT id FROM work_attempts WHERE id IN ${d}
1653
1660
  AND NOT EXISTS (SELECT 1 FROM session_bindings b WHERE b.source_attempt_id = work_attempts.id)`,_(a));for(let t of i)e.prepare("DELETE FROM work_attempts WHERE id = ?").run(t),a.delete(t);if(0===t.length&&0===i.length)throw Error("Engine records could not be removed: unexpected attempt/binding reference cycle.")}for(let t of(e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (SELECT id FROM wakes WHERE work_request_id IN ${d} OR parent_request_id IN ${d} OR root_request_id IN ${d})`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM wakes WHERE work_request_id IN ${d} OR parent_request_id IN ${d} OR root_request_id IN ${d}`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM terminal_followups WHERE request_id IN ${d}`).run(_(i)),n(`SELECT id FROM work_requests WHERE id IN ${d} ORDER BY depth DESC`,_(i))))e.prepare("DELETE FROM work_requests WHERE id = ?").run(t)}function eB(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())return;let i=JSON.stringify(e.prepare(`SELECT id FROM provider_sessions WHERE ${t}`).all(...n).map(e=>e.id));e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_session_events WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_session_turns WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_sessions WHERE id IN (SELECT value FROM json_each(?))").run(i)}function eM(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'session_pins'").get())return;let i=JSON.stringify(e.prepare(`SELECT id FROM session_pins WHERE ${t}`).all(...n).map(e=>e.id));e.prepare("DELETE FROM session_pin_events WHERE pin_id IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM session_pin_turns WHERE pin_id IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM session_pins WHERE id IN (SELECT value FROM json_each(?))").run(i)}function eK(e,t){e.prepare("DELETE FROM conversation_intakes WHERE conversation_id = ?").run(t),e.prepare("DELETE FROM delegation_chains WHERE conversation_id = ?").run(t),e.prepare("DELETE FROM conversation_events WHERE conversation_id = ? AND request_id IS NULL").run(t),e.prepare("DELETE FROM wakes WHERE source_conversation_id = ?").run(t),eM(e,"conversation_id = ?",t),eH(e,{requests:"SELECT id FROM work_requests WHERE source_conversation_id = ?",bindings:"SELECT id FROM session_bindings WHERE conversation_id = ?",exchanges:"origin_conversation_id = ? OR destination_conversation_id = ?",arg:t})}function eY(e,t){e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (
1654
- SELECT id FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL))`).run(t,t),e.prepare("DELETE FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL)").run(t,t),e.prepare("DELETE FROM wake_grants WHERE caller_agent_id = ? OR target_agent_id = ?").run(t,t),eM(e,"agent_id = ?",t),eB(e,"agent_id = ?",t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE agent_id = ?").run(t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_session_events'").get()&&e.prepare("DELETE FROM provider_session_events WHERE agent_id = ?").run(t),eH(e,{requests:"SELECT id FROM work_requests WHERE target_agent_id = ?",bindings:"SELECT id FROM session_bindings WHERE agent_id = ?",exchanges:"source_agent_id = ? OR destination_agent_id = ?",arg:t})}function eP(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function e$(e){return"string"==typeof e&&e.length>0?e:null}function ez(e,t){return t?`${e}: ${t}`:e}function ej(e,t,n,i){let r="grant_required"===t,s=r?"needs your approval for edit work":n;return{kind:"wake_blocked",attemptId:null,text:s?`Wake blocked: ${e} — ${s}`:`Wake blocked: ${e}`,data:{...i,target_name:e,reason_code:t,reason:n,actions:r?["allow","deny"]:[]}}}e.s(["EXCHANGE_LIMITS",0,eR,"EXCHANGE_STATES",0,eT,"EXCHANGE_TERMINAL_STATES",0,ep,"EXCHANGE_TRANSITIONS",0,eN,"EngineStoreError",0,eI,"TERMINAL_STATES",0,eL,"UI_TURN_INTERRUPTED",0,eD,"UI_TURN_INTERRUPTED_MESSAGE",0,eF,"UI_TURN_REQUESTER",0,eb,"createEngineStore",0,eG,"deleteEngineRecordsForAgent",0,eY,"deleteEngineRecordsForConversation",0,eK,"migrateEngineSchema",0,ew,"uiTurnExecutionPolicy",0,eU],35613);let eJ=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eQ=/^[a-z][a-z0-9_.:-]{0,63}$/;function eV(e){return null==e||""===e?null:eJ.test(e)?e:"[invalid]"}function eZ(e,t){return e&&eQ.test(e)?e:t}let e0="agent_name_conflict";function e1(e){return String(e??"").trim()}function e2(e){return e1(e).normalize("NFC").toLowerCase().normalize("NFC")}function e6(e){return`An Agent named "${e1(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}class e4 extends Error{code=e0;requestedName;conflictingAgentId;constructor(e,t){super(e6(e)),this.name="AgentNameConflictError",this.requestedName=e1(e),this.conflictingAgentId=t}}function e3(e){let t=[...e].sort((e,t)=>e.created_at-t.created_at||(e.id<t.id?-1:+(e.id>t.id))),n=new Map,i=[],r=[];for(let e of t){let t=e2(e.name);if(n.has(t)){i.push(e);continue}n.set(t,e.id),e.name_key!==t&&r.push({id:e.id,name:e.name,name_key:t})}let s=[];for(let e of i){let t=e2(e.name),i=e1(e.name)||"Agent",a=2;for(;n.has(e2(`${i}-${a}`));)a++;let o=`${i}-${a}`,_=e2(o);n.set(_,e.id),r.push({id:e.id,name:o,name_key:_}),s.push({bot_id:e.id,previous_name:e.name,new_name:o,name_key:t,kept_bot_id:n.get(t)})}return{updates:r,renames:s}}e.s(["AgentNameConflictError",0,e4,"agentDisplayName",0,e1,"agentNameConflictBody",0,function(e,t="name"){return{error:e.message,code:e0,field:t,name:e.requestedName,conflicting_agent_id:e.conflictingAgentId}},"agentNameConflictMessage",0,e6,"agentNameKey",0,e2,"planNameMigration",0,e3],30098);let e9=(0,e.i(52036).dbPath)();":memory:"!==e9&&i.default.mkdirSync(r.default.dirname(r.default.resolve(e9)),{recursive:!0});let e5=new n.default(e9);e5.pragma("journal_mode = WAL"),e5.exec(`
1661
+ SELECT id FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL))`).run(t,t),e.prepare("DELETE FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL)").run(t,t),e.prepare("DELETE FROM wake_grants WHERE caller_agent_id = ? OR target_agent_id = ?").run(t,t),eM(e,"agent_id = ?",t),eB(e,"agent_id = ?",t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE agent_id = ?").run(t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_session_events'").get()&&e.prepare("DELETE FROM provider_session_events WHERE agent_id = ?").run(t),eH(e,{requests:"SELECT id FROM work_requests WHERE target_agent_id = ?",bindings:"SELECT id FROM session_bindings WHERE agent_id = ?",exchanges:"source_agent_id = ? OR destination_agent_id = ?",arg:t})}function eP(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function e$(e){return"string"==typeof e&&e.length>0?e:null}function ez(e,t){return t?`${e}: ${t}`:e}function ej(e,t,n,i){let r="edit_approval_required"===t,s=r?"needs your approval for edit work":n;return{kind:"wake_blocked",attemptId:null,text:s?`Wake blocked: ${e} — ${s}`:`Wake blocked: ${e}`,data:{...i,target_name:e,reason_code:t,reason:n,actions:r?["allow","deny"]:[]}}}e.s(["EXCHANGE_LIMITS",0,eR,"EXCHANGE_STATES",0,eT,"EXCHANGE_TERMINAL_STATES",0,ep,"EXCHANGE_TRANSITIONS",0,eN,"EngineStoreError",0,eI,"TERMINAL_STATES",0,eL,"UI_TURN_INTERRUPTED",0,eD,"UI_TURN_INTERRUPTED_MESSAGE",0,eF,"UI_TURN_REQUESTER",0,eb,"createEngineStore",0,eG,"deleteEngineRecordsForAgent",0,eY,"deleteEngineRecordsForConversation",0,eK,"migrateEngineSchema",0,ew,"uiTurnExecutionPolicy",0,eU],35613);let eJ=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eQ=/^[a-z][a-z0-9_.:-]{0,63}$/;function eV(e){return null==e||""===e?null:eJ.test(e)?e:"[invalid]"}function eZ(e,t){return e&&eQ.test(e)?e:t}let e0="agent_name_conflict";function e1(e){return String(e??"").trim()}function e2(e){return e1(e).normalize("NFC").toLowerCase().normalize("NFC")}function e6(e){return`An Agent named "${e1(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}class e4 extends Error{code=e0;requestedName;conflictingAgentId;constructor(e,t){super(e6(e)),this.name="AgentNameConflictError",this.requestedName=e1(e),this.conflictingAgentId=t}}function e3(e){let t=[...e].sort((e,t)=>e.created_at-t.created_at||(e.id<t.id?-1:+(e.id>t.id))),n=new Map,i=[],r=[];for(let e of t){let t=e2(e.name);if(n.has(t)){i.push(e);continue}n.set(t,e.id),e.name_key!==t&&r.push({id:e.id,name:e.name,name_key:t})}let s=[];for(let e of i){let t=e2(e.name),i=e1(e.name)||"Agent",a=2;for(;n.has(e2(`${i}-${a}`));)a++;let o=`${i}-${a}`,_=e2(o);n.set(_,e.id),r.push({id:e.id,name:o,name_key:_}),s.push({bot_id:e.id,previous_name:e.name,new_name:o,name_key:t,kept_bot_id:n.get(t)})}return{updates:r,renames:s}}e.s(["AgentNameConflictError",0,e4,"agentDisplayName",0,e1,"agentNameConflictBody",0,function(e,t="name"){return{error:e.message,code:e0,field:t,name:e.requestedName,conflicting_agent_id:e.conflictingAgentId}},"agentNameConflictMessage",0,e6,"agentNameKey",0,e2,"planNameMigration",0,e3],30098);let e9=(0,e.i(52036).dbPath)();":memory:"!==e9&&i.default.mkdirSync(r.default.dirname(r.default.resolve(e9)),{recursive:!0});let e5=new n.default(e9);e5.pragma("journal_mode = WAL"),e5.exec(`
1655
1662
  CREATE TABLE IF NOT EXISTS bots (
1656
1663
  id TEXT PRIMARY KEY,
1657
1664
  name TEXT NOT NULL,
@@ -1,3 +1,3 @@
1
- module.exports=[69936,e=>{"use strict";var t=e.i(62294),r=e.i(43345),n=e.i(45383),a=e.i(674),s=e.i(81449),i=e.i(9501);let o="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",c=new Map;async function l(e){let t=await g(e);try{return JSON.parse(t)}catch{throw new i.ServiceApiError("invalid_request","The body must be a JSON object.")}}async function g(e){let t=new i.ServiceApiError("payload_too_large","The request body is too large."),r=e.headers.get("content-length");if(null!==r&&!(/^\d+$/.test(r.trim())&&65536>=Number(r)))throw t;if(!e.body)return"";let n=e.body.getReader(),a=[],s=0;for(;;){let{done:e,value:r}=await n.read();if(e)break;if((s+=r.byteLength)>65536)throw await n.cancel().catch(()=>{}),t;a.push(r)}return Buffer.concat(a).toString("utf8")}function d(e,t,r,n={}){return Response.json({error:{code:t,message:r}},{status:e,headers:n})}let u=(e,t=200)=>({status:t,body:e});function h(e,t,r,n={},a,s,i){return{status:e,body:{error:{code:t,message:r,...a?{fields:a}:{},...i?{reason:i}:{},...s?{recovery:s}:{}}},headers:n}}async function p(e,r,n,a){let l,g,d={kind:r.targetKind,targetRef:r.targetRef??null,agentId:r.agentId??null},u=(n,a)=>t.serviceAudit.append({principal:e,operation:d.operation??r.operation,capability:d.capability??r.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:n,code:a}),p=!1,f=null;try{if("service"!==e.kind)throw new i.ServiceApiError("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&r.capability!==y)throw new i.ServiceApiError("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let r=`${e.kind}:${e.id}`,n=(c.get(r)??[]).filter(e=>e>t-6e4),a=function(){let e=process.env[o];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${o} must be a positive integer; using 120.`),120)}();return n.length>=a?(c.set(r,n),Math.max(1,Math.ceil((n[n.length-a]+6e4-t)/1e3))):(n.push(t),c.set(r,n),null)}(e);if(null!==t)f="rate_limited",g="denied",l=h(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=(0,i.serviceContext)(e);a?.(t),l=await n(t,d,()=>{u("allowed",null),p=!0}),g="allowed"}}catch(e){e instanceof i.ServiceApiError?(g=e.denied?"denied":"rejected",f=e.notGranted?"not_granted":e.code,l=h(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),g="error",f="internal_error",l=h(500,"internal_error","The request could not be processed."))}if(p&&"allowed"===g)return l;try{u(g,f)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),h(500,"internal_error","The request could not be processed.")}return l}let y="shares:current";async function f(e,t){let a;try{a=await (0,r.authenticate)(e)}catch(e){if(e instanceof n.AgentApiError)return d(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),d(500,"internal_error","The request could not be processed.")}let s=await t(a);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function S(e){let r=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return r?.agent_id??null}function m(e,t){return{onTarget:t=>{e.kind=t.sessionRef?"session":"agent",e.targetRef=t.sessionRef??t.agentId,e.agentId=t.agentId,e.capability=t.capability,e.operation=t.action},onCommit:t}}function v(e,t,r){return{onTarget:t=>{r&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function b(e){if(e.length>200)return null;let r=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return r?.source_agent_id??null}let w={capabilities:(e,t)=>p(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>u((0,i.capabilitiesView)(e)),t),listAgents:(e,t,r)=>p(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>u((0,i.listServiceAgents)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),getAgent:(e,t,r)=>p(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.getServiceAgent)(e,t)),r),listSessions:(e,t,r,n)=>p(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.listServiceSessions)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit),status:r.status}))),n),getSession:(e,t,r,n)=>p(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:r,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.getServiceSession)(e,t,r))),n),listConversations:(e,t,r,n)=>p(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.listServiceConversations)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit)})),n),getConversation:(e,t,r,n,a)=>p(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:r,agentId:t},e=>u((0,i.getServiceConversation)(e,t,r,{cursor:n.cursor,limit:(0,i.parseLimit)(n.limit,i.PAGE_LIMITS.messagesDefault,i.PAGE_LIMITS.messagesMax)})),a),sendSessionMessage:(e,t,r,n,a)=>p(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{t.length<=200&&(a.agentId=S(t));let o=(0,i.parseSessionMessageBody)(await r(),n),{accepted:c}=(0,i.sendServiceSessionMessage)(e,t,o,e=>{a.agentId=e.source_agent_id,s()});return u(c,c.replayed?200:202)},a),listExchanges:(e,t,r)=>p(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>u((0,i.listServiceExchanges)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),createExchange:(e,t,r,n)=>p(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,n,a)=>{let s,o,c=await t();Object.assign(n,"string"!=typeof(o=(s=c&&"object"==typeof c?c.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===o.length?{}:{targetRef:o,agentId:o.length<=200?S(o):null});let l=(0,i.parseServiceExchangeBody)(c,r),{exchange:g,created:d}=(0,i.createServiceExchange)(e,l,e=>{n.kind="exchange",n.targetRef=e.id,n.agentId=e.source_agent_id,a()});return u({exchange:g,replayed:!d},d?201:200)},n),getExchange:(e,t,r)=>p(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,r)=>{r.agentId=b(t);let n=(0,i.getServiceExchange)(e,t);return r.agentId=n.source.agent_id,u(n)},r),cancelExchange:(e,t,r,n)=>p(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,n,a)=>{n.agentId=b(t);let s=await r();return u(await (0,i.cancelServiceExchange)(e,t,s,e=>{n.agentId=e.source_agent_id,a()}))},n),messageAgent:(e,t,r,n,a)=>p(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.messageServiceAgent)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),pinSession:(e,t,r,n,a)=>p(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{let o=(0,i.parsePinBody)(await r(),n),c=await (0,i.pinServiceSession)(e,t,o,m(a,s));return u(c,c.replayed?200:201)},a),readPin:(e,t,r)=>p(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,r)=>u(await (0,i.readServicePin)(e,t,m(r,()=>{}))),r),sendToPin:(e,t,r,n,a)=>p(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.sendServicePinMessage)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),detachPin:(e,t,r)=>p(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,r,n)=>u((0,i.detachServicePin)(e,t,m(r,n))),r),createShare:(e,t,r,n,s)=>p(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,o)=>{t.length<=200&&(s.agentId=(0,a.sessionOwner)(t));let c=(0,i.parseShareCreateBody)(await r(),n),l=await (0,i.createServiceShare)(e,t,c,v(s,o,!1));return u(l,l.replayed?200:201)},s),getShare:(e,t,r)=>p(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,r)=>u((0,i.getServiceShare)(e,t,v(r,()=>{},!1))),r),listShares:(e,t,r)=>p(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,r)=>((0,i.checkShareListParams)(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(r.agentId=(0,a.sessionOwner)(t.sessionRef)),u((0,i.listServiceShares)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit),sessionRef:t.sessionRef,state:t.state}))),r),revokeShare:(e,t,r,n)=>p(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,n,a)=>((0,i.parseShareRevokeBody)(await r()),u((0,i.revokeServiceShare)(e,t,v(n,a,!1)))),n),shareCurrent:(e,t,r,n,a)=>p(e,{operation:"shares.create",capability:y,targetKind:"session"},async(e,a,o)=>{let c=(0,i.parseShareCurrentBody)(await r(),n);(0,i.requireShareCurrentCaller)(e.principal);let l=(0,s.resolveSessionContext)(t);if(!l.ok)throw(0,i.sessionContextError)(l);let g=await (0,i.createCurrentSessionShare)(e,l,c,v(a,o,!0));return u(g,g.replayed?200:201)},a)};function R(e){let t=new URL(e.url).searchParams;return{cursor:t.get("cursor"),limit:t.get("limit"),get:e=>t.get(e),names:[...new Set(t.keys())]}}async function E(e){let t=(0,s.sessionContextHeader)(e.headers),r=e.headers.get("idempotency-key"),n=n=>w.shareCurrent(n,t,()=>l(e),r);if(null===e.headers.get("authorization")){let e=await n(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return f(e,n)}e.s(["handleCancelExchange",0,function(e,t){return f(e,r=>w.cancelExchange(r,t,async()=>(0,i.parseCancelBody)(await g(e))))},"handleCreateExchange",0,function(e){return f(e,t=>w.createExchange(t,()=>l(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return f(e,r=>w.createShare(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return f(e,e=>w.detachPin(e,t))},"handleGetAgent",0,function(e,t){return f(e,e=>w.getAgent(e,t))},"handleGetCapabilities",0,function(e){return f(e,e=>w.capabilities(e))},"handleGetConversation",0,function(e,t,r){return f(e,n=>w.getConversation(n,t,r,R(e)))},"handleGetExchange",0,function(e,t){return f(e,e=>w.getExchange(e,t))},"handleGetSession",0,function(e,t,r){return f(e,e=>w.getSession(e,t,r))},"handleGetShare",0,function(e,t){return f(e,e=>w.getShare(e,t))},"handleListAgents",0,function(e){return f(e,t=>w.listAgents(t,R(e)))},"handleListConversations",0,function(e,t){return f(e,r=>w.listConversations(r,t,R(e)))},"handleListExchanges",0,function(e){return f(e,t=>w.listExchanges(t,R(e)))},"handleListSessions",0,function(e,t){let r=R(e);return f(e,e=>w.listSessions(e,t,{cursor:r.cursor,limit:r.limit,status:r.get("status")}))},"handleListShares",0,function(e){let t=R(e);return f(e,e=>w.listShares(e,{cursor:t.cursor,limit:t.limit,sessionRef:t.get("session_ref"),state:t.get("state"),names:t.names}))},"handleMessageAgent",0,function(e,t){return f(e,r=>w.messageAgent(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return f(e,r=>w.pinSession(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return f(e,e=>w.readPin(e,t))},"handleRevokeShare",0,function(e,t){return f(e,r=>w.revokeShare(r,t,()=>g(e)))},"handleSendSessionMessage",0,function(e,t){return f(e,r=>w.sendSessionMessage(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return f(e,r=>w.sendToPin(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,E,"serviceOperations",0,w])}];
1
+ module.exports=[69936,e=>{"use strict";var t=e.i(62294),r=e.i(43345),n=e.i(45383),a=e.i(674),s=e.i(81449),i=e.i(9501);let o="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",c=new Map;async function l(e){let t=await g(e);try{return JSON.parse(t)}catch{throw new i.ServiceApiError("invalid_request","The body must be a JSON object.")}}async function g(e){let t=new i.ServiceApiError("payload_too_large","The request body is too large."),r=e.headers.get("content-length");if(null!==r&&!(/^\d+$/.test(r.trim())&&65536>=Number(r)))throw t;if(!e.body)return"";let n=e.body.getReader(),a=[],s=0;for(;;){let{done:e,value:r}=await n.read();if(e)break;if((s+=r.byteLength)>65536)throw await n.cancel().catch(()=>{}),t;a.push(r)}return Buffer.concat(a).toString("utf8")}function d(e,t,r,n={}){return Response.json({error:{code:t,message:r}},{status:e,headers:n})}let u=(e,t=200)=>({status:t,body:e});function h(e,t,r,n={},a,s,i){return{status:e,body:{error:{code:t,message:r,...a?{fields:a}:{},...i?{reason:i}:{},...s?{recovery:s}:{}}},headers:n}}async function p(e,r,n,a){let l,g,d={kind:r.targetKind,targetRef:r.targetRef??null,agentId:r.agentId??null},u=(n,a)=>t.serviceAudit.append({principal:e,operation:d.operation??r.operation,capability:d.capability??r.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:n,code:a}),p=!1,f=null;try{if("service"!==e.kind)throw new i.ServiceApiError("principal_not_allowed","The service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&r.capability!==y)throw new i.ServiceApiError("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let r=`${e.kind}:${e.id}`,n=(c.get(r)??[]).filter(e=>e>t-6e4),a=function(){let e=process.env[o];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${o} must be a positive integer; using 120.`),120)}();return n.length>=a?(c.set(r,n),Math.max(1,Math.ceil((n[n.length-a]+6e4-t)/1e3))):(n.push(t),c.set(r,n),null)}(e);if(null!==t)f="rate_limited",g="denied",l=h(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=(0,i.serviceContext)(e);a?.(t),l=await n(t,d,()=>{u("allowed",null),p=!0}),g="allowed"}}catch(e){e instanceof i.ServiceApiError?(g=e.denied?"denied":"rejected",f=e.notGranted?"not_granted":e.code,l=h(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),g="error",f="internal_error",l=h(500,"internal_error","The request could not be processed."))}if(p&&"allowed"===g)return l;try{u(g,f)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),h(500,"internal_error","The request could not be processed.")}return l}let y="shares:current";async function f(e,t){let a;try{a=await (0,r.authenticate)(e)}catch(e){if(e instanceof n.AgentApiError)return d(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),d(500,"internal_error","The request could not be processed.")}let s=await t(a);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function S(e){let r=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return r?.agent_id??null}function m(e,t){return{onTarget:t=>{e.kind=t.sessionRef?"session":"agent",e.targetRef=t.sessionRef??t.agentId,e.agentId=t.agentId,e.capability=t.capability,e.operation=t.action},onCommit:t}}function v(e,t,r){return{onTarget:t=>{r&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function b(e){if(e.length>200)return null;let r=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return r?.source_agent_id??null}let w={capabilities:(e,t)=>p(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>u((0,i.capabilitiesView)(e)),t),listAgents:(e,t,r)=>p(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>u((0,i.listServiceAgents)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),getAgent:(e,t,r)=>p(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.getServiceAgent)(e,t)),r),listSessions:(e,t,r,n)=>p(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.listServiceSessions)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit),status:r.status}))),n),getSession:(e,t,r,n)=>p(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:r,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.getServiceSession)(e,t,r))),n),listConversations:(e,t,r,n)=>p(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.listServiceConversations)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit)})),n),getConversation:(e,t,r,n,a)=>p(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:r,agentId:t},e=>u((0,i.getServiceConversation)(e,t,r,{cursor:n.cursor,limit:(0,i.parseLimit)(n.limit,i.PAGE_LIMITS.messagesDefault,i.PAGE_LIMITS.messagesMax)})),a),sendSessionMessage:(e,t,r,n,a)=>p(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{t.length<=200&&(a.agentId=S(t));let o=(0,i.parseSessionMessageBody)(await r(),n),{accepted:c}=(0,i.sendServiceSessionMessage)(e,t,o,e=>{a.agentId=e.source_agent_id,s()});return u(c,c.replayed?200:202)},a),listExchanges:(e,t,r)=>p(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>u((0,i.listServiceExchanges)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),createExchange:(e,t,r,n)=>p(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,n,a)=>{let s,o,c=await t();Object.assign(n,"string"!=typeof(o=(s=c&&"object"==typeof c?c.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===o.length?{}:{targetRef:o,agentId:o.length<=200?S(o):null});let l=(0,i.parseServiceExchangeBody)(c,r),{exchange:g,created:d}=(0,i.createServiceExchange)(e,l,e=>{n.kind="exchange",n.targetRef=e.id,n.agentId=e.source_agent_id,a()});return u({exchange:g,replayed:!d},d?201:200)},n),getExchange:(e,t,r)=>p(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,r)=>{r.agentId=b(t);let n=(0,i.getServiceExchange)(e,t);return r.agentId=n.source.agent_id,u(n)},r),cancelExchange:(e,t,r,n)=>p(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,n,a)=>{n.agentId=b(t);let s=await r();return u(await (0,i.cancelServiceExchange)(e,t,s,e=>{n.agentId=e.source_agent_id,a()}))},n),messageAgent:(e,t,r,n,a)=>p(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.messageServiceAgent)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),pinSession:(e,t,r,n,a)=>p(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{let o=(0,i.parsePinBody)(await r(),n),c=await (0,i.pinServiceSession)(e,t,o,m(a,s));return u(c,c.replayed?200:201)},a),readPin:(e,t,r)=>p(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,r)=>u(await (0,i.readServicePin)(e,t,m(r,()=>{}))),r),sendToPin:(e,t,r,n,a)=>p(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.sendServicePinMessage)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),detachPin:(e,t,r)=>p(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,r,n)=>u((0,i.detachServicePin)(e,t,m(r,n))),r),createShare:(e,t,r,n,s)=>p(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,o)=>{t.length<=200&&(s.agentId=(0,a.sessionOwner)(t));let c=(0,i.parseShareCreateBody)(await r(),n),l=await (0,i.createServiceShare)(e,t,c,v(s,o,!1));return u(l,l.replayed?200:201)},s),getShare:(e,t,r)=>p(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,r)=>u((0,i.getServiceShare)(e,t,v(r,()=>{},!1))),r),listShares:(e,t,r)=>p(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,r)=>((0,i.checkShareListParams)(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(r.agentId=(0,a.sessionOwner)(t.sessionRef)),u((0,i.listServiceShares)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit),sessionRef:t.sessionRef,state:t.state}))),r),revokeShare:(e,t,r,n)=>p(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,n,a)=>((0,i.parseShareRevokeBody)(await r()),u((0,i.revokeServiceShare)(e,t,v(n,a,!1)))),n),shareCurrent:(e,t,r,n,a)=>p(e,{operation:"shares.create",capability:y,targetKind:"session"},async(e,a,o)=>{let c=(0,i.parseShareCurrentBody)(await r(),n);(0,i.requireShareCurrentCaller)(e.principal);let l=(0,s.resolveSessionContext)(t);if(!l.ok)throw(0,i.sessionContextError)(l);let g=await (0,i.createCurrentSessionShare)(e,l,c,v(a,o,!0));return u(g,g.replayed?200:201)},a)};function R(e){let t=new URL(e.url).searchParams;return{cursor:t.get("cursor"),limit:t.get("limit"),get:e=>t.get(e),names:[...new Set(t.keys())]}}async function E(e){let t=(0,s.sessionContextHeader)(e.headers),r=e.headers.get("idempotency-key"),n=n=>w.shareCurrent(n,t,()=>l(e),r);if(null===e.headers.get("authorization")){let e=await n(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return f(e,n)}e.s(["handleCancelExchange",0,function(e,t){return f(e,r=>w.cancelExchange(r,t,async()=>(0,i.parseCancelBody)(await g(e))))},"handleCreateExchange",0,function(e){return f(e,t=>w.createExchange(t,()=>l(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return f(e,r=>w.createShare(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return f(e,e=>w.detachPin(e,t))},"handleGetAgent",0,function(e,t){return f(e,e=>w.getAgent(e,t))},"handleGetCapabilities",0,function(e){return f(e,e=>w.capabilities(e))},"handleGetConversation",0,function(e,t,r){return f(e,n=>w.getConversation(n,t,r,R(e)))},"handleGetExchange",0,function(e,t){return f(e,e=>w.getExchange(e,t))},"handleGetSession",0,function(e,t,r){return f(e,e=>w.getSession(e,t,r))},"handleGetShare",0,function(e,t){return f(e,e=>w.getShare(e,t))},"handleListAgents",0,function(e){return f(e,t=>w.listAgents(t,R(e)))},"handleListConversations",0,function(e,t){return f(e,r=>w.listConversations(r,t,R(e)))},"handleListExchanges",0,function(e){return f(e,t=>w.listExchanges(t,R(e)))},"handleListSessions",0,function(e,t){let r=R(e);return f(e,e=>w.listSessions(e,t,{cursor:r.cursor,limit:r.limit,status:r.get("status")}))},"handleListShares",0,function(e){let t=R(e);return f(e,e=>w.listShares(e,{cursor:t.cursor,limit:t.limit,sessionRef:t.get("session_ref"),state:t.get("state"),names:t.names}))},"handleMessageAgent",0,function(e,t){return f(e,r=>w.messageAgent(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return f(e,r=>w.pinSession(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return f(e,e=>w.readPin(e,t))},"handleRevokeShare",0,function(e,t){return f(e,r=>w.revokeShare(r,t,()=>g(e)))},"handleSendSessionMessage",0,function(e,t){return f(e,r=>w.sendSessionMessage(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return f(e,r=>w.sendToPin(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,E,"serviceOperations",0,w])}];
2
2
 
3
3
  //# sourceMappingURL=lib_service-api-http_ts_0xzqhny._.js.map
@@ -1,7 +1,7 @@
1
- module.exports=[9501,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294),r=e.i(62349),s=e.i(18966),a=e.i(35613),o=e.i(90027),d=e.i(63020),c=e.i(45383),_=e.i(91253),u=e.i(93399),l=e.i(50081),p=e.i(16789),g=e.i(81449),f=e.i(35034),h=e.i(674);let m={invalid_request:400,unsupported_field:400,authority_not_allowed:403,principal_not_allowed:403,grant_required:403,grants_unavailable:503,agent_not_found:404,session_not_found:404,conversation_not_found:404,exchange_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,recursive_exchange:403,idempotency_conflict:409,exchange_terminal:409,conflict:409,payload_too_large:413,rate_limited:429,internal_error:500,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,action_unavailable:409,approval_required:403,provider_failed:502,share_not_found:404,share_expired:410,share_revoked:410,share_turn_in_progress:409,share_turn_limit:409,audience_not_allowed:403,session_context_required:409},v=["principal_not_allowed","grant_required","grants_unavailable","agent_not_found","session_not_found","conversation_not_found","exchange_not_found","rate_limited","pin_not_found","share_not_found","audience_not_allowed"];class w extends Error{code;notGranted;fields;recovery;reason;constructor(e,t,n={}){super(t),this.name="ServiceApiError",this.code=e,this.notGranted=!0===n.notGranted,this.fields=n.fields,this.recovery=(0,l.recoveryFor)(e),this.reason=n.reason??null}get status(){return m[this.code]}get denied(){return v.includes(this.code)}}let y={pin:()=>new w("pin_not_found","No pin with that reference is visible to this principal."),share:()=>new w("share_not_found","No share with that reference is visible to this principal."),agent:()=>new w("agent_not_found","No Agent with that id is visible to this principal."),session:()=>new w("session_not_found","No session with that reference is visible to this principal."),conversation:()=>new w("conversation_not_found","No conversation with that id is visible to this principal."),exchange:()=>new w("exchange_not_found","No exchange with that id is visible to this principal.")};function E(e){let t=y[e]();return new w(t.code,t.message,{notGranted:!0})}function S(e){switch(e.code){case"exchange_not_found":return y.exchange();case"session_not_found":return y.session();case"agent_not_found":return y.agent();case"conversation_not_found":return y.conversation();case"invalid_transition":return new w("conflict","The exchange changed concurrently; read it and retry.");default:return e.code in m?new w(e.code,e.message):new w("invalid_request",e.message)}}let b=new Map;function I(e,t,n){return"string"==typeof t&&!!e.agents.get(t)?.has(n)&&!!i.bots.getById(t)}function k(e,t,n){let r=i.bots.getById(t);if(!r)throw y.agent();if(!I(e,t,n))throw E("agent");return r}let R=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function A(e,t,i,r,s){try{return(0,n.paginateRows)(e,t,i,r,s)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new w("invalid_request",e.message);throw e}}function x(e){return{home_session_ref:e.home_session_id??null,new_sessions_allowed:(0,s.readStoredPolicy)(e)?.allow_new_sessions===!0,default_workspace_set:!!e.default_workspace}}function C(e,t){let n,s=(0,r.resolveAgent)(t),a=e.agents.get(t.id)??new Set;return{agent_id:t.id,name:t.name,title:t.title,runtime:s.agent,available:s.launchable,capabilities:_.SERVICE_CAPABILITIES.filter(e=>a.has(e)),messaging:x(t),created_at:t.created_at,last_activity_at:(n=i.default.prepare(`
1
+ module.exports=[9501,35631,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294),r=e.i(62349),s=e.i(18966),o=e.i(35613),a=e.i(90027),d=e.i(63020),c=e.i(45383);let _=["agents:read","sessions:read","conversations:read","sessions:message","exchanges:read","exchanges:create","sessions:start","sessions:resume","shares:create"],u="message:",l="exchange:";e.s(["EXCHANGE_KEY_PREFIX",0,l,"MESSAGE_KEY_PREFIX",0,u,"SERVICE_CAPABILITIES",0,_],35631);var p=e.i(93399),g=e.i(50081),f=e.i(16789),h=e.i(81449),m=e.i(26571),v=e.i(35034),w=e.i(674);let y={invalid_request:400,unsupported_field:400,authority_not_allowed:403,principal_not_allowed:403,agent_not_found:404,session_not_found:404,conversation_not_found:404,exchange_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,recursive_exchange:403,idempotency_conflict:409,exchange_terminal:409,conflict:409,payload_too_large:413,rate_limited:429,internal_error:500,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,action_unavailable:409,approval_required:403,provider_failed:502,share_not_found:404,share_expired:410,share_revoked:410,share_turn_in_progress:409,share_turn_limit:409,audience_not_allowed:403,session_context_required:409},E=["principal_not_allowed","agent_not_found","session_not_found","conversation_not_found","exchange_not_found","rate_limited","pin_not_found","share_not_found","audience_not_allowed"];class S extends Error{code;notGranted;fields;recovery;reason;constructor(e,t,n={}){super(t),this.name="ServiceApiError",this.code=e,this.notGranted=!0===n.notGranted,this.fields=n.fields,this.recovery=(0,g.recoveryFor)(e),this.reason=n.reason??null}get status(){return y[this.code]}get denied(){return E.includes(this.code)}}let b={pin:()=>new S("pin_not_found","No pin with that reference is visible to this principal."),share:()=>new S("share_not_found","No share with that reference is visible to this principal."),agent:()=>new S("agent_not_found","No Agent with that id is visible to this principal."),session:()=>new S("session_not_found","No session with that reference is visible to this principal."),conversation:()=>new S("conversation_not_found","No conversation with that id is visible to this principal."),exchange:()=>new S("exchange_not_found","No exchange with that id is visible to this principal.")};function k(e){let t=b[e]();return new S(t.code,t.message,{notGranted:!0})}function R(e){switch(e.code){case"exchange_not_found":return b.exchange();case"session_not_found":return b.session();case"agent_not_found":return b.agent();case"conversation_not_found":return b.conversation();case"invalid_transition":return new S("conflict","The exchange changed concurrently; read it and retry.");default:return e.code in y?new S(e.code,e.message):new S("invalid_request",e.message)}}function I(e,t){return e.reachesAgents&&"string"==typeof t&&!!i.bots.getById(t)}function A(e){return e.reachesAgents?i.bots.getAll():[]}function x(e,t){let n=i.bots.getById(t);if(!n)throw b.agent();if(!I(e,t))throw k("agent");return n}let C=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function q(e,t,i,r,s){try{return(0,n.paginateRows)(e,t,i,r,s)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new S("invalid_request",e.message);throw e}}function T(e){return{home_session_ref:e.home_session_id??null,new_sessions_allowed:(0,s.readStoredPolicy)(e)?.allow_new_sessions===!0,default_workspace_set:!!e.default_workspace}}function N(e,t){let n,s=(0,r.resolveAgent)(t);return{agent_id:t.id,name:t.name,title:t.title,runtime:s.agent,available:s.launchable,capabilities:I(e,t.id)?[..._]:[],messaging:T(t),created_at:t.created_at,last_activity_at:(n=i.default.prepare(`
2
2
  SELECT MAX(m.created_at) AS at FROM messages m
3
3
  JOIN conversation_participants p ON p.conversation_id = m.conversation_id AND p.participant_kind = 'bot' AND p.participant_id = ?
4
- `).get(t.id),Math.max(t.created_at,n.at??0))}}function q(e){let t=e.origin.conversation;return{ref:e.ref,agent:{...e.agent},title:e.title,status:e.status,resumable:e.resumable,source:e.source,state:{...e.state},created_at:e.created_at,ended_at:e.ended_at,last_activity_at:e.last_activity_at,origin:{conversation:t?{id:t.id,kind:t.kind,label:t.label}:null,work_request:e.origin.work_request?{id:e.origin.work_request.id,execution_kind:e.origin.work_request.execution_kind,state:e.origin.work_request.state}:null},usage:{input_tokens:{...e.usage.input_tokens},output_tokens:{...e.usage.output_tokens},cost_usd:{...e.usage.cost_usd}},home:e.home,actions:e.actions}}async function T(e,t){k(e,t,"sessions:read"),await (0,p.warmAgentProvider)(i.default,t,{onlyWithSessions:!0})}let N=`
4
+ `).get(t.id),Math.max(t.created_at,n.at??0))}}function O(e){let t=e.origin.conversation;return{ref:e.ref,agent:{...e.agent},title:e.title,status:e.status,resumable:e.resumable,source:e.source,state:{...e.state},created_at:e.created_at,ended_at:e.ended_at,last_activity_at:e.last_activity_at,origin:{conversation:t?{id:t.id,kind:t.kind,label:t.label}:null,work_request:e.origin.work_request?{id:e.origin.work_request.id,execution_kind:e.origin.work_request.execution_kind,state:e.origin.work_request.state}:null},usage:{input_tokens:{...e.usage.input_tokens},output_tokens:{...e.usage.output_tokens},cost_usd:{...e.usage.cost_usd}},home:e.home,actions:e.actions}}async function L(e,t){x(e,t),await (0,f.warmAgentProvider)(i.default,t,{onlyWithSessions:!0})}let M=`
5
5
  SELECT c.id, c.type, c.bot_id, c.group_id, c.origin_kind, c.origin_id, c.created_at,
6
6
  COALESCE((SELECT MAX(m.created_at) FROM messages m WHERE m.conversation_id = c.id), c.created_at) AS last_activity_at,
7
7
  (SELECT COUNT(*) FROM messages m WHERE m.conversation_id = c.id) AS message_count,
@@ -10,16 +10,16 @@ module.exports=[9501,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294)
10
10
  JOIN conversation_participants p ON p.conversation_id = c.id AND p.participant_kind = 'bot' AND p.participant_id = ?
11
11
  LEFT JOIN bots b ON b.id = c.bot_id
12
12
  LEFT JOIN groups g ON g.id = c.group_id
13
- `;function O(e){return i.default.prepare("SELECT participant_kind AS kind, participant_id AS id FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(e)}function P(e,t){return t.every(t=>"bot"===t.kind?I(e,t.id,"conversations:read"):"service"!==t.kind||t.id===e.principal.id)}function L(e,t){let n="bot"===e.type?"direct":"group"===e.type?"group":"agent",i="direct"===n?`${e.bot_name??"Agent"} thread`:"group"===n?e.group_name?`Group ${e.group_name}`:"Group thread":"Agent API conversation";return{conversation_id:e.id,type:n,label:i,participants:t,message_count:e.message_count,created_at:e.created_at,last_activity_at:e.last_activity_at}}let M=["deck","deck_id","deckId","deck_name","runtime","agent","adapter","transport","model","tool_profile","toolProfile","execution_kind","executionKind","permissions","provider_session_id","external_session_id","externalSessionId","session_id","sessionId","resume","resume_session","fresh_session","external_run_id","run_id","cwd","working_directory","workspace","grant","grants","capability","capabilities","principal","requester","owner"];function $(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function F(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(M.includes(i))throw new w("authority_not_allowed",`${n}${i} is chosen by Botmancers from the session and the Agent's configuration; a caller cannot set it.`);throw new w("invalid_request",`${n}${i} is not a field of this request.`)}}function D(e,t,n){if("string"!=typeof e||0===e.trim().length)throw new w("invalid_request",`${t} is required.`);if(e.length>n)throw new w("invalid_request",`${t} exceeds ${n} characters.`);return e}function K(e,t){let n=e.idempotency_key;if(void 0!==n&&"string"!=typeof n)throw new w("invalid_request","idempotency_key must be a string.");if(null!==t&&void 0!==n&&t!==n)throw new w("invalid_request","Idempotency-Key header and body idempotency_key differ.");let i=n??t??"";if(0===i.trim().length||i.length>160)throw new w("invalid_request","An idempotency key (1-160 characters) is required.");return i}function B(e,t){return i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function G(e,n,r){let s=(0,t.randomUUID)();i.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s,"agent",e.kind,e.id,r);let a=i.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,r),a.run(s,"bot",n,r),s}function W(e){return i.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function H(e,t){try{return i.default.transaction(()=>{let{input:n,afterCreate:i}=e(),r=c.exchanges.create(n);return r.created&&i&&i(r.exchange),t?.(r.exchange),r}).immediate()}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}}function X(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");F(e,["content","idempotency_key"],"");let n=K(e,t);return{content:D(e.content,"content",a.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function j(e,t,n){return t.requester_kind===e.principal.kind&&t.requester_id===e.principal.id&&I(e,t.source_agent_id,n)&&(null===t.destination_agent_id||I(e,t.destination_agent_id,n))}function V(e,t,n){let i=c.exchanges.get(t);if(!i)throw y.exchange();if(!j(e,i,n))throw E("exchange");return i}let Y=e=>e.idempotency_key.startsWith(_.MESSAGE_KEY_PREFIX)?"session_message":"exchange";function J(e,t){let n=t.idempotency_key.startsWith(_.MESSAGE_KEY_PREFIX)?t.idempotency_key.slice(_.MESSAGE_KEY_PREFIX.length):t.idempotency_key.startsWith(_.EXCHANGE_KEY_PREFIX)?t.idempotency_key.slice(_.EXCHANGE_KEY_PREFIX.length):t.idempotency_key;return(0,u.serviceRedactor)().deep({...e,kind:Y(t),idempotency_key:n})}function U(e){return{id:e.id,kind:Y(e),mode:e.mode,state:e.state,source:{agent_id:e.source_agent_id,session_ref:e.source_binding_id},destination:e.destination_agent_id?{agent_id:e.destination_agent_id,session_ref:e.destination_binding_id}:null,failure:"failed"===e.state?{code:e.failure_code??"failed"}:null,created_at:e.created_at,updated_at:e.updated_at,terminal_at:e.terminal_at}}function z(e,t){let n=c.exchanges.require(t);return j(e,n,"exchanges:read")?J((0,c.getExchangeView)(t),n):U(n)}let Q=["exchange_id","parent_exchange_id"];async function Z(e,t,n,i){let r=V(e,t,"exchanges:create");try{let{replayed:t}=await (0,c.cancelExchangeCommand)(r.id,e.principal,n,i);return{exchange:z(e,r.id),replayed:t}}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}}let ee=e=>"resume"===e?"sessions:resume":"sessions:message";function et(e){if(e instanceof h.PinError){if("session_not_found"===e.code)throw y.session();if("agent_not_found"===e.code)throw y.agent();if("pin_not_found"===e.code)throw y.pin();if("conversation_not_found"===e.code)throw y.conversation();throw new w(e.code,e.message)}if(e instanceof d.ExchangeError)throw S(e);throw e}function en(e,t){let n;try{n=(0,h.requirePin)(e.principal,t)}catch(e){et(e)}if(!I(e,n.agent_id,ee(n.action)))throw E("pin");return n}function ei(e){return(0,u.serviceRedactor)().deep((0,h.pinView)(e))}async function er(e,t,n,i){k(e,t,"sessions:message");try{let r=await (0,h.messageAgent)({requester:e.principal,agentId:t,content:n.content,idempotencyKey:n.idempotencyKey,mayStart:I(e,t,"sessions:start"),onResolved:e=>i.onTarget({agentId:e.agentId,sessionRef:e.sessionRef,capability:"started"===e.resolution?"sessions:start":"sessions:message",action:"started"===e.resolution?"agents.message.start":"agents.message"}),onCommit:()=>i.onCommit()});return{body:{pin:ei(r.pin),turn:(0,u.serviceRedactor)().deep(r.turn),resolution:r.resolution,replayed:r.replayed},settled:r.settled}}catch(e){et(e)}}async function es(e,t,n,i){let r=(0,h.sessionOwner)(t);if(!r)throw y.session();let s=ee(n.action);if(i.onTarget({agentId:r,sessionRef:t,capability:s,action:"resume"===n.action?"pins.resume":"pins.ask"}),!I(e,r,s))throw E("session");n.replacePinRef&&en(e,n.replacePinRef);try{let{pin:r,created:s,replaced:a}=await (0,h.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:ei(r),replaced_pin_ref:a?.id??null,replayed:!s}}catch(e){et(e)}}async function ea(e,t,n,i){let r=en(e,t);i.onTarget({agentId:r.agent_id,sessionRef:r.session_ref,capability:ee(r.action),action:"pins.send"});try{let t=await (0,h.sendPinTurn)({requester:e.principal,pinRef:r.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:ei(t.pin),turn:(0,u.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){et(e)}}async function eo(e,t,n){let i=en(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ee(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,h.readPin)(e.principal,i.id);return{pin:ei(t),turns:(0,u.serviceRedactor)().deep(n)}}catch(e){et(e)}}let ed=["provider_session_id","external_session_id","claude_session_id","codex_thread_id","cursor_chat_id","thread_id","chat_id","cwd","workspace","latest","most_recent","title","title_match","active_since"],ec=[...new Set([...M,...ed])];function e_(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(ec.includes(i))throw new w("authority_not_allowed",`${n}${i} cannot select or describe a session; name it by session_ref only.`);throw new w("invalid_request",`${n}${i} is not a field of this request.`)}}function eu(e,t){if(null==e)return null;if("number"!=typeof e||!Number.isInteger(e))throw new w("invalid_request",`${t} must be an integer.`);return e}function el(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(e_(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!$(e.audience))throw new w("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(e_(e.audience,["kind","team_id","channel_id"],"audience."),!(0,f.isSlackAudience)(e.audience))throw new w("invalid_request",'audience must be { kind: "slack", team_id: "T…", channel_id: "C…" } with exact Slack ids.');return{audience:{kind:"slack",team_id:e.audience.team_id,channel_id:e.audience.channel_id},ttlSeconds:eu(e.ttl_seconds,"ttl_seconds"),maxTurns:eu(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:D(e.agent_id,"agent_id",200),idempotencyKey:K(e,t)}}let ep=["session_ref","state","cursor","limit"],eg=["active","expired","revoked"];function ef(e){if(e instanceof f.ShareError){if("session_not_found"===e.code)throw y.session();if("share_not_found"===e.code)throw y.share();throw new w(e.code,e.message)}et(e)}function eh(e,t){let n=(0,f.shareRow)(t);if(!n)throw y.share();if(!(n.creator_kind===e.principal.kind&&n.creator_id===e.principal.id&&I(e,n.agent_id,"shares:create")))throw E("share");return n}function em(e,t=(0,u.serviceRedactor)()){return t.deep((0,f.shareView)(e))}async function ev(e,t,n,i){let r=(0,h.sessionOwner)(t);if(i.onTarget({agentId:r,sessionRef:t}),!r)throw y.session();if(!I(e,r,"shares:create"))throw E("session");if(null!==n.agentId&&n.agentId!==r)throw y.session();try{let{share:r,created:s}=await (0,f.createShare)({creator:e.principal,sessionRef:t,agentId:n.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:n.idempotencyKey,createdVia:"session_ref",onCommit:()=>i.onCommit()});return{share:em(r),replayed:!s}}catch(e){ef(e)}}let ew=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];async function ey(e,n,i,r){if(r.onTarget({agentId:n.agentId,sessionRef:n.sessionRef}),null!==i.agentId&&i.agentId!==n.agentId)throw y.session();try{var s,a;let{share:o,created:d}=await (0,f.createShare)({creator:e.principal,sessionRef:n.sessionRef,agentId:n.agentId,audience:i.audience,ttlSeconds:i.ttlSeconds,maxTurns:i.maxTurns,idempotencyKey:(s=n.sessionRef,a=i.idempotencyKey,`current:${(0,t.createHash)("sha256").update(s).digest("hex").slice(0,24)}:${a}`),createdVia:"current_session",onCommit:()=>r.onCommit()});return{share:em(o),replayed:!d}}catch(e){ef(e)}}e.s(["AUTHORITY_FIELDS",0,M,"MESSAGE_CONTENT_LIMIT",0,16e3,"PAGE_LIMITS",0,R,"SHARE_SELECTOR_FIELDS",0,ed,"ServiceApiError",0,w,"agentMessagingReadiness",0,x,"cancelServiceExchange",0,Z,"capabilitiesView",0,function(e){let t=[...e.agents.entries()].filter(([e])=>!!i.bots.getById(e)).map(([e,t])=>({agent_id:e,capabilities:_.SERVICE_CAPABILITIES.filter(e=>t.has(e))})).sort((e,t)=>e.agent_id<t.agent_id?-1:+(e.agent_id>t.agent_id));return{principal:{kind:e.principal.kind,id:e.principal.id},mode:e.mode,vocabulary:_.SERVICE_CAPABILITIES,agents:t,limits:{page:R,content_chars:a.EXCHANGE_LIMITS.instructionChars,message_content_chars:16e3}}},"checkShareListParams",0,function(e){for(let t of e)if(!ep.includes(t)){if(ec.includes(t))throw new w("authority_not_allowed",`${t} cannot select a session; filter by session_ref only.`);throw new w("invalid_request",`${t} is not a parameter of this list.`)}},"createCurrentSessionShare",0,ey,"createServiceExchange",0,function(e,t,n){let r=W(t.sessionRef);if(!r||null!==t.sourceAgentId&&t.sourceAgentId!==r.agent_id)throw y.session();if(!I(e,r.agent_id,"exchanges:create"))throw E("session");if("ask"===t.mode&&(null!==t.destinationAgentId||null!==t.destinationConversationId))throw new w("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===t.mode){if(null===t.destinationAgentId)throw new w("destination_invalid","A Continue names destination.agent_id.");if(!i.bots.getById(t.destinationAgentId))throw y.agent();if(!I(e,t.destinationAgentId,"exchanges:create"))throw E("agent")}let s=e.principal,a=`${_.EXCHANGE_KEY_PREFIX}${t.idempotencyKey}`,{exchange:o,created:d}=H(()=>{let e=Date.now(),n=B(s,a),i=t.originConversationId??n?.origin_conversation_id??G(s,r.agent_id,e),o="continue"!==t.mode?null:t.destinationConversationId??n?.destination_conversation_id??G(s,t.destinationAgentId,e);return{input:{requester:s,serviceGrant:!0,idempotencyKey:a,mode:t.mode,originConversationId:i,sourceAgentId:r.agent_id,sessionRef:r.id,destinationAgentId:t.destinationAgentId,destinationConversationId:o,instruction:t.instruction,now:e}}},n),u=(0,c.dispatchExchange)(o.id);return{exchange:z(e,o.id),created:d,dispatched:u}},"createServiceShare",0,ev,"detachServicePin",0,function(e,t,n){let i=en(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ee(i.action),action:"pins.detach"});try{let{pin:t,replayed:r}=(0,h.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:ei(t),replayed:r}}catch(e){et(e)}},"getServiceAgent",0,function(e,t){return C(e,k(e,t,"agents:read"))},"getServiceConversation",0,function(e,t,r,s){var a;k(e,t,"conversations:read");let o=i.default.prepare(`${N} WHERE c.id = ?`).get(t,r);if(!o)throw y.conversation();let d=O(o.id);if(!P(e,d))throw E("conversation");let c=`messages:${o.id}`,_=function(e,t){try{return(0,n.decodePageCursor)(e,t)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new w("invalid_request",e.message);throw e}}(c,s.cursor),l=i.default.prepare(`
13
+ `;function P(e){return i.default.prepare("SELECT participant_kind AS kind, participant_id AS id FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(e)}function $(e,t){return t.every(t=>"bot"===t.kind?I(e,t.id):"service"!==t.kind||t.id===e.principal.id)}function D(e,t){let n="bot"===e.type?"direct":"group"===e.type?"group":"agent",i="direct"===n?`${e.bot_name??"Agent"} thread`:"group"===n?e.group_name?`Shared \xb7 ${e.group_name}`:"Shared thread":"Agent API conversation";return{conversation_id:e.id,type:n,label:i,participants:t,message_count:e.message_count,created_at:e.created_at,last_activity_at:e.last_activity_at}}let F=["deck","deck_id","deckId","deck_name","runtime","agent","adapter","transport","model","tool_profile","toolProfile","execution_kind","executionKind","permissions","provider_session_id","external_session_id","externalSessionId","session_id","sessionId","resume","resume_session","fresh_session","external_run_id","run_id","cwd","working_directory","workspace","grant","grants","capability","capabilities","principal","requester","owner"];function W(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function B(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(F.includes(i))throw new S("authority_not_allowed",`${n}${i} is chosen by Botmancers from the session and the Agent's configuration; a caller cannot set it.`);throw new S("invalid_request",`${n}${i} is not a field of this request.`)}}function K(e,t,n){if("string"!=typeof e||0===e.trim().length)throw new S("invalid_request",`${t} is required.`);if(e.length>n)throw new S("invalid_request",`${t} exceeds ${n} characters.`);return e}function H(e,t){let n=e.idempotency_key;if(void 0!==n&&"string"!=typeof n)throw new S("invalid_request","idempotency_key must be a string.");if(null!==t&&void 0!==n&&t!==n)throw new S("invalid_request","Idempotency-Key header and body idempotency_key differ.");let i=n??t??"";if(0===i.trim().length||i.length>160)throw new S("invalid_request","An idempotency key (1-160 characters) is required.");return i}function j(e,t){return i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function G(e,n,r){let s=(0,t.randomUUID)();i.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s,"agent",e.kind,e.id,r);let o=i.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return o.run(s,e.kind,e.id,r),o.run(s,"bot",n,r),s}function V(e){return i.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function J(e,t){try{return i.default.transaction(()=>{let{input:n,afterCreate:i}=e(),r=c.exchanges.create(n);return r.created&&i&&i(r.exchange),t?.(r.exchange),r}).immediate()}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}}function U(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");B(e,["content","idempotency_key"],"");let n=H(e,t);return{content:K(e.content,"content",o.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function X(e,t){return t.requester_kind===e.principal.kind&&t.requester_id===e.principal.id&&I(e,t.source_agent_id)&&(null===t.destination_agent_id||I(e,t.destination_agent_id))}function Y(e,t){let n=c.exchanges.get(t);if(!n)throw b.exchange();if(!X(e,n))throw k("exchange");return n}let z=e=>e.idempotency_key.startsWith(u)?"session_message":"exchange";function Q(e,t){let n=t.idempotency_key.startsWith(u)?t.idempotency_key.slice(u.length):t.idempotency_key.startsWith(l)?t.idempotency_key.slice(l.length):t.idempotency_key;return(0,p.serviceRedactor)().deep({...e,kind:z(t),idempotency_key:n})}function Z(e){return{id:e.id,kind:z(e),mode:e.mode,state:e.state,source:{agent_id:e.source_agent_id,session_ref:e.source_binding_id},destination:e.destination_agent_id?{agent_id:e.destination_agent_id,session_ref:e.destination_binding_id}:null,failure:"failed"===e.state?{code:e.failure_code??"failed"}:null,created_at:e.created_at,updated_at:e.updated_at,terminal_at:e.terminal_at}}function ee(e,t){let n=c.exchanges.require(t);return X(e,n)?Q((0,c.getExchangeView)(t),n):Z(n)}let et=["exchange_id","parent_exchange_id"];async function en(e,t,n,i){let r=Y(e,t);try{let{replayed:t}=await (0,c.cancelExchangeCommand)(r.id,e.principal,n,i);return{exchange:ee(e,r.id),replayed:t}}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}}let ei=e=>"resume"===e?"sessions:resume":"sessions:message";function er(e){if(e instanceof w.PinError){if("session_not_found"===e.code)throw b.session();if("agent_not_found"===e.code)throw b.agent();if("pin_not_found"===e.code)throw b.pin();if("conversation_not_found"===e.code)throw b.conversation();throw new S(e.code,e.message)}if(e instanceof d.ExchangeError)throw R(e);throw e}function es(e,t){let n;try{n=(0,w.requirePin)(e.principal,t)}catch(e){er(e)}if(!I(e,n.agent_id))throw k("pin");return n}function eo(e){return(0,p.serviceRedactor)().deep((0,w.pinView)(e))}async function ea(e,t,n,i){x(e,t);try{let r=await (0,w.messageAgent)({requester:e.principal,agentId:t,content:n.content,idempotencyKey:n.idempotencyKey,mayStart:!0,onResolved:e=>i.onTarget({agentId:e.agentId,sessionRef:e.sessionRef,capability:"started"===e.resolution?"sessions:start":"sessions:message",action:"started"===e.resolution?"agents.message.start":"agents.message"}),onCommit:()=>i.onCommit()});return{body:{pin:eo(r.pin),turn:(0,p.serviceRedactor)().deep(r.turn),resolution:r.resolution,replayed:r.replayed},settled:r.settled}}catch(e){er(e)}}async function ed(e,t,n,i){let r=(0,w.sessionOwner)(t);if(!r)throw b.session();let s=ei(n.action);if(i.onTarget({agentId:r,sessionRef:t,capability:s,action:"resume"===n.action?"pins.resume":"pins.ask"}),!I(e,r))throw k("session");n.replacePinRef&&es(e,n.replacePinRef);try{let{pin:r,created:s,replaced:o}=await (0,w.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:eo(r),replaced_pin_ref:o?.id??null,replayed:!s}}catch(e){er(e)}}async function ec(e,t,n,i){let r=es(e,t);i.onTarget({agentId:r.agent_id,sessionRef:r.session_ref,capability:ei(r.action),action:"pins.send"});try{let t=await (0,w.sendPinTurn)({requester:e.principal,pinRef:r.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:eo(t.pin),turn:(0,p.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){er(e)}}async function e_(e,t,n){let i=es(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ei(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,w.readPin)(e.principal,i.id);return{pin:eo(t),turns:(0,p.serviceRedactor)().deep(n)}}catch(e){er(e)}}let eu=["provider_session_id","external_session_id","claude_session_id","codex_thread_id","cursor_chat_id","thread_id","chat_id","cwd","workspace","latest","most_recent","title","title_match","active_since"],el=[...new Set([...F,...eu])];function ep(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(el.includes(i))throw new S("authority_not_allowed",`${n}${i} cannot select or describe a session; name it by session_ref only.`);throw new S("invalid_request",`${n}${i} is not a field of this request.`)}}function eg(e,t){if(null==e)return null;if("number"!=typeof e||!Number.isInteger(e))throw new S("invalid_request",`${t} must be an integer.`);return e}function ef(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(ep(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!W(e.audience))throw new S("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(ep(e.audience,["kind","team_id","channel_id"],"audience."),!(0,v.isSlackAudience)(e.audience))throw new S("invalid_request",'audience must be { kind: "slack", team_id: "T…", channel_id: "C…" } with exact Slack ids.');return{audience:{kind:"slack",team_id:e.audience.team_id,channel_id:e.audience.channel_id},ttlSeconds:eg(e.ttl_seconds,"ttl_seconds"),maxTurns:eg(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:K(e.agent_id,"agent_id",200),idempotencyKey:H(e,t)}}let eh=["session_ref","state","cursor","limit"],em=["active","expired","revoked"];function ev(e){if(e instanceof v.ShareError){if("session_not_found"===e.code)throw b.session();if("share_not_found"===e.code)throw b.share();throw new S(e.code,e.message)}er(e)}function ew(e,t){let n=(0,v.shareRow)(t);if(!n)throw b.share();if(!(n.creator_kind===e.principal.kind&&n.creator_id===e.principal.id&&I(e,n.agent_id)))throw k("share");return n}function ey(e,t=(0,p.serviceRedactor)()){return t.deep((0,v.shareView)(e))}async function eE(e,t,n,i){let r=(0,w.sessionOwner)(t);if(i.onTarget({agentId:r,sessionRef:t}),!r)throw b.session();if(!I(e,r))throw k("session");if(null!==n.agentId&&n.agentId!==r)throw b.session();try{let{share:r,created:s}=await (0,v.createShare)({creator:e.principal,sessionRef:t,agentId:n.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:n.idempotencyKey,createdVia:"session_ref",onCommit:()=>i.onCommit()});return{share:ey(r),replayed:!s}}catch(e){ev(e)}}let eS=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];async function eb(e,n,i,r){if(r.onTarget({agentId:n.agentId,sessionRef:n.sessionRef}),null!==i.agentId&&i.agentId!==n.agentId)throw b.session();try{var s,o;let{share:a,created:d}=await (0,v.createShare)({creator:e.principal,sessionRef:n.sessionRef,agentId:n.agentId,audience:i.audience,ttlSeconds:i.ttlSeconds,maxTurns:i.maxTurns,idempotencyKey:(s=n.sessionRef,o=i.idempotencyKey,`current:${(0,t.createHash)("sha256").update(s).digest("hex").slice(0,24)}:${o}`),createdVia:"current_session",onCommit:()=>r.onCommit()});return{share:ey(a),replayed:!d}}catch(e){ev(e)}}e.s(["AUTHORITY_FIELDS",0,F,"MESSAGE_CONTENT_LIMIT",0,16e3,"PAGE_LIMITS",0,C,"SHARE_SELECTOR_FIELDS",0,eu,"ServiceApiError",0,S,"agentMessagingReadiness",0,T,"cancelServiceExchange",0,en,"capabilitiesView",0,function(e){let t=A(e).map(e=>({agent_id:e.id,capabilities:[..._]})).sort((e,t)=>e.agent_id<t.agent_id?-1:+(e.agent_id>t.agent_id));return{principal:{kind:e.principal.kind,id:e.principal.id},mode:e.mode,vocabulary:_,agents:t,limits:{page:C,content_chars:o.EXCHANGE_LIMITS.instructionChars,message_content_chars:16e3}}},"checkShareListParams",0,function(e){for(let t of e)if(!eh.includes(t)){if(el.includes(t))throw new S("authority_not_allowed",`${t} cannot select a session; filter by session_ref only.`);throw new S("invalid_request",`${t} is not a parameter of this list.`)}},"createCurrentSessionShare",0,eb,"createServiceExchange",0,function(e,t,n){let r=V(t.sessionRef);if(!r||null!==t.sourceAgentId&&t.sourceAgentId!==r.agent_id)throw b.session();if(!I(e,r.agent_id))throw k("session");if("ask"===t.mode&&(null!==t.destinationAgentId||null!==t.destinationConversationId))throw new S("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===t.mode){if(null===t.destinationAgentId)throw new S("destination_invalid","A Continue names destination.agent_id.");if(!i.bots.getById(t.destinationAgentId))throw b.agent();if(!I(e,t.destinationAgentId))throw k("agent")}let s=e.principal,o=`${l}${t.idempotencyKey}`,{exchange:a,created:d}=J(()=>{let e=Date.now(),n=j(s,o),i=t.originConversationId??n?.origin_conversation_id??G(s,r.agent_id,e),a="continue"!==t.mode?null:t.destinationConversationId??n?.destination_conversation_id??G(s,t.destinationAgentId,e);return{input:{requester:s,serviceGrant:!0,idempotencyKey:o,mode:t.mode,originConversationId:i,sourceAgentId:r.agent_id,sessionRef:r.id,destinationAgentId:t.destinationAgentId,destinationConversationId:a,instruction:t.instruction,now:e}}},n),_=(0,c.dispatchExchange)(a.id);return{exchange:ee(e,a.id),created:d,dispatched:_}},"createServiceShare",0,eE,"detachServicePin",0,function(e,t,n){let i=es(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ei(i.action),action:"pins.detach"});try{let{pin:t,replayed:r}=(0,w.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:eo(t),replayed:r}}catch(e){er(e)}},"getServiceAgent",0,function(e,t){return N(e,x(e,t))},"getServiceConversation",0,function(e,t,r,s){var o;x(e,t);let a=i.default.prepare(`${M} WHERE c.id = ?`).get(t,r);if(!a)throw b.conversation();let d=P(a.id);if(!$(e,d))throw k("conversation");let c=`messages:${a.id}`,_=function(e,t){try{return(0,n.decodePageCursor)(e,t)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new S("invalid_request",e.message);throw e}}(c,s.cursor),u=i.default.prepare(`
14
14
  SELECT * FROM (
15
15
  SELECT m.id, m.sender_type, m.sender_id, m.sender_kind, m.request_id, m.content, m.created_at,
16
16
  ROW_NUMBER() OVER (ORDER BY m.rowid ASC) AS seq
17
17
  FROM messages m WHERE m.conversation_id = ?
18
18
  ) WHERE seq < ? ORDER BY seq DESC LIMIT ?
19
- `).all(o.id,_?_.at:Number.MAX_SAFE_INTEGER,s.limit+1),p=l.slice(0,s.limit).reverse(),g=(0,u.serviceRedactor)();return{...L(o,d),messages:p.map(e=>{var t,n;let i,r=g.text(e.content);return{message_id:e.id,seq:e.seq,sender:(t=e,n=o,i=t.sender_kind??("bot"===t.sender_type?"bot":"person"),t.sender_id?{kind:i,id:t.sender_id}:"bot"!==i&&n.origin_kind===i&&n.origin_id?{kind:i,id:n.origin_id}:{kind:i,id:"unknown"}),content:r.length>16e3?r.slice(0,16e3):r,truncated:r.length>16e3,request_id:e.request_id,created_at:e.created_at}}),next_cursor:l.length>s.limit&&p.length>0?(a={at:p[0].seq,tie:0,id:p[0].id},(0,n.encodePageCursor)(c,a)):null}},"getServiceExchange",0,function(e,t){let n=V(e,t,"exchanges:read");return J((0,c.getExchangeView)(n.id),n)},"getServiceSession",0,function(e,t,n){k(e,t,"sessions:read");let r=(0,o.getAgentSession)(i.default,t,n);if(!r)throw y.session();return(0,u.serviceRedactor)().deep({...q((0,h.sessionsWithActions)(t,[r])[0]),attempts:r.attempts,usage_samples:r.usage_samples.map(e=>({...e}))})},"getServiceShare",0,function(e,t,n){let i=eh(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:em(i)}},"holds",0,I,"listServiceAgents",0,function(e,t){let n=[...e.agents.keys()].filter(t=>I(e,t,"agents:read")).map(t=>C(e,i.bots.getById(t)));return A(`agents:${e.principal.id}`,n,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),t.cursor,t.limit)},"listServiceConversations",0,function(e,t,n){k(e,t,"conversations:read");let r=i.default.prepare(N).all(t).flatMap(t=>{let n=O(t.id);return P(e,n)?[L(t,n)]:[]});return A(`conversations:${t}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),n.cursor,n.limit)},"listServiceExchanges",0,function(e,t){let n=i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>j(e,t,"exchanges:read")).map(U);return A(`exchanges:${e.principal.id}`,n,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),t.cursor,t.limit)},"listServiceSessions",0,function(e,t,n){k(e,t,"sessions:read");let r=n.status??"all";if(!(0,o.isSessionFilter)(r))throw new w("invalid_request","status must be active, ended, or all.");let s=(0,u.serviceRedactor)(),a=(0,h.sessionsWithActions)(t,(0,o.listAgentSessions)(i.default,t,r)).map(e=>s.deep(q(e)));return A(`sessions:${t}:${r}`,a,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),n.cursor,n.limit)},"listServiceShares",0,function(e,t){if(null!==t.sessionRef&&(""===t.sessionRef.trim()||t.sessionRef.length>200))throw new w("invalid_request","session_ref must be one session reference.");if(null!==t.state&&!eg.includes(t.state))throw new w("invalid_request","state must be active, expired, or revoked.");let n=(0,u.serviceRedactor)(),i=(0,f.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>I(e,t.agent_id,"shares:create")).map(e=>em(e,n)).filter(e=>null===t.state||e.state===t.state);return A(`shares:${e.principal.id}:${t.sessionRef??""}:${t.state??""}`,i,e=>({at:e.created_at,tie:e.created_at,id:e.share_ref}),t.cursor,t.limit)},"messageServiceAgent",0,er,"parseAgentMessageBody",0,function(e,t){return X(e,t)},"parseCancelBody",0,function(e){try{return(0,d.cancelReasonFromBody)(e)}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}},"parseLimit",0,function(e,t=R.default,n=R.max){if(null===e||""===e)return t;if(!/^\d+$/.test(e)||1>Number(e)||Number(e)>n)throw new w("invalid_request",`limit must be an integer from 1 to ${n}.`);return Number(e)},"parsePinBody",0,function(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(F(e,["action","approve_write","replace_pin_ref","idempotency_key"],""),"ask"!==e.action&&"resume"!==e.action)throw new w("invalid_request",'action must be "ask" or "resume".');if(void 0!==e.approve_write&&"boolean"!=typeof e.approve_write)throw new w("invalid_request","approve_write must be true or false.");return{action:e.action,approveWrite:!0===e.approve_write,replacePinRef:void 0===e.replace_pin_ref||null===e.replace_pin_ref?null:D(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:K(e,t)}},"parseServiceExchangeBody",0,function(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(Q.some(t=>t in e))throw new w("recursive_exchange","An exchange cannot be started from another exchange.");if(F(e,["mode","idempotency_key","origin_conversation_id","source","destination","instruction"],""),"ask"!==e.mode&&"continue"!==e.mode)throw new w("invalid_request",'mode must be "ask" or "continue".');if(!$(e.source))throw new w("invalid_request","source must be one object { session_ref, agent_id? }.");F(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!$(e.destination))throw new w("destination_invalid","destination must be one object { agent_id, conversation_id? }.");F(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:D(e,t,200);return{mode:e.mode,idempotencyKey:K(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:D(e.source.session_ref,"source.session_ref",200),destinationAgentId:n?i(n.agent_id,"destination.agent_id"):null,destinationConversationId:n?i(n.conversation_id,"destination.conversation_id"):null,instruction:D(e.instruction,"instruction",a.EXCHANGE_LIMITS.instructionChars)}},"parseSessionMessageBody",0,X,"parseShareCreateBody",0,el,"parseShareCurrentBody",0,function(e,t){if($(e)&&Object.prototype.hasOwnProperty.call(e,"session_ref"))throw new w("invalid_request","Share-current takes no session_ref: its session is the one this launch is bound to. To share another session, use its session_ref with create-share.");return $(e)&&e_(e,ew,""),el(e,t)},"parseShareRevokeBody",0,function(e){let t;if(""!==e.trim()){try{t=JSON.parse(e)}catch{throw new w("invalid_request","The body must be empty or a JSON object.")}if(!$(t))throw new w("invalid_request","The body must be empty or a JSON object.");e_(t,["idempotency_key"],""),void 0!==t.idempotency_key&&D(t.idempotency_key,"idempotency_key",160)}},"pinServiceSession",0,es,"readServicePin",0,eo,"requireShareCurrentCaller",0,function(e){if(e.kind!==g.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==g.SESSION_CONTEXT_PRINCIPAL.id)throw new w("invalid_request","Share-current is only available inside a Botmancers-launched session, authenticated by its session context, not a service token. Pass session_ref to create-share instead.")},"revokeServiceShare",0,function(e,t,n){let i=eh(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref});try{let{share:e,replayed:t}=(0,f.revokeShare)(i.id,{onCommit:()=>n.onCommit()});return{share:em(e),replayed:t}}catch(e){ef(e)}},"sendServicePinMessage",0,ea,"sendServiceSessionMessage",0,function(e,n,r,s){let a=W(n);if(!a){let t=i.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(t&&I(e,t.agent_id,"sessions:message"))throw new w("session_not_resumable","This session is not reachable through session messages.");throw y.session()}if(!I(e,a.agent_id,"sessions:message"))throw E("session");let o=e.principal,d=`${_.MESSAGE_KEY_PREFIX}${r.idempotencyKey}`,{exchange:u,created:l}=H(()=>{let e=Date.now(),n=B(o,d),s=i.default.prepare(`
19
+ `).all(a.id,_?_.at:Number.MAX_SAFE_INTEGER,s.limit+1),l=u.slice(0,s.limit).reverse(),g=(0,p.serviceRedactor)();return{...D(a,d),messages:l.map(e=>{var t,n;let i,r=g.text(e.content);return{message_id:e.id,seq:e.seq,sender:(t=e,n=a,i=t.sender_kind??("bot"===t.sender_type?"bot":"person"),t.sender_id?{kind:i,id:t.sender_id}:"bot"!==i&&n.origin_kind===i&&n.origin_id?{kind:i,id:n.origin_id}:{kind:i,id:"unknown"}),content:r.length>16e3?r.slice(0,16e3):r,truncated:r.length>16e3,request_id:e.request_id,created_at:e.created_at}}),next_cursor:u.length>s.limit&&l.length>0?(o={at:l[0].seq,tie:0,id:l[0].id},(0,n.encodePageCursor)(c,o)):null}},"getServiceExchange",0,function(e,t){let n=Y(e,t);return Q((0,c.getExchangeView)(n.id),n)},"getServiceSession",0,function(e,t,n){x(e,t);let r=(0,a.getAgentSession)(i.default,t,n);if(!r)throw b.session();return(0,p.serviceRedactor)().deep({...O((0,w.sessionsWithActions)(t,[r])[0]),attempts:r.attempts,usage_samples:r.usage_samples.map(e=>({...e}))})},"getServiceShare",0,function(e,t,n){let i=ew(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:ey(i)}},"listServiceAgents",0,function(e,t){let n=A(e).map(t=>N(e,t));return q(`agents:${e.principal.id}`,n,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),t.cursor,t.limit)},"listServiceConversations",0,function(e,t,n){x(e,t);let r=i.default.prepare(M).all(t).flatMap(t=>{let n=P(t.id);return $(e,n)?[D(t,n)]:[]});return q(`conversations:${t}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),n.cursor,n.limit)},"listServiceExchanges",0,function(e,t){let n=i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>X(e,t)).map(Z);return q(`exchanges:${e.principal.id}`,n,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),t.cursor,t.limit)},"listServiceSessions",0,function(e,t,n){x(e,t);let r=n.status??"all";if(!(0,a.isSessionFilter)(r))throw new S("invalid_request","status must be active, ended, or all.");let s=(0,p.serviceRedactor)(),o=(0,w.sessionsWithActions)(t,(0,a.listAgentSessions)(i.default,t,r)).map(e=>s.deep(O(e)));return q(`sessions:${t}:${r}`,o,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),n.cursor,n.limit)},"listServiceShares",0,function(e,t){if(null!==t.sessionRef&&(""===t.sessionRef.trim()||t.sessionRef.length>200))throw new S("invalid_request","session_ref must be one session reference.");if(null!==t.state&&!em.includes(t.state))throw new S("invalid_request","state must be active, expired, or revoked.");let n=(0,p.serviceRedactor)(),i=(0,v.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>I(e,t.agent_id)).map(e=>ey(e,n)).filter(e=>null===t.state||e.state===t.state);return q(`shares:${e.principal.id}:${t.sessionRef??""}:${t.state??""}`,i,e=>({at:e.created_at,tie:e.created_at,id:e.share_ref}),t.cursor,t.limit)},"messageServiceAgent",0,ea,"parseAgentMessageBody",0,function(e,t){return U(e,t)},"parseCancelBody",0,function(e){try{return(0,d.cancelReasonFromBody)(e)}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}},"parseLimit",0,function(e,t=C.default,n=C.max){if(null===e||""===e)return t;if(!/^\d+$/.test(e)||1>Number(e)||Number(e)>n)throw new S("invalid_request",`limit must be an integer from 1 to ${n}.`);return Number(e)},"parsePinBody",0,function(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(B(e,["action","approve_write","replace_pin_ref","idempotency_key"],""),"ask"!==e.action&&"resume"!==e.action)throw new S("invalid_request",'action must be "ask" or "resume".');if(void 0!==e.approve_write&&"boolean"!=typeof e.approve_write)throw new S("invalid_request","approve_write must be true or false.");return{action:e.action,approveWrite:!0===e.approve_write,replacePinRef:void 0===e.replace_pin_ref||null===e.replace_pin_ref?null:K(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:H(e,t)}},"parseServiceExchangeBody",0,function(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(et.some(t=>t in e))throw new S("recursive_exchange","An exchange cannot be started from another exchange.");if(B(e,["mode","idempotency_key","origin_conversation_id","source","destination","instruction"],""),"ask"!==e.mode&&"continue"!==e.mode)throw new S("invalid_request",'mode must be "ask" or "continue".');if(!W(e.source))throw new S("invalid_request","source must be one object { session_ref, agent_id? }.");B(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!W(e.destination))throw new S("destination_invalid","destination must be one object { agent_id, conversation_id? }.");B(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:K(e,t,200);return{mode:e.mode,idempotencyKey:H(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:K(e.source.session_ref,"source.session_ref",200),destinationAgentId:n?i(n.agent_id,"destination.agent_id"):null,destinationConversationId:n?i(n.conversation_id,"destination.conversation_id"):null,instruction:K(e.instruction,"instruction",o.EXCHANGE_LIMITS.instructionChars)}},"parseSessionMessageBody",0,U,"parseShareCreateBody",0,ef,"parseShareCurrentBody",0,function(e,t){if(W(e)&&Object.prototype.hasOwnProperty.call(e,"session_ref"))throw new S("invalid_request","Share-current takes no session_ref: its session is the one this launch is bound to. To share another session, use its session_ref with create-share.");return W(e)&&ep(e,eS,""),ef(e,t)},"parseShareRevokeBody",0,function(e){let t;if(""!==e.trim()){try{t=JSON.parse(e)}catch{throw new S("invalid_request","The body must be empty or a JSON object.")}if(!W(t))throw new S("invalid_request","The body must be empty or a JSON object.");ep(t,["idempotency_key"],""),void 0!==t.idempotency_key&&K(t.idempotency_key,"idempotency_key",160)}},"pinServiceSession",0,ed,"readServicePin",0,e_,"requireShareCurrentCaller",0,function(e){if(e.kind!==h.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==h.SESSION_CONTEXT_PRINCIPAL.id)throw new S("invalid_request","Share-current is only available inside a Botmancers-launched session, authenticated by its session context, not a service token. Pass session_ref to create-share instead.")},"revokeServiceShare",0,function(e,t,n){let i=ew(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref});try{let{share:e,replayed:t}=(0,v.revokeShare)(i.id,{onCommit:()=>n.onCommit()});return{share:ey(e),replayed:t}}catch(e){ev(e)}},"sendServicePinMessage",0,ec,"sendServiceSessionMessage",0,function(e,n,r,s){let o=V(n);if(!o){let t=i.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(t&&I(e,t.agent_id))throw new S("session_not_resumable","This session is not reachable through session messages.");throw b.session()}if(!I(e,o.agent_id))throw k("session");let a=e.principal,d=`${u}${r.idempotencyKey}`,{exchange:_,created:l}=J(()=>{let e=Date.now(),n=j(a,d),s=i.default.prepare(`
20
20
  SELECT origin_conversation_id FROM session_exchanges
21
21
  WHERE requester_kind = ? AND requester_id = ? AND source_binding_id = ? AND mode = 'ask' AND idempotency_key LIKE 'message:%'
22
22
  ORDER BY created_at ASC, id ASC LIMIT 1
23
- `).get(o.kind,o.id,a.id),c=n?.origin_conversation_id??s?.origin_conversation_id??G(o,a.agent_id,e);return{input:{requester:o,serviceGrant:!0,idempotencyKey:d,mode:"ask",originConversationId:c,sourceAgentId:a.agent_id,sessionRef:a.id,instruction:r.content,now:e},afterCreate:n=>{i.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.origin_conversation_id,"user",o.id,o.kind,n.source_request_id,r.content,e)}}},s),p=(0,c.dispatchExchange)(u.id),g=u.source_request_id?i.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(u.source_request_id):void 0,f=i.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(u.origin_conversation_id,u.source_request_id,o.kind);return{accepted:{session_ref:a.id,agent_id:a.agent_id,exchange_id:u.id,request_id:u.source_request_id,conversation_id:u.origin_conversation_id,message_id:f?.id??null,state:g?(0,c.apiStateOf)(g.state):"accepted",replayed:!l},dispatched:p}},"serviceContext",0,function(e){if("service"!==e.kind)throw new w("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===g.SESSION_CONTEXT_SERVICE_ID)return{principal:e,mode:"narrow",agents:b};let t=(0,_.loadServiceGrants)();if("invalid"===t.state)throw new w("grants_unavailable","The service grants are not available; the owner must fix the grants document.");return"absent"===t.state?{principal:e,mode:"narrow",agents:b}:{principal:e,mode:"granted",agents:t.grants.get(e.id)??b}},"sessionContextError",0,function(e){return new w("session_context_required","This caller has no exact session context; share a session explicitly by its session_ref (botmancers_list_sessions).",{reason:e.reason})},"warmServiceAgent",0,T])}];
23
+ `).get(a.kind,a.id,o.id),c=n?.origin_conversation_id??s?.origin_conversation_id??G(a,o.agent_id,e);return{input:{requester:a,serviceGrant:!0,idempotencyKey:d,mode:"ask",originConversationId:c,sourceAgentId:o.agent_id,sessionRef:o.id,instruction:r.content,now:e},afterCreate:n=>{i.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.origin_conversation_id,"user",a.id,a.kind,n.source_request_id,r.content,e)}}},s),p=(0,c.dispatchExchange)(_.id),g=_.source_request_id?i.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(_.source_request_id):void 0,f=i.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(_.origin_conversation_id,_.source_request_id,a.kind);return{accepted:{session_ref:o.id,agent_id:o.agent_id,exchange_id:_.id,request_id:_.source_request_id,conversation_id:_.origin_conversation_id,message_id:f?.id??null,state:g?(0,c.apiStateOf)(g.state):"accepted",replayed:!l},dispatched:p}},"serviceContext",0,function(e){if("service"!==e.kind)throw new S("principal_not_allowed","The service API accepts only service principals.");return{principal:e,mode:"granted",reachesAgents:!m.RESERVED_SERVICE_IDS.includes(e.id)}},"sessionContextError",0,function(e){return new S("session_context_required","This caller has no exact session context; share a session explicitly by its session_ref (botmancers_list_sessions).",{reason:e.reason})},"warmServiceAgent",0,L],9501)}];
24
24
 
25
25
  //# sourceMappingURL=lib_service-api_ts_18eok4w._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414),s=e.i(89443);let n="The shared session could not answer this question.",i=Object.freeze({share_expired:"This shared session is no longer available (the share expired).",share_revoked:"This shared session is no longer available (the owner revoked the share).",share_turn_in_progress:"A question is still being answered; ask again when it finishes.",share_turn_limit:"This share has used all of its questions.",source_session_busy:"The session is busy right now; ask again shortly."});t.default.exec(`
1
+ module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414),n=e.i(89443);let s="The shared session could not answer this question.",i=Object.freeze({share_expired:"This shared session is no longer available (the share expired).",share_revoked:"This shared session is no longer available (the owner revoked the share).",share_turn_in_progress:"A question is still being answered; ask again when it finishes.",share_turn_limit:"This share has used all of its questions.",source_session_busy:"The session is busy right now; ask again shortly."});t.default.exec(`
2
2
  CREATE TABLE IF NOT EXISTS slack_share_threads (
3
3
  share_ref TEXT PRIMARY KEY,
4
4
  session_ref TEXT NOT NULL,
@@ -45,19 +45,19 @@ module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414
45
45
  );
46
46
  CREATE UNIQUE INDEX IF NOT EXISTS idx_slack_questions_turn ON slack_questions(share_ref, turn_ref) WHERE turn_ref IS NOT NULL;
47
47
  CREATE INDEX IF NOT EXISTS idx_slack_questions_state ON slack_questions(state, created_at);
48
- `);let o=/^[A-Z0-9]{2,32}$/,l=/^\d{1,12}\.\d{1,9}$/,d=/^[A-Za-z0-9._:-]{1,200}$/,c=/^[A-Za-z0-9]{1,64}$/,_=e=>"string"==typeof e?e:null;function u(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"")}function p(e,t){if(e.length<=t)return e;let r=t-1,a=e.charCodeAt(r-1);a>=55296&&a<=56319&&(r-=1);let s=e.lastIndexOf("&",r-1);return -1!==s&&s>=r-4&&e.indexOf(";",s)>=r&&(r=s),`${e.slice(0,r)}…`}function h(e){return t.default.prepare("SELECT * FROM slack_share_threads WHERE share_ref = ?").get(e)}function f(e){return t.default.prepare("SELECT * FROM slack_questions WHERE message_key = ?").get(e)}var y=e.i(90440),m=e.i(82554);class E extends Error{code;slackError;constructor(e,t,r=null){super(t),this.name="SlackTransportError",this.code=e,this.slackError=r}}let T=/^[a-z0-9_]{1,64}$/;function k(e){let t=e?.data,r=t&&"string"==typeof t.error?t.error:null;return r&&T.test(r)?r:null}function g(e){let t=[e.appToken,e.botToken].filter(e=>"string"==typeof e&&e.length>=8);return e=>t.reduce((e,t)=>e.split(t).join("[redacted]"),String(e)).replace(/\bx(?:app|ox[abpers])-[A-Za-z0-9-]+/g,"[redacted]")}async function w(e){let t;try{t=await e.auth.test()}catch(t){let e=k(t);throw new E("slack_auth_failed",`Slack auth.test failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.user_id||"string"!=typeof t.team_id)throw new E("slack_auth_failed","Slack auth.test returned no bot identity.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{user_id:t.user_id,team_id:t.team_id}}let v=/^xapp-[A-Za-z0-9-]{8,250}$/,N=/^xoxb-[A-Za-z0-9-]{8,250}$/,S=Symbol.for("botmancers.slack-runtime"),L=globalThis;function R(){return L[S]||(L[S]={status:{state:"stopped",reason:null,since:Date.now(),connections:0},relay:null,clients:null,stop:null,starting:null}),L[S]}function A(){return{...R().status}}async function I(){let e=R();return e.starting&&await e.starting.catch(()=>{}),e.stop&&await e.stop(),A()}async function O(e,S){let L,R=S.now??(()=>Date.now()),I=function(e=process.env){let t=(e.BOTMANCERS_SLACK_APP_TOKEN??"").trim(),r=(e.BOTMANCERS_SLACK_BOT_TOKEN??"").trim();if(!t&&!r)return{state:"disabled",reason:"slack_tokens_absent"};if(!t)return{state:"misconfigured",reason:"app_token_missing"};if(!r)return{state:"misconfigured",reason:"bot_token_missing"};if(!v.test(t))return{state:"misconfigured",reason:"app_token_invalid"};if(!N.test(r))return{state:"misconfigured",reason:"bot_token_invalid"};let a=(0,s.loadSessionSharesConfig)(e);return"absent"===a.state?{state:"misconfigured",reason:"share_config_absent"}:"invalid"===a.state?{state:"misconfigured",reason:"share_config_invalid"}:0===a.config.audiences.length?{state:"misconfigured",reason:"share_config_no_audience"}:{state:"ready",tokens:{appToken:t,botToken:r},teams:new Set(a.config.audiences.map(e=>e.team_id))}}(S.env??process.env),O="ready"===I.state?g(I.tokens):e=>e,U=e=>(S.log??(e=>console.log(e)))(O(e)),b=0,M=(t,r=null)=>{(e.status.state!==t||e.status.reason!==r)&&U(`Slack relay: ${t}${r?` (${r})`:""}`),e.status={state:t,reason:r,since:R(),connections:b}},C=e=>U(`Slack relay error: ${e instanceof Error?e.message:"unknown error"}`);if("ready"!==I.state)return M(I.state,I.reason),A();M("connecting");let D=(S.clients??(e=>(function(e,t={}){let r=function(e,t=e=>console.warn(e)){let r="slack",a=a=>(...s)=>t(e(`Slack ${r} ${a}: ${s.map(e=>e instanceof Error?e.message:String(e)).join(" ")}`).slice(0,500));return{debug:()=>{},info:()=>{},warn:a("warn"),error:a("error"),setLevel:()=>{},getLevel:()=>"warn",setName:e=>{r=e}}}(g(e),t.log),a=t.slackApiUrl?{slackApiUrl:t.slackApiUrl}:{};return{socket:new y.SocketModeClient({appToken:e.appToken,logger:r,autoReconnectEnabled:!0,...t.clientPingTimeoutMs?{clientPingTimeout:t.clientPingTimeoutMs}:{},...t.serverPingTimeoutMs?{serverPingTimeout:t.serverPingTimeoutMs}:{},clientOptions:{...a}}),web:new m.WebClient(e.botToken,{logger:r,timeout:15e3,retryConfig:{retries:2,factor:2,minTimeout:500,maxTimeout:4e3},...a})}})(e,{log:U,...S.clientOptions})))(I.tokens);try{L=await w(D.web)}catch(e){return C(e),M("failed","slack_auth_failed"),A()}if(!I.teams.has(L.team_id))return M("misconfigured","workspace_not_allowlisted"),A();let q=function(e,t={}){let{socket:r,web:a}=e,n=t.stopGraceMs??5e3,i=t.onError??(e=>console.error("Slack transport:",e instanceof Error?e.message:"unknown error")),o="idle",l=null,d=new Set;return{async start(e){if("idle"!==o)throw new E("started"===o?"slack_transport_started":"slack_transport_stopped","This Slack transport was already started.");o="started",l=t=>{if("started"!==o||t?.type!=="events_api")return;let r={envelope_id:t.envelope_id,type:t.type,accepts_response_payload:t.accepts_response_payload,retry_attempt:t.retry_num,retry_reason:t.retry_reason,payload:t.body},a=Promise.resolve().then(()=>e(r)).catch(i);d.add(a),a.finally(()=>d.delete(a))},r.on("slack_event",l);try{await r.start()}catch(t){r.off("slack_event",l),l=null,o="stopped",await r.disconnect().catch(()=>{});let e=k(t);throw new E("slack_connect_failed",`The Slack Socket Mode connection could not be opened${e?` (${e})`:""}.`,e)}},async ack(e){if("idle"===o||"stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");try{await r.send(e)}catch{throw new E("slack_ack_failed","The Socket Mode acknowledgement could not be sent (not connected).")}},async post(e){let t;if("stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");if("string"!=typeof e.text||e.text.length>s.SHARE_LIMITS.replyChars)throw new E("slack_post_too_long",`A Slack post is at most ${s.SHARE_LIMITS.replyChars} characters.`);try{t=await a.chat.postMessage({channel:e.channel,...null!==e.thread_ts?{thread_ts:e.thread_ts}:{},text:e.text,metadata:{event_type:e.metadata.event_type,event_payload:{...e.metadata.event_payload}},unfurl_links:!1,unfurl_media:!1})}catch(t){let e=k(t);throw new E("slack_post_failed",`Slack chat.postMessage failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.ts)throw new E("slack_post_failed","Slack chat.postMessage returned no message ts.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{ts:t.ts}},async stop(){if("stopped"===o||"stopping"===o)return;let e="started"===o;if(o="stopping",l&&r.off("slack_event",l),l=null,d.size>0){let e;await Promise.race([Promise.allSettled([...d]),new Promise(t=>{e=setTimeout(t,n)})]),clearTimeout(e)}o="stopped",e&&await r.disconnect().catch(i)}}}(D,{stopGraceMs:S.stopGraceMs,onError:C}),X=function(e){let{transport:y,botUserId:m}=e,E=e.now??(()=>Date.now()),T=e.onError??(e=>console.error("Slack relay:",e instanceof Error?e.message:"unknown error")),k=new Set,g=new Set,w=new Map,v=new Set;async function N(e){let r=h(e);if(r)return{thread:r,created:!1};let a=w.get(e);if(a)return a;let n=(async()=>{let r=(0,s.shareRow)(e);if(!r)throw new s.ShareError("share_not_found","No share with that reference.");let a=(0,s.shareState)(r);if("revoked"===a)throw new s.ShareError("share_revoked","This share was revoked.");if("expired"===a)throw new s.ShareError("share_expired","This share has expired.");let n={kind:"slack",team_id:r.audience_team_id,channel_id:r.audience_channel_id};if(!(0,s.audienceAllowed)(n))throw new s.ShareError("audience_not_allowed","That audience is not on the owner's share allowlist (session-shares.json).");let i=await y.post({channel:n.channel_id,thread_ts:null,text:"A coding-agent session was shared here (read-only). Reply in this thread to ask it a question.",metadata:{event_type:"botmancers_share",event_payload:{share_ref:r.id}}});if("string"!=typeof i?.ts||!l.test(i.ts))throw Error("The transport returned no message ts for the anchor.");return t.default.prepare("INSERT INTO slack_share_threads (share_ref, session_ref, team_id, channel_id, thread_ts, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(r.id,r.session_ref,n.team_id,n.channel_id,i.ts,E()),{thread:h(r.id),created:!0}})();w.set(e,n);try{return await n}finally{w.delete(e)}}let S=t.default.transaction(e=>{var r,a,n;let i=e.delivery;if(t.default.prepare("SELECT 1 FROM slack_deliveries WHERE envelope_id = ? AND retry_attempt = ?").get(i.envelope_id,i.retry_attempt))return{kind:"duplicate_delivery"};let o=E(),l=(r,a)=>{t.default.prepare(`
48
+ `);let o=/^[A-Z0-9]{2,32}$/,l=/^\d{1,12}\.\d{1,9}$/,d=/^[A-Za-z0-9._:-]{1,200}$/,c=/^[A-Za-z0-9]{1,64}$/,_=e=>"string"==typeof e?e:null;function u(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"")}function p(e,t){if(e.length<=t)return e;let r=t-1,a=e.charCodeAt(r-1);a>=55296&&a<=56319&&(r-=1);let n=e.lastIndexOf("&",r-1);return -1!==n&&n>=r-4&&e.indexOf(";",n)>=r&&(r=n),`${e.slice(0,r)}…`}function h(e){return t.default.prepare("SELECT * FROM slack_share_threads WHERE share_ref = ?").get(e)}function f(e){return t.default.prepare("SELECT * FROM slack_questions WHERE message_key = ?").get(e)}var y=e.i(90440),m=e.i(82554);class E extends Error{code;slackError;constructor(e,t,r=null){super(t),this.name="SlackTransportError",this.code=e,this.slackError=r}}let T=/^[a-z0-9_]{1,64}$/;function g(e){let t=e?.data,r=t&&"string"==typeof t.error?t.error:null;return r&&T.test(r)?r:null}function k(e){let t=[e.appToken,e.botToken].filter(e=>"string"==typeof e&&e.length>=8);return e=>t.reduce((e,t)=>e.split(t).join("[redacted]"),String(e)).replace(/\bx(?:app|ox[abpers])-[A-Za-z0-9-]+/g,"[redacted]")}async function w(e){let t;try{t=await e.auth.test()}catch(t){let e=g(t);throw new E("slack_auth_failed",`Slack auth.test failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.user_id||"string"!=typeof t.team_id)throw new E("slack_auth_failed","Slack auth.test returned no bot identity.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{user_id:t.user_id,team_id:t.team_id}}let v=/^xapp-[A-Za-z0-9-]{8,250}$/,N=/^xoxb-[A-Za-z0-9-]{8,250}$/,S=Symbol.for("botmancers.slack-runtime"),L=globalThis;function R(){return L[S]||(L[S]={status:{state:"stopped",reason:null,since:Date.now(),connections:0},relay:null,clients:null,stop:null,starting:null}),L[S]}function A(){return{...R().status}}async function I(){let e=R();return e.starting&&await e.starting.catch(()=>{}),e.stop&&await e.stop(),A()}async function O(e,S){let L,R=S.now??(()=>Date.now()),I=function(e=process.env){let t=(e.BOTMANCERS_SLACK_APP_TOKEN??"").trim(),r=(e.BOTMANCERS_SLACK_BOT_TOKEN??"").trim();if(!t&&!r)return{state:"disabled",reason:"slack_tokens_absent"};if(!t)return{state:"misconfigured",reason:"app_token_missing"};if(!r)return{state:"misconfigured",reason:"bot_token_missing"};if(!v.test(t))return{state:"misconfigured",reason:"app_token_invalid"};if(!N.test(r))return{state:"misconfigured",reason:"bot_token_invalid"};let a=(0,n.loadSessionSharesConfig)(e);return"absent"===a.state?{state:"misconfigured",reason:"share_config_absent"}:"invalid"===a.state?{state:"misconfigured",reason:"share_config_invalid"}:0===a.config.audiences.length?{state:"misconfigured",reason:"share_config_no_audience"}:{state:"ready",tokens:{appToken:t,botToken:r},teams:new Set(a.config.audiences.map(e=>e.team_id))}}(S.env??process.env),O="ready"===I.state?k(I.tokens):e=>e,U=e=>(S.log??(e=>console.log(e)))(O(e)),b=0,M=(t,r=null)=>{(e.status.state!==t||e.status.reason!==r)&&U(`Slack relay: ${t}${r?` (${r})`:""}`),e.status={state:t,reason:r,since:R(),connections:b}},C=e=>U(`Slack relay error: ${e instanceof Error?e.message:"unknown error"}`);if("ready"!==I.state)return M(I.state,I.reason),A();M("connecting");let D=(S.clients??(e=>(function(e,t={}){let r=function(e,t=e=>console.warn(e)){let r="slack",a=a=>(...n)=>t(e(`Slack ${r} ${a}: ${n.map(e=>e instanceof Error?e.message:String(e)).join(" ")}`).slice(0,500));return{debug:()=>{},info:()=>{},warn:a("warn"),error:a("error"),setLevel:()=>{},getLevel:()=>"warn",setName:e=>{r=e}}}(k(e),t.log),a=t.slackApiUrl?{slackApiUrl:t.slackApiUrl}:{};return{socket:new y.SocketModeClient({appToken:e.appToken,logger:r,autoReconnectEnabled:!0,...t.clientPingTimeoutMs?{clientPingTimeout:t.clientPingTimeoutMs}:{},...t.serverPingTimeoutMs?{serverPingTimeout:t.serverPingTimeoutMs}:{},clientOptions:{...a}}),web:new m.WebClient(e.botToken,{logger:r,timeout:15e3,retryConfig:{retries:2,factor:2,minTimeout:500,maxTimeout:4e3},...a})}})(e,{log:U,...S.clientOptions})))(I.tokens);try{L=await w(D.web)}catch(e){return C(e),M("failed","slack_auth_failed"),A()}if(!I.teams.has(L.team_id))return M("misconfigured","workspace_not_allowlisted"),A();let q=function(e,t={}){let{socket:r,web:a}=e,s=t.stopGraceMs??5e3,i=t.onError??(e=>console.error("Slack transport:",e instanceof Error?e.message:"unknown error")),o="idle",l=null,d=new Set;return{async start(e){if("idle"!==o)throw new E("started"===o?"slack_transport_started":"slack_transport_stopped","This Slack transport was already started.");o="started",l=t=>{if("started"!==o||t?.type!=="events_api")return;let r={envelope_id:t.envelope_id,type:t.type,accepts_response_payload:t.accepts_response_payload,retry_attempt:t.retry_num,retry_reason:t.retry_reason,payload:t.body},a=Promise.resolve().then(()=>e(r)).catch(i);d.add(a),a.finally(()=>d.delete(a))},r.on("slack_event",l);try{await r.start()}catch(t){r.off("slack_event",l),l=null,o="stopped",await r.disconnect().catch(()=>{});let e=g(t);throw new E("slack_connect_failed",`The Slack Socket Mode connection could not be opened${e?` (${e})`:""}.`,e)}},async ack(e){if("idle"===o||"stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");try{await r.send(e)}catch{throw new E("slack_ack_failed","The Socket Mode acknowledgement could not be sent (not connected).")}},async post(e){let t;if("stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");if("string"!=typeof e.text||e.text.length>n.SHARE_LIMITS.replyChars)throw new E("slack_post_too_long",`A Slack post is at most ${n.SHARE_LIMITS.replyChars} characters.`);try{t=await a.chat.postMessage({channel:e.channel,...null!==e.thread_ts?{thread_ts:e.thread_ts}:{},text:e.text,metadata:{event_type:e.metadata.event_type,event_payload:{...e.metadata.event_payload}},unfurl_links:!1,unfurl_media:!1})}catch(t){let e=g(t);throw new E("slack_post_failed",`Slack chat.postMessage failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.ts)throw new E("slack_post_failed","Slack chat.postMessage returned no message ts.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{ts:t.ts}},async stop(){if("stopped"===o||"stopping"===o)return;let e="started"===o;if(o="stopping",l&&r.off("slack_event",l),l=null,d.size>0){let e;await Promise.race([Promise.allSettled([...d]),new Promise(t=>{e=setTimeout(t,s)})]),clearTimeout(e)}o="stopped",e&&await r.disconnect().catch(i)}}}(D,{stopGraceMs:S.stopGraceMs,onError:C}),X=function(e){let{transport:y,botUserId:m}=e,E=e.now??(()=>Date.now()),T=e.onError??(e=>console.error("Slack relay:",e instanceof Error?e.message:"unknown error")),g=new Set,k=new Set,w=new Map,v=new Set;async function N(e){let r=h(e);if(r)return{thread:r,created:!1};let a=w.get(e);if(a)return a;let s=(async()=>{let r=(0,n.shareRow)(e);if(!r)throw new n.ShareError("share_not_found","No share with that reference.");let a=(0,n.shareState)(r);if("revoked"===a)throw new n.ShareError("share_revoked","This share was revoked.");if("expired"===a)throw new n.ShareError("share_expired","This share has expired.");let s={kind:"slack",team_id:r.audience_team_id,channel_id:r.audience_channel_id};if(!(0,n.audienceAllowed)(s))throw new n.ShareError("audience_not_allowed","That Slack channel is not on the share allowlist. Add it in Agent Config, under Session sharing.");let i=await y.post({channel:s.channel_id,thread_ts:null,text:"A coding-agent session was shared here (read-only). Reply in this thread to ask it a question.",metadata:{event_type:"botmancers_share",event_payload:{share_ref:r.id}}});if("string"!=typeof i?.ts||!l.test(i.ts))throw Error("The transport returned no message ts for the anchor.");return t.default.prepare("INSERT INTO slack_share_threads (share_ref, session_ref, team_id, channel_id, thread_ts, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(r.id,r.session_ref,s.team_id,s.channel_id,i.ts,E()),{thread:h(r.id),created:!0}})();w.set(e,s);try{return await s}finally{w.delete(e)}}let S=t.default.transaction(e=>{var r,a,s;let i=e.delivery;if(t.default.prepare("SELECT 1 FROM slack_deliveries WHERE envelope_id = ? AND retry_attempt = ?").get(i.envelope_id,i.retry_attempt))return{kind:"duplicate_delivery"};let o=E(),l=(r,a)=>{t.default.prepare(`
49
49
  INSERT INTO slack_deliveries (envelope_id, retry_attempt, retry_reason, team_id, event_id, event_owner, message_key, share_ref, disposition, reason, received_at)
50
50
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
51
- `).run(i.envelope_id,i.retry_attempt,i.retry_reason,e.event?.team_id??null,e.event?.event_id??null,a.owner&&e.event?1:null,a.messageKey??null,a.shareRef??null,r,a.reason??null,o)};if(e.event&&t.default.prepare("SELECT 1 FROM slack_deliveries WHERE team_id = ? AND event_id = ? AND event_owner = 1").get(e.event.team_id,e.event.event_id))return l("duplicate_event",{}),{kind:"duplicate_event"};let d=(e,t=null)=>(l("dropped",{owner:!0,reason:e,shareRef:t}),{kind:"dropped",reason:e});if(e.drop||!e.question)return d(e.drop??"malformed");let c=e.question;if(!(0,s.audienceAllowed)({kind:"slack",team_id:c.team_id,channel_id:c.channel_id}))return d("audience_not_allowed");let _=(r=c.team_id,a=c.channel_id,n=c.thread_ts,t.default.prepare("SELECT * FROM slack_share_threads WHERE team_id = ? AND channel_id = ? AND thread_ts = ?").get(r,a,n));return _?f(c.message_key)?(l("duplicate_question",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"duplicate_question",share_ref:_.share_ref}):(t.default.prepare(`
51
+ `).run(i.envelope_id,i.retry_attempt,i.retry_reason,e.event?.team_id??null,e.event?.event_id??null,a.owner&&e.event?1:null,a.messageKey??null,a.shareRef??null,r,a.reason??null,o)};if(e.event&&t.default.prepare("SELECT 1 FROM slack_deliveries WHERE team_id = ? AND event_id = ? AND event_owner = 1").get(e.event.team_id,e.event.event_id))return l("duplicate_event",{}),{kind:"duplicate_event"};let d=(e,t=null)=>(l("dropped",{owner:!0,reason:e,shareRef:t}),{kind:"dropped",reason:e});if(e.drop||!e.question)return d(e.drop??"malformed");let c=e.question;if(!(0,n.audienceAllowed)({kind:"slack",team_id:c.team_id,channel_id:c.channel_id}))return d("audience_not_allowed");let _=(r=c.team_id,a=c.channel_id,s=c.thread_ts,t.default.prepare("SELECT * FROM slack_share_threads WHERE team_id = ? AND channel_id = ? AND thread_ts = ?").get(r,a,s));return _?f(c.message_key)?(l("duplicate_question",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"duplicate_question",share_ref:_.share_ref}):(t.default.prepare(`
52
52
  INSERT INTO slack_questions (team_id, channel_id, message_ts, message_key, thread_ts, share_ref, event_id, question, state, created_at, updated_at)
53
53
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)
54
- `).run(c.team_id,c.channel_id,c.message_ts,c.message_key,c.thread_ts,_.share_ref,c.event_id,c.text,o,o),l("accepted",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"accepted",question:f(c.message_key)}):d("share_thread_unknown")});async function L(e){let r=e.code??"unknown",a=await y.post({channel:e.channel_id,thread_ts:e.thread_ts,text:i[r]??"This shared session cannot answer that question right now.",metadata:{event_type:"botmancers_share_notice",event_payload:{share_ref:e.share_ref,code:r}}});t.default.prepare("UPDATE slack_questions SET reply_ts = ?, updated_at = ? WHERE message_key = ? AND reply_ts IS NULL").run(a.ts,E(),e.message_key)}async function R(e){if(g.has(e))return null;g.add(e);try{let i,o=f(e);if(!o||"dispatched"!==o.state||!o.turn_ref||o.reply_ts)return null;try{var r;let e=await (0,s.shareAnswer)(o.share_ref,o.turn_ref);if(!e)return null;i="completed"===e.state&&null!==e.answer?(r=e.answer,p(u((0,a.serviceRedactor)().text(r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),s.SHARE_LIMITS.replyChars)):n}catch(e){if(!(e instanceof s.ShareError))throw e;i=n}let l=await y.post({channel:o.channel_id,thread_ts:o.thread_ts,text:i,metadata:{event_type:"botmancers_share_reply",event_payload:{share_ref:o.share_ref,turn_ref:o.turn_ref}}});return t.default.prepare("UPDATE slack_questions SET state = 'replied', reply_ts = ?, updated_at = ? WHERE message_key = ? AND state = 'dispatched'").run(l.ts,E(),e),l}finally{g.delete(e)}}async function A(e,r){if(k.has(e.message_key))return{envelope_id:r,outcome:"pending",share_ref:e.share_ref};k.add(e.message_key);try{var a;let n;try{n=await (0,s.askShare)({shareRef:e.share_ref,question:e.question??"",messageKey:e.message_key})}catch(a){if(!(a instanceof s.ShareAskError))throw a;return t.default.prepare("UPDATE slack_questions SET state = 'refused', code = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(a.code,E(),e.message_key),await L(f(e.message_key)),{envelope_id:r,outcome:"refused",share_ref:e.share_ref,code:a.code}}let i=n.turn.turn_ref;t.default.prepare("UPDATE slack_questions SET state = 'dispatched', turn_ref = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(i,E(),e.message_key);let o=(a=n.settled.then(()=>R(e.message_key)).catch(e=>(T(e),null)),v.add(a),a.finally(()=>v.delete(a)).catch(()=>{}),a);return{envelope_id:r,outcome:n.replayed?"replayed":"dispatched",share_ref:e.share_ref,turn_ref:i,replied:o}}finally{k.delete(e.message_key)}}async function I(e){let a=function(e,t){let a={delivery:null,event:null,question:null,drop:null},n=_(e?.envelope_id);if(!n||!d.test(n))return{...a,drop:"malformed"};let i=e.retry_attempt??0;a.delivery={envelope_id:n,retry_attempt:Number.isInteger(i)&&i>=0?i:0,retry_reason:_(e.retry_reason)||null};let h=e.payload;if("events_api"!==e.type||!h||"event_callback"!==h.type)return{...a,drop:"not_events_api"};let f=_(h.team_id),y=_(h.event_id);if(!f||!o.test(f)||!y||!c.test(y))return{...a,drop:"malformed"};a.event={team_id:f,event_id:y};let m=h.event??{};if("message"!==m.type&&"app_mention"!==m.type)return{...a,drop:"not_message"};let E=_(m.user);if(m.bot_id||m.bot_profile||"bot_message"===m.subtype||!E||E===t.botUserId)return{...a,drop:"not_a_person"};if(void 0!==m.subtype)return{...a,drop:"message_subtype"};let T=_(m.channel),k=_(m.ts),g=void 0===m.thread_ts?null:_(m.thread_ts);if(!T||!o.test(T)||!k||!l.test(k)||null!==g&&!l.test(g))return{...a,drop:"malformed"};if(null===g||g===k)return{...a,drop:"not_in_thread"};let w=p(u(String(m.text??"").replace(/<@[A-Z0-9]+(\|[^>]*)?>/g,"").trim()),s.SHARE_LIMITS.questionChars);return w?(a.question={team_id:f,event_id:y,channel_id:T,thread_ts:g,message_ts:k,text:w,message_key:`slack-${(0,r.createHash)("sha256").update(`${f}
54
+ `).run(c.team_id,c.channel_id,c.message_ts,c.message_key,c.thread_ts,_.share_ref,c.event_id,c.text,o,o),l("accepted",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"accepted",question:f(c.message_key)}):d("share_thread_unknown")});async function L(e){let r=e.code??"unknown",a=await y.post({channel:e.channel_id,thread_ts:e.thread_ts,text:i[r]??"This shared session cannot answer that question right now.",metadata:{event_type:"botmancers_share_notice",event_payload:{share_ref:e.share_ref,code:r}}});t.default.prepare("UPDATE slack_questions SET reply_ts = ?, updated_at = ? WHERE message_key = ? AND reply_ts IS NULL").run(a.ts,E(),e.message_key)}async function R(e){if(k.has(e))return null;k.add(e);try{let i,o=f(e);if(!o||"dispatched"!==o.state||!o.turn_ref||o.reply_ts)return null;try{var r;let e=await (0,n.shareAnswer)(o.share_ref,o.turn_ref);if(!e)return null;i="completed"===e.state&&null!==e.answer?(r=e.answer,p(u((0,a.serviceRedactor)().text(r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),n.SHARE_LIMITS.replyChars)):s}catch(e){if(!(e instanceof n.ShareError))throw e;i=s}let l=await y.post({channel:o.channel_id,thread_ts:o.thread_ts,text:i,metadata:{event_type:"botmancers_share_reply",event_payload:{share_ref:o.share_ref,turn_ref:o.turn_ref}}});return t.default.prepare("UPDATE slack_questions SET state = 'replied', reply_ts = ?, updated_at = ? WHERE message_key = ? AND state = 'dispatched'").run(l.ts,E(),e),l}finally{k.delete(e)}}async function A(e,r){if(g.has(e.message_key))return{envelope_id:r,outcome:"pending",share_ref:e.share_ref};g.add(e.message_key);try{var a;let s;try{s=await (0,n.askShare)({shareRef:e.share_ref,question:e.question??"",messageKey:e.message_key})}catch(a){if(!(a instanceof n.ShareAskError))throw a;return t.default.prepare("UPDATE slack_questions SET state = 'refused', code = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(a.code,E(),e.message_key),await L(f(e.message_key)),{envelope_id:r,outcome:"refused",share_ref:e.share_ref,code:a.code}}let i=s.turn.turn_ref;t.default.prepare("UPDATE slack_questions SET state = 'dispatched', turn_ref = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(i,E(),e.message_key);let o=(a=s.settled.then(()=>R(e.message_key)).catch(e=>(T(e),null)),v.add(a),a.finally(()=>v.delete(a)).catch(()=>{}),a);return{envelope_id:r,outcome:s.replayed?"replayed":"dispatched",share_ref:e.share_ref,turn_ref:i,replied:o}}finally{g.delete(e.message_key)}}async function I(e){let a=function(e,t){let a={delivery:null,event:null,question:null,drop:null},s=_(e?.envelope_id);if(!s||!d.test(s))return{...a,drop:"malformed"};let i=e.retry_attempt??0;a.delivery={envelope_id:s,retry_attempt:Number.isInteger(i)&&i>=0?i:0,retry_reason:_(e.retry_reason)||null};let h=e.payload;if("events_api"!==e.type||!h||"event_callback"!==h.type)return{...a,drop:"not_events_api"};let f=_(h.team_id),y=_(h.event_id);if(!f||!o.test(f)||!y||!c.test(y))return{...a,drop:"malformed"};a.event={team_id:f,event_id:y};let m=h.event??{};if("message"!==m.type&&"app_mention"!==m.type)return{...a,drop:"not_message"};let E=_(m.user);if(m.bot_id||m.bot_profile||"bot_message"===m.subtype||!E||E===t.botUserId)return{...a,drop:"not_a_person"};if(void 0!==m.subtype)return{...a,drop:"message_subtype"};let T=_(m.channel),g=_(m.ts),k=void 0===m.thread_ts?null:_(m.thread_ts);if(!T||!o.test(T)||!g||!l.test(g)||null!==k&&!l.test(k))return{...a,drop:"malformed"};if(null===k||k===g)return{...a,drop:"not_in_thread"};let w=p(u(String(m.text??"").replace(/<@[A-Z0-9]+(\|[^>]*)?>/g,"").trim()),n.SHARE_LIMITS.questionChars);return w?(a.question={team_id:f,event_id:y,channel_id:T,thread_ts:k,message_ts:g,text:w,message_key:`slack-${(0,r.createHash)("sha256").update(`${f}
55
55
  ${T}
56
- ${k}`).digest("hex").slice(0,40)}`},a):{...a,drop:"empty"}}(e,{botUserId:m});if(!a.delivery)return{envelope_id:null,outcome:"dropped",reason:"malformed"};let n=a.delivery.envelope_id,i=S.immediate(a);switch(await y.ack(n),"duplicate_delivery"!==i.kind&&t.default.prepare("UPDATE slack_deliveries SET acked_at = ? WHERE envelope_id = ? AND retry_attempt = ? AND acked_at IS NULL").run(E(),n,a.delivery.retry_attempt),i.kind){case"duplicate_delivery":case"duplicate_event":return{envelope_id:n,outcome:i.kind};case"dropped":return{envelope_id:n,outcome:"dropped",reason:i.reason};case"duplicate_question":return{envelope_id:n,outcome:"duplicate_question",share_ref:i.share_ref};case"accepted":return A(i.question,n)}}async function O(){let e=t.default.prepare("SELECT message_key FROM slack_questions WHERE state = 'dispatched' AND reply_ts IS NULL ORDER BY created_at, message_key").all(),r=0;for(let{message_key:t}of e)await R(t)&&r++;return r}async function U(){let e={dispatched:0,refused:0,replied:0};for(let r of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'pending' ORDER BY created_at, message_key").all()){let t=await A(r,null);"dispatched"===t.outcome||"replayed"===t.outcome?e.dispatched++:"refused"===t.outcome&&e.refused++}for(let e of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'refused' AND reply_ts IS NULL ORDER BY created_at, message_key").all())await L(e);return e.replied+=await O(),e}return{start:async function(){let e=await U();return await y.start(async e=>{try{await I(e)}catch(e){T(e)}}),e},stop:()=>y.stop(),bindShare:N,handleEnvelope:I,recover:U,flushReplies:O,idle:async function(){for(;v.size>0;)await Promise.allSettled([...v])}}}({transport:q,botUserId:L.user_id,onError:C,now:R}),x=!1,$=Promise.resolve(),F=e=>{let t=$.then(e);return $=t.catch(()=>{}),t},H=!0,P=()=>F(async()=>{if(!x)try{await X.recover(),H=!1}catch(e){H=!0,C(e)}}),W=new Map,K=S.bindRetryMs??6e4,B=()=>F(async()=>{if(!x){if(H)try{await X.recover(),H=!1}catch(e){C(e)}for(let{id:e}of t.default.prepare(`
56
+ ${g}`).digest("hex").slice(0,40)}`},a):{...a,drop:"empty"}}(e,{botUserId:m});if(!a.delivery)return{envelope_id:null,outcome:"dropped",reason:"malformed"};let s=a.delivery.envelope_id,i=S.immediate(a);switch(await y.ack(s),"duplicate_delivery"!==i.kind&&t.default.prepare("UPDATE slack_deliveries SET acked_at = ? WHERE envelope_id = ? AND retry_attempt = ? AND acked_at IS NULL").run(E(),s,a.delivery.retry_attempt),i.kind){case"duplicate_delivery":case"duplicate_event":return{envelope_id:s,outcome:i.kind};case"dropped":return{envelope_id:s,outcome:"dropped",reason:i.reason};case"duplicate_question":return{envelope_id:s,outcome:"duplicate_question",share_ref:i.share_ref};case"accepted":return A(i.question,s)}}async function O(){let e=t.default.prepare("SELECT message_key FROM slack_questions WHERE state = 'dispatched' AND reply_ts IS NULL ORDER BY created_at, message_key").all(),r=0;for(let{message_key:t}of e)await R(t)&&r++;return r}async function U(){let e={dispatched:0,refused:0,replied:0};for(let r of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'pending' ORDER BY created_at, message_key").all()){let t=await A(r,null);"dispatched"===t.outcome||"replayed"===t.outcome?e.dispatched++:"refused"===t.outcome&&e.refused++}for(let e of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'refused' AND reply_ts IS NULL ORDER BY created_at, message_key").all())await L(e);return e.replied+=await O(),e}return{start:async function(){let e=await U();return await y.start(async e=>{try{await I(e)}catch(e){T(e)}}),e},stop:()=>y.stop(),bindShare:N,handleEnvelope:I,recover:U,flushReplies:O,idle:async function(){for(;v.size>0;)await Promise.allSettled([...v])}}}({transport:q,botUserId:L.user_id,onError:C,now:R}),x=!1,$=Promise.resolve(),F=e=>{let t=$.then(e);return $=t.catch(()=>{}),t},H=!0,P=()=>F(async()=>{if(!x)try{await X.recover(),H=!1}catch(e){H=!0,C(e)}}),W=new Map,K=S.bindRetryMs??6e4,B=()=>F(async()=>{if(!x){if(H)try{await X.recover(),H=!1}catch(e){C(e)}for(let{id:e}of t.default.prepare(`
57
57
  SELECT id FROM session_shares s
58
58
  WHERE state = 'active' AND expires_at > ? AND audience_team_id = ?
59
59
  AND NOT EXISTS (SELECT 1 FROM slack_share_threads t WHERE t.share_ref = s.id)
60
60
  ORDER BY created_at, id LIMIT 50
61
- `).all(R(),L.team_id)){if(x)return;if(!((W.get(e)??0)>R()))try{await X.bindShare(e),W.delete(e)}catch(t){W.set(e,R()+K),t instanceof s.ShareError||C(t)}}try{await X.flushReplies()}catch(e){C(e)}}}),G=D.socket,Y=()=>{!x&&(b+=1,M("connected"),b>1&&P())},z=()=>{x||M("reconnecting")},Z=()=>{x||"connected"!==e.status.state||M("reconnecting")};G.on("connected",Y),G.on("reconnecting",z),G.on("close",Z);let j=null;e.relay=X,e.clients=D,e.stop=async()=>{x||(x=!0,j&&clearInterval(j),j=null,await X.stop().catch(C),G.off("connected",Y),G.off("reconnecting",z),G.off("close",Z),e.relay=null,e.clients=null,e.stop=null,M("stopped"))},await P();try{await q.start(e=>F(()=>X.handleEnvelope(e)).then(()=>{}))}catch(r){if(x)return A();C(r);let t=e.stop;return await t?.(),M("failed","slack_connect_failed"),A()}return x||("connected"!==e.status.state&&(b=Math.max(b,1),M("connected")),await B(),j=setInterval(()=>{B().catch(C)},S.sweepMs??5e3),j.unref?.()),A()}e.s(["runSlackInServer",0,function(){if("1"===process.env.BOTMANCERS_NO_AUTOPROCESS)return;let e=()=>{I().catch(()=>{})};process.once("SIGTERM",e),process.once("SIGINT",e),(function(e={}){let t=R();return t.starting?t.starting:t.stop?Promise.resolve(A()):(t.starting=O(t,e).finally(()=>{t.starting=null}),t.starting)})().catch(e=>console.error("Slack relay:",e instanceof Error?e.message:"start failed"))}],15050)}];
61
+ `).all(R(),L.team_id)){if(x)return;if(!((W.get(e)??0)>R()))try{await X.bindShare(e),W.delete(e)}catch(t){W.set(e,R()+K),t instanceof n.ShareError||C(t)}}try{await X.flushReplies()}catch(e){C(e)}}}),G=D.socket,Y=()=>{!x&&(b+=1,M("connected"),b>1&&P())},z=()=>{x||M("reconnecting")},Z=()=>{x||"connected"!==e.status.state||M("reconnecting")};G.on("connected",Y),G.on("reconnecting",z),G.on("close",Z);let Q=null;e.relay=X,e.clients=D,e.stop=async()=>{x||(x=!0,Q&&clearInterval(Q),Q=null,await X.stop().catch(C),G.off("connected",Y),G.off("reconnecting",z),G.off("close",Z),e.relay=null,e.clients=null,e.stop=null,M("stopped"))},await P();try{await q.start(e=>F(()=>X.handleEnvelope(e)).then(()=>{}))}catch(r){if(x)return A();C(r);let t=e.stop;return await t?.(),M("failed","slack_connect_failed"),A()}return x||("connected"!==e.status.state&&(b=Math.max(b,1),M("connected")),await B(),Q=setInterval(()=>{B().catch(C)},S.sweepMs??5e3),Q.unref?.()),A()}e.s(["runSlackInServer",0,function(){if("1"===process.env.BOTMANCERS_NO_AUTOPROCESS)return;let e=()=>{I().catch(()=>{})};process.once("SIGTERM",e),process.once("SIGINT",e),(function(e={}){let t=R();return t.starting?t.starting:t.stop?Promise.resolve(A()):(t.starting=O(t,e).finally(()=>{t.starting=null}),t.starting)})().catch(e=>console.error("Slack relay:",e instanceof Error?e.message:"start failed"))}],15050)}];
62
62
 
63
63
  //# sourceMappingURL=lib_slack-runtime_ts_0fgsejy._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[89315,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(50944),f=a.i(27828),g=a.i(25073),h=a.i(4921),i=a.i(15722),j=a.i(20851),k=a.i(45559),l=a.i(59807),m=a.i(15752),n=a.i(11030),o=a.i(67588);function p(a){let b=a;for(let a=0;a<4;a++){let a=b.replace(/^\s*\[(?:Message from|From) [^\]]+\]\s*(?:\r?\n)?/,"");if(a===b)break;b=a}return b.replace(/^\s+/,"")}function q(a,b){let c=new Map(a.map(a=>[a.id,a]));for(let a of b)c.set(a.id,a);return[...c.values()].sort((a,b)=>a.created_at-b.created_at||a.id.localeCompare(b.id))}function r({message:a,conversationId:d,status:e,writable:f,onDone:g}){let h=(0,k.parseDraft)(p(a.content)),[i,j]=(0,c.useState)(h?.recipient??""),[l,m]=(0,c.useState)(h?.body??""),[n,o]=(0,c.useState)(!1);if(!h)return null;let q=!f||"open"!==e,s=async b=>{q||n||(o(!0),await fetch(`/api/conversations/${encodeURIComponent(d)}/draft`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({messageId:a.id,action:b,recipient:i,body:l})}),o(!1),g())};return(0,b.jsxs)("div",{className:"draft-card",children:[(0,b.jsx)("div",{className:"draft-title",children:(0,k.draftTitle)(h.channel)}),(0,b.jsx)("input",{"aria-label":"Recipient",value:q?h.recipient:i,readOnly:q,onChange:a=>j(a.target.value)}),(0,b.jsx)("textarea",{rows:3,"aria-label":"Draft body",value:q?h.body:l,readOnly:q,onChange:a=>m(a.target.value)}),"open"===e&&f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{type:"button",className:"approve-control",disabled:n||!i.trim(),onClick:()=>void s("send"),children:"Send"}),(0,b.jsx)("button",{type:"button",className:"approve-control",disabled:n,onClick:()=>void s("discard"),children:"Discard"})]}):(0,b.jsx)("span",{className:"draft-mark",children:"open"===e?"Read only":"sent"===e?"Sent":"Discarded"})]})}function s({message:a,conversationId:d,status:e,writable:f,onDone:g}){let h=(0,k.parseApprovalCode)(a.content),[i,j]=(0,c.useState)(!1);if(!h)return null;if(!f||"pending"!==e)return(0,b.jsx)("span",{className:"draft-mark",children:"pending"===e?"Approval is read only":"approved"===e?"Approved":"Denied"});let l=async b=>{i||(j(!0),await fetch(`/api/conversations/${encodeURIComponent(d)}/${b}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:h,messageId:a.id})}),j(!1),g())};return(0,b.jsxs)("span",{className:"draft-mark",children:[(0,b.jsx)("button",{type:"button",className:"approve-control",disabled:i,onClick:()=>void l("approve"),children:"Approve"}),(0,b.jsx)("button",{type:"button",className:"approve-control",disabled:i,onClick:()=>void l("deny"),children:"Deny"})]})}function t({names:a}){return a.length?(0,b.jsx)(b.Fragment,{children:a.map(a=>(0,b.jsxs)("span",{children:[(0,b.jsx)("br",{}),(0,b.jsxs)("a",{className:"file-control",href:`/api/files/${encodeURIComponent(a)}`,download:a,children:["Download ",a]})]},a))}):null}a.s(["default",0,function(){let a=(0,e.useParams)(),u=(0,e.useSearchParams)(),v=String(a.id??""),w=String(a.conversationId??""),{overview:x}=(0,i.useAgentOverview)(),[y,z]=(0,c.useState)(null),[A,B]=(0,c.useState)([]),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)([]),[G,H]=(0,c.useState)(""),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(!1),[M,N]=(0,c.useState)(""),[O,P]=(0,c.useState)([]),[Q,R]=(0,c.useState)(""),[S,T]=(0,c.useState)(!1),[U,V]=(0,c.useState)(0),W=(0,c.useRef)(null),X=(0,c.useRef)(null),Y=(0,c.useRef)(null),Z=(0,c.useRef)(!1),$=(0,c.useRef)(!1),_=(0,c.useCallback)(async(a=null,b=!1)=>{if(v&&w){b&&L(!0);try{let c=new URLSearchParams({limit:"60"});a&&c.set("cursor",a);let[d,e]=await Promise.all([fetch(`/api/bots/${encodeURIComponent(v)}/conversations/${encodeURIComponent(w)}?${c}`,{cache:"no-store"}),fetch(`/api/exchanges?conversation=${encodeURIComponent(w)}`,{cache:"no-store"})]);if(404===d.status){J(!0),H("");return}let f=await d.json().catch(()=>null);if(!d.ok||!f||!Array.isArray(f.messages))throw Error("history");let g=await e.json().catch(()=>null);z(f),B(a=>b?q(f.messages,a):q(a,f.messages)),(b||!Z.current)&&D(f.next_cursor),e.ok&&Array.isArray(g?.exchanges)&&F(g.exchanges),H(""),J(!1)}catch{H("Could not load this conversation.")}finally{L(!1)}}},[w,v]);(0,c.useEffect)(()=>{let a=window.setTimeout(()=>{_()},0),b=window.setInterval(()=>{_()},2e3);return()=>{window.clearTimeout(a),window.clearInterval(b)}},[_,U]),(0,c.useEffect)(()=>{y&&!Z.current&&(Z.current=!0,Y.current?.lastElementChild?.scrollIntoView({block:"end"}),y.writable&&W.current?.focus({preventScroll:!0}))},[y]),(0,c.useEffect)(()=>{let a=u.get("exchange");if(!a||$.current)return;let b=document.getElementById(`exchange-${a}`);b&&($.current=!0,b.scrollIntoView({block:"center"}),b.focus({preventScroll:!0}))},[E,u]);let aa=a=>{let b=6-O.length;R(a.length>b?"Up to six attachments.":""),P(c=>[...c,...a.slice(0,Math.max(b,0)).map((a,b)=>({id:`${a.name}-${a.size}-${c.length+b}`,name:a.name}))])},ab=async()=>{if(!y?.writable||S)return;let a=[M.trim(),...O.map(a=>a.name)].filter(Boolean).join("\n");if(a){T(!0);try{if(!(await fetch(`/api/conversations/${encodeURIComponent(w)}/messages`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a,idempotencyKey:crypto.randomUUID()})})).ok)throw Error("send");N(""),P([]),R(""),await _()}catch{R("Message could not be sent. Try again.")}finally{T(!1)}}},ac=async a=>{if(!y?.writable)return;let b=a?`/messages/${encodeURIComponent(a)}/stop`:"/stop";await fetch(`/api/conversations/${encodeURIComponent(w)}${b}`,{method:"POST"}),await _()};if(I)return(0,b.jsxs)("div",{className:"conversation-detail-state",children:[(0,b.jsx)("h2",{children:"Conversation not found"}),(0,b.jsx)("p",{children:"This conversation does not involve the selected agent or no longer exists."}),(0,b.jsx)(d.default,{href:`/agents/${encodeURIComponent(v)}/conversations`,children:"All conversations"})]});if(!y&&!G)return(0,b.jsx)("p",{className:"conversation-detail-state",role:"status","data-conversation-detail-state":"loading",children:"Loading conversation…"});if(!y&&G)return(0,b.jsxs)("div",{className:"conversation-detail-state",role:"alert","data-conversation-detail-state":"error",children:[(0,b.jsx)("p",{children:G}),(0,b.jsx)("button",{type:"button",onClick:()=>V(a=>a+1),children:"Retry"})]});if(!y)return null;let ad=(0,n.wakeNotices)(y.events).map(a=>({...a,actionable:a.actionable&&y.writable})),ae=new Set,af=new Set,ag=a=>ad.filter(b=>!ae.has(b.eventId)&&b.createdAt<a).map(a=>(ae.add(a.eventId),(0,b.jsx)("li",{className:"msg-status",children:(0,b.jsx)(h.default,{notice:a,onDone:()=>void _()})},a.eventId))),ah=a=>E.filter(b=>!af.has(b.id)&&b.created_at<a).sort((a,b)=>a.created_at-b.created_at).map(a=>(af.add(a.id),(0,b.jsx)("li",{className:"msg-status",children:(0,b.jsx)(f.default,{summary:a,onChanged:()=>void _()})},a.id)));return(0,b.jsxs)("div",{className:"conversation-detail","data-conversation-writable":y.writable?"true":"false",children:[(0,b.jsxs)("header",{className:"conversation-detail-head",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(d.default,{href:`/agents/${encodeURIComponent(v)}/conversations`,children:"← Conversations"}),(0,b.jsx)("p",{className:"agent-eyebrow",children:(0,o.ownerConversationEyebrow)(y)}),(0,b.jsx)("h2",{children:y.label}),(0,b.jsx)("p",{className:"conversation-participant-line",children:y.participants.map(a=>a.label).join(" · ")}),(0,b.jsxs)("p",{className:"conversation-origin-line",children:["Origin: ",y.origin?.label??"Unknown"," · ",y.message_count," messages"]})]}),y.writable?(0,b.jsx)("button",{type:"button",className:"conversation-stop",onClick:()=>void ac(),children:"Stop delegated turns"}):null]}),y.writable?null:(0,b.jsxs)("aside",{className:"conversation-read-only",role:"note",children:[(0,b.jsx)("strong",{children:"Read-only history"}),(0,b.jsx)("p",{children:y.read_only_reason}),x?.conversation?(0,b.jsx)(d.default,{href:`/agents/${encodeURIComponent(v)}/conversations/${encodeURIComponent(x.conversation.id)}`,children:"Open direct conversation"}):null]}),G?(0,b.jsxs)("p",{className:"conversation-refresh-error",role:"alert",children:[G," Showing the last loaded history."]}):null,(0,b.jsxs)("div",{className:"conversation-history",children:[C?(0,b.jsx)("button",{className:"conversation-older",type:"button",disabled:K,onClick:()=>void _(C,!0),children:K?"Loading…":"Load older messages"}):null,(0,b.jsxs)("ol",{ref:Y,className:"conversation-message-list","aria-label":"Conversation history",children:[0===A.length?(0,b.jsx)("li",{className:"conversation-empty-history",children:"No messages in this conversation yet."}):null,A.map(a=>{let d="You"===a.sender_name,e=p(a.content),f=d?null:(0,l.classifyRuntimeFailure)(e),h=d?null:(0,m.parseRun)(a.content),i=d||h?null:(0,k.parseDraft)(e),n=d||h?null:(0,k.parseApprovalCode)(a.content);return(0,b.jsxs)(c.Fragment,{children:[ag(a.created_at),ah(a.created_at),(0,b.jsxs)("li",{className:d?"msg-you":"msg-bot",children:[(0,b.jsx)("div",{className:d?"msg-name msg-name-you":"msg-name",children:a.sender_name}),f?(0,b.jsx)("div",{className:"msg-status",children:(0,b.jsx)(g.default,{failure:f})}):h?(0,b.jsxs)("div",{className:"msg-body",children:[(0,m.runLine)(h),"running"===h.state&&y.writable?(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)("button",{type:"button",className:"attach-word",onClick:()=>void ac(a.id),children:"Stop"})]}):null]}):i&&a.draftStatus?(0,b.jsx)("div",{className:"msg-body",children:(0,b.jsx)(r,{message:a,conversationId:w,status:a.draftStatus,writable:y.writable,onDone:()=>void _()})}):(0,b.jsxs)("div",{className:"msg-body",children:[function(a,c){let d=String(a??"").split("\n");if(!d.some(a=>null!==(0,j.agentEventDisplay)(a)))return a;let e=[];return d.forEach((a,d)=>{d>0&&e.push((0,b.jsx)("br",{},`${c}-br-${d}`));let f=(0,j.agentEventDisplay)(a);e.push(f?(0,b.jsxs)("span",{className:"agent-event",children:[(0,b.jsx)("span",{className:"agent-event-label",children:f.label}),f.detail?` ${f.detail}`:""]},`${c}-${d}`):(0,b.jsx)("span",{children:a},`${c}-${d}`))}),e}(e,a.id),n&&a.approvalStatus?(0,b.jsx)(s,{message:a,conversationId:w,status:a.approvalStatus,writable:y.writable,onDone:()=>void _()}):null,(0,b.jsx)(t,{names:(0,k.parseFileNames)(a.content)})]})]})]},a.id)}),ag(1/0),ah(1/0)]})]}),y.writable?(0,b.jsxs)("div",{className:"composer conversation-composer",onPaste:a=>{let b=Array.from(a.clipboardData.files??[]);b.length&&(a.preventDefault(),aa(b))},children:[(0,b.jsxs)("div",{className:"composer-box",children:[Q?(0,b.jsx)("p",{className:"attach-error",role:"alert",children:Q}):null,O.length?(0,b.jsx)("div",{className:"attach-names",children:O.map(a=>(0,b.jsx)("span",{children:a.name},a.id))}):null,(0,b.jsx)("textarea",{ref:W,rows:2,value:M,onChange:a=>N(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.shiftKey||(a.preventDefault(),ab())},placeholder:`Message ${x?.agent.name??"this agent"}`,"aria-label":"Message"})]}),(0,b.jsx)("input",{ref:X,className:"attach-input",type:"file",multiple:!0,onChange:a=>{aa(Array.from(a.target.files??[])),a.target.value=""}}),(0,b.jsx)("button",{type:"button",className:"attach-word",onClick:()=>X.current?.click(),children:"Attach"}),(0,b.jsx)("button",{type:"button",className:"send-btn",disabled:S,onClick:()=>void ab(),children:S?"Sending…":"Send"})]}):null]})}])},27828,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(35099);a.s(["default",0,function({summary:a,onChanged:f}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),k=(0,e.stateTone)(a.state),l=(0,e.outcomeLine)(a),m=(0,e.failureAdvice)(a),n=`exchange-${a.id}-title`,o=async()=>{if(!g){h(!0),j("");try{let b=await fetch(`/api/exchanges/${encodeURIComponent(a.id)}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}"});if(!b.ok){let a=await b.json().catch(()=>null);j("string"==typeof a?.error?.message?a.error.message:"Could not cancel. Try again.")}}catch{j("Could not cancel. Try again.")}finally{h(!1),f?.()}}};return(0,b.jsxs)("article",{id:`exchange-${a.id}`,className:`exchange-card is-${k} is-${a.state}`,"data-exchange-id":a.id,"data-exchange-state":a.state,"aria-labelledby":n,tabIndex:-1,children:[(0,b.jsxs)("p",{className:"exchange-card-line",children:[(0,b.jsx)("span",{className:"exchange-card-mode",children:(0,e.modeLabel)(a.mode)}),(0,b.jsx)("span",{id:n,className:"exchange-card-title",children:(0,e.participantsLabel)(a)}),(0,b.jsx)("span",{className:"exchange-card-state",role:"status",children:(0,e.liveStateLabel)(a)})]}),(0,b.jsx)("p",{className:"exchange-card-session",children:(0,e.sessionLabel)(a)}),(0,b.jsxs)("p",{className:"exchange-card-instruction",children:[(0,b.jsx)("span",{className:"exchange-card-key",children:(0,e.instructionHeading)(a.mode)})," ",(0,e.excerpt)(a.instruction,220)]}),l?(0,b.jsx)("p",{className:"failed"===a.state?"exchange-card-outcome is-failure":"exchange-card-outcome",children:l}):null,m?(0,b.jsx)("p",{className:"exchange-card-advice",children:m}):null,i?(0,b.jsx)("p",{className:"exchange-card-error",role:"alert",children:i}):null,(0,b.jsxs)("p",{className:"exchange-card-foot",children:[(0,b.jsxs)("span",{className:"exchange-card-time",children:["Updated ",(0,e.formatExchangeTime)(a.updated_at)]}),(0,b.jsx)(d.default,{className:"exchange-card-link",href:(0,e.detailsHref)(a.id),"aria-label":`Details: ${(0,e.modeLabel)(a.mode)} ${(0,e.participantsLabel)(a)}`,children:"Details"}),a.can_cancel?(0,b.jsx)("button",{type:"button",className:"exchange-card-cancel",disabled:g,onClick:()=>{o()},children:g?"Cancelling…":"Cancel"}):null]})]})}])},25073,4921,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(59807);a.s(["default",0,function({failure:a}){let[e,f]=(0,c.useState)("idle"),g=(0,d.severityLabel)(a.severity),h=(0,c.useId)();async function i(){try{await navigator.clipboard.writeText(a.detail),f("copied")}catch{f("failed")}}return(0,b.jsxs)("div",{className:`runtime-failure runtime-failure-${a.severity}`,role:"status","aria-labelledby":h,"data-runtime-failure":a.kind,children:[(0,b.jsxs)("p",{className:"runtime-failure-title",id:h,children:[(0,b.jsx)("span",{className:"runtime-failure-severity",children:g}),a.title]}),(0,b.jsx)("p",{className:"runtime-failure-recovery",children:a.recovery}),(0,b.jsxs)("details",{className:"runtime-failure-details",children:[(0,b.jsx)("summary",{children:"Details"}),(0,b.jsx)("code",{className:"runtime-failure-detail",children:a.detail}),(0,b.jsx)("button",{type:"button",className:"runtime-failure-copy",onClick:()=>{i()},children:"copied"===e?"Copied":"failed"===e?"Copy failed":"Copy details"})]})]})}],25073);let e={blocked:"Needs approval",rejected:"Not started",allowed:"Allowed",denied:"Denied",waiting:"Queued",stopped:"Stopped"};a.s(["default",0,function({notice:a,onDone:d}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(""),j="blocked"!==a.tone||a.actionable?e[a.tone]:"Blocked",k=async b=>{if(!f&&a.wakeId){g(!0),i("");try{let c=await fetch(`/api/wakes/${a.wakeId}/decision`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({decision:b})});if(!c.ok){let a=await c.json().catch(()=>null);i("string"==typeof a?.error?.message?a.error.message:"The decision could not be recorded.")}}catch{i("The decision could not be recorded.")}finally{g(!1),d()}}};return(0,b.jsxs)("div",{className:`wake-notice wake-notice-${a.tone}`,role:"status","data-wake-notice":a.tone,"data-wake-id":a.wakeId??void 0,children:[(0,b.jsxs)("p",{className:"wake-notice-line",children:[(0,b.jsx)("span",{className:"wake-notice-label",children:j}),a.text]}),a.actionable?(0,b.jsxs)("div",{className:"wake-notice-actions",children:[(0,b.jsx)("button",{type:"button",className:"approve-control",disabled:f,onClick:()=>{k("allow")},children:"Allow"}),(0,b.jsx)("button",{type:"button",className:"approve-control",style:{marginLeft:8},disabled:f,onClick:()=>{k("deny")},children:"Deny"})]}):null,h?(0,b.jsx)("p",{className:"wake-notice-error",role:"alert",children:h}):null]})}],4921)},45559,a=>{"use strict";a.s(["draftTitle",0,function(a){return"email"===a?"New Email":"New Slack Message"},"parseApprovalCode",0,function(a){let b=a.match(/approve using the code ([A-Za-z0-9][A-Za-z0-9_-]*)/i);return b?b[1]:null},"parseDraft",0,function(a){let b,c=a.match(/^\s*\[draft\]\s*([\s\S]*)$/);if(!c)return null;try{b=JSON.parse(c[1])}catch{return null}if(!b||"object"!=typeof b)return null;let d=b;return"email"!==d.channel&&"slack"!==d.channel||"open"!==d.state&&"sent"!==d.state&&"discarded"!==d.state||"string"!=typeof d.recipient||"string"!=typeof d.body?null:{channel:d.channel,recipient:d.recipient,body:d.body,state:d.state}},"parseFileNames",0,function(a){let b=[];for(let c of a.split("\n")){let a=c.match(/^\s*\[file\]\s*(\S+)\s*$/i);a&&!b.includes(a[1])&&b.push(a[1])}return b},"parseHandoff",0,function(a){let b=a.match(/^\s*\[Handing off to ([^\]]+)\]/);return b&&b[1].trim()||null}])},67588,a=>{"use strict";a.s(["ownerConversationEyebrow",0,function(a){return"direct"===a.type?"Direct conversation":"group"===a.type?"Shared history":a.origin?.kind==="service"?"External-service history":"Agent-to-agent history"},"ownerConversationTypeLabel",0,function(a){return"direct"===a.type?"Direct":"group"===a.type?"Shared":a.origin?.kind==="service"?"External service":"Agent to agent"}])},11030,a=>{"use strict";a.s(["wakeNotices",0,function(a){let b=[],c=new Map;return a.forEach((d,e)=>{let f="string"==typeof d.data.target_name?d.data.target_name:null;d.requestId&&f&&c.set(d.requestId,f);let g=function(a){switch(a.kind){case"wake_blocked":return"blocked";case"wake_rejected":return"rejected";case"lineage_stopped":return"stopped";case"wake_accepted":return"string"==typeof a.data.reason?"allowed":null;case"request_cancelled":return"grant_denied"===a.data.reason?"denied":null;case"request_queued":return"capacity"===a.data.waiting_for?"waiting":null;default:return null}}(d);if(!g)return;let h=Array.isArray(d.data.actions)?d.data.actions:[],i=null!==d.requestId&&a.slice(e+1).some(a=>a.requestId===d.requestId);if("waiting"===g&&i)return;let j=d.requestId?c.get(d.requestId):void 0,k="denied"===g&&j?`Wake denied: ${j} — no work ran`:"waiting"===g&&j?`Queued: ${j} — waiting for capacity`:d.text;b.push({eventId:d.eventId,wakeId:d.wakeId,tone:g,text:k,actionable:"blocked"===g&&!!d.wakeId&&h.includes("allow")&&h.includes("deny")&&!i,createdAt:d.createdAt})}),b}])}];
2
+
3
+ //# sourceMappingURL=_00qrupp._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[45343,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(20851);a.s(["default",0,function(){let[a,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(0),[i,j]=(0,c.useState)(!1),[k,l]=(0,c.useState)(0);return(0,c.useEffect)(()=>{let a=!1;return fetch("/api/bots/availability",{cache:"no-store"}).then(async b=>{if(!b.ok)throw Error("request failed");let c=await b.json();if(a)return;let d=Array.isArray(c.agents)?c.agents:null;if(!d)throw Error("request failed");f(new Set(d.filter(a=>a.launchable).map(a=>a.agent))),h(Date.now()),j(!1)}).catch(()=>{a||j(!0)}),()=>{a=!0}},[k]),(0,b.jsx)("div",{className:"cfg-page",children:(0,b.jsxs)("div",{className:"max-w-3xl mx-auto",children:[(0,b.jsx)(d.default,{href:"/",className:"cfg-link cfg-back text-sm",children:"← Back to chat"}),(0,b.jsxs)("header",{className:"mt-3 mb-6",children:[(0,b.jsx)("h1",{className:"text-xl font-bold",children:"Settings"}),(0,b.jsx)("p",{className:"text-sm cfg-faint",children:"Local runtime status for every agent in this Botmancers."})]}),(0,b.jsxs)("section",{className:"cfg-card",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,b.jsx)("h2",{className:"cfg-title",children:"Local runtimes"}),null!==a?(0,b.jsxs)("span",{className:"text-sm cfg-faint",children:["Checked ",(0,e.formatClock)(g)]}):null]}),i&&null===a?(0,b.jsxs)("p",{className:"text-sm cfg-muted",children:["Couldn't check the local runtimes."," ",(0,b.jsx)("button",{onClick:()=>l(a=>a+1),className:"cfg-link",children:"Retry"})]}):null===a?(0,b.jsx)("div",{className:"h-10 rounded-lg animate-pulse cfg-skel"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dl",{className:"text-sm",children:e.AGENT_OPTIONS.map(c=>{let d=a.has(c.value);return(0,b.jsxs)("div",{className:"flex justify-between gap-4 py-1 border-t cfg-line",children:[(0,b.jsx)("dt",{className:"cfg-muted",children:c.label}),(0,b.jsx)("dd",{className:d?"cfg-ok":"cfg-faint",children:d?"● Ready":"○ Not available"})]},c.value)})}),(0,b.jsx)("p",{className:"mt-2 text-xs cfg-faint",children:"Coding Agents need their provider CLI installed and signed in on this computer; Hermes needs the gateway key. A runtime that is not available here cannot launch an Agent until it is fixed."}),(0,b.jsx)("button",{onClick:()=>l(a=>a+1),className:"mt-3 cfg-btn-ghost text-sm w-full sm:w-auto",children:"Re-check"})]})]})]})})}])},20851,22151,a=>{"use strict";let b=["hermes","cursor","claude","codex","muse"],c={hermes:"Hermes",cursor:"Cursor",claude:"Claude",codex:"Codex",muse:"Muse Code"},d="hermes";function e(a){return b.includes(String(a))?c[a]:String(a??"")}b.join("|"),a.s(["AGENTS",0,b,"AGENT_LABELS",0,c,"DEFAULT_AGENT",0,d,"agentLabel",0,e],22151);let f=b.map(a=>({value:a,label:c[a]}));function g(a){return e((a.agent??"").trim()||d)}function h(a){let b=a.runtime_connection;return b&&b.label.trim()?b.label.trim():(a.runtime_connection_id??"").trim()?(a.runtime_connection_id??"").trim():null}function i(a){return`~/.botmancers/${a}`}let j="~/.botmancers/{agentID}",k=`Default: ${j} — {agentID} is this agent's ID, assigned at creation.`;function l(a){return String(a).padStart(2,"0")}let m=[{prefix:"[Agent failed]",kind:"failed",label:"Agent failed"},{prefix:"[Deck handoff]",kind:"handoff",label:"Agent launch"},{prefix:"[Deck run]",kind:"run",label:"Agent run"},{prefix:"[Deck review]",kind:"review",label:"Agent review"},{prefix:"[Deck resume]",kind:"resume",label:"Agent resume"},{prefix:"[Deck result]",kind:"result",label:"Agent result"},{prefix:"[Deck failed]",kind:"failed",label:"Agent failed"},{prefix:"[Deck needs selection]",kind:"reselection",label:"Agent needs setup"},{prefix:"[Deck needs reselection]",kind:"reselection",label:"Agent needs setup"}];a.s(["AGENT_OPTIONS",0,f,"NEW_AGENT_WORKSPACE_HINT",0,k,"WORKSPACE_TEMPLATE",0,j,"agentEventDisplay",0,function(a){let b=String(a??"").trimStart(),c=m.find(a=>b.startsWith(a.prefix));return c?{label:c.label,detail:b.slice(c.prefix.length).trim()}:null},"botAgentLabel",0,g,"botConnectionLabel",0,h,"configWorkspaceHint",0,function(a){return`Default: ${i(a)} — leave blank to use it.`},"defaultWorkdirFor",0,i,"formatClock",0,function(a){let b=new Date(a);return`${l(b.getHours())}:${l(b.getMinutes())}:${l(b.getSeconds())}`},"rosterRuntimeLine",0,function(a){let b=`Agent: ${g(a)} \xb7 `+(h(a)??"No connection");return!1===a.launchable?b+" — see Config":b}],20851)},46058,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},14827,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={createLinkPrefetchPartialError:function(){return g},createUnrenderedSegmentError:function(){return f}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a,b){let c=`Route "${a}": Could not validate that a segment in your UI has instant navigation.`;if(b.length>0){let a=1===b.length?"Dropped segment":"Dropped segments";c+=`
1
+ module.exports=[45343,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(20851);a.s(["default",0,function(){let[a,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(0),[i,j]=(0,c.useState)(!1),[k,l]=(0,c.useState)(0);return(0,c.useEffect)(()=>{let a=!1;return fetch("/api/bots/availability",{cache:"no-store"}).then(async b=>{if(!b.ok)throw Error("request failed");let c=await b.json();if(a)return;let d=Array.isArray(c.agents)?c.agents:null;if(!d)throw Error("request failed");f(new Set(d.filter(a=>a.launchable).map(a=>a.agent))),h(Date.now()),j(!1)}).catch(()=>{a||j(!0)}),()=>{a=!0}},[k]),(0,b.jsx)("div",{className:"cfg-page",children:(0,b.jsxs)("div",{className:"max-w-3xl mx-auto",children:[(0,b.jsx)(d.default,{href:"/",className:"cfg-link cfg-back text-sm",children:"← Back to chat"}),(0,b.jsxs)("header",{className:"mt-3 mb-6",children:[(0,b.jsx)("h1",{className:"text-xl font-bold",children:"Settings"}),(0,b.jsx)("p",{className:"text-sm cfg-faint",children:"Local runtime status for every agent in this Botmancers."})]}),(0,b.jsxs)("section",{className:"cfg-card",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,b.jsx)("h2",{className:"cfg-title",children:"Local runtimes"}),null!==a?(0,b.jsxs)("span",{className:"text-sm cfg-faint",children:["Checked ",(0,e.formatClock)(g)]}):null]}),i&&null===a?(0,b.jsxs)("p",{className:"text-sm cfg-muted",children:["Couldn't check the local runtimes."," ",(0,b.jsx)("button",{onClick:()=>l(a=>a+1),className:"cfg-link",children:"Retry"})]}):null===a?(0,b.jsx)("div",{className:"h-10 rounded-lg animate-pulse cfg-skel"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dl",{className:"text-sm",children:e.AGENT_OPTIONS.map(c=>{let d=a.has(c.value);return(0,b.jsxs)("div",{className:"flex justify-between gap-4 py-1 border-t cfg-line",children:[(0,b.jsx)("dt",{className:"cfg-muted",children:c.label}),(0,b.jsx)("dd",{className:d?"cfg-ok":"cfg-faint",children:d?"● Ready":"○ Not available"})]},c.value)})}),(0,b.jsx)("p",{className:"mt-2 text-xs cfg-faint",children:"Coding Agents need their provider CLI installed and signed in on this computer; Hermes needs the gateway key. A runtime that is not available here cannot launch an agent until it is fixed."}),(0,b.jsx)("button",{onClick:()=>l(a=>a+1),className:"mt-3 cfg-btn-ghost text-sm w-full sm:w-auto",children:"Re-check"})]})]})]})})}])},20851,22151,a=>{"use strict";let b=["hermes","cursor","claude","codex","muse"],c={hermes:"Hermes",cursor:"Cursor",claude:"Claude",codex:"Codex",muse:"Muse Code"},d="hermes";function e(a){return b.includes(String(a))?c[a]:String(a??"")}b.join("|"),a.s(["AGENTS",0,b,"AGENT_LABELS",0,c,"DEFAULT_AGENT",0,d,"agentLabel",0,e],22151);let f=b.map(a=>({value:a,label:c[a]}));function g(a){return e((a.agent??"").trim()||d)}function h(a){let b=a.runtime_connection;return b&&b.label.trim()?b.label.trim():(a.runtime_connection_id??"").trim()?(a.runtime_connection_id??"").trim():null}function i(a){return`~/.botmancers/${a}`}let j="~/.botmancers/{agentID}",k=`Default: ${j} — {agentID} is this agent's ID, assigned at creation.`;function l(a){return String(a).padStart(2,"0")}let m=[{prefix:"[Agent failed]",kind:"failed",label:"Agent failed"},{prefix:"[Deck handoff]",kind:"handoff",label:"Agent launch"},{prefix:"[Deck run]",kind:"run",label:"Agent run"},{prefix:"[Deck review]",kind:"review",label:"Agent review"},{prefix:"[Deck resume]",kind:"resume",label:"Agent resume"},{prefix:"[Deck result]",kind:"result",label:"Agent result"},{prefix:"[Deck failed]",kind:"failed",label:"Agent failed"},{prefix:"[Deck needs selection]",kind:"reselection",label:"Agent needs setup"},{prefix:"[Deck needs reselection]",kind:"reselection",label:"Agent needs setup"}];a.s(["AGENT_OPTIONS",0,f,"NEW_AGENT_WORKSPACE_HINT",0,k,"WORKSPACE_TEMPLATE",0,j,"agentEventDisplay",0,function(a){let b=String(a??"").trimStart(),c=m.find(a=>b.startsWith(a.prefix));return c?{label:c.label,detail:b.slice(c.prefix.length).trim()}:null},"botAgentLabel",0,g,"botConnectionLabel",0,h,"configWorkspaceHint",0,function(a){return`Default: ${i(a)} — leave blank to use it.`},"defaultWorkdirFor",0,i,"formatClock",0,function(a){let b=new Date(a);return`${l(b.getHours())}:${l(b.getMinutes())}:${l(b.getSeconds())}`},"rosterRuntimeLine",0,function(a){let b=`Agent: ${g(a)} \xb7 `+(h(a)??"No connection");return!1===a.launchable?b+" — see Config":b}],20851)},46058,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},14827,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={createLinkPrefetchPartialError:function(){return g},createUnrenderedSegmentError:function(){return f}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a,b){let c=`Route "${a}": Could not validate that a segment in your UI has instant navigation.`;if(b.length>0){let a=1===b.length?"Dropped segment":"Dropped segments";c+=`
2
2
 
3
3
  This segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.
4
4
 
@@ -0,0 +1,3 @@
1
+ module.exports=[98295,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(15722),f=a.i(67588);a.s(["default",0,function(){let{id:a,overview:g,loading:h,error:i,notFound:j}=(0,e.useAgentOverview)(),[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)(null),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(0),y=(0,c.useCallback)(async(b,c)=>{if(a){c&&v(!0);try{let d=new URLSearchParams({limit:"30"});q&&d.set("q",q),b&&d.set("cursor",b);let e=await fetch(`/api/bots/${encodeURIComponent(a)}/conversations?${d}`,{cache:"no-store"}),f=await e.json().catch(()=>null);if(!e.ok||!f||!Array.isArray(f.conversations))throw Error("load");l(a=>c&&a?[...a,...f.conversations]:f.conversations),n(f.next_cursor),t("")}catch{t("Could not load conversations.")}finally{v(!1)}}},[q,a]);return((0,c.useEffect)(()=>{let a=window.setTimeout(()=>{l(null),y(null,!1)},0);return()=>window.clearTimeout(a)},[y,w]),h)?(0,b.jsx)("div",{className:"agent-state",role:"status",children:"Loading agent conversations…"}):j?(0,b.jsxs)("div",{className:"agent-state",children:[(0,b.jsx)("h2",{children:"Agent not found"}),(0,b.jsx)(d.default,{href:"/",children:"Choose an agent"})]}):i||!g?(0,b.jsx)("div",{className:"agent-state",role:"alert",children:"This agent’s conversations are unavailable."}):(0,b.jsxs)("div",{className:"conversation-index","data-agent-conversations":!0,children:[(0,b.jsxs)("header",{className:"conversation-index-head",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"agent-eyebrow",children:"Conversations"}),(0,b.jsx)("h2",{children:"Durable history"}),(0,b.jsxs)("p",{children:["Direct messages, agent handoffs, and connected-service conversations involving ",g.agent.name,"."]})]}),g.conversation?(0,b.jsxs)(d.default,{className:"agent-primary-action",href:`/agents/${encodeURIComponent(a)}/conversations/${encodeURIComponent(g.conversation.id)}`,children:["Message ",g.agent.name]}):null]}),(0,b.jsxs)("form",{className:"conversation-search",role:"search",onSubmit:a=>{a.preventDefault(),r(o.trim())},children:[(0,b.jsx)("label",{htmlFor:"conversation-query",children:"Search conversations"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("input",{id:"conversation-query",value:o,onChange:a=>p(a.target.value),placeholder:"Participant, origin, or type"}),(0,b.jsx)("button",{type:"submit",children:"Search"})]})]}),null!==k||s?null:(0,b.jsx)("p",{className:"conversation-state",role:"status","data-conversation-state":"loading",children:"Loading conversations…"}),s?(0,b.jsxs)("div",{className:"conversation-state",role:"alert","data-conversation-state":"error",children:[(0,b.jsx)("p",{children:s}),(0,b.jsx)("button",{type:"button",onClick:()=>x(a=>a+1),children:"Retry"})]}):null,k?.length!==0||s?null:(0,b.jsx)("p",{className:"conversation-state","data-conversation-state":"empty",children:q?"No conversations match this search.":"No conversations involve this agent yet."}),k&&k.length>0?(0,b.jsx)("ol",{className:"conversation-list","aria-label":"Conversations, newest activity first",children:k.map(c=>(0,b.jsx)("li",{children:(0,b.jsxs)(d.default,{href:`/agents/${encodeURIComponent(a)}/conversations/${encodeURIComponent(c.conversation_id)}`,children:[(0,b.jsxs)("span",{className:"conversation-row-title",children:[(0,b.jsx)("strong",{children:c.label}),(0,b.jsx)("span",{children:(0,f.ownerConversationTypeLabel)(c)})]}),(0,b.jsx)("span",{className:"conversation-row-participants",children:c.participants.map(a=>a.label).join(" · ")}),(0,b.jsxs)("span",{className:"conversation-row-meta",children:[(0,b.jsxs)("span",{children:["Origin: ",c.origin?.label??"Unknown"]}),(0,b.jsxs)("span",{children:[c.message_count," ",1===c.message_count?"message":"messages"]}),(0,b.jsx)("time",{dateTime:new Date(c.last_activity_at).toISOString(),children:new Date(c.last_activity_at).toLocaleString()})]})]})},c.conversation_id))}):null,m&&k&&!s?(0,b.jsx)("button",{className:"conversation-more",type:"button",disabled:u,onClick:()=>void y(m,!0),children:u?"Loading…":"Load older conversations"}):null]})}])},67588,a=>{"use strict";a.s(["ownerConversationEyebrow",0,function(a){return"direct"===a.type?"Direct conversation":"group"===a.type?"Shared history":a.origin?.kind==="service"?"External-service history":"Agent-to-agent history"},"ownerConversationTypeLabel",0,function(a){return"direct"===a.type?"Direct":"group"===a.type?"Shared":a.origin?.kind==="service"?"External service":"Agent to agent"}])}];
2
+
3
+ //# sourceMappingURL=_0d7gv3q._.js.map