botmancers 0.10.1 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/README.md +17 -15
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +2 -2
  7. package/app/.next/server/app/_global-error.html +1 -1
  8. package/app/.next/server/app/_global-error.rsc +1 -1
  9. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/app/.next/server/app/_not-found.html +1 -1
  13. package/app/.next/server/app/_not-found.rsc +1 -1
  14. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  16. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  17. package/app/.next/server/app/api/bots/[id]/activity/route.js.nft.json +1 -1
  18. package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
  19. package/app/.next/server/app/api/bots/[id]/conversations/[conversationId]/route.js +3 -3
  20. package/app/.next/server/app/api/bots/[id]/conversations/[conversationId]/route.js.nft.json +1 -1
  21. package/app/.next/server/app/api/bots/[id]/conversations/route.js +3 -3
  22. package/app/.next/server/app/api/bots/[id]/conversations/route.js.nft.json +1 -1
  23. package/app/.next/server/app/api/bots/[id]/overview/route.js +2 -2
  24. package/app/.next/server/app/api/bots/[id]/overview/route.js.nft.json +1 -1
  25. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js +2 -2
  26. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js.nft.json +1 -1
  27. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -1
  28. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js +2 -2
  29. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js.nft.json +1 -1
  30. package/app/.next/server/app/api/bots/[id]/sessions/route.js +2 -2
  31. package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -1
  32. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js +1 -1
  33. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js.nft.json +1 -1
  34. package/app/.next/server/app/api/bots/[id]/share-policy/route.js +2 -2
  35. package/app/.next/server/app/api/bots/[id]/share-policy/route.js.nft.json +1 -1
  36. package/app/.next/server/app/api/bots/[id]/skill/route.js.nft.json +1 -1
  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 +3 -3
  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 +4 -4
  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 +1 -1
  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 +4 -4
  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 +3 -3
  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-capacity/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/runtime-connections/route.js.nft.json +1 -1
  68. package/app/.next/server/app/api/service-grants/route.js +1 -1
  69. package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -1
  70. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js +2 -2
  71. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/shares/route.js +2 -2
  73. package/app/.next/server/app/api/shares/route.js.nft.json +1 -1
  74. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +5 -5
  75. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +5 -5
  77. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js +2 -2
  79. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js +5 -5
  81. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/v0/agents/[agentId]/route.js +5 -5
  83. package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -1
  84. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +5 -5
  85. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +5 -5
  87. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/v0/agents/route.js +5 -5
  89. package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -1
  90. package/app/.next/server/app/api/v0/capabilities/route.js +5 -5
  91. package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -1
  92. package/app/.next/server/app/api/v0/conversations/[id]/route.js +2 -2
  93. package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +5 -5
  95. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -1
  96. package/app/.next/server/app/api/v0/exchanges/[id]/route.js +5 -5
  97. package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/v0/exchanges/route.js +5 -5
  99. package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/v0/mcp/route.js +4 -4
  101. package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
  102. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js +5 -5
  103. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js +5 -5
  105. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js +5 -5
  107. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/v0/requests/[id]/route.js +2 -2
  109. package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +5 -5
  111. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js +5 -5
  113. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js +5 -5
  115. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js +5 -5
  117. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js +5 -5
  119. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/v0/shares/current/route.js +5 -5
  121. package/app/.next/server/app/api/v0/shares/current/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/v0/shares/route.js +5 -5
  123. package/app/.next/server/app/api/v0/shares/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +2 -2
  125. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
  126. package/app/.next/server/app/api/wakes/[id]/decision/route.js +2 -2
  127. package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/wakes/[id]/retry/route.js +2 -2
  129. package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
  130. package/app/.next/server/app/exchanges.html +1 -1
  131. package/app/.next/server/app/exchanges.rsc +1 -1
  132. package/app/.next/server/app/exchanges.segments/_full.segment.rsc +1 -1
  133. package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +1 -1
  134. package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +1 -1
  135. package/app/.next/server/app/index.html +1 -1
  136. package/app/.next/server/app/index.rsc +1 -1
  137. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  138. package/app/.next/server/app/index.segments/_full.segment.rsc +1 -1
  139. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  140. package/app/.next/server/app/settings.html +1 -1
  141. package/app/.next/server/app/settings.rsc +1 -1
  142. package/app/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  143. package/app/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  144. package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  145. package/app/.next/server/app/threads/[id]/route.js.nft.json +1 -1
  146. package/app/.next/server/chunks/[root-of-the-server]__1273j55._.js +52 -0
  147. package/app/.next/server/chunks/[root-of-the-server]__1fdy1d8._.js +3 -0
  148. package/app/.next/server/chunks/[root-of-the-server]__1n7hlu8._.js +46 -0
  149. package/app/.next/server/chunks/_0061c2q._.js +1 -1
  150. package/app/.next/server/chunks/_031id45._.js +3 -0
  151. package/app/.next/server/chunks/_04o493a._.js +3 -0
  152. package/app/.next/server/chunks/_06yp-l-._.js +3 -0
  153. package/app/.next/server/chunks/_0bl1uw-._.js +3 -0
  154. package/app/.next/server/chunks/_0gh03eo._.js +3 -0
  155. package/app/.next/server/chunks/_0h0j5ta._.js +3 -0
  156. package/app/.next/server/chunks/_0hzb8hh._.js +3 -0
  157. package/app/.next/server/chunks/_0oodw7g._.js +3 -0
  158. package/app/.next/server/chunks/_0owd_4q._.js +3 -0
  159. package/app/.next/server/chunks/_0venewj._.js +3 -0
  160. package/app/.next/server/chunks/_0wzia1p._.js +3 -0
  161. package/app/.next/server/chunks/_1-5mthb._.js +1 -1
  162. package/app/.next/server/chunks/_1-8493l._.js +3 -0
  163. package/app/.next/server/chunks/_1bvoyii._.js +3 -0
  164. package/app/.next/server/chunks/_1gyq3w2._.js +3 -0
  165. package/app/.next/server/chunks/_1j3c311._.js +3 -0
  166. package/app/.next/server/chunks/{_1ey6l4p._.js → _1k74ggt._.js} +2 -2
  167. package/app/.next/server/chunks/_1l_t4_r._.js +3 -0
  168. package/app/.next/server/chunks/_1lac7c3._.js +3 -0
  169. package/app/.next/server/chunks/_1mlmzwb._.js +3 -0
  170. package/app/.next/server/chunks/_1rg79tr._.js +3 -0
  171. package/app/.next/server/chunks/_1s5qnlr._.js +3 -0
  172. package/app/.next/server/chunks/{_1x4dqzv._.js → _1u-wiq_._.js} +2 -2
  173. package/app/.next/server/chunks/_1xaqb38._.js +3 -0
  174. package/app/.next/server/chunks/_1zw-w5h._.js +3 -0
  175. package/app/.next/server/chunks/lib_0-opbv7._.js +30 -30
  176. package/app/.next/server/chunks/lib_0aejojj._.js +30 -30
  177. package/app/.next/server/chunks/lib_0al5wbc._.js +30 -30
  178. package/app/.next/server/chunks/lib_0il0ml1._.js +30 -30
  179. package/app/.next/server/chunks/lib_0iujsdg._.js +30 -30
  180. package/app/.next/server/chunks/lib_15a9ejf._.js +35 -28
  181. package/app/.next/server/chunks/lib_19pzc33._.js +35 -28
  182. package/app/.next/server/chunks/lib_1a4ucxv._.js +30 -30
  183. package/app/.next/server/chunks/lib_1dehbst._.js +30 -30
  184. package/app/.next/server/chunks/lib_1h919zb._.js +3 -0
  185. package/app/.next/server/chunks/lib_1z4vnh4._.js +30 -30
  186. package/app/.next/server/chunks/lib_1z7d95m._.js +35 -28
  187. package/app/.next/server/chunks/lib_db_ts_1ttuckb._.js +9 -2
  188. package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +1 -1
  189. package/app/.next/server/chunks/lib_service-api_ts_18eok4w._.js +5 -5
  190. package/app/.next/server/chunks/lib_slack-runtime_ts_0fgsejy._.js +6 -6
  191. package/app/.next/server/middleware-build-manifest.js +3 -3
  192. package/app/.next/server/pages/404.html +1 -1
  193. package/app/.next/server/pages/500.html +1 -1
  194. package/app/.next/server/server-reference-manifest.js +1 -1
  195. package/app/.next/server/server-reference-manifest.json +1 -1
  196. package/app/BUILD_INFO.json +2 -2
  197. package/app/package.json +1 -1
  198. package/app/server.js +1 -1
  199. package/dist/contract.js +2 -2
  200. package/package.json +1 -1
  201. package/schemas/botmancers.mcp.v2.tools.json +15 -50
  202. package/skills/botmancers-collaboration/SKILL.md +10 -10
  203. package/skills/botmancers-collaboration/references/workflows.md +20 -14
  204. package/app/.next/server/chunks/[root-of-the-server]__07q5mnr._.js +0 -3
  205. package/app/.next/server/chunks/[root-of-the-server]__1280ke1._.js +0 -46
  206. package/app/.next/server/chunks/[root-of-the-server]__1jxwu9_._.js +0 -52
  207. package/app/.next/server/chunks/_04e2bgj._.js +0 -3
  208. package/app/.next/server/chunks/_05po7b4._.js +0 -3
  209. package/app/.next/server/chunks/_06sxx0e._.js +0 -3
  210. package/app/.next/server/chunks/_0ar2ooe._.js +0 -3
  211. package/app/.next/server/chunks/_0fmotaz._.js +0 -3
  212. package/app/.next/server/chunks/_0kpfto_._.js +0 -3
  213. package/app/.next/server/chunks/_0lm6uis._.js +0 -3
  214. package/app/.next/server/chunks/_0mpu5tl._.js +0 -3
  215. package/app/.next/server/chunks/_0u9cfq9._.js +0 -3
  216. package/app/.next/server/chunks/_0ul8k7g._.js +0 -3
  217. package/app/.next/server/chunks/_1-60d3o._.js +0 -3
  218. package/app/.next/server/chunks/_11-q8k1._.js +0 -3
  219. package/app/.next/server/chunks/_133y3b0._.js +0 -3
  220. package/app/.next/server/chunks/_167960a._.js +0 -3
  221. package/app/.next/server/chunks/_17vgjlt._.js +0 -3
  222. package/app/.next/server/chunks/_1amx9_4._.js +0 -3
  223. package/app/.next/server/chunks/_1b01v-_._.js +0 -3
  224. package/app/.next/server/chunks/_1c-g4gq._.js +0 -3
  225. package/app/.next/server/chunks/_1ess5if._.js +0 -3
  226. package/app/.next/server/chunks/_1i0zod4._.js +0 -3
  227. package/app/.next/server/chunks/_1nlg4x_._.js +0 -3
  228. package/app/.next/server/chunks/_1z0qbzc._.js +0 -3
  229. package/app/.next/server/chunks/lib_0i8cm07._.js +0 -3
  230. /package/app/.next/static/{eBmHBBldHWytVvYPu0zHc → 45V8A9u4-Y-aZNxovpZCu}/_buildManifest.js +0 -0
  231. /package/app/.next/static/{eBmHBBldHWytVvYPu0zHc → 45V8A9u4-Y-aZNxovpZCu}/_clientMiddlewareManifest.js +0 -0
  232. /package/app/.next/static/{eBmHBBldHWytVvYPu0zHc → 45V8A9u4-Y-aZNxovpZCu}/_ssgManifest.js +0 -0
@@ -1590,7 +1590,14 @@ module.exports=[62294,18966,64974,11626,40596,28420,35613,30098,e=>{"use strict"
1590
1590
  BEGIN
1591
1591
  SELECT RAISE(ABORT, 'session_pin_events are append-only');
1592
1592
  END;
1593
- `)}}];function ek(e){return e.prepare("PRAGMA table_info(bots)").all().some(e=>"runtime_connection_id"===e.name)?"COALESCE(bot.runtime_connection_id, 'rc-local-' || b.adapter)":"'rc-local-' || b.adapter"}let ef=new WeakMap;function eh(e){let t=ef.get(e);if(!t){t=new Set,ef.set(e,t);let n=t;e.function("engine_event_purge_authorized",{deterministic:!1},e=>"string"==typeof e&&n.has(e)?1:0)}return t}function ew(e,t={}){eh(e),e.exec(`
1593
+ `)}},{version:21,name:"wake_edit_approval_reason_code",up:e=>{let t=["invalid_envelope","invalid_reference","unsupported_policy","target_is_group","target_not_found","target_ambiguous","target_unconfigured","target_unavailable","limit_exceeded","reviewer_not_independent","depth_exceeded","root_budget_exhausted","untracked_lineage","grant_denied","edit_approval_required"],n=t.map(()=>"?").join(", "),i=e.prepare(`SELECT id, work_request_id, reason FROM wakes WHERE reason_code IS NOT NULL AND reason_code NOT IN (${n})`).all(...t);if(0===i.length)return;let r=Date.now(),a=e.prepare("UPDATE wakes SET reason_code = 'edit_approval_required', updated_at = ? WHERE id = ?"),o=e.prepare(`
1594
+ UPDATE work_requests SET state_reason = 'edit_approval_required' || substr(state_reason, instr(state_reason, ':')),
1595
+ version = version + 1, updated_at = ?
1596
+ WHERE id = ? AND state = 'blocked' AND instr(state_reason, ':') > 0
1597
+ `),_=e.prepare(`
1598
+ INSERT INTO engine_events (id, request_id, sequence, attempt_id, type, data, created_at)
1599
+ SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, NULL, 'wake_reblocked', ?, ? FROM engine_events WHERE request_id = ?
1600
+ `);for(let e of i)if(a.run(r,e.id),e.work_request_id&&1===o.run(r,e.work_request_id).changes){let t=JSON.stringify({reason_code:"edit_approval_required",reason:e.reason});_.run((0,s.randomUUID)(),e.work_request_id,t,r,e.work_request_id)}}}];function ek(e){return e.prepare("PRAGMA table_info(bots)").all().some(e=>"runtime_connection_id"===e.name)?"COALESCE(bot.runtime_connection_id, 'rc-local-' || b.adapter)":"'rc-local-' || b.adapter"}let ef=new WeakMap;function eh(e){let t=ef.get(e);if(!t){t=new Set,ef.set(e,t);let n=t;e.function("engine_event_purge_authorized",{deterministic:!1},e=>"string"==typeof e&&n.has(e)?1:0)}return t}function ew(e,t={}){eh(e),e.exec(`
1594
1601
  CREATE TABLE IF NOT EXISTS schema_migrations (
1595
1602
  version INTEGER PRIMARY KEY,
1596
1603
  name TEXT NOT NULL,
@@ -1651,7 +1658,7 @@ module.exports=[62294,18966,64974,11626,40596,28420,35613,30098,e=>{"use strict"
1651
1658
  UNION SELECT destination_request_id AS id FROM session_exchanges WHERE id IN ${d} AND destination_request_id IS NOT NULL`,_(r),_(r))),u=o(i,n(`SELECT id FROM work_requests WHERE parent_request_id IN ${d} OR root_request_id IN ${d}`,_(i),_(i))),c=o(i,n(`SELECT request_id AS id FROM work_attempts WHERE id IN ${d}`,_(a))),l=o(a,n(`SELECT id FROM work_attempts WHERE request_id IN ${d} OR resumed_session_binding_id IN ${d}`,_(i),_(s))),T=o(s,n(`SELECT id FROM session_bindings WHERE request_id IN ${d} OR source_attempt_id IN ${d}`,_(i),_(a)));if(!e&&!E&&!u&&!c&&!l&&!T)break}(function(e,t,...n){let i=e.prepare(`SELECT id FROM session_exchanges WHERE ${t}`).all(...n).map(e=>e.id);if(0===i.length)return;let r=eh(e);for(let e of i)r.add(e);try{e.prepare("DELETE FROM session_exchange_events WHERE exchange_id IN (SELECT value FROM json_each(?))").run(JSON.stringify(i))}finally{r.clear()}e.prepare("DELETE FROM session_exchanges WHERE id IN (SELECT value FROM json_each(?))").run(JSON.stringify(i))})(e,`id IN ${d}`,_(r)),e.prepare(`DELETE FROM conversation_events WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM finalizations WHERE implementation_request_id IN ${d} OR review_request_id IN ${d} OR decision_request_id IN ${d}`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM candidate_manifests WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM attempt_finalization_baselines WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM conversation_projection_cursors WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM wake_safety_decisions WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM dispatch_leases WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM attempt_launch_intents WHERE request_id IN ${d}`).run(_(i)),e.prepare(`DELETE FROM dispatch_attention WHERE request_id IN ${d}`).run(_(i));let E=eh(e);for(let e of i)E.add(e);try{e.prepare(`DELETE FROM engine_events WHERE request_id IN ${d}`).run(_(i))}finally{E.clear()}for(eB(e,`origin = 'binding' AND binding_id IN ${d}`,_(s)),e.prepare(`UPDATE provider_sessions SET binding_id = NULL WHERE binding_id IN ${d}`).run(_(s)),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare(`DELETE FROM usage_samples WHERE attempt_id IN ${d}`).run(_(a));a.size>0||s.size>0;){let t=n(`SELECT id FROM session_bindings WHERE id IN ${d}
1652
1659
  AND NOT EXISTS (SELECT 1 FROM work_attempts a WHERE a.resumed_session_binding_id = session_bindings.id)`,_(s));for(let n of t)e.prepare("DELETE FROM session_bindings WHERE id = ?").run(n),s.delete(n);let i=n(`SELECT id FROM work_attempts WHERE id IN ${d}
1653
1660
  AND NOT EXISTS (SELECT 1 FROM session_bindings b WHERE b.source_attempt_id = work_attempts.id)`,_(a));for(let t of i)e.prepare("DELETE FROM work_attempts WHERE id = ?").run(t),a.delete(t);if(0===t.length&&0===i.length)throw Error("Engine records could not be removed: unexpected attempt/binding reference cycle.")}for(let t of(e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (SELECT id FROM wakes WHERE work_request_id IN ${d} OR parent_request_id IN ${d} OR root_request_id IN ${d})`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM wakes WHERE work_request_id IN ${d} OR parent_request_id IN ${d} OR root_request_id IN ${d}`).run(_(i),_(i),_(i)),e.prepare(`DELETE FROM terminal_followups WHERE request_id IN ${d}`).run(_(i)),n(`SELECT id FROM work_requests WHERE id IN ${d} ORDER BY depth DESC`,_(i))))e.prepare("DELETE FROM work_requests WHERE id = ?").run(t)}function eB(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())return;let i=JSON.stringify(e.prepare(`SELECT id FROM provider_sessions WHERE ${t}`).all(...n).map(e=>e.id));e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_session_events WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_session_turns WHERE session_ref IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM provider_sessions WHERE id IN (SELECT value FROM json_each(?))").run(i)}function eM(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'session_pins'").get())return;let i=JSON.stringify(e.prepare(`SELECT id FROM session_pins WHERE ${t}`).all(...n).map(e=>e.id));e.prepare("DELETE FROM session_pin_events WHERE pin_id IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM session_pin_turns WHERE pin_id IN (SELECT value FROM json_each(?))").run(i),e.prepare("DELETE FROM session_pins WHERE id IN (SELECT value FROM json_each(?))").run(i)}function eK(e,t){e.prepare("DELETE FROM conversation_intakes WHERE conversation_id = ?").run(t),e.prepare("DELETE FROM delegation_chains WHERE conversation_id = ?").run(t),e.prepare("DELETE FROM conversation_events WHERE conversation_id = ? AND request_id IS NULL").run(t),e.prepare("DELETE FROM wakes WHERE source_conversation_id = ?").run(t),eM(e,"conversation_id = ?",t),eH(e,{requests:"SELECT id FROM work_requests WHERE source_conversation_id = ?",bindings:"SELECT id FROM session_bindings WHERE conversation_id = ?",exchanges:"origin_conversation_id = ? OR destination_conversation_id = ?",arg:t})}function eY(e,t){e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (
1654
- SELECT id FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL))`).run(t,t),e.prepare("DELETE FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL)").run(t,t),e.prepare("DELETE FROM wake_grants WHERE caller_agent_id = ? OR target_agent_id = ?").run(t,t),eM(e,"agent_id = ?",t),eB(e,"agent_id = ?",t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE agent_id = ?").run(t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_session_events'").get()&&e.prepare("DELETE FROM provider_session_events WHERE agent_id = ?").run(t),eH(e,{requests:"SELECT id FROM work_requests WHERE target_agent_id = ?",bindings:"SELECT id FROM session_bindings WHERE agent_id = ?",exchanges:"source_agent_id = ? OR destination_agent_id = ?",arg:t})}function eP(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function e$(e){return"string"==typeof e&&e.length>0?e:null}function ez(e,t){return t?`${e}: ${t}`:e}function ej(e,t,n,i){let r="grant_required"===t,s=r?"needs your approval for edit work":n;return{kind:"wake_blocked",attemptId:null,text:s?`Wake blocked: ${e} — ${s}`:`Wake blocked: ${e}`,data:{...i,target_name:e,reason_code:t,reason:n,actions:r?["allow","deny"]:[]}}}e.s(["EXCHANGE_LIMITS",0,eR,"EXCHANGE_STATES",0,eT,"EXCHANGE_TERMINAL_STATES",0,ep,"EXCHANGE_TRANSITIONS",0,eN,"EngineStoreError",0,eI,"TERMINAL_STATES",0,eL,"UI_TURN_INTERRUPTED",0,eD,"UI_TURN_INTERRUPTED_MESSAGE",0,eF,"UI_TURN_REQUESTER",0,eb,"createEngineStore",0,eG,"deleteEngineRecordsForAgent",0,eY,"deleteEngineRecordsForConversation",0,eK,"migrateEngineSchema",0,ew,"uiTurnExecutionPolicy",0,eU],35613);let eJ=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eQ=/^[a-z][a-z0-9_.:-]{0,63}$/;function eV(e){return null==e||""===e?null:eJ.test(e)?e:"[invalid]"}function eZ(e,t){return e&&eQ.test(e)?e:t}let e0="agent_name_conflict";function e1(e){return String(e??"").trim()}function e2(e){return e1(e).normalize("NFC").toLowerCase().normalize("NFC")}function e6(e){return`An Agent named "${e1(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}class e4 extends Error{code=e0;requestedName;conflictingAgentId;constructor(e,t){super(e6(e)),this.name="AgentNameConflictError",this.requestedName=e1(e),this.conflictingAgentId=t}}function e3(e){let t=[...e].sort((e,t)=>e.created_at-t.created_at||(e.id<t.id?-1:+(e.id>t.id))),n=new Map,i=[],r=[];for(let e of t){let t=e2(e.name);if(n.has(t)){i.push(e);continue}n.set(t,e.id),e.name_key!==t&&r.push({id:e.id,name:e.name,name_key:t})}let s=[];for(let e of i){let t=e2(e.name),i=e1(e.name)||"Agent",a=2;for(;n.has(e2(`${i}-${a}`));)a++;let o=`${i}-${a}`,_=e2(o);n.set(_,e.id),r.push({id:e.id,name:o,name_key:_}),s.push({bot_id:e.id,previous_name:e.name,new_name:o,name_key:t,kept_bot_id:n.get(t)})}return{updates:r,renames:s}}e.s(["AgentNameConflictError",0,e4,"agentDisplayName",0,e1,"agentNameConflictBody",0,function(e,t="name"){return{error:e.message,code:e0,field:t,name:e.requestedName,conflicting_agent_id:e.conflictingAgentId}},"agentNameConflictMessage",0,e6,"agentNameKey",0,e2,"planNameMigration",0,e3],30098);let e9=(0,e.i(52036).dbPath)();":memory:"!==e9&&i.default.mkdirSync(r.default.dirname(r.default.resolve(e9)),{recursive:!0});let e5=new n.default(e9);e5.pragma("journal_mode = WAL"),e5.exec(`
1661
+ SELECT id FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL))`).run(t,t),e.prepare("DELETE FROM wakes WHERE target_agent_id = ? OR (requester_agent_id = ? AND work_request_id IS NULL)").run(t,t),e.prepare("DELETE FROM wake_grants WHERE caller_agent_id = ? OR target_agent_id = ?").run(t,t),eM(e,"agent_id = ?",t),eB(e,"agent_id = ?",t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get()&&e.prepare("DELETE FROM usage_samples WHERE agent_id = ?").run(t),e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_session_events'").get()&&e.prepare("DELETE FROM provider_session_events WHERE agent_id = ?").run(t),eH(e,{requests:"SELECT id FROM work_requests WHERE target_agent_id = ?",bindings:"SELECT id FROM session_bindings WHERE agent_id = ?",exchanges:"source_agent_id = ? OR destination_agent_id = ?",arg:t})}function eP(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function e$(e){return"string"==typeof e&&e.length>0?e:null}function ez(e,t){return t?`${e}: ${t}`:e}function ej(e,t,n,i){let r="edit_approval_required"===t,s=r?"needs your approval for edit work":n;return{kind:"wake_blocked",attemptId:null,text:s?`Wake blocked: ${e} — ${s}`:`Wake blocked: ${e}`,data:{...i,target_name:e,reason_code:t,reason:n,actions:r?["allow","deny"]:[]}}}e.s(["EXCHANGE_LIMITS",0,eR,"EXCHANGE_STATES",0,eT,"EXCHANGE_TERMINAL_STATES",0,ep,"EXCHANGE_TRANSITIONS",0,eN,"EngineStoreError",0,eI,"TERMINAL_STATES",0,eL,"UI_TURN_INTERRUPTED",0,eD,"UI_TURN_INTERRUPTED_MESSAGE",0,eF,"UI_TURN_REQUESTER",0,eb,"createEngineStore",0,eG,"deleteEngineRecordsForAgent",0,eY,"deleteEngineRecordsForConversation",0,eK,"migrateEngineSchema",0,ew,"uiTurnExecutionPolicy",0,eU],35613);let eJ=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eQ=/^[a-z][a-z0-9_.:-]{0,63}$/;function eV(e){return null==e||""===e?null:eJ.test(e)?e:"[invalid]"}function eZ(e,t){return e&&eQ.test(e)?e:t}let e0="agent_name_conflict";function e1(e){return String(e??"").trim()}function e2(e){return e1(e).normalize("NFC").toLowerCase().normalize("NFC")}function e6(e){return`An Agent named "${e1(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}class e4 extends Error{code=e0;requestedName;conflictingAgentId;constructor(e,t){super(e6(e)),this.name="AgentNameConflictError",this.requestedName=e1(e),this.conflictingAgentId=t}}function e3(e){let t=[...e].sort((e,t)=>e.created_at-t.created_at||(e.id<t.id?-1:+(e.id>t.id))),n=new Map,i=[],r=[];for(let e of t){let t=e2(e.name);if(n.has(t)){i.push(e);continue}n.set(t,e.id),e.name_key!==t&&r.push({id:e.id,name:e.name,name_key:t})}let s=[];for(let e of i){let t=e2(e.name),i=e1(e.name)||"Agent",a=2;for(;n.has(e2(`${i}-${a}`));)a++;let o=`${i}-${a}`,_=e2(o);n.set(_,e.id),r.push({id:e.id,name:o,name_key:_}),s.push({bot_id:e.id,previous_name:e.name,new_name:o,name_key:t,kept_bot_id:n.get(t)})}return{updates:r,renames:s}}e.s(["AgentNameConflictError",0,e4,"agentDisplayName",0,e1,"agentNameConflictBody",0,function(e,t="name"){return{error:e.message,code:e0,field:t,name:e.requestedName,conflicting_agent_id:e.conflictingAgentId}},"agentNameConflictMessage",0,e6,"agentNameKey",0,e2,"planNameMigration",0,e3],30098);let e9=(0,e.i(52036).dbPath)();":memory:"!==e9&&i.default.mkdirSync(r.default.dirname(r.default.resolve(e9)),{recursive:!0});let e5=new n.default(e9);e5.pragma("journal_mode = WAL"),e5.exec(`
1655
1662
  CREATE TABLE IF NOT EXISTS bots (
1656
1663
  id TEXT PRIMARY KEY,
1657
1664
  name TEXT NOT NULL,
@@ -1,3 +1,3 @@
1
- module.exports=[69936,e=>{"use strict";var t=e.i(62294),r=e.i(43345),n=e.i(45383),a=e.i(674),s=e.i(81449),i=e.i(9501);let o="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",c=new Map;async function l(e){let t=await g(e);try{return JSON.parse(t)}catch{throw new i.ServiceApiError("invalid_request","The body must be a JSON object.")}}async function g(e){let t=new i.ServiceApiError("payload_too_large","The request body is too large."),r=e.headers.get("content-length");if(null!==r&&!(/^\d+$/.test(r.trim())&&65536>=Number(r)))throw t;if(!e.body)return"";let n=e.body.getReader(),a=[],s=0;for(;;){let{done:e,value:r}=await n.read();if(e)break;if((s+=r.byteLength)>65536)throw await n.cancel().catch(()=>{}),t;a.push(r)}return Buffer.concat(a).toString("utf8")}function d(e,t,r,n={}){return Response.json({error:{code:t,message:r}},{status:e,headers:n})}let u=(e,t=200)=>({status:t,body:e});function h(e,t,r,n={},a,s,i){return{status:e,body:{error:{code:t,message:r,...a?{fields:a}:{},...i?{reason:i}:{},...s?{recovery:s}:{}}},headers:n}}async function p(e,r,n,a){let l,g,d={kind:r.targetKind,targetRef:r.targetRef??null,agentId:r.agentId??null},u=(n,a)=>t.serviceAudit.append({principal:e,operation:d.operation??r.operation,capability:d.capability??r.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:n,code:a}),p=!1,f=null;try{if("service"!==e.kind)throw new i.ServiceApiError("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&r.capability!==y)throw new i.ServiceApiError("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let r=`${e.kind}:${e.id}`,n=(c.get(r)??[]).filter(e=>e>t-6e4),a=function(){let e=process.env[o];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${o} must be a positive integer; using 120.`),120)}();return n.length>=a?(c.set(r,n),Math.max(1,Math.ceil((n[n.length-a]+6e4-t)/1e3))):(n.push(t),c.set(r,n),null)}(e);if(null!==t)f="rate_limited",g="denied",l=h(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=(0,i.serviceContext)(e);a?.(t),l=await n(t,d,()=>{u("allowed",null),p=!0}),g="allowed"}}catch(e){e instanceof i.ServiceApiError?(g=e.denied?"denied":"rejected",f=e.notGranted?"not_granted":e.code,l=h(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),g="error",f="internal_error",l=h(500,"internal_error","The request could not be processed."))}if(p&&"allowed"===g)return l;try{u(g,f)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),h(500,"internal_error","The request could not be processed.")}return l}let y="shares:current";async function f(e,t){let a;try{a=await (0,r.authenticate)(e)}catch(e){if(e instanceof n.AgentApiError)return d(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),d(500,"internal_error","The request could not be processed.")}let s=await t(a);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function S(e){let r=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return r?.agent_id??null}function m(e,t){return{onTarget:t=>{e.kind=t.sessionRef?"session":"agent",e.targetRef=t.sessionRef??t.agentId,e.agentId=t.agentId,e.capability=t.capability,e.operation=t.action},onCommit:t}}function v(e,t,r){return{onTarget:t=>{r&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function b(e){if(e.length>200)return null;let r=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return r?.source_agent_id??null}let w={capabilities:(e,t)=>p(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>u((0,i.capabilitiesView)(e)),t),listAgents:(e,t,r)=>p(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>u((0,i.listServiceAgents)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),getAgent:(e,t,r)=>p(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.getServiceAgent)(e,t)),r),listSessions:(e,t,r,n)=>p(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.listServiceSessions)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit),status:r.status}))),n),getSession:(e,t,r,n)=>p(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:r,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.getServiceSession)(e,t,r))),n),listConversations:(e,t,r,n)=>p(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.listServiceConversations)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit)})),n),getConversation:(e,t,r,n,a)=>p(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:r,agentId:t},e=>u((0,i.getServiceConversation)(e,t,r,{cursor:n.cursor,limit:(0,i.parseLimit)(n.limit,i.PAGE_LIMITS.messagesDefault,i.PAGE_LIMITS.messagesMax)})),a),sendSessionMessage:(e,t,r,n,a)=>p(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{t.length<=200&&(a.agentId=S(t));let o=(0,i.parseSessionMessageBody)(await r(),n),{accepted:c}=(0,i.sendServiceSessionMessage)(e,t,o,e=>{a.agentId=e.source_agent_id,s()});return u(c,c.replayed?200:202)},a),listExchanges:(e,t,r)=>p(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>u((0,i.listServiceExchanges)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),createExchange:(e,t,r,n)=>p(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,n,a)=>{let s,o,c=await t();Object.assign(n,"string"!=typeof(o=(s=c&&"object"==typeof c?c.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===o.length?{}:{targetRef:o,agentId:o.length<=200?S(o):null});let l=(0,i.parseServiceExchangeBody)(c,r),{exchange:g,created:d}=(0,i.createServiceExchange)(e,l,e=>{n.kind="exchange",n.targetRef=e.id,n.agentId=e.source_agent_id,a()});return u({exchange:g,replayed:!d},d?201:200)},n),getExchange:(e,t,r)=>p(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,r)=>{r.agentId=b(t);let n=(0,i.getServiceExchange)(e,t);return r.agentId=n.source.agent_id,u(n)},r),cancelExchange:(e,t,r,n)=>p(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,n,a)=>{n.agentId=b(t);let s=await r();return u(await (0,i.cancelServiceExchange)(e,t,s,e=>{n.agentId=e.source_agent_id,a()}))},n),messageAgent:(e,t,r,n,a)=>p(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.messageServiceAgent)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),pinSession:(e,t,r,n,a)=>p(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{let o=(0,i.parsePinBody)(await r(),n),c=await (0,i.pinServiceSession)(e,t,o,m(a,s));return u(c,c.replayed?200:201)},a),readPin:(e,t,r)=>p(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,r)=>u(await (0,i.readServicePin)(e,t,m(r,()=>{}))),r),sendToPin:(e,t,r,n,a)=>p(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.sendServicePinMessage)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),detachPin:(e,t,r)=>p(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,r,n)=>u((0,i.detachServicePin)(e,t,m(r,n))),r),createShare:(e,t,r,n,s)=>p(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,o)=>{t.length<=200&&(s.agentId=(0,a.sessionOwner)(t));let c=(0,i.parseShareCreateBody)(await r(),n),l=await (0,i.createServiceShare)(e,t,c,v(s,o,!1));return u(l,l.replayed?200:201)},s),getShare:(e,t,r)=>p(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,r)=>u((0,i.getServiceShare)(e,t,v(r,()=>{},!1))),r),listShares:(e,t,r)=>p(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,r)=>((0,i.checkShareListParams)(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(r.agentId=(0,a.sessionOwner)(t.sessionRef)),u((0,i.listServiceShares)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit),sessionRef:t.sessionRef,state:t.state}))),r),revokeShare:(e,t,r,n)=>p(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,n,a)=>((0,i.parseShareRevokeBody)(await r()),u((0,i.revokeServiceShare)(e,t,v(n,a,!1)))),n),shareCurrent:(e,t,r,n,a)=>p(e,{operation:"shares.create",capability:y,targetKind:"session"},async(e,a,o)=>{let c=(0,i.parseShareCurrentBody)(await r(),n);(0,i.requireShareCurrentCaller)(e.principal);let l=(0,s.resolveSessionContext)(t);if(!l.ok)throw(0,i.sessionContextError)(l);let g=await (0,i.createCurrentSessionShare)(e,l,c,v(a,o,!0));return u(g,g.replayed?200:201)},a)};function R(e){let t=new URL(e.url).searchParams;return{cursor:t.get("cursor"),limit:t.get("limit"),get:e=>t.get(e),names:[...new Set(t.keys())]}}async function E(e){let t=(0,s.sessionContextHeader)(e.headers),r=e.headers.get("idempotency-key"),n=n=>w.shareCurrent(n,t,()=>l(e),r);if(null===e.headers.get("authorization")){let e=await n(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return f(e,n)}e.s(["handleCancelExchange",0,function(e,t){return f(e,r=>w.cancelExchange(r,t,async()=>(0,i.parseCancelBody)(await g(e))))},"handleCreateExchange",0,function(e){return f(e,t=>w.createExchange(t,()=>l(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return f(e,r=>w.createShare(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return f(e,e=>w.detachPin(e,t))},"handleGetAgent",0,function(e,t){return f(e,e=>w.getAgent(e,t))},"handleGetCapabilities",0,function(e){return f(e,e=>w.capabilities(e))},"handleGetConversation",0,function(e,t,r){return f(e,n=>w.getConversation(n,t,r,R(e)))},"handleGetExchange",0,function(e,t){return f(e,e=>w.getExchange(e,t))},"handleGetSession",0,function(e,t,r){return f(e,e=>w.getSession(e,t,r))},"handleGetShare",0,function(e,t){return f(e,e=>w.getShare(e,t))},"handleListAgents",0,function(e){return f(e,t=>w.listAgents(t,R(e)))},"handleListConversations",0,function(e,t){return f(e,r=>w.listConversations(r,t,R(e)))},"handleListExchanges",0,function(e){return f(e,t=>w.listExchanges(t,R(e)))},"handleListSessions",0,function(e,t){let r=R(e);return f(e,e=>w.listSessions(e,t,{cursor:r.cursor,limit:r.limit,status:r.get("status")}))},"handleListShares",0,function(e){let t=R(e);return f(e,e=>w.listShares(e,{cursor:t.cursor,limit:t.limit,sessionRef:t.get("session_ref"),state:t.get("state"),names:t.names}))},"handleMessageAgent",0,function(e,t){return f(e,r=>w.messageAgent(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return f(e,r=>w.pinSession(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return f(e,e=>w.readPin(e,t))},"handleRevokeShare",0,function(e,t){return f(e,r=>w.revokeShare(r,t,()=>g(e)))},"handleSendSessionMessage",0,function(e,t){return f(e,r=>w.sendSessionMessage(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return f(e,r=>w.sendToPin(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,E,"serviceOperations",0,w])}];
1
+ module.exports=[69936,e=>{"use strict";var t=e.i(62294),r=e.i(43345),n=e.i(45383),a=e.i(674),s=e.i(81449),i=e.i(9501);let o="BOTMANCERS_SERVICE_API_CALLS_PER_MINUTE",c=new Map;async function l(e){let t=await g(e);try{return JSON.parse(t)}catch{throw new i.ServiceApiError("invalid_request","The body must be a JSON object.")}}async function g(e){let t=new i.ServiceApiError("payload_too_large","The request body is too large."),r=e.headers.get("content-length");if(null!==r&&!(/^\d+$/.test(r.trim())&&65536>=Number(r)))throw t;if(!e.body)return"";let n=e.body.getReader(),a=[],s=0;for(;;){let{done:e,value:r}=await n.read();if(e)break;if((s+=r.byteLength)>65536)throw await n.cancel().catch(()=>{}),t;a.push(r)}return Buffer.concat(a).toString("utf8")}function d(e,t,r,n={}){return Response.json({error:{code:t,message:r}},{status:e,headers:n})}let u=(e,t=200)=>({status:t,body:e});function h(e,t,r,n={},a,s,i){return{status:e,body:{error:{code:t,message:r,...a?{fields:a}:{},...i?{reason:i}:{},...s?{recovery:s}:{}}},headers:n}}async function p(e,r,n,a){let l,g,d={kind:r.targetKind,targetRef:r.targetRef??null,agentId:r.agentId??null},u=(n,a)=>t.serviceAudit.append({principal:e,operation:d.operation??r.operation,capability:d.capability??r.capability,targetKind:d.kind,targetRef:d.targetRef,agentId:d.agentId,outcome:n,code:a}),p=!1,f=null;try{if("service"!==e.kind)throw new i.ServiceApiError("principal_not_allowed","The service API accepts only service principals.");if(e.id===s.SESSION_CONTEXT_SERVICE_ID&&r.capability!==y)throw new i.ServiceApiError("principal_not_allowed","A session context can only share its own session (share-current).");let t=function(e,t=Date.now()){let r=`${e.kind}:${e.id}`,n=(c.get(r)??[]).filter(e=>e>t-6e4),a=function(){let e=process.env[o];if(void 0===e||""===e.trim())return 120;let t=Number(e.trim());return Number.isInteger(t)&&t>0?t:(console.error(`${o} must be a positive integer; using 120.`),120)}();return n.length>=a?(c.set(r,n),Math.max(1,Math.ceil((n[n.length-a]+6e4-t)/1e3))):(n.push(t),c.set(r,n),null)}(e);if(null!==t)f="rate_limited",g="denied",l=h(429,"rate_limited","Too many calls; retry later.",{"Retry-After":String(t)});else{let t=(0,i.serviceContext)(e);a?.(t),l=await n(t,d,()=>{u("allowed",null),p=!0}),g="allowed"}}catch(e){e instanceof i.ServiceApiError?(g=e.denied?"denied":"rejected",f=e.notGranted?"not_granted":e.code,l=h(e.status,e.code,e.message,{},e.fields,e.recovery,e.reason)):(console.error("Service API error:",e instanceof Error?e.message:"unknown error"),g="error",f="internal_error",l=h(500,"internal_error","The request could not be processed."))}if(p&&"allowed"===g)return l;try{u(g,f)}catch(e){return console.error("Service audit append failed:",e instanceof Error?e.message:"unknown error"),h(500,"internal_error","The request could not be processed.")}return l}let y="shares:current";async function f(e,t){let a;try{a=await (0,r.authenticate)(e)}catch(e){if(e instanceof n.AgentApiError)return d(e.status,e.code,e.message);return console.error("Service API authentication error:",e instanceof Error?e.message:"unknown error"),d(500,"internal_error","The request could not be processed.")}let s=await t(a);return Response.json(s.body,{status:s.status,headers:s.headers??{}})}function S(e){let r=t.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);return r?.agent_id??null}function m(e,t){return{onTarget:t=>{e.kind=t.sessionRef?"session":"agent",e.targetRef=t.sessionRef??t.agentId,e.agentId=t.agentId,e.capability=t.capability,e.operation=t.action},onCommit:t}}function v(e,t,r){return{onTarget:t=>{r&&(e.targetRef=t.sessionRef),e.agentId=t.agentId},onCommit:t}}function b(e){if(e.length>200)return null;let r=t.default.prepare("SELECT source_agent_id FROM session_exchanges WHERE id = ?").get(e);return r?.source_agent_id??null}let w={capabilities:(e,t)=>p(e,{operation:"capabilities.read",capability:"discovery",targetKind:"grants"},e=>u((0,i.capabilitiesView)(e)),t),listAgents:(e,t,r)=>p(e,{operation:"agents.list",capability:"agents:read",targetKind:"agent"},e=>u((0,i.listServiceAgents)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),getAgent:(e,t,r)=>p(e,{operation:"agents.read",capability:"agents:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.getServiceAgent)(e,t)),r),listSessions:(e,t,r,n)=>p(e,{operation:"sessions.list",capability:"sessions:read",targetKind:"agent",targetRef:t,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.listServiceSessions)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit),status:r.status}))),n),getSession:(e,t,r,n)=>p(e,{operation:"sessions.read",capability:"sessions:read",targetKind:"session",targetRef:r,agentId:t},async e=>(await (0,i.warmServiceAgent)(e,t),u((0,i.getServiceSession)(e,t,r))),n),listConversations:(e,t,r,n)=>p(e,{operation:"conversations.list",capability:"conversations:read",targetKind:"agent",targetRef:t,agentId:t},e=>u((0,i.listServiceConversations)(e,t,{cursor:r.cursor,limit:(0,i.parseLimit)(r.limit)})),n),getConversation:(e,t,r,n,a)=>p(e,{operation:"conversations.read",capability:"conversations:read",targetKind:"conversation",targetRef:r,agentId:t},e=>u((0,i.getServiceConversation)(e,t,r,{cursor:n.cursor,limit:(0,i.parseLimit)(n.limit,i.PAGE_LIMITS.messagesDefault,i.PAGE_LIMITS.messagesMax)})),a),sendSessionMessage:(e,t,r,n,a)=>p(e,{operation:"sessions.message",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{t.length<=200&&(a.agentId=S(t));let o=(0,i.parseSessionMessageBody)(await r(),n),{accepted:c}=(0,i.sendServiceSessionMessage)(e,t,o,e=>{a.agentId=e.source_agent_id,s()});return u(c,c.replayed?200:202)},a),listExchanges:(e,t,r)=>p(e,{operation:"exchanges.list",capability:"exchanges:read",targetKind:"exchange"},e=>u((0,i.listServiceExchanges)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit)})),r),createExchange:(e,t,r,n)=>p(e,{operation:"exchanges.create",capability:"exchanges:create",targetKind:"session"},async(e,n,a)=>{let s,o,c=await t();Object.assign(n,"string"!=typeof(o=(s=c&&"object"==typeof c?c.source:void 0)&&"object"==typeof s?s.session_ref:void 0)||0===o.length?{}:{targetRef:o,agentId:o.length<=200?S(o):null});let l=(0,i.parseServiceExchangeBody)(c,r),{exchange:g,created:d}=(0,i.createServiceExchange)(e,l,e=>{n.kind="exchange",n.targetRef=e.id,n.agentId=e.source_agent_id,a()});return u({exchange:g,replayed:!d},d?201:200)},n),getExchange:(e,t,r)=>p(e,{operation:"exchanges.read",capability:"exchanges:read",targetKind:"exchange",targetRef:t},(e,r)=>{r.agentId=b(t);let n=(0,i.getServiceExchange)(e,t);return r.agentId=n.source.agent_id,u(n)},r),cancelExchange:(e,t,r,n)=>p(e,{operation:"exchanges.cancel",capability:"exchanges:create",targetKind:"exchange",targetRef:t},async(e,n,a)=>{n.agentId=b(t);let s=await r();return u(await (0,i.cancelServiceExchange)(e,t,s,e=>{n.agentId=e.source_agent_id,a()}))},n),messageAgent:(e,t,r,n,a)=>p(e,{operation:"agents.message",capability:"sessions:message",targetKind:"agent",targetRef:t,agentId:t},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.messageServiceAgent)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),pinSession:(e,t,r,n,a)=>p(e,{operation:"pins.create",capability:"sessions:message",targetKind:"session",targetRef:t},async(e,a,s)=>{let o=(0,i.parsePinBody)(await r(),n),c=await (0,i.pinServiceSession)(e,t,o,m(a,s));return u(c,c.replayed?200:201)},a),readPin:(e,t,r)=>p(e,{operation:"pins.read",capability:"sessions:message",targetKind:"session"},async(e,r)=>u(await (0,i.readServicePin)(e,t,m(r,()=>{}))),r),sendToPin:(e,t,r,n,a)=>p(e,{operation:"pins.send",capability:"sessions:message",targetKind:"session"},async(e,a,s)=>{let o=(0,i.parseAgentMessageBody)(await r(),n),{body:c}=await (0,i.sendServicePinMessage)(e,t,o,m(a,s));return u(c,c.replayed?200:202)},a),detachPin:(e,t,r)=>p(e,{operation:"pins.detach",capability:"sessions:message",targetKind:"session"},(e,r,n)=>u((0,i.detachServicePin)(e,t,m(r,n))),r),createShare:(e,t,r,n,s)=>p(e,{operation:"shares.create",capability:"shares:create",targetKind:"session",targetRef:t},async(e,s,o)=>{t.length<=200&&(s.agentId=(0,a.sessionOwner)(t));let c=(0,i.parseShareCreateBody)(await r(),n),l=await (0,i.createServiceShare)(e,t,c,v(s,o,!1));return u(l,l.replayed?200:201)},s),getShare:(e,t,r)=>p(e,{operation:"shares.read",capability:"shares:create",targetKind:"session",targetRef:t},(e,r)=>u((0,i.getServiceShare)(e,t,v(r,()=>{},!1))),r),listShares:(e,t,r)=>p(e,{operation:"shares.list",capability:"shares:create",targetKind:"session",targetRef:t.sessionRef},(e,r)=>((0,i.checkShareListParams)(t.names??[]),t.sessionRef&&t.sessionRef.length<=200&&(r.agentId=(0,a.sessionOwner)(t.sessionRef)),u((0,i.listServiceShares)(e,{cursor:t.cursor,limit:(0,i.parseLimit)(t.limit),sessionRef:t.sessionRef,state:t.state}))),r),revokeShare:(e,t,r,n)=>p(e,{operation:"shares.revoke",capability:"shares:create",targetKind:"session",targetRef:t},async(e,n,a)=>((0,i.parseShareRevokeBody)(await r()),u((0,i.revokeServiceShare)(e,t,v(n,a,!1)))),n),shareCurrent:(e,t,r,n,a)=>p(e,{operation:"shares.create",capability:y,targetKind:"session"},async(e,a,o)=>{let c=(0,i.parseShareCurrentBody)(await r(),n);(0,i.requireShareCurrentCaller)(e.principal);let l=(0,s.resolveSessionContext)(t);if(!l.ok)throw(0,i.sessionContextError)(l);let g=await (0,i.createCurrentSessionShare)(e,l,c,v(a,o,!0));return u(g,g.replayed?200:201)},a)};function R(e){let t=new URL(e.url).searchParams;return{cursor:t.get("cursor"),limit:t.get("limit"),get:e=>t.get(e),names:[...new Set(t.keys())]}}async function E(e){let t=(0,s.sessionContextHeader)(e.headers),r=e.headers.get("idempotency-key"),n=n=>w.shareCurrent(n,t,()=>l(e),r);if(null===e.headers.get("authorization")){let e=await n(s.SESSION_CONTEXT_PRINCIPAL);return Response.json(e.body,{status:e.status,headers:e.headers??{}})}return f(e,n)}e.s(["handleCancelExchange",0,function(e,t){return f(e,r=>w.cancelExchange(r,t,async()=>(0,i.parseCancelBody)(await g(e))))},"handleCreateExchange",0,function(e){return f(e,t=>w.createExchange(t,()=>l(e),e.headers.get("idempotency-key")))},"handleCreateShare",0,function(e,t){return f(e,r=>w.createShare(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleDetachPin",0,function(e,t){return f(e,e=>w.detachPin(e,t))},"handleGetAgent",0,function(e,t){return f(e,e=>w.getAgent(e,t))},"handleGetCapabilities",0,function(e){return f(e,e=>w.capabilities(e))},"handleGetConversation",0,function(e,t,r){return f(e,n=>w.getConversation(n,t,r,R(e)))},"handleGetExchange",0,function(e,t){return f(e,e=>w.getExchange(e,t))},"handleGetSession",0,function(e,t,r){return f(e,e=>w.getSession(e,t,r))},"handleGetShare",0,function(e,t){return f(e,e=>w.getShare(e,t))},"handleListAgents",0,function(e){return f(e,t=>w.listAgents(t,R(e)))},"handleListConversations",0,function(e,t){return f(e,r=>w.listConversations(r,t,R(e)))},"handleListExchanges",0,function(e){return f(e,t=>w.listExchanges(t,R(e)))},"handleListSessions",0,function(e,t){let r=R(e);return f(e,e=>w.listSessions(e,t,{cursor:r.cursor,limit:r.limit,status:r.get("status")}))},"handleListShares",0,function(e){let t=R(e);return f(e,e=>w.listShares(e,{cursor:t.cursor,limit:t.limit,sessionRef:t.get("session_ref"),state:t.get("state"),names:t.names}))},"handleMessageAgent",0,function(e,t){return f(e,r=>w.messageAgent(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handlePinSession",0,function(e,t){return f(e,r=>w.pinSession(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleReadPin",0,function(e,t){return f(e,e=>w.readPin(e,t))},"handleRevokeShare",0,function(e,t){return f(e,r=>w.revokeShare(r,t,()=>g(e)))},"handleSendSessionMessage",0,function(e,t){return f(e,r=>w.sendSessionMessage(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleSendToPin",0,function(e,t){return f(e,r=>w.sendToPin(r,t,()=>l(e),e.headers.get("idempotency-key")))},"handleShareCurrent",0,E,"serviceOperations",0,w])}];
2
2
 
3
3
  //# sourceMappingURL=lib_service-api-http_ts_0xzqhny._.js.map
@@ -1,7 +1,7 @@
1
- module.exports=[9501,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294),r=e.i(62349),s=e.i(18966),a=e.i(35613),o=e.i(90027),d=e.i(63020),c=e.i(45383),_=e.i(91253),u=e.i(93399),l=e.i(50081),p=e.i(16789),g=e.i(81449),f=e.i(35034),h=e.i(674);let m={invalid_request:400,unsupported_field:400,authority_not_allowed:403,principal_not_allowed:403,grant_required:403,grants_unavailable:503,agent_not_found:404,session_not_found:404,conversation_not_found:404,exchange_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,recursive_exchange:403,idempotency_conflict:409,exchange_terminal:409,conflict:409,payload_too_large:413,rate_limited:429,internal_error:500,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,action_unavailable:409,approval_required:403,provider_failed:502,share_not_found:404,share_expired:410,share_revoked:410,share_turn_in_progress:409,share_turn_limit:409,audience_not_allowed:403,session_context_required:409},v=["principal_not_allowed","grant_required","grants_unavailable","agent_not_found","session_not_found","conversation_not_found","exchange_not_found","rate_limited","pin_not_found","share_not_found","audience_not_allowed"];class w extends Error{code;notGranted;fields;recovery;reason;constructor(e,t,n={}){super(t),this.name="ServiceApiError",this.code=e,this.notGranted=!0===n.notGranted,this.fields=n.fields,this.recovery=(0,l.recoveryFor)(e),this.reason=n.reason??null}get status(){return m[this.code]}get denied(){return v.includes(this.code)}}let y={pin:()=>new w("pin_not_found","No pin with that reference is visible to this principal."),share:()=>new w("share_not_found","No share with that reference is visible to this principal."),agent:()=>new w("agent_not_found","No Agent with that id is visible to this principal."),session:()=>new w("session_not_found","No session with that reference is visible to this principal."),conversation:()=>new w("conversation_not_found","No conversation with that id is visible to this principal."),exchange:()=>new w("exchange_not_found","No exchange with that id is visible to this principal.")};function E(e){let t=y[e]();return new w(t.code,t.message,{notGranted:!0})}function S(e){switch(e.code){case"exchange_not_found":return y.exchange();case"session_not_found":return y.session();case"agent_not_found":return y.agent();case"conversation_not_found":return y.conversation();case"invalid_transition":return new w("conflict","The exchange changed concurrently; read it and retry.");default:return e.code in m?new w(e.code,e.message):new w("invalid_request",e.message)}}let b=new Map;function I(e,t,n){return"string"==typeof t&&!!e.agents.get(t)?.has(n)&&!!i.bots.getById(t)}function k(e,t,n){let r=i.bots.getById(t);if(!r)throw y.agent();if(!I(e,t,n))throw E("agent");return r}let R=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function A(e,t,i,r,s){try{return(0,n.paginateRows)(e,t,i,r,s)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new w("invalid_request",e.message);throw e}}function x(e){return{home_session_ref:e.home_session_id??null,new_sessions_allowed:(0,s.readStoredPolicy)(e)?.allow_new_sessions===!0,default_workspace_set:!!e.default_workspace}}function C(e,t){let n,s=(0,r.resolveAgent)(t),a=e.agents.get(t.id)??new Set;return{agent_id:t.id,name:t.name,title:t.title,runtime:s.agent,available:s.launchable,capabilities:_.SERVICE_CAPABILITIES.filter(e=>a.has(e)),messaging:x(t),created_at:t.created_at,last_activity_at:(n=i.default.prepare(`
1
+ module.exports=[9501,35631,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294),r=e.i(62349),s=e.i(18966),o=e.i(35613),a=e.i(90027),d=e.i(63020),c=e.i(45383);let _=["agents:read","sessions:read","conversations:read","sessions:message","exchanges:read","exchanges:create","sessions:start","sessions:resume","shares:create"],u="message:",l="exchange:";e.s(["EXCHANGE_KEY_PREFIX",0,l,"MESSAGE_KEY_PREFIX",0,u,"SERVICE_CAPABILITIES",0,_],35631);var p=e.i(93399),g=e.i(50081),f=e.i(16789),h=e.i(81449),m=e.i(26571),v=e.i(35034),w=e.i(674);let y={invalid_request:400,unsupported_field:400,authority_not_allowed:403,principal_not_allowed:403,agent_not_found:404,session_not_found:404,conversation_not_found:404,exchange_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,recursive_exchange:403,idempotency_conflict:409,exchange_terminal:409,conflict:409,payload_too_large:413,rate_limited:429,internal_error:500,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,action_unavailable:409,approval_required:403,provider_failed:502,share_not_found:404,share_expired:410,share_revoked:410,share_turn_in_progress:409,share_turn_limit:409,audience_not_allowed:403,session_context_required:409},E=["principal_not_allowed","agent_not_found","session_not_found","conversation_not_found","exchange_not_found","rate_limited","pin_not_found","share_not_found","audience_not_allowed"];class S extends Error{code;notGranted;fields;recovery;reason;constructor(e,t,n={}){super(t),this.name="ServiceApiError",this.code=e,this.notGranted=!0===n.notGranted,this.fields=n.fields,this.recovery=(0,g.recoveryFor)(e),this.reason=n.reason??null}get status(){return y[this.code]}get denied(){return E.includes(this.code)}}let b={pin:()=>new S("pin_not_found","No pin with that reference is visible to this principal."),share:()=>new S("share_not_found","No share with that reference is visible to this principal."),agent:()=>new S("agent_not_found","No Agent with that id is visible to this principal."),session:()=>new S("session_not_found","No session with that reference is visible to this principal."),conversation:()=>new S("conversation_not_found","No conversation with that id is visible to this principal."),exchange:()=>new S("exchange_not_found","No exchange with that id is visible to this principal.")};function k(e){let t=b[e]();return new S(t.code,t.message,{notGranted:!0})}function R(e){switch(e.code){case"exchange_not_found":return b.exchange();case"session_not_found":return b.session();case"agent_not_found":return b.agent();case"conversation_not_found":return b.conversation();case"invalid_transition":return new S("conflict","The exchange changed concurrently; read it and retry.");default:return e.code in y?new S(e.code,e.message):new S("invalid_request",e.message)}}function I(e,t){return e.reachesAgents&&"string"==typeof t&&!!i.bots.getById(t)}function A(e){return e.reachesAgents?i.bots.getAll():[]}function x(e,t){let n=i.bots.getById(t);if(!n)throw b.agent();if(!I(e,t))throw k("agent");return n}let C=Object.freeze({default:20,max:100,messagesDefault:50,messagesMax:200});function q(e,t,i,r,s){try{return(0,n.paginateRows)(e,t,i,r,s)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new S("invalid_request",e.message);throw e}}function T(e){return{home_session_ref:e.home_session_id??null,new_sessions_allowed:(0,s.readStoredPolicy)(e)?.allow_new_sessions===!0,default_workspace_set:!!e.default_workspace}}function N(e,t){let n,s=(0,r.resolveAgent)(t);return{agent_id:t.id,name:t.name,title:t.title,runtime:s.agent,available:s.launchable,capabilities:I(e,t.id)?[..._]:[],messaging:T(t),created_at:t.created_at,last_activity_at:(n=i.default.prepare(`
2
2
  SELECT MAX(m.created_at) AS at FROM messages m
3
3
  JOIN conversation_participants p ON p.conversation_id = m.conversation_id AND p.participant_kind = 'bot' AND p.participant_id = ?
4
- `).get(t.id),Math.max(t.created_at,n.at??0))}}function q(e){let t=e.origin.conversation;return{ref:e.ref,agent:{...e.agent},title:e.title,status:e.status,resumable:e.resumable,source:e.source,state:{...e.state},created_at:e.created_at,ended_at:e.ended_at,last_activity_at:e.last_activity_at,origin:{conversation:t?{id:t.id,kind:t.kind,label:t.label}:null,work_request:e.origin.work_request?{id:e.origin.work_request.id,execution_kind:e.origin.work_request.execution_kind,state:e.origin.work_request.state}:null},usage:{input_tokens:{...e.usage.input_tokens},output_tokens:{...e.usage.output_tokens},cost_usd:{...e.usage.cost_usd}},home:e.home,actions:e.actions}}async function T(e,t){k(e,t,"sessions:read"),await (0,p.warmAgentProvider)(i.default,t,{onlyWithSessions:!0})}let N=`
4
+ `).get(t.id),Math.max(t.created_at,n.at??0))}}function O(e){let t=e.origin.conversation;return{ref:e.ref,agent:{...e.agent},title:e.title,status:e.status,resumable:e.resumable,source:e.source,state:{...e.state},created_at:e.created_at,ended_at:e.ended_at,last_activity_at:e.last_activity_at,origin:{conversation:t?{id:t.id,kind:t.kind,label:t.label}:null,work_request:e.origin.work_request?{id:e.origin.work_request.id,execution_kind:e.origin.work_request.execution_kind,state:e.origin.work_request.state}:null},usage:{input_tokens:{...e.usage.input_tokens},output_tokens:{...e.usage.output_tokens},cost_usd:{...e.usage.cost_usd}},home:e.home,actions:e.actions}}async function L(e,t){x(e,t),await (0,f.warmAgentProvider)(i.default,t,{onlyWithSessions:!0})}let M=`
5
5
  SELECT c.id, c.type, c.bot_id, c.group_id, c.origin_kind, c.origin_id, c.created_at,
6
6
  COALESCE((SELECT MAX(m.created_at) FROM messages m WHERE m.conversation_id = c.id), c.created_at) AS last_activity_at,
7
7
  (SELECT COUNT(*) FROM messages m WHERE m.conversation_id = c.id) AS message_count,
@@ -10,16 +10,16 @@ module.exports=[9501,e=>{"use strict";var t=e.i(54799),n=e.i(46309),i=e.i(62294)
10
10
  JOIN conversation_participants p ON p.conversation_id = c.id AND p.participant_kind = 'bot' AND p.participant_id = ?
11
11
  LEFT JOIN bots b ON b.id = c.bot_id
12
12
  LEFT JOIN groups g ON g.id = c.group_id
13
- `;function O(e){return i.default.prepare("SELECT participant_kind AS kind, participant_id AS id FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(e)}function P(e,t){return t.every(t=>"bot"===t.kind?I(e,t.id,"conversations:read"):"service"!==t.kind||t.id===e.principal.id)}function L(e,t){let n="bot"===e.type?"direct":"group"===e.type?"group":"agent",i="direct"===n?`${e.bot_name??"Agent"} thread`:"group"===n?e.group_name?`Shared \xb7 ${e.group_name}`:"Shared thread":"Agent API conversation";return{conversation_id:e.id,type:n,label:i,participants:t,message_count:e.message_count,created_at:e.created_at,last_activity_at:e.last_activity_at}}let M=["deck","deck_id","deckId","deck_name","runtime","agent","adapter","transport","model","tool_profile","toolProfile","execution_kind","executionKind","permissions","provider_session_id","external_session_id","externalSessionId","session_id","sessionId","resume","resume_session","fresh_session","external_run_id","run_id","cwd","working_directory","workspace","grant","grants","capability","capabilities","principal","requester","owner"];function $(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function F(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(M.includes(i))throw new w("authority_not_allowed",`${n}${i} is chosen by Botmancers from the session and the Agent's configuration; a caller cannot set it.`);throw new w("invalid_request",`${n}${i} is not a field of this request.`)}}function D(e,t,n){if("string"!=typeof e||0===e.trim().length)throw new w("invalid_request",`${t} is required.`);if(e.length>n)throw new w("invalid_request",`${t} exceeds ${n} characters.`);return e}function K(e,t){let n=e.idempotency_key;if(void 0!==n&&"string"!=typeof n)throw new w("invalid_request","idempotency_key must be a string.");if(null!==t&&void 0!==n&&t!==n)throw new w("invalid_request","Idempotency-Key header and body idempotency_key differ.");let i=n??t??"";if(0===i.trim().length||i.length>160)throw new w("invalid_request","An idempotency key (1-160 characters) is required.");return i}function B(e,t){return i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function W(e,n,r){let s=(0,t.randomUUID)();i.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s,"agent",e.kind,e.id,r);let a=i.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return a.run(s,e.kind,e.id,r),a.run(s,"bot",n,r),s}function H(e){return i.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function G(e,t){try{return i.default.transaction(()=>{let{input:n,afterCreate:i}=e(),r=c.exchanges.create(n);return r.created&&i&&i(r.exchange),t?.(r.exchange),r}).immediate()}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}}function X(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");F(e,["content","idempotency_key"],"");let n=K(e,t);return{content:D(e.content,"content",a.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function j(e,t,n){return t.requester_kind===e.principal.kind&&t.requester_id===e.principal.id&&I(e,t.source_agent_id,n)&&(null===t.destination_agent_id||I(e,t.destination_agent_id,n))}function V(e,t,n){let i=c.exchanges.get(t);if(!i)throw y.exchange();if(!j(e,i,n))throw E("exchange");return i}let Y=e=>e.idempotency_key.startsWith(_.MESSAGE_KEY_PREFIX)?"session_message":"exchange";function J(e,t){let n=t.idempotency_key.startsWith(_.MESSAGE_KEY_PREFIX)?t.idempotency_key.slice(_.MESSAGE_KEY_PREFIX.length):t.idempotency_key.startsWith(_.EXCHANGE_KEY_PREFIX)?t.idempotency_key.slice(_.EXCHANGE_KEY_PREFIX.length):t.idempotency_key;return(0,u.serviceRedactor)().deep({...e,kind:Y(t),idempotency_key:n})}function U(e){return{id:e.id,kind:Y(e),mode:e.mode,state:e.state,source:{agent_id:e.source_agent_id,session_ref:e.source_binding_id},destination:e.destination_agent_id?{agent_id:e.destination_agent_id,session_ref:e.destination_binding_id}:null,failure:"failed"===e.state?{code:e.failure_code??"failed"}:null,created_at:e.created_at,updated_at:e.updated_at,terminal_at:e.terminal_at}}function z(e,t){let n=c.exchanges.require(t);return j(e,n,"exchanges:read")?J((0,c.getExchangeView)(t),n):U(n)}let Q=["exchange_id","parent_exchange_id"];async function Z(e,t,n,i){let r=V(e,t,"exchanges:create");try{let{replayed:t}=await (0,c.cancelExchangeCommand)(r.id,e.principal,n,i);return{exchange:z(e,r.id),replayed:t}}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}}let ee=e=>"resume"===e?"sessions:resume":"sessions:message";function et(e){if(e instanceof h.PinError){if("session_not_found"===e.code)throw y.session();if("agent_not_found"===e.code)throw y.agent();if("pin_not_found"===e.code)throw y.pin();if("conversation_not_found"===e.code)throw y.conversation();throw new w(e.code,e.message)}if(e instanceof d.ExchangeError)throw S(e);throw e}function en(e,t){let n;try{n=(0,h.requirePin)(e.principal,t)}catch(e){et(e)}if(!I(e,n.agent_id,ee(n.action)))throw E("pin");return n}function ei(e){return(0,u.serviceRedactor)().deep((0,h.pinView)(e))}async function er(e,t,n,i){k(e,t,"sessions:message");try{let r=await (0,h.messageAgent)({requester:e.principal,agentId:t,content:n.content,idempotencyKey:n.idempotencyKey,mayStart:I(e,t,"sessions:start"),onResolved:e=>i.onTarget({agentId:e.agentId,sessionRef:e.sessionRef,capability:"started"===e.resolution?"sessions:start":"sessions:message",action:"started"===e.resolution?"agents.message.start":"agents.message"}),onCommit:()=>i.onCommit()});return{body:{pin:ei(r.pin),turn:(0,u.serviceRedactor)().deep(r.turn),resolution:r.resolution,replayed:r.replayed},settled:r.settled}}catch(e){et(e)}}async function es(e,t,n,i){let r=(0,h.sessionOwner)(t);if(!r)throw y.session();let s=ee(n.action);if(i.onTarget({agentId:r,sessionRef:t,capability:s,action:"resume"===n.action?"pins.resume":"pins.ask"}),!I(e,r,s))throw E("session");n.replacePinRef&&en(e,n.replacePinRef);try{let{pin:r,created:s,replaced:a}=await (0,h.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:ei(r),replaced_pin_ref:a?.id??null,replayed:!s}}catch(e){et(e)}}async function ea(e,t,n,i){let r=en(e,t);i.onTarget({agentId:r.agent_id,sessionRef:r.session_ref,capability:ee(r.action),action:"pins.send"});try{let t=await (0,h.sendPinTurn)({requester:e.principal,pinRef:r.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:ei(t.pin),turn:(0,u.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){et(e)}}async function eo(e,t,n){let i=en(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ee(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,h.readPin)(e.principal,i.id);return{pin:ei(t),turns:(0,u.serviceRedactor)().deep(n)}}catch(e){et(e)}}let ed=["provider_session_id","external_session_id","claude_session_id","codex_thread_id","cursor_chat_id","thread_id","chat_id","cwd","workspace","latest","most_recent","title","title_match","active_since"],ec=[...new Set([...M,...ed])];function e_(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(ec.includes(i))throw new w("authority_not_allowed",`${n}${i} cannot select or describe a session; name it by session_ref only.`);throw new w("invalid_request",`${n}${i} is not a field of this request.`)}}function eu(e,t){if(null==e)return null;if("number"!=typeof e||!Number.isInteger(e))throw new w("invalid_request",`${t} must be an integer.`);return e}function el(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(e_(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!$(e.audience))throw new w("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(e_(e.audience,["kind","team_id","channel_id"],"audience."),!(0,f.isSlackAudience)(e.audience))throw new w("invalid_request",'audience must be { kind: "slack", team_id: "T…", channel_id: "C…" } with exact Slack ids.');return{audience:{kind:"slack",team_id:e.audience.team_id,channel_id:e.audience.channel_id},ttlSeconds:eu(e.ttl_seconds,"ttl_seconds"),maxTurns:eu(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:D(e.agent_id,"agent_id",200),idempotencyKey:K(e,t)}}let ep=["session_ref","state","cursor","limit"],eg=["active","expired","revoked"];function ef(e){if(e instanceof f.ShareError){if("session_not_found"===e.code)throw y.session();if("share_not_found"===e.code)throw y.share();throw new w(e.code,e.message)}et(e)}function eh(e,t){let n=(0,f.shareRow)(t);if(!n)throw y.share();if(!(n.creator_kind===e.principal.kind&&n.creator_id===e.principal.id&&I(e,n.agent_id,"shares:create")))throw E("share");return n}function em(e,t=(0,u.serviceRedactor)()){return t.deep((0,f.shareView)(e))}async function ev(e,t,n,i){let r=(0,h.sessionOwner)(t);if(i.onTarget({agentId:r,sessionRef:t}),!r)throw y.session();if(!I(e,r,"shares:create"))throw E("session");if(null!==n.agentId&&n.agentId!==r)throw y.session();try{let{share:r,created:s}=await (0,f.createShare)({creator:e.principal,sessionRef:t,agentId:n.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:n.idempotencyKey,createdVia:"session_ref",onCommit:()=>i.onCommit()});return{share:em(r),replayed:!s}}catch(e){ef(e)}}let ew=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];async function ey(e,n,i,r){if(r.onTarget({agentId:n.agentId,sessionRef:n.sessionRef}),null!==i.agentId&&i.agentId!==n.agentId)throw y.session();try{var s,a;let{share:o,created:d}=await (0,f.createShare)({creator:e.principal,sessionRef:n.sessionRef,agentId:n.agentId,audience:i.audience,ttlSeconds:i.ttlSeconds,maxTurns:i.maxTurns,idempotencyKey:(s=n.sessionRef,a=i.idempotencyKey,`current:${(0,t.createHash)("sha256").update(s).digest("hex").slice(0,24)}:${a}`),createdVia:"current_session",onCommit:()=>r.onCommit()});return{share:em(o),replayed:!d}}catch(e){ef(e)}}e.s(["AUTHORITY_FIELDS",0,M,"MESSAGE_CONTENT_LIMIT",0,16e3,"PAGE_LIMITS",0,R,"SHARE_SELECTOR_FIELDS",0,ed,"ServiceApiError",0,w,"agentMessagingReadiness",0,x,"cancelServiceExchange",0,Z,"capabilitiesView",0,function(e){let t=[...e.agents.entries()].filter(([e])=>!!i.bots.getById(e)).map(([e,t])=>({agent_id:e,capabilities:_.SERVICE_CAPABILITIES.filter(e=>t.has(e))})).sort((e,t)=>e.agent_id<t.agent_id?-1:+(e.agent_id>t.agent_id));return{principal:{kind:e.principal.kind,id:e.principal.id},mode:e.mode,vocabulary:_.SERVICE_CAPABILITIES,agents:t,limits:{page:R,content_chars:a.EXCHANGE_LIMITS.instructionChars,message_content_chars:16e3}}},"checkShareListParams",0,function(e){for(let t of e)if(!ep.includes(t)){if(ec.includes(t))throw new w("authority_not_allowed",`${t} cannot select a session; filter by session_ref only.`);throw new w("invalid_request",`${t} is not a parameter of this list.`)}},"createCurrentSessionShare",0,ey,"createServiceExchange",0,function(e,t,n){let r=H(t.sessionRef);if(!r||null!==t.sourceAgentId&&t.sourceAgentId!==r.agent_id)throw y.session();if(!I(e,r.agent_id,"exchanges:create"))throw E("session");if("ask"===t.mode&&(null!==t.destinationAgentId||null!==t.destinationConversationId))throw new w("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===t.mode){if(null===t.destinationAgentId)throw new w("destination_invalid","A Continue names destination.agent_id.");if(!i.bots.getById(t.destinationAgentId))throw y.agent();if(!I(e,t.destinationAgentId,"exchanges:create"))throw E("agent")}let s=e.principal,a=`${_.EXCHANGE_KEY_PREFIX}${t.idempotencyKey}`,{exchange:o,created:d}=G(()=>{let e=Date.now(),n=B(s,a),i=t.originConversationId??n?.origin_conversation_id??W(s,r.agent_id,e),o="continue"!==t.mode?null:t.destinationConversationId??n?.destination_conversation_id??W(s,t.destinationAgentId,e);return{input:{requester:s,serviceGrant:!0,idempotencyKey:a,mode:t.mode,originConversationId:i,sourceAgentId:r.agent_id,sessionRef:r.id,destinationAgentId:t.destinationAgentId,destinationConversationId:o,instruction:t.instruction,now:e}}},n),u=(0,c.dispatchExchange)(o.id);return{exchange:z(e,o.id),created:d,dispatched:u}},"createServiceShare",0,ev,"detachServicePin",0,function(e,t,n){let i=en(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ee(i.action),action:"pins.detach"});try{let{pin:t,replayed:r}=(0,h.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:ei(t),replayed:r}}catch(e){et(e)}},"getServiceAgent",0,function(e,t){return C(e,k(e,t,"agents:read"))},"getServiceConversation",0,function(e,t,r,s){var a;k(e,t,"conversations:read");let o=i.default.prepare(`${N} WHERE c.id = ?`).get(t,r);if(!o)throw y.conversation();let d=O(o.id);if(!P(e,d))throw E("conversation");let c=`messages:${o.id}`,_=function(e,t){try{return(0,n.decodePageCursor)(e,t)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new w("invalid_request",e.message);throw e}}(c,s.cursor),l=i.default.prepare(`
13
+ `;function P(e){return i.default.prepare("SELECT participant_kind AS kind, participant_id AS id FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(e)}function $(e,t){return t.every(t=>"bot"===t.kind?I(e,t.id):"service"!==t.kind||t.id===e.principal.id)}function D(e,t){let n="bot"===e.type?"direct":"group"===e.type?"group":"agent",i="direct"===n?`${e.bot_name??"Agent"} thread`:"group"===n?e.group_name?`Shared \xb7 ${e.group_name}`:"Shared thread":"Agent API conversation";return{conversation_id:e.id,type:n,label:i,participants:t,message_count:e.message_count,created_at:e.created_at,last_activity_at:e.last_activity_at}}let F=["deck","deck_id","deckId","deck_name","runtime","agent","adapter","transport","model","tool_profile","toolProfile","execution_kind","executionKind","permissions","provider_session_id","external_session_id","externalSessionId","session_id","sessionId","resume","resume_session","fresh_session","external_run_id","run_id","cwd","working_directory","workspace","grant","grants","capability","capabilities","principal","requester","owner"];function W(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function B(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(F.includes(i))throw new S("authority_not_allowed",`${n}${i} is chosen by Botmancers from the session and the Agent's configuration; a caller cannot set it.`);throw new S("invalid_request",`${n}${i} is not a field of this request.`)}}function K(e,t,n){if("string"!=typeof e||0===e.trim().length)throw new S("invalid_request",`${t} is required.`);if(e.length>n)throw new S("invalid_request",`${t} exceeds ${n} characters.`);return e}function H(e,t){let n=e.idempotency_key;if(void 0!==n&&"string"!=typeof n)throw new S("invalid_request","idempotency_key must be a string.");if(null!==t&&void 0!==n&&t!==n)throw new S("invalid_request","Idempotency-Key header and body idempotency_key differ.");let i=n??t??"";if(0===i.trim().length||i.length>160)throw new S("invalid_request","An idempotency key (1-160 characters) is required.");return i}function j(e,t){return i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(e.kind,e.id,t)}function G(e,n,r){let s=(0,t.randomUUID)();i.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s,"agent",e.kind,e.id,r);let o=i.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)");return o.run(s,e.kind,e.id,r),o.run(s,"bot",n,r),s}function V(e){return i.default.prepare("SELECT * FROM session_bindings WHERE id = ?").get(e)}function J(e,t){try{return i.default.transaction(()=>{let{input:n,afterCreate:i}=e(),r=c.exchanges.create(n);return r.created&&i&&i(r.exchange),t?.(r.exchange),r}).immediate()}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}}function U(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");B(e,["content","idempotency_key"],"");let n=H(e,t);return{content:K(e.content,"content",o.EXCHANGE_LIMITS.instructionChars),idempotencyKey:n}}function X(e,t){return t.requester_kind===e.principal.kind&&t.requester_id===e.principal.id&&I(e,t.source_agent_id)&&(null===t.destination_agent_id||I(e,t.destination_agent_id))}function Y(e,t){let n=c.exchanges.get(t);if(!n)throw b.exchange();if(!X(e,n))throw k("exchange");return n}let z=e=>e.idempotency_key.startsWith(u)?"session_message":"exchange";function Q(e,t){let n=t.idempotency_key.startsWith(u)?t.idempotency_key.slice(u.length):t.idempotency_key.startsWith(l)?t.idempotency_key.slice(l.length):t.idempotency_key;return(0,p.serviceRedactor)().deep({...e,kind:z(t),idempotency_key:n})}function Z(e){return{id:e.id,kind:z(e),mode:e.mode,state:e.state,source:{agent_id:e.source_agent_id,session_ref:e.source_binding_id},destination:e.destination_agent_id?{agent_id:e.destination_agent_id,session_ref:e.destination_binding_id}:null,failure:"failed"===e.state?{code:e.failure_code??"failed"}:null,created_at:e.created_at,updated_at:e.updated_at,terminal_at:e.terminal_at}}function ee(e,t){let n=c.exchanges.require(t);return X(e,n)?Q((0,c.getExchangeView)(t),n):Z(n)}let et=["exchange_id","parent_exchange_id"];async function en(e,t,n,i){let r=Y(e,t);try{let{replayed:t}=await (0,c.cancelExchangeCommand)(r.id,e.principal,n,i);return{exchange:ee(e,r.id),replayed:t}}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}}let ei=e=>"resume"===e?"sessions:resume":"sessions:message";function er(e){if(e instanceof w.PinError){if("session_not_found"===e.code)throw b.session();if("agent_not_found"===e.code)throw b.agent();if("pin_not_found"===e.code)throw b.pin();if("conversation_not_found"===e.code)throw b.conversation();throw new S(e.code,e.message)}if(e instanceof d.ExchangeError)throw R(e);throw e}function es(e,t){let n;try{n=(0,w.requirePin)(e.principal,t)}catch(e){er(e)}if(!I(e,n.agent_id))throw k("pin");return n}function eo(e){return(0,p.serviceRedactor)().deep((0,w.pinView)(e))}async function ea(e,t,n,i){x(e,t);try{let r=await (0,w.messageAgent)({requester:e.principal,agentId:t,content:n.content,idempotencyKey:n.idempotencyKey,mayStart:!0,onResolved:e=>i.onTarget({agentId:e.agentId,sessionRef:e.sessionRef,capability:"started"===e.resolution?"sessions:start":"sessions:message",action:"started"===e.resolution?"agents.message.start":"agents.message"}),onCommit:()=>i.onCommit()});return{body:{pin:eo(r.pin),turn:(0,p.serviceRedactor)().deep(r.turn),resolution:r.resolution,replayed:r.replayed},settled:r.settled}}catch(e){er(e)}}async function ed(e,t,n,i){let r=(0,w.sessionOwner)(t);if(!r)throw b.session();let s=ei(n.action);if(i.onTarget({agentId:r,sessionRef:t,capability:s,action:"resume"===n.action?"pins.resume":"pins.ask"}),!I(e,r))throw k("session");n.replacePinRef&&es(e,n.replacePinRef);try{let{pin:r,created:s,replaced:o}=await (0,w.createPin)({requester:e.principal,sessionRef:t,action:n.action,approveWrite:n.approveWrite,idempotencyKey:n.idempotencyKey,replacePinRef:n.replacePinRef,onCommit:()=>i.onCommit()});return{pin:eo(r),replaced_pin_ref:o?.id??null,replayed:!s}}catch(e){er(e)}}async function ec(e,t,n,i){let r=es(e,t);i.onTarget({agentId:r.agent_id,sessionRef:r.session_ref,capability:ei(r.action),action:"pins.send"});try{let t=await (0,w.sendPinTurn)({requester:e.principal,pinRef:r.id,content:n.content,idempotencyKey:n.idempotencyKey,onCommit:()=>i.onCommit()});return{body:{pin:eo(t.pin),turn:(0,p.serviceRedactor)().deep(t.turn),replayed:t.replayed},settled:t.settled}}catch(e){er(e)}}async function e_(e,t,n){let i=es(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ei(i.action),action:"pins.read"});try{let{pin:t,turns:n}=await (0,w.readPin)(e.principal,i.id);return{pin:eo(t),turns:(0,p.serviceRedactor)().deep(n)}}catch(e){er(e)}}let eu=["provider_session_id","external_session_id","claude_session_id","codex_thread_id","cursor_chat_id","thread_id","chat_id","cwd","workspace","latest","most_recent","title","title_match","active_since"],el=[...new Set([...F,...eu])];function ep(e,t,n){for(let i of Object.keys(e))if(!t.includes(i)){if(el.includes(i))throw new S("authority_not_allowed",`${n}${i} cannot select or describe a session; name it by session_ref only.`);throw new S("invalid_request",`${n}${i} is not a field of this request.`)}}function eg(e,t){if(null==e)return null;if("number"!=typeof e||!Number.isInteger(e))throw new S("invalid_request",`${t} must be an integer.`);return e}function ef(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(ep(e,["audience","ttl_seconds","max_turns","agent_id","idempotency_key"],""),!W(e.audience))throw new S("invalid_request",'audience must be one object { kind: "slack", team_id, channel_id }.');if(ep(e.audience,["kind","team_id","channel_id"],"audience."),!(0,v.isSlackAudience)(e.audience))throw new S("invalid_request",'audience must be { kind: "slack", team_id: "T…", channel_id: "C…" } with exact Slack ids.');return{audience:{kind:"slack",team_id:e.audience.team_id,channel_id:e.audience.channel_id},ttlSeconds:eg(e.ttl_seconds,"ttl_seconds"),maxTurns:eg(e.max_turns,"max_turns"),agentId:void 0===e.agent_id||null===e.agent_id?null:K(e.agent_id,"agent_id",200),idempotencyKey:H(e,t)}}let eh=["session_ref","state","cursor","limit"],em=["active","expired","revoked"];function ev(e){if(e instanceof v.ShareError){if("session_not_found"===e.code)throw b.session();if("share_not_found"===e.code)throw b.share();throw new S(e.code,e.message)}er(e)}function ew(e,t){let n=(0,v.shareRow)(t);if(!n)throw b.share();if(!(n.creator_kind===e.principal.kind&&n.creator_id===e.principal.id&&I(e,n.agent_id)))throw k("share");return n}function ey(e,t=(0,p.serviceRedactor)()){return t.deep((0,v.shareView)(e))}async function eE(e,t,n,i){let r=(0,w.sessionOwner)(t);if(i.onTarget({agentId:r,sessionRef:t}),!r)throw b.session();if(!I(e,r))throw k("session");if(null!==n.agentId&&n.agentId!==r)throw b.session();try{let{share:r,created:s}=await (0,v.createShare)({creator:e.principal,sessionRef:t,agentId:n.agentId,audience:n.audience,ttlSeconds:n.ttlSeconds,maxTurns:n.maxTurns,idempotencyKey:n.idempotencyKey,createdVia:"session_ref",onCommit:()=>i.onCommit()});return{share:ey(r),replayed:!s}}catch(e){ev(e)}}let eS=["audience","ttl_seconds","max_turns","agent_id","idempotency_key"];async function eb(e,n,i,r){if(r.onTarget({agentId:n.agentId,sessionRef:n.sessionRef}),null!==i.agentId&&i.agentId!==n.agentId)throw b.session();try{var s,o;let{share:a,created:d}=await (0,v.createShare)({creator:e.principal,sessionRef:n.sessionRef,agentId:n.agentId,audience:i.audience,ttlSeconds:i.ttlSeconds,maxTurns:i.maxTurns,idempotencyKey:(s=n.sessionRef,o=i.idempotencyKey,`current:${(0,t.createHash)("sha256").update(s).digest("hex").slice(0,24)}:${o}`),createdVia:"current_session",onCommit:()=>r.onCommit()});return{share:ey(a),replayed:!d}}catch(e){ev(e)}}e.s(["AUTHORITY_FIELDS",0,F,"MESSAGE_CONTENT_LIMIT",0,16e3,"PAGE_LIMITS",0,C,"SHARE_SELECTOR_FIELDS",0,eu,"ServiceApiError",0,S,"agentMessagingReadiness",0,T,"cancelServiceExchange",0,en,"capabilitiesView",0,function(e){let t=A(e).map(e=>({agent_id:e.id,capabilities:[..._]})).sort((e,t)=>e.agent_id<t.agent_id?-1:+(e.agent_id>t.agent_id));return{principal:{kind:e.principal.kind,id:e.principal.id},mode:e.mode,vocabulary:_,agents:t,limits:{page:C,content_chars:o.EXCHANGE_LIMITS.instructionChars,message_content_chars:16e3}}},"checkShareListParams",0,function(e){for(let t of e)if(!eh.includes(t)){if(el.includes(t))throw new S("authority_not_allowed",`${t} cannot select a session; filter by session_ref only.`);throw new S("invalid_request",`${t} is not a parameter of this list.`)}},"createCurrentSessionShare",0,eb,"createServiceExchange",0,function(e,t,n){let r=V(t.sessionRef);if(!r||null!==t.sourceAgentId&&t.sourceAgentId!==r.agent_id)throw b.session();if(!I(e,r.agent_id))throw k("session");if("ask"===t.mode&&(null!==t.destinationAgentId||null!==t.destinationConversationId))throw new S("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===t.mode){if(null===t.destinationAgentId)throw new S("destination_invalid","A Continue names destination.agent_id.");if(!i.bots.getById(t.destinationAgentId))throw b.agent();if(!I(e,t.destinationAgentId))throw k("agent")}let s=e.principal,o=`${l}${t.idempotencyKey}`,{exchange:a,created:d}=J(()=>{let e=Date.now(),n=j(s,o),i=t.originConversationId??n?.origin_conversation_id??G(s,r.agent_id,e),a="continue"!==t.mode?null:t.destinationConversationId??n?.destination_conversation_id??G(s,t.destinationAgentId,e);return{input:{requester:s,serviceGrant:!0,idempotencyKey:o,mode:t.mode,originConversationId:i,sourceAgentId:r.agent_id,sessionRef:r.id,destinationAgentId:t.destinationAgentId,destinationConversationId:a,instruction:t.instruction,now:e}}},n),_=(0,c.dispatchExchange)(a.id);return{exchange:ee(e,a.id),created:d,dispatched:_}},"createServiceShare",0,eE,"detachServicePin",0,function(e,t,n){let i=es(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref,capability:ei(i.action),action:"pins.detach"});try{let{pin:t,replayed:r}=(0,w.detachPin)(e.principal,i.id,{onCommit:()=>n.onCommit()});return{pin:eo(t),replayed:r}}catch(e){er(e)}},"getServiceAgent",0,function(e,t){return N(e,x(e,t))},"getServiceConversation",0,function(e,t,r,s){var o;x(e,t);let a=i.default.prepare(`${M} WHERE c.id = ?`).get(t,r);if(!a)throw b.conversation();let d=P(a.id);if(!$(e,d))throw k("conversation");let c=`messages:${a.id}`,_=function(e,t){try{return(0,n.decodePageCursor)(e,t)}catch(e){if(e instanceof n.InvalidPageCursorError)throw new S("invalid_request",e.message);throw e}}(c,s.cursor),u=i.default.prepare(`
14
14
  SELECT * FROM (
15
15
  SELECT m.id, m.sender_type, m.sender_id, m.sender_kind, m.request_id, m.content, m.created_at,
16
16
  ROW_NUMBER() OVER (ORDER BY m.rowid ASC) AS seq
17
17
  FROM messages m WHERE m.conversation_id = ?
18
18
  ) WHERE seq < ? ORDER BY seq DESC LIMIT ?
19
- `).all(o.id,_?_.at:Number.MAX_SAFE_INTEGER,s.limit+1),p=l.slice(0,s.limit).reverse(),g=(0,u.serviceRedactor)();return{...L(o,d),messages:p.map(e=>{var t,n;let i,r=g.text(e.content);return{message_id:e.id,seq:e.seq,sender:(t=e,n=o,i=t.sender_kind??("bot"===t.sender_type?"bot":"person"),t.sender_id?{kind:i,id:t.sender_id}:"bot"!==i&&n.origin_kind===i&&n.origin_id?{kind:i,id:n.origin_id}:{kind:i,id:"unknown"}),content:r.length>16e3?r.slice(0,16e3):r,truncated:r.length>16e3,request_id:e.request_id,created_at:e.created_at}}),next_cursor:l.length>s.limit&&p.length>0?(a={at:p[0].seq,tie:0,id:p[0].id},(0,n.encodePageCursor)(c,a)):null}},"getServiceExchange",0,function(e,t){let n=V(e,t,"exchanges:read");return J((0,c.getExchangeView)(n.id),n)},"getServiceSession",0,function(e,t,n){k(e,t,"sessions:read");let r=(0,o.getAgentSession)(i.default,t,n);if(!r)throw y.session();return(0,u.serviceRedactor)().deep({...q((0,h.sessionsWithActions)(t,[r])[0]),attempts:r.attempts,usage_samples:r.usage_samples.map(e=>({...e}))})},"getServiceShare",0,function(e,t,n){let i=eh(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:em(i)}},"holds",0,I,"listServiceAgents",0,function(e,t){let n=[...e.agents.keys()].filter(t=>I(e,t,"agents:read")).map(t=>C(e,i.bots.getById(t)));return A(`agents:${e.principal.id}`,n,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),t.cursor,t.limit)},"listServiceConversations",0,function(e,t,n){k(e,t,"conversations:read");let r=i.default.prepare(N).all(t).flatMap(t=>{let n=O(t.id);return P(e,n)?[L(t,n)]:[]});return A(`conversations:${t}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),n.cursor,n.limit)},"listServiceExchanges",0,function(e,t){let n=i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>j(e,t,"exchanges:read")).map(U);return A(`exchanges:${e.principal.id}`,n,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),t.cursor,t.limit)},"listServiceSessions",0,function(e,t,n){k(e,t,"sessions:read");let r=n.status??"all";if(!(0,o.isSessionFilter)(r))throw new w("invalid_request","status must be active, ended, or all.");let s=(0,u.serviceRedactor)(),a=(0,h.sessionsWithActions)(t,(0,o.listAgentSessions)(i.default,t,r)).map(e=>s.deep(q(e)));return A(`sessions:${t}:${r}`,a,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),n.cursor,n.limit)},"listServiceShares",0,function(e,t){if(null!==t.sessionRef&&(""===t.sessionRef.trim()||t.sessionRef.length>200))throw new w("invalid_request","session_ref must be one session reference.");if(null!==t.state&&!eg.includes(t.state))throw new w("invalid_request","state must be active, expired, or revoked.");let n=(0,u.serviceRedactor)(),i=(0,f.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>I(e,t.agent_id,"shares:create")).map(e=>em(e,n)).filter(e=>null===t.state||e.state===t.state);return A(`shares:${e.principal.id}:${t.sessionRef??""}:${t.state??""}`,i,e=>({at:e.created_at,tie:e.created_at,id:e.share_ref}),t.cursor,t.limit)},"messageServiceAgent",0,er,"parseAgentMessageBody",0,function(e,t){return X(e,t)},"parseCancelBody",0,function(e){try{return(0,d.cancelReasonFromBody)(e)}catch(e){if(e instanceof d.ExchangeError)throw S(e);throw e}},"parseLimit",0,function(e,t=R.default,n=R.max){if(null===e||""===e)return t;if(!/^\d+$/.test(e)||1>Number(e)||Number(e)>n)throw new w("invalid_request",`limit must be an integer from 1 to ${n}.`);return Number(e)},"parsePinBody",0,function(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(F(e,["action","approve_write","replace_pin_ref","idempotency_key"],""),"ask"!==e.action&&"resume"!==e.action)throw new w("invalid_request",'action must be "ask" or "resume".');if(void 0!==e.approve_write&&"boolean"!=typeof e.approve_write)throw new w("invalid_request","approve_write must be true or false.");return{action:e.action,approveWrite:!0===e.approve_write,replacePinRef:void 0===e.replace_pin_ref||null===e.replace_pin_ref?null:D(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:K(e,t)}},"parseServiceExchangeBody",0,function(e,t){if(!$(e))throw new w("invalid_request","The body must be a JSON object.");if(Q.some(t=>t in e))throw new w("recursive_exchange","An exchange cannot be started from another exchange.");if(F(e,["mode","idempotency_key","origin_conversation_id","source","destination","instruction"],""),"ask"!==e.mode&&"continue"!==e.mode)throw new w("invalid_request",'mode must be "ask" or "continue".');if(!$(e.source))throw new w("invalid_request","source must be one object { session_ref, agent_id? }.");F(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!$(e.destination))throw new w("destination_invalid","destination must be one object { agent_id, conversation_id? }.");F(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:D(e,t,200);return{mode:e.mode,idempotencyKey:K(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:D(e.source.session_ref,"source.session_ref",200),destinationAgentId:n?i(n.agent_id,"destination.agent_id"):null,destinationConversationId:n?i(n.conversation_id,"destination.conversation_id"):null,instruction:D(e.instruction,"instruction",a.EXCHANGE_LIMITS.instructionChars)}},"parseSessionMessageBody",0,X,"parseShareCreateBody",0,el,"parseShareCurrentBody",0,function(e,t){if($(e)&&Object.prototype.hasOwnProperty.call(e,"session_ref"))throw new w("invalid_request","Share-current takes no session_ref: its session is the one this launch is bound to. To share another session, use its session_ref with create-share.");return $(e)&&e_(e,ew,""),el(e,t)},"parseShareRevokeBody",0,function(e){let t;if(""!==e.trim()){try{t=JSON.parse(e)}catch{throw new w("invalid_request","The body must be empty or a JSON object.")}if(!$(t))throw new w("invalid_request","The body must be empty or a JSON object.");e_(t,["idempotency_key"],""),void 0!==t.idempotency_key&&D(t.idempotency_key,"idempotency_key",160)}},"pinServiceSession",0,es,"readServicePin",0,eo,"requireShareCurrentCaller",0,function(e){if(e.kind!==g.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==g.SESSION_CONTEXT_PRINCIPAL.id)throw new w("invalid_request","Share-current is only available inside a Botmancers-launched session, authenticated by its session context, not a service token. Pass session_ref to create-share instead.")},"revokeServiceShare",0,function(e,t,n){let i=eh(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref});try{let{share:e,replayed:t}=(0,f.revokeShare)(i.id,{onCommit:()=>n.onCommit()});return{share:em(e),replayed:t}}catch(e){ef(e)}},"sendServicePinMessage",0,ea,"sendServiceSessionMessage",0,function(e,n,r,s){let a=H(n);if(!a){let t=i.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(t&&I(e,t.agent_id,"sessions:message"))throw new w("session_not_resumable","This session is not reachable through session messages.");throw y.session()}if(!I(e,a.agent_id,"sessions:message"))throw E("session");let o=e.principal,d=`${_.MESSAGE_KEY_PREFIX}${r.idempotencyKey}`,{exchange:u,created:l}=G(()=>{let e=Date.now(),n=B(o,d),s=i.default.prepare(`
19
+ `).all(a.id,_?_.at:Number.MAX_SAFE_INTEGER,s.limit+1),l=u.slice(0,s.limit).reverse(),g=(0,p.serviceRedactor)();return{...D(a,d),messages:l.map(e=>{var t,n;let i,r=g.text(e.content);return{message_id:e.id,seq:e.seq,sender:(t=e,n=a,i=t.sender_kind??("bot"===t.sender_type?"bot":"person"),t.sender_id?{kind:i,id:t.sender_id}:"bot"!==i&&n.origin_kind===i&&n.origin_id?{kind:i,id:n.origin_id}:{kind:i,id:"unknown"}),content:r.length>16e3?r.slice(0,16e3):r,truncated:r.length>16e3,request_id:e.request_id,created_at:e.created_at}}),next_cursor:u.length>s.limit&&l.length>0?(o={at:l[0].seq,tie:0,id:l[0].id},(0,n.encodePageCursor)(c,o)):null}},"getServiceExchange",0,function(e,t){let n=Y(e,t);return Q((0,c.getExchangeView)(n.id),n)},"getServiceSession",0,function(e,t,n){x(e,t);let r=(0,a.getAgentSession)(i.default,t,n);if(!r)throw b.session();return(0,p.serviceRedactor)().deep({...O((0,w.sessionsWithActions)(t,[r])[0]),attempts:r.attempts,usage_samples:r.usage_samples.map(e=>({...e}))})},"getServiceShare",0,function(e,t,n){let i=ew(e,t);return n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref}),{share:ey(i)}},"listServiceAgents",0,function(e,t){let n=A(e).map(t=>N(e,t));return q(`agents:${e.principal.id}`,n,e=>({at:e.last_activity_at,tie:e.created_at,id:e.agent_id}),t.cursor,t.limit)},"listServiceConversations",0,function(e,t,n){x(e,t);let r=i.default.prepare(M).all(t).flatMap(t=>{let n=P(t.id);return $(e,n)?[D(t,n)]:[]});return q(`conversations:${t}`,r,e=>({at:e.last_activity_at,tie:e.created_at,id:e.conversation_id}),n.cursor,n.limit)},"listServiceExchanges",0,function(e,t){let n=i.default.prepare("SELECT * FROM session_exchanges WHERE requester_kind = ? AND requester_id = ?").all(e.principal.kind,e.principal.id).filter(t=>X(e,t)).map(Z);return q(`exchanges:${e.principal.id}`,n,e=>({at:e.updated_at,tie:e.created_at,id:e.id}),t.cursor,t.limit)},"listServiceSessions",0,function(e,t,n){x(e,t);let r=n.status??"all";if(!(0,a.isSessionFilter)(r))throw new S("invalid_request","status must be active, ended, or all.");let s=(0,p.serviceRedactor)(),o=(0,w.sessionsWithActions)(t,(0,a.listAgentSessions)(i.default,t,r)).map(e=>s.deep(O(e)));return q(`sessions:${t}:${r}`,o,e=>({at:e.last_activity_at,tie:e.created_at,id:e.ref}),n.cursor,n.limit)},"listServiceShares",0,function(e,t){if(null!==t.sessionRef&&(""===t.sessionRef.trim()||t.sessionRef.length>200))throw new S("invalid_request","session_ref must be one session reference.");if(null!==t.state&&!em.includes(t.state))throw new S("invalid_request","state must be active, expired, or revoked.");let n=(0,p.serviceRedactor)(),i=(0,v.sharesCreatedBy)(e.principal,{sessionRef:t.sessionRef}).filter(t=>I(e,t.agent_id)).map(e=>ey(e,n)).filter(e=>null===t.state||e.state===t.state);return q(`shares:${e.principal.id}:${t.sessionRef??""}:${t.state??""}`,i,e=>({at:e.created_at,tie:e.created_at,id:e.share_ref}),t.cursor,t.limit)},"messageServiceAgent",0,ea,"parseAgentMessageBody",0,function(e,t){return U(e,t)},"parseCancelBody",0,function(e){try{return(0,d.cancelReasonFromBody)(e)}catch(e){if(e instanceof d.ExchangeError)throw R(e);throw e}},"parseLimit",0,function(e,t=C.default,n=C.max){if(null===e||""===e)return t;if(!/^\d+$/.test(e)||1>Number(e)||Number(e)>n)throw new S("invalid_request",`limit must be an integer from 1 to ${n}.`);return Number(e)},"parsePinBody",0,function(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(B(e,["action","approve_write","replace_pin_ref","idempotency_key"],""),"ask"!==e.action&&"resume"!==e.action)throw new S("invalid_request",'action must be "ask" or "resume".');if(void 0!==e.approve_write&&"boolean"!=typeof e.approve_write)throw new S("invalid_request","approve_write must be true or false.");return{action:e.action,approveWrite:!0===e.approve_write,replacePinRef:void 0===e.replace_pin_ref||null===e.replace_pin_ref?null:K(e.replace_pin_ref,"replace_pin_ref",200),idempotencyKey:H(e,t)}},"parseServiceExchangeBody",0,function(e,t){if(!W(e))throw new S("invalid_request","The body must be a JSON object.");if(et.some(t=>t in e))throw new S("recursive_exchange","An exchange cannot be started from another exchange.");if(B(e,["mode","idempotency_key","origin_conversation_id","source","destination","instruction"],""),"ask"!==e.mode&&"continue"!==e.mode)throw new S("invalid_request",'mode must be "ask" or "continue".');if(!W(e.source))throw new S("invalid_request","source must be one object { session_ref, agent_id? }.");B(e.source,["session_ref","agent_id"],"source.");let n=null;if(void 0!==e.destination&&null!==e.destination){if(!W(e.destination))throw new S("destination_invalid","destination must be one object { agent_id, conversation_id? }.");B(e.destination,["agent_id","conversation_id"],"destination."),n=e.destination}let i=(e,t)=>null==e?null:K(e,t,200);return{mode:e.mode,idempotencyKey:H(e,t),originConversationId:i(e.origin_conversation_id,"origin_conversation_id"),sourceAgentId:i(e.source.agent_id,"source.agent_id"),sessionRef:K(e.source.session_ref,"source.session_ref",200),destinationAgentId:n?i(n.agent_id,"destination.agent_id"):null,destinationConversationId:n?i(n.conversation_id,"destination.conversation_id"):null,instruction:K(e.instruction,"instruction",o.EXCHANGE_LIMITS.instructionChars)}},"parseSessionMessageBody",0,U,"parseShareCreateBody",0,ef,"parseShareCurrentBody",0,function(e,t){if(W(e)&&Object.prototype.hasOwnProperty.call(e,"session_ref"))throw new S("invalid_request","Share-current takes no session_ref: its session is the one this launch is bound to. To share another session, use its session_ref with create-share.");return W(e)&&ep(e,eS,""),ef(e,t)},"parseShareRevokeBody",0,function(e){let t;if(""!==e.trim()){try{t=JSON.parse(e)}catch{throw new S("invalid_request","The body must be empty or a JSON object.")}if(!W(t))throw new S("invalid_request","The body must be empty or a JSON object.");ep(t,["idempotency_key"],""),void 0!==t.idempotency_key&&K(t.idempotency_key,"idempotency_key",160)}},"pinServiceSession",0,ed,"readServicePin",0,e_,"requireShareCurrentCaller",0,function(e){if(e.kind!==h.SESSION_CONTEXT_PRINCIPAL.kind||e.id!==h.SESSION_CONTEXT_PRINCIPAL.id)throw new S("invalid_request","Share-current is only available inside a Botmancers-launched session, authenticated by its session context, not a service token. Pass session_ref to create-share instead.")},"revokeServiceShare",0,function(e,t,n){let i=ew(e,t);n.onTarget({agentId:i.agent_id,sessionRef:i.session_ref});try{let{share:e,replayed:t}=(0,v.revokeShare)(i.id,{onCommit:()=>n.onCommit()});return{share:ey(e),replayed:t}}catch(e){ev(e)}},"sendServicePinMessage",0,ec,"sendServiceSessionMessage",0,function(e,n,r,s){let o=V(n);if(!o){let t=i.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ? AND binding_id IS NULL").get(n);if(t&&I(e,t.agent_id))throw new S("session_not_resumable","This session is not reachable through session messages.");throw b.session()}if(!I(e,o.agent_id))throw k("session");let a=e.principal,d=`${u}${r.idempotencyKey}`,{exchange:_,created:l}=J(()=>{let e=Date.now(),n=j(a,d),s=i.default.prepare(`
20
20
  SELECT origin_conversation_id FROM session_exchanges
21
21
  WHERE requester_kind = ? AND requester_id = ? AND source_binding_id = ? AND mode = 'ask' AND idempotency_key LIKE 'message:%'
22
22
  ORDER BY created_at ASC, id ASC LIMIT 1
23
- `).get(o.kind,o.id,a.id),c=n?.origin_conversation_id??s?.origin_conversation_id??W(o,a.agent_id,e);return{input:{requester:o,serviceGrant:!0,idempotencyKey:d,mode:"ask",originConversationId:c,sourceAgentId:a.agent_id,sessionRef:a.id,instruction:r.content,now:e},afterCreate:n=>{i.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.origin_conversation_id,"user",o.id,o.kind,n.source_request_id,r.content,e)}}},s),p=(0,c.dispatchExchange)(u.id),g=u.source_request_id?i.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(u.source_request_id):void 0,f=i.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(u.origin_conversation_id,u.source_request_id,o.kind);return{accepted:{session_ref:a.id,agent_id:a.agent_id,exchange_id:u.id,request_id:u.source_request_id,conversation_id:u.origin_conversation_id,message_id:f?.id??null,state:g?(0,c.apiStateOf)(g.state):"accepted",replayed:!l},dispatched:p}},"serviceContext",0,function(e){if("service"!==e.kind)throw new w("principal_not_allowed","The granted service API accepts only service principals.");if(e.id===g.SESSION_CONTEXT_SERVICE_ID)return{principal:e,mode:"narrow",agents:b};let t=(0,_.loadServiceGrants)();if("invalid"===t.state)throw new w("grants_unavailable","The service grants are not available; the owner must fix the grants document.");return"absent"===t.state?{principal:e,mode:"narrow",agents:b}:{principal:e,mode:"granted",agents:t.grants.get(e.id)??b}},"sessionContextError",0,function(e){return new w("session_context_required","This caller has no exact session context; share a session explicitly by its session_ref (botmancers_list_sessions).",{reason:e.reason})},"warmServiceAgent",0,T])}];
23
+ `).get(a.kind,a.id,o.id),c=n?.origin_conversation_id??s?.origin_conversation_id??G(a,o.agent_id,e);return{input:{requester:a,serviceGrant:!0,idempotencyKey:d,mode:"ask",originConversationId:c,sourceAgentId:o.agent_id,sessionRef:o.id,instruction:r.content,now:e},afterCreate:n=>{i.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.origin_conversation_id,"user",a.id,a.kind,n.source_request_id,r.content,e)}}},s),p=(0,c.dispatchExchange)(_.id),g=_.source_request_id?i.default.prepare("SELECT state FROM work_requests WHERE id = ?").get(_.source_request_id):void 0,f=i.default.prepare("SELECT id FROM messages WHERE conversation_id = ? AND request_id = ? AND sender_kind = ? ORDER BY rowid ASC LIMIT 1").get(_.origin_conversation_id,_.source_request_id,a.kind);return{accepted:{session_ref:o.id,agent_id:o.agent_id,exchange_id:_.id,request_id:_.source_request_id,conversation_id:_.origin_conversation_id,message_id:f?.id??null,state:g?(0,c.apiStateOf)(g.state):"accepted",replayed:!l},dispatched:p}},"serviceContext",0,function(e){if("service"!==e.kind)throw new S("principal_not_allowed","The service API accepts only service principals.");return{principal:e,mode:"granted",reachesAgents:!m.RESERVED_SERVICE_IDS.includes(e.id)}},"sessionContextError",0,function(e){return new S("session_context_required","This caller has no exact session context; share a session explicitly by its session_ref (botmancers_list_sessions).",{reason:e.reason})},"warmServiceAgent",0,L],9501)}];
24
24
 
25
25
  //# sourceMappingURL=lib_service-api_ts_18eok4w._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414),s=e.i(89443);let n="The shared session could not answer this question.",i=Object.freeze({share_expired:"This shared session is no longer available (the share expired).",share_revoked:"This shared session is no longer available (the owner revoked the share).",share_turn_in_progress:"A question is still being answered; ask again when it finishes.",share_turn_limit:"This share has used all of its questions.",source_session_busy:"The session is busy right now; ask again shortly."});t.default.exec(`
1
+ module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414),n=e.i(89443);let s="The shared session could not answer this question.",i=Object.freeze({share_expired:"This shared session is no longer available (the share expired).",share_revoked:"This shared session is no longer available (the owner revoked the share).",share_turn_in_progress:"A question is still being answered; ask again when it finishes.",share_turn_limit:"This share has used all of its questions.",source_session_busy:"The session is busy right now; ask again shortly."});t.default.exec(`
2
2
  CREATE TABLE IF NOT EXISTS slack_share_threads (
3
3
  share_ref TEXT PRIMARY KEY,
4
4
  session_ref TEXT NOT NULL,
@@ -45,19 +45,19 @@ module.exports=[15050,e=>{"use strict";var t=e.i(99904),r=e.i(54799),a=e.i(72414
45
45
  );
46
46
  CREATE UNIQUE INDEX IF NOT EXISTS idx_slack_questions_turn ON slack_questions(share_ref, turn_ref) WHERE turn_ref IS NOT NULL;
47
47
  CREATE INDEX IF NOT EXISTS idx_slack_questions_state ON slack_questions(state, created_at);
48
- `);let o=/^[A-Z0-9]{2,32}$/,l=/^\d{1,12}\.\d{1,9}$/,d=/^[A-Za-z0-9._:-]{1,200}$/,c=/^[A-Za-z0-9]{1,64}$/,_=e=>"string"==typeof e?e:null;function u(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"")}function p(e,t){if(e.length<=t)return e;let r=t-1,a=e.charCodeAt(r-1);a>=55296&&a<=56319&&(r-=1);let s=e.lastIndexOf("&",r-1);return -1!==s&&s>=r-4&&e.indexOf(";",s)>=r&&(r=s),`${e.slice(0,r)}…`}function h(e){return t.default.prepare("SELECT * FROM slack_share_threads WHERE share_ref = ?").get(e)}function f(e){return t.default.prepare("SELECT * FROM slack_questions WHERE message_key = ?").get(e)}var y=e.i(90440),m=e.i(82554);class E extends Error{code;slackError;constructor(e,t,r=null){super(t),this.name="SlackTransportError",this.code=e,this.slackError=r}}let T=/^[a-z0-9_]{1,64}$/;function k(e){let t=e?.data,r=t&&"string"==typeof t.error?t.error:null;return r&&T.test(r)?r:null}function g(e){let t=[e.appToken,e.botToken].filter(e=>"string"==typeof e&&e.length>=8);return e=>t.reduce((e,t)=>e.split(t).join("[redacted]"),String(e)).replace(/\bx(?:app|ox[abpers])-[A-Za-z0-9-]+/g,"[redacted]")}async function w(e){let t;try{t=await e.auth.test()}catch(t){let e=k(t);throw new E("slack_auth_failed",`Slack auth.test failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.user_id||"string"!=typeof t.team_id)throw new E("slack_auth_failed","Slack auth.test returned no bot identity.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{user_id:t.user_id,team_id:t.team_id}}let v=/^xapp-[A-Za-z0-9-]{8,250}$/,N=/^xoxb-[A-Za-z0-9-]{8,250}$/,S=Symbol.for("botmancers.slack-runtime"),L=globalThis;function R(){return L[S]||(L[S]={status:{state:"stopped",reason:null,since:Date.now(),connections:0},relay:null,clients:null,stop:null,starting:null}),L[S]}function A(){return{...R().status}}async function I(){let e=R();return e.starting&&await e.starting.catch(()=>{}),e.stop&&await e.stop(),A()}async function O(e,S){let L,R=S.now??(()=>Date.now()),I=function(e=process.env){let t=(e.BOTMANCERS_SLACK_APP_TOKEN??"").trim(),r=(e.BOTMANCERS_SLACK_BOT_TOKEN??"").trim();if(!t&&!r)return{state:"disabled",reason:"slack_tokens_absent"};if(!t)return{state:"misconfigured",reason:"app_token_missing"};if(!r)return{state:"misconfigured",reason:"bot_token_missing"};if(!v.test(t))return{state:"misconfigured",reason:"app_token_invalid"};if(!N.test(r))return{state:"misconfigured",reason:"bot_token_invalid"};let a=(0,s.loadSessionSharesConfig)(e);return"absent"===a.state?{state:"misconfigured",reason:"share_config_absent"}:"invalid"===a.state?{state:"misconfigured",reason:"share_config_invalid"}:0===a.config.audiences.length?{state:"misconfigured",reason:"share_config_no_audience"}:{state:"ready",tokens:{appToken:t,botToken:r},teams:new Set(a.config.audiences.map(e=>e.team_id))}}(S.env??process.env),O="ready"===I.state?g(I.tokens):e=>e,U=e=>(S.log??(e=>console.log(e)))(O(e)),b=0,M=(t,r=null)=>{(e.status.state!==t||e.status.reason!==r)&&U(`Slack relay: ${t}${r?` (${r})`:""}`),e.status={state:t,reason:r,since:R(),connections:b}},C=e=>U(`Slack relay error: ${e instanceof Error?e.message:"unknown error"}`);if("ready"!==I.state)return M(I.state,I.reason),A();M("connecting");let D=(S.clients??(e=>(function(e,t={}){let r=function(e,t=e=>console.warn(e)){let r="slack",a=a=>(...s)=>t(e(`Slack ${r} ${a}: ${s.map(e=>e instanceof Error?e.message:String(e)).join(" ")}`).slice(0,500));return{debug:()=>{},info:()=>{},warn:a("warn"),error:a("error"),setLevel:()=>{},getLevel:()=>"warn",setName:e=>{r=e}}}(g(e),t.log),a=t.slackApiUrl?{slackApiUrl:t.slackApiUrl}:{};return{socket:new y.SocketModeClient({appToken:e.appToken,logger:r,autoReconnectEnabled:!0,...t.clientPingTimeoutMs?{clientPingTimeout:t.clientPingTimeoutMs}:{},...t.serverPingTimeoutMs?{serverPingTimeout:t.serverPingTimeoutMs}:{},clientOptions:{...a}}),web:new m.WebClient(e.botToken,{logger:r,timeout:15e3,retryConfig:{retries:2,factor:2,minTimeout:500,maxTimeout:4e3},...a})}})(e,{log:U,...S.clientOptions})))(I.tokens);try{L=await w(D.web)}catch(e){return C(e),M("failed","slack_auth_failed"),A()}if(!I.teams.has(L.team_id))return M("misconfigured","workspace_not_allowlisted"),A();let q=function(e,t={}){let{socket:r,web:a}=e,n=t.stopGraceMs??5e3,i=t.onError??(e=>console.error("Slack transport:",e instanceof Error?e.message:"unknown error")),o="idle",l=null,d=new Set;return{async start(e){if("idle"!==o)throw new E("started"===o?"slack_transport_started":"slack_transport_stopped","This Slack transport was already started.");o="started",l=t=>{if("started"!==o||t?.type!=="events_api")return;let r={envelope_id:t.envelope_id,type:t.type,accepts_response_payload:t.accepts_response_payload,retry_attempt:t.retry_num,retry_reason:t.retry_reason,payload:t.body},a=Promise.resolve().then(()=>e(r)).catch(i);d.add(a),a.finally(()=>d.delete(a))},r.on("slack_event",l);try{await r.start()}catch(t){r.off("slack_event",l),l=null,o="stopped",await r.disconnect().catch(()=>{});let e=k(t);throw new E("slack_connect_failed",`The Slack Socket Mode connection could not be opened${e?` (${e})`:""}.`,e)}},async ack(e){if("idle"===o||"stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");try{await r.send(e)}catch{throw new E("slack_ack_failed","The Socket Mode acknowledgement could not be sent (not connected).")}},async post(e){let t;if("stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");if("string"!=typeof e.text||e.text.length>s.SHARE_LIMITS.replyChars)throw new E("slack_post_too_long",`A Slack post is at most ${s.SHARE_LIMITS.replyChars} characters.`);try{t=await a.chat.postMessage({channel:e.channel,...null!==e.thread_ts?{thread_ts:e.thread_ts}:{},text:e.text,metadata:{event_type:e.metadata.event_type,event_payload:{...e.metadata.event_payload}},unfurl_links:!1,unfurl_media:!1})}catch(t){let e=k(t);throw new E("slack_post_failed",`Slack chat.postMessage failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.ts)throw new E("slack_post_failed","Slack chat.postMessage returned no message ts.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{ts:t.ts}},async stop(){if("stopped"===o||"stopping"===o)return;let e="started"===o;if(o="stopping",l&&r.off("slack_event",l),l=null,d.size>0){let e;await Promise.race([Promise.allSettled([...d]),new Promise(t=>{e=setTimeout(t,n)})]),clearTimeout(e)}o="stopped",e&&await r.disconnect().catch(i)}}}(D,{stopGraceMs:S.stopGraceMs,onError:C}),X=function(e){let{transport:y,botUserId:m}=e,E=e.now??(()=>Date.now()),T=e.onError??(e=>console.error("Slack relay:",e instanceof Error?e.message:"unknown error")),k=new Set,g=new Set,w=new Map,v=new Set;async function N(e){let r=h(e);if(r)return{thread:r,created:!1};let a=w.get(e);if(a)return a;let n=(async()=>{let r=(0,s.shareRow)(e);if(!r)throw new s.ShareError("share_not_found","No share with that reference.");let a=(0,s.shareState)(r);if("revoked"===a)throw new s.ShareError("share_revoked","This share was revoked.");if("expired"===a)throw new s.ShareError("share_expired","This share has expired.");let n={kind:"slack",team_id:r.audience_team_id,channel_id:r.audience_channel_id};if(!(0,s.audienceAllowed)(n))throw new s.ShareError("audience_not_allowed","That audience is not on the owner's share allowlist (session-shares.json).");let i=await y.post({channel:n.channel_id,thread_ts:null,text:"A coding-agent session was shared here (read-only). Reply in this thread to ask it a question.",metadata:{event_type:"botmancers_share",event_payload:{share_ref:r.id}}});if("string"!=typeof i?.ts||!l.test(i.ts))throw Error("The transport returned no message ts for the anchor.");return t.default.prepare("INSERT INTO slack_share_threads (share_ref, session_ref, team_id, channel_id, thread_ts, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(r.id,r.session_ref,n.team_id,n.channel_id,i.ts,E()),{thread:h(r.id),created:!0}})();w.set(e,n);try{return await n}finally{w.delete(e)}}let S=t.default.transaction(e=>{var r,a,n;let i=e.delivery;if(t.default.prepare("SELECT 1 FROM slack_deliveries WHERE envelope_id = ? AND retry_attempt = ?").get(i.envelope_id,i.retry_attempt))return{kind:"duplicate_delivery"};let o=E(),l=(r,a)=>{t.default.prepare(`
48
+ `);let o=/^[A-Z0-9]{2,32}$/,l=/^\d{1,12}\.\d{1,9}$/,d=/^[A-Za-z0-9._:-]{1,200}$/,c=/^[A-Za-z0-9]{1,64}$/,_=e=>"string"==typeof e?e:null;function u(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"")}function p(e,t){if(e.length<=t)return e;let r=t-1,a=e.charCodeAt(r-1);a>=55296&&a<=56319&&(r-=1);let n=e.lastIndexOf("&",r-1);return -1!==n&&n>=r-4&&e.indexOf(";",n)>=r&&(r=n),`${e.slice(0,r)}…`}function h(e){return t.default.prepare("SELECT * FROM slack_share_threads WHERE share_ref = ?").get(e)}function f(e){return t.default.prepare("SELECT * FROM slack_questions WHERE message_key = ?").get(e)}var y=e.i(90440),m=e.i(82554);class E extends Error{code;slackError;constructor(e,t,r=null){super(t),this.name="SlackTransportError",this.code=e,this.slackError=r}}let T=/^[a-z0-9_]{1,64}$/;function g(e){let t=e?.data,r=t&&"string"==typeof t.error?t.error:null;return r&&T.test(r)?r:null}function k(e){let t=[e.appToken,e.botToken].filter(e=>"string"==typeof e&&e.length>=8);return e=>t.reduce((e,t)=>e.split(t).join("[redacted]"),String(e)).replace(/\bx(?:app|ox[abpers])-[A-Za-z0-9-]+/g,"[redacted]")}async function w(e){let t;try{t=await e.auth.test()}catch(t){let e=g(t);throw new E("slack_auth_failed",`Slack auth.test failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.user_id||"string"!=typeof t.team_id)throw new E("slack_auth_failed","Slack auth.test returned no bot identity.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{user_id:t.user_id,team_id:t.team_id}}let v=/^xapp-[A-Za-z0-9-]{8,250}$/,N=/^xoxb-[A-Za-z0-9-]{8,250}$/,S=Symbol.for("botmancers.slack-runtime"),L=globalThis;function R(){return L[S]||(L[S]={status:{state:"stopped",reason:null,since:Date.now(),connections:0},relay:null,clients:null,stop:null,starting:null}),L[S]}function A(){return{...R().status}}async function I(){let e=R();return e.starting&&await e.starting.catch(()=>{}),e.stop&&await e.stop(),A()}async function O(e,S){let L,R=S.now??(()=>Date.now()),I=function(e=process.env){let t=(e.BOTMANCERS_SLACK_APP_TOKEN??"").trim(),r=(e.BOTMANCERS_SLACK_BOT_TOKEN??"").trim();if(!t&&!r)return{state:"disabled",reason:"slack_tokens_absent"};if(!t)return{state:"misconfigured",reason:"app_token_missing"};if(!r)return{state:"misconfigured",reason:"bot_token_missing"};if(!v.test(t))return{state:"misconfigured",reason:"app_token_invalid"};if(!N.test(r))return{state:"misconfigured",reason:"bot_token_invalid"};let a=(0,n.loadSessionSharesConfig)(e);return"absent"===a.state?{state:"misconfigured",reason:"share_config_absent"}:"invalid"===a.state?{state:"misconfigured",reason:"share_config_invalid"}:0===a.config.audiences.length?{state:"misconfigured",reason:"share_config_no_audience"}:{state:"ready",tokens:{appToken:t,botToken:r},teams:new Set(a.config.audiences.map(e=>e.team_id))}}(S.env??process.env),O="ready"===I.state?k(I.tokens):e=>e,U=e=>(S.log??(e=>console.log(e)))(O(e)),b=0,M=(t,r=null)=>{(e.status.state!==t||e.status.reason!==r)&&U(`Slack relay: ${t}${r?` (${r})`:""}`),e.status={state:t,reason:r,since:R(),connections:b}},C=e=>U(`Slack relay error: ${e instanceof Error?e.message:"unknown error"}`);if("ready"!==I.state)return M(I.state,I.reason),A();M("connecting");let D=(S.clients??(e=>(function(e,t={}){let r=function(e,t=e=>console.warn(e)){let r="slack",a=a=>(...n)=>t(e(`Slack ${r} ${a}: ${n.map(e=>e instanceof Error?e.message:String(e)).join(" ")}`).slice(0,500));return{debug:()=>{},info:()=>{},warn:a("warn"),error:a("error"),setLevel:()=>{},getLevel:()=>"warn",setName:e=>{r=e}}}(k(e),t.log),a=t.slackApiUrl?{slackApiUrl:t.slackApiUrl}:{};return{socket:new y.SocketModeClient({appToken:e.appToken,logger:r,autoReconnectEnabled:!0,...t.clientPingTimeoutMs?{clientPingTimeout:t.clientPingTimeoutMs}:{},...t.serverPingTimeoutMs?{serverPingTimeout:t.serverPingTimeoutMs}:{},clientOptions:{...a}}),web:new m.WebClient(e.botToken,{logger:r,timeout:15e3,retryConfig:{retries:2,factor:2,minTimeout:500,maxTimeout:4e3},...a})}})(e,{log:U,...S.clientOptions})))(I.tokens);try{L=await w(D.web)}catch(e){return C(e),M("failed","slack_auth_failed"),A()}if(!I.teams.has(L.team_id))return M("misconfigured","workspace_not_allowlisted"),A();let q=function(e,t={}){let{socket:r,web:a}=e,s=t.stopGraceMs??5e3,i=t.onError??(e=>console.error("Slack transport:",e instanceof Error?e.message:"unknown error")),o="idle",l=null,d=new Set;return{async start(e){if("idle"!==o)throw new E("started"===o?"slack_transport_started":"slack_transport_stopped","This Slack transport was already started.");o="started",l=t=>{if("started"!==o||t?.type!=="events_api")return;let r={envelope_id:t.envelope_id,type:t.type,accepts_response_payload:t.accepts_response_payload,retry_attempt:t.retry_num,retry_reason:t.retry_reason,payload:t.body},a=Promise.resolve().then(()=>e(r)).catch(i);d.add(a),a.finally(()=>d.delete(a))},r.on("slack_event",l);try{await r.start()}catch(t){r.off("slack_event",l),l=null,o="stopped",await r.disconnect().catch(()=>{});let e=g(t);throw new E("slack_connect_failed",`The Slack Socket Mode connection could not be opened${e?` (${e})`:""}.`,e)}},async ack(e){if("idle"===o||"stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");try{await r.send(e)}catch{throw new E("slack_ack_failed","The Socket Mode acknowledgement could not be sent (not connected).")}},async post(e){let t;if("stopped"===o)throw new E("slack_transport_stopped","The Slack transport is not running.");if("string"!=typeof e.text||e.text.length>n.SHARE_LIMITS.replyChars)throw new E("slack_post_too_long",`A Slack post is at most ${n.SHARE_LIMITS.replyChars} characters.`);try{t=await a.chat.postMessage({channel:e.channel,...null!==e.thread_ts?{thread_ts:e.thread_ts}:{},text:e.text,metadata:{event_type:e.metadata.event_type,event_payload:{...e.metadata.event_payload}},unfurl_links:!1,unfurl_media:!1})}catch(t){let e=g(t);throw new E("slack_post_failed",`Slack chat.postMessage failed${e?` (${e})`:""}.`,e)}if(!t?.ok||"string"!=typeof t.ts)throw new E("slack_post_failed","Slack chat.postMessage returned no message ts.","string"==typeof t?.error&&T.test(t.error)?t.error:null);return{ts:t.ts}},async stop(){if("stopped"===o||"stopping"===o)return;let e="started"===o;if(o="stopping",l&&r.off("slack_event",l),l=null,d.size>0){let e;await Promise.race([Promise.allSettled([...d]),new Promise(t=>{e=setTimeout(t,s)})]),clearTimeout(e)}o="stopped",e&&await r.disconnect().catch(i)}}}(D,{stopGraceMs:S.stopGraceMs,onError:C}),X=function(e){let{transport:y,botUserId:m}=e,E=e.now??(()=>Date.now()),T=e.onError??(e=>console.error("Slack relay:",e instanceof Error?e.message:"unknown error")),g=new Set,k=new Set,w=new Map,v=new Set;async function N(e){let r=h(e);if(r)return{thread:r,created:!1};let a=w.get(e);if(a)return a;let s=(async()=>{let r=(0,n.shareRow)(e);if(!r)throw new n.ShareError("share_not_found","No share with that reference.");let a=(0,n.shareState)(r);if("revoked"===a)throw new n.ShareError("share_revoked","This share was revoked.");if("expired"===a)throw new n.ShareError("share_expired","This share has expired.");let s={kind:"slack",team_id:r.audience_team_id,channel_id:r.audience_channel_id};if(!(0,n.audienceAllowed)(s))throw new n.ShareError("audience_not_allowed","That Slack channel is not on the share allowlist. Add it in Agent Config, under Session sharing.");let i=await y.post({channel:s.channel_id,thread_ts:null,text:"A coding-agent session was shared here (read-only). Reply in this thread to ask it a question.",metadata:{event_type:"botmancers_share",event_payload:{share_ref:r.id}}});if("string"!=typeof i?.ts||!l.test(i.ts))throw Error("The transport returned no message ts for the anchor.");return t.default.prepare("INSERT INTO slack_share_threads (share_ref, session_ref, team_id, channel_id, thread_ts, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(r.id,r.session_ref,s.team_id,s.channel_id,i.ts,E()),{thread:h(r.id),created:!0}})();w.set(e,s);try{return await s}finally{w.delete(e)}}let S=t.default.transaction(e=>{var r,a,s;let i=e.delivery;if(t.default.prepare("SELECT 1 FROM slack_deliveries WHERE envelope_id = ? AND retry_attempt = ?").get(i.envelope_id,i.retry_attempt))return{kind:"duplicate_delivery"};let o=E(),l=(r,a)=>{t.default.prepare(`
49
49
  INSERT INTO slack_deliveries (envelope_id, retry_attempt, retry_reason, team_id, event_id, event_owner, message_key, share_ref, disposition, reason, received_at)
50
50
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
51
- `).run(i.envelope_id,i.retry_attempt,i.retry_reason,e.event?.team_id??null,e.event?.event_id??null,a.owner&&e.event?1:null,a.messageKey??null,a.shareRef??null,r,a.reason??null,o)};if(e.event&&t.default.prepare("SELECT 1 FROM slack_deliveries WHERE team_id = ? AND event_id = ? AND event_owner = 1").get(e.event.team_id,e.event.event_id))return l("duplicate_event",{}),{kind:"duplicate_event"};let d=(e,t=null)=>(l("dropped",{owner:!0,reason:e,shareRef:t}),{kind:"dropped",reason:e});if(e.drop||!e.question)return d(e.drop??"malformed");let c=e.question;if(!(0,s.audienceAllowed)({kind:"slack",team_id:c.team_id,channel_id:c.channel_id}))return d("audience_not_allowed");let _=(r=c.team_id,a=c.channel_id,n=c.thread_ts,t.default.prepare("SELECT * FROM slack_share_threads WHERE team_id = ? AND channel_id = ? AND thread_ts = ?").get(r,a,n));return _?f(c.message_key)?(l("duplicate_question",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"duplicate_question",share_ref:_.share_ref}):(t.default.prepare(`
51
+ `).run(i.envelope_id,i.retry_attempt,i.retry_reason,e.event?.team_id??null,e.event?.event_id??null,a.owner&&e.event?1:null,a.messageKey??null,a.shareRef??null,r,a.reason??null,o)};if(e.event&&t.default.prepare("SELECT 1 FROM slack_deliveries WHERE team_id = ? AND event_id = ? AND event_owner = 1").get(e.event.team_id,e.event.event_id))return l("duplicate_event",{}),{kind:"duplicate_event"};let d=(e,t=null)=>(l("dropped",{owner:!0,reason:e,shareRef:t}),{kind:"dropped",reason:e});if(e.drop||!e.question)return d(e.drop??"malformed");let c=e.question;if(!(0,n.audienceAllowed)({kind:"slack",team_id:c.team_id,channel_id:c.channel_id}))return d("audience_not_allowed");let _=(r=c.team_id,a=c.channel_id,s=c.thread_ts,t.default.prepare("SELECT * FROM slack_share_threads WHERE team_id = ? AND channel_id = ? AND thread_ts = ?").get(r,a,s));return _?f(c.message_key)?(l("duplicate_question",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"duplicate_question",share_ref:_.share_ref}):(t.default.prepare(`
52
52
  INSERT INTO slack_questions (team_id, channel_id, message_ts, message_key, thread_ts, share_ref, event_id, question, state, created_at, updated_at)
53
53
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)
54
- `).run(c.team_id,c.channel_id,c.message_ts,c.message_key,c.thread_ts,_.share_ref,c.event_id,c.text,o,o),l("accepted",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"accepted",question:f(c.message_key)}):d("share_thread_unknown")});async function L(e){let r=e.code??"unknown",a=await y.post({channel:e.channel_id,thread_ts:e.thread_ts,text:i[r]??"This shared session cannot answer that question right now.",metadata:{event_type:"botmancers_share_notice",event_payload:{share_ref:e.share_ref,code:r}}});t.default.prepare("UPDATE slack_questions SET reply_ts = ?, updated_at = ? WHERE message_key = ? AND reply_ts IS NULL").run(a.ts,E(),e.message_key)}async function R(e){if(g.has(e))return null;g.add(e);try{let i,o=f(e);if(!o||"dispatched"!==o.state||!o.turn_ref||o.reply_ts)return null;try{var r;let e=await (0,s.shareAnswer)(o.share_ref,o.turn_ref);if(!e)return null;i="completed"===e.state&&null!==e.answer?(r=e.answer,p(u((0,a.serviceRedactor)().text(r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),s.SHARE_LIMITS.replyChars)):n}catch(e){if(!(e instanceof s.ShareError))throw e;i=n}let l=await y.post({channel:o.channel_id,thread_ts:o.thread_ts,text:i,metadata:{event_type:"botmancers_share_reply",event_payload:{share_ref:o.share_ref,turn_ref:o.turn_ref}}});return t.default.prepare("UPDATE slack_questions SET state = 'replied', reply_ts = ?, updated_at = ? WHERE message_key = ? AND state = 'dispatched'").run(l.ts,E(),e),l}finally{g.delete(e)}}async function A(e,r){if(k.has(e.message_key))return{envelope_id:r,outcome:"pending",share_ref:e.share_ref};k.add(e.message_key);try{var a;let n;try{n=await (0,s.askShare)({shareRef:e.share_ref,question:e.question??"",messageKey:e.message_key})}catch(a){if(!(a instanceof s.ShareAskError))throw a;return t.default.prepare("UPDATE slack_questions SET state = 'refused', code = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(a.code,E(),e.message_key),await L(f(e.message_key)),{envelope_id:r,outcome:"refused",share_ref:e.share_ref,code:a.code}}let i=n.turn.turn_ref;t.default.prepare("UPDATE slack_questions SET state = 'dispatched', turn_ref = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(i,E(),e.message_key);let o=(a=n.settled.then(()=>R(e.message_key)).catch(e=>(T(e),null)),v.add(a),a.finally(()=>v.delete(a)).catch(()=>{}),a);return{envelope_id:r,outcome:n.replayed?"replayed":"dispatched",share_ref:e.share_ref,turn_ref:i,replied:o}}finally{k.delete(e.message_key)}}async function I(e){let a=function(e,t){let a={delivery:null,event:null,question:null,drop:null},n=_(e?.envelope_id);if(!n||!d.test(n))return{...a,drop:"malformed"};let i=e.retry_attempt??0;a.delivery={envelope_id:n,retry_attempt:Number.isInteger(i)&&i>=0?i:0,retry_reason:_(e.retry_reason)||null};let h=e.payload;if("events_api"!==e.type||!h||"event_callback"!==h.type)return{...a,drop:"not_events_api"};let f=_(h.team_id),y=_(h.event_id);if(!f||!o.test(f)||!y||!c.test(y))return{...a,drop:"malformed"};a.event={team_id:f,event_id:y};let m=h.event??{};if("message"!==m.type&&"app_mention"!==m.type)return{...a,drop:"not_message"};let E=_(m.user);if(m.bot_id||m.bot_profile||"bot_message"===m.subtype||!E||E===t.botUserId)return{...a,drop:"not_a_person"};if(void 0!==m.subtype)return{...a,drop:"message_subtype"};let T=_(m.channel),k=_(m.ts),g=void 0===m.thread_ts?null:_(m.thread_ts);if(!T||!o.test(T)||!k||!l.test(k)||null!==g&&!l.test(g))return{...a,drop:"malformed"};if(null===g||g===k)return{...a,drop:"not_in_thread"};let w=p(u(String(m.text??"").replace(/<@[A-Z0-9]+(\|[^>]*)?>/g,"").trim()),s.SHARE_LIMITS.questionChars);return w?(a.question={team_id:f,event_id:y,channel_id:T,thread_ts:g,message_ts:k,text:w,message_key:`slack-${(0,r.createHash)("sha256").update(`${f}
54
+ `).run(c.team_id,c.channel_id,c.message_ts,c.message_key,c.thread_ts,_.share_ref,c.event_id,c.text,o,o),l("accepted",{owner:!0,messageKey:c.message_key,shareRef:_.share_ref}),{kind:"accepted",question:f(c.message_key)}):d("share_thread_unknown")});async function L(e){let r=e.code??"unknown",a=await y.post({channel:e.channel_id,thread_ts:e.thread_ts,text:i[r]??"This shared session cannot answer that question right now.",metadata:{event_type:"botmancers_share_notice",event_payload:{share_ref:e.share_ref,code:r}}});t.default.prepare("UPDATE slack_questions SET reply_ts = ?, updated_at = ? WHERE message_key = ? AND reply_ts IS NULL").run(a.ts,E(),e.message_key)}async function R(e){if(k.has(e))return null;k.add(e);try{let i,o=f(e);if(!o||"dispatched"!==o.state||!o.turn_ref||o.reply_ts)return null;try{var r;let e=await (0,n.shareAnswer)(o.share_ref,o.turn_ref);if(!e)return null;i="completed"===e.state&&null!==e.answer?(r=e.answer,p(u((0,a.serviceRedactor)().text(r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),n.SHARE_LIMITS.replyChars)):s}catch(e){if(!(e instanceof n.ShareError))throw e;i=s}let l=await y.post({channel:o.channel_id,thread_ts:o.thread_ts,text:i,metadata:{event_type:"botmancers_share_reply",event_payload:{share_ref:o.share_ref,turn_ref:o.turn_ref}}});return t.default.prepare("UPDATE slack_questions SET state = 'replied', reply_ts = ?, updated_at = ? WHERE message_key = ? AND state = 'dispatched'").run(l.ts,E(),e),l}finally{k.delete(e)}}async function A(e,r){if(g.has(e.message_key))return{envelope_id:r,outcome:"pending",share_ref:e.share_ref};g.add(e.message_key);try{var a;let s;try{s=await (0,n.askShare)({shareRef:e.share_ref,question:e.question??"",messageKey:e.message_key})}catch(a){if(!(a instanceof n.ShareAskError))throw a;return t.default.prepare("UPDATE slack_questions SET state = 'refused', code = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(a.code,E(),e.message_key),await L(f(e.message_key)),{envelope_id:r,outcome:"refused",share_ref:e.share_ref,code:a.code}}let i=s.turn.turn_ref;t.default.prepare("UPDATE slack_questions SET state = 'dispatched', turn_ref = ?, question = NULL, updated_at = ? WHERE message_key = ? AND state = 'pending'").run(i,E(),e.message_key);let o=(a=s.settled.then(()=>R(e.message_key)).catch(e=>(T(e),null)),v.add(a),a.finally(()=>v.delete(a)).catch(()=>{}),a);return{envelope_id:r,outcome:s.replayed?"replayed":"dispatched",share_ref:e.share_ref,turn_ref:i,replied:o}}finally{g.delete(e.message_key)}}async function I(e){let a=function(e,t){let a={delivery:null,event:null,question:null,drop:null},s=_(e?.envelope_id);if(!s||!d.test(s))return{...a,drop:"malformed"};let i=e.retry_attempt??0;a.delivery={envelope_id:s,retry_attempt:Number.isInteger(i)&&i>=0?i:0,retry_reason:_(e.retry_reason)||null};let h=e.payload;if("events_api"!==e.type||!h||"event_callback"!==h.type)return{...a,drop:"not_events_api"};let f=_(h.team_id),y=_(h.event_id);if(!f||!o.test(f)||!y||!c.test(y))return{...a,drop:"malformed"};a.event={team_id:f,event_id:y};let m=h.event??{};if("message"!==m.type&&"app_mention"!==m.type)return{...a,drop:"not_message"};let E=_(m.user);if(m.bot_id||m.bot_profile||"bot_message"===m.subtype||!E||E===t.botUserId)return{...a,drop:"not_a_person"};if(void 0!==m.subtype)return{...a,drop:"message_subtype"};let T=_(m.channel),g=_(m.ts),k=void 0===m.thread_ts?null:_(m.thread_ts);if(!T||!o.test(T)||!g||!l.test(g)||null!==k&&!l.test(k))return{...a,drop:"malformed"};if(null===k||k===g)return{...a,drop:"not_in_thread"};let w=p(u(String(m.text??"").replace(/<@[A-Z0-9]+(\|[^>]*)?>/g,"").trim()),n.SHARE_LIMITS.questionChars);return w?(a.question={team_id:f,event_id:y,channel_id:T,thread_ts:k,message_ts:g,text:w,message_key:`slack-${(0,r.createHash)("sha256").update(`${f}
55
55
  ${T}
56
- ${k}`).digest("hex").slice(0,40)}`},a):{...a,drop:"empty"}}(e,{botUserId:m});if(!a.delivery)return{envelope_id:null,outcome:"dropped",reason:"malformed"};let n=a.delivery.envelope_id,i=S.immediate(a);switch(await y.ack(n),"duplicate_delivery"!==i.kind&&t.default.prepare("UPDATE slack_deliveries SET acked_at = ? WHERE envelope_id = ? AND retry_attempt = ? AND acked_at IS NULL").run(E(),n,a.delivery.retry_attempt),i.kind){case"duplicate_delivery":case"duplicate_event":return{envelope_id:n,outcome:i.kind};case"dropped":return{envelope_id:n,outcome:"dropped",reason:i.reason};case"duplicate_question":return{envelope_id:n,outcome:"duplicate_question",share_ref:i.share_ref};case"accepted":return A(i.question,n)}}async function O(){let e=t.default.prepare("SELECT message_key FROM slack_questions WHERE state = 'dispatched' AND reply_ts IS NULL ORDER BY created_at, message_key").all(),r=0;for(let{message_key:t}of e)await R(t)&&r++;return r}async function U(){let e={dispatched:0,refused:0,replied:0};for(let r of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'pending' ORDER BY created_at, message_key").all()){let t=await A(r,null);"dispatched"===t.outcome||"replayed"===t.outcome?e.dispatched++:"refused"===t.outcome&&e.refused++}for(let e of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'refused' AND reply_ts IS NULL ORDER BY created_at, message_key").all())await L(e);return e.replied+=await O(),e}return{start:async function(){let e=await U();return await y.start(async e=>{try{await I(e)}catch(e){T(e)}}),e},stop:()=>y.stop(),bindShare:N,handleEnvelope:I,recover:U,flushReplies:O,idle:async function(){for(;v.size>0;)await Promise.allSettled([...v])}}}({transport:q,botUserId:L.user_id,onError:C,now:R}),x=!1,$=Promise.resolve(),F=e=>{let t=$.then(e);return $=t.catch(()=>{}),t},H=!0,P=()=>F(async()=>{if(!x)try{await X.recover(),H=!1}catch(e){H=!0,C(e)}}),W=new Map,K=S.bindRetryMs??6e4,B=()=>F(async()=>{if(!x){if(H)try{await X.recover(),H=!1}catch(e){C(e)}for(let{id:e}of t.default.prepare(`
56
+ ${g}`).digest("hex").slice(0,40)}`},a):{...a,drop:"empty"}}(e,{botUserId:m});if(!a.delivery)return{envelope_id:null,outcome:"dropped",reason:"malformed"};let s=a.delivery.envelope_id,i=S.immediate(a);switch(await y.ack(s),"duplicate_delivery"!==i.kind&&t.default.prepare("UPDATE slack_deliveries SET acked_at = ? WHERE envelope_id = ? AND retry_attempt = ? AND acked_at IS NULL").run(E(),s,a.delivery.retry_attempt),i.kind){case"duplicate_delivery":case"duplicate_event":return{envelope_id:s,outcome:i.kind};case"dropped":return{envelope_id:s,outcome:"dropped",reason:i.reason};case"duplicate_question":return{envelope_id:s,outcome:"duplicate_question",share_ref:i.share_ref};case"accepted":return A(i.question,s)}}async function O(){let e=t.default.prepare("SELECT message_key FROM slack_questions WHERE state = 'dispatched' AND reply_ts IS NULL ORDER BY created_at, message_key").all(),r=0;for(let{message_key:t}of e)await R(t)&&r++;return r}async function U(){let e={dispatched:0,refused:0,replied:0};for(let r of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'pending' ORDER BY created_at, message_key").all()){let t=await A(r,null);"dispatched"===t.outcome||"replayed"===t.outcome?e.dispatched++:"refused"===t.outcome&&e.refused++}for(let e of t.default.prepare("SELECT * FROM slack_questions WHERE state = 'refused' AND reply_ts IS NULL ORDER BY created_at, message_key").all())await L(e);return e.replied+=await O(),e}return{start:async function(){let e=await U();return await y.start(async e=>{try{await I(e)}catch(e){T(e)}}),e},stop:()=>y.stop(),bindShare:N,handleEnvelope:I,recover:U,flushReplies:O,idle:async function(){for(;v.size>0;)await Promise.allSettled([...v])}}}({transport:q,botUserId:L.user_id,onError:C,now:R}),x=!1,$=Promise.resolve(),F=e=>{let t=$.then(e);return $=t.catch(()=>{}),t},H=!0,P=()=>F(async()=>{if(!x)try{await X.recover(),H=!1}catch(e){H=!0,C(e)}}),W=new Map,K=S.bindRetryMs??6e4,B=()=>F(async()=>{if(!x){if(H)try{await X.recover(),H=!1}catch(e){C(e)}for(let{id:e}of t.default.prepare(`
57
57
  SELECT id FROM session_shares s
58
58
  WHERE state = 'active' AND expires_at > ? AND audience_team_id = ?
59
59
  AND NOT EXISTS (SELECT 1 FROM slack_share_threads t WHERE t.share_ref = s.id)
60
60
  ORDER BY created_at, id LIMIT 50
61
- `).all(R(),L.team_id)){if(x)return;if(!((W.get(e)??0)>R()))try{await X.bindShare(e),W.delete(e)}catch(t){W.set(e,R()+K),t instanceof s.ShareError||C(t)}}try{await X.flushReplies()}catch(e){C(e)}}}),G=D.socket,Y=()=>{!x&&(b+=1,M("connected"),b>1&&P())},z=()=>{x||M("reconnecting")},Z=()=>{x||"connected"!==e.status.state||M("reconnecting")};G.on("connected",Y),G.on("reconnecting",z),G.on("close",Z);let j=null;e.relay=X,e.clients=D,e.stop=async()=>{x||(x=!0,j&&clearInterval(j),j=null,await X.stop().catch(C),G.off("connected",Y),G.off("reconnecting",z),G.off("close",Z),e.relay=null,e.clients=null,e.stop=null,M("stopped"))},await P();try{await q.start(e=>F(()=>X.handleEnvelope(e)).then(()=>{}))}catch(r){if(x)return A();C(r);let t=e.stop;return await t?.(),M("failed","slack_connect_failed"),A()}return x||("connected"!==e.status.state&&(b=Math.max(b,1),M("connected")),await B(),j=setInterval(()=>{B().catch(C)},S.sweepMs??5e3),j.unref?.()),A()}e.s(["runSlackInServer",0,function(){if("1"===process.env.BOTMANCERS_NO_AUTOPROCESS)return;let e=()=>{I().catch(()=>{})};process.once("SIGTERM",e),process.once("SIGINT",e),(function(e={}){let t=R();return t.starting?t.starting:t.stop?Promise.resolve(A()):(t.starting=O(t,e).finally(()=>{t.starting=null}),t.starting)})().catch(e=>console.error("Slack relay:",e instanceof Error?e.message:"start failed"))}],15050)}];
61
+ `).all(R(),L.team_id)){if(x)return;if(!((W.get(e)??0)>R()))try{await X.bindShare(e),W.delete(e)}catch(t){W.set(e,R()+K),t instanceof n.ShareError||C(t)}}try{await X.flushReplies()}catch(e){C(e)}}}),G=D.socket,Y=()=>{!x&&(b+=1,M("connected"),b>1&&P())},z=()=>{x||M("reconnecting")},Z=()=>{x||"connected"!==e.status.state||M("reconnecting")};G.on("connected",Y),G.on("reconnecting",z),G.on("close",Z);let Q=null;e.relay=X,e.clients=D,e.stop=async()=>{x||(x=!0,Q&&clearInterval(Q),Q=null,await X.stop().catch(C),G.off("connected",Y),G.off("reconnecting",z),G.off("close",Z),e.relay=null,e.clients=null,e.stop=null,M("stopped"))},await P();try{await q.start(e=>F(()=>X.handleEnvelope(e)).then(()=>{}))}catch(r){if(x)return A();C(r);let t=e.stop;return await t?.(),M("failed","slack_connect_failed"),A()}return x||("connected"!==e.status.state&&(b=Math.max(b,1),M("connected")),await B(),Q=setInterval(()=>{B().catch(C)},S.sweepMs??5e3),Q.unref?.()),A()}e.s(["runSlackInServer",0,function(){if("1"===process.env.BOTMANCERS_NO_AUTOPROCESS)return;let e=()=>{I().catch(()=>{})};process.once("SIGTERM",e),process.once("SIGINT",e),(function(e={}){let t=R();return t.starting?t.starting:t.stop?Promise.resolve(A()):(t.starting=O(t,e).finally(()=>{t.starting=null}),t.starting)})().catch(e=>console.error("Slack relay:",e instanceof Error?e.message:"start failed"))}],15050)}];
62
62
 
63
63
  //# sourceMappingURL=lib_slack-runtime_ts_0fgsejy._.js.map
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/0cz1d0mv5g_q7.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/eBmHBBldHWytVvYPu0zHc/_buildManifest.js",
11
- "static/eBmHBBldHWytVvYPu0zHc/_ssgManifest.js",
12
- "static/eBmHBBldHWytVvYPu0zHc/_clientMiddlewareManifest.js"
10
+ "static/45V8A9u4-Y-aZNxovpZCu/_buildManifest.js",
11
+ "static/45V8A9u4-Y-aZNxovpZCu/_ssgManifest.js",
12
+ "static/45V8A9u4-Y-aZNxovpZCu/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/3s6nzrbk-8mnv.js",
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/3_lwv2zgy_-bw.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/_next/static/chunks/2mmpezlrfmbu5.js" async=""></script><script src="/_next/static/chunks/3g4px251sg85e.js" async=""></script><script src="/_next/static/chunks/3un1mb5bx4x8k.js" async=""></script><script src="/_next/static/chunks/turbopack-2yajevry3z_n6.js" async=""></script><script src="/_next/static/chunks/3fntmmi971322.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Botmancers</title><meta name="description" content="Cloud-hosted AI teammate app"/><link rel="icon" href="/brand/botmancers-logo-filled-64.png" sizes="64x64" type="image/png"/><link rel="icon" href="/brand/botmancers-logo-filled-256.png" sizes="256x256" type="image/png"/><link rel="apple-touch-icon" href="/brand/botmancers-logo-filled-256.png" sizes="256x256" type="image/png"/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="min-h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/3s6nzrbk-8mnv.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3fntmmi971322.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"eBmHBBldHWytVvYPu0zHc\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[27201,[\"/_next/static/chunks/3fntmmi971322.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Botmancers\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Cloud-hosted AI teammate app\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/brand/botmancers-logo-filled-64.png\",\"sizes\":\"64x64\",\"type\":\"image/png\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/brand/botmancers-logo-filled-256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"}],[\"$\",\"link\",\"4\",{\"rel\":\"apple-touch-icon\",\"href\":\"/brand/botmancers-logo-filled-256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"}],[\"$\",\"$Ld\",\"5\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/3_lwv2zgy_-bw.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/_next/static/chunks/2mmpezlrfmbu5.js" async=""></script><script src="/_next/static/chunks/3g4px251sg85e.js" async=""></script><script src="/_next/static/chunks/3un1mb5bx4x8k.js" async=""></script><script src="/_next/static/chunks/turbopack-2yajevry3z_n6.js" async=""></script><script src="/_next/static/chunks/3fntmmi971322.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Botmancers</title><meta name="description" content="Cloud-hosted AI teammate app"/><link rel="icon" href="/brand/botmancers-logo-filled-64.png" sizes="64x64" type="image/png"/><link rel="icon" href="/brand/botmancers-logo-filled-256.png" sizes="256x256" type="image/png"/><link rel="apple-touch-icon" href="/brand/botmancers-logo-filled-256.png" sizes="256x256" type="image/png"/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="min-h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/3s6nzrbk-8mnv.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3fntmmi971322.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3_lwv2zgy_-bw.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"45V8A9u4-Y-aZNxovpZCu\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[27201,[\"/_next/static/chunks/3fntmmi971322.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Botmancers\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Cloud-hosted AI teammate app\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/brand/botmancers-logo-filled-64.png\",\"sizes\":\"64x64\",\"type\":\"image/png\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/brand/botmancers-logo-filled-256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"}],[\"$\",\"link\",\"4\",{\"rel\":\"apple-touch-icon\",\"href\":\"/brand/botmancers-logo-filled-256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"}],[\"$\",\"$Ld\",\"5\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/_next/static/chunks/2mmpezlrfmbu5.js" async=""></script><script src="/_next/static/chunks/3g4px251sg85e.js" async=""></script><script src="/_next/static/chunks/3un1mb5bx4x8k.js" async=""></script><script src="/_next/static/chunks/turbopack-2yajevry3z_n6.js" async=""></script><script src="/_next/static/chunks/3fntmmi971322.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/3s6nzrbk-8mnv.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\",1]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"eBmHBBldHWytVvYPu0zHc\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/_next/static/chunks/2mmpezlrfmbu5.js" async=""></script><script src="/_next/static/chunks/3g4px251sg85e.js" async=""></script><script src="/_next/static/chunks/3un1mb5bx4x8k.js" async=""></script><script src="/_next/static/chunks/turbopack-2yajevry3z_n6.js" async=""></script><script src="/_next/static/chunks/3fntmmi971322.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/3s6nzrbk-8mnv.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/3fntmmi971322.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/3fntmmi971322.js\"],\"default\",1]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"45V8A9u4-Y-aZNxovpZCu\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"tbqMvxx1fZwEKFYVftWEYFMosl+bnbGcD5gzJhLcx2g=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"nwEhnCz93riExdpWPiY6uCQw75Yfabes2HAgK3MwyhY=\"\n}"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "tbqMvxx1fZwEKFYVftWEYFMosl+bnbGcD5gzJhLcx2g="
4
+ "encryptionKey": "nwEhnCz93riExdpWPiY6uCQw75Yfabes2HAgK3MwyhY="
5
5
  }