botmancers 0.6.1 → 0.8.0

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 (266) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +13 -12
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/app-path-routes-manifest.json +1 -2
  5. package/app/.next/build-manifest.json +3 -3
  6. package/app/.next/prerender-manifest.json +4 -4
  7. package/app/.next/required-server-files.json +2 -2
  8. package/app/.next/routes-manifest.json +8 -12
  9. package/app/.next/server/app/_global-error.html +1 -1
  10. package/app/.next/server/app/_global-error.rsc +1 -1
  11. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/_not-found.html +1 -1
  17. package/app/.next/server/app/_not-found.rsc +2 -2
  18. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  19. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  20. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
  22. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js +2 -2
  23. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js.nft.json +1 -1
  24. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -1
  25. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js +3 -3
  26. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js.nft.json +1 -1
  27. package/app/.next/server/app/api/bots/[id]/sessions/route.js +5 -5
  28. package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -1
  29. package/app/.next/server/app/api/bots/[id]/sessions/sync/route/app-paths-manifest.json +3 -0
  30. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js +11 -0
  31. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js.nft.json +1 -0
  32. package/app/.next/server/app/api/bots/[id]/sessions/sync/route_client-reference-manifest.js +3 -0
  33. package/app/.next/server/app/api/bots/[id]/share-policy/route.js +3 -3
  34. package/app/.next/server/app/api/bots/[id]/share-policy/route.js.nft.json +1 -1
  35. package/app/.next/server/app/api/bots/[id]/skill/route.js.nft.json +1 -1
  36. package/app/.next/server/app/api/bots/availability/route.js +3 -2
  37. package/app/.next/server/app/api/bots/availability/route.js.nft.json +1 -1
  38. package/app/.next/server/app/api/bots/delete-preview/route.js.nft.json +1 -1
  39. package/app/.next/server/app/api/bots/import/route.js.nft.json +1 -1
  40. package/app/.next/server/app/api/bots/manage/route.js.nft.json +1 -1
  41. package/app/.next/server/app/api/bots/name-migrations/route.js.nft.json +1 -1
  42. package/app/.next/server/app/api/bots/route.js +4 -4
  43. package/app/.next/server/app/api/bots/route.js.nft.json +1 -1
  44. package/app/.next/server/app/api/conversations/[id]/approve/route.js.nft.json +1 -1
  45. package/app/.next/server/app/api/conversations/[id]/deny/route.js.nft.json +1 -1
  46. package/app/.next/server/app/api/conversations/[id]/draft/route.js.nft.json +1 -1
  47. package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js.nft.json +1 -1
  48. package/app/.next/server/app/api/conversations/[id]/messages/route.js +5 -5
  49. package/app/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
  50. package/app/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
  51. package/app/.next/server/app/api/conversations/[id]/stop/route.js +6 -6
  52. package/app/.next/server/app/api/conversations/[id]/stop/route.js.nft.json +1 -1
  53. package/app/.next/server/app/api/conversations/route.js.nft.json +1 -1
  54. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js +2 -2
  55. package/app/.next/server/app/api/exchanges/[id]/cancel/route.js.nft.json +1 -1
  56. package/app/.next/server/app/api/exchanges/[id]/route.js +3 -3
  57. package/app/.next/server/app/api/exchanges/[id]/route.js.nft.json +1 -1
  58. package/app/.next/server/app/api/exchanges/route.js +2 -2
  59. package/app/.next/server/app/api/exchanges/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/files/[name]/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/groups/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/health/route.js +2 -2
  63. package/app/.next/server/app/api/health/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/mcp/route.js.nft.json +1 -1
  65. package/app/.next/server/app/api/messages/[id]/between/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/runtime-connections/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -1
  68. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js +3 -3
  69. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/shares/route.js +3 -3
  71. package/app/.next/server/app/api/shares/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +3 -3
  73. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +3 -3
  75. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js +2 -2
  77. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js +3 -3
  79. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/v0/agents/[agentId]/route.js +3 -3
  81. package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +3 -3
  83. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -1
  84. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +3 -3
  85. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/v0/agents/route.js +3 -3
  87. package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/v0/capabilities/route.js +3 -3
  89. package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -1
  90. package/app/.next/server/app/api/v0/conversations/[id]/route.js +2 -2
  91. package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +3 -3
  93. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/v0/exchanges/[id]/route.js +3 -3
  95. package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -1
  96. package/app/.next/server/app/api/v0/exchanges/route.js +3 -3
  97. package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/v0/mcp/route.js +4 -4
  99. package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js +3 -3
  101. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js +3 -3
  103. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js +3 -3
  105. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/v0/requests/[id]/route.js +2 -2
  107. package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +3 -3
  109. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js +3 -3
  111. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js +3 -3
  113. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js +3 -3
  115. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js +3 -3
  117. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/v0/shares/current/route.js +3 -3
  119. package/app/.next/server/app/api/v0/shares/current/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/v0/shares/route.js +3 -3
  121. package/app/.next/server/app/api/v0/shares/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +2 -2
  123. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/wakes/[id]/decision/route.js +2 -2
  125. package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/wakes/[id]/retry/route.js +2 -2
  127. package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
  128. package/app/.next/server/app/bots/[id]/config/page.js.nft.json +1 -1
  129. package/app/.next/server/app/bots/[id]/config/page_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/exchanges/page.js.nft.json +1 -1
  131. package/app/.next/server/app/exchanges/page_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/exchanges.html +1 -1
  133. package/app/.next/server/app/exchanges.rsc +3 -3
  134. package/app/.next/server/app/exchanges.segments/_full.segment.rsc +3 -3
  135. package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +2 -2
  136. package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +3 -3
  137. package/app/.next/server/app/index.html +1 -1
  138. package/app/.next/server/app/index.rsc +3 -3
  139. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  140. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  141. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  142. package/app/.next/server/app/page.js.nft.json +1 -1
  143. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/settings/page.js.nft.json +1 -1
  145. package/app/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/settings.html +1 -1
  147. package/app/.next/server/app/settings.rsc +3 -3
  148. package/app/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  149. package/app/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  150. package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
  151. package/app/.next/server/app/threads/[id]/page.js.nft.json +1 -1
  152. package/app/.next/server/app/threads/[id]/page_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app-paths-manifest.json +1 -2
  154. package/app/.next/server/chunks/[root-of-the-server]__0d3fjix._.js +1 -1
  155. package/app/.next/server/chunks/[root-of-the-server]__0hhill-._.js +3 -0
  156. package/app/.next/server/chunks/[root-of-the-server]__0k8wfe2._.js +3 -0
  157. package/app/.next/server/chunks/[root-of-the-server]__0mp8bap._.js +1 -1
  158. package/app/.next/server/chunks/[root-of-the-server]__0qaiqut._.js +5 -5
  159. package/app/.next/server/chunks/[root-of-the-server]__0qqsovi._.js +3 -0
  160. package/app/.next/server/chunks/[root-of-the-server]__0zrx1iz._.js +1 -1
  161. package/app/.next/server/chunks/[root-of-the-server]__10b5-i-._.js +1 -1
  162. package/app/.next/server/chunks/[root-of-the-server]__17xl_55._.js +1 -1
  163. package/app/.next/server/chunks/[root-of-the-server]__1j8fg_n._.js +3 -0
  164. package/app/.next/server/chunks/[root-of-the-server]__1x8phwp._.js +44 -0
  165. package/app/.next/server/chunks/[root-of-the-server]__200ep0k._.js +1 -1
  166. package/app/.next/server/chunks/_0061c2q._.js +1 -1
  167. package/app/.next/server/chunks/_057h7zr._.js +3 -0
  168. package/app/.next/server/chunks/_0_b7py8._.js +3 -0
  169. package/app/.next/server/chunks/_0a2do3x._.js +1 -1
  170. package/app/.next/server/chunks/_1-5mthb._.js +1 -1
  171. package/app/.next/server/chunks/_next-internal_server_app_api_bots_[id]_sessions_sync_route_actions_00y6n-f.js +3 -0
  172. package/app/.next/server/chunks/lib_0-opbv7._.js +330 -0
  173. package/app/.next/server/chunks/lib_0aejojj._.js +330 -0
  174. package/app/.next/server/chunks/lib_0il0ml1._.js +330 -0
  175. package/app/.next/server/chunks/lib_0iujsdg._.js +330 -0
  176. package/app/.next/server/chunks/lib_0kik6bx._.js +20 -20
  177. package/app/.next/server/chunks/lib_0pe3tiv._.js +20 -20
  178. package/app/.next/server/chunks/{lib_1zc7-gl._.js → lib_15a9ejf._.js} +122 -130
  179. package/app/.next/server/chunks/{lib_15adnlz._.js → lib_19pzc33._.js} +122 -130
  180. package/app/.next/server/chunks/lib_1a4ucxv._.js +330 -0
  181. package/app/.next/server/chunks/lib_1dehbst._.js +330 -0
  182. package/app/.next/server/chunks/lib_1z4vnh4._.js +330 -0
  183. package/app/.next/server/chunks/lib_1z7d95m._.js +2181 -0
  184. package/app/.next/server/chunks/lib_db_ts_1ttuckb._.js +58 -56
  185. package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +5 -5
  186. package/app/.next/server/chunks/ssr/_00ysoah._.js +3 -0
  187. package/app/.next/server/chunks/ssr/_14d-lxn._.js +3 -0
  188. package/app/.next/server/chunks/ssr/_1cvuhjt._.js +1 -1
  189. package/app/.next/server/chunks/ssr/_1lkd0ui._.js +3 -0
  190. package/app/.next/server/chunks/ssr/_1n5mvo5._.js +1 -1
  191. package/app/.next/server/chunks/ssr/_1o94bnv._.js +8 -1
  192. package/app/.next/server/chunks/ssr/_1r5kd5j._.js +3 -0
  193. package/app/.next/server/chunks/ssr/app_1-nwnha._.js +3 -0
  194. package/app/.next/server/chunks/ssr/app_bots_[id]_config_page_tsx_1e0uue9._.js +1 -1
  195. package/app/.next/server/chunks/ssr/lib_exchange-view_ts_1a4q9ju._.js +3 -0
  196. package/app/.next/server/instrumentation.js +1 -1
  197. package/app/.next/server/middleware-build-manifest.js +3 -3
  198. package/app/.next/server/pages/404.html +1 -1
  199. package/app/.next/server/pages/500.html +1 -1
  200. package/app/.next/server/server-reference-manifest.js +1 -1
  201. package/app/.next/server/server-reference-manifest.json +1 -1
  202. package/app/.next/static/chunks/0y1ihx4vq8du3.js +10 -0
  203. package/app/.next/static/chunks/1c2dl2ga-lqcb.css +3 -0
  204. package/app/.next/static/chunks/2q-tgwkalrnms.js +1 -0
  205. package/app/.next/static/chunks/2qf-mb__71dkk.js +1 -0
  206. package/app/.next/static/chunks/399dvlpyl00wn.js +1 -0
  207. package/app/.next/static/chunks/3b7r6u9nfsjb1.js +1 -0
  208. package/app/.next/static/chunks/3f1v-zuki9k7k.js +1 -0
  209. package/app/.next/static/chunks/3whw2-l4a2sli.js +1 -0
  210. package/app/BUILD_INFO.json +2 -2
  211. package/app/package.json +1 -1
  212. package/app/server.js +1 -1
  213. package/dist/cli.d.ts +1 -1
  214. package/dist/cli.js +2 -2
  215. package/dist/product.d.ts +0 -1
  216. package/dist/product.js +12 -22
  217. package/dist/setup.js +9 -9
  218. package/package.json +1 -2
  219. package/schemas/botmancers.mcp.v2.tools.json +3 -3
  220. package/app/.next/server/app/api/agent-deck/decks/route/app-paths-manifest.json +0 -3
  221. package/app/.next/server/app/api/agent-deck/decks/route.js +0 -9
  222. package/app/.next/server/app/api/agent-deck/decks/route.js.nft.json +0 -1
  223. package/app/.next/server/app/api/agent-deck/decks/route_client-reference-manifest.js +0 -3
  224. package/app/.next/server/app/api/agent-deck/settings/route/app-paths-manifest.json +0 -3
  225. package/app/.next/server/app/api/agent-deck/settings/route/build-manifest.json +0 -12
  226. package/app/.next/server/app/api/agent-deck/settings/route/server-reference-manifest.json +0 -4
  227. package/app/.next/server/app/api/agent-deck/settings/route.js +0 -9
  228. package/app/.next/server/app/api/agent-deck/settings/route.js.nft.json +0 -1
  229. package/app/.next/server/app/api/agent-deck/settings/route_client-reference-manifest.js +0 -3
  230. package/app/.next/server/chunks/[root-of-the-server]__0e_agq4._.js +0 -3
  231. package/app/.next/server/chunks/[root-of-the-server]__0j4pjyg._.js +0 -3
  232. package/app/.next/server/chunks/[root-of-the-server]__0mo_kn3._.js +0 -48
  233. package/app/.next/server/chunks/[root-of-the-server]__17mum5-._.js +0 -3
  234. package/app/.next/server/chunks/[root-of-the-server]__1bhzfu_._.js +0 -7
  235. package/app/.next/server/chunks/[root-of-the-server]__1g_n99l._.js +0 -3
  236. package/app/.next/server/chunks/[root-of-the-server]__1t4ybp2._.js +0 -48
  237. package/app/.next/server/chunks/_0qv-4by._.js +0 -3
  238. package/app/.next/server/chunks/_next-internal_server_app_api_agent-deck_decks_route_actions_0yguyfv.js +0 -3
  239. package/app/.next/server/chunks/_next-internal_server_app_api_agent-deck_settings_route_actions_0z_nbkb.js +0 -3
  240. package/app/.next/server/chunks/lib_0v4d9w0._.js +0 -339
  241. package/app/.next/server/chunks/lib_0v6lblw._.js +0 -5
  242. package/app/.next/server/chunks/lib_0zzo6zb._.js +0 -339
  243. package/app/.next/server/chunks/lib_1_u7n-u._.js +0 -339
  244. package/app/.next/server/chunks/lib_1muhwn7._.js +0 -339
  245. package/app/.next/server/chunks/lib_1xnxg-q._.js +0 -339
  246. package/app/.next/server/chunks/ssr/_0_fa0na._.js +0 -3
  247. package/app/.next/server/chunks/ssr/_0epgorw._.js +0 -3
  248. package/app/.next/server/chunks/ssr/_1i02yyi._.js +0 -3
  249. package/app/.next/server/chunks/ssr/app_components_AgentDeckRuntime_tsx_024janf._.js +0 -3
  250. package/app/.next/server/chunks/ssr/app_exchanges_page_tsx_0j-n2a1._.js +0 -3
  251. package/app/.next/server/chunks/ssr/app_settings_page_tsx_1t-rdz-._.js +0 -3
  252. package/app/.next/server/chunks/ssr/node_modules_@swc_helpers_cjs__interop_require_default_cjs_1ztp13a._.js +0 -3
  253. package/app/.next/static/chunks/0jon21u-9j2aw.css +0 -3
  254. package/app/.next/static/chunks/14k6cvywgknx2.js +0 -3
  255. package/app/.next/static/chunks/1ku9himlsx-hn.js +0 -1
  256. package/app/.next/static/chunks/1r5tqd-7h1xjn.js +0 -1
  257. package/app/.next/static/chunks/21aqekm5z0j47.js +0 -1
  258. package/app/.next/static/chunks/22xbkclbkct3s.js +0 -1
  259. package/app/.next/static/chunks/2c953okoei6ip.js +0 -1
  260. package/app/.next/static/chunks/2t_2gf3xoxz_m.js +0 -1
  261. package/app/.next/static/chunks/34vnvo1qssbaj.js +0 -1
  262. /package/app/.next/server/app/api/{agent-deck/decks → bots/[id]/sessions/sync}/route/build-manifest.json +0 -0
  263. /package/app/.next/server/app/api/{agent-deck/decks → bots/[id]/sessions/sync}/route/server-reference-manifest.json +0 -0
  264. /package/app/.next/static/{_yrIZIFsIbXA0Gaxkytjd → 3rSDqQK0KGcTDI98uoZRy}/_buildManifest.js +0 -0
  265. /package/app/.next/static/{_yrIZIFsIbXA0Gaxkytjd → 3rSDqQK0KGcTDI98uoZRy}/_clientMiddlewareManifest.js +0 -0
  266. /package/app/.next/static/{_yrIZIFsIbXA0Gaxkytjd → 3rSDqQK0KGcTDI98uoZRy}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
- module.exports=[69936,9501,e=>{"use strict";var t=e.i(62294),n=e.i(43345),i=e.i(45383),r=e.i(674),s=e.i(81449),a=e.i(54799),o=e.i(62349),d=e.i(18966),c=e.i(35613),l=e.i(90027),u=e.i(63020),_=e.i(91253),g=e.i(93399),p=e.i(50081),h=e.i(16789),f=e.i(35034);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},y=["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,p.recoveryFor)(e),this.reason=n.reason??null}get status(){return m[this.code]}get denied(){return y.includes(this.code)}}let v={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=v[e]();return new w(t.code,t.message,{notGranted:!0})}function S(e){switch(e.code){case"exchange_not_found":return v.exchange();case"session_not_found":return v.session();case"agent_not_found":return v.agent();case"conversation_not_found":return v.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 R(e){if("service"!==e.kind)throw new w("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.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}}function I(e,n,i){return"string"==typeof n&&!!e.agents.get(n)?.has(i)&&!!t.bots.getById(n)}function k(e,n,i){let r=t.bots.getById(n);if(!r)throw v.agent();if(!I(e,n,i))throw E("agent");return r}let x=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function A(e,t){return t.at-e.at||t.tie-e.tie||(e.id<t.id?-1:+(e.id>t.id))}function C(e,t){return Buffer.from(JSON.stringify({s:e,a:t.at,t:t.tie,i:t.id}),"utf8").toString("base64url")}function T(e,t){let n;if(null===t||""===t)return null;let i=new w("invalid_request","cursor is not a cursor of this list.");if(t.length>1024)throw i;try{n=JSON.parse(Buffer.from(t,"base64url").toString("utf8"))}catch{throw i}if(!n||n.s!==e||"number"!=typeof n.a||"number"!=typeof n.t||"string"!=typeof n.i)throw i;return{at:n.a,tie:n.t,id:n.i}}function q(e,t=x.default,n=x.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)}function N(e,t,n,i,r){let s=T(e,i),a=[...t].sort((e,t)=>A(n(e),n(t))),o=s?a.filter(e=>A(n(e),s)>0):a,d=o.slice(0,r),c=o.length>r?C(e,n(d[d.length-1])):null;return{items:d,next_cursor:c}}function O(e){let n=[...e.agents.entries()].filter(([e])=>!!t.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:n,limits:{page:x,content_chars:c.EXCHANGE_LIMITS.instructionChars,message_content_chars:B}}}function P(e,n){let i,r=(0,o.resolveAgent)(n),s=e.agents.get(n.id)??new Set;return{agent_id:n.id,name:n.name,title:n.title,runtime:r.agent,available:r.launchable,capabilities:_.SERVICE_CAPABILITIES.filter(e=>s.has(e)),messaging:{home_session_ref:n.home_session_id??null,new_sessions_allowed:(0,d.readStoredPolicy)(n)?.allow_new_sessions===!0,default_workspace_set:!!n.default_workspace},created_at:n.created_at,last_activity_at:(i=t.default.prepare(`
1
+ module.exports=[69936,9501,e=>{"use strict";var t=e.i(62294),n=e.i(43345),i=e.i(45383),r=e.i(674),s=e.i(81449),a=e.i(54799),o=e.i(46309),d=e.i(62349),c=e.i(18966),l=e.i(35613),u=e.i(90027),_=e.i(63020),g=e.i(91253),p=e.i(93399),h=e.i(50081),f=e.i(16789),m=e.i(35034);let y={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},w=["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 v 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,h.recoveryFor)(e),this.reason=n.reason??null}get status(){return y[this.code]}get denied(){return w.includes(this.code)}}let E={pin:()=>new v("pin_not_found","No pin with that reference is visible to this principal."),share:()=>new v("share_not_found","No share with that reference is visible to this principal."),agent:()=>new v("agent_not_found","No Agent with that id is visible to this principal."),session:()=>new v("session_not_found","No session with that reference is visible to this principal."),conversation:()=>new v("conversation_not_found","No conversation with that id is visible to this principal."),exchange:()=>new v("exchange_not_found","No exchange with that id is visible to this principal.")};function S(e){let t=E[e]();return new v(t.code,t.message,{notGranted:!0})}function b(e){switch(e.code){case"exchange_not_found":return E.exchange();case"session_not_found":return E.session();case"agent_not_found":return E.agent();case"conversation_not_found":return E.conversation();case"invalid_transition":return new v("conflict","The exchange changed concurrently; read it and retry.");default:return e.code in y?new v(e.code,e.message):new v("invalid_request",e.message)}}let R=new Map;function I(e){if("service"!==e.kind)throw new v("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID)return{principal:e,mode:"narrow",agents:R};let t=(0,g.loadServiceGrants)();if("invalid"===t.state)throw new v("grants_unavailable","The service grants are not available; the owner must fix the grants document.");return"absent"===t.state?{principal:e,mode:"narrow",agents:R}:{principal:e,mode:"granted",agents:t.grants.get(e.id)??R}}function k(e,n,i){return"string"==typeof n&&!!e.agents.get(n)?.has(i)&&!!t.bots.getById(n)}function A(e,n,i){let r=t.bots.getById(n);if(!r)throw E.agent();if(!k(e,n,i))throw S("agent");return r}let x=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function C(e,t=x.default,n=x.max){if(null===e||""===e)return t;if(!/^\d+$/.test(e)||1>Number(e)||Number(e)>n)throw new v("invalid_request",`limit must be an integer from 1 to ${n}.`);return Number(e)}function T(e,t,n,i,r){try{return(0,o.paginateRows)(e,t,n,i,r)}catch(e){if(e instanceof o.InvalidPageCursorError)throw new v("invalid_request",e.message);throw e}}function q(e){let n=[...e.agents.entries()].filter(([e])=>!!t.bots.getById(e)).map(([e,t])=>({agent_id:e,capabilities:g.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:g.SERVICE_CAPABILITIES,agents:n,limits:{page:x,content_chars:l.EXCHANGE_LIMITS.instructionChars,message_content_chars:D}}}function N(e,n){let i,r=(0,d.resolveAgent)(n),s=e.agents.get(n.id)??new Set;return{agent_id:n.id,name:n.name,title:n.title,runtime:r.agent,available:r.launchable,capabilities:g.SERVICE_CAPABILITIES.filter(e=>s.has(e)),messaging:{home_session_ref:n.home_session_id??null,new_sessions_allowed:(0,c.readStoredPolicy)(n)?.allow_new_sessions===!0,default_workspace_set:!!n.default_workspace},created_at:n.created_at,last_activity_at:(i=t.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(n.id),Math.max(n.created_at,i.at??0))}}function L(e,n){let i=[...e.agents.keys()].filter(t=>I(e,t,"agents:read")).map(n=>P(e,t.bots.getById(n)));return N(`agents:${e.principal.id}`,i,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),n.cursor,n.limit)}function K(e,t){return P(e,k(e,t,"agents:read"))}function M(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},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 $(e,n){k(e,n,"sessions:read"),await (0,h.warmAgentProvider)(t.default,n,{onlyWithSessions:!0})}function D(e,n,i){k(e,n,"sessions:read");let s=i.status??"all";if(!(0,l.isSessionFilter)(s))throw new w("invalid_request","status must be active, ended, or all.");let a=(0,g.serviceRedactor)(),o=(0,r.sessionsWithActions)(n,(0,l.listAgentSessions)(t.default,n,s)).map(e=>a.deep(M(e)));return N(`sessions:${n}:${s}`,o,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),i.cursor,i.limit)}function F(e,n,i){k(e,n,"sessions:read");let s=(0,l.getAgentSession)(t.default,n,i);if(!s)throw v.session();return(0,g.serviceRedactor)().deep({...M((0,r.sessionsWithActions)(n,[s])[0]),attempts:s.attempts,usage_samples:s.usage_samples.map(e=>({...e}))})}let B=16e3,G=`
4
+ `).get(n.id),Math.max(n.created_at,i.at??0))}}function O(e,n){let i=[...e.agents.keys()].filter(t=>k(e,t,"agents:read")).map(n=>N(e,t.bots.getById(n)));return T(`agents:${e.principal.id}`,i,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),n.cursor,n.limit)}function P(e,t){return N(e,A(e,t,"agents:read"))}function L(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},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 K(e,n){A(e,n,"sessions:read"),await (0,f.warmAgentProvider)(t.default,n,{onlyWithSessions:!0})}function M(e,n,i){A(e,n,"sessions:read");let s=i.status??"all";if(!(0,u.isSessionFilter)(s))throw new v("invalid_request","status must be active, ended, or all.");let a=(0,p.serviceRedactor)(),o=(0,r.sessionsWithActions)(n,(0,u.listAgentSessions)(t.default,n,s)).map(e=>a.deep(L(e)));return T(`sessions:${n}:${s}`,o,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),i.cursor,i.limit)}function $(e,n,i){A(e,n,"sessions:read");let s=(0,u.getAgentSession)(t.default,n,i);if(!s)throw E.session();return(0,p.serviceRedactor)().deep({...L((0,r.sessionsWithActions)(n,[s])[0]),attempts:s.attempts,usage_samples:s.usage_samples.map(e=>({...e}))})}let D=16e3,F=`
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=[69936,9501,e=>{"use strict";var t=e.i(62294),n=e.i(43345),i=e.i(
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 H(e){return t.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 W(e,t){return t.every(t=>"bot"===t.kind?I(e,t.id,"conversations:read"):"service"!==t.kind||t.id===e.principal.id)}function j(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}}function X(e,n,i){k(e,n,"conversations:read");let r=t.default.prepare(G).all(n).flatMap(t=>{let n=H(t.id);return W(e,n)?[j(t,n)]:[]});return N(`conversations:${n}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),i.cursor,i.limit)}function V(e,n,i,r){k(e,n,"conversations:read");let s=t.default.prepare(`${G} WHERE c.id = ?`).get(n,i);if(!s)throw v.conversation();let a=H(s.id);if(!W(e,a))throw E("conversation");let o=`messages:${s.id}`,d=T(o,r.cursor),c=t.default.prepare(`
13
+ `;function G(e){return t.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 B(e,t){return t.every(t=>"bot"===t.kind?k(e,t.id,"conversations:read"):"service"!==t.kind||t.id===e.principal.id)}function H(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}}function W(e,n,i){A(e,n,"conversations:read");let r=t.default.prepare(F).all(n).flatMap(t=>{let n=G(t.id);return B(e,n)?[H(t,n)]:[]});return T(`conversations:${n}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),i.cursor,i.limit)}function j(e,n,i,r){var s;A(e,n,"conversations:read");let a=t.default.prepare(`${F} WHERE c.id = ?`).get(n,i);if(!a)throw E.conversation();let d=G(a.id);if(!B(e,d))throw S("conversation");let c=`messages:${a.id}`,l=function(e,t){try{return(0,o.decodePageCursor)(e,t)}catch(e){if(e instanceof o.InvalidPageCursorError)throw new v("invalid_request",e.message);throw e}}(c,r.cursor),u=t.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(s.id,d?d.at:Number.MAX_SAFE_INTEGER,r.limit+1),l=c.slice(0,r.limit).reverse(),u=(0,g.serviceRedactor)();return{...j(s,a),messages:l.map(e=>{var t,n;let i,r=u.text(e.content);return{message_id:e.id,seq:e.seq,sender:(t=e,n=s,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>B?r.slice(0,B):r,truncated:r.length>B,request_id:e.request_id,created_at:e.created_at}}),next_cursor:c.length>r.limit&&l.length>0?C(o,{at:l[0].seq,tie:0,id:l[0].id}):null}}let J=["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 U(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function Y(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(J.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 z(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 Q(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 Z(e,n){return t.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,n)}function ee(e,n,i){let r=(0,a.randomUUID)();t.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(r,"agent",e.kind,e.id,i);let s=t.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return s.run(r,e.kind,e.id,i),s.run(r,"bot",n,i),r}function et(e){return t.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function en(e,n){try{return t.default.transaction(()=>{let{input:t,afterCreate:r}=e(),s=i.exchanges.create(t);return s.created&&r&&r(s.exchange),n?.(s.exchange),s}).immediate()}catch(e){if(e instanceof u.ExchangeError)throw S(e);throw e}}function ei(e,t){if(!U(e))throw new w("invalid_request","The body must be a JSON object.");Y(e,["content","idempotency_key"],"");let n=Q(e,t);return{content:z(e.content,"content",c.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function er(e,n,r,s){let o=et(n);if(!o){let i=t.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(i&&I(e,i.agent_id,"sessions:message"))throw new w("session_not_resumable","This session is not reachable through session messages.");throw v.session()}if(!I(e,o.agent_id,"sessions:message"))throw E("session");let d=e.principal,c=`${_.MESSAGE_KEY_PREFIX}${r.idempotencyKey}`,{exchange:l,created:u}=en(()=>{let e=Date.now(),n=Z(d,c),i=t.default.prepare(`
19
+ `).all(a.id,l?l.at:Number.MAX_SAFE_INTEGER,r.limit+1),_=u.slice(0,r.limit).reverse(),g=(0,p.serviceRedactor)();return{...H(a,d),messages:_.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>D?r.slice(0,D):r,truncated:r.length>D,request_id:e.request_id,created_at:e.created_at}}),next_cursor:u.length>r.limit&&_.length>0?(s={at:_[0].seq,tie:0,id:_[0].id},(0,o.encodePageCursor)(c,s)):null}}let X=["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 V(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function J(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(X.includes(i))throw new v("authority_not_allowed",`${n}${i} is chosen by Botmancers from the session and the Agent's configuration; a caller cannot set it.`);throw new v("invalid_request",`${n}${i} is not a field of this request.`)}}function U(e,t,n){if("string"!=typeof e||0===e.trim().length)throw new v("invalid_request",`${t} is required.`);if(e.length>n)throw new v("invalid_request",`${t} exceeds ${n} characters.`);return e}function Y(e,t){let n=e.idempotency_key;if(void 0!==n&&"string"!=typeof n)throw new v("invalid_request","idempotency_key must be a string.");if(null!==t&&void 0!==n&&t!==n)throw new v("invalid_request","Idempotency-Key header and body idempotency_key differ.");let i=n??t??"";if(0===i.trim().length||i.length>160)throw new v("invalid_request","An idempotency key (1-160 characters) is required.");return i}function z(e,n){return t.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,n)}function Q(e,n,i){let r=(0,a.randomUUID)();t.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(r,"agent",e.kind,e.id,i);let s=t.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return s.run(r,e.kind,e.id,i),s.run(r,"bot",n,i),r}function Z(e){return t.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function ee(e,n){try{return t.default.transaction(()=>{let{input:t,afterCreate:r}=e(),s=i.exchanges.create(t);return s.created&&r&&r(s.exchange),n?.(s.exchange),s}).immediate()}catch(e){if(e instanceof _.ExchangeError)throw b(e);throw e}}function et(e,t){if(!V(e))throw new v("invalid_request","The body must be a JSON object.");J(e,["content","idempotency_key"],"");let n=Y(e,t);return{content:U(e.content,"content",l.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function en(e,n,r,s){let o=Z(n);if(!o){let i=t.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(i&&k(e,i.agent_id,"sessions:message"))throw new v("session_not_resumable","This session is not reachable through session messages.");throw E.session()}if(!k(e,o.agent_id,"sessions:message"))throw S("session");let d=e.principal,c=`${g.MESSAGE_KEY_PREFIX}${r.idempotencyKey}`,{exchange:l,created:u}=ee(()=>{let e=Date.now(),n=z(d,c),i=t.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(d.kind,d.id,o.id),s=n?.origin_conversation_id??i?.origin_conversation_id??ee(d,o.agent_id,e);return{input:{requester:d,serviceGrant:!0,idempotencyKey:c,mode:"ask",originConversationId:s,sourceAgentId:o.agent_id,sessionRef:o.id,instruction:r.content,now:e},afterCreate:n=>{t.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,a.randomUUID)(),n.origin_conversation_id,"user",d.id,d.kind,n.source_request_id,r.content,e)}}},s),g=(0,i.dispatchExchange)(l.id),p=l.source_request_id?t.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(l.source_request_id):void 0,h=t.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(l.origin_conversation_id,l.source_request_id,d.kind);return{accepted:{session_ref:o.id,agent_id:o.agent_id,exchange_id:l.id,request_id:l.source_request_id,conversation_id:l.origin_conversation_id,message_id:h?.id??null,state:p?(0,i.apiStateOf)(p.state):"accepted",replayed:!u},dispatched:g}}function es(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 ea(e,t,n){let r=i.exchanges.get(t);if(!r)throw v.exchange();if(!es(e,r,n))throw E("exchange");return r}let eo=e=>e.idempotency_key.startsWith(_.MESSAGE_KEY_PREFIX)?"session_message":"exchange";function ed(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,g.serviceRedactor)().deep({...e,kind:eo(t),idempotency_key:n})}function ec(e){return{id:e.id,kind:eo(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 el(e,t){let n=i.exchanges.require(t);return es(e,n,"exchanges:read")?ed((0,i.getExchangeView)(t),n):ec(n)}function eu(e,n){let i=t.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>es(e,t,"exchanges:read")).map(ec);return N(`exchanges:${e.principal.id}`,i,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),n.cursor,n.limit)}function e_(e,t){let n=ea(e,t,"exchanges:read");return ed((0,i.getExchangeView)(n.id),n)}let eg=["exchange_id","parent_exchange_id"];function ep(e,t){if(!U(e))throw new w("invalid_request","The body must be a JSON object.");if(eg.some(t=>t in e))throw new w("recursive_exchange","An exchange cannot be started from another exchange.");if(Y(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(!U(e.source))throw new w("invalid_request","source must be one object { session_ref, agent_id? }.");Y(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!U(e.destination))throw new w("destination_invalid","destination must be one object { agent_id, conversation_id? }.");Y(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:z(e,t,200);return{mode:e.mode,idempotencyKey:Q(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:z(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:z(e.instruction,"instruction",c.EXCHANGE_LIMITS.instructionChars)}}function eh(e,n,r){let s=et(n.sessionRef);if(!s||null!==n.sourceAgentId&&n.sourceAgentId!==s.agent_id)throw v.session();if(!I(e,s.agent_id,"exchanges:create"))throw E("session");if("ask"===n.mode&&(null!==n.destinationAgentId||null!==n.destinationConversationId))throw new w("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===n.mode){if(null===n.destinationAgentId)throw new w("destination_invalid","A Continue names destination.agent_id.");if(!t.bots.getById(n.destinationAgentId))throw v.agent();if(!I(e,n.destinationAgentId,"exchanges:create"))throw E("agent")}let a=e.principal,o=`${_.EXCHANGE_KEY_PREFIX}${n.idempotencyKey}`,{exchange:d,created:c}=en(()=>{let e=Date.now(),t=Z(a,o),i=n.originConversationId??t?.origin_conversation_id??ee(a,s.agent_id,e),r="continue"!==n.mode?null:n.destinationConversationId??t?.destination_conversation_id??ee(a,n.destinationAgentId,e);return{input:{requester:a,serviceGrant:!0,idempotencyKey:o,mode:n.mode,originConversationId:i,sourceAgentId:s.agent_id,sessionRef:s.id,destinationAgentId:n.destinationAgentId,destinationConversationId:r,instruction:n.instruction,now:e}}},r),l=(0,i.dispatchExchange)(d.id);return{exchange:el(e,d.id),created:c,dispatched:l}}function ef(e){try{return(0,u.cancelReasonFromBody)(e)}catch(e){if(e instanceof u.ExchangeError)throw S(e);throw e}}async function em(e,t,n,r){let s=ea(e,t,"exchanges:create");try{let{replayed:t}=await (0,i.cancelExchangeCommand)(s.id,e.principal,n,r);return{exchange:el(e,s.id),replayed:t}}catch(e){if(e instanceof u.ExchangeError)throw S(e);throw e}}let ey=e=>"resume"===e?"sessions:resume":"sessions:message";function ew(e){if(e instanceof r.PinError){if("session_not_found"===e.code)throw v.session();if("agent_not_found"===e.code)throw v.agent();if("pin_not_found"===e.code)throw v.pin();if("conversation_not_found"===e.code)throw v.conversation();throw new w(e.code,e.message)}if(e instanceof u.ExchangeError)throw S(e);throw e}function ev(e,t){let n;try{n=(0,r.requirePin)(e.principal,t)}catch(e){ew(e)}if(!I(e,n.agent_id,ey(n.action)))throw E("pin");return n}function eE(e){return(0,g.serviceRedactor)().deep((0,r.pinView)(e))}function eS(e,t){return ei(e,t)}function eb(e,t){if(!U(e))throw new w("invalid_request","The body must be a JSON object.");if(Y(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:z(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:Q(e,t)}}async function eR(e,t,n,i){k(e,t,"sessions:message");try{let s=await (0,r.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:eE(s.pin),turn:(0,g.serviceRedactor)().deep(s.turn),resolution:s.resolution,replayed:s.replayed},settled:s.settled}}catch(e){ew(e)}}async function eI(e,t,n,i){let s=(0,r.sessionOwner)(t);if(!s)throw v.session();let a=ey(n.action);if(i.onTarget({agentId:s,sessionRef:t,capability:a,action:"resume"===n.action?"pins.resume":"pins.ask"}),!I(e,s,a))throw E("session");n.replacePinRef&&ev(e,n.replacePinRef);try{let{pin:s,created:a,replaced:o}=await (0,r.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:eE(s),replaced_pin_ref:o?.id??null,replayed:!a}}catch(e){ew(e)}}async function ek(e,t,n,i){let s=ev(e,t);i.onTarget({agentId:s.agent_id,sessionRef:s.session_ref,capability:ey(s.action),action:"pins.send"});try{let t=await (0,r.sendPinTurn)({requester:e.principal,pinRef:s.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:eE(t.pin),turn:(0,g.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){ew(e)}}async function ex(e,t,n){let i=ev(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ey(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,r.readPin)(e.principal,i.id);return{pin:eE(t),turns:(0,g.serviceRedactor)().deep(n)}}catch(e){ew(e)}}function eA(e,t,n){let i=ev(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ey(i.action),action:"pins.detach"});try{let{pin:t,replayed:s}=(0,r.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:eE(t),replayed:s}}catch(e){ew(e)}}let eC=["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"],eT=[...new Set([...J,...eC])];function eq(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(eT.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 eN(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 eO(e,t){if(!U(e))throw new w("invalid_request","The body must be a JSON object.");if(eq(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!U(e.audience))throw new w("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(eq(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:eN(e.ttl_seconds,"ttl_seconds"),maxTurns:eN(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:z(e.agent_id,"agent_id",200),idempotencyKey:Q(e,t)}}function eP(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(!U(t))throw new w("invalid_request","The body must be empty or a JSON object.");eq(t,["idempotency_key"],""),void 0!==t.idempotency_key&&z(t.idempotency_key,"idempotency_key",160)}}let eL=["session_ref","state","cursor","limit"],eK=["active","expired","revoked"];function eM(e){for(let t of e)if(!eL.includes(t)){if(eT.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.`)}}function e$(e){if(e instanceof f.ShareError){if("session_not_found"===e.code)throw v.session();if("share_not_found"===e.code)throw v.share();throw new w(e.code,e.message)}ew(e)}function eD(e,t){let n=(0,f.shareRow)(t);if(!n)throw v.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 eF(e,t=(0,g.serviceRedactor)()){return t.deep((0,f.shareView)(e))}async function eB(e,t,n,i){let s=(0,r.sessionOwner)(t);if(i.onTarget({agentId:s,sessionRef:t}),!s)throw v.session();if(!I(e,s,"shares:create"))throw E("session");if(null!==n.agentId&&n.agentId!==s)throw v.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:eF(r),replayed:!s}}catch(e){e$(e)}}function eG(e,t,n){let i=eD(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:eF(i)}}function eH(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&&!eK.includes(t.state))throw new w("invalid_request","state must be active, expired, or revoked.");let n=(0,g.serviceRedactor)(),i=(0,f.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>I(e,t.agent_id,"shares:create")).map(e=>eF(e,n)).filter(e=>null===t.state||e.state===t.state);return N(`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)}function eW(e,t,n){let i=eD(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:eF(e),replayed:t}}catch(e){e$(e)}}let ej=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];function eX(e,t){if(U(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 U(e)&&eq(e,ej,""),eO(e,t)}function eV(e){if(e.kind!==s.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==s.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.")}function eJ(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})}async function eU(e,t,n,i){if(i.onTarget({agentId:t.agentId,sessionRef:t.sessionRef}),null!==n.agentId&&n.agentId!==t.agentId)throw v.session();try{var r,s;let{share:o,created:d}=await (0,f.createShare)({creator:e.principal,sessionRef:t.sessionRef,agentId:t.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:(r=t.sessionRef,s=n.idempotencyKey,`current:${(0,a.createHash)("sha256").update(r).digest("hex").slice(0,24)}:${s}`),createdVia:"current_session",onCommit:()=>i.onCommit()});return{share:eF(o),replayed:!d}}catch(e){e$(e)}}e.s(["AUTHORITY_FIELDS",0,J,"MESSAGE_CONTENT_LIMIT",0,B,"PAGE_LIMITS",0,x,"SHARE_SELECTOR_FIELDS",0,eC,"ServiceApiError",0,w,"cancelServiceExchange",0,em,"capabilitiesView",0,O,"checkShareListParams",0,eM,"createCurrentSessionShare",0,eU,"createServiceExchange",0,eh,"createServiceShare",0,eB,"detachServicePin",0,eA,"getServiceAgent",0,K,"getServiceConversation",0,V,"getServiceExchange",0,e_,"getServiceSession",0,F,"getServiceShare",0,eG,"holds",0,I,"listServiceAgents",0,L,"listServiceConversations",0,X,"listServiceExchanges",0,eu,"listServiceSessions",0,D,"listServiceShares",0,eH,"messageServiceAgent",0,eR,"parseAgentMessageBody",0,eS,"parseCancelBody",0,ef,"parseLimit",0,q,"parsePinBody",0,eb,"parseServiceExchangeBody",0,ep,"parseSessionMessageBody",0,ei,"parseShareCreateBody",0,eO,"parseShareCurrentBody",0,eX,"parseShareRevokeBody",0,eP,"pinServiceSession",0,eI,"readServicePin",0,ex,"requireShareCurrentCaller",0,eV,"revokeServiceShare",0,eW,"sendServicePinMessage",0,ek,"sendServiceSessionMessage",0,er,"serviceContext",0,R,"sessionContextError",0,eJ,"warmServiceAgent",0,$],9501);let eY="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",ez=new Map;async function eQ(e){let t=await eZ(e);try{return JSON.parse(t)}catch{throw new w("invalid_request","The body must be a JSON object.")}}async function eZ(e){let t=new w("payload_too_large","The request body is too large."),n=e.headers.get("content-length");if(null!==n&&!(/^\d+$/.test(n.trim())&&65536>=Number(n)))throw t;if(!e.body)return"";let i=e.body.getReader(),r=[],s=0;for(;;){let{done:e,value:n}=await i.read();if(e)break;if((s+=n.byteLength)>65536)throw await i.cancel().catch(()=>{}),t;r.push(n)}return Buffer.concat(r).toString("utf8")}function e0(e,t,n,i={}){return Response.json({error:{code:t,message:n}},{status:e,headers:i})}let e4=(e,t=200)=>({status:t,body:e});function e2(e,t,n,i={},r,s,a){return{status:e,body:{error:{code:t,message:n,...r?{fields:r}:{},...a?{reason:a}:{},...s?{recovery:s}:{}}},headers:i}}async function e1(e,n,i,r){let a,o,d={kind:n.targetKind,targetRef:n.targetRef??null,agentId:n.agentId??null},c=(i,r)=>t.serviceAudit.append({principal:e,operation:d.operation??n.operation,capability:d.capability??n.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:i,code:r}),l=!1,u=null;try{if("service"!==e.kind)throw new w("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&n.capability!==e9)throw new w("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let n=`${e.kind}:${e.id}`,i=(ez.get(n)??[]).filter(e=>e>t-6e4),r=function(){let e=process.env[eY];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${eY} must be a positive integer; using 120.`),120)}();return i.length>=r?(ez.set(n,i),Math.max(1,Math.ceil((i[i.length-r]+6e4-t)/1e3))):(i.push(t),ez.set(n,i),null)}(e);if(null!==t)u="rate_limited",o="denied",a=e2(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=R(e);r?.(t),a=await i(t,d,()=>{c("allowed",null),l=!0}),o="allowed"}}catch(e){e instanceof w?(o=e.denied?"denied":"rejected",u=e.notGranted?"not_granted":e.code,a=e2(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),o="error",u="internal_error",a=e2(500,"internal_error","The request could not be processed."))}if(l&&"allowed"===o)return a;try{c(o,u)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),e2(500,"internal_error","The request could not be processed.")}return a}let e9="shares:current";async function e3(e,t){let r;try{r=await (0,n.authenticate)(e)}catch(e){if(e instanceof i.AgentApiError)return e0(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),e0(500,"internal_error","The request could not be processed.")}let s=await t(r);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function e6(e){let n=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return n?.agent_id??null}function e5(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 e8(e,t,n){return{onTarget:t=>{n&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function e7(e){if(e.length>200)return null;let n=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return n?.source_agent_id??null}let te={capabilities:(e,t)=>e1(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>e4(O(e)),t),listAgents:(e,t,n)=>e1(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>e4(L(e,{cursor:t.cursor,limit:q(t.limit)})),n),getAgent:(e,t,n)=>e1(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>e4(K(e,t)),n),listSessions:(e,t,n,i)=>e1(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await $(e,t),e4(D(e,t,{cursor:n.cursor,limit:q(n.limit),status:n.status}))),i),getSession:(e,t,n,i)=>e1(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:n,agentId:t},async e=>(await $(e,t),e4(F(e,t,n))),i),listConversations:(e,t,n,i)=>e1(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>e4(X(e,t,{cursor:n.cursor,limit:q(n.limit)})),i),getConversation:(e,t,n,i,r)=>e1(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:n,agentId:t},e=>e4(V(e,t,n,{cursor:i.cursor,limit:q(i.limit,x.messagesDefault,x.messagesMax)})),r),sendSessionMessage:(e,t,n,i,r)=>e1(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,r,s)=>{t.length<=200&&(r.agentId=e6(t));let{accepted:a}=er(e,t,ei(await n(),i),e=>{r.agentId=e.source_agent_id,s()});return e4(a,a.replayed?200:202)},r),listExchanges:(e,t,n)=>e1(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>e4(eu(e,{cursor:t.cursor,limit:q(t.limit)})),n),createExchange:(e,t,n,i)=>e1(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,i,r)=>{let s,a,o=await t();Object.assign(i,"string"!=typeof(a=(s=o&&"object"==typeof o?o.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===a.length?{}:{targetRef:a,agentId:a.length<=200?e6(a):null});let{exchange:d,created:c}=eh(e,ep(o,n),e=>{i.kind="exchange",i.targetRef=e.id,i.agentId=e.source_agent_id,r()});return e4({exchange:d,replayed:!c},c?201:200)},i),getExchange:(e,t,n)=>e1(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,n)=>{n.agentId=e7(t);let i=e_(e,t);return n.agentId=i.source.agent_id,e4(i)},n),cancelExchange:(e,t,n,i)=>e1(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,i,r)=>{i.agentId=e7(t);let s=await n();return e4(await em(e,t,s,e=>{i.agentId=e.source_agent_id,r()}))},i),messageAgent:(e,t,n,i,r)=>e1(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,r,s)=>{let a=eS(await n(),i),{body:o}=await eR(e,t,a,e5(r,s));return e4(o,o.replayed?200:202)},r),pinSession:(e,t,n,i,r)=>e1(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,r,s)=>{let a=eb(await n(),i),o=await eI(e,t,a,e5(r,s));return e4(o,o.replayed?200:201)},r),readPin:(e,t,n)=>e1(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,n)=>e4(await ex(e,t,e5(n,()=>{}))),n),sendToPin:(e,t,n,i,r)=>e1(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,r,s)=>{let a=eS(await n(),i),{body:o}=await ek(e,t,a,e5(r,s));return e4(o,o.replayed?200:202)},r),detachPin:(e,t,n)=>e1(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,n,i)=>e4(eA(e,t,e5(n,i))),n),createShare:(e,t,n,i,s)=>e1(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,a)=>{t.length<=200&&(s.agentId=(0,r.sessionOwner)(t));let o=eO(await n(),i),d=await eB(e,t,o,e8(s,a,!1));return e4(d,d.replayed?200:201)},s),getShare:(e,t,n)=>e1(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,n)=>e4(eG(e,t,e8(n,()=>{},!1))),n),listShares:(e,t,n)=>e1(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,n)=>(eM(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(n.agentId=(0,r.sessionOwner)(t.sessionRef)),e4(eH(e,{cursor:t.cursor,limit:q(t.limit),sessionRef:t.sessionRef,state:t.state}))),n),revokeShare:(e,t,n,i)=>e1(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,i,r)=>(eP(await n()),e4(eW(e,t,e8(i,r,!1)))),i),shareCurrent:(e,t,n,i,r)=>e1(e,{operation:"shares.create",capability:e9,targetKind:"session"},async(e,r,a)=>{let o=eX(await n(),i);eV(e.principal);let d=(0,s.resolveSessionContext)(t);if(!d.ok)throw eJ(d);let c=await eU(e,d,o,e8(r,a,!0));return e4(c,c.replayed?200:201)},r)};function tt(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 tn(e){let t=(0,s.sessionContextHeader)(e.headers),n=e.headers.get("idempotency-key"),i=i=>te.shareCurrent(i,t,()=>eQ(e),n);if(null===e.headers.get("authorization")){let e=await i(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return e3(e,i)}e.s(["handleCancelExchange",0,function(e,t){return e3(e,n=>te.cancelExchange(n,t,async()=>ef(await eZ(e))))},"handleCreateExchange",0,function(e){return e3(e,t=>te.createExchange(t,()=>eQ(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return e3(e,n=>te.createShare(n,t,()=>eQ(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return e3(e,e=>te.detachPin(e,t))},"handleGetAgent",0,function(e,t){return e3(e,e=>te.getAgent(e,t))},"handleGetCapabilities",0,function(e){return e3(e,e=>te.capabilities(e))},"handleGetConversation",0,function(e,t,n){return e3(e,i=>te.getConversation(i,t,n,tt(e)))},"handleGetExchange",0,function(e,t){return e3(e,e=>te.getExchange(e,t))},"handleGetSession",0,function(e,t,n){return e3(e,e=>te.getSession(e,t,n))},"handleGetShare",0,function(e,t){return e3(e,e=>te.getShare(e,t))},"handleListAgents",0,function(e){return e3(e,t=>te.listAgents(t,tt(e)))},"handleListConversations",0,function(e,t){return e3(e,n=>te.listConversations(n,t,tt(e)))},"handleListExchanges",0,function(e){return e3(e,t=>te.listExchanges(t,tt(e)))},"handleListSessions",0,function(e,t){let n=tt(e);return e3(e,e=>te.listSessions(e,t,{cursor:n.cursor,limit:n.limit,status:n.get("status")}))},"handleListShares",0,function(e){let t=tt(e);return e3(e,e=>te.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 e3(e,n=>te.messageAgent(n,t,()=>eQ(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return e3(e,n=>te.pinSession(n,t,()=>eQ(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return e3(e,e=>te.readPin(e,t))},"handleRevokeShare",0,function(e,t){return e3(e,n=>te.revokeShare(n,t,()=>eZ(e)))},"handleSendSessionMessage",0,function(e,t){return e3(e,n=>te.sendSessionMessage(n,t,()=>eQ(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return e3(e,n=>te.sendToPin(n,t,()=>eQ(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,tn,"serviceOperations",0,te],69936)}];
23
+ `).get(d.kind,d.id,o.id),s=n?.origin_conversation_id??i?.origin_conversation_id??Q(d,o.agent_id,e);return{input:{requester:d,serviceGrant:!0,idempotencyKey:c,mode:"ask",originConversationId:s,sourceAgentId:o.agent_id,sessionRef:o.id,instruction:r.content,now:e},afterCreate:n=>{t.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,a.randomUUID)(),n.origin_conversation_id,"user",d.id,d.kind,n.source_request_id,r.content,e)}}},s),_=(0,i.dispatchExchange)(l.id),p=l.source_request_id?t.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(l.source_request_id):void 0,h=t.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(l.origin_conversation_id,l.source_request_id,d.kind);return{accepted:{session_ref:o.id,agent_id:o.agent_id,exchange_id:l.id,request_id:l.source_request_id,conversation_id:l.origin_conversation_id,message_id:h?.id??null,state:p?(0,i.apiStateOf)(p.state):"accepted",replayed:!u},dispatched:_}}function ei(e,t,n){return t.requester_kind===e.principal.kind&&t.requester_id===e.principal.id&&k(e,t.source_agent_id,n)&&(null===t.destination_agent_id||k(e,t.destination_agent_id,n))}function er(e,t,n){let r=i.exchanges.get(t);if(!r)throw E.exchange();if(!ei(e,r,n))throw S("exchange");return r}let es=e=>e.idempotency_key.startsWith(g.MESSAGE_KEY_PREFIX)?"session_message":"exchange";function ea(e,t){let n=t.idempotency_key.startsWith(g.MESSAGE_KEY_PREFIX)?t.idempotency_key.slice(g.MESSAGE_KEY_PREFIX.length):t.idempotency_key.startsWith(g.EXCHANGE_KEY_PREFIX)?t.idempotency_key.slice(g.EXCHANGE_KEY_PREFIX.length):t.idempotency_key;return(0,p.serviceRedactor)().deep({...e,kind:es(t),idempotency_key:n})}function eo(e){return{id:e.id,kind:es(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 ed(e,t){let n=i.exchanges.require(t);return ei(e,n,"exchanges:read")?ea((0,i.getExchangeView)(t),n):eo(n)}function ec(e,n){let i=t.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>ei(e,t,"exchanges:read")).map(eo);return T(`exchanges:${e.principal.id}`,i,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),n.cursor,n.limit)}function el(e,t){let n=er(e,t,"exchanges:read");return ea((0,i.getExchangeView)(n.id),n)}let eu=["exchange_id","parent_exchange_id"];function e_(e,t){if(!V(e))throw new v("invalid_request","The body must be a JSON object.");if(eu.some(t=>t in e))throw new v("recursive_exchange","An exchange cannot be started from another exchange.");if(J(e,["mode","idempotency_key","origin_conversation_id","source","destination","instruction"],""),"ask"!==e.mode&&"continue"!==e.mode)throw new v("invalid_request",'mode must be "ask" or "continue".');if(!V(e.source))throw new v("invalid_request","source must be one object { session_ref, agent_id? }.");J(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!V(e.destination))throw new v("destination_invalid","destination must be one object { agent_id, conversation_id? }.");J(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:U(e,t,200);return{mode:e.mode,idempotencyKey:Y(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:U(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:U(e.instruction,"instruction",l.EXCHANGE_LIMITS.instructionChars)}}function eg(e,n,r){let s=Z(n.sessionRef);if(!s||null!==n.sourceAgentId&&n.sourceAgentId!==s.agent_id)throw E.session();if(!k(e,s.agent_id,"exchanges:create"))throw S("session");if("ask"===n.mode&&(null!==n.destinationAgentId||null!==n.destinationConversationId))throw new v("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===n.mode){if(null===n.destinationAgentId)throw new v("destination_invalid","A Continue names destination.agent_id.");if(!t.bots.getById(n.destinationAgentId))throw E.agent();if(!k(e,n.destinationAgentId,"exchanges:create"))throw S("agent")}let a=e.principal,o=`${g.EXCHANGE_KEY_PREFIX}${n.idempotencyKey}`,{exchange:d,created:c}=ee(()=>{let e=Date.now(),t=z(a,o),i=n.originConversationId??t?.origin_conversation_id??Q(a,s.agent_id,e),r="continue"!==n.mode?null:n.destinationConversationId??t?.destination_conversation_id??Q(a,n.destinationAgentId,e);return{input:{requester:a,serviceGrant:!0,idempotencyKey:o,mode:n.mode,originConversationId:i,sourceAgentId:s.agent_id,sessionRef:s.id,destinationAgentId:n.destinationAgentId,destinationConversationId:r,instruction:n.instruction,now:e}}},r),l=(0,i.dispatchExchange)(d.id);return{exchange:ed(e,d.id),created:c,dispatched:l}}function ep(e){try{return(0,_.cancelReasonFromBody)(e)}catch(e){if(e instanceof _.ExchangeError)throw b(e);throw e}}async function eh(e,t,n,r){let s=er(e,t,"exchanges:create");try{let{replayed:t}=await (0,i.cancelExchangeCommand)(s.id,e.principal,n,r);return{exchange:ed(e,s.id),replayed:t}}catch(e){if(e instanceof _.ExchangeError)throw b(e);throw e}}let ef=e=>"resume"===e?"sessions:resume":"sessions:message";function em(e){if(e instanceof r.PinError){if("session_not_found"===e.code)throw E.session();if("agent_not_found"===e.code)throw E.agent();if("pin_not_found"===e.code)throw E.pin();if("conversation_not_found"===e.code)throw E.conversation();throw new v(e.code,e.message)}if(e instanceof _.ExchangeError)throw b(e);throw e}function ey(e,t){let n;try{n=(0,r.requirePin)(e.principal,t)}catch(e){em(e)}if(!k(e,n.agent_id,ef(n.action)))throw S("pin");return n}function ew(e){return(0,p.serviceRedactor)().deep((0,r.pinView)(e))}function ev(e,t){return et(e,t)}function eE(e,t){if(!V(e))throw new v("invalid_request","The body must be a JSON object.");if(J(e,["action","approve_write","replace_pin_ref","idempotency_key"],""),"ask"!==e.action&&"resume"!==e.action)throw new v("invalid_request",'action must be "ask" or "resume".');if(void 0!==e.approve_write&&"boolean"!=typeof e.approve_write)throw new v("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:U(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:Y(e,t)}}async function eS(e,t,n,i){A(e,t,"sessions:message");try{let s=await (0,r.messageAgent)({requester:e.principal,agentId:t,content:n.content,idempotencyKey:n.idempotencyKey,mayStart:k(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:ew(s.pin),turn:(0,p.serviceRedactor)().deep(s.turn),resolution:s.resolution,replayed:s.replayed},settled:s.settled}}catch(e){em(e)}}async function eb(e,t,n,i){let s=(0,r.sessionOwner)(t);if(!s)throw E.session();let a=ef(n.action);if(i.onTarget({agentId:s,sessionRef:t,capability:a,action:"resume"===n.action?"pins.resume":"pins.ask"}),!k(e,s,a))throw S("session");n.replacePinRef&&ey(e,n.replacePinRef);try{let{pin:s,created:a,replaced:o}=await (0,r.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:ew(s),replaced_pin_ref:o?.id??null,replayed:!a}}catch(e){em(e)}}async function eR(e,t,n,i){let s=ey(e,t);i.onTarget({agentId:s.agent_id,sessionRef:s.session_ref,capability:ef(s.action),action:"pins.send"});try{let t=await (0,r.sendPinTurn)({requester:e.principal,pinRef:s.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:ew(t.pin),turn:(0,p.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){em(e)}}async function eI(e,t,n){let i=ey(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ef(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,r.readPin)(e.principal,i.id);return{pin:ew(t),turns:(0,p.serviceRedactor)().deep(n)}}catch(e){em(e)}}function ek(e,t,n){let i=ey(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ef(i.action),action:"pins.detach"});try{let{pin:t,replayed:s}=(0,r.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:ew(t),replayed:s}}catch(e){em(e)}}let eA=["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"],ex=[...new Set([...X,...eA])];function eC(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(ex.includes(i))throw new v("authority_not_allowed",`${n}${i} cannot select or describe a session; name it by session_ref only.`);throw new v("invalid_request",`${n}${i} is not a field of this request.`)}}function eT(e,t){if(null==e)return null;if("number"!=typeof e||!Number.isInteger(e))throw new v("invalid_request",`${t} must be an integer.`);return e}function eq(e,t){if(!V(e))throw new v("invalid_request","The body must be a JSON object.");if(eC(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!V(e.audience))throw new v("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(eC(e.audience,["kind","team_id","channel_id"],"audience."),!(0,m.isSlackAudience)(e.audience))throw new v("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:eT(e.ttl_seconds,"ttl_seconds"),maxTurns:eT(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:U(e.agent_id,"agent_id",200),idempotencyKey:Y(e,t)}}function eN(e){let t;if(""!==e.trim()){try{t=JSON.parse(e)}catch{throw new v("invalid_request","The body must be empty or a JSON object.")}if(!V(t))throw new v("invalid_request","The body must be empty or a JSON object.");eC(t,["idempotency_key"],""),void 0!==t.idempotency_key&&U(t.idempotency_key,"idempotency_key",160)}}let eO=["session_ref","state","cursor","limit"],eP=["active","expired","revoked"];function eL(e){for(let t of e)if(!eO.includes(t)){if(ex.includes(t))throw new v("authority_not_allowed",`${t} cannot select a session; filter by session_ref only.`);throw new v("invalid_request",`${t} is not a parameter of this list.`)}}function eK(e){if(e instanceof m.ShareError){if("session_not_found"===e.code)throw E.session();if("share_not_found"===e.code)throw E.share();throw new v(e.code,e.message)}em(e)}function eM(e,t){let n=(0,m.shareRow)(t);if(!n)throw E.share();if(!(n.creator_kind===e.principal.kind&&n.creator_id===e.principal.id&&k(e,n.agent_id,"shares:create")))throw S("share");return n}function e$(e,t=(0,p.serviceRedactor)()){return t.deep((0,m.shareView)(e))}async function eD(e,t,n,i){let s=(0,r.sessionOwner)(t);if(i.onTarget({agentId:s,sessionRef:t}),!s)throw E.session();if(!k(e,s,"shares:create"))throw S("session");if(null!==n.agentId&&n.agentId!==s)throw E.session();try{let{share:r,created:s}=await (0,m.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:e$(r),replayed:!s}}catch(e){eK(e)}}function eF(e,t,n){let i=eM(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:e$(i)}}function eG(e,t){if(null!==t.sessionRef&&(""===t.sessionRef.trim()||t.sessionRef.length>200))throw new v("invalid_request","session_ref must be one session reference.");if(null!==t.state&&!eP.includes(t.state))throw new v("invalid_request","state must be active, expired, or revoked.");let n=(0,p.serviceRedactor)(),i=(0,m.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>k(e,t.agent_id,"shares:create")).map(e=>e$(e,n)).filter(e=>null===t.state||e.state===t.state);return T(`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)}function eB(e,t,n){let i=eM(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref});try{let{share:e,replayed:t}=(0,m.revokeShare)(i.id,{onCommit:()=>n.onCommit()});return{share:e$(e),replayed:t}}catch(e){eK(e)}}let eH=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];function eW(e,t){if(V(e)&&Object.prototype.hasOwnProperty.call(e,"session_ref"))throw new v("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 V(e)&&eC(e,eH,""),eq(e,t)}function ej(e){if(e.kind!==s.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==s.SESSION_CONTEXT_PRINCIPAL.id)throw new v("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.")}function eX(e){return new v("session_context_required","This caller has no exact session context; share a session explicitly by its session_ref (botmancers_list_sessions).",{reason:e.reason})}async function eV(e,t,n,i){if(i.onTarget({agentId:t.agentId,sessionRef:t.sessionRef}),null!==n.agentId&&n.agentId!==t.agentId)throw E.session();try{var r,s;let{share:o,created:d}=await (0,m.createShare)({creator:e.principal,sessionRef:t.sessionRef,agentId:t.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:(r=t.sessionRef,s=n.idempotencyKey,`current:${(0,a.createHash)("sha256").update(r).digest("hex").slice(0,24)}:${s}`),createdVia:"current_session",onCommit:()=>i.onCommit()});return{share:e$(o),replayed:!d}}catch(e){eK(e)}}e.s(["AUTHORITY_FIELDS",0,X,"MESSAGE_CONTENT_LIMIT",0,D,"PAGE_LIMITS",0,x,"SHARE_SELECTOR_FIELDS",0,eA,"ServiceApiError",0,v,"cancelServiceExchange",0,eh,"capabilitiesView",0,q,"checkShareListParams",0,eL,"createCurrentSessionShare",0,eV,"createServiceExchange",0,eg,"createServiceShare",0,eD,"detachServicePin",0,ek,"getServiceAgent",0,P,"getServiceConversation",0,j,"getServiceExchange",0,el,"getServiceSession",0,$,"getServiceShare",0,eF,"holds",0,k,"listServiceAgents",0,O,"listServiceConversations",0,W,"listServiceExchanges",0,ec,"listServiceSessions",0,M,"listServiceShares",0,eG,"messageServiceAgent",0,eS,"parseAgentMessageBody",0,ev,"parseCancelBody",0,ep,"parseLimit",0,C,"parsePinBody",0,eE,"parseServiceExchangeBody",0,e_,"parseSessionMessageBody",0,et,"parseShareCreateBody",0,eq,"parseShareCurrentBody",0,eW,"parseShareRevokeBody",0,eN,"pinServiceSession",0,eb,"readServicePin",0,eI,"requireShareCurrentCaller",0,ej,"revokeServiceShare",0,eB,"sendServicePinMessage",0,eR,"sendServiceSessionMessage",0,en,"serviceContext",0,I,"sessionContextError",0,eX,"warmServiceAgent",0,K],9501);let eJ="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",eU=new Map;async function eY(e){let t=await ez(e);try{return JSON.parse(t)}catch{throw new v("invalid_request","The body must be a JSON object.")}}async function ez(e){let t=new v("payload_too_large","The request body is too large."),n=e.headers.get("content-length");if(null!==n&&!(/^\d+$/.test(n.trim())&&65536>=Number(n)))throw t;if(!e.body)return"";let i=e.body.getReader(),r=[],s=0;for(;;){let{done:e,value:n}=await i.read();if(e)break;if((s+=n.byteLength)>65536)throw await i.cancel().catch(()=>{}),t;r.push(n)}return Buffer.concat(r).toString("utf8")}function eQ(e,t,n,i={}){return Response.json({error:{code:t,message:n}},{status:e,headers:i})}let eZ=(e,t=200)=>({status:t,body:e});function e0(e,t,n,i={},r,s,a){return{status:e,body:{error:{code:t,message:n,...r?{fields:r}:{},...a?{reason:a}:{},...s?{recovery:s}:{}}},headers:i}}async function e4(e,n,i,r){let a,o,d={kind:n.targetKind,targetRef:n.targetRef??null,agentId:n.agentId??null},c=(i,r)=>t.serviceAudit.append({principal:e,operation:d.operation??n.operation,capability:d.capability??n.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:i,code:r}),l=!1,u=null;try{if("service"!==e.kind)throw new v("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&n.capability!==e2)throw new v("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let n=`${e.kind}:${e.id}`,i=(eU.get(n)??[]).filter(e=>e>t-6e4),r=function(){let e=process.env[eJ];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${eJ} must be a positive integer; using 120.`),120)}();return i.length>=r?(eU.set(n,i),Math.max(1,Math.ceil((i[i.length-r]+6e4-t)/1e3))):(i.push(t),eU.set(n,i),null)}(e);if(null!==t)u="rate_limited",o="denied",a=e0(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=I(e);r?.(t),a=await i(t,d,()=>{c("allowed",null),l=!0}),o="allowed"}}catch(e){e instanceof v?(o=e.denied?"denied":"rejected",u=e.notGranted?"not_granted":e.code,a=e0(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),o="error",u="internal_error",a=e0(500,"internal_error","The request could not be processed."))}if(l&&"allowed"===o)return a;try{c(o,u)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),e0(500,"internal_error","The request could not be processed.")}return a}let e2="shares:current";async function e1(e,t){let r;try{r=await (0,n.authenticate)(e)}catch(e){if(e instanceof i.AgentApiError)return eQ(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),eQ(500,"internal_error","The request could not be processed.")}let s=await t(r);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function e9(e){let n=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return n?.agent_id??null}function e3(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 e6(e,t,n){return{onTarget:t=>{n&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function e5(e){if(e.length>200)return null;let n=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return n?.source_agent_id??null}let e8={capabilities:(e,t)=>e4(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>eZ(q(e)),t),listAgents:(e,t,n)=>e4(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>eZ(O(e,{cursor:t.cursor,limit:C(t.limit)})),n),getAgent:(e,t,n)=>e4(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>eZ(P(e,t)),n),listSessions:(e,t,n,i)=>e4(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await K(e,t),eZ(M(e,t,{cursor:n.cursor,limit:C(n.limit),status:n.status}))),i),getSession:(e,t,n,i)=>e4(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:n,agentId:t},async e=>(await K(e,t),eZ($(e,t,n))),i),listConversations:(e,t,n,i)=>e4(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>eZ(W(e,t,{cursor:n.cursor,limit:C(n.limit)})),i),getConversation:(e,t,n,i,r)=>e4(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:n,agentId:t},e=>eZ(j(e,t,n,{cursor:i.cursor,limit:C(i.limit,x.messagesDefault,x.messagesMax)})),r),sendSessionMessage:(e,t,n,i,r)=>e4(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,r,s)=>{t.length<=200&&(r.agentId=e9(t));let{accepted:a}=en(e,t,et(await n(),i),e=>{r.agentId=e.source_agent_id,s()});return eZ(a,a.replayed?200:202)},r),listExchanges:(e,t,n)=>e4(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>eZ(ec(e,{cursor:t.cursor,limit:C(t.limit)})),n),createExchange:(e,t,n,i)=>e4(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,i,r)=>{let s,a,o=await t();Object.assign(i,"string"!=typeof(a=(s=o&&"object"==typeof o?o.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===a.length?{}:{targetRef:a,agentId:a.length<=200?e9(a):null});let{exchange:d,created:c}=eg(e,e_(o,n),e=>{i.kind="exchange",i.targetRef=e.id,i.agentId=e.source_agent_id,r()});return eZ({exchange:d,replayed:!c},c?201:200)},i),getExchange:(e,t,n)=>e4(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,n)=>{n.agentId=e5(t);let i=el(e,t);return n.agentId=i.source.agent_id,eZ(i)},n),cancelExchange:(e,t,n,i)=>e4(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,i,r)=>{i.agentId=e5(t);let s=await n();return eZ(await eh(e,t,s,e=>{i.agentId=e.source_agent_id,r()}))},i),messageAgent:(e,t,n,i,r)=>e4(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,r,s)=>{let a=ev(await n(),i),{body:o}=await eS(e,t,a,e3(r,s));return eZ(o,o.replayed?200:202)},r),pinSession:(e,t,n,i,r)=>e4(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,r,s)=>{let a=eE(await n(),i),o=await eb(e,t,a,e3(r,s));return eZ(o,o.replayed?200:201)},r),readPin:(e,t,n)=>e4(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,n)=>eZ(await eI(e,t,e3(n,()=>{}))),n),sendToPin:(e,t,n,i,r)=>e4(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,r,s)=>{let a=ev(await n(),i),{body:o}=await eR(e,t,a,e3(r,s));return eZ(o,o.replayed?200:202)},r),detachPin:(e,t,n)=>e4(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,n,i)=>eZ(ek(e,t,e3(n,i))),n),createShare:(e,t,n,i,s)=>e4(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,a)=>{t.length<=200&&(s.agentId=(0,r.sessionOwner)(t));let o=eq(await n(),i),d=await eD(e,t,o,e6(s,a,!1));return eZ(d,d.replayed?200:201)},s),getShare:(e,t,n)=>e4(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,n)=>eZ(eF(e,t,e6(n,()=>{},!1))),n),listShares:(e,t,n)=>e4(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,n)=>(eL(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(n.agentId=(0,r.sessionOwner)(t.sessionRef)),eZ(eG(e,{cursor:t.cursor,limit:C(t.limit),sessionRef:t.sessionRef,state:t.state}))),n),revokeShare:(e,t,n,i)=>e4(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,i,r)=>(eN(await n()),eZ(eB(e,t,e6(i,r,!1)))),i),shareCurrent:(e,t,n,i,r)=>e4(e,{operation:"shares.create",capability:e2,targetKind:"session"},async(e,r,a)=>{let o=eW(await n(),i);ej(e.principal);let d=(0,s.resolveSessionContext)(t);if(!d.ok)throw eX(d);let c=await eV(e,d,o,e6(r,a,!0));return eZ(c,c.replayed?200:201)},r)};function e7(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 te(e){let t=(0,s.sessionContextHeader)(e.headers),n=e.headers.get("idempotency-key"),i=i=>e8.shareCurrent(i,t,()=>eY(e),n);if(null===e.headers.get("authorization")){let e=await i(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return e1(e,i)}e.s(["handleCancelExchange",0,function(e,t){return e1(e,n=>e8.cancelExchange(n,t,async()=>ep(await ez(e))))},"handleCreateExchange",0,function(e){return e1(e,t=>e8.createExchange(t,()=>eY(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return e1(e,n=>e8.createShare(n,t,()=>eY(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return e1(e,e=>e8.detachPin(e,t))},"handleGetAgent",0,function(e,t){return e1(e,e=>e8.getAgent(e,t))},"handleGetCapabilities",0,function(e){return e1(e,e=>e8.capabilities(e))},"handleGetConversation",0,function(e,t,n){return e1(e,i=>e8.getConversation(i,t,n,e7(e)))},"handleGetExchange",0,function(e,t){return e1(e,e=>e8.getExchange(e,t))},"handleGetSession",0,function(e,t,n){return e1(e,e=>e8.getSession(e,t,n))},"handleGetShare",0,function(e,t){return e1(e,e=>e8.getShare(e,t))},"handleListAgents",0,function(e){return e1(e,t=>e8.listAgents(t,e7(e)))},"handleListConversations",0,function(e,t){return e1(e,n=>e8.listConversations(n,t,e7(e)))},"handleListExchanges",0,function(e){return e1(e,t=>e8.listExchanges(t,e7(e)))},"handleListSessions",0,function(e,t){let n=e7(e);return e1(e,e=>e8.listSessions(e,t,{cursor:n.cursor,limit:n.limit,status:n.get("status")}))},"handleListShares",0,function(e){let t=e7(e);return e1(e,e=>e8.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 e1(e,n=>e8.messageAgent(n,t,()=>eY(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return e1(e,n=>e8.pinSession(n,t,()=>eY(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return e1(e,e=>e8.readPin(e,t))},"handleRevokeShare",0,function(e,t){return e1(e,n=>e8.revokeShare(n,t,()=>ez(e)))},"handleSendSessionMessage",0,function(e,t){return e1(e,n=>e8.sendSessionMessage(n,t,()=>eY(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return e1(e,n=>e8.sendToPin(n,t,()=>eY(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,te,"serviceOperations",0,e8],69936)}];
24
24
 
25
25
  //# sourceMappingURL=lib_service-api-http_ts_0xzqhny._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[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]})]})}])},63718,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(50944),f=a.i(27828);a.s(["default",0,function(){let a=String((0,e.useParams)().id??""),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)([]),[k,l]=(0,c.useState)([]),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(0),q=(0,c.useRef)(null);(0,c.useEffect)(()=>{q.current=new URLSearchParams(window.location.search).get("exchange")},[]),(0,c.useEffect)(()=>{if(!a)return;let b=!1,c=async()=>{try{let[c,d,e]=await Promise.all([fetch(`/api/conversations/${encodeURIComponent(a)}`,{cache:"no-store"}),fetch(`/api/conversations/${encodeURIComponent(a)}/messages`,{cache:"no-store"}),fetch(`/api/exchanges?conversation=${encodeURIComponent(a)}`,{cache:"no-store"})]);if(b)return;if(!c.ok)return void n(404===c.status?"This thread no longer exists.":"Could not load this thread.");let f=await c.json(),g=await d.json().catch(()=>null),i=await e.json().catch(()=>null);if(b)return;let k=f?.details??null,m=Array.isArray(k?.members)?k.members.map(a=>a?.name).filter(Boolean):[];h({label:k?.name?`Group ${k.name}`:"Group thread",members:m}),d.ok&&Array.isArray(g)&&j(g),e.ok&&Array.isArray(i?.exchanges)&&l(i.exchanges),n("")}catch{b||n("Could not load this thread.")}};c();let d=setInterval(c,2e3);return()=>{b=!0,clearInterval(d)}},[a,o]),(0,c.useEffect)(()=>{let a=q.current;if(!a)return;let b=document.getElementById(`exchange-${a}`);b&&(q.current=null,b.scrollIntoView({block:"center"}),b.focus({preventScroll:!0}))},[k]);let r=new Set,s=a=>(0,b.jsx)("li",{className:"msg-status",children:(0,b.jsx)(f.default,{summary:a,onChanged:()=>p(a=>a+1)})},`exchange-${a.id}`),t=a=>{let b=k.filter(b=>!r.has(b.id)&&b.created_at<a).sort((a,b)=>a.created_at-b.created_at||(a.id<b.id?-1:1));return b.forEach(a=>r.add(a.id)),b.map(s)};return(0,b.jsxs)("div",{className:"ledger-page group-thread-page",children:[(0,b.jsxs)("header",{className:"ledger-head",children:[(0,b.jsxs)("nav",{className:"group-thread-nav","aria-label":"Thread navigation",children:[(0,b.jsx)(d.default,{href:"/",className:"cfg-link ledger-back",children:"← Back to chat"}),(0,b.jsx)(d.default,{href:"/exchanges",className:"cfg-link ledger-back",children:"Agent Exchanges"})]}),(0,b.jsx)("h1",{className:"ledger-title",children:g?.label??"Group thread"}),g&&g.members.length>0?(0,b.jsxs)("p",{className:"ledger-sub",children:["With ",g.members.join(", ")]}):null]}),(0,b.jsx)("main",{className:"group-thread-main","aria-label":"Thread",children:m?(0,b.jsxs)("div",{className:"ledger-state",role:"alert",children:[(0,b.jsx)("p",{className:"delete-error",children:m}),(0,b.jsx)("button",{type:"button",className:"pin-word",onClick:()=>p(a=>a+1),children:"Retry"})]}):g?(0,b.jsxs)("ol",{className:"group-thread-list","aria-label":"Messages and exchanges",children:[i.map(a=>(0,b.jsxs)(c.Fragment,{children:[t(a.created_at),(0,b.jsxs)("li",{className:"user"===a.sender_type?"msg-you":"msg-bot",children:[(0,b.jsx)("div",{className:"user"===a.sender_type?"msg-name msg-name-you":"msg-name",children:"user"===a.sender_type?"You":a.sender_name||"Agent"}),(0,b.jsx)("div",{className:"msg-body group-thread-body",children:a.content.replace(/^\s*\[Message from [^\]]+\]\s*(?:\r?\n)?/,"").replace(/^\s+/,"")})]})]},a.id)),t(1/0),0===i.length&&0===k.length?(0,b.jsx)("li",{className:"ledger-state",children:"No messages in this thread yet."}):null]}):(0,b.jsx)("p",{className:"ledger-state",role:"status",children:"Loading thread…"})})]})}])},69789,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
2
+
3
+ //# sourceMappingURL=_00ysoah._.js.map
@@ -0,0 +1,3 @@
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)}];
2
+
3
+ //# sourceMappingURL=_14d-lxn._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[36391,5020,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d=[{id:"purple",label:"Purple",hex:"#7C3AED"},{id:"blue",label:"Blue",hex:"#2563EB"},{id:"teal",label:"Teal",hex:"#0D9488"},{id:"green",label:"Green",hex:"#16A34A"},{id:"amber",label:"Amber",hex:"#B45309"},{id:"orange",label:"Orange",hex:"#EA580C"},{id:"pink",label:"Pink",hex:"#DB2777"},{id:"slate",label:"Slate",hex:"#64748B"}],e=[{id:"dots",label:"Round dots"},{id:"sleepy",label:"Sleepy"},{id:"happy",label:"Happy arcs"},{id:"wide",label:"Wide ovals"}],f=[{id:"folded",label:"Folded arms"},{id:"reaching",label:"Reaching right"},{id:"waving",label:"Waving"}],g=[{id:"none",label:"None"},{id:"crown",label:"Crown"},{id:"glasses",label:"Glasses"},{id:"headset",label:"Headset"},{id:"hat",label:"Hat"},{id:"bow",label:"Bow"}],h={color:"purple",eyes:"dots",hands:"folded",accessory:"none"},i={...h,accessory:"crown"};function j(a,b){return"string"==typeof b&&a.some(a=>a.id===b)}function k(a){let b=j(d,a.avatar_color)?a.avatar_color:h.color,c=j(e,a.avatar_eyes)?a.avatar_eyes:h.eyes;return{color:b,eyes:c,hands:j(f,a.avatar_hands)?a.avatar_hands:h.hands,accessory:j(g,a.avatar_accessory)?a.avatar_accessory:"chief-of-staff"===String(a.name??"").trim().toLowerCase()?i.accessory:h.accessory}}let l=[{x:70,y:70.5,w:38,h:6},{x:70,y:82,w:38,h:6}];function m(a){return l.map(b=>`<rect x="${b.x}" y="${b.y}" width="${b.w}" height="${b.h}" rx="${b.h/2}" ${a}/>`).join("")}function n(a,b="static"){var c,e;let f,g,h=d.find(b=>b.id===a.color)?.hex??d[0].hex,i=String(b).replace(/[^A-Za-z0-9_-]/g,"")||"static",j=`avatar-knockout-${i}`,k=`fill="none" stroke="${h}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`,l=(c=a.hands,e=a.accessory,f=[],"reaching"===c&&f.push({x1:87.6,y1:69,x2:90.4,y2:86.5,w:8}),"waving"===c&&f.push({x1:35,y1:59,x2:28,y2:72,w:10}),"crown"===e&&f.push({x1:44,y1:30,x2:76,y2:30,w:9}),"hat"===e&&f.push({x1:38,y1:34,x2:82,y2:34,w:9}),"bow"===e&&f.push({x1:60,y1:28.5,x2:84,y2:28,w:10}),"headset"===e&&(f.push({x1:42,y1:24.5,x2:78,y2:24.5,w:10}),f.push({x1:33,y1:55,x2:37,y2:64,w:8}),f.push({x1:83,y1:55,x2:87,y2:64,w:8})),"glasses"===e&&(f.push({x1:29,y1:56,x2:34,y2:62,w:8}),f.push({x1:86,y1:62,x2:91,y2:56,w:8})),f).map(a=>`<line x1="${a.x1}" y1="${a.y1}" x2="${a.x2}" y2="${a.y2}" stroke="#000000" stroke-width="${a.w}" stroke-linecap="round"/>`).join(""),o=`avatar-arms-${i}`,p="reaching"===a.hands,q=p?`<mask id="${o}"><rect x="0" y="0" width="120" height="120" fill="#ffffff"/>${m('fill="#000000" stroke="#000000" stroke-width="7"')}</mask>`:"",r=function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"sleepy":return`<g data-avatar-layer="eyes" data-avatar-eyes="sleepy"><path d="M42 61 Q48 64 54 61" ${c}/><path d="M66 61 Q72 64 78 61" ${c}/></g>`;case"happy":return`<g data-avatar-layer="eyes" data-avatar-eyes="happy"><path d="M42 63 Q48 54 54 63" ${c}/><path d="M66 63 Q72 54 78 63" ${c}/></g>`;case"wide":return`<g data-avatar-layer="eyes" data-avatar-eyes="wide"><ellipse cx="48" cy="60" rx="5.5" ry="8" ${c}/><ellipse cx="72" cy="60" rx="5.5" ry="8" ${c}/></g>`;default:return`<g data-avatar-layer="eyes" data-avatar-eyes="dots"><circle cx="48" cy="60" r="3.5" ${c}/><circle cx="72" cy="60" r="3.5" ${c}/></g>`}}(a.eyes,h),s=function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"crown":return`<g data-avatar-layer="accessory" data-avatar-accessory="crown"><path d="M44 31 L46.5 14 L54 24 L60 10 L66 24 L73.5 14 L76 31 Z" ${c}/></g>`;case"glasses":return`<g data-avatar-layer="accessory" data-avatar-accessory="glasses"><circle cx="48" cy="60" r="9" ${c}/><circle cx="72" cy="60" r="9" ${c}/><path d="M57 60 Q60 57 63 60" ${c}/><path d="M39 59 L32 57" ${c}/><path d="M81 59 L88 57" ${c}/></g>`;case"headset":return`<g data-avatar-layer="accessory" data-avatar-accessory="headset"><path d="M36 62 Q34 24 60 24 Q86 24 84 62" ${c}/><rect x="79" y="54" width="10" height="17" rx="5" ${c}/><path d="M84 71 Q80 84 66 84" ${c}/></g>`;case"hat":return`<g data-avatar-layer="accessory" data-avatar-accessory="hat"><path d="M38 34 Q60 40 82 34" ${c}/><path d="M46 34 Q48 14 60 14 Q72 14 74 34" ${c}/></g>`;case"bow":return`<g data-avatar-layer="accessory" data-avatar-accessory="bow"><circle cx="79" cy="29" r="3.5" ${c}/><path d="M76 27 L62 18 Q60 26 66 32 Z" ${c}/><path d="M82 27 L95 19 Q97 27 91 32 Z" ${c}/></g>`;default:return'<g data-avatar-layer="accessory" data-avatar-accessory="none"></g>'}}(a.accessory,h);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" role="img" data-avatar-color="${a.color}" data-avatar-eyes="${a.eyes}" data-avatar-hands="${a.hands}" data-avatar-accessory="${a.accessory}"><mask id="${j}"><rect x="0" y="0" width="120" height="120" fill="#ffffff"/>${l}</mask>`+q+`<g data-avatar-layer="body" mask="url(#${j})">`+`<path d="M60 28 C75 28 84 39 85.5 56 L91 90 C92.5 98 87 102 79 102 L41 102 C33 102 27.5 98 29 90 L34.5 56 C36 39 45 28 60 28 Z" ${k}/>`+`<path d="M54 71 Q60 75.5 66 71" ${k}/>`+`<path data-avatar-brows="straight" d="${g="wide"===a.eyes?45:46,`M42 ${g} H54 M66 ${g} H78`}" fill="none" stroke="${h}" stroke-width="4.8" stroke-linecap="round"/>`+"</g>"+(p?`<g mask="url(#${o})">${r}</g>`:r)+function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"reaching":return'<g data-avatar-layer="hands" data-avatar-hands="reaching">'+m(c)+"</g>";case"waving":return`<g data-avatar-layer="hands" data-avatar-hands="waving"><path d="M32 68 Q24 60 22 48" ${c}/><circle cx="21" cy="41" r="5" ${c}/><path d="M11 36 Q9 46 12 54" ${c}/></g>`;default:return`<g data-avatar-layer="hands" data-avatar-hands="folded"><rect x="44" y="79" width="32" height="9" rx="4.5" ${c}/><rect x="46" y="90" width="28" height="9" rx="4.5" ${c}/></g>`}}(a.hands,h)+(p?`<g mask="url(#${o})">${s}</g>`:s)+"</svg>"}a.s(["AVATAR_ACCESSORIES",0,g,"AVATAR_COLORS",0,d,"AVATAR_EYES",0,e,"AVATAR_HANDS",0,f,"renderAvatarSvg",0,n,"resolveAvatar",0,k],5020),a.s(["default",0,function({bot:a,config:d,size:e=28,className:f,title:g}){let h=(0,c.useId)().replace(/[^A-Za-z0-9_-]/g,"")||"avatar",i=n(d??a?.avatar_config??k(a??{}),h).replace("<svg ",`<svg width="${e}" height="${e}" `);return(0,b.jsx)("span",{className:f??"bot-avatar",style:{display:"inline-flex",width:e,height:e,flex:"none"},title:g,"aria-label":g??"Agent avatar",role:"img",dangerouslySetInnerHTML:{__html:i}})}],36391)},60193,35832,23464,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d="Permanently removes each agent with its direct conversation, messages, queue rows, approvals, launch snapshots, memories, one-shots, routines, and pending questions. There is no undo.",e="Skill files, working directories, Hermes profiles, and imported source files stay on disk.";function f(a){return"chief"===a?"Chief of Staff cannot be deleted.":"Working now — stop it or let it finish before deleting."}function g(a){return 1===a?"Delete agent":`Delete ${a} agents`}a.s(["DELETE_KEEPS_COPY",0,e,"DELETE_REMOVES_COPY",0,d,"blockedReasonCopy",0,f,"deleteConfirmLabel",0,g,"deletedStatusLine",0,function(a){return 1===a?"Deleted 1 agent.":`Deleted ${a} agents.`}],35832),a.s(["default",0,function({ids:a,onCancel:h,onDeleted:i}){let j=(0,c.useId)(),[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(!1),s=(0,c.useRef)(null),t=(0,c.useRef)(null),u=a.join("\n");(0,c.useEffect)(()=>{let a=!1;return fetch("/api/bots/delete-preview",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:u.split("\n")})}).then(async b=>{let c=await b.json().catch(()=>null);if(!a){if(!b.ok)return void n("string"==typeof c?.error?c.error:"Could not load the deletion preview.");l(c)}}).catch(()=>{a||n("Could not load the deletion preview.")}),()=>{a=!0}},[u]),(0,c.useEffect)(()=>{s.current?.focus()},[]),(0,c.useEffect)(()=>{let a=a=>{"Escape"===a.key&&(a.stopPropagation(),q||h())};return document.addEventListener("keydown",a,!0),()=>document.removeEventListener("keydown",a,!0)},[q,h]);let v=a.length,w=!k||k.blocked.length>0||k.missing.length>0,x=async()=>{if(!q&&!w){r(!0),p("");try{let b=await fetch("/api/bots",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a})}),c=await b.json().catch(()=>null);if(!b.ok){p("string"==typeof c?.error&&c.error?c.error:`Delete failed (${b.status}).`),r(!1),requestAnimationFrame(()=>s.current?.focus());return}i(Array.isArray(c?.deleted)?c.deleted:[])}catch{p("Delete failed: the server did not respond."),r(!1),requestAnimationFrame(()=>s.current?.focus())}}};return(0,b.jsx)("div",{className:"modal-scrim delete-scrim",onKeyDown:a=>{if("Tab"!==a.key||!t.current)return;let b=Array.from(t.current.querySelectorAll("button:not(:disabled)"));if(0===b.length)return;let c=b[0],d=b[b.length-1];a.shiftKey&&document.activeElement===c?(a.preventDefault(),d.focus()):a.shiftKey||document.activeElement!==d||(a.preventDefault(),c.focus())},children:(0,b.jsxs)("div",{ref:t,className:"delete-card",role:"alertdialog","aria-modal":"true","aria-labelledby":j,"data-testid":"delete-agents-dialog",children:[(0,b.jsx)("h2",{id:j,className:"delete-title",children:1===v?"Delete this agent permanently?":`Delete ${v} agents permanently?`}),m?(0,b.jsx)("p",{className:"delete-error",role:"alert",children:m}):null,k||m?null:(0,b.jsx)("p",{className:"delete-copy",children:"Checking what will be removed…"}),k?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("ul",{className:"delete-names","aria-label":"Agents to delete",children:[k.agents.map(a=>(0,b.jsx)("li",{children:a.name},a.id)),k.missing.map(a=>(0,b.jsxs)("li",{children:["Not found: ",a]},a))]}),k.blocked.length>0?(0,b.jsxs)("div",{className:"delete-blocked",role:"alert",children:[(0,b.jsx)("p",{children:"Nothing can be deleted until these are deselected:"}),(0,b.jsx)("ul",{children:k.blocked.map(a=>(0,b.jsxs)("li",{children:[a.name," — ",f(a.reason)]},a.id))})]}):null,(0,b.jsx)("p",{className:"delete-copy",children:d}),(0,b.jsx)("p",{className:"delete-copy delete-keeps",children:e})]}):null,o?(0,b.jsx)("p",{className:"delete-error",role:"alert",children:o}):null,(0,b.jsxs)("div",{className:"form-actions delete-actions",children:[(0,b.jsx)("button",{ref:s,type:"button",className:"cancel-btn",onClick:h,disabled:q,children:"Cancel"}),(0,b.jsx)("button",{type:"button",className:"delete-btn",onClick:()=>{x()},disabled:q||w,children:q?"Deleting…":g(v)})]})]})})}],60193);var h=a.i(65221),i=a.i(35099);function j(a){return"active"===a.state}let k=/^T[A-Z0-9]{2,20}$/,l=/^[CG][A-Z0-9]{2,20}$/;a.s(["SHARE_DURATIONS",0,[{label:"5 minutes",seconds:300},{label:"1 hour",seconds:3600},{label:"8 hours",seconds:28800},{label:"24 hours",seconds:86400}],"SHARE_STATUS_LABELS",0,{active:"Active",exhausted:"Questions used",answering:"Answering",recovering:"Recovering",expired:"Expired",revoked:"Revoked"},"audienceInputError",0,function(a,b,c){let d=a.trim(),e=b.trim();return k.test(d)?l.test(e)?c.some(a=>a.team_id===d&&a.channel_id===e)?"That channel is already on the allowlist.":null:"Channel ID must look like C0123ABCD (a public or private channel ID; no wildcards).":"Workspace ID must look like T0123ABCD (a Slack team ID; no wildcards)."},"audienceLabel",0,function(a){return`Slack channel ${a.channel_id} \xb7 workspace ${a.team_id}`},"createdByLabel",0,function(a){return"owner"===a.created_by?"Shared by you":"current_session"===a.created_by?"Shared from a turn of this session":"Shared by a service"},"expiryLabel",0,function(a,b=Date.now()){return"revoked"===a.state?`Revoked ${(0,h.formatSessionDate)(a.revoked_at??a.expires_at)}`:"expired"===a.state||a.expires_at<=b?`Expired ${(0,h.formatSessionDate)(a.expires_at)}`:`Expires ${(0,h.formatSessionDate)(a.expires_at)} (in ${function(a){let b=Math.max(1,Math.round(a/6e4));if(b<60)return`${b} min`;let c=Math.floor(b/60),d=b%60;return d?`${c} h ${d} min`:`${c} h`}(a.expires_at-b)})`},"sessionShares",0,function(a,b){let c=a.filter(a=>a.session_ref===b);return[...c.filter(j).sort((a,b)=>b.created_at-a.created_at),...c.filter(a=>!j(a)).sort((a,b)=>(b.revoked_at??b.expires_at)-(a.revoked_at??a.expires_at))]},"shareCreateAvailability",0,function(a,b){let c=`/bots/${encodeURIComponent(a.agent.id)}/config#session-sharing`;if(!b)return{available:!1,reason:"Share to Slack is unavailable: the share policy could not be loaded.",configHref:null};let d=(0,i.sessionRowActions)(a).find(a=>"ask"===a.action);return d&&!d.availability.available?{available:!1,reason:d.availability.reason.replace(/^Ask from this context is unavailable:/,"Share to Slack is unavailable:"),configHref:null}:"invalid"===b.state?{available:!1,reason:"Share to Slack is unavailable: the share policy file is invalid. Fix it in Config.",configHref:c}:0===b.audiences.length?{available:!1,reason:"Share to Slack needs a Slack channel on the share allowlist. Add one in Config.",configHref:c}:{available:!0}},"shareCreateBody",0,function(a,b,c,d){return{audience:{team_id:a.team_id,channel_id:a.channel_id},ttl_seconds:b,max_turns:c,idempotency_key:d}},"shareFromTurnNote",0,function(a){return a.agent.share_current.supported?a.agent.share_from_turn?"On: a turn Botmancers launches for this Agent can share its own session to an allowlisted channel. Turning it off revokes every live turn context at once.":"Off: no turn of this Agent can share its own session. Sessions can still be shared from the Sessions drawer.":a.agent.share_current.reason??"This runtime cannot share its own session from a turn."},"shareIsLive",0,j,"shareStatusNote",0,function(a){switch(a.status){case"active":return"Slack replies in its thread ask this session (read-only).";case"answering":return"A Slack question is being answered now. The next one waits until it finishes.";case"recovering":return"A question was interrupted by a Botmancers restart. The next Slack question clears it.";case"exhausted":return`All ${a.max_turns} questions are used. Slack questions get the limit notice; create a new share to keep going.`;case"expired":return"Expired: Slack questions get the expired notice. Its history stays here.";case"revoked":return"Revoked: Slack questions get the revoked notice. Its history stays here."}},"threadLabel",0,function(a){return a.thread.posted?`Slack thread posted ${(0,h.formatSessionDate)(a.thread.posted_at??0)}`:"active"===a.state?"Waiting for the Slack relay to post the thread":"No Slack thread was posted"},"turnsLabel",0,function(a){return`${a.turns_used} of ${a.max_turns} question${1===a.max_turns?"":"s"} used`}],23464)},1160,22855,79202,a=>{"use strict";var b=a.i(22151);let c="This computer",d={direct:"Direct",agent_deck:"Agent Deck"},e={read_only:"Read only",workspace_write:"Workspace write"},f={workspaces:"Selected workspaces",sessions:"Selected imported sessions",all_provider_sessions:"All sessions this runtime can see"};function g(a){return a.startsWith("/")||"~"===a||a.startsWith("~/")}function h(a){return a.length>1?a.replace(/\/+$/,""):a}b.AGENTS.join("|");var i=a.i(20851);let j="/api/runtime-connections",k={connection:"Runtime connection",scope:"Session scope",defaultWorkspace:"Default workspace (optional)",launchProfile:"Launch profile",policy:"Policy",homeSession:"Home session (optional)"},l={connection:"The runtime installation or account this Agent uses. Several Agents can share one.",workspaces:"One absolute path per line. An empty scope never means unrestricted.",sessions:"Only this Agent’s own Botmancers sessions can be selected.",noSessions:"This Agent has no sessions yet. Choose workspaces or all sessions for now.",allSessions:"Every session this runtime can see. Choose this only on purpose.",defaultWorkspace:"Where new sessions start. Convenience only — not a permission.",direct:"Launches the runtime directly. Agent Deck is not contacted.",agentDeck:"Launches through a verified Agent Deck from the configured server.",resumeEdits:"Needs Workspace write.",homeSession:"A stable session to return to. Must be one of this Agent’s sessions.",addConnection:"Stores a name and host only. Credentials stay with the runtime."},m="Loading runtime connections…",n="Couldn't load runtime connections — retry.";function o(){return{status:"loading",connections:[],error:""}}function p(a){return`${a.label} \xb7 ${b.AGENT_LABELS[a.provider]??a.provider}`}function q(a){if("object"!=typeof a||null===a)return null;let b=a.connections;if(!Array.isArray(b))return null;let c=[];for(let a of b){if("object"!=typeof a||null===a||"string"!=typeof a.id||"string"!=typeof a.provider||"string"!=typeof a.label)return null;c.push({id:a.id,provider:a.provider,label:a.label,host:"string"==typeof a.host?a.host:"",agent_count:"number"==typeof a.agent_count?a.agent_count:void 0})}return c}function r(a){let b=[];for(let c of a.split("\n")){let a=c.trim();a&&!b.includes(a)&&b.push(a)}return b}function s(a){return"workspaces"===a.scopeKind?{kind:"workspaces",workspaces:r(a.workspaces)}:"sessions"===a.scopeKind?{kind:"sessions",sessions:a.sessions}:{kind:a.scopeKind}}function t(a){return{mode:a.policyMode,allow_new_sessions:a.allowNewSessions,allow_resume_with_edits:a.allowResumeWithEdits}}a.s(["CONNECTIONS_ENDPOINT",0,j,"CONNECTIONS_ERROR_COPY",0,n,"CONNECTIONS_LOADING_COPY",0,m,"DEFAULT_REGISTRATION_FORM",0,{connectionId:"",scopeKind:"",workspaces:"",sessions:[],defaultWorkspace:"",launchProfile:"",deckId:"",workingDirectory:"",policyMode:"read_only",allowNewSessions:!0,allowResumeWithEdits:!1,homeSessionId:""},"HINTS",0,l,"LABELS",0,k,"connectionOptionLabel",0,p,"hasRegistrationErrors",0,function(a){return Object.keys(a.errors).length>0},"initialConnectionListState",0,o,"parseConnectionList",0,q,"registrationCreateBody",0,function(a,b){let c={name:String(a??"").trim(),runtime_connection_id:b.connectionId,launch_profile:b.launchProfile||null,session_scope:s(b),policy:t(b)},d=b.defaultWorkspace.trim();if(d&&(c.default_workspace=d),"agent_deck"===b.launchProfile){c.deck_id=b.deckId.trim();let a=b.workingDirectory.trim();a&&(c.working_directory=a)}return c},"registrationFormFromBot",0,function(a){let b=a.session_scope??null,c="direct"===a.launch_profile||"agent_deck"===a.launch_profile?a.launch_profile:"",d=!0===a.needs_deck_selection||1===a.needs_deck_selection,e=(a.working_directory??"").trim();return{connectionId:a.runtime_connection_id??"",scopeKind:b?.kind??"",workspaces:b?.kind==="workspaces"?b.workspaces.join("\n"):"",sessions:b?.kind==="sessions"?[...b.sessions]:[],defaultWorkspace:a.default_workspace??"",launchProfile:c,deckId:"agent_deck"!==c||d?"":(a.deck_id??"").trim(),workingDirectory:"agent_deck"===c&&e&&e!==(0,i.defaultWorkdirFor)(a.id??"")?e:"",policyMode:a.policy?.mode??"read_only",allowNewSessions:!a.policy||a.policy.allow_new_sessions,allowResumeWithEdits:!!a.policy&&a.policy.allow_resume_with_edits,homeSessionId:a.home_session_id??""}},"registrationFormView",0,function(a,b,c){let d={};a.connectionId||(d.connection="Pick a runtime connection.");let e=r(a.workspaces);a.scopeKind?"workspaces"===a.scopeKind?0===e.length?d.workspaces="Add at least one workspace.":e.every(g)||(d.workspaces="Workspaces must be absolute paths (or start with ~/)."):"sessions"===a.scopeKind&&0===a.sessions.length&&(d.sessions="Select at least one session."):d.scope="Choose a session scope.";let f=a.defaultWorkspace.trim();f&&(g(f)?"workspaces"!==a.scopeKind||d.workspaces||e.some(a=>{let b,c;return b=h(a),b===(c=h(f))||c.startsWith("/"===b?"/":`${b}/`)})||(d.defaultWorkspace="The default workspace must be inside one of the selected workspaces."):d.defaultWorkspace="The default workspace must be an absolute path (or start with ~/)."),a.launchProfile?"agent_deck"!==a.launchProfile||a.deckId.trim()||(d.deck="Select an Agent Deck for this agent."):d.launchProfile="Choose Direct or Agent Deck.",a.allowResumeWithEdits&&"workspace_write"!==a.policyMode&&(d.policy="Resume with edits needs the Workspace write policy.");let j="agent_deck"===a.launchProfile,k="",l=!1;return"ready"!==c.status?(l=!0,k="error"===c.status?n:""):j&&"connected"!==b.status&&(l=!0,k="loading"===b.status?"":i.DECK_SLOT_COPY[b.status]),{errors:d,showsAgentDeck:j,submitDisabled:l,blocker:k}},"registrationPatchBody",0,function(a,b){let c={id:a,runtime_connection_id:b.connectionId,launch_profile:b.launchProfile||null,session_scope:s(b),default_workspace:b.defaultWorkspace.trim(),policy:t(b),home_session_id:b.homeSessionId};if("agent_deck"===b.launchProfile){let d=b.workingDirectory.trim();c.deck_id=b.deckId.trim(),c.working_directory=d&&d!==(0,i.defaultWorkdirFor)(a)?d:""}return c},"registrationReadView",0,function(a,c,g){var h;let j,l=[{key:"connection",label:k.connection,value:(j=a.runtime_connection)?`${j.label} (${(0,b.agentLabel)(j.provider)} \xb7 ${j.host})`:"Not set"},{key:"scope",label:k.scope,value:function(a,b){if(!a)return"Not set — this Agent cannot launch until a scope is chosen.";if("all_provider_sessions"===a.kind)return f.all_provider_sessions;if("workspaces"===a.kind)return`${f.workspaces}: ${a.workspaces.join(", ")}`;let c=a.sessions.map(a=>b?.find(b=>b.ref===a)?.title??a);return`${f.sessions}: ${c.join(", ")}`}(a.session_scope,g)},{key:"defaultWorkspace",label:"Default workspace",value:a.default_workspace||"None"},{key:"launchProfile",label:k.launchProfile,value:"direct"===a.launch_profile?d.direct:"agent_deck"===a.launch_profile?d.agent_deck:"Not chosen"}],m=[];if("agent_deck"===a.launch_profile){let b=!0===a.needs_deck_selection||1===a.needs_deck_selection||!(a.deck_id??"").trim();l.push({key:"deck",label:"Agent Deck",value:b?"not selected":(0,i.deckLabel)(a.deck_id??"",c)});let d=(a.working_directory??"").trim();l.push({key:"workdir",label:"Working directory",value:d||(0,i.defaultWorkdirFor)(a.id??"{agentID}")}),!b&&(0,i.isDeckUnavailable)(a,c)&&m.push("This deck isn't on the configured server right now. Pick another deck, or fix the server in Settings.")}l.push({key:"policy",label:k.policy,value:(h=a.policy)?[e[h.mode],h.allow_new_sessions?"new sessions allowed":"no new sessions",h.allow_resume_with_edits?"resume with edits allowed":"no resume with edits"].join(" · "):"Not set"});let n=a.home_session_id?g?.find(b=>b.ref===a.home_session_id)?.title??a.home_session_id:"None";if(l.push({key:"homeSession",label:"Home session",value:n}),a.launch_profile)"direct_runtime"===a.launch_blocker&&m.push("Registered for direct launch. Direct sessions for this runtime arrive in a later Botmancers version.");else{let b=(a.deck_name??"").trim();m.push(`Choose Direct or Agent Deck before this Agent can run${b?` (was Agent Deck "${b}")`:""}.`)}return{rows:l,notices:m}}],1160);var u=a.i(87924),v=a.i(72131),w=a.i(39228);let x={modal:{fieldset:"agent-fieldset reg-fieldset",legend:"field-legend",label:"",picks:"runtime-picks",pick:"runtime-pick",stack:"reg-stack",control:"deck-control",input:"",hint:"runtime-hint",error:"form-error reg-error",button:"runtime-retry",note:"runtime-note"},config:{fieldset:"agent-fieldset reg-fieldset",legend:"block text-sm cfg-muted mt-3 mb-1 p-0",label:"block text-sm cfg-muted mt-3 mb-1",picks:"flex flex-wrap gap-x-4 gap-y-1 text-sm cfg-muted",pick:"text-sm cfg-muted",stack:"flex flex-col gap-1 text-sm cfg-muted",control:"cfg-input text-sm",input:"cfg-input text-sm",hint:"mt-1 text-xs cfg-faint",error:"mt-1 text-sm cfg-error",button:"cfg-link text-sm",note:"text-sm cfg-muted mt-1"}};function y({id:a,message:b,variant:c}){return b?(0,u.jsx)("p",{id:a,className:x[c].error,role:"alert",children:b}):null}function z({idPrefix:a,variant:b,onAdd:d}){let e=x[b],[f,g]=(0,v.useState)(!1),[h,j]=(0,v.useState)(i.AGENT_OPTIONS[0].value),[k,m]=(0,v.useState)(""),[n,o]=(0,v.useState)(""),[p,q]=(0,v.useState)(""),[r,s]=(0,v.useState)(!1),t=async()=>{if(r)return;s(!0),q("");let a=await d({provider:h,label:k,host:n.trim()||c});(s(!1),"string"==typeof a)?q(a):(g(!1),m(""),o(""))};return f?(0,u.jsxs)("div",{id:`${a}-add-connection`,className:"reg-add-connection",role:"group","aria-label":"Add connection",children:[(0,u.jsx)("label",{className:e.label,htmlFor:`${a}-add-provider`,children:"Provider"}),(0,u.jsx)("select",{id:`${a}-add-provider`,className:e.control,value:h,onChange:a=>j(a.target.value),children:i.AGENT_OPTIONS.map(a=>(0,u.jsx)("option",{value:a.value,children:a.label},a.value))}),(0,u.jsx)("label",{className:e.label,htmlFor:`${a}-add-label`,children:"Connection name"}),(0,u.jsx)("input",{id:`${a}-add-label`,type:"text",className:e.input||void 0,value:k,placeholder:"Codex on my laptop",onChange:a=>m(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),t())}}),(0,u.jsx)("label",{className:e.label,htmlFor:`${a}-add-host`,children:"Host"}),(0,u.jsx)("input",{id:`${a}-add-host`,type:"text",className:e.input||void 0,value:n,placeholder:c,"aria-describedby":`${a}-add-hint`,onChange:a=>o(a.target.value)}),(0,u.jsx)("p",{id:`${a}-add-hint`,className:e.hint,children:l.addConnection}),p?(0,u.jsx)("p",{className:e.error,role:"alert",children:p}):null,(0,u.jsxs)("div",{className:"reg-actions",children:[(0,u.jsx)("button",{type:"button",className:e.button,onClick:()=>void t(),disabled:r,children:r?"Adding…":"Add"}),(0,u.jsx)("button",{type:"button",className:e.button,"aria-expanded":"true",onClick:()=>g(!1),children:"Cancel"})]})]}):(0,u.jsx)("button",{type:"button",className:e.button,"aria-expanded":"false","aria-controls":`${a}-add-connection`,onClick:()=>g(!0),children:"Add connection…"})}a.s(["RegistrationFields",0,function({idPrefix:a,variant:b,form:c,onChange:g,view:h,showErrors:i,connections:j,onRetryConnections:o,onAddConnection:q,deckState:r,onRetryDecks:s,savedDeckId:t,workdirPlaceholder:v,workdirHint:A,sessions:B,includeHomeSession:C}){let D=x[b],E=a=>i?h.errors[a]:void 0,F=b=>`${a}-${b}-error`,G=(a,...b)=>[...b,E(a)?F(a):""].filter(Boolean).join(" ")||void 0,H=!!(B&&B.length>0);return(0,u.jsxs)("div",{className:"registration-fields","data-registration":b,children:[(0,u.jsxs)("fieldset",{className:D.fieldset,"data-field":"connection","aria-describedby":G("connection",`${a}-connection-hint`),children:[(0,u.jsx)("legend",{className:D.legend,id:`${a}-connection-legend`,children:k.connection}),"loading"===j.status?(0,u.jsx)("p",{className:D.note,role:"status",children:m}):"error"===j.status?(0,u.jsxs)("p",{className:D.note,role:"status",children:[n," ",(0,u.jsx)("button",{type:"button",className:D.button,onClick:o,children:"Retry"})]}):(0,u.jsxs)("select",{id:`${a}-connection`,className:D.control,"aria-labelledby":`${a}-connection-legend`,"aria-required":"true","aria-invalid":!!E("connection")||void 0,value:c.connectionId,onChange:a=>g({connectionId:a.target.value}),children:[(0,u.jsx)("option",{value:"",disabled:!0,children:"Select a connection…"}),j.connections.map(a=>(0,u.jsx)("option",{value:a.id,children:p(a)},a.id))]}),(0,u.jsx)("p",{id:`${a}-connection-hint`,className:D.hint,children:l.connection}),(0,u.jsx)(y,{id:F("connection"),message:E("connection"),variant:b}),"ready"===j.status?(0,u.jsx)(z,{idPrefix:a,variant:b,onAdd:async a=>{let b=await q(a);return"string"!=typeof b&&g({connectionId:b.id}),b}}):null]}),(0,u.jsxs)("fieldset",{className:D.fieldset,"data-field":"scope",children:[(0,u.jsx)("legend",{className:D.legend,id:`${a}-scope-legend`,children:k.scope}),(0,u.jsx)("div",{className:D.stack,role:"radiogroup","aria-labelledby":`${a}-scope-legend`,"aria-required":"true","aria-describedby":G("scope"),children:["workspaces","sessions","all_provider_sessions"].map(b=>(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"radio",name:`${a}-scope`,value:b,checked:c.scopeKind===b,disabled:"sessions"===b&&!H,onChange:()=>g({scopeKind:b})})," "+f[b]]},b))}),H?null:(0,u.jsx)("p",{className:D.hint,children:l.noSessions}),(0,u.jsx)(y,{id:F("scope"),message:E("scope"),variant:b}),"workspaces"===c.scopeKind?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("label",{className:D.label,htmlFor:`${a}-workspaces`,children:"Workspaces"}),(0,u.jsx)("textarea",{id:`${a}-workspaces`,className:D.input||void 0,rows:2,value:c.workspaces,placeholder:"/Users/you/work/project","aria-required":"true","aria-invalid":!!E("workspaces")||void 0,"aria-describedby":G("workspaces",`${a}-workspaces-hint`),onChange:a=>g({workspaces:a.target.value})}),(0,u.jsx)("p",{id:`${a}-workspaces-hint`,className:D.hint,children:l.workspaces}),(0,u.jsx)(y,{id:F("workspaces"),message:E("workspaces"),variant:b})]}):null,"sessions"===c.scopeKind&&B?(0,u.jsxs)("div",{className:D.stack,role:"group","aria-label":"Sessions in scope","aria-describedby":G("sessions",`${a}-sessions-hint`),children:[B.map(a=>(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"checkbox",checked:c.sessions.includes(a.ref),onChange:b=>g({sessions:b.target.checked?[...c.sessions,a.ref]:c.sessions.filter(b=>b!==a.ref)})}),` ${a.title} (${a.status})`]},a.ref)),(0,u.jsx)("p",{id:`${a}-sessions-hint`,className:D.hint,children:l.sessions}),(0,u.jsx)(y,{id:F("sessions"),message:E("sessions"),variant:b})]}):null,"all_provider_sessions"===c.scopeKind?(0,u.jsx)("p",{className:D.hint,children:l.allSessions}):null]}),(0,u.jsxs)("div",{"data-field":"default-workspace",children:[(0,u.jsx)("label",{className:D.label,htmlFor:`${a}-default-workspace`,children:k.defaultWorkspace}),(0,u.jsx)("input",{id:`${a}-default-workspace`,type:"text",className:D.input||void 0,value:c.defaultWorkspace,"aria-invalid":!!E("defaultWorkspace")||void 0,"aria-describedby":G("defaultWorkspace",`${a}-default-workspace-hint`),onChange:a=>g({defaultWorkspace:a.target.value})}),(0,u.jsx)("p",{id:`${a}-default-workspace-hint`,className:D.hint,children:l.defaultWorkspace}),(0,u.jsx)(y,{id:F("defaultWorkspace"),message:E("defaultWorkspace"),variant:b})]}),(0,u.jsxs)("fieldset",{className:D.fieldset,"data-field":"launch-profile",children:[(0,u.jsx)("legend",{className:D.legend,id:`${a}-profile-legend`,children:k.launchProfile}),(0,u.jsx)("div",{className:D.stack,role:"radiogroup","aria-labelledby":`${a}-profile-legend`,"aria-required":"true","aria-describedby":G("launchProfile"),children:["direct","agent_deck"].map(b=>(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"radio",name:`${a}-profile`,value:b,checked:c.launchProfile===b,"aria-describedby":`${a}-profile-${b}-hint`,onChange:()=>g({launchProfile:b})})," "+d[b],(0,u.jsx)("span",{id:`${a}-profile-${b}-hint`,className:`reg-option-hint ${D.hint}`,children:"direct"===b?l.direct:l.agentDeck})]},b))}),(0,u.jsx)(y,{id:F("launchProfile"),message:E("launchProfile"),variant:b}),h.showsAgentDeck?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(w.AgentDeckFields,{idPrefix:a,variant:b,deckId:c.deckId,onDeckId:a=>g({deckId:a}),deckState:r,onRetry:s,savedDeckId:t,workingDirectory:c.workingDirectory,onWorkingDirectory:a=>g({workingDirectory:a}),workdirPlaceholder:v,workdirHint:A}),(0,u.jsx)(y,{id:F("deck"),message:E("deck"),variant:b})]}):null]}),(0,u.jsxs)("fieldset",{className:D.fieldset,"data-field":"policy",children:[(0,u.jsx)("legend",{className:D.legend,id:`${a}-policy-legend`,children:k.policy}),(0,u.jsx)("div",{className:D.picks,role:"radiogroup","aria-labelledby":`${a}-policy-legend`,children:["read_only","workspace_write"].map(b=>(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"radio",name:`${a}-policy`,value:b,checked:c.policyMode===b,onChange:()=>g("read_only"===b?{policyMode:b,allowResumeWithEdits:!1}:{policyMode:b})})," "+e[b]]},b))}),(0,u.jsxs)("div",{className:D.stack,children:[(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"checkbox",checked:c.allowNewSessions,onChange:a=>g({allowNewSessions:a.target.checked})})," Allow new sessions"]}),(0,u.jsxs)("label",{className:D.pick,children:[(0,u.jsx)("input",{type:"checkbox",checked:c.allowResumeWithEdits,disabled:"workspace_write"!==c.policyMode,"aria-describedby":`${a}-resume-hint`,onChange:a=>g({allowResumeWithEdits:a.target.checked})})," Allow resume with edits"]}),(0,u.jsx)("p",{id:`${a}-resume-hint`,className:D.hint,children:l.resumeEdits})]}),(0,u.jsx)(y,{id:F("policy"),message:E("policy"),variant:b})]}),C?(0,u.jsxs)("div",{"data-field":"home-session",children:[(0,u.jsx)("label",{className:D.label,htmlFor:`${a}-home-session`,children:k.homeSession}),(0,u.jsxs)("select",{id:`${a}-home-session`,className:D.control,value:c.homeSessionId,"aria-describedby":`${a}-home-session-hint`,onChange:a=>g({homeSessionId:a.target.value}),children:[(0,u.jsx)("option",{value:"",children:"None"}),(B??[]).map(a=>(0,u.jsx)("option",{value:a.ref,children:`${a.title} (${a.status})`},a.ref))]}),(0,u.jsx)("p",{id:`${a}-home-session-hint`,className:D.hint,children:l.homeSession})]}):null]})}],22855),a.s(["useRuntimeConnections",0,function(){let[a,b]=(0,v.useState)(()=>o()),[c,d]=(0,v.useState)(0);return(0,v.useEffect)(()=>{let a=!1;return fetch(j,{cache:"no-store"}).then(async c=>{let d=c.ok?q(await c.json().catch(()=>null)):null;a||b(d?{status:"ready",connections:d,error:""}:{status:"error",connections:[],error:`HTTP ${c.status}`})}).catch(c=>{a||b({status:"error",connections:[],error:c instanceof Error?c.message:String(c)})}),()=>{a=!0}},[c]),{state:a,retry:(0,v.useCallback)(()=>{b(o()),d(a=>a+1)},[]),add:(0,v.useCallback)(async a=>{let c=await fetch(j,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>null);if(!c.ok)return"string"==typeof d?.error?d.error:"Failed to add the connection";let e=q({connections:[d]})?.[0];return e?(b(a=>({status:"ready",connections:[...a.connections,e],error:""})),e):"Failed to add the connection"},[])}}],79202)},80219,a=>{"use strict";let b="imported",c=/^[A-Za-z0-9_-]{1,128}$/;function d(a){let d=new URLSearchParams(a).get(b);if(null===d)return null;let e=d.trim();return c.test(e)?e:""}function e(a){return`/bots/${encodeURIComponent(a)}/config`}async function f(a,b,c){let f=d(a);if(null===f)return{kind:"none"};if(!f)return{kind:"missing"};if(f===b)return{kind:"stay"};try{return await c(f)?{kind:"open",path:e(f)}:{kind:"missing"}}catch{return{kind:"missing"}}}a.s(["HANDOFF_STATUS_PATH",0,"/api/marketplace-handoff/status","IMPORT_RETURN_QUERY",0,b,"handoffStartPath",0,function(a,b){return`/api/marketplace-handoff?return=${encodeURIComponent(a+b)}`},"importedBotId",0,d,"importedConfigPath",0,e,"marketImportView",0,function(a){switch(a){case"checking":return{busy:!0,tone:"muted",message:"Checking Grok Marketplace…"};case"redirecting":return{busy:!0,tone:"muted",message:"Opening Grok Marketplace…"};case"unavailable":return{busy:!1,tone:"error",message:"Grok Marketplace isn't configured. Set CLONE_MARKET_URL on the Botmancers server."};case"failed":return{busy:!1,tone:"error",message:"Couldn't reach Botmancers to start the import. Try again."};case"missing":return{busy:!1,tone:"error",message:"Imported agent not found. The import may not have completed."};default:return{busy:!1,tone:"muted",message:"Imports a new agent and opens its Config. This agent is not changed."}}},"resolveImportReturn",0,f])}];
1
+ module.exports=[36391,5020,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d=[{id:"purple",label:"Purple",hex:"#7C3AED"},{id:"blue",label:"Blue",hex:"#2563EB"},{id:"teal",label:"Teal",hex:"#0D9488"},{id:"green",label:"Green",hex:"#16A34A"},{id:"amber",label:"Amber",hex:"#B45309"},{id:"orange",label:"Orange",hex:"#EA580C"},{id:"pink",label:"Pink",hex:"#DB2777"},{id:"slate",label:"Slate",hex:"#64748B"}],e=[{id:"dots",label:"Round dots"},{id:"sleepy",label:"Sleepy"},{id:"happy",label:"Happy arcs"},{id:"wide",label:"Wide ovals"}],f=[{id:"folded",label:"Folded arms"},{id:"reaching",label:"Reaching right"},{id:"waving",label:"Waving"}],g=[{id:"none",label:"None"},{id:"crown",label:"Crown"},{id:"glasses",label:"Glasses"},{id:"headset",label:"Headset"},{id:"hat",label:"Hat"},{id:"bow",label:"Bow"}],h={color:"purple",eyes:"dots",hands:"folded",accessory:"none"},i={...h,accessory:"crown"};function j(a,b){return"string"==typeof b&&a.some(a=>a.id===b)}function k(a){let b=j(d,a.avatar_color)?a.avatar_color:h.color,c=j(e,a.avatar_eyes)?a.avatar_eyes:h.eyes;return{color:b,eyes:c,hands:j(f,a.avatar_hands)?a.avatar_hands:h.hands,accessory:j(g,a.avatar_accessory)?a.avatar_accessory:"chief-of-staff"===String(a.name??"").trim().toLowerCase()?i.accessory:h.accessory}}let l=[{x:70,y:70.5,w:38,h:6},{x:70,y:82,w:38,h:6}];function m(a){return l.map(b=>`<rect x="${b.x}" y="${b.y}" width="${b.w}" height="${b.h}" rx="${b.h/2}" ${a}/>`).join("")}function n(a,b="static"){var c,e;let f,g,h=d.find(b=>b.id===a.color)?.hex??d[0].hex,i=String(b).replace(/[^A-Za-z0-9_-]/g,"")||"static",j=`avatar-knockout-${i}`,k=`fill="none" stroke="${h}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`,l=(c=a.hands,e=a.accessory,f=[],"reaching"===c&&f.push({x1:87.6,y1:69,x2:90.4,y2:86.5,w:8}),"waving"===c&&f.push({x1:35,y1:59,x2:28,y2:72,w:10}),"crown"===e&&f.push({x1:44,y1:30,x2:76,y2:30,w:9}),"hat"===e&&f.push({x1:38,y1:34,x2:82,y2:34,w:9}),"bow"===e&&f.push({x1:60,y1:28.5,x2:84,y2:28,w:10}),"headset"===e&&(f.push({x1:42,y1:24.5,x2:78,y2:24.5,w:10}),f.push({x1:33,y1:55,x2:37,y2:64,w:8}),f.push({x1:83,y1:55,x2:87,y2:64,w:8})),"glasses"===e&&(f.push({x1:29,y1:56,x2:34,y2:62,w:8}),f.push({x1:86,y1:62,x2:91,y2:56,w:8})),f).map(a=>`<line x1="${a.x1}" y1="${a.y1}" x2="${a.x2}" y2="${a.y2}" stroke="#000000" stroke-width="${a.w}" stroke-linecap="round"/>`).join(""),o=`avatar-arms-${i}`,p="reaching"===a.hands,q=p?`<mask id="${o}"><rect x="0" y="0" width="120" height="120" fill="#ffffff"/>${m('fill="#000000" stroke="#000000" stroke-width="7"')}</mask>`:"",r=function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"sleepy":return`<g data-avatar-layer="eyes" data-avatar-eyes="sleepy"><path d="M42 61 Q48 64 54 61" ${c}/><path d="M66 61 Q72 64 78 61" ${c}/></g>`;case"happy":return`<g data-avatar-layer="eyes" data-avatar-eyes="happy"><path d="M42 63 Q48 54 54 63" ${c}/><path d="M66 63 Q72 54 78 63" ${c}/></g>`;case"wide":return`<g data-avatar-layer="eyes" data-avatar-eyes="wide"><ellipse cx="48" cy="60" rx="5.5" ry="8" ${c}/><ellipse cx="72" cy="60" rx="5.5" ry="8" ${c}/></g>`;default:return`<g data-avatar-layer="eyes" data-avatar-eyes="dots"><circle cx="48" cy="60" r="3.5" ${c}/><circle cx="72" cy="60" r="3.5" ${c}/></g>`}}(a.eyes,h),s=function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"crown":return`<g data-avatar-layer="accessory" data-avatar-accessory="crown"><path d="M44 31 L46.5 14 L54 24 L60 10 L66 24 L73.5 14 L76 31 Z" ${c}/></g>`;case"glasses":return`<g data-avatar-layer="accessory" data-avatar-accessory="glasses"><circle cx="48" cy="60" r="9" ${c}/><circle cx="72" cy="60" r="9" ${c}/><path d="M57 60 Q60 57 63 60" ${c}/><path d="M39 59 L32 57" ${c}/><path d="M81 59 L88 57" ${c}/></g>`;case"headset":return`<g data-avatar-layer="accessory" data-avatar-accessory="headset"><path d="M36 62 Q34 24 60 24 Q86 24 84 62" ${c}/><rect x="79" y="54" width="10" height="17" rx="5" ${c}/><path d="M84 71 Q80 84 66 84" ${c}/></g>`;case"hat":return`<g data-avatar-layer="accessory" data-avatar-accessory="hat"><path d="M38 34 Q60 40 82 34" ${c}/><path d="M46 34 Q48 14 60 14 Q72 14 74 34" ${c}/></g>`;case"bow":return`<g data-avatar-layer="accessory" data-avatar-accessory="bow"><circle cx="79" cy="29" r="3.5" ${c}/><path d="M76 27 L62 18 Q60 26 66 32 Z" ${c}/><path d="M82 27 L95 19 Q97 27 91 32 Z" ${c}/></g>`;default:return'<g data-avatar-layer="accessory" data-avatar-accessory="none"></g>'}}(a.accessory,h);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" role="img" data-avatar-color="${a.color}" data-avatar-eyes="${a.eyes}" data-avatar-hands="${a.hands}" data-avatar-accessory="${a.accessory}"><mask id="${j}"><rect x="0" y="0" width="120" height="120" fill="#ffffff"/>${l}</mask>`+q+`<g data-avatar-layer="body" mask="url(#${j})">`+`<path d="M60 28 C75 28 84 39 85.5 56 L91 90 C92.5 98 87 102 79 102 L41 102 C33 102 27.5 98 29 90 L34.5 56 C36 39 45 28 60 28 Z" ${k}/>`+`<path d="M54 71 Q60 75.5 66 71" ${k}/>`+`<path data-avatar-brows="straight" d="${g="wide"===a.eyes?45:46,`M42 ${g} H54 M66 ${g} H78`}" fill="none" stroke="${h}" stroke-width="4.8" stroke-linecap="round"/>`+"</g>"+(p?`<g mask="url(#${o})">${r}</g>`:r)+function(a,b){let c=`fill="none" stroke="${b}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"`;switch(a){case"reaching":return'<g data-avatar-layer="hands" data-avatar-hands="reaching">'+m(c)+"</g>";case"waving":return`<g data-avatar-layer="hands" data-avatar-hands="waving"><path d="M32 68 Q24 60 22 48" ${c}/><circle cx="21" cy="41" r="5" ${c}/><path d="M11 36 Q9 46 12 54" ${c}/></g>`;default:return`<g data-avatar-layer="hands" data-avatar-hands="folded"><rect x="44" y="79" width="32" height="9" rx="4.5" ${c}/><rect x="46" y="90" width="28" height="9" rx="4.5" ${c}/></g>`}}(a.hands,h)+(p?`<g mask="url(#${o})">${s}</g>`:s)+"</svg>"}a.s(["AVATAR_ACCESSORIES",0,g,"AVATAR_COLORS",0,d,"AVATAR_EYES",0,e,"AVATAR_HANDS",0,f,"renderAvatarSvg",0,n,"resolveAvatar",0,k],5020),a.s(["default",0,function({bot:a,config:d,size:e=28,className:f,title:g}){let h=(0,c.useId)().replace(/[^A-Za-z0-9_-]/g,"")||"avatar",i=n(d??a?.avatar_config??k(a??{}),h).replace("<svg ",`<svg width="${e}" height="${e}" `);return(0,b.jsx)("span",{className:f??"bot-avatar",style:{display:"inline-flex",width:e,height:e,flex:"none"},title:g,"aria-label":g??"Agent avatar",role:"img",dangerouslySetInnerHTML:{__html:i}})}],36391)},60193,35832,23464,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d="Permanently removes each agent with its direct conversation, messages, queue rows, approvals, launch snapshots, memories, one-shots, routines, and pending questions. There is no undo.",e="Skill files, working directories, Hermes profiles, and imported source files stay on disk.";function f(a){return"chief"===a?"Chief of Staff cannot be deleted.":"Working now — stop it or let it finish before deleting."}function g(a){return 1===a?"Delete agent":`Delete ${a} agents`}a.s(["DELETE_KEEPS_COPY",0,e,"DELETE_REMOVES_COPY",0,d,"blockedReasonCopy",0,f,"deleteConfirmLabel",0,g,"deletedStatusLine",0,function(a){return 1===a?"Deleted 1 agent.":`Deleted ${a} agents.`}],35832),a.s(["default",0,function({ids:a,onCancel:h,onDeleted:i}){let j=(0,c.useId)(),[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(!1),s=(0,c.useRef)(null),t=(0,c.useRef)(null),u=a.join("\n");(0,c.useEffect)(()=>{let a=!1;return fetch("/api/bots/delete-preview",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:u.split("\n")})}).then(async b=>{let c=await b.json().catch(()=>null);if(!a){if(!b.ok)return void n("string"==typeof c?.error?c.error:"Could not load the deletion preview.");l(c)}}).catch(()=>{a||n("Could not load the deletion preview.")}),()=>{a=!0}},[u]),(0,c.useEffect)(()=>{s.current?.focus()},[]),(0,c.useEffect)(()=>{let a=a=>{"Escape"===a.key&&(a.stopPropagation(),q||h())};return document.addEventListener("keydown",a,!0),()=>document.removeEventListener("keydown",a,!0)},[q,h]);let v=a.length,w=!k||k.blocked.length>0||k.missing.length>0,x=async()=>{if(!q&&!w){r(!0),p("");try{let b=await fetch("/api/bots",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a})}),c=await b.json().catch(()=>null);if(!b.ok){p("string"==typeof c?.error&&c.error?c.error:`Delete failed (${b.status}).`),r(!1),requestAnimationFrame(()=>s.current?.focus());return}i(Array.isArray(c?.deleted)?c.deleted:[])}catch{p("Delete failed: the server did not respond."),r(!1),requestAnimationFrame(()=>s.current?.focus())}}};return(0,b.jsx)("div",{className:"modal-scrim delete-scrim",onKeyDown:a=>{if("Tab"!==a.key||!t.current)return;let b=Array.from(t.current.querySelectorAll("button:not(:disabled)"));if(0===b.length)return;let c=b[0],d=b[b.length-1];a.shiftKey&&document.activeElement===c?(a.preventDefault(),d.focus()):a.shiftKey||document.activeElement!==d||(a.preventDefault(),c.focus())},children:(0,b.jsxs)("div",{ref:t,className:"delete-card",role:"alertdialog","aria-modal":"true","aria-labelledby":j,"data-testid":"delete-agents-dialog",children:[(0,b.jsx)("h2",{id:j,className:"delete-title",children:1===v?"Delete this agent permanently?":`Delete ${v} agents permanently?`}),m?(0,b.jsx)("p",{className:"delete-error",role:"alert",children:m}):null,k||m?null:(0,b.jsx)("p",{className:"delete-copy",children:"Checking what will be removed…"}),k?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("ul",{className:"delete-names","aria-label":"Agents to delete",children:[k.agents.map(a=>(0,b.jsx)("li",{children:a.name},a.id)),k.missing.map(a=>(0,b.jsxs)("li",{children:["Not found: ",a]},a))]}),k.blocked.length>0?(0,b.jsxs)("div",{className:"delete-blocked",role:"alert",children:[(0,b.jsx)("p",{children:"Nothing can be deleted until these are deselected:"}),(0,b.jsx)("ul",{children:k.blocked.map(a=>(0,b.jsxs)("li",{children:[a.name," — ",f(a.reason)]},a.id))})]}):null,(0,b.jsx)("p",{className:"delete-copy",children:d}),(0,b.jsx)("p",{className:"delete-copy delete-keeps",children:e})]}):null,o?(0,b.jsx)("p",{className:"delete-error",role:"alert",children:o}):null,(0,b.jsxs)("div",{className:"form-actions delete-actions",children:[(0,b.jsx)("button",{ref:s,type:"button",className:"cancel-btn",onClick:h,disabled:q,children:"Cancel"}),(0,b.jsx)("button",{type:"button",className:"delete-btn",onClick:()=>{x()},disabled:q||w,children:q?"Deleting…":g(v)})]})]})})}],60193);var h=a.i(65221),i=a.i(35099);function j(a){return"active"===a.state}let k=/^T[A-Z0-9]{2,20}$/,l=/^[CG][A-Z0-9]{2,20}$/;a.s(["SHARE_DURATIONS",0,[{label:"5 minutes",seconds:300},{label:"1 hour",seconds:3600},{label:"8 hours",seconds:28800},{label:"24 hours",seconds:86400}],"SHARE_STATUS_LABELS",0,{active:"Active",exhausted:"Questions used",answering:"Answering",recovering:"Recovering",expired:"Expired",revoked:"Revoked"},"audienceInputError",0,function(a,b,c){let d=a.trim(),e=b.trim();return k.test(d)?l.test(e)?c.some(a=>a.team_id===d&&a.channel_id===e)?"That channel is already on the allowlist.":null:"Channel ID must look like C0123ABCD (a public or private channel ID; no wildcards).":"Workspace ID must look like T0123ABCD (a Slack team ID; no wildcards)."},"audienceLabel",0,function(a){return`Slack channel ${a.channel_id} \xb7 workspace ${a.team_id}`},"createdByLabel",0,function(a){return"owner"===a.created_by?"Shared by you":"current_session"===a.created_by?"Shared from a turn of this session":"Shared by a service"},"expiryLabel",0,function(a,b=Date.now()){return"revoked"===a.state?`Revoked ${(0,h.formatSessionDate)(a.revoked_at??a.expires_at)}`:"expired"===a.state||a.expires_at<=b?`Expired ${(0,h.formatSessionDate)(a.expires_at)}`:`Expires ${(0,h.formatSessionDate)(a.expires_at)} (in ${function(a){let b=Math.max(1,Math.round(a/6e4));if(b<60)return`${b} min`;let c=Math.floor(b/60),d=b%60;return d?`${c} h ${d} min`:`${c} h`}(a.expires_at-b)})`},"sessionShares",0,function(a,b){let c=a.filter(a=>a.session_ref===b);return[...c.filter(j).sort((a,b)=>b.created_at-a.created_at),...c.filter(a=>!j(a)).sort((a,b)=>(b.revoked_at??b.expires_at)-(a.revoked_at??a.expires_at))]},"shareCreateAvailability",0,function(a,b){let c=`/bots/${encodeURIComponent(a.agent.id)}/config#session-sharing`;if(!b)return{available:!1,reason:"Share to Slack is unavailable: the share policy could not be loaded.",configHref:null};let d=(0,i.sessionRowActions)(a).find(a=>"ask"===a.action);return d&&!d.availability.available?{available:!1,reason:d.availability.reason.replace(/^Ask from this context is unavailable:/,"Share to Slack is unavailable:"),configHref:null}:"invalid"===b.state?{available:!1,reason:"Share to Slack is unavailable: the share policy file is invalid. Fix it in Config.",configHref:c}:0===b.audiences.length?{available:!1,reason:"Share to Slack needs a Slack channel on the share allowlist. Add one in Config.",configHref:c}:{available:!0}},"shareCreateBody",0,function(a,b,c,d){return{audience:{team_id:a.team_id,channel_id:a.channel_id},ttl_seconds:b,max_turns:c,idempotency_key:d}},"shareFromTurnNote",0,function(a){return a.agent.share_current.supported?a.agent.share_from_turn?"On: a turn Botmancers launches for this Agent can share its own session to an allowlisted channel. Turning it off revokes every live turn context at once.":"Off: no turn of this Agent can share its own session. Sessions can still be shared from the Sessions drawer.":a.agent.share_current.reason??"This runtime cannot share its own session from a turn."},"shareIsLive",0,j,"shareStatusNote",0,function(a){switch(a.status){case"active":return"Slack replies in its thread ask this session (read-only).";case"answering":return"A Slack question is being answered now. The next one waits until it finishes.";case"recovering":return"A question was interrupted by a Botmancers restart. The next Slack question clears it.";case"exhausted":return`All ${a.max_turns} questions are used. Slack questions get the limit notice; create a new share to keep going.`;case"expired":return"Expired: Slack questions get the expired notice. Its history stays here.";case"revoked":return"Revoked: Slack questions get the revoked notice. Its history stays here."}},"threadLabel",0,function(a){return a.thread.posted?`Slack thread posted ${(0,h.formatSessionDate)(a.thread.posted_at??0)}`:"active"===a.state?"Waiting for the Slack relay to post the thread":"No Slack thread was posted"},"turnsLabel",0,function(a){return`${a.turns_used} of ${a.max_turns} question${1===a.max_turns?"":"s"} used`}],23464)},1160,22855,79202,a=>{"use strict";var b=a.i(22151);let c="This computer",d={read_only:"Read only",workspace_write:"Workspace write"},e={workspaces:"Selected workspaces",sessions:"Selected imported sessions",all_provider_sessions:"All sessions this runtime can see"};function f(a){return a.startsWith("/")||"~"===a||a.startsWith("~/")}function g(a){return a.length>1?a.replace(/\/+$/,""):a}b.AGENTS.join("|");let h="/api/runtime-connections",i={connection:"Runtime connection",scope:"Session scope",defaultWorkspace:"Default workspace (optional)",policy:"Policy",homeSession:"Home session (optional)"},j={connection:"The runtime installation or account this Agent uses. Several Agents can share one.",workspaces:"One absolute path per line. An empty scope never means unrestricted.",sessions:"Only this Agent’s own Botmancers sessions can be selected.",noSessions:"This Agent has no sessions yet. Choose workspaces or all sessions for now.",allSessions:"Every session this runtime can see. Choose this only on purpose.",defaultWorkspace:"Where new sessions start. Convenience only — not a permission.",resumeEdits:"Needs Workspace write.",homeSession:"A stable session to return to. Must be one of this Agent’s sessions.",addConnection:"Stores a name and host only. Credentials stay with the runtime."},k="Loading runtime connections…",l="Couldn't load runtime connections — retry.";function m(){return{status:"loading",connections:[],error:""}}function n(a){return`${a.label} \xb7 ${b.AGENT_LABELS[a.provider]??a.provider}`}function o(a){if("object"!=typeof a||null===a)return null;let b=a.connections;if(!Array.isArray(b))return null;let c=[];for(let a of b){if("object"!=typeof a||null===a||"string"!=typeof a.id||"string"!=typeof a.provider||"string"!=typeof a.label)return null;c.push({id:a.id,provider:a.provider,label:a.label,host:"string"==typeof a.host?a.host:"",agent_count:"number"==typeof a.agent_count?a.agent_count:void 0})}return c}function p(a){let b=[];for(let c of a.split("\n")){let a=c.trim();a&&!b.includes(a)&&b.push(a)}return b}function q(a){return"workspaces"===a.scopeKind?{kind:"workspaces",workspaces:p(a.workspaces)}:"sessions"===a.scopeKind?{kind:"sessions",sessions:a.sessions}:{kind:a.scopeKind}}function r(a){return{mode:a.policyMode,allow_new_sessions:a.allowNewSessions,allow_resume_with_edits:a.allowResumeWithEdits}}a.s(["CONNECTIONS_ENDPOINT",0,h,"CONNECTIONS_ERROR_COPY",0,l,"CONNECTIONS_LOADING_COPY",0,k,"DEFAULT_REGISTRATION_FORM",0,{connectionId:"",scopeKind:"",workspaces:"",sessions:[],defaultWorkspace:"",policyMode:"read_only",allowNewSessions:!0,allowResumeWithEdits:!1,homeSessionId:""},"HINTS",0,j,"LABELS",0,i,"connectionOptionLabel",0,n,"hasRegistrationErrors",0,function(a){return Object.keys(a.errors).length>0},"initialConnectionListState",0,m,"parseConnectionList",0,o,"registrationCreateBody",0,function(a,b){let c={name:String(a??"").trim(),runtime_connection_id:b.connectionId,session_scope:q(b),policy:r(b)},d=b.defaultWorkspace.trim();return d&&(c.default_workspace=d),c},"registrationFormFromBot",0,function(a){let b=a.session_scope??null;return{connectionId:a.runtime_connection_id??"",scopeKind:b?.kind??"",workspaces:b?.kind==="workspaces"?b.workspaces.join("\n"):"",sessions:b?.kind==="sessions"?[...b.sessions]:[],defaultWorkspace:a.default_workspace??"",policyMode:a.policy?.mode??"read_only",allowNewSessions:!a.policy||a.policy.allow_new_sessions,allowResumeWithEdits:!!a.policy&&a.policy.allow_resume_with_edits,homeSessionId:a.home_session_id??""}},"registrationFormView",0,function(a,b){let c={};a.connectionId||(c.connection="Pick a runtime connection.");let d=p(a.workspaces);a.scopeKind?"workspaces"===a.scopeKind?0===d.length?c.workspaces="Add at least one workspace.":d.every(f)||(c.workspaces="Workspaces must be absolute paths (or start with ~/)."):"sessions"===a.scopeKind&&0===a.sessions.length&&(c.sessions="Select at least one session."):c.scope="Choose a session scope.";let e=a.defaultWorkspace.trim();e&&(f(e)?"workspaces"!==a.scopeKind||c.workspaces||d.some(a=>{let b,c;return b=g(a),b===(c=g(e))||c.startsWith("/"===b?"/":`${b}/`)})||(c.defaultWorkspace="The default workspace must be inside one of the selected workspaces."):c.defaultWorkspace="The default workspace must be an absolute path (or start with ~/)."),a.allowResumeWithEdits&&"workspace_write"!==a.policyMode&&(c.policy="Resume with edits needs the Workspace write policy.");let h="",i=!1;return"ready"!==b.status&&(i=!0,h="error"===b.status?l:""),{errors:c,submitDisabled:i,blocker:h}},"registrationPatchBody",0,function(a,b){return{id:a,runtime_connection_id:b.connectionId,session_scope:q(b),default_workspace:b.defaultWorkspace.trim(),policy:r(b),home_session_id:b.homeSessionId}},"registrationReadView",0,function(a,c){var f;let g,h=[{key:"connection",label:i.connection,value:(g=a.runtime_connection)?`${g.label} (${(0,b.agentLabel)(g.provider)} \xb7 ${g.host})`:"Not set"},{key:"scope",label:i.scope,value:function(a,b){if(!a)return"Not set — this Agent cannot launch until a scope is chosen.";if("all_provider_sessions"===a.kind)return e.all_provider_sessions;if("workspaces"===a.kind)return`${e.workspaces}: ${a.workspaces.join(", ")}`;let c=a.sessions.map(a=>b?.find(b=>b.ref===a)?.title??a);return`${e.sessions}: ${c.join(", ")}`}(a.session_scope,c)},{key:"defaultWorkspace",label:"Default workspace",value:a.default_workspace||"None"},{key:"policy",label:i.policy,value:(f=a.policy)?[d[f.mode],f.allow_new_sessions?"new sessions allowed":"no new sessions",f.allow_resume_with_edits?"resume with edits allowed":"no resume with edits"].join(" · "):"Not set"}],j=[];return h.push({key:"homeSession",label:"Home session",value:a.home_session_id?c?.find(b=>b.ref===a.home_session_id)?.title??a.home_session_id:"None"}),"connection"===a.launch_blocker?j.push("Choose a runtime connection before this Agent can run."):"session_scope"===a.launch_blocker?j.push("Choose a session scope before this Agent can run."):"agent"===a.launch_blocker&&j.push("This Agent has an unsupported Agent type."),{rows:h,notices:j}}],1160);var s=a.i(87924),t=a.i(72131),u=a.i(20851);let v={modal:{fieldset:"agent-fieldset reg-fieldset",legend:"field-legend",label:"",picks:"runtime-picks",pick:"runtime-pick",stack:"reg-stack",control:"reg-control",input:"",hint:"runtime-hint",error:"form-error reg-error",button:"runtime-retry",note:"runtime-note"},config:{fieldset:"agent-fieldset reg-fieldset",legend:"block text-sm cfg-muted mt-3 mb-1 p-0",label:"block text-sm cfg-muted mt-3 mb-1",picks:"flex flex-wrap gap-x-4 gap-y-1 text-sm cfg-muted",pick:"text-sm cfg-muted",stack:"flex flex-col gap-1 text-sm cfg-muted",control:"cfg-input text-sm",input:"cfg-input text-sm",hint:"mt-1 text-xs cfg-faint",error:"mt-1 text-sm cfg-error",button:"cfg-link text-sm",note:"text-sm cfg-muted mt-1"}};function w({id:a,message:b,variant:c}){return b?(0,s.jsx)("p",{id:a,className:v[c].error,role:"alert",children:b}):null}function x({idPrefix:a,variant:b,onAdd:d}){let e=v[b],[f,g]=(0,t.useState)(!1),[h,i]=(0,t.useState)(u.AGENT_OPTIONS[0].value),[k,l]=(0,t.useState)(""),[m,n]=(0,t.useState)(""),[o,p]=(0,t.useState)(""),[q,r]=(0,t.useState)(!1),w=async()=>{if(q)return;r(!0),p("");let a=await d({provider:h,label:k,host:m.trim()||c});(r(!1),"string"==typeof a)?p(a):(g(!1),l(""),n(""))};return f?(0,s.jsxs)("div",{id:`${a}-add-connection`,className:"reg-add-connection",role:"group","aria-label":"Add connection",children:[(0,s.jsx)("label",{className:e.label,htmlFor:`${a}-add-provider`,children:"Provider"}),(0,s.jsx)("select",{id:`${a}-add-provider`,className:e.control,value:h,onChange:a=>i(a.target.value),children:u.AGENT_OPTIONS.map(a=>(0,s.jsx)("option",{value:a.value,children:a.label},a.value))}),(0,s.jsx)("label",{className:e.label,htmlFor:`${a}-add-label`,children:"Connection name"}),(0,s.jsx)("input",{id:`${a}-add-label`,type:"text",className:e.input||void 0,value:k,placeholder:"Codex on my laptop",onChange:a=>l(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),w())}}),(0,s.jsx)("label",{className:e.label,htmlFor:`${a}-add-host`,children:"Host"}),(0,s.jsx)("input",{id:`${a}-add-host`,type:"text",className:e.input||void 0,value:m,placeholder:c,"aria-describedby":`${a}-add-hint`,onChange:a=>n(a.target.value)}),(0,s.jsx)("p",{id:`${a}-add-hint`,className:e.hint,children:j.addConnection}),o?(0,s.jsx)("p",{className:e.error,role:"alert",children:o}):null,(0,s.jsxs)("div",{className:"reg-actions",children:[(0,s.jsx)("button",{type:"button",className:e.button,onClick:()=>void w(),disabled:q,children:q?"Adding…":"Add"}),(0,s.jsx)("button",{type:"button",className:e.button,"aria-expanded":"true",onClick:()=>g(!1),children:"Cancel"})]})]}):(0,s.jsx)("button",{type:"button",className:e.button,"aria-expanded":"false","aria-controls":`${a}-add-connection`,onClick:()=>g(!0),children:"Add connection…"})}a.s(["RegistrationFields",0,function({idPrefix:a,variant:b,form:c,onChange:f,view:g,showErrors:h,connections:m,onRetryConnections:o,onAddConnection:p,workspacePlaceholder:q,workspaceHint:r,sessions:t,includeHomeSession:u}){let y=v[b],z=a=>h?g.errors[a]:void 0,A=b=>`${a}-${b}-error`,B=(a,...b)=>[...b,z(a)?A(a):""].filter(Boolean).join(" ")||void 0,C=!!(t&&t.length>0);return(0,s.jsxs)("div",{className:"registration-fields","data-registration":b,children:[(0,s.jsxs)("fieldset",{className:y.fieldset,"data-field":"connection","aria-describedby":B("connection",`${a}-connection-hint`),children:[(0,s.jsx)("legend",{className:y.legend,id:`${a}-connection-legend`,children:i.connection}),"loading"===m.status?(0,s.jsx)("p",{className:y.note,role:"status",children:k}):"error"===m.status?(0,s.jsxs)("p",{className:y.note,role:"status",children:[l," ",(0,s.jsx)("button",{type:"button",className:y.button,onClick:o,children:"Retry"})]}):(0,s.jsxs)("select",{id:`${a}-connection`,className:y.control,"aria-labelledby":`${a}-connection-legend`,"aria-required":"true","aria-invalid":!!z("connection")||void 0,value:c.connectionId,onChange:a=>f({connectionId:a.target.value}),children:[(0,s.jsx)("option",{value:"",disabled:!0,children:"Select a connection…"}),m.connections.map(a=>(0,s.jsx)("option",{value:a.id,children:n(a)},a.id))]}),(0,s.jsx)("p",{id:`${a}-connection-hint`,className:y.hint,children:j.connection}),(0,s.jsx)(w,{id:A("connection"),message:z("connection"),variant:b}),"ready"===m.status?(0,s.jsx)(x,{idPrefix:a,variant:b,onAdd:async a=>{let b=await p(a);return"string"!=typeof b&&f({connectionId:b.id}),b}}):null]}),(0,s.jsxs)("fieldset",{className:y.fieldset,"data-field":"scope",children:[(0,s.jsx)("legend",{className:y.legend,id:`${a}-scope-legend`,children:i.scope}),(0,s.jsx)("div",{className:y.stack,role:"radiogroup","aria-labelledby":`${a}-scope-legend`,"aria-required":"true","aria-describedby":B("scope"),children:["workspaces","sessions","all_provider_sessions"].map(b=>(0,s.jsxs)("label",{className:y.pick,children:[(0,s.jsx)("input",{type:"radio",name:`${a}-scope`,value:b,checked:c.scopeKind===b,disabled:"sessions"===b&&!C,onChange:()=>f({scopeKind:b})})," "+e[b]]},b))}),C?null:(0,s.jsx)("p",{className:y.hint,children:j.noSessions}),(0,s.jsx)(w,{id:A("scope"),message:z("scope"),variant:b}),"workspaces"===c.scopeKind?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("label",{className:y.label,htmlFor:`${a}-workspaces`,children:"Workspaces"}),(0,s.jsx)("textarea",{id:`${a}-workspaces`,className:y.input||void 0,rows:2,value:c.workspaces,placeholder:"/Users/you/work/project","aria-required":"true","aria-invalid":!!z("workspaces")||void 0,"aria-describedby":B("workspaces",`${a}-workspaces-hint`),onChange:a=>f({workspaces:a.target.value})}),(0,s.jsx)("p",{id:`${a}-workspaces-hint`,className:y.hint,children:j.workspaces}),(0,s.jsx)(w,{id:A("workspaces"),message:z("workspaces"),variant:b})]}):null,"sessions"===c.scopeKind&&t?(0,s.jsxs)("div",{className:y.stack,role:"group","aria-label":"Sessions in scope","aria-describedby":B("sessions",`${a}-sessions-hint`),children:[t.map(a=>(0,s.jsxs)("label",{className:y.pick,children:[(0,s.jsx)("input",{type:"checkbox",checked:c.sessions.includes(a.ref),onChange:b=>f({sessions:b.target.checked?[...c.sessions,a.ref]:c.sessions.filter(b=>b!==a.ref)})}),` ${a.title} (${a.status})`]},a.ref)),(0,s.jsx)("p",{id:`${a}-sessions-hint`,className:y.hint,children:j.sessions}),(0,s.jsx)(w,{id:A("sessions"),message:z("sessions"),variant:b})]}):null,"all_provider_sessions"===c.scopeKind?(0,s.jsx)("p",{className:y.hint,children:j.allSessions}):null]}),(0,s.jsxs)("div",{"data-field":"default-workspace",children:[(0,s.jsx)("label",{className:y.label,htmlFor:`${a}-default-workspace`,children:i.defaultWorkspace}),(0,s.jsx)("input",{id:`${a}-default-workspace`,type:"text",className:y.input||void 0,value:c.defaultWorkspace,placeholder:q,"aria-invalid":!!z("defaultWorkspace")||void 0,"aria-describedby":B("defaultWorkspace",`${a}-default-workspace-hint`,`${a}-default-workspace-note`),onChange:a=>f({defaultWorkspace:a.target.value})}),(0,s.jsx)("p",{id:`${a}-default-workspace-hint`,className:y.hint,children:r}),(0,s.jsx)("p",{id:`${a}-default-workspace-note`,className:y.hint,children:j.defaultWorkspace}),(0,s.jsx)(w,{id:A("defaultWorkspace"),message:z("defaultWorkspace"),variant:b})]}),(0,s.jsxs)("fieldset",{className:y.fieldset,"data-field":"policy",children:[(0,s.jsx)("legend",{className:y.legend,id:`${a}-policy-legend`,children:i.policy}),(0,s.jsx)("div",{className:y.picks,role:"radiogroup","aria-labelledby":`${a}-policy-legend`,children:["read_only","workspace_write"].map(b=>(0,s.jsxs)("label",{className:y.pick,children:[(0,s.jsx)("input",{type:"radio",name:`${a}-policy`,value:b,checked:c.policyMode===b,onChange:()=>f("read_only"===b?{policyMode:b,allowResumeWithEdits:!1}:{policyMode:b})})," "+d[b]]},b))}),(0,s.jsxs)("div",{className:y.stack,children:[(0,s.jsxs)("label",{className:y.pick,children:[(0,s.jsx)("input",{type:"checkbox",checked:c.allowNewSessions,onChange:a=>f({allowNewSessions:a.target.checked})})," Allow new sessions"]}),(0,s.jsxs)("label",{className:y.pick,children:[(0,s.jsx)("input",{type:"checkbox",checked:c.allowResumeWithEdits,disabled:"workspace_write"!==c.policyMode,"aria-describedby":`${a}-resume-hint`,onChange:a=>f({allowResumeWithEdits:a.target.checked})})," Allow resume with edits"]}),(0,s.jsx)("p",{id:`${a}-resume-hint`,className:y.hint,children:j.resumeEdits})]}),(0,s.jsx)(w,{id:A("policy"),message:z("policy"),variant:b})]}),u?(0,s.jsxs)("div",{"data-field":"home-session",children:[(0,s.jsx)("label",{className:y.label,htmlFor:`${a}-home-session`,children:i.homeSession}),(0,s.jsxs)("select",{id:`${a}-home-session`,className:y.control,value:c.homeSessionId,"aria-describedby":`${a}-home-session-hint`,onChange:a=>f({homeSessionId:a.target.value}),children:[(0,s.jsx)("option",{value:"",children:"None"}),(t??[]).map(a=>(0,s.jsx)("option",{value:a.ref,children:`${a.title} (${a.status})`},a.ref))]}),(0,s.jsx)("p",{id:`${a}-home-session-hint`,className:y.hint,children:j.homeSession})]}):null]})}],22855),a.s(["useRuntimeConnections",0,function(){let[a,b]=(0,t.useState)(()=>m()),[c,d]=(0,t.useState)(0);return(0,t.useEffect)(()=>{let a=!1;return fetch(h,{cache:"no-store"}).then(async c=>{let d=c.ok?o(await c.json().catch(()=>null)):null;a||b(d?{status:"ready",connections:d,error:""}:{status:"error",connections:[],error:`HTTP ${c.status}`})}).catch(c=>{a||b({status:"error",connections:[],error:c instanceof Error?c.message:String(c)})}),()=>{a=!0}},[c]),{state:a,retry:(0,t.useCallback)(()=>{b(m()),d(a=>a+1)},[]),add:(0,t.useCallback)(async a=>{let c=await fetch(h,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),d=await c.json().catch(()=>null);if(!c.ok)return"string"==typeof d?.error?d.error:"Failed to add the connection";let e=o({connections:[d]})?.[0];return e?(b(a=>({status:"ready",connections:[...a.connections,e],error:""})),e):"Failed to add the connection"},[])}}],79202)},80219,a=>{"use strict";let b="imported",c=/^[A-Za-z0-9_-]{1,128}$/;function d(a){let d=new URLSearchParams(a).get(b);if(null===d)return null;let e=d.trim();return c.test(e)?e:""}function e(a){return`/bots/${encodeURIComponent(a)}/config`}async function f(a,b,c){let f=d(a);if(null===f)return{kind:"none"};if(!f)return{kind:"missing"};if(f===b)return{kind:"stay"};try{return await c(f)?{kind:"open",path:e(f)}:{kind:"missing"}}catch{return{kind:"missing"}}}a.s(["HANDOFF_STATUS_PATH",0,"/api/marketplace-handoff/status","IMPORT_RETURN_QUERY",0,b,"handoffStartPath",0,function(a,b){return`/api/marketplace-handoff?return=${encodeURIComponent(a+b)}`},"importedBotId",0,d,"importedConfigPath",0,e,"marketImportView",0,function(a){switch(a){case"checking":return{busy:!0,tone:"muted",message:"Checking Grok Marketplace…"};case"redirecting":return{busy:!0,tone:"muted",message:"Opening Grok Marketplace…"};case"unavailable":return{busy:!1,tone:"error",message:"Grok Marketplace isn't configured. Set CLONE_MARKET_URL on the Botmancers server."};case"failed":return{busy:!1,tone:"error",message:"Couldn't reach Botmancers to start the import. Try again."};case"missing":return{busy:!1,tone:"error",message:"Imported agent not found. The import may not have completed."};default:return{busy:!1,tone:"muted",message:"Imports a new agent and opens its Config. This agent is not changed."}}},"resolveImportReturn",0,f])}];
2
2
 
3
3
  //# sourceMappingURL=_1cvuhjt._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[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)},69789,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
2
+
3
+ //# sourceMappingURL=_1lkd0ui._.js.map