botmancers 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +5 -5
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/app-path-routes-manifest.json +1 -0
  5. package/app/.next/build-manifest.json +3 -3
  6. package/app/.next/prerender-manifest.json +3 -3
  7. package/app/.next/required-server-files.json +2 -2
  8. package/app/.next/routes-manifest.json +8 -0
  9. package/app/.next/server/app/_global-error.html +1 -1
  10. package/app/.next/server/app/_global-error.rsc +1 -1
  11. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/_not-found.html +1 -1
  17. package/app/.next/server/app/_not-found.rsc +2 -2
  18. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  19. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  20. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
  22. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/pins/route.js.nft.json +1 -1
  23. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -1
  24. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js +2 -2
  25. package/app/.next/server/app/api/bots/[id]/sessions/[ref]/shares/route.js.nft.json +1 -1
  26. package/app/.next/server/app/api/bots/[id]/sessions/route.js +5 -5
  27. package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -1
  28. package/app/.next/server/app/api/bots/[id]/sessions/sync/route/app-paths-manifest.json +3 -0
  29. package/app/.next/server/app/api/bots/[id]/sessions/sync/route/build-manifest.json +12 -0
  30. package/app/.next/server/app/api/bots/[id]/sessions/sync/route/server-reference-manifest.json +4 -0
  31. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js +11 -0
  32. package/app/.next/server/app/api/bots/[id]/sessions/sync/route.js.nft.json +1 -0
  33. package/app/.next/server/app/api/bots/[id]/sessions/sync/route_client-reference-manifest.js +3 -0
  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 +3 -3
  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 +4 -4
  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.nft.json +1 -1
  57. package/app/.next/server/app/api/exchanges/route.js +2 -2
  58. package/app/.next/server/app/api/exchanges/route.js.nft.json +1 -1
  59. package/app/.next/server/app/api/files/[name]/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/groups/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/health/route.js +2 -2
  62. package/app/.next/server/app/api/health/route.js.nft.json +1 -1
  63. package/app/.next/server/app/api/mcp/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/messages/[id]/between/route.js.nft.json +1 -1
  65. package/app/.next/server/app/api/runtime-connections/route.js.nft.json +1 -1
  66. package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js +2 -2
  68. package/app/.next/server/app/api/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  69. package/app/.next/server/app/api/shares/route.js +2 -2
  70. package/app/.next/server/app/api/shares/route.js.nft.json +1 -1
  71. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +4 -4
  72. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -1
  73. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +4 -4
  74. package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -1
  75. package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
  76. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js +4 -4
  77. package/app/.next/server/app/api/v0/agents/[agentId]/pins/route.js.nft.json +1 -1
  78. package/app/.next/server/app/api/v0/agents/[agentId]/route.js +4 -4
  79. package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -1
  80. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +4 -4
  81. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +4 -4
  83. package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -1
  84. package/app/.next/server/app/api/v0/agents/route.js +4 -4
  85. package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/v0/capabilities/route.js +4 -4
  87. package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -1
  88. package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
  89. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +4 -4
  90. package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -1
  91. package/app/.next/server/app/api/v0/exchanges/[id]/route.js +4 -4
  92. package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -1
  93. package/app/.next/server/app/api/v0/exchanges/route.js +4 -4
  94. package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -1
  95. package/app/.next/server/app/api/v0/mcp/route.js +3 -3
  96. package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
  97. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js +4 -4
  98. package/app/.next/server/app/api/v0/pins/[pinRef]/detach/route.js.nft.json +1 -1
  99. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js +4 -4
  100. package/app/.next/server/app/api/v0/pins/[pinRef]/messages/route.js.nft.json +1 -1
  101. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js +4 -4
  102. package/app/.next/server/app/api/v0/pins/[pinRef]/route.js.nft.json +1 -1
  103. package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
  104. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +4 -4
  105. package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -1
  106. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js +4 -4
  107. package/app/.next/server/app/api/v0/sessions/[ref]/pins/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js +4 -4
  109. package/app/.next/server/app/api/v0/sessions/[ref]/shares/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js +4 -4
  111. package/app/.next/server/app/api/v0/shares/[shareRef]/revoke/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js +4 -4
  113. package/app/.next/server/app/api/v0/shares/[shareRef]/route.js.nft.json +1 -1
  114. package/app/.next/server/app/api/v0/shares/current/route.js +4 -4
  115. package/app/.next/server/app/api/v0/shares/current/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/v0/shares/route.js +4 -4
  117. package/app/.next/server/app/api/v0/shares/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +2 -2
  119. package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/wakes/[id]/decision/route.js +2 -2
  121. package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
  122. package/app/.next/server/app/api/wakes/[id]/retry/route.js +2 -2
  123. package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
  124. package/app/.next/server/app/bots/[id]/config/page.js.nft.json +1 -1
  125. package/app/.next/server/app/bots/[id]/config/page_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/exchanges/page.js.nft.json +1 -1
  127. package/app/.next/server/app/exchanges/page_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/exchanges.html +1 -1
  129. package/app/.next/server/app/exchanges.rsc +3 -3
  130. package/app/.next/server/app/exchanges.segments/_full.segment.rsc +3 -3
  131. package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +2 -2
  132. package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +3 -3
  133. package/app/.next/server/app/index.html +1 -1
  134. package/app/.next/server/app/index.rsc +3 -3
  135. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  136. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  137. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  138. package/app/.next/server/app/page.js.nft.json +1 -1
  139. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/settings/page.js.nft.json +1 -1
  141. package/app/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/settings.html +1 -1
  143. package/app/.next/server/app/settings.rsc +2 -2
  144. package/app/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  145. package/app/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  146. package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  147. package/app/.next/server/app/threads/[id]/page.js.nft.json +1 -1
  148. package/app/.next/server/app/threads/[id]/page_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app-paths-manifest.json +1 -0
  150. package/app/.next/server/chunks/[root-of-the-server]__0hhill-._.js +3 -0
  151. package/app/.next/server/chunks/[root-of-the-server]__0k8wfe2._.js +3 -0
  152. package/app/.next/server/chunks/[root-of-the-server]__0qaiqut._.js +5 -5
  153. package/app/.next/server/chunks/[root-of-the-server]__0qqsovi._.js +3 -0
  154. package/app/.next/server/chunks/[root-of-the-server]__1x8phwp._.js +5 -5
  155. package/app/.next/server/chunks/_0061c2q._.js +1 -1
  156. package/app/.next/server/chunks/_0_b7py8._.js +3 -0
  157. package/app/.next/server/chunks/_0a2do3x._.js +1 -1
  158. package/app/.next/server/chunks/_next-internal_server_app_api_bots_[id]_sessions_sync_route_actions_00y6n-f.js +3 -0
  159. package/app/.next/server/chunks/lib_0-opbv7._.js +69 -55
  160. package/app/.next/server/chunks/lib_0aejojj._.js +69 -55
  161. package/app/.next/server/chunks/lib_0il0ml1._.js +69 -55
  162. package/app/.next/server/chunks/lib_0iujsdg._.js +69 -55
  163. package/app/.next/server/chunks/{lib_15adnlz._.js → lib_15a9ejf._.js} +53 -44
  164. package/app/.next/server/chunks/{lib_1zc7-gl._.js → lib_19pzc33._.js} +53 -44
  165. package/app/.next/server/chunks/lib_1a4ucxv._.js +330 -0
  166. package/app/.next/server/chunks/lib_1dehbst._.js +69 -55
  167. package/app/.next/server/chunks/lib_1z4vnh4._.js +69 -55
  168. package/app/.next/server/chunks/lib_1z7d95m._.js +2181 -0
  169. package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +5 -5
  170. package/app/.next/server/chunks/ssr/_00ysoah._.js +3 -0
  171. package/app/.next/server/chunks/ssr/{_1is_iwu._.js → _1lkd0ui._.js} +2 -2
  172. package/app/.next/server/chunks/ssr/_1o94bnv._.js +8 -1
  173. package/app/.next/server/chunks/ssr/_1r5kd5j._.js +3 -0
  174. package/app/.next/server/chunks/ssr/app_1-nwnha._.js +3 -0
  175. package/app/.next/server/chunks/ssr/lib_exchange-view_ts_1a4q9ju._.js +3 -0
  176. package/app/.next/server/instrumentation.js +1 -1
  177. package/app/.next/server/middleware-build-manifest.js +3 -3
  178. package/app/.next/server/pages/404.html +1 -1
  179. package/app/.next/server/pages/500.html +1 -1
  180. package/app/.next/server/server-reference-manifest.js +1 -1
  181. package/app/.next/server/server-reference-manifest.json +1 -1
  182. package/app/.next/static/chunks/0y1ihx4vq8du3.js +10 -0
  183. package/app/.next/static/chunks/1c2dl2ga-lqcb.css +3 -0
  184. package/app/.next/static/chunks/2qf-mb__71dkk.js +1 -0
  185. package/app/.next/static/chunks/399dvlpyl00wn.js +1 -0
  186. package/app/.next/static/chunks/3b7r6u9nfsjb1.js +1 -0
  187. package/app/.next/static/chunks/3f1v-zuki9k7k.js +1 -0
  188. package/app/BUILD_INFO.json +2 -2
  189. package/app/package.json +1 -1
  190. package/app/server.js +1 -1
  191. package/package.json +1 -1
  192. package/app/.next/server/chunks/[root-of-the-server]__0792yb1._.js +0 -44
  193. package/app/.next/server/chunks/[root-of-the-server]__0e_agq4._.js +0 -3
  194. package/app/.next/server/chunks/[root-of-the-server]__17mum5-._.js +0 -3
  195. package/app/.next/server/chunks/_0qv-4by._.js +0 -3
  196. package/app/.next/server/chunks/lib_0v6lblw._.js +0 -5
  197. package/app/.next/server/chunks/ssr/_0_fa0na._.js +0 -3
  198. package/app/.next/server/chunks/ssr/_0a6r_bx._.js +0 -3
  199. package/app/.next/server/chunks/ssr/_0epgorw._.js +0 -3
  200. package/app/.next/server/chunks/ssr/app_exchanges_page_tsx_0j-n2a1._.js +0 -3
  201. package/app/.next/static/chunks/1ouuczm-gmvxs.js +0 -1
  202. package/app/.next/static/chunks/1w72fds3-utrx.js +0 -1
  203. package/app/.next/static/chunks/2095-o17ji0fs.css +0 -3
  204. package/app/.next/static/chunks/34bv9o9bjkwk0.js +0 -3
  205. package/app/.next/static/chunks/3rwwunh5sdjzg.js +0 -1
  206. package/app/.next/static/chunks/3z3mn526_3fwd.js +0 -1
  207. /package/app/.next/static/{A9sQnaf9i6YzjHNoPgRfU → 3rSDqQK0KGcTDI98uoZRy}/_buildManifest.js +0 -0
  208. /package/app/.next/static/{A9sQnaf9i6YzjHNoPgRfU → 3rSDqQK0KGcTDI98uoZRy}/_clientMiddlewareManifest.js +0 -0
  209. /package/app/.next/static/{A9sQnaf9i6YzjHNoPgRfU → 3rSDqQK0KGcTDI98uoZRy}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,71711,23325,78636,48758,e=>{"use strict";let t;var n=e.i(85148),r=e.i(22734),i=e.i(14747),s=e.i(54799);let a=["hermes","cursor","claude","codex","muse"],o={hermes:"Hermes",cursor:"Cursor",claude:"Claude",codex:"Codex",muse:"Muse Code"},d="hermes",u={hermes:"hermes-gateway",cursor:"session-provider",claude:"session-provider",codex:"session-provider",muse:"session-provider"};class l extends Error{code="invalid-agent";constructor(e){super(`Invalid agent: ${JSON.stringify(String(e))}. Expected one of ${a.join("|")}.`)}}function _(e){if(null==e)return null;let t=String(e).trim();if(!t)return null;if(a.includes(t))return t;throw new l(e)}function c(e){return null==e?null:String(e).trim()||null}a.join("|");let E=["codex","claude","cursor","muse"];function p(e){let t=c(e);return t&&E.includes(t)?t:null}function T(e){try{let t=_(e.agent);if(t)return{agent:t,migrated:!1}}catch{}let t=c(e.runtime),n=d;if("agent-deck"===t)n=p(e.agent_client)??d;else if("hermes"!==t){let t=p(e.coding_runtime),r=c(e.deck_name),i=c(e.working_directory);t&&r&&i&&(n=t)}return{agent:n,migrated:!0}}e.s(["AGENTS",0,a,"AGENT_LABELS",0,o,"DEFAULT_AGENT",0,d,"agentTransport",0,function(e){return u[e]},"migrateLegacyAgentFields",0,T,"normalizeAgent",0,_,"resolveAgent",0,function(e){let t=d,n=!0;try{t=_(e.agent)??d}catch{n=!1}let r=c(e.runtime_connection_id),i=null;return n?r?!function(e){if(!("session_scope_kind"in e))return!0;let t=e.session_scope_kind,n=[];try{n=e.session_scope_items?JSON.parse(e.session_scope_items):[]}catch{return!1}if(!Array.isArray(n))return!1;let r=n.filter(e=>"string"==typeof e&&e.trim()).length;return"all_provider_sessions"===t?0===r:("workspaces"===t||"sessions"===t)&&r>0}(e)&&(i="session_scope"):i="connection":i="agent",{agent:t,runtime_connection_id:r,launchable:null===i,launch_blocker:i}}],89965);let m=["read_only","workspace_write"],f=["workspaces","sessions","all_provider_sessions"],g="This computer";function h(e){return`rc-local-${e}`}function N(e){return`${o[e]} on ${g.toLowerCase()}`}function R(e){return e.length>1?e.replace(/\/+$/,""):e}function v(e,t){let n=R(e),r=R(t);return n===r||r.startsWith("/"===n?"/":`${n}/`)}function y(e,t){let n="string"==typeof e?e.trim():"";if(!n)return null;let r=t&&t.trim()?t:(process.env.HOME??"").trim(),i="~"===n?r:n.startsWith("~/")?`${r}/${n.slice(2)}`:n;return i.startsWith("/")?i:null}function L(e){let t=e.session_scope_kind;if(!("string"==typeof t&&f.includes(t)))return null;let n=[];if(e.session_scope_items)try{let t=function(e){if(null==e)return[];if(!Array.isArray(e))return null;let t=[];for(let n of e){if("string"!=typeof n)return null;let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}(JSON.parse(e.session_scope_items));if(null===t)return null;n=t}catch{return null}return"all_provider_sessions"===t?0===n.length?{kind:t,workspaces:[],sessions:[]}:null:0===n.length?null:"workspaces"===t?{kind:t,workspaces:n,sessions:[]}:{kind:t,workspaces:[],sessions:n}}function O(e){return!0===e||1===e||"1"===e}function w(e){var t;return{runtime_connection_id:e.runtime_connection_id,launch_profile:"direct",deck_id:null,working_directory:null,session_scope_kind:e.session_scope.kind,session_scope_items:JSON.stringify("workspaces"===(t=e.session_scope).kind?t.workspaces:"sessions"===t.kind?t.sessions:[]),default_workspace:e.default_workspace,policy_mode:e.policy.mode,allow_new_sessions:+!!e.policy.allow_new_sessions,allow_resume_with_edits:+!!e.policy.allow_resume_with_edits,home_session_id:e.home_session_id,needs_deck_selection:0}}function k(e){var t;let n="hermes";try{n=_(e.agent)??"hermes"}catch{n="hermes"}let r=(null==(t=e.working_directory)?null:String(t).trim()||null)??`~/.botmancers/${e.id}`;return{runtime_connection_id:h(n),provider:n,session_scope_kind:"workspaces",session_scope_items:JSON.stringify([r]),policy_mode:"read_only",allow_new_sessions:1,allow_resume_with_edits:0}}function I(e){return"chief-of-staff"===String(e??"").trim().toLowerCase()}a.join("|"),e.s(["LOCAL_HOST",0,g,"directLaunchWorkspace",0,function(e,t){let n=y(e.default_workspace,t);if(n)return n;let r=L(e);return r?.kind==="workspaces"&&1===r.workspaces.length?y(r.workspaces[0],t):null},"localConnectionId",0,h,"localConnectionLabel",0,N,"migrateRegistration",0,k,"readStoredPolicy",0,function(e){var t;return"string"==typeof(t=e.policy_mode)&&m.includes(t)?{mode:e.policy_mode,allow_new_sessions:O(e.allow_new_sessions),allow_resume_with_edits:O(e.allow_resume_with_edits)}:null},"readStoredScope",0,L,"registrationColumns",0,w,"workspaceContains",0,v],98307);let S=Object.freeze(["conversation","implementation","review","revision"]),A=Object.freeze(["readonly","edit"]);Object.freeze(["ui","api","wake","continuation","exchange"]);let b=Object.freeze({conversation:"readonly",implementation:"edit",review:"readonly",revision:"edit"});function q(e){return"string"==typeof e&&S.includes(e)}function C(e,t){return{ok:!1,code:e,reason:t}}function x(e){var t,n,r,i;if(!q(e.executionKind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.executionKind))}.`);let s=e.executionKind,a=(t=e.entryPoint,n=s,r=e.wakeSyntax,i=!0===e.resumesWorkRequest,"ui"===t||"api"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A direct message runs as a read-only conversation turn, not ${n}.`}:"direct_message_conversation":"continuation"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A coordinator continuation runs as a read-only conversation turn, not ${n}.`}:"coordinator_continuation":"exchange"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A session exchange runs as a read-only conversation turn, not ${n}.`}:"session_exchange_conversation":"wake"!==t?{code:"unsupported_authority",reason:"Unknown policy entry point."}:"legacy"===r?"conversation"!==n?{code:"unsupported_authority",reason:`A legacy WAKE directive runs as a conversation turn, not ${n}.`}:"legacy_wake_conversation":"structured"!==r?{code:"unsupported_authority",reason:"Unknown Wake syntax."}:"revision"===n!==i?{code:"unsupported_authority",reason:"revision"===n?"A revision names the Work Request it resumes.":"Only a revision resumes a Work Request."}:"structured_wake");return"string"!=typeof a?C(a.code,a.reason):{ok:!0,policy:Object.freeze({policy_version:1,execution_kind:s,tool_profile:b[s],entry_point:e.entryPoint,rule:a})}}let D=new Set(["policy_version","execution_kind","tool_profile","entry_point","rule"]);function U(e){if(!e||"object"!=typeof e||Array.isArray(e))return C("malformed_policy","The execution policy snapshot is missing.");let t=Object.keys(e);if(t.length!==D.size||t.some(e=>!D.has(e)))return C("malformed_policy","The execution policy snapshot has unexpected fields.");if(1!==e.policy_version)return C("malformed_policy","Unsupported execution policy version.");if(!q(e.execution_kind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.execution_kind))}.`);if(!A.includes(e.tool_profile))return C("unsupported_authority",`Unsupported tool profile ${JSON.stringify(String(e.tool_profile))}.`);if(b[e.execution_kind]!==e.tool_profile)return C("unsupported_authority",`Execution kind ${e.execution_kind} requires the ${b[e.execution_kind]} tool profile.`);let n={direct_message_conversation:{entry:["ui","api"],kinds:["conversation"]},legacy_wake_conversation:{entry:["wake"],kinds:["conversation"]},coordinator_continuation:{entry:["continuation"],kinds:["conversation"]},session_exchange_conversation:{entry:["exchange"],kinds:["conversation"]},structured_wake:{entry:["wake"],kinds:[...S]}},r="string"==typeof e.rule?n[e.rule]:void 0;return r&&r.entry.includes(e.entry_point)?r.kinds.includes(e.execution_kind)?{ok:!0,policy:Object.freeze({...e})}:C("unsupported_authority",`Rule ${e.rule} does not grant ${e.execution_kind}.`):C("malformed_policy","The execution policy rule does not match its entry point.")}e.s(["TOOL_PROFILE_FOR_KIND",0,b,"authorizeWorkRequest",0,function(e){let t;if(!q(e.execution_kind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.execution_kind))}.`);try{t="string"==typeof e.policy_snapshot?JSON.parse(e.policy_snapshot):null}catch{return C("malformed_policy","The policy snapshot is not valid JSON.")}let n=U(t&&"object"==typeof t&&!Array.isArray(t)?t.execution_policy:void 0);return n.ok?n.policy.execution_kind!==e.execution_kind||n.policy.tool_profile!==e.tool_profile?C("unsupported_authority","The Work Request authority does not match its policy snapshot."):t.tool_profile!==e.tool_profile?C("malformed_policy","The policy snapshot tool profile does not match the Work Request."):n:n},"isExecutionKind",0,q,"selectExecutionPolicy",0,x,"validateExecutionPolicy",0,U],76422);let F=Object.freeze({max_attempts:1,base_delay_ms:1e3,max_delay_ms:6e4,attempt_timeout_ms:null});function W(e){if(void 0===e||!/^\d+$/.test(e.trim()))return null;let t=Number(e.trim());return Number.isSafeInteger(t)&&t>0?t:null}function M(e=process.env){let t=W(e.BOTMANCERS_RETRY_MAX_ATTEMPTS),n=W(e.BOTMANCERS_RETRY_BASE_DELAY_MS)??F.base_delay_ms,r=W(e.BOTMANCERS_RETRY_MAX_DELAY_MS)??F.max_delay_ms,i=H({max_attempts:null===t?F.max_attempts:Math.min(t,10),base_delay_ms:n,max_delay_ms:Math.max(r,n),attempt_timeout_ms:W(e.BOTMANCERS_ATTEMPT_TIMEOUT_MS)});return{deadlineMs:W(e.BOTMANCERS_REQUEST_DEADLINE_MS),retryPolicy:i.ok?i.policy:{...F}}}function H(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"A retry policy is an object."};let t=e=>"number"==typeof e&&Number.isSafeInteger(e);if(!t(e.max_attempts)||e.max_attempts<1||e.max_attempts>10)return{ok:!1,reason:"max_attempts must be an integer from 1 to 10."};if(!t(e.base_delay_ms)||e.base_delay_ms<0)return{ok:!1,reason:"base_delay_ms must be a non-negative integer."};if(!t(e.max_delay_ms)||e.max_delay_ms<e.base_delay_ms)return{ok:!1,reason:"max_delay_ms must be an integer no smaller than base_delay_ms."};let n=e.attempt_timeout_ms??null;return null!==n&&(!t(n)||n<1)?{ok:!1,reason:"attempt_timeout_ms must be a positive integer or null."}:{ok:!0,policy:{max_attempts:e.max_attempts,base_delay_ms:e.base_delay_ms,max_delay_ms:e.max_delay_ms,attempt_timeout_ms:n}}}let X=["unavailable","provider_unavailable","agent_not_found","auth_required","permission_denied","incompatible_version","usage_limit"],G={unavailable:"retryable",runtime_failed:"retryable",timed_out:"retryable",launch_failed:"terminal",unsupported_authority:"terminal",result_contract:"terminal",cancelled:"terminal",session_mismatch:"manual_attention"};e.s(["DEFAULT_RETRY_POLICY",0,F,"attemptDeadline",0,function(e,t,n){let r=null===e.attempt_timeout_ms?null:n+e.attempt_timeout_ms;return null===r?t:null===t?r:Math.min(r,t)},"classifyFailure",0,function(e,t=null){return t&&X.includes(t)?"manual_attention":G[e??"runtime_failed"]??"terminal"},"decideRetry",0,function(e){var t;let n;if("terminal"===e.disposition)return{action:"fail",disposition:"terminal"};let r=e.attemptCount<e.policy.max_attempts;if("manual_attention"===e.disposition)return r?{action:"attention"}:{action:"fail",disposition:"terminal"};if(!r)return{action:"exhausted"};let i=e.attemptCount,s=(t=e.policy,n=Math.max(0,i-1),Math.min(t.max_delay_ms,t.base_delay_ms*2**Math.min(n,30))),a=e.now+s;return null!==e.deadlineAt&&a>=e.deadlineAt?{action:"deadline"}:{action:"retry",nextEligibleAt:a,delayMs:s,retry:i}},"requestControlDefaultsFromEnv",0,M,"storedRetryPolicy",0,function(e){if(!e)return{...F};try{let t=H(JSON.parse(e));return t.ok?t.policy:{...F}}catch{return{...F}}},"validateRetryPolicy",0,H],34923);let B={cached_input_tokens:"cached_input_tokens",cachedInputTokens:"cached_input_tokens",cache_read_input_tokens:"cache_read_input_tokens",cacheReadInputTokens:"cache_read_input_tokens",cacheReadTokens:"cache_read_input_tokens",cache_creation_input_tokens:"cache_creation_input_tokens",cacheCreationInputTokens:"cache_creation_input_tokens",cacheWriteTokens:"cache_creation_input_tokens",reasoning_output_tokens:"reasoning_output_tokens",reasoningOutputTokens:"reasoning_output_tokens",reasoningTokens:"reasoning_output_tokens"};function $(e){return null===e||"object"!=typeof e||Array.isArray(e)?null:e}function K(e){return"number"==typeof e&&Number.isInteger(e)&&e>=0&&e<=Number.MAX_SAFE_INTEGER?e:null}function P(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<1e9?e:null}function j(e,t,n){for(let r of t)if(r in e){let t=n(e[r]);if(null!==t)return t}return null}function Y(e,t,n){let r=e?j(e,["input_tokens","inputTokens"],K):null,i=e?j(e,["output_tokens","outputTokens"],K):null;return null===r&&null===i&&null===t?null:{input_tokens:r,output_tokens:i,cost_usd:t,source:n,breakdown:e?function(e){let t={};for(let[n,r]of Object.entries(B)){let i=K(e[n]);null!==i&&void 0===t[r]&&(t[r]=i)}return Object.keys(t).length>0?t:null}(e):null}}function z(e){let t=$(e);if(!t)return null;let n="codex.turn_completed"===t.source||"result"===t.source||"normalized"===t.source?t.source:"normalized",r=K(t.input_tokens),i=K(t.output_tokens),s=P(t.cost_usd);if(null===r&&null===i&&null===s)return null;let a=$(t.breakdown),o={};if(a)for(let e of new Set(Object.values(B))){let t=K(a[e]);null!==t&&(o[e]=t)}return{input_tokens:r,output_tokens:i,cost_usd:s,source:n,breakdown:Object.keys(o).length>0?o:null}}function J(e,t,n,r){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get())return;let i=z(r.usage),a=r.now??Date.now();e.prepare(`
1
+ module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,71711,23325,78636,48758,e=>{"use strict";let t;var n=e.i(85148),r=e.i(22734),i=e.i(14747),s=e.i(54799);let a=["hermes","cursor","claude","codex","muse"],o={hermes:"Hermes",cursor:"Cursor",claude:"Claude",codex:"Codex",muse:"Muse Code"},d="hermes",u={hermes:"hermes-gateway",cursor:"session-provider",claude:"session-provider",codex:"session-provider",muse:"session-provider"};class l extends Error{code="invalid-agent";constructor(e){super(`Invalid agent: ${JSON.stringify(String(e))}. Expected one of ${a.join("|")}.`)}}function _(e){if(null==e)return null;let t=String(e).trim();if(!t)return null;if(a.includes(t))return t;throw new l(e)}function c(e){return null==e?null:String(e).trim()||null}a.join("|");let E=["codex","claude","cursor","muse"];function p(e){let t=c(e);return t&&E.includes(t)?t:null}function T(e){try{let t=_(e.agent);if(t)return{agent:t,migrated:!1}}catch{}let t=c(e.runtime),n=d;if("agent-deck"===t)n=p(e.agent_client)??d;else if("hermes"!==t){let t=p(e.coding_runtime),r=c(e.deck_name),i=c(e.working_directory);t&&r&&i&&(n=t)}return{agent:n,migrated:!0}}e.s(["AGENTS",0,a,"AGENT_LABELS",0,o,"DEFAULT_AGENT",0,d,"agentTransport",0,function(e){return u[e]},"migrateLegacyAgentFields",0,T,"normalizeAgent",0,_,"resolveAgent",0,function(e){let t=d,n=!0;try{t=_(e.agent)??d}catch{n=!1}let r=c(e.runtime_connection_id),i=null;return n?r?!function(e){if(!("session_scope_kind"in e))return!0;let t=e.session_scope_kind,n=[];try{n=e.session_scope_items?JSON.parse(e.session_scope_items):[]}catch{return!1}if(!Array.isArray(n))return!1;let r=n.filter(e=>"string"==typeof e&&e.trim()).length;return"all_provider_sessions"===t?0===r:("workspaces"===t||"sessions"===t)&&r>0}(e)&&(i="session_scope"):i="connection":i="agent",{agent:t,runtime_connection_id:r,launchable:null===i,launch_blocker:i}}],89965);let m=["read_only","workspace_write"],f=["workspaces","sessions","all_provider_sessions"],g="This computer";function h(e){return`rc-local-${e}`}function N(e){return`${o[e]} on ${g.toLowerCase()}`}function R(e){return e.length>1?e.replace(/\/+$/,""):e}function v(e,t){let n=R(e),r=R(t);return n===r||r.startsWith("/"===n?"/":`${n}/`)}function y(e,t){let n="string"==typeof e?e.trim():"";if(!n)return null;let r=t&&t.trim()?t:(process.env.HOME??"").trim(),i="~"===n?r:n.startsWith("~/")?`${r}/${n.slice(2)}`:n;return i.startsWith("/")?i:null}function L(e){let t=e.session_scope_kind;if(!("string"==typeof t&&f.includes(t)))return null;let n=[];if(e.session_scope_items)try{let t=function(e){if(null==e)return[];if(!Array.isArray(e))return null;let t=[];for(let n of e){if("string"!=typeof n)return null;let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}(JSON.parse(e.session_scope_items));if(null===t)return null;n=t}catch{return null}return"all_provider_sessions"===t?0===n.length?{kind:t,workspaces:[],sessions:[]}:null:0===n.length?null:"workspaces"===t?{kind:t,workspaces:n,sessions:[]}:{kind:t,workspaces:[],sessions:n}}function w(e){return!0===e||1===e||"1"===e}function O(e){var t;return{runtime_connection_id:e.runtime_connection_id,launch_profile:"direct",deck_id:null,working_directory:null,session_scope_kind:e.session_scope.kind,session_scope_items:JSON.stringify("workspaces"===(t=e.session_scope).kind?t.workspaces:"sessions"===t.kind?t.sessions:[]),default_workspace:e.default_workspace,policy_mode:e.policy.mode,allow_new_sessions:+!!e.policy.allow_new_sessions,allow_resume_with_edits:+!!e.policy.allow_resume_with_edits,home_session_id:e.home_session_id,needs_deck_selection:0}}function k(e){var t;let n="hermes";try{n=_(e.agent)??"hermes"}catch{n="hermes"}let r=(null==(t=e.working_directory)?null:String(t).trim()||null)??`~/.botmancers/${e.id}`;return{runtime_connection_id:h(n),provider:n,session_scope_kind:"workspaces",session_scope_items:JSON.stringify([r]),policy_mode:"read_only",allow_new_sessions:1,allow_resume_with_edits:0}}function I(e){return"chief-of-staff"===String(e??"").trim().toLowerCase()}a.join("|"),e.s(["LOCAL_HOST",0,g,"directLaunchWorkspace",0,function(e,t){let n=y(e.default_workspace,t);if(n)return n;let r=L(e);return r?.kind==="workspaces"&&1===r.workspaces.length?y(r.workspaces[0],t):null},"localConnectionId",0,h,"localConnectionLabel",0,N,"migrateRegistration",0,k,"readStoredPolicy",0,function(e){var t;return"string"==typeof(t=e.policy_mode)&&m.includes(t)?{mode:e.policy_mode,allow_new_sessions:w(e.allow_new_sessions),allow_resume_with_edits:w(e.allow_resume_with_edits)}:null},"readStoredScope",0,L,"registrationColumns",0,O,"workspaceContains",0,v],98307);let S=Object.freeze(["conversation","implementation","review","revision"]),A=Object.freeze(["readonly","edit"]);Object.freeze(["ui","api","wake","continuation","exchange"]);let b=Object.freeze({conversation:"readonly",implementation:"edit",review:"readonly",revision:"edit"});function q(e){return"string"==typeof e&&S.includes(e)}function C(e,t){return{ok:!1,code:e,reason:t}}function x(e){var t,n,r,i;if(!q(e.executionKind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.executionKind))}.`);let s=e.executionKind,a=(t=e.entryPoint,n=s,r=e.wakeSyntax,i=!0===e.resumesWorkRequest,"ui"===t||"api"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A direct message runs as a read-only conversation turn, not ${n}.`}:"direct_message_conversation":"continuation"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A coordinator continuation runs as a read-only conversation turn, not ${n}.`}:"coordinator_continuation":"exchange"===t?"conversation"!==n?{code:"unsupported_authority",reason:`A session exchange runs as a read-only conversation turn, not ${n}.`}:"session_exchange_conversation":"wake"!==t?{code:"unsupported_authority",reason:"Unknown policy entry point."}:"legacy"===r?"conversation"!==n?{code:"unsupported_authority",reason:`A legacy WAKE directive runs as a conversation turn, not ${n}.`}:"legacy_wake_conversation":"structured"!==r?{code:"unsupported_authority",reason:"Unknown Wake syntax."}:"revision"===n!==i?{code:"unsupported_authority",reason:"revision"===n?"A revision names the Work Request it resumes.":"Only a revision resumes a Work Request."}:"structured_wake");return"string"!=typeof a?C(a.code,a.reason):{ok:!0,policy:Object.freeze({policy_version:1,execution_kind:s,tool_profile:b[s],entry_point:e.entryPoint,rule:a})}}let D=new Set(["policy_version","execution_kind","tool_profile","entry_point","rule"]);function U(e){if(!e||"object"!=typeof e||Array.isArray(e))return C("malformed_policy","The execution policy snapshot is missing.");let t=Object.keys(e);if(t.length!==D.size||t.some(e=>!D.has(e)))return C("malformed_policy","The execution policy snapshot has unexpected fields.");if(1!==e.policy_version)return C("malformed_policy","Unsupported execution policy version.");if(!q(e.execution_kind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.execution_kind))}.`);if(!A.includes(e.tool_profile))return C("unsupported_authority",`Unsupported tool profile ${JSON.stringify(String(e.tool_profile))}.`);if(b[e.execution_kind]!==e.tool_profile)return C("unsupported_authority",`Execution kind ${e.execution_kind} requires the ${b[e.execution_kind]} tool profile.`);let n={direct_message_conversation:{entry:["ui","api"],kinds:["conversation"]},legacy_wake_conversation:{entry:["wake"],kinds:["conversation"]},coordinator_continuation:{entry:["continuation"],kinds:["conversation"]},session_exchange_conversation:{entry:["exchange"],kinds:["conversation"]},structured_wake:{entry:["wake"],kinds:[...S]}},r="string"==typeof e.rule?n[e.rule]:void 0;return r&&r.entry.includes(e.entry_point)?r.kinds.includes(e.execution_kind)?{ok:!0,policy:Object.freeze({...e})}:C("unsupported_authority",`Rule ${e.rule} does not grant ${e.execution_kind}.`):C("malformed_policy","The execution policy rule does not match its entry point.")}e.s(["TOOL_PROFILE_FOR_KIND",0,b,"authorizeWorkRequest",0,function(e){let t;if(!q(e.execution_kind))return C("unknown_execution_kind",`Unknown execution kind ${JSON.stringify(String(e.execution_kind))}.`);try{t="string"==typeof e.policy_snapshot?JSON.parse(e.policy_snapshot):null}catch{return C("malformed_policy","The policy snapshot is not valid JSON.")}let n=U(t&&"object"==typeof t&&!Array.isArray(t)?t.execution_policy:void 0);return n.ok?n.policy.execution_kind!==e.execution_kind||n.policy.tool_profile!==e.tool_profile?C("unsupported_authority","The Work Request authority does not match its policy snapshot."):t.tool_profile!==e.tool_profile?C("malformed_policy","The policy snapshot tool profile does not match the Work Request."):n:n},"isExecutionKind",0,q,"selectExecutionPolicy",0,x,"validateExecutionPolicy",0,U],76422);let F=Object.freeze({max_attempts:1,base_delay_ms:1e3,max_delay_ms:6e4,attempt_timeout_ms:null});function W(e){if(void 0===e||!/^\d+$/.test(e.trim()))return null;let t=Number(e.trim());return Number.isSafeInteger(t)&&t>0?t:null}function M(e=process.env){let t=W(e.BOTMANCERS_RETRY_MAX_ATTEMPTS),n=W(e.BOTMANCERS_RETRY_BASE_DELAY_MS)??F.base_delay_ms,r=W(e.BOTMANCERS_RETRY_MAX_DELAY_MS)??F.max_delay_ms,i=H({max_attempts:null===t?F.max_attempts:Math.min(t,10),base_delay_ms:n,max_delay_ms:Math.max(r,n),attempt_timeout_ms:W(e.BOTMANCERS_ATTEMPT_TIMEOUT_MS)});return{deadlineMs:W(e.BOTMANCERS_REQUEST_DEADLINE_MS),retryPolicy:i.ok?i.policy:{...F}}}function H(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"A retry policy is an object."};let t=e=>"number"==typeof e&&Number.isSafeInteger(e);if(!t(e.max_attempts)||e.max_attempts<1||e.max_attempts>10)return{ok:!1,reason:"max_attempts must be an integer from 1 to 10."};if(!t(e.base_delay_ms)||e.base_delay_ms<0)return{ok:!1,reason:"base_delay_ms must be a non-negative integer."};if(!t(e.max_delay_ms)||e.max_delay_ms<e.base_delay_ms)return{ok:!1,reason:"max_delay_ms must be an integer no smaller than base_delay_ms."};let n=e.attempt_timeout_ms??null;return null!==n&&(!t(n)||n<1)?{ok:!1,reason:"attempt_timeout_ms must be a positive integer or null."}:{ok:!0,policy:{max_attempts:e.max_attempts,base_delay_ms:e.base_delay_ms,max_delay_ms:e.max_delay_ms,attempt_timeout_ms:n}}}let X=["unavailable","provider_unavailable","agent_not_found","auth_required","permission_denied","incompatible_version","usage_limit"],G={unavailable:"retryable",runtime_failed:"retryable",timed_out:"retryable",launch_failed:"terminal",unsupported_authority:"terminal",result_contract:"terminal",cancelled:"terminal",session_mismatch:"manual_attention"};e.s(["DEFAULT_RETRY_POLICY",0,F,"attemptDeadline",0,function(e,t,n){let r=null===e.attempt_timeout_ms?null:n+e.attempt_timeout_ms;return null===r?t:null===t?r:Math.min(r,t)},"classifyFailure",0,function(e,t=null){return t&&X.includes(t)?"manual_attention":G[e??"runtime_failed"]??"terminal"},"decideRetry",0,function(e){var t;let n;if("terminal"===e.disposition)return{action:"fail",disposition:"terminal"};let r=e.attemptCount<e.policy.max_attempts;if("manual_attention"===e.disposition)return r?{action:"attention"}:{action:"fail",disposition:"terminal"};if(!r)return{action:"exhausted"};let i=e.attemptCount,s=(t=e.policy,n=Math.max(0,i-1),Math.min(t.max_delay_ms,t.base_delay_ms*2**Math.min(n,30))),a=e.now+s;return null!==e.deadlineAt&&a>=e.deadlineAt?{action:"deadline"}:{action:"retry",nextEligibleAt:a,delayMs:s,retry:i}},"requestControlDefaultsFromEnv",0,M,"storedRetryPolicy",0,function(e){if(!e)return{...F};try{let t=H(JSON.parse(e));return t.ok?t.policy:{...F}}catch{return{...F}}},"validateRetryPolicy",0,H],34923);let B={cached_input_tokens:"cached_input_tokens",cachedInputTokens:"cached_input_tokens",cache_read_input_tokens:"cache_read_input_tokens",cacheReadInputTokens:"cache_read_input_tokens",cacheReadTokens:"cache_read_input_tokens",cache_creation_input_tokens:"cache_creation_input_tokens",cacheCreationInputTokens:"cache_creation_input_tokens",cacheWriteTokens:"cache_creation_input_tokens",reasoning_output_tokens:"reasoning_output_tokens",reasoningOutputTokens:"reasoning_output_tokens",reasoningTokens:"reasoning_output_tokens"};function $(e){return null===e||"object"!=typeof e||Array.isArray(e)?null:e}function K(e){return"number"==typeof e&&Number.isInteger(e)&&e>=0&&e<=Number.MAX_SAFE_INTEGER?e:null}function P(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<1e9?e:null}function j(e,t,n){for(let r of t)if(r in e){let t=n(e[r]);if(null!==t)return t}return null}function Y(e,t,n){let r=e?j(e,["input_tokens","inputTokens"],K):null,i=e?j(e,["output_tokens","outputTokens"],K):null;return null===r&&null===i&&null===t?null:{input_tokens:r,output_tokens:i,cost_usd:t,source:n,breakdown:e?function(e){let t={};for(let[n,r]of Object.entries(B)){let i=K(e[n]);null!==i&&void 0===t[r]&&(t[r]=i)}return Object.keys(t).length>0?t:null}(e):null}}function z(e){let t=$(e);if(!t)return null;let n="codex.turn_completed"===t.source||"result"===t.source||"normalized"===t.source?t.source:"normalized",r=K(t.input_tokens),i=K(t.output_tokens),s=P(t.cost_usd);if(null===r&&null===i&&null===s)return null;let a=$(t.breakdown),o={};if(a)for(let e of new Set(Object.values(B))){let t=K(a[e]);null!==t&&(o[e]=t)}return{input_tokens:r,output_tokens:i,cost_usd:s,source:n,breakdown:Object.keys(o).length>0?o:null}}function J(e,t,n,r){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'usage_samples'").get())return;let i=z(r.usage),a=r.now??Date.now();e.prepare(`
2
2
  INSERT INTO usage_samples (
3
3
  id, sample_key, agent_id, attempt_id, session_ref, turn_id, provider, source,
4
4
  input_tokens, output_tokens, cost_usd, breakdown, observed_at, created_at, updated_at
@@ -1629,8 +1629,8 @@ module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,7171
1629
1629
  OR destination_attempt_id IN ${u} OR source_binding_id IN ${u} OR destination_binding_id IN ${u}`,t.arg,t.arg,d(r),d(r),d(a),d(a),d(s),d(s))),l=o(r,n(`SELECT source_request_id AS id FROM session_exchanges WHERE id IN ${u} AND source_request_id IS NOT NULL
1630
1630
  UNION SELECT destination_request_id AS id FROM session_exchanges WHERE id IN ${u} AND destination_request_id IS NOT NULL`,d(i),d(i))),_=o(r,n(`SELECT id FROM work_requests WHERE parent_request_id IN ${u} OR root_request_id IN ${u}`,d(r),d(r))),c=o(r,n(`SELECT request_id AS id FROM work_attempts WHERE id IN ${u}`,d(a))),E=o(a,n(`SELECT id FROM work_attempts WHERE request_id IN ${u} OR resumed_session_binding_id IN ${u}`,d(r),d(s))),p=o(s,n(`SELECT id FROM session_bindings WHERE request_id IN ${u} OR source_attempt_id IN ${u}`,d(r),d(a)));if(!e&&!l&&!_&&!c&&!E&&!p)break}(function(e,t,...n){let r=e.prepare(`SELECT id FROM session_exchanges WHERE ${t}`).all(...n).map(e=>e.id);if(0===r.length)return;let i=ec(e);for(let e of r)i.add(e);try{e.prepare("DELETE FROM session_exchange_events WHERE exchange_id IN (SELECT value FROM json_each(?))").run(JSON.stringify(r))}finally{i.clear()}e.prepare("DELETE FROM session_exchanges WHERE id IN (SELECT value FROM json_each(?))").run(JSON.stringify(r))})(e,`id IN ${u}`,d(i)),e.prepare(`DELETE FROM conversation_events WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM finalizations WHERE implementation_request_id IN ${u} OR review_request_id IN ${u} OR decision_request_id IN ${u}`).run(d(r),d(r),d(r)),e.prepare(`DELETE FROM candidate_manifests WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM attempt_finalization_baselines WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM conversation_projection_cursors WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM wake_safety_decisions WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM dispatch_leases WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM attempt_launch_intents WHERE request_id IN ${u}`).run(d(r)),e.prepare(`DELETE FROM dispatch_attention WHERE request_id IN ${u}`).run(d(r));let l=ec(e);for(let e of r)l.add(e);try{e.prepare(`DELETE FROM engine_events WHERE request_id IN ${u}`).run(d(r))}finally{l.clear()}for(eL(e,`origin = 'binding' AND binding_id IN ${u}`,d(s)),e.prepare(`UPDATE provider_sessions SET binding_id = NULL WHERE binding_id IN ${u}`).run(d(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 ${u}`).run(d(a));a.size>0||s.size>0;){let t=n(`SELECT id FROM session_bindings WHERE id IN ${u}
1631
1631
  AND NOT EXISTS (SELECT 1 FROM work_attempts a WHERE a.resumed_session_binding_id = session_bindings.id)`,d(s));for(let n of t)e.prepare("DELETE FROM session_bindings WHERE id = ?").run(n),s.delete(n);let r=n(`SELECT id FROM work_attempts WHERE id IN ${u}
1632
- AND NOT EXISTS (SELECT 1 FROM session_bindings b WHERE b.source_attempt_id = work_attempts.id)`,d(a));for(let t of r)e.prepare("DELETE FROM work_attempts WHERE id = ?").run(t),a.delete(t);if(0===t.length&&0===r.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 ${u} OR parent_request_id IN ${u} OR root_request_id IN ${u})`).run(d(r),d(r),d(r)),e.prepare(`DELETE FROM wakes WHERE work_request_id IN ${u} OR parent_request_id IN ${u} OR root_request_id IN ${u}`).run(d(r),d(r),d(r)),e.prepare(`DELETE FROM terminal_followups WHERE request_id IN ${u}`).run(d(r)),n(`SELECT id FROM work_requests WHERE id IN ${u} ORDER BY depth DESC`,d(r))))e.prepare("DELETE FROM work_requests WHERE id = ?").run(t)}function eL(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())return;let r=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(r),e.prepare("DELETE FROM provider_session_events WHERE session_ref IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM provider_session_turns WHERE session_ref IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM provider_sessions WHERE id IN (SELECT value FROM json_each(?))").run(r)}function eO(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'session_pins'").get())return;let r=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(r),e.prepare("DELETE FROM session_pin_turns WHERE pin_id IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM session_pins WHERE id IN (SELECT value FROM json_each(?))").run(r)}function ew(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),eO(e,"conversation_id = ?",t),ey(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 ek(e,t){e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (
1633
- 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),eO(e,"agent_id = ?",t),eL(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),ey(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})}e.s(["EXCHANGE_LIMITS",0,et,"EXCHANGE_TERMINAL_STATES",0,Z,"EXCHANGE_TRANSITIONS",0,ee,"EngineStoreError",0,ea,"TERMINAL_STATES",0,er,"createEngineStore",0,ev,"deleteEngineRecordsForAgent",0,ek,"deleteEngineRecordsForConversation",0,ew,"migrateEngineSchema",0,eE],94057);let eI=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eS=/^[a-z][a-z0-9_.:-]{0,63}$/;function eA(e){return null==e||""===e?null:eI.test(e)?e:"[invalid]"}function eb(e,t){return e&&eS.test(e)?e:t}function eq(e){return String(e??"").trim()}function eC(e){return eq(e).normalize("NFC").toLowerCase().normalize("NFC")}class ex extends Error{code="agent_name_conflict";requestedName;conflictingAgentId;constructor(e,t){super(function(e){return`An Agent named "${eq(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}(e)),this.name="AgentNameConflictError",this.requestedName=eq(e),this.conflictingAgentId=t}}function eD(e=process.env){let t=(e.BOTMANCERS_HOME||"").trim();return t?i.default.resolve(t):null}function eU(e=process.env){let t=(e.BOTMANCERS_DB_PATH||"").trim()||null;if(t)return t;let n=eD(e);return n?i.default.join(n,"data/botmancers.db"):"botmancers.db"}e.s(["botmancersHome",0,eD,"dbPath",0,eU],99684);let eF=eU();":memory:"!==eF&&r.default.mkdirSync(i.default.dirname(i.default.resolve(eF)),{recursive:!0});let eW=new n.default(eF);eW.pragma("journal_mode = WAL"),eW.exec(`
1632
+ AND NOT EXISTS (SELECT 1 FROM session_bindings b WHERE b.source_attempt_id = work_attempts.id)`,d(a));for(let t of r)e.prepare("DELETE FROM work_attempts WHERE id = ?").run(t),a.delete(t);if(0===t.length&&0===r.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 ${u} OR parent_request_id IN ${u} OR root_request_id IN ${u})`).run(d(r),d(r),d(r)),e.prepare(`DELETE FROM wakes WHERE work_request_id IN ${u} OR parent_request_id IN ${u} OR root_request_id IN ${u}`).run(d(r),d(r),d(r)),e.prepare(`DELETE FROM terminal_followups WHERE request_id IN ${u}`).run(d(r)),n(`SELECT id FROM work_requests WHERE id IN ${u} ORDER BY depth DESC`,d(r))))e.prepare("DELETE FROM work_requests WHERE id = ?").run(t)}function eL(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())return;let r=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(r),e.prepare("DELETE FROM provider_session_events WHERE session_ref IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM provider_session_turns WHERE session_ref IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM provider_sessions WHERE id IN (SELECT value FROM json_each(?))").run(r)}function ew(e,t,...n){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'session_pins'").get())return;let r=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(r),e.prepare("DELETE FROM session_pin_turns WHERE pin_id IN (SELECT value FROM json_each(?))").run(r),e.prepare("DELETE FROM session_pins WHERE id IN (SELECT value FROM json_each(?))").run(r)}function eO(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),ew(e,"conversation_id = ?",t),ey(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 ek(e,t){e.prepare(`DELETE FROM conversation_events WHERE request_id IS NULL AND wake_id IN (
1633
+ 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),ew(e,"agent_id = ?",t),eL(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),ey(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})}e.s(["EXCHANGE_LIMITS",0,et,"EXCHANGE_TERMINAL_STATES",0,Z,"EXCHANGE_TRANSITIONS",0,ee,"EngineStoreError",0,ea,"TERMINAL_STATES",0,er,"createEngineStore",0,ev,"deleteEngineRecordsForAgent",0,ek,"deleteEngineRecordsForConversation",0,eO,"migrateEngineSchema",0,eE],94057);let eI=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/,eS=/^[a-z][a-z0-9_.:-]{0,63}$/;function eA(e){return null==e||""===e?null:eI.test(e)?e:"[invalid]"}function eb(e,t){return e&&eS.test(e)?e:t}function eq(e){return String(e??"").trim()}function eC(e){return eq(e).normalize("NFC").toLowerCase().normalize("NFC")}class ex extends Error{code="agent_name_conflict";requestedName;conflictingAgentId;constructor(e,t){super(function(e){return`An Agent named "${eq(e)}" already exists. Agent names must be unique, ignoring case and surrounding spaces.`}(e)),this.name="AgentNameConflictError",this.requestedName=eq(e),this.conflictingAgentId=t}}function eD(e=process.env){let t=(e.BOTMANCERS_HOME||"").trim();return t?i.default.resolve(t):null}function eU(e=process.env){let t=(e.BOTMANCERS_DB_PATH||"").trim()||null;if(t)return t;let n=eD(e);return n?i.default.join(n,"data/botmancers.db"):"botmancers.db"}e.s(["botmancersHome",0,eD,"dbPath",0,eU],99684);let eF=eU();":memory:"!==eF&&r.default.mkdirSync(i.default.dirname(i.default.resolve(eF)),{recursive:!0});let eW=new n.default(eF);eW.pragma("journal_mode = WAL"),eW.exec(`
1634
1634
  CREATE TABLE IF NOT EXISTS bots (
1635
1635
  id TEXT PRIMARY KEY,
1636
1636
  name TEXT NOT NULL,
@@ -1858,7 +1858,7 @@ module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,7171
1858
1858
  needs_deck_selection,
1859
1859
  runtime_connection_id, launch_profile, session_scope_kind, session_scope_items,
1860
1860
  policy_mode, allow_new_sessions, allow_resume_with_edits
1861
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(r.id,r.name,r.name_key,r.title,r.description,r.avatar||null,r.color,r.created_at,r.source_provider,r.template_id,r.template_url,r.import_schema_version,r.import_operation_id,r.import_timestamp,r.agent,r.deck_id,r.deck_name,r.working_directory,r.needs_deck_selection,r.runtime_connection_id,r.launch_profile,r.session_scope_kind,r.session_scope_items,r.policy_mode,r.allow_new_sessions,r.allow_resume_with_edits));let a=(0,s.randomUUID)();return eW.prepare("INSERT INTO conversations (id, type, bot_id, created_at) VALUES (?, ?, ?, ?)").run(a,"bot",r.id,r.created_at),e4(a,[r.id],r.created_at),r},getByImportOperationId:e=>eW.prepare("SELECT * FROM bots WHERE import_operation_id = ?").get(e),getAll:()=>eW.prepare("SELECT * FROM bots ORDER BY created_at DESC").all(),getById:e=>eW.prepare("SELECT * FROM bots WHERE id = ?").get(e),setAvatar:(e,t)=>{eW.prepare("UPDATE bots SET avatar = ? WHERE id = ?").run(t,e)},getByName:e=>{let t=eC(e);if(t)return eW.prepare("SELECT * FROM bots WHERE name_key = ?").get(t)},updateIdentity:(e,t,n,r)=>{let i=eP(t,e);ej(i.name,()=>eW.prepare("UPDATE bots SET name = ?, name_key = ?, title = ?, description = ? WHERE id = ?").run(i.name,i.name_key,n,r,e))},setPinned:(e,t)=>{eW.prepare("UPDATE bots SET pinned = ? WHERE id = ?").run(+!!t,e)},setHidden:(e,t)=>{eW.prepare("UPDATE bots SET hidden = ? WHERE id = ?").run(+!!t,e)},setHermesProfile:(e,t)=>{let n=t&&t.trim()?t.trim():null;eW.prepare("UPDATE bots SET hermes_profile = ? WHERE id = ?").run(n,e)},updateRegistration:(e,t,n)=>{let r=w(n);eW.prepare(`UPDATE bots SET agent = ?, runtime_connection_id = ?, launch_profile = ?, deck_id = ?, working_directory = ?,
1861
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(r.id,r.name,r.name_key,r.title,r.description,r.avatar||null,r.color,r.created_at,r.source_provider,r.template_id,r.template_url,r.import_schema_version,r.import_operation_id,r.import_timestamp,r.agent,r.deck_id,r.deck_name,r.working_directory,r.needs_deck_selection,r.runtime_connection_id,r.launch_profile,r.session_scope_kind,r.session_scope_items,r.policy_mode,r.allow_new_sessions,r.allow_resume_with_edits));let a=(0,s.randomUUID)();return eW.prepare("INSERT INTO conversations (id, type, bot_id, created_at) VALUES (?, ?, ?, ?)").run(a,"bot",r.id,r.created_at),e4(a,[r.id],r.created_at),r},getByImportOperationId:e=>eW.prepare("SELECT * FROM bots WHERE import_operation_id = ?").get(e),getAll:()=>eW.prepare("SELECT * FROM bots ORDER BY created_at DESC").all(),getById:e=>eW.prepare("SELECT * FROM bots WHERE id = ?").get(e),setAvatar:(e,t)=>{eW.prepare("UPDATE bots SET avatar = ? WHERE id = ?").run(t,e)},getByName:e=>{let t=eC(e);if(t)return eW.prepare("SELECT * FROM bots WHERE name_key = ?").get(t)},updateIdentity:(e,t,n,r)=>{let i=eP(t,e);ej(i.name,()=>eW.prepare("UPDATE bots SET name = ?, name_key = ?, title = ?, description = ? WHERE id = ?").run(i.name,i.name_key,n,r,e))},setPinned:(e,t)=>{eW.prepare("UPDATE bots SET pinned = ? WHERE id = ?").run(+!!t,e)},setHidden:(e,t)=>{eW.prepare("UPDATE bots SET hidden = ? WHERE id = ?").run(+!!t,e)},setHermesProfile:(e,t)=>{let n=t&&t.trim()?t.trim():null;eW.prepare("UPDATE bots SET hermes_profile = ? WHERE id = ?").run(n,e)},updateRegistration:(e,t,n)=>{let r=O(n);eW.prepare(`UPDATE bots SET agent = ?, runtime_connection_id = ?, launch_profile = ?, deck_id = ?, working_directory = ?,
1862
1862
  session_scope_kind = ?, session_scope_items = ?, default_workspace = ?, policy_mode = ?, allow_new_sessions = ?,
1863
1863
  allow_resume_with_edits = ?, home_session_id = ?, needs_deck_selection = ? WHERE id = ?`).run(t,r.runtime_connection_id,r.launch_profile,r.deck_id,r.working_directory,r.session_scope_kind,r.session_scope_items,r.default_workspace,r.policy_mode,r.allow_new_sessions,r.allow_resume_with_edits,r.home_session_id,r.needs_deck_selection,e)},updateAvatarConfig:(e,t)=>{let n=e2.getById(e);if(!n)return;let r=(e,t)=>void 0===e?t||null:e&&String(e).trim()?String(e).trim():null;eW.prepare("UPDATE bots SET avatar_color = ?, avatar_eyes = ?, avatar_hands = ?, avatar_accessory = ? WHERE id = ?").run(r(t.avatar_color,n.avatar_color),r(t.avatar_eyes,n.avatar_eyes),r(t.avatar_hands,n.avatar_hands),r(t.avatar_accessory,n.avatar_accessory),e)},touchSeen:()=>{eW.prepare("UPDATE bots SET last_seen = ?").run(Date.now())},markUnread:e=>{eW.prepare("UPDATE bots SET unread = 1 WHERE id = ?").run(e)},markRead:e=>{eW.prepare("UPDATE bots SET unread = 0 WHERE id = ?").run(e)},remove:e=>{e2.removeMany([e])},deletionPreview:e=>{var t;let n=new Set(e),r=[],i=[],s=[],a=new Set(e6());for(let t of e){let e=e2.getById(t);if(!e){i.push(t);continue}r.push({id:e.id,name:e.name}),I(e.name)?s.push({id:e.id,name:e.name,reason:"chief"}):a.has(e.id)&&s.push({id:e.id,name:e.name,reason:"active"})}return{agents:r,groups:0===(t=n).size?[]:eW.prepare(`SELECT DISTINCT g.id, g.name, g.owner_bot_id, g.created_at FROM groups g
1864
1864
  JOIN group_members gm ON gm.group_id = g.id
@@ -1868,7 +1868,7 @@ module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,7171
1868
1868
  SELECT DISTINCT target_agent_id AS bot_id FROM work_requests
1869
1869
  WHERE (executor <> 'dispatcher' AND state IN ('queued', 'running'))
1870
1870
  OR (executor = 'dispatcher' AND state = 'running' AND json_extract(policy_snapshot, '$.surface') = 'ui')
1871
- `).all().map(e=>e.bot_id)}function e9(){return new Set(eW.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name IN ('legacy_agent_requests_archive', 'legacy_agent_request_events_archive', 'legacy_processing_queue_archive')").all().map(e=>e.name))}function e5(e,t){e9().has("legacy_processing_queue_archive")&&eW.prepare(`DELETE FROM legacy_processing_queue_archive WHERE ${e} = ?`).run(t)}function e8(e){let t;ew(eW,e),eW.prepare("DELETE FROM draft_actions WHERE message_id IN (SELECT id FROM messages WHERE conversation_id = ?)").run(e),t=e9(),e5("conversation_id",e),t.has("legacy_agent_request_events_archive")&&t.has("legacy_agent_requests_archive")&&eW.prepare("DELETE FROM legacy_agent_request_events_archive WHERE request_id IN (SELECT id FROM legacy_agent_requests_archive WHERE conversation_id = ?)").run(e),t.has("legacy_agent_requests_archive")&&eW.prepare("DELETE FROM legacy_agent_requests_archive WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM messages WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM pending_questions WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM approvals WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM approval_requests WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM one_shots WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM routines WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM wake_targets WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM conversation_participants WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM conversations WHERE id = ?").run(e)}eW.exec(`
1871
+ `).all().map(e=>e.bot_id)}function e9(){return new Set(eW.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name IN ('legacy_agent_requests_archive', 'legacy_agent_request_events_archive', 'legacy_processing_queue_archive')").all().map(e=>e.name))}function e5(e,t){e9().has("legacy_processing_queue_archive")&&eW.prepare(`DELETE FROM legacy_processing_queue_archive WHERE ${e} = ?`).run(t)}function e8(e){let t;eO(eW,e),eW.prepare("DELETE FROM draft_actions WHERE message_id IN (SELECT id FROM messages WHERE conversation_id = ?)").run(e),t=e9(),e5("conversation_id",e),t.has("legacy_agent_request_events_archive")&&t.has("legacy_agent_requests_archive")&&eW.prepare("DELETE FROM legacy_agent_request_events_archive WHERE request_id IN (SELECT id FROM legacy_agent_requests_archive WHERE conversation_id = ?)").run(e),t.has("legacy_agent_requests_archive")&&eW.prepare("DELETE FROM legacy_agent_requests_archive WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM messages WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM pending_questions WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM approvals WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM approval_requests WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM one_shots WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM routines WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM wake_targets WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM conversation_participants WHERE conversation_id = ?").run(e),eW.prepare("DELETE FROM conversations WHERE id = ?").run(e)}eW.exec(`
1872
1872
  CREATE TABLE IF NOT EXISTS wake_targets (
1873
1873
  id TEXT PRIMARY KEY,
1874
1874
  conversation_id TEXT NOT NULL,
@@ -1892,11 +1892,11 @@ module.exports=[99904,89965,98307,76422,34923,98596,46632,94057,99684,74455,7171
1892
1892
  value TEXT NOT NULL,
1893
1893
  updated_at INTEGER NOT NULL
1894
1894
  );
1895
- `),e.s(["bots",0,e2,"default",0,eW,"engine",0,eV,"resolveWakeTarget",0,function(e){let t=eC(e);if(!t)return{ok:!1,reason:"not_found",requested:String(e??"")};let n=eW.prepare("SELECT id, name FROM bots WHERE name_key = ? LIMIT 2").all(t);return 0===n.length?{ok:!1,reason:"not_found",requested:e}:n.length>1?{ok:!1,reason:"ambiguous",requested:e}:{ok:!0,agentId:n[0].id,displayName:n[0].name}},"serviceAudit",0,eQ],99904);let e7=["read_only","workspace_write"];function te(e){let t;if(!e||"object"!=typeof e)return null;let n=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null;return{input_tokens:n(e.input_tokens),output_tokens:n(e.output_tokens),..."cached_input_tokens"in e?{cached_input_tokens:n(e.cached_input_tokens)}:{},cost_usd:"number"==typeof(t=e.cost_usd)&&Number.isFinite(t)&&t>=0?t:null}}function tt(e,t){return{ok:!1,error:{code:e,message:t.slice(0,500)}}}function tn(e){return{ok:!0,value:e}}let tr=new Map,ti=new Map,ts=new Map;function ta(e,t){ts.set(e,t)}e.s(["normalizeCapabilities",0,function(e){let t=Number(e?.max_page_size);return{list:!0===e?.list,search:!0===e?.search,read:!0===e?.read,resume:!0===e?.resume,start:!0===e?.start,cancel:!0===e?.cancel,usage:!0===e?.usage,authorities:e7.filter(t=>Array.isArray(e?.authorities)&&e.authorities.includes(t)),max_page_size:Number.isInteger(t)&&t>0?Math.min(t,100):25}},"normalizeUsage",0,te,"providerError",0,tt,"providerOk",0,tn,"registerBuiltinSessionProvider",0,ta,"registerSessionProvider",0,function(e,t){let n="connectionId"in e?tr:ti,r="connectionId"in e?e.connectionId:e.provider;t?n.set(r,t):n.delete(r)},"sessionProviderFor",0,function(e){if(!e)return null;let t=tr.get(e.id)??ti.get(e.provider)??ts.get(e.provider);return t?t(e):null}],74455);var to=e.i(33405);let td="Botmancers-Session-Context",tu="BOTMANCERS_SESSION_CONTEXT",tl="BOTMANCERS_SESSION_CONTEXT_TOKEN",t_="botmancers",tc="botmancers_share_current_session",tE=`mcp__${t_}__${tc}`;function tp(e){let t={};for(let[n,r]of Object.entries(e))void 0!==r&&n!==tu&&n!==tl&&(t[n]=r);return t}let tT={enabled_tools:[tc],tools:{[tc]:{approval_mode:"approve"}}};function tm(e){return{mcp_servers:{[t_]:{url:e.url,http_headers:{[td]:e.token},...tT}}}}var tf=e.i(46786);let tg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function th(e){return"string"==typeof e&&tg.test(e)}function tN(e){return e.replace(/[^a-zA-Z0-9]/g,"-")}function tR(e){return i.default.join(e,"projects")}function tv(e){try{return r.default.readdirSync(e)}catch{return[]}}function ty(e){let t=new Set([tN(e.replace(/\/+$/,""))]);try{t.add(tN(r.default.realpathSync(e)))}catch{}return[...t]}function tL(e,t){if(!th(t))return null;for(let n of tv(tR(e))){let s=i.default.join(tR(e),n,`${t}.jsonl`);try{if(r.default.statSync(s).isFile())return s}catch{}}return null}function tO(e){let t;try{t=r.default.readFileSync(e,"utf8")}catch{return null}let n=[],i=0;for(let e of t.split("\n"))if(e.trim())try{let t=JSON.parse(e);t&&"object"==typeof t&&!Array.isArray(t)?n.push(t):i++}catch{i++}return{records:n,malformed:i}}function tw(e){let t="string"==typeof e.timestamp?Date.parse(e.timestamp):NaN;return Number.isFinite(t)?t:null}function tk(e){let t=e.message;if(!t||"object"!=typeof t)return null;let n=t.content;return"string"==typeof n||Array.isArray(n)?n:null}function tI(e){return("user"===e.type||"assistant"===e.type)&&!0!==e.isSidechain&&!0!==e.isMeta}function tS(e){let t=tO(e.file);if(!t)return null;let{records:n,malformed:r}=t,i=null,s=null,a=null,o=null,d=null,u=null,l=null,_=0;for(let t of n){if(void 0!==t.sessionId&&t.sessionId!==e.id)continue;null===i&&"string"==typeof t.cwd&&t.cwd.startsWith("/")&&(i=t.cwd),"string"==typeof t.version&&(l=t.version);let n=tw(t);null!==n&&(d=null===d?n:Math.min(d,n),u=null===u?n:Math.max(u,n)),"custom-title"===t.type&&"string"==typeof t.customTitle&&(s=t.customTitle),"ai-title"===t.type&&"string"==typeof t.aiTitle&&(a=t.aiTitle),"summary"===t.type&&"string"==typeof t.summary&&(o=t.summary),tI(t)&&_++}return null===i?null:{id:e.id,workspace:i,title:s??a??o??function(e){for(let t of e){if("user"!==t.type||!tI(t))continue;let e=tk(t),n="string"==typeof e?e:Array.isArray(e)?e.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join(""):"";if(n.trim()&&!n.trim().startsWith("<"))return n.trim()}return null}(n),created_at:d,updated_at:u??Math.floor(e.mtime_ms),messages:_,claude_code_version:l,malformed:r}}function tA(e){try{let t=JSON.parse(r.default.readFileSync(i.default.join(e,"settings.json"),"utf8")),n=Number(t.cleanupPeriodDays);return Number.isFinite(n)&&n>0?n:30}catch{return 30}}function tb(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function tq(e){let{events:t,malformed:n}=function(e){let t=[],n=0;for(let r of(e.endsWith("\n")?e:e.slice(0,e.lastIndexOf("\n")+1)).split("\n"))if(r.trim())try{let e=JSON.parse(r);tb(e)&&"string"==typeof e.type?t.push(e):n++}catch{n++}return{events:t,malformed:n}}(e),r={session_id:null,claude_code_version:null,result:null,rate_limit_rejected:!1,malformed:n};for(let e of t)"system"===e.type&&"init"===e.subtype&&null===r.session_id?("string"==typeof e.session_id&&(r.session_id=e.session_id),"string"==typeof e.claude_code_version&&(r.claude_code_version=e.claude_code_version)):"result"===e.type&&null===r.result?r.result=e:"rate_limit_event"===e.type&&tb(e.rate_limit_info)&&"rejected"===e.rate_limit_info.status&&(r.rate_limit_rejected=!0);return r}let tC=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null,tx=/no conversation found/i,tD=/not logged in|please run \/login|\/login|invalid api key|authentication|unauthori[sz]ed|oauth token|credentials? (?:expired|missing|invalid)/i,tU=/usage limit|rate limit|limit reached|quota|credit balance/i;function tF(e){return!0!==e.is_error&&"success"===e.subtype}function tW(e,t){let n=function(e){let t=[];if(Array.isArray(e.errors))for(let n of e.errors)"string"==typeof n&&t.push(n);return!0===e.is_error&&"string"==typeof e.result&&t.push(e.result),t.join("\n").slice(0,2e3)}(e),r="number"==typeof e.api_error_status?e.api_error_status:null,i=Array.isArray(e.permission_denials)?e.permission_denials.length:0;return{code:tx.test(n)?"session_missing":401===r||403===r||tD.test(n)?"auth_required":429===r||t.rate_limit_rejected||tU.test(n)?"usage_limit":i>0?"permission_denied":"runtime_error",message:n||`Claude Code reported ${String(e.subtype??"an error")}.`}}let tM="2.1.0",tH={read_only:{permission_mode:"dontAsk",tools:["Read","Glob","Grep"]},workspace_write:{permission_mode:"acceptEdits",tools:["Read","Glob","Grep","Edit","Write","NotebookEdit"]}},tX={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:25},tG=new Map;function tB(e){try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function t$(e,t=null){let n={};for(let[t,r]of Object.entries(tp(e)))void 0!==r&&(n[t]=r);return null!==t&&(n[tu]=t),n}let tK={session_missing:"not_found",auth_required:"auth_required",permission_denied:"permission_denied",usage_limit:"usage_limit",incompatible_version:"incompatible_version",session_mismatch:"not_resumable",process_exited:"unavailable",cancelled:"cancelled",runtime_error:"unavailable"};e.s(["createClaudeSessionProvider",0,function(e={}){let t=e.env??process.env,n=e.bin??((t.BOTMANCERS_CLAUDE_BIN||"").trim()||"claude"),a=e.configDir??function(e=process.env){let t=(e.CLAUDE_CONFIG_DIR||"").trim();return t?i.default.resolve(t):i.default.join(tf.default.homedir(),".claude")}(t),o=e.stateDir??function(e=process.env){let t=(e.BOTMANCERS_CLAUDE_STATE_DIR||"").trim();return t?i.default.resolve(t):i.default.join(i.default.dirname(i.default.resolve(eU(e))),"claude-provider")}(t),d=e.spawn??to.spawn,u=e.isPidAlive??tB,l=e.startupTimeoutMs??6e4,_=e.exitGraceMs??1e4,c=e.pollMs??100,E=e.now??Date.now,p=i.default.join(o,"turns"),T=i.default.join(o,"keys"),m=(e,t)=>i.default.join(p,`${e}.${t}`),f=e=>{if(!/^ct-[0-9a-f-]{36}$/.test(e))return null;try{return JSON.parse(r.default.readFileSync(m(e,"json"),"utf8"))}catch{return null}},g=e=>{let t=m(e.id,`json.${process.pid}.tmp`);r.default.writeFileSync(t,JSON.stringify(e)),r.default.renameSync(t,m(e.id,"json"))},h=e=>{try{return r.default.readFileSync(e,"utf8")}catch{return""}};function N(e,t,n,r){return{provider_session_id:e.id,title:e.title,workspace:e.workspace,created_at:e.created_at,updated_at:e.updated_at,lifecycle:null!==e.updated_at&&n-e.updated_at>r?"archived":"open",resumable:e.messages>0,busy:t.has(e.id)}}function R(){return new Set([...function(e,t){let n=new Set,s=i.default.join(e,"sessions");for(let e of tv(s))if(/^\d+\.json$/.test(e))try{let a=JSON.parse(r.default.readFileSync(i.default.join(s,e),"utf8"));th(a.sessionId)&&"number"==typeof a.pid&&t(a.pid)&&n.add(a.sessionId)}catch{}return n}(a,u),...function(){let e=new Set;for(let t of r.default.existsSync(p)?r.default.readdirSync(p):[]){if(!t.endsWith(".json"))continue;let n=f(t.slice(0,-5));n&&"running"===n.state&&!v(n)&&e.add(n.session_id)}return e}()])}function v(e){var t;let n,r,i=tq(h(m(e.id,"out.jsonl"))),s=e.finished_at??Date.now(),a={provider_session_id:e.session_id,usage:{input_tokens:tC((n=(t=i.result)&&tb(t.usage)?t.usage:{}).input_tokens)??tC(n.inputTokens),output_tokens:tC(n.output_tokens)??tC(n.outputTokens),total_cost_usd:t&&"number"==typeof(r=t.total_cost_usd)&&Number.isFinite(r)&&r>=0?r:null},finished_at:s};if(null!==i.session_id&&i.session_id!==e.session_id)return{...a,status:"failed",output:null,failure:{code:"session_mismatch",message:"Claude Code ran a different session than the one requested."}};if(i.result)return tF(i.result)?{...a,status:"completed",output:"string"==typeof i.result.result?i.result.result:null,failure:null}:{...a,status:"failed",output:null,failure:tW(i.result,i)};if("cancelled"===e.state)return{...a,status:"cancelled",output:null,failure:{code:"cancelled",message:"Cancelled."}};if(!("exited"===e.state||"spawn_failed"===e.state||null===e.pid||!u(e.pid)))return null;let o=h(m(e.id,"err.log")),d=/unknown option|unrecognized option|invalid option/i.test(o);return{...a,status:"failed",output:null,failure:d?{code:"incompatible_version",message:"The installed Claude Code rejected the non-interactive flag set."}:{code:"process_exited",message:`Claude Code exited without a result${null===e.exit_code?"":` (exit ${e.exit_code})`}.`}}}let y=e=>i.default.join(T,e.replace(/[^a-zA-Z0-9_-]/g,"_"));async function L(e,i,a,o){let u,_=`ct-${(0,s.randomUUID)()}`;r.default.mkdirSync(p,{recursive:!0});let E=i.session_context?.mint({kind:"claude_turn",ref:_})??null,T=E?m(_,"mcp.json"):null;E&&T&&function(e,t){r.default.rmSync(e,{force:!0});let n=r.default.openSync(e,"wx",384);try{r.default.writeFileSync(n,JSON.stringify({mcpServers:{[t_]:{type:"http",url:t,headers:{[td]:`\${${tu}}`}}}}))}finally{r.default.closeSync(n)}r.default.chmodSync(e,384)}(T,E.url);let N={id:_,session_id:a,kind:e,authority:i.authority,workspace:o,pid:null,state:"running",exit_code:null,created_at:Date.now(),finished_at:null},R=r.default.openSync(m(_,"out.jsonl"),"a"),y=r.default.openSync(m(_,"err.log"),"a"),L=null;try{u=d(n,function(e,t,n=null){let r=tH[e],i=n?[...r.tools,tE]:r.tools;return["-p","--output-format","stream-json","--verbose","--input-format","text","--permission-mode",r.permission_mode,"--permission-prompts","none","--tools",r.tools.join(","),"--allowedTools",i.join(","),"--strict-mcp-config",...n?["--mcp-config",n]:[],..."resume"in t?["--resume",t.resume]:["--session-id",t.sessionId]]}(i.authority,"send"===e?{resume:a}:{sessionId:a},T),{cwd:o,env:t$(t,E?.token??null),stdio:["pipe",R,y],detached:!0})}finally{r.default.closeSync(R),r.default.closeSync(y)}u.on("error",e=>{L=e}),N.pid=u.pid??null,g(N),u.on("exit",e=>{let t=f(_);t&&"running"===t.state&&g({...t,state:"exited",exit_code:e,finished_at:Date.now()})}),u.stdin?.on("error",()=>{}),u.stdin?.end(i.prompt),u.unref();let w=Date.now()+l;for(;;){let e=f(_),t=tq(h(m(_,"out.jsonl")));if(L)return g({...e,state:"spawn_failed",finished_at:Date.now()}),{turn:null,error:tt("unavailable",`Claude Code could not start: ${L.message}`)};if(null!==t.session_id&&t.session_id!==a)return O(e),g({...e,state:"cancelled",finished_at:Date.now()}),{turn:null,error:tt("not_resumable","Claude Code started a different session; it was stopped.")};if(null===t.session_id&&t.result&&!tF(t.result)){let e=tW(t.result,t);return{turn:null,error:tt(tK[e.code],e.message)}}if(null!==t.session_id||t.result)return{turn:e,error:null};let n=v(e);if(n){let e=n.failure?.code;return{turn:null,error:tt(e?tK[e]??"unavailable":"unavailable",n.failure?.message??"Claude Code exited.")}}if(Date.now()>=w)return{turn:e,error:null};await new Promise(e=>setTimeout(e,Math.min(c,25)))}}function O(e){if(null!==e.pid)for(let t of[-e.pid,e.pid])try{process.kill(t,"SIGTERM");return}catch{}}async function w(e,s,a,o){if(!tH[s.authority])return tt("unsupported_authority",`No Claude Code mode for ${String(s.authority)}.`);let d=function(e){r.default.mkdirSync(T,{recursive:!0});let t=i.default.join(T,e.replace(/[^a-zA-Z0-9_-]/g,"_"));try{return r.default.writeFileSync(t,"",{flag:"wx"}),{existing:null,claimed:!0}}catch{let e=h(t).trim();return{existing:e?f(e):null,claimed:!1}}}(s.idempotency_key);if(!d.claimed)return d.existing?tn({provider_turn_id:d.existing.id,provider_session_id:d.existing.session_id}):tt("busy","A turn with this idempotency key is starting.");let u=()=>r.default.rmSync(y(s.idempotency_key),{force:!0}),l=function(){let e,r=tG.get(n);if(r)return r;try{let r=(0,to.execFileSync)(n,["--version"],{env:t$(t),encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","pipe"]}),i=/(\d+\.\d+\.\d+)/.exec(r)?.[1]??null;e=i?0>function(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let e=0;e<3;e++)if((n[e]??0)!==(r[e]??0))return(n[e]??0)-(r[e]??0);return 0}(i,tM)?{ok:!1,code:"incompatible_version",message:`Claude Code ${i} is older than ${tM}.`}:{ok:!0,version:i}:{ok:!1,code:"incompatible_version",message:"Claude Code did not report a version."}}catch(e){return{ok:!1,code:"unavailable",message:`Claude Code is not runnable: ${e.message}`}}return tG.set(n,e),e}();if(!l.ok)return u(),tt(l.code,l.message);let _=await L(e,s,a,o);return _.turn?(r.default.writeFileSync(y(s.idempotency_key),_.turn.id),tn({provider_turn_id:_.turn.id,provider_session_id:a})):(u(),_.error)}return{kind:"claude-code",capabilities:()=>({...tX,authorities:[...tX.authorities]}),async listSessions(e){let t=e.scope;if("workspaces"===t.kind&&0===t.workspaces.length)return tn({items:[],next_cursor:null});let n="sessions"===t.kind?t.provider_session_ids.map(e=>tL(a,e)).filter(e=>!!e).map(e=>({id:i.default.basename(e,".jsonl"),file:e,mtime_ms:r.default.statSync(e).mtimeMs})):function(e,t){let n=t?t.flatMap(ty):null,s=[];for(let t of tv(tR(e))){if(n&&!n.some(e=>t===e||t.startsWith(`${e}-`)))continue;let a=i.default.join(tR(e),t);for(let e of tv(a)){if(!e.endsWith(".jsonl"))continue;let t=e.slice(0,-6);if(th(t))try{let n=r.default.statSync(i.default.join(a,e));n.isFile()&&s.push({id:t,file:i.default.join(a,e),mtime_ms:n.mtimeMs})}catch{}}}return s.sort((e,t)=>t.mtime_ms-e.mtime_ms||e.id.localeCompare(t.id))}(a,"workspaces"===t.kind?t.workspaces:null),s=Math.max(0,Number(e.cursor??0)||0),o=(e.query??"").trim().toLowerCase(),d=R(),u=E(),l=864e5*tA(a),_=[],c=20*e.limit,p=s;for(;p<n.length&&_.length<e.limit&&p-s<c;p++){if(e.signal?.aborted)return tt("cancelled","list aborted");let r=tS(n[p]);r&&function(e,t){return"all_provider_sessions"===e.kind||("sessions"===e.kind?e.provider_session_ids.includes(t.id):null!==t.workspace&&e.workspaces.some(e=>{var n;let r;return n=t.workspace,n===(r=e.replace(/\/+$/,"")||"/")||n.startsWith("/"===r?"/":`${r}/`)}))}(t,r)&&(!o||`${r.title??""}
1896
- ${r.workspace??""}`.toLowerCase().includes(o))&&_.push(N(r,d,u,l))}return tn({items:_,next_cursor:p<n.length?String(p):null})},async getSession(e){let t=tL(a,e.provider_session_id);if(!t)return tn(null);let n=tS({id:e.provider_session_id,file:t,mtime_ms:r.default.statSync(t).mtimeMs});return tn(n?N(n,R(),E(),864e5*tA(a)):null)},async readTranscript(e){let t=tL(a,e.provider_session_id),n=t?function(e,t){let n=tO(e);if(!n)return null;let r=[],i=(e,t,n)=>{t.trim()&&r.push({seq:r.length+1,role:e,text:t.length>4e3?`${t.slice(0,3999)}…`:t,at:n})};for(let e of n.records){if(!tI(e)||void 0!==e.sessionId&&e.sessionId!==t)continue;let n=tw(e),r=tk(e),s="user"===e.type?"user":"assistant";if("string"==typeof r){i(s,r,n);continue}for(let e of r??[])if(e&&"object"==typeof e){if("text"===e.type)i(s,String(e.text??""),n);else if("tool_use"===e.type)i("tool",`tool call: ${String(e.name??"unknown")}`,n);else if("tool_result"===e.type){let t="string"==typeof e.content?e.content:Array.isArray(e.content)?e.content.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join("\n"):"";i("tool",`tool result: ${t||"(no text)"}`,n)}}}return r}(t,e.provider_session_id):null;if(!n)return tt("not_found","Claude Code has no such session.");let r=Math.max(0,Number(e.cursor??0)||0);return tn({items:n.slice(r,r+e.limit),next_cursor:r+e.limit<n.length?String(r+e.limit):null})},async startSession(e){let t=null;try{t=r.default.statSync(e.workspace)}catch{t=null}return t?.isDirectory()?w("start",e,(0,s.randomUUID)(),e.workspace):tt("invalid_input","The workspace is not a directory here.")},async sendTurn(e){if(!th(e.provider_session_id))return tt("not_found","Not a Claude Code session id.");let t=tL(a,e.provider_session_id);if(!t)return tt("not_found","Claude Code has no such session.");let n=tS({id:e.provider_session_id,file:t,mtime_ms:r.default.statSync(t).mtimeMs});if(!n||0===n.messages||!n.workspace)return tt("not_resumable","The session has no conversation to resume.");if(R().has(n.id)){let t,n=(t=h(y(e.idempotency_key)).trim())?f(t):null;return n?tn({provider_turn_id:n.id,provider_session_id:n.session_id}):tt("busy","The session is open in a running Claude Code process.")}return w("send",e,n.id,n.workspace)},async observeTurn(e){let t=null;for(;;){let n=f(e.provider_turn_id);if(!n)return tt("not_found","No such turn.");let i=v(n);if(i&&"running"===n.state&&null!==n.pid&&u(n.pid)&&(t??=Date.now(),Date.now()-t<_&&!e.signal?.aborted&&!("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at))){await new Promise(e=>setTimeout(e,c));continue}if(i)return"running"===n.state&&g({...n,state:"exited",finished_at:i.finished_at}),r.default.rmSync(m(n.id,"mcp.json"),{force:!0}),tn(i);if(e.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,c))}},async cancelTurn(e){let t=f(e.provider_turn_id);return t?v(t)?tn("already_terminal"):(O(t),g({...t,state:"cancelled",finished_at:Date.now()}),r.default.rmSync(m(t.id,"mcp.json"),{force:!0}),tn("cancelled")):tt("not_found","No such turn.")}}}],71711);let tP={name:"botmancers",version:"1"},tj={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:50},tY={list:!1,search:!1,read:!1,resume:!1,start:!1,cancel:!1,usage:!1,authorities:[],max_page_size:50};function tz(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function tJ(e){return"string"==typeof e&&e.length>0?e:null}function tV(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0?e:null}function tQ(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function tZ(e,t="durable"){let n=tz(e),r=tJ(n?.sessionId);if(!n||!r||"subagent"===n.kind)return null;let i=tJ(n.workspaceRoot),s=tJ(n.status);return{provider_session_id:r,title:tJ(n.title)??tJ(n.firstUserPrompt)??tJ(n.name),workspace:i&&i.startsWith("/")?i:null,created_at:tQ(n.createdAt),updated_at:tQ(n.lastActivityAt)??tQ(n.updatedAt),lifecycle:"open",resumable:"durable"===t&&"string"==typeof n.path&&n.path.length>0,busy:"running"===s||null!==tJ(n.activeTurnId)}}function t0(e,t){if(!Array.isArray(e))return null;let n=e.map(tz).filter(e=>!!e&&"agentMessage"===e.kind&&e.turnId===t&&!0!==e.retracted).map(e=>tJ(e.text)).filter(e=>null!==e);return n.length>0?n.join("\n"):null}function t1(e){return 0===e.length||e.some(e=>null===e)?null:e.reduce((e,t)=>e+t,0)}function t4(e){let t="string"==typeof e?/^(\d+)\.(\d+)\.(\d+)/.exec(e.trim()):null;return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}let t2=/login is no longer valid|authentication failed|missing \w+ credentials|api key .*rejected|unauthenticated|unauthori[sz]ed|not (signed|logged) in|\b401\b|\b403\b|forbidden|authRequired/i,t3=/rate[\s_-]*limit|usage[\s_-]*limit|quota|\b429\b|rate_limited/i;function t6(e=Date.now()){let t=Buffer.alloc(16),n=Math.floor(e);for(let e=5;e>=0;e--)t[e]=n%256,n=Math.floor(n/256);(0,s.randomBytes)(10).copy(t,6),t[6]=112|15&t[6],t[8]=128|63&t[8];let r=t.toString("hex");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function t9(e){let t=e.lastIndexOf(":");return t<=0||t===e.length-1?null:{sessionId:e.slice(0,t),turnId:e.slice(t+1)}}class t5{options;authority;child;buffer;seq;pending;listeners;ready;loaded;turns;info;constructor(e,t){this.options=e,this.authority=t,this.child=null,this.buffer="",this.seq=0,this.pending=new Map,this.listeners=new Set,this.ready=null,this.loaded=new Set,this.turns=new Map,this.info=null}alive(){return null!==this.child}start(){return this.ready&&this.child||(this.ready=this.spawnAndInitialize()),this.ready}async spawnAndInitialize(){let e,t="read_only"===this.authority?["--disable-write","--disable-shell"]:[];try{e=(0,to.spawn)(this.options.command,[...this.options.commandArgs,"serve",...t,...this.options.serveArgs],{cwd:tf.default.homedir(),stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env}})}catch{return{code:"unavailable",message:"spawn_failed"}}this.child=e;let n=null,r="";e.on("error",t=>{n="ENOENT"===t.code?"binary_missing":"spawn_failed",this.drop(e)}),e.stdin.on("error",()=>this.drop(e)),e.stderr.on("data",e=>{r=`${r}${e.toString()}`.slice(-2e3)}),e.stdout.on("data",t=>this.onData(e,t)),e.on("close",()=>this.drop(e));let i=await this.request("initialize",{clientInfo:{...tP}});if(!i.ok)return(this.close(),n)?{code:"unavailable",message:n}:t2.test(r)?{code:"unavailable",message:"auth_required (host exited)"}:i.error;let s=tz(i.result.serverInfo),a=tz(i.result.schema);this.info={muse_version:tJ(s?.version),schema_version:"number"==typeof a?.version?a.version:null,schema_fingerprint:tJ(a?.fingerprint),durability:tJ(i.result.sessionDurability)??"durable"};try{e.stdin.write(`${JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})}
1895
+ `),e.s(["bots",0,e2,"default",0,eW,"engine",0,eV,"resolveWakeTarget",0,function(e){let t=eC(e);if(!t)return{ok:!1,reason:"not_found",requested:String(e??"")};let n=eW.prepare("SELECT id, name FROM bots WHERE name_key = ? LIMIT 2").all(t);return 0===n.length?{ok:!1,reason:"not_found",requested:e}:n.length>1?{ok:!1,reason:"ambiguous",requested:e}:{ok:!0,agentId:n[0].id,displayName:n[0].name}},"serviceAudit",0,eQ],99904);let e7=["read_only","workspace_write"];function te(e){let t;if(!e||"object"!=typeof e)return null;let n=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null;return{input_tokens:n(e.input_tokens),output_tokens:n(e.output_tokens),..."cached_input_tokens"in e?{cached_input_tokens:n(e.cached_input_tokens)}:{},cost_usd:"number"==typeof(t=e.cost_usd)&&Number.isFinite(t)&&t>=0?t:null}}function tt(e,t){return{ok:!1,error:{code:e,message:t.slice(0,500)}}}function tn(e){return{ok:!0,value:e}}let tr=new Map,ti=new Map,ts=new Map;function ta(e,t){ts.set(e,t)}e.s(["normalizeCapabilities",0,function(e){let t=Number(e?.max_page_size);return{list:!0===e?.list,search:!0===e?.search,read:!0===e?.read,resume:!0===e?.resume,start:!0===e?.start,cancel:!0===e?.cancel,usage:!0===e?.usage,authorities:e7.filter(t=>Array.isArray(e?.authorities)&&e.authorities.includes(t)),max_page_size:Number.isInteger(t)&&t>0?Math.min(t,100):25}},"normalizeUsage",0,te,"providerError",0,tt,"providerOk",0,tn,"registerBuiltinSessionProvider",0,ta,"registerSessionProvider",0,function(e,t){let n="connectionId"in e?tr:ti,r="connectionId"in e?e.connectionId:e.provider;t?n.set(r,t):n.delete(r)},"sessionProviderFor",0,function(e){if(!e)return null;let t=tr.get(e.id)??ti.get(e.provider)??ts.get(e.provider);return t?t(e):null}],74455);var to=e.i(33405);let td="Botmancers-Session-Context",tu="BOTMANCERS_SESSION_CONTEXT",tl="BOTMANCERS_SESSION_CONTEXT_TOKEN",t_="botmancers",tc="botmancers_share_current_session",tE=`mcp__${t_}__${tc}`;function tp(e){let t={};for(let[n,r]of Object.entries(e))void 0!==r&&n!==tu&&n!==tl&&(t[n]=r);return t}let tT={enabled_tools:[tc],tools:{[tc]:{approval_mode:"approve"}}};function tm(e){return{mcp_servers:{[t_]:{url:e.url,http_headers:{[td]:e.token},...tT}}}}var tf=e.i(46786);let tg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function th(e){return"string"==typeof e&&tg.test(e)}function tN(e){return e.replace(/[^a-zA-Z0-9]/g,"-")}function tR(e){return i.default.join(e,"projects")}function tv(e){try{return r.default.readdirSync(e)}catch{return[]}}function ty(e){let t=new Set([tN(e.replace(/\/+$/,""))]);try{t.add(tN(r.default.realpathSync(e)))}catch{}return[...t]}function tL(e,t){if(!th(t))return null;for(let n of tv(tR(e))){let s=i.default.join(tR(e),n,`${t}.jsonl`);try{if(r.default.statSync(s).isFile())return s}catch{}}return null}function tw(e){let t;try{t=r.default.readFileSync(e,"utf8")}catch{return null}let n=[],i=0;for(let e of t.split("\n"))if(e.trim())try{let t=JSON.parse(e);t&&"object"==typeof t&&!Array.isArray(t)?n.push(t):i++}catch{i++}return{records:n,malformed:i}}function tO(e){let t="string"==typeof e.timestamp?Date.parse(e.timestamp):NaN;return Number.isFinite(t)?t:null}function tk(e){let t=e.message;if(!t||"object"!=typeof t)return null;let n=t.content;return"string"==typeof n||Array.isArray(n)?n:null}function tI(e){return("user"===e.type||"assistant"===e.type)&&!0!==e.isSidechain&&!0!==e.isMeta}function tS(e){let t=tw(e.file);if(!t)return null;let{records:n,malformed:r}=t,i=null,s=null,a=null,o=null,d=null,u=null,l=null,_=0;for(let t of n){if(void 0!==t.sessionId&&t.sessionId!==e.id)continue;null===i&&"string"==typeof t.cwd&&t.cwd.startsWith("/")&&(i=t.cwd),"string"==typeof t.version&&(l=t.version);let n=tO(t);null!==n&&(d=null===d?n:Math.min(d,n),u=null===u?n:Math.max(u,n)),"custom-title"===t.type&&"string"==typeof t.customTitle&&(s=t.customTitle),"ai-title"===t.type&&"string"==typeof t.aiTitle&&(a=t.aiTitle),"summary"===t.type&&"string"==typeof t.summary&&(o=t.summary),tI(t)&&_++}return null===i?null:{id:e.id,workspace:i,title:s??a??o??function(e){for(let t of e){if("user"!==t.type||!tI(t))continue;let e=tk(t),n="string"==typeof e?e:Array.isArray(e)?e.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join(""):"";if(n.trim()&&!n.trim().startsWith("<"))return n.trim()}return null}(n),created_at:d,updated_at:u??Math.floor(e.mtime_ms),messages:_,claude_code_version:l,malformed:r}}function tA(e){try{let t=JSON.parse(r.default.readFileSync(i.default.join(e,"settings.json"),"utf8")),n=Number(t.cleanupPeriodDays);return Number.isFinite(n)&&n>0?n:30}catch{return 30}}function tb(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function tq(e){let{events:t,malformed:n}=function(e){let t=[],n=0;for(let r of(e.endsWith("\n")?e:e.slice(0,e.lastIndexOf("\n")+1)).split("\n"))if(r.trim())try{let e=JSON.parse(r);tb(e)&&"string"==typeof e.type?t.push(e):n++}catch{n++}return{events:t,malformed:n}}(e),r={session_id:null,claude_code_version:null,result:null,rate_limit_rejected:!1,malformed:n};for(let e of t)"system"===e.type&&"init"===e.subtype&&null===r.session_id?("string"==typeof e.session_id&&(r.session_id=e.session_id),"string"==typeof e.claude_code_version&&(r.claude_code_version=e.claude_code_version)):"result"===e.type&&null===r.result?r.result=e:"rate_limit_event"===e.type&&tb(e.rate_limit_info)&&"rejected"===e.rate_limit_info.status&&(r.rate_limit_rejected=!0);return r}let tC=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null,tx=/no conversation found/i,tD=/not logged in|please run \/login|\/login|invalid api key|authentication|unauthori[sz]ed|oauth token|credentials? (?:expired|missing|invalid)/i,tU=/usage limit|rate limit|limit reached|quota|credit balance/i;function tF(e){return!0!==e.is_error&&"success"===e.subtype}function tW(e,t){let n=function(e){let t=[];if(Array.isArray(e.errors))for(let n of e.errors)"string"==typeof n&&t.push(n);return!0===e.is_error&&"string"==typeof e.result&&t.push(e.result),t.join("\n").slice(0,2e3)}(e),r="number"==typeof e.api_error_status?e.api_error_status:null,i=Array.isArray(e.permission_denials)?e.permission_denials.length:0;return{code:tx.test(n)?"session_missing":401===r||403===r||tD.test(n)?"auth_required":429===r||t.rate_limit_rejected||tU.test(n)?"usage_limit":i>0?"permission_denied":"runtime_error",message:n||`Claude Code reported ${String(e.subtype??"an error")}.`}}let tM="2.1.0",tH={read_only:{permission_mode:"dontAsk",tools:["Read","Glob","Grep"]},workspace_write:{permission_mode:"acceptEdits",tools:["Read","Glob","Grep","Edit","Write","NotebookEdit"]}},tX={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:25},tG=new Map;function tB(e){try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function t$(e,t=null){let n={};for(let[t,r]of Object.entries(tp(e)))void 0!==r&&(n[t]=r);return null!==t&&(n[tu]=t),n}let tK={session_missing:"not_found",auth_required:"auth_required",permission_denied:"permission_denied",usage_limit:"usage_limit",incompatible_version:"incompatible_version",session_mismatch:"not_resumable",process_exited:"unavailable",cancelled:"cancelled",runtime_error:"unavailable"};e.s(["createClaudeSessionProvider",0,function(e={}){let t=e.env??process.env,n=e.bin??((t.BOTMANCERS_CLAUDE_BIN||"").trim()||"claude"),a=e.configDir??function(e=process.env){let t=(e.CLAUDE_CONFIG_DIR||"").trim();return t?i.default.resolve(t):i.default.join(tf.default.homedir(),".claude")}(t),o=e.stateDir??function(e=process.env){let t=(e.BOTMANCERS_CLAUDE_STATE_DIR||"").trim();return t?i.default.resolve(t):i.default.join(i.default.dirname(i.default.resolve(eU(e))),"claude-provider")}(t),d=e.spawn??to.spawn,u=e.isPidAlive??tB,l=e.startupTimeoutMs??6e4,_=e.exitGraceMs??1e4,c=e.pollMs??100,E=e.now??Date.now,p=i.default.join(o,"turns"),T=i.default.join(o,"keys"),m=(e,t)=>i.default.join(p,`${e}.${t}`),f=e=>{if(!/^ct-[0-9a-f-]{36}$/.test(e))return null;try{return JSON.parse(r.default.readFileSync(m(e,"json"),"utf8"))}catch{return null}},g=e=>{let t=m(e.id,`json.${process.pid}.tmp`);r.default.writeFileSync(t,JSON.stringify(e)),r.default.renameSync(t,m(e.id,"json"))},h=e=>{try{return r.default.readFileSync(e,"utf8")}catch{return""}};function N(e,t,n,r){return{provider_session_id:e.id,title:e.title,workspace:e.workspace,created_at:e.created_at,updated_at:e.updated_at,lifecycle:null!==e.updated_at&&n-e.updated_at>r?"archived":"open",resumable:e.messages>0,busy:t.has(e.id)}}function R(){return new Set([...function(e,t){let n=new Set,s=i.default.join(e,"sessions");for(let e of tv(s))if(/^\d+\.json$/.test(e))try{let a=JSON.parse(r.default.readFileSync(i.default.join(s,e),"utf8"));th(a.sessionId)&&"number"==typeof a.pid&&t(a.pid)&&n.add(a.sessionId)}catch{}return n}(a,u),...function(){let e=new Set;for(let t of r.default.existsSync(p)?r.default.readdirSync(p):[]){if(!t.endsWith(".json"))continue;let n=f(t.slice(0,-5));n&&"running"===n.state&&!v(n)&&e.add(n.session_id)}return e}()])}function v(e){var t;let n,r,i=tq(h(m(e.id,"out.jsonl"))),s=e.finished_at??Date.now(),a={provider_session_id:e.session_id,usage:{input_tokens:tC((n=(t=i.result)&&tb(t.usage)?t.usage:{}).input_tokens)??tC(n.inputTokens),output_tokens:tC(n.output_tokens)??tC(n.outputTokens),total_cost_usd:t&&"number"==typeof(r=t.total_cost_usd)&&Number.isFinite(r)&&r>=0?r:null},finished_at:s};if(null!==i.session_id&&i.session_id!==e.session_id)return{...a,status:"failed",output:null,failure:{code:"session_mismatch",message:"Claude Code ran a different session than the one requested."}};if(i.result)return tF(i.result)?{...a,status:"completed",output:"string"==typeof i.result.result?i.result.result:null,failure:null}:{...a,status:"failed",output:null,failure:tW(i.result,i)};if("cancelled"===e.state)return{...a,status:"cancelled",output:null,failure:{code:"cancelled",message:"Cancelled."}};if(!("exited"===e.state||"spawn_failed"===e.state||null===e.pid||!u(e.pid)))return null;let o=h(m(e.id,"err.log")),d=/unknown option|unrecognized option|invalid option/i.test(o);return{...a,status:"failed",output:null,failure:d?{code:"incompatible_version",message:"The installed Claude Code rejected the non-interactive flag set."}:{code:"process_exited",message:`Claude Code exited without a result${null===e.exit_code?"":` (exit ${e.exit_code})`}.`}}}let y=e=>i.default.join(T,e.replace(/[^a-zA-Z0-9_-]/g,"_"));async function L(e,i,a,o){let u,_=`ct-${(0,s.randomUUID)()}`;r.default.mkdirSync(p,{recursive:!0});let E=i.session_context?.mint({kind:"claude_turn",ref:_})??null,T=E?m(_,"mcp.json"):null;E&&T&&function(e,t){r.default.rmSync(e,{force:!0});let n=r.default.openSync(e,"wx",384);try{r.default.writeFileSync(n,JSON.stringify({mcpServers:{[t_]:{type:"http",url:t,headers:{[td]:`\${${tu}}`}}}}))}finally{r.default.closeSync(n)}r.default.chmodSync(e,384)}(T,E.url);let N={id:_,session_id:a,kind:e,authority:i.authority,workspace:o,pid:null,state:"running",exit_code:null,created_at:Date.now(),finished_at:null},R=r.default.openSync(m(_,"out.jsonl"),"a"),y=r.default.openSync(m(_,"err.log"),"a"),L=null;try{u=d(n,function(e,t,n=null){let r=tH[e],i=n?[...r.tools,tE]:r.tools;return["-p","--output-format","stream-json","--verbose","--input-format","text","--permission-mode",r.permission_mode,"--permission-prompts","none","--tools",r.tools.join(","),"--allowedTools",i.join(","),"--strict-mcp-config",...n?["--mcp-config",n]:[],..."resume"in t?["--resume",t.resume]:["--session-id",t.sessionId]]}(i.authority,"send"===e?{resume:a}:{sessionId:a},T),{cwd:o,env:t$(t,E?.token??null),stdio:["pipe",R,y],detached:!0})}finally{r.default.closeSync(R),r.default.closeSync(y)}u.on("error",e=>{L=e}),N.pid=u.pid??null,g(N),u.on("exit",e=>{let t=f(_);t&&"running"===t.state&&g({...t,state:"exited",exit_code:e,finished_at:Date.now()})}),u.stdin?.on("error",()=>{}),u.stdin?.end(i.prompt),u.unref();let O=Date.now()+l;for(;;){let e=f(_),t=tq(h(m(_,"out.jsonl")));if(L)return g({...e,state:"spawn_failed",finished_at:Date.now()}),{turn:null,error:tt("unavailable",`Claude Code could not start: ${L.message}`)};if(null!==t.session_id&&t.session_id!==a)return w(e),g({...e,state:"cancelled",finished_at:Date.now()}),{turn:null,error:tt("not_resumable","Claude Code started a different session; it was stopped.")};if(null===t.session_id&&t.result&&!tF(t.result)){let e=tW(t.result,t);return{turn:null,error:tt(tK[e.code],e.message)}}if(null!==t.session_id||t.result)return{turn:e,error:null};let n=v(e);if(n){let e=n.failure?.code;return{turn:null,error:tt(e?tK[e]??"unavailable":"unavailable",n.failure?.message??"Claude Code exited.")}}if(Date.now()>=O)return{turn:e,error:null};await new Promise(e=>setTimeout(e,Math.min(c,25)))}}function w(e){if(null!==e.pid)for(let t of[-e.pid,e.pid])try{process.kill(t,"SIGTERM");return}catch{}}async function O(e,s,a,o){if(!tH[s.authority])return tt("unsupported_authority",`No Claude Code mode for ${String(s.authority)}.`);let d=function(e){r.default.mkdirSync(T,{recursive:!0});let t=i.default.join(T,e.replace(/[^a-zA-Z0-9_-]/g,"_"));try{return r.default.writeFileSync(t,"",{flag:"wx"}),{existing:null,claimed:!0}}catch{let e=h(t).trim();return{existing:e?f(e):null,claimed:!1}}}(s.idempotency_key);if(!d.claimed)return d.existing?tn({provider_turn_id:d.existing.id,provider_session_id:d.existing.session_id}):tt("busy","A turn with this idempotency key is starting.");let u=()=>r.default.rmSync(y(s.idempotency_key),{force:!0}),l=function(){let e,r=tG.get(n);if(r)return r;try{let r=(0,to.execFileSync)(n,["--version"],{env:t$(t),encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","pipe"]}),i=/(\d+\.\d+\.\d+)/.exec(r)?.[1]??null;e=i?0>function(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let e=0;e<3;e++)if((n[e]??0)!==(r[e]??0))return(n[e]??0)-(r[e]??0);return 0}(i,tM)?{ok:!1,code:"incompatible_version",message:`Claude Code ${i} is older than ${tM}.`}:{ok:!0,version:i}:{ok:!1,code:"incompatible_version",message:"Claude Code did not report a version."}}catch(e){return{ok:!1,code:"unavailable",message:`Claude Code is not runnable: ${e.message}`}}return tG.set(n,e),e}();if(!l.ok)return u(),tt(l.code,l.message);let _=await L(e,s,a,o);return _.turn?(r.default.writeFileSync(y(s.idempotency_key),_.turn.id),tn({provider_turn_id:_.turn.id,provider_session_id:a})):(u(),_.error)}return{kind:"claude-code",capabilities:()=>({...tX,authorities:[...tX.authorities]}),async listSessions(e){let t=e.scope;if("workspaces"===t.kind&&0===t.workspaces.length)return tn({items:[],next_cursor:null});let n="sessions"===t.kind?t.provider_session_ids.map(e=>tL(a,e)).filter(e=>!!e).map(e=>({id:i.default.basename(e,".jsonl"),file:e,mtime_ms:r.default.statSync(e).mtimeMs})):function(e,t){let n=t?t.flatMap(ty):null,s=[];for(let t of tv(tR(e))){if(n&&!n.some(e=>t===e||t.startsWith(`${e}-`)))continue;let a=i.default.join(tR(e),t);for(let e of tv(a)){if(!e.endsWith(".jsonl"))continue;let t=e.slice(0,-6);if(th(t))try{let n=r.default.statSync(i.default.join(a,e));n.isFile()&&s.push({id:t,file:i.default.join(a,e),mtime_ms:n.mtimeMs})}catch{}}}return s.sort((e,t)=>t.mtime_ms-e.mtime_ms||e.id.localeCompare(t.id))}(a,"workspaces"===t.kind?t.workspaces:null),s=Math.max(0,Number(e.cursor??0)||0),o=(e.query??"").trim().toLowerCase(),d=R(),u=E(),l=864e5*tA(a),_=[],c=20*e.limit,p=s;for(;p<n.length&&_.length<e.limit&&p-s<c;p++){if(e.signal?.aborted)return tt("cancelled","list aborted");let r=tS(n[p]);r&&function(e,t){return"all_provider_sessions"===e.kind||("sessions"===e.kind?e.provider_session_ids.includes(t.id):null!==t.workspace&&e.workspaces.some(e=>{var n;let r;return n=t.workspace,n===(r=e.replace(/\/+$/,"")||"/")||n.startsWith("/"===r?"/":`${r}/`)}))}(t,r)&&(!o||`${r.title??""}
1896
+ ${r.workspace??""}`.toLowerCase().includes(o))&&_.push(N(r,d,u,l))}return tn({items:_,next_cursor:p<n.length?String(p):null})},async getSession(e){let t=tL(a,e.provider_session_id);if(!t)return tn(null);let n=tS({id:e.provider_session_id,file:t,mtime_ms:r.default.statSync(t).mtimeMs});return tn(n?N(n,R(),E(),864e5*tA(a)):null)},async readTranscript(e){let t=tL(a,e.provider_session_id),n=t?function(e,t){let n=tw(e);if(!n)return null;let r=[],i=(e,t,n)=>{t.trim()&&r.push({seq:r.length+1,role:e,text:t.length>4e3?`${t.slice(0,3999)}…`:t,at:n})};for(let e of n.records){if(!tI(e)||void 0!==e.sessionId&&e.sessionId!==t)continue;let n=tO(e),r=tk(e),s="user"===e.type?"user":"assistant";if("string"==typeof r){i(s,r,n);continue}for(let e of r??[])if(e&&"object"==typeof e){if("text"===e.type)i(s,String(e.text??""),n);else if("tool_use"===e.type)i("tool",`tool call: ${String(e.name??"unknown")}`,n);else if("tool_result"===e.type){let t="string"==typeof e.content?e.content:Array.isArray(e.content)?e.content.map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join("\n"):"";i("tool",`tool result: ${t||"(no text)"}`,n)}}}return r}(t,e.provider_session_id):null;if(!n)return tt("not_found","Claude Code has no such session.");let r=Math.max(0,Number(e.cursor??0)||0);return tn({items:n.slice(r,r+e.limit),next_cursor:r+e.limit<n.length?String(r+e.limit):null})},async startSession(e){let t=null;try{t=r.default.statSync(e.workspace)}catch{t=null}return t?.isDirectory()?O("start",e,(0,s.randomUUID)(),e.workspace):tt("invalid_input","The workspace is not a directory here.")},async sendTurn(e){if(!th(e.provider_session_id))return tt("not_found","Not a Claude Code session id.");let t=tL(a,e.provider_session_id);if(!t)return tt("not_found","Claude Code has no such session.");let n=tS({id:e.provider_session_id,file:t,mtime_ms:r.default.statSync(t).mtimeMs});if(!n||0===n.messages||!n.workspace)return tt("not_resumable","The session has no conversation to resume.");if(R().has(n.id)){let t,n=(t=h(y(e.idempotency_key)).trim())?f(t):null;return n?tn({provider_turn_id:n.id,provider_session_id:n.session_id}):tt("busy","The session is open in a running Claude Code process.")}return O("send",e,n.id,n.workspace)},async observeTurn(e){let t=null;for(;;){let n=f(e.provider_turn_id);if(!n)return tt("not_found","No such turn.");let i=v(n);if(i&&"running"===n.state&&null!==n.pid&&u(n.pid)&&(t??=Date.now(),Date.now()-t<_&&!e.signal?.aborted&&!("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at))){await new Promise(e=>setTimeout(e,c));continue}if(i)return"running"===n.state&&g({...n,state:"exited",finished_at:i.finished_at}),r.default.rmSync(m(n.id,"mcp.json"),{force:!0}),tn(i);if(e.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,c))}},async cancelTurn(e){let t=f(e.provider_turn_id);return t?v(t)?tn("already_terminal"):(w(t),g({...t,state:"cancelled",finished_at:Date.now()}),r.default.rmSync(m(t.id,"mcp.json"),{force:!0}),tn("cancelled")):tt("not_found","No such turn.")}}}],71711);let tP={name:"botmancers",version:"1"},tj={list:!0,search:!0,read:!0,resume:!0,start:!0,cancel:!0,usage:!0,authorities:["read_only","workspace_write"],max_page_size:50},tY={list:!1,search:!1,read:!1,resume:!1,start:!1,cancel:!1,usage:!1,authorities:[],max_page_size:50};function tz(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function tJ(e){return"string"==typeof e&&e.length>0?e:null}function tV(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0?e:null}function tQ(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function tZ(e,t="durable"){let n=tz(e),r=tJ(n?.sessionId);if(!n||!r||"subagent"===n.kind)return null;let i=tJ(n.workspaceRoot),s=tJ(n.status);return{provider_session_id:r,title:tJ(n.title)??tJ(n.firstUserPrompt)??tJ(n.name),workspace:i&&i.startsWith("/")?i:null,created_at:tQ(n.createdAt),updated_at:tQ(n.lastActivityAt)??tQ(n.updatedAt),lifecycle:"open",resumable:"durable"===t&&"string"==typeof n.path&&n.path.length>0,busy:"running"===s||null!==tJ(n.activeTurnId)}}function t0(e,t){if(!Array.isArray(e))return null;let n=e.map(tz).filter(e=>!!e&&"agentMessage"===e.kind&&e.turnId===t&&!0!==e.retracted).map(e=>tJ(e.text)).filter(e=>null!==e);return n.length>0?n.join("\n"):null}function t1(e){return 0===e.length||e.some(e=>null===e)?null:e.reduce((e,t)=>e+t,0)}function t4(e){let t="string"==typeof e?/^(\d+)\.(\d+)\.(\d+)/.exec(e.trim()):null;return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}let t2=/login is no longer valid|authentication failed|missing \w+ credentials|api key .*rejected|unauthenticated|unauthori[sz]ed|not (signed|logged) in|\b401\b|\b403\b|forbidden|authRequired/i,t3=/rate[\s_-]*limit|usage[\s_-]*limit|quota|\b429\b|rate_limited/i;function t6(e=Date.now()){let t=Buffer.alloc(16),n=Math.floor(e);for(let e=5;e>=0;e--)t[e]=n%256,n=Math.floor(n/256);(0,s.randomBytes)(10).copy(t,6),t[6]=112|15&t[6],t[8]=128|63&t[8];let r=t.toString("hex");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function t9(e){let t=e.lastIndexOf(":");return t<=0||t===e.length-1?null:{sessionId:e.slice(0,t),turnId:e.slice(t+1)}}class t5{options;authority;child;buffer;seq;pending;listeners;ready;loaded;turns;info;constructor(e,t){this.options=e,this.authority=t,this.child=null,this.buffer="",this.seq=0,this.pending=new Map,this.listeners=new Set,this.ready=null,this.loaded=new Set,this.turns=new Map,this.info=null}alive(){return null!==this.child}start(){return this.ready&&this.child||(this.ready=this.spawnAndInitialize()),this.ready}async spawnAndInitialize(){let e,t="read_only"===this.authority?["--disable-write","--disable-shell"]:[];try{e=(0,to.spawn)(this.options.command,[...this.options.commandArgs,"serve",...t,...this.options.serveArgs],{cwd:tf.default.homedir(),stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env}})}catch{return{code:"unavailable",message:"spawn_failed"}}this.child=e;let n=null,r="";e.on("error",t=>{n="ENOENT"===t.code?"binary_missing":"spawn_failed",this.drop(e)}),e.stdin.on("error",()=>this.drop(e)),e.stderr.on("data",e=>{r=`${r}${e.toString()}`.slice(-2e3)}),e.stdout.on("data",t=>this.onData(e,t)),e.on("close",()=>this.drop(e));let i=await this.request("initialize",{clientInfo:{...tP}});if(!i.ok)return(this.close(),n)?{code:"unavailable",message:n}:t2.test(r)?{code:"unavailable",message:"auth_required (host exited)"}:i.error;let s=tz(i.result.serverInfo),a=tz(i.result.schema);this.info={muse_version:tJ(s?.version),schema_version:"number"==typeof a?.version?a.version:null,schema_fingerprint:tJ(a?.fingerprint),durability:tJ(i.result.sessionDurability)??"durable"};try{e.stdin.write(`${JSON.stringify({jsonrpc:"2.0",method:"initialized",params:{}})}
1897
1897
  `)}catch{return this.close(),{code:"unavailable",message:"transport_error"}}return null}onData(e,t){let n;if(e===this.child){if(this.buffer+=t.toString(),this.buffer.length>0x1000000)return void this.close();for(;(n=this.buffer.indexOf("\n"))>=0;){let e=this.buffer.slice(0,n);this.buffer=this.buffer.slice(n+1),this.onLine(e)}}}onLine(e){let t=null;try{t=tz(JSON.parse(e))}catch{return}if(!t)return;if("number"==typeof t.id&&this.pending.has(t.id)){let e,n,r,i=this.pending.get(t.id);this.pending.delete(t.id);let s=tz(t.error);i(s?{ok:!1,error:(e="number"==typeof s.code?s.code:null,n=tJ(tz(s.data)?.kind)??"unknown",r=`${n} ${"string"==typeof s.message?s.message:""}`,t2.test(r)||401===e||403===e?{code:"unavailable",message:`auth_required (${n})`}:-32601===e||"methodNotFound"===n||"experimentalRequired"===n||"capabilityRequired"===n||-32010===e?{code:"unsupported",message:`unsupported (${n})`}:-32020===e||-32011===e||"sessionNotFound"===n||"notFound"===n?{code:"not_found",message:`not_found (${n})`}:-32021===e||"sessionInUse"===n?{code:"busy",message:`busy (${n})`}:-32602===e||-32002===e||"invalidParams"===n||"inputTooLarge"===n?{code:"invalid_input",message:`invalid_input (${n})`}:{code:"unavailable",message:`provider_error (${n})`})}:{ok:!0,result:tz(t.result)??{}});return}if("string"!=typeof t.method||void 0!==t.id||"turn/completed"!==t.method&&"session/tokenUsage"!==t.method)return;let n=tz(t.params),r=tJ(n?.turnId),i=tJ(n?.sessionId);if(!n||!r||!i)return;let s=this.turns.get(r);s||(s={sessionId:i,completed:null,usageRecords:[]},this.turns.set(r,s)),"turn/completed"===t.method?(s.completed=n,this.notify()):"session/tokenUsage"===t.method&&s.usageRecords.push(n.usage)}notify(){for(let e of[...this.listeners])e()}async waitFor(e,t,n){for(;;){if(e())return"done";if(!this.alive())return"dead";if(t?.aborted)return"cancelled";let r="number"==typeof n?n-Date.now():1e3;if(r<=0)return"timed_out";await new Promise(e=>{let n=()=>{clearTimeout(i),t?.removeEventListener("abort",n),this.listeners.delete(n),e()},i=setTimeout(n,Math.min(r,1e3));this.listeners.add(n),t?.addEventListener("abort",n,{once:!0})})}}request(e,t){let n=this.child;if(!n)return Promise.resolve({ok:!1,error:{code:"unavailable",message:"host_not_running"}});let r=++this.seq;return new Promise(i=>{let s=setTimeout(()=>{this.pending.delete(r),i({ok:!1,error:{code:"unavailable",message:`rpc_timeout (${e})`}})},this.options.rpcTimeoutMs);this.pending.set(r,e=>{clearTimeout(s),i(e)});try{n.stdin.write(`${JSON.stringify({jsonrpc:"2.0",id:r,method:e,params:t})}
1898
1898
  `)}catch{this.pending.delete(r),clearTimeout(s),i({ok:!1,error:{code:"unavailable",message:"transport_error"}})}})}drop(e){if(e===this.child){for(let e of(this.child=null,this.ready=null,this.loaded.clear(),this.pending.values()))e({ok:!1,error:{code:"unavailable",message:"host_exited"}});this.pending.clear(),this.notify()}}close(){let e=this.child;if(e){this.drop(e);try{e.kill("SIGTERM")}catch{}}}runningTurns(){let e=0;for(let t of this.turns.values())!t.completed&&e++;return e}}let t8=new Map;function t7(e,t){let n=e??{muse_version:null,schema_version:null,schema_fingerprint:null,durability:null};if(t){let e=/^auth_required/.test(t.message)?"auth_required":"unsupported"===t.code?"unsupported":"unavailable";return{...n,status:e,reason:t.message,capabilities:{...tY}}}let r=t4(n.muse_version);if(1!==n.schema_version)return{...n,status:"unsupported",reason:`msp_schema_${n.schema_version??"unknown"}`,capabilities:{...tY}};if(!r||!function(e,t){for(let n=0;n<3;n++)if(e[n]!==t[n])return e[n]>t[n];return!0}(r,t4("1.4.0")))return{...n,status:"unsupported",reason:`muse_version_${n.muse_version??"unknown"}`,capabilities:{...tY}};let i="durable"===n.durability;return{...n,status:"ready",reason:null,capabilities:i?{...tj,authorities:[...tj.authorities]}:{...tj,list:!1,search:!1,read:!1,resume:!1,authorities:[...tj.authorities]}}}process.once("exit",()=>(function(){for(let e of t8.values())for(let t of Object.values(e.hosts))t?.close();t8.clear()})()),e.s(["createMuseSessionProvider",0,function(e,t={}){let n,r=((n=t8.get(e))||(n={hosts:{},probe:null,startKeys:new Map},t8.set(e,n)),n),i={command:t.command??process.env.BOTMANCERS_MUSE_BIN??"muse",commandArgs:t.commandArgs??[],serveArgs:t.serveArgs??function(){let e=process.env.BOTMANCERS_MUSE_SERVE_ARGS;if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}(),env:t.env??{},rpcTimeoutMs:t.rpcTimeoutMs??3e4},s=t.cancelSettleMs??1e4;async function a(e){let t=r.hosts[e];t||(t=new t5(i,e),r.hosts[e]=t);let n=await t.start();return(r.probe=t7(t.info,n),n)?{ok:!1,error:n}:"ready"!==r.probe.status?(t.close(),{ok:!1,error:{code:"unsupported",message:r.probe.reason??"unsupported"}}):{ok:!0,host:t}}function o(){return a(["read_only","workspace_write"].find(e=>r.hosts[e]?.alive())??"read_only")}async function d(e,t,n){return e.request(t,n)}async function u(e,t){let n=await o();return n.ok?d(n.host,"session/read",{sessionId:e,excludeItems:!t}):n}function l(){return r.probe?.durability??"durable"}async function _(e,t){for(let n of Object.values(r.hosts))if(n&&n!==e&&n.loaded.has(t)){if(n.runningTurns()>0)return{ok:!1,error:{code:"busy",message:"busy (loaded by another host)"}};n.close()}if(e.loaded.has(t)){let n=await d(e,"session/read",{sessionId:t,excludeItems:!0});return n.ok?{ok:!0,session:tz(n.result.session)??{}}:n}let n=await d(e,"session/resume",{commandId:t6(),sessionId:t,excludeItems:!0});return n.ok?(e.loaded.add(t),{ok:!0,session:tz(n.result.session)??{}}):n}async function c(e,t,n){let r=await d(e,"turn/start",{commandId:t6(),sessionId:t,input:[{type:"text",text:n}]});if(!r.ok)return r;let i=tJ(r.result.turnId);return i?(e.turns.has(i)||e.turns.set(i,{sessionId:t,completed:null,usageRecords:[]}),tn(i)):tt("unavailable","provider_error (turn/start without turnId)")}async function E(e,t,n,r,i,s,a){let o,d,l,_,c=a;if(void 0===c){let t=await u(e,!0);c=t.ok?tz(t.result.history)?.items:null}let E="completed"===n?"completed":"cancelled"===n?"cancelled":"failed";return{status:E,provider_session_id:e,output:t0(c,t),failure:"completed"===E?null:"cancelled"===E?{code:"cancelled",message:tJ(i)??"cancelled"}:(o=tz(r),d=tJ(o?.kind)??"",l=(tJ(o?.message)??tJ(i)??d)||"turn failed",_=`${d} ${l}`,{code:t2.test(_)?"auth":t3.test(_)||o?.quota?"usage_cap":d||"failed",message:l.slice(0,500)}),usage:s?{input_tokens:s.input_tokens,output_tokens:s.output_tokens}:null,finished_at:Date.now()}}function p(e){for(let t of Object.values(r.hosts)){let n=t?.alive()?t.turns.get(e):void 0;if(t&&n)return{host:t,track:n}}return null}async function T(e,t,n,r){for(;;){let i=await u(e,!0);if(!i.ok)return i;let s=tz(i.result.session),a=tz(i.result.lastTurn),o=tz(i.result.history)?.items;if(a&&a.turnId===t)return tn(await E(e,t,a.terminal,a.error,a.reason,null,o));if(s?.activeTurnId!==t)return tn({status:"failed",provider_session_id:e,output:t0(o,t),failure:{code:"host_lost",message:"The Muse host running this turn exited before it finished."},usage:null,finished_at:Date.now()});if(n?.aborted)return tt("cancelled","observe aborted");if("number"==typeof r&&Date.now()>=r)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,500))}}return{kind:"muse-msp",capabilities(){let e=r.probe?.capabilities??tj;return{...e,authorities:[...e.authorities]}},async probe(){let e=await o();return r.probe??t7(null,e.ok?null:e.error)},async listSessions(e){let t=await o();if(!t.ok)return t;let n={},r="sessions"===e.scope.kind?e.scope.provider_session_ids:null;if(r){if(0===r.length)return tn({items:[],next_cursor:null});n.sessionId={anyOf:r.slice(0,200)}}let i=(e.query??"").trim().split(/\s+/).filter(Boolean).slice(0,16);i.length>0&&(n.text={allOf:i,fields:["name","title"]});let s=await d(t.host,"session/list",{limit:Math.min(Math.max(1,e.limit),50),...e.cursor?{cursor:e.cursor}:{},...Object.keys(n).length>0?{filter:n}:{}});if(!s.ok)return s;let a=tz(s.result.appliedFilter);return n.text&&!tz(a?.text)?tt("unsupported","unsupported (session/list text filter)"):tn({items:(Array.isArray(s.result.sessions)?s.result.sessions:[]).map(e=>tZ(e,l())).filter(e=>null!==e).filter(e=>!r||r.includes(e.provider_session_id)),next_cursor:tJ(s.result.nextCursor)})},async getSession(e){let t=await u(e.provider_session_id,!1);if(!t.ok)return"not_found"===t.error.code?tn(null):t;let n=tZ(t.result.session,l());return tn(n&&n.provider_session_id===e.provider_session_id?n:null)},async readTranscript(e){let t=await u(e.provider_session_id,!0);if(!t.ok)return t;let n=tz(t.result.history);if(n?.mode!=="inline")return tt("unavailable",`history_${tJ(n?.mode)??"missing"}`);let r=function(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=tz(n);if(!e||!0===e.retracted)continue;let r="userMessage"===e.kind?"user":"agentMessage"===e.kind?"assistant":null,i=tJ(e.text)??("user"===r?tJ(e.displayText):null);r&&i&&t.push({seq:t.length+1,role:r,text:i,at:tQ(e.recordedAt)})}return t}(n.items),i=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0;return tn({items:r.slice(i,i+e.limit),next_cursor:i+e.limit<r.length?String(i+e.limit):null})},async startSession(e){var t;let n=r.startKeys.get(e.idempotency_key);if(n)return tn(n);let i=await a(e.authority);if(!i.ok)return i;let s=await d(i.host,"session/start",{commandId:t6(),workspaceRoot:e.workspace,approvalMode:"denyUnmatched"});if(!s.ok)return s;let o=tJ(tz(s.result.session)?.sessionId);if(!o)return tt("unavailable","provider_error (session/start without sessionId)");i.host.loaded.add(o);let u=await c(i.host,o,e.prompt);if(!u.ok)return u;let l={provider_session_id:o,provider_turn_id:(t=u.value,`${o}:${t}`)};return r.startKeys.set(e.idempotency_key,l),tn(l)},async sendTurn(e){var t,n;let i=r.startKeys.get(e.idempotency_key);if(i)return tn(i);let s=await a(e.authority);if(!s.ok)return s;let o=await _(s.host,e.provider_session_id);if(!o.ok)return o;if("running"===o.session.status||tJ(o.session.activeTurnId))return tt("busy","busy (turn in flight)");let d=await c(s.host,e.provider_session_id,e.prompt);if(!d.ok)return d;let u={provider_session_id:e.provider_session_id,provider_turn_id:(t=e.provider_session_id,n=d.value,`${t}:${n}`)};return r.startKeys.set(e.idempotency_key,u),tn(u)},async observeTurn(e){let t=t9(e.provider_turn_id);if(!t)return tt("not_found","not_found (turn handle)");let n=p(t.turnId);if(n){let r=await n.host.waitFor(()=>null!==n.track.completed,e.signal,e.deadline_at);if("cancelled"===r)return tt("cancelled","observe aborted");if("timed_out"===r)return tt("timed_out","observe deadline");let i=n.track.completed;if(i)return tn(await E(t.sessionId,t.turnId,i.terminal,i.error,i.reason,function(e,t=[]){let n=tz(e);if(n)return{input_tokens:tV(n.inputTokens),output_tokens:tV(n.outputTokens),cost_usd:null};let r=t.map(tz).filter(e=>null!==e);return 0===r.length?null:{input_tokens:t1(r.map(e=>tV(e.inputTokens))),output_tokens:t1(r.map(e=>tV(e.outputTokens))),cost_usd:null}}(i.usage,n.track.usageRecords)))}return T(t.sessionId,t.turnId,e.signal,e.deadline_at)},async cancelTurn(e){let t=t9(e.provider_turn_id);if(!t)return tt("not_found","not_found (turn handle)");let n=p(t.turnId);if(!n){let e=await u(t.sessionId,!1);return e.ok?tz(e.result.session)?.activeTurnId===t.turnId?tt("unavailable","turn runs in another Muse host"):tn("already_terminal"):e}if(n.track.completed)return tn("already_terminal");let r=await d(n.host,"turn/cancel",{commandId:t6(),sessionId:t.sessionId,turnId:t.turnId});if(!r.ok)return r;await n.host.waitFor(()=>null!==n.track.completed,null,Date.now()+s);let i=n.track.completed?.terminal;return tn(void 0===i||"cancelled"===i?"cancelled":"already_terminal")}}}],23325);class ne{defaultTimeoutMs;transport;pending;listeners;closeListeners;nextId;serverRequestHandler;closed;closeReason;constructor(e,t=3e4){this.defaultTimeoutMs=t,this.pending=new Map,this.listeners=new Set,this.closeListeners=new Set,this.nextId=1,this.serverRequestHandler=null,this.closed=!1,this.closeReason=null,this.transport=e,e.onLine(e=>this.receive(e)),e.onClose(e=>{for(let[t,n]of(this.closed=!0,this.closeReason=e,this.pending))this.pending.delete(t),n.cleanup(),n.resolve({ok:!1,kind:"closed",error:{code:-1,message:e}});for(let t of this.closeListeners)t(e)})}request(e,t,n={}){if(this.closed)return Promise.resolve({ok:!1,kind:"closed",error:{code:-1,message:this.closeReason??"closed"}});let r=this.nextId++;return new Promise(i=>{let s=n.signal??null,a=()=>l({ok:!1,kind:"aborted",error:{code:-1,message:"aborted"}}),o=n.timeoutMs??this.defaultTimeoutMs,d=o>0?setTimeout(()=>l({ok:!1,kind:"timeout",error:{code:-1,message:`${e} timed out`}}),o):null,u=()=>{d&&clearTimeout(d),s?.removeEventListener("abort",a)},l=e=>{this.pending.has(r)&&(this.pending.delete(r),u(),i(e))};if(this.pending.set(r,{resolve:e=>i(e),timer:d,cleanup:u}),s?.aborted)return a();s?.addEventListener("abort",a,{once:!0}),this.transport.send(JSON.stringify({id:r,method:e,params:t}))})}notify(e,t){this.transport.send(JSON.stringify(void 0===t?{method:e}:{method:e,params:t}))}onNotification(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onClose(e){return this.closeListeners.add(e),()=>this.closeListeners.delete(e)}handleServerRequests(e){this.serverRequestHandler=e}close(){this.transport.close()}receive(e){let t;try{t=JSON.parse(e)}catch{return}if(!t||"object"!=typeof t)return;let n="number"==typeof t.id||"string"==typeof t.id;if(n&&"string"==typeof t.method){let e=this.serverRequestHandler?this.serverRequestHandler(t.method,t.params??{}):{error:{code:-32601,message:"not handled"}};this.transport.send(JSON.stringify({id:t.id,...e}));return}if(n){let e=this.pending.get(Number(t.id));if(!e)return;if(this.pending.delete(Number(t.id)),e.cleanup(),t.error&&"object"==typeof t.error){let n=t.error;e.resolve({ok:!1,kind:"rpc",error:{code:Number(n.code??-32603),message:String(n.message??"")}})}else e.resolve({ok:!0,result:t.result});return}if("string"==typeof t.method){let e={method:t.method,params:t.params??{}};for(let t of this.listeners)t(e)}}}function nt(e){let t=[];for(let n of e.split("\n")){let e=n.trim();if(e)try{let n=JSON.parse(e);n&&"object"==typeof n&&!Array.isArray(n)&&t.push(n)}catch{}}return t}let nn=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0?Math.trunc(e):null;function nr(e,t,n){return null===e&&null===n?null:{input_tokens:e,output_tokens:n,cached_input_tokens:t,cost_usd:null}}function ni(e){let t=null,n=null,r=null,i=null;for(let s of e)if("thread.started"===s.type&&"string"==typeof s.thread_id)t=s.thread_id;else if("item.completed"===s.type&&s.item&&"object"==typeof s.item){let e=s.item;"agent_message"===e.type&&"string"==typeof e.text&&e.text&&(n=e.text)}else if("turn.completed"===s.type)r="completed";else if("turn.failed"===s.type||"error"===s.type){r="failed";let e=s.error;i="string"==typeof e?e:e&&"object"==typeof e&&"string"==typeof e.message?e.message:"string"==typeof s.message?s.message:"codex turn failed"}return{thread_id:t,terminal:r,output:n,error:i,usage:function(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if("turn.completed"!==n.type)continue;let r=n.usage;if(!r||"object"!=typeof r)break;return nr(nn(r.input_tokens),nn(r.cached_input_tokens),nn(r.output_tokens))}return null}(e)}}let ns=["cli","vscode","exec","appServer"],na=["thread/list","thread/read","thread/items/list","thread/turns/list","thread/start","thread/resume","turn/start","turn/interrupt"],no={"thread/list":{limit:"probe"},"thread/read":{threadId:0},"thread/items/list":{threadId:0},"thread/turns/list":{threadId:0},"thread/start":{cwd:0},"thread/resume":{threadId:0},"turn/start":{threadId:0},"turn/interrupt":{threadId:0}},nd=Object.fromEntries(na.map(e=>[e,!1]));function nu(e,t,n){return`codex:${e}:${t}:${n}`}function nl(e){let t=e.split(":");return 4===t.length&&"codex"===t[0]&&("as"===t[1]||"ex"===t[1])&&t[2]&&t[3]?{kind:t[1],threadId:t[2],id:t[3]}:null}function n_(e){return Buffer.from(JSON.stringify(e)).toString("base64url")}function nc(e){if(!e)return null;try{let t=JSON.parse(Buffer.from(e,"base64url").toString("utf8"));return t&&"object"==typeof t?t:null}catch{return null}}let nE=e=>"number"==typeof e&&Number.isFinite(e)?Math.round(1e3*e):null;function np(e,t){let n="string"==typeof e.cwd&&e.cwd.startsWith("/")?e.cwd:null,i=e.status?.type,s="string"==typeof e.name&&e.name.trim()?e.name:null,a="string"==typeof e.preview&&e.preview.trim()?e.preview:null;return{provider_session_id:e.id,title:s??a,workspace:n,created_at:nE(e.createdAt),updated_at:nE(e.updatedAt),lifecycle:t??("string"==typeof e.path&&e.path.split(/[\\/]/).includes("archived_sessions")?"archived":"open"),resumable:!0!==e.ephemeral&&"systemError"!==i&&null!==n&&r.default.existsSync(n),busy:"active"===i}}function nT(e,t,n){if("userMessage"===e.type)return{seq:t,role:"user",text:(Array.isArray(e.content)?e.content:[]).map(e=>e&&"object"==typeof e&&"text"===e.type?String(e.text??""):"").join("").trim(),at:n};return"agentMessage"===e.type&&"string"==typeof e.text?{seq:t,role:"assistant",text:e.text,at:n}:"commandExecution"===e.type&&"string"==typeof e.command?{seq:t,role:"tool",text:`$ ${e.command}`,at:n}:null}function nm(e){let t=null,n=null;for(let r of e??[])r?.type==="agentMessage"&&"string"==typeof r.text&&r.text&&(t=r.text,"final_answer"===r.phase&&(n=r.text));return n??t}function nf(e){return"workspace_write"===e?"workspace-write":"read-only"}function ng(e){return!e.ok&&"rpc"===e.kind&&/thread not (found|loaded)|no rollout|invalid thread id|not found/i.test(e.error.message)}function nh(e,t){return"timeout"===e.kind?tt("timed_out",`${t} timed out`):"aborted"===e.kind?tt("cancelled",`${t} aborted`):"closed"===e.kind?tt("unavailable",`${t}: app-server closed`):tt("invalid_input",`${t} refused (${e.error.code})`)}class nN{options;client;connecting;probe;trackers;keys;idleTimer;loads;command;env;constructor(e={}){this.options=e,this.client=null,this.connecting=null,this.probe=null,this.trackers=new Map,this.keys=new Map,this.idleTimer=null,this.loads=new Map,this.command=e.command??[process.env.BOTMANCERS_CODEX_BIN||"codex"],this.env=e.env??process.env}get runsDir(){return this.options.runsDir??i.default.join(i.default.dirname(i.default.resolve(eU(this.env))),"codex-exec-runs")}capabilities(){let e=this.probe?.status==="ready"?this.probe:null,t=e?.methods??nd,n=!!e?.exec_fallback,r=t["thread/start"]&&t["turn/start"],i=t["thread/resume"]&&t["turn/start"];return{list:t["thread/list"],search:t["thread/list"],read:t["thread/items/list"]||t["thread/turns/list"],resume:i||n&&t["thread/read"],start:r||n,cancel:t["turn/interrupt"]||n&&(!r||!i),usage:!!e,authorities:e?["read_only","workspace_write"]:[],max_page_size:25}}selection(){let e=this.capabilities(),t=this.probe?.methods??nd;return{start:e.start?t["thread/start"]&&t["turn/start"]?"app-server":"exec":null,resume:e.resume?t["thread/resume"]&&t["turn/start"]?"app-server":"exec":null}}async ready(){let e=await this.connect();return"ready"===e.status?tn(void 0):tt("auth_required"===e.status?"auth_required":"unsupported"===e.status?"unsupported":"unavailable",e.detail)}async connect(){return this.client&&!this.client.closed&&this.probe?.status==="ready"?this.probe:(this.connecting||(this.connecting=this.doConnect().finally(()=>{this.connecting=null})),this.connecting)}cliVersion(){return new Promise(e=>{(0,to.execFile)(this.command[0],[...this.command.slice(1),"--version"],{env:this.env,timeout:1e4},(t,n)=>{if(t)return e(null);let r=/(\d+\.\d+\.\d+[0-9A-Za-z.+-]*)/.exec(String(n));e(r?r[1]:null)})})}async doConnect(){let e=await this.cliVersion(),t=(t,n)=>(this.probe={status:t,cli_version:e,methods:{...nd},exec_fallback:!1,detail:n},this.probe);this.client?.close(),this.client=null;let n=new ne((this.options.transport??((e,t)=>(function(e,t={}){let n,r=[],i=[],s=!1,a=e=>{if(!s)for(let t of(s=!0,i))t(e)};try{n=(0,to.spawn)(e[0],e.slice(1),{stdio:["pipe","pipe","pipe"],env:t.env??process.env,cwd:t.cwd})}catch(e){return queueMicrotask(()=>a(`spawn failed: ${e.message}`)),{send:()=>{},onLine:e=>r.push(e),onClose:e=>i.push(e),close:()=>{}}}let o="";return n.stdout?.setEncoding("utf8"),n.stdout?.on("data",e=>{let t;for(o+=e;(t=o.indexOf("\n"))>=0;){let e=o.slice(0,t).trim();if(o=o.slice(t+1),e)for(let t of r)t(e)}}),n.stderr?.resume(),n.stdin?.on("error",()=>{}),n.on("error",e=>a(`spawn failed: ${e.code??e.message}`)),n.on("exit",(e,t)=>a(`exited (${t??e})`)),{send(e){!s&&n.stdin?.writable&&n.stdin.write(`${e}
1899
- `)},onLine:e=>r.push(e),onClose:e=>i.push(e),close(){s||(n.stdin?.end(),n.kill("SIGTERM"))}}})([...e,"app-server"],{env:tp(t)})))(this.command,this.env),this.options.requestTimeoutMs??3e4),r=await n.request("initialize",{clientInfo:{name:"botmancers",title:"Botmancers",version:"1"},capabilities:null},{timeoutMs:2e4});if(!r.ok)return(n.close(),null===e)?t("unavailable",`codex is not installed or did not start (${r.error.message})`):t("rpc"===r.kind?"unsupported":"unavailable",`codex ${e}: app-server initialize failed (${r.error.message})`);n.notify("initialized");let i=await Promise.all(na.map(e=>n.request(e,no[e],{timeoutMs:1e4}))),s={...nd};if(na.forEach((e,t)=>{var n;let r=i[t];s[e]=r.ok||"rpc"===r.kind&&(n=r.error,!(!(-32601!==n.code||/not supported yet/i.test(n.message))||n.message.includes(`unknown variant \`${e}\``)))}),!s["thread/list"])return n.close(),t("unsupported",`codex ${e??"unknown"}: app-server has no thread/list`);let a=await n.request("account/read",{},{timeoutMs:1e4});return a.ok&&a.result&&null==a.result.account&&!0===a.result.requiresOpenaiAuth?(n.close(),t("auth_required","codex is not signed in")):(this.attach(n),this.probe={status:"ready",cli_version:e,methods:s,exec_fallback:!1!==this.options.execFallback&&null!==e,detail:`codex ${e??"unknown"} app-server`},this.probe)}attach(e){this.client=e;let t=new Map;this.loads=t,e.onClose(()=>{for(let e of t.values())e?.end("app_server_exit");t.clear()}),e.handleServerRequests(e=>"item/commandExecution/requestApproval"===e||"item/fileChange/requestApproval"===e?{result:{decision:"decline"}}:"applyPatchApproval"===e||"execCommandApproval"===e?{result:{decision:{denied:{rejection:"Botmancers turns run with a fixed authority."}}}}:{error:{code:-32601,message:"not supported by Botmancers"}}),e.onNotification(({method:e,params:n})=>{if("thread/closed"===e&&"string"==typeof n.threadId){t.get(n.threadId)?.end("thread_unload"),t.delete(n.threadId);return}let r="string"==typeof n.turnId?n.turnId:n.turn&&"string"==typeof n.turn.id?n.turn.id:null;if(!r||"string"!=typeof n.threadId)return;let i=this.tracker(r,n.threadId);if("item/completed"===e){let e=n.item;e?.type==="agentMessage"&&"string"==typeof e.text&&e.text&&(i.output=e.text,"final_answer"===e.phase&&(i.finalOutput=e.text))}else if("thread/tokenUsage/updated"===e){var s;i.usage=function(e,t){if(!e)return t;if(!t)return e;let n=(e,t)=>null==e&&null==t?null:(e??0)+(t??0);return{input_tokens:n(e.input_tokens,t.input_tokens),output_tokens:n(e.output_tokens,t.output_tokens),cached_input_tokens:n(e.cached_input_tokens,t.cached_input_tokens),cost_usd:null}}(i.usage,(s=n.tokenUsage?.last)&&"object"==typeof s?nr(nn(s.inputTokens),nn(s.cachedInputTokens),nn(s.outputTokens)):null)}else if("turn/completed"===e){let e=n.turn;this.settle(i,e)}}),e.onClose(()=>{for(let e of this.trackers.values())"inProgress"===e.status&&(e.status="lost",e.error="the Codex app-server exited during the turn",e.finishedAt=Date.now(),e.waiters.splice(0).forEach(e=>e()))})}tracker(e,t){let n=this.trackers.get(e);return n||(n={threadId:t,status:"inProgress",output:null,finalOutput:null,usage:null,error:null,finishedAt:null,waiters:[]},this.trackers.set(e,n)),n}settle(e,t){"inProgress"!==t.status&&"inProgress"===e.status&&(e.status="completed"===t.status?"completed":"interrupted"===t.status?"interrupted":"failed",e.output=e.finalOutput??e.output??nm(t.items),e.error=t.error?.message??("failed"===e.status?"codex turn failed":null),e.finishedAt=nE(t.completedAt)??Date.now(),e.waiters.splice(0).forEach(e=>e()),this.scheduleIdle())}scheduleIdle(){this.idleTimer&&clearTimeout(this.idleTimer);let e=this.options.idleMs??3e5;this.idleTimer=setTimeout(()=>{if([...this.trackers.values()].some(e=>"inProgress"===e.status))return this.scheduleIdle();this.client?.close()},e),this.idleTimer.unref?.()}async rpc(e,t,n){let r=await this.connect();return"ready"===r.status&&this.client?(this.scheduleIdle(),this.client.request(e,t,{signal:n.signal??null})):{ok:!1,kind:"closed",error:{code:-1,message:r.detail}}}isLoaded(e){return!!this.client&&!this.client.closed&&this.loads.has(e)}markLoaded(e,t){this.loads.has(e)?t?.end("launch_failed"):this.loads.set(e,t)}mintLoad(e){return e?.mint({kind:"codex_thread_load",ref:`load-${(0,s.randomUUID)()}`,processBound:!0})??null}has(e){return!!this.probe?.methods[e]}shutdown(){this.idleTimer&&clearTimeout(this.idleTimer),this.client?.close(),this.client=null,this.probe=null}async listSessions(e){let t=nc(e.cursor);if("sessions"===e.scope.kind){let n=Number(t?.i??0),r=e.scope.provider_session_ids.slice(n,n+e.limit),i=[];for(let t of r){let n=await this.getSession({...e,provider_session_id:t});if(!n.ok)return n;n.value&&i.push(n.value)}return tn({items:i,next_cursor:n+e.limit<e.scope.provider_session_ids.length?n_({i:n+e.limit}):null})}let n=t?.phase==="archived"?"archived":"open",r=await this.rpc("thread/list",{limit:e.limit,cursor:"string"==typeof t?.c?t.c:null,archived:"archived"===n,sourceKinds:ns,sortKey:"updated_at",...e.query?{searchTerm:e.query}:{}},e);if(!r.ok)return nh(r,"thread/list");let i=(Array.isArray(r.result?.data)?r.result.data:[]).filter(e=>e&&"string"==typeof e.id&&!0!==e.ephemeral&&!e.parentThreadId).map(e=>np(e,n)).filter(t=>"all_provider_sessions"===e.scope.kind||null!==t.workspace&&e.scope.workspaces.some(e=>v(e,t.workspace))),s=r.result?.nextCursor??null;return tn({items:i,next_cursor:s?n_({phase:n,c:s}):"open"===n?n_({phase:"archived"}):null})}async getSession(e){let t=await this.rpc("thread/read",{threadId:e.provider_session_id},e);if(!t.ok)return ng(t)?tn(null):nh(t,"thread/read");let n=t.result?.thread;return tn(n&&"string"==typeof n.id?np(n):null)}async readTranscript(e){let t=nc(e.cursor)??{},n=Number(t.n??0),r=e.provider_session_id;if("turns"!==t.mode&&this.has("thread/items/list")){let i=await this.rpc("thread/items/list",{threadId:r,cursor:"string"==typeof t.c?t.c:null,limit:e.limit,sortDirection:"asc"},e);if(i.ok){let t=(i.result?.data??[]).slice(0,e.limit);return tn({items:t.map((e,t)=>nT(e.item??{},n+t+1,e.completedAtMs??e.startedAtMs??null)).filter(e=>null!==e),next_cursor:i.result?.nextCursor?n_({c:i.result.nextCursor,n:n+t.length}):null})}if(ng(i))return tt("not_found","no such thread");if("rpc"!==i.kind||-32601!==i.error.code)return nh(i,"thread/items/list")}if(!this.has("thread/turns/list"))return tt("unsupported","no transcript method");let i="string"==typeof t.c?t.c:null,s=Number(t.skip??0),a=await this.rpc("thread/turns/list",{threadId:r,cursor:i,limit:1,sortDirection:"asc",itemsView:"full"},e);if(!a.ok)return ng(a)?tt("not_found","no such thread"):nh(a,"thread/turns/list");let o=(a.result?.data??[])[0];if(!o)return tn({items:[],next_cursor:null});let d=Array.isArray(o.items)?o.items:[],u=d.slice(s,s+e.limit),l=u.map((e,t)=>nT(e,n+t+1,null)).filter(e=>null!==e),_=n+u.length;return tn({items:l,next_cursor:s+e.limit<d.length?n_({mode:"turns",c:i,skip:s+e.limit,n:_}):a.result?.nextCursor?n_({mode:"turns",c:a.result.nextCursor,skip:0,n:_}):null})}turnInput(e){return[{type:"text",text:e,text_elements:[]}]}async beginTurn(e,t,n){var r;let i=await this.rpc("turn/start",{threadId:e,input:this.turnInput(n.prompt),cwd:t,approvalPolicy:"never",sandboxPolicy:(r=n.authority,"workspace_write"===r?{type:"workspaceWrite",writableRoots:[t],networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}:{type:"readOnly",networkAccess:!1}),clientUserMessageId:n.idempotency_key},n);if(!i.ok)return ng(i)?tt("not_found","no such thread"):nh(i,"turn/start");let s=i.result?.turn;if(!s||"string"!=typeof s.id)return tt("unavailable","turn/start returned no turn");let a=this.tracker(s.id,e);this.settle(a,s);let o={provider_turn_id:nu("as",e,s.id),provider_session_id:e};return this.keys.set(n.idempotency_key,o),tn(o)}async startSession(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return tn(t);let n=this.selection().start;if(null===n)return tt("unsupported","this Codex cannot start sessions");if("exec"===n)return this.execStart(null,e.workspace,e);let r=this.mintLoad(e.session_context),i=await this.rpc("thread/start",{cwd:e.workspace,approvalPolicy:"never",sandbox:nf(e.authority),ephemeral:!1,...r?{config:tm(r)}:{}},e),s=i.ok?i.result?.thread?.id:void 0;return("string"!=typeof s&&r?.end("launch_failed"),i.ok)?"string"!=typeof s?tt("unavailable","thread/start returned no thread"):(this.markLoaded(s,r),this.beginTurn(s,e.workspace,e)):nh(i,"thread/start")}async findKeyedTurn(e,t,n){if(!this.has("thread/turns/list"))return null;let r=await this.rpc("thread/turns/list",{threadId:e,limit:5,sortDirection:"desc",itemsView:"full"},n);if(!r.ok)return null;for(let e of r.result?.data??[])if((e.items??[]).some(e=>e?.type==="userMessage"&&e.clientId===t))return e.id;return null}async sendTurn(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return tn(t);let n=e.provider_session_id,i=this.selection().resume;if(null===i)return tt("unsupported","this Codex cannot resume sessions");if("exec"===i){let t=await this.getSession(e);return t.ok?t.value?t.value.resumable&&t.value.workspace?this.execStart(n,t.value.workspace,e):tt("not_resumable","the thread cannot be resumed"):tt("not_found","no such thread"):t}await this.connect();let s=this.isLoaded(n)?null:this.mintLoad(e.session_context),a=await this.rpc("thread/resume",{threadId:n,approvalPolicy:"never",sandbox:nf(e.authority),excludeTurns:!0,...s?{config:tm(s)}:{}},e);if(!a.ok)return s?.end("launch_failed"),ng(a)?tt("not_found","no such thread"):nh(a,"thread/resume");this.isLoaded(n)||this.markLoaded(n,s);let o="string"==typeof a.result?.cwd?a.result.cwd:a.result?.thread?.cwd;if(!o||!r.default.existsSync(o))return tt("not_resumable","the thread workspace no longer exists");let d=await this.findKeyedTurn(n,e.idempotency_key,e);if(d){let t={provider_turn_id:nu("as",n,d),provider_session_id:n};return this.keys.set(e.idempotency_key,t),tn(t)}return a.result?.thread?.status?.type==="active"?tt("busy","the thread has a turn in flight"):this.beginTurn(n,o,e)}result(e){let t="completed"===e.status?"completed":"interrupted"===e.status?"cancelled":"failed";return{status:t,provider_session_id:e.threadId,output:e.output,failure:"completed"===t?null:"cancelled"===t?{code:"cancelled",message:"interrupted"}:{code:"lost"===e.status?"interrupted":"codex_turn_failed",message:e.error??"codex turn failed"},usage:e.usage,finished_at:e.finishedAt??Date.now()}}async recover(e,t,n){let r=null;for(let i=0;i<10;i++){let i=await this.rpc("thread/turns/list",{threadId:e,cursor:r,limit:10,sortDirection:"desc",itemsView:"full"},n);if(!i.ok)return ng(i)?tt("not_found","no such thread"):nh(i,"thread/turns/list");let s=(i.result?.data??[]).find(e=>e.id===t);if(s){let r=this.tracker(t,e);if("inProgress"!==s.status)return this.settle(r,s),tn(r);let i=await this.rpc("thread/read",{threadId:e},n);if(i.ok&&i.result?.thread?.status?.type==="active")return(await this.rpc("thread/resume",{threadId:e,excludeTurns:!0},n)).ok&&!this.isLoaded(e)&&this.markLoaded(e,null),tn(r);return r.status="lost",r.output=nm(s.items),r.error="the turn ended without a result (its Codex app-server exited)",r.finishedAt=Date.now(),tn(r)}if(!(r=i.result?.nextCursor??null))break}return tt("not_found","no such turn")}async liveTracker(e,t,n){let r=this.trackers.get(t);return r&&("inProgress"!==r.status||this.client&&!this.client.closed)?tn(r):this.has("thread/turns/list")||(await this.connect(),this.has("thread/turns/list"))?this.recover(e,t,n):tt("unsupported","cannot read turn history")}async observeTurn(e){let t=nl(e.provider_turn_id);if(!t)return tt("not_found","unknown turn handle");if("ex"===t.kind)return this.execObserve(t.threadId,t.id,e);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let r=n.value;for(;"inProgress"===r.status;){let t=await new Promise(t=>{let n=()=>o("done"),i=()=>o("aborted"),s="number"==typeof e.deadline_at?Math.max(0,e.deadline_at-Date.now()):null,a=null===s?null:setTimeout(()=>o("deadline"),s);function o(s){a&&clearTimeout(a),e.signal?.removeEventListener("abort",i);let o=r.waiters.indexOf(n);o>=0&&r.waiters.splice(o,1),t(s)}if(e.signal?.aborted)return o("aborted");r.waiters.push(n),e.signal?.addEventListener("abort",i,{once:!0})});if("aborted"===t)return tt("cancelled","observe aborted");if("deadline"===t)return tt("timed_out","observe deadline")}return tn(this.result(r))}async cancelTurn(e){let t=nl(e.provider_turn_id);if(!t)return tt("not_found","unknown turn handle");if("ex"===t.kind)return this.execCancel(t.id);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let r=n.value;if("inProgress"!==r.status)return tn("already_terminal");if(!this.has("turn/interrupt"))return tt("unsupported","this Codex cannot interrupt turns");let i=await this.rpc("turn/interrupt",{threadId:t.threadId,turnId:t.id},e);if(!i.ok)return"inProgress"!==r.status?tn("already_terminal"):nh(i,"turn/interrupt");let s=Date.now()+1e4;for(;"inProgress"===r.status&&Date.now()<s;)await new Promise(e=>setTimeout(e,20));return"inProgress"===r.status||"interrupted"===r.status?(r.status="interrupted",r.finishedAt=r.finishedAt??Date.now(),r.waiters.splice(0).forEach(e=>e()),tn("cancelled")):tn("already_terminal")}runPath(e,t){return i.default.join(this.runsDir,`${e.replace(/[^A-Za-z0-9-]/g,"")}.${t}`)}readMeta(e){try{return JSON.parse(r.default.readFileSync(this.runPath(e,"json"),"utf8"))}catch{return null}}execRunByKey(e){if(!r.default.existsSync(this.runsDir))return null;for(let t of r.default.readdirSync(this.runsDir)){if(!t.endsWith(".json"))continue;let n=this.readMeta(t.slice(0,-5));if(n?.key===e&&"string"==typeof n.thread_id)return{provider_turn_id:nu("ex",n.thread_id,String(n.run_id)),provider_session_id:n.thread_id}}return null}async execStart(e,t,n){let i,a;r.default.mkdirSync(this.runsDir,{recursive:!0});let o=(0,s.randomUUID)(),d=n.session_context?.mint({kind:"codex_exec",ref:o})??null,u=["-c",`sandbox_mode="${nf(n.authority)}"`,"-c",'approval_policy="never"',...d?(a=`mcp_servers.${t_}`,["-c",`${a}.url=${JSON.stringify(d.url)}`,"-c",`${a}.env_http_headers={ ${JSON.stringify(td)} = ${JSON.stringify(tl)} }`,"-c",`${a}.enabled_tools=[${JSON.stringify(tc)}]`,"-c",`${a}.tools.${tc}.approval_mode="approve"`]):[]],l=tp(this.env);d&&(l[tl]=d.token);let _=e?[...this.command.slice(1),"exec","resume","--json",...u,e,"-"]:[...this.command.slice(1),"exec","--json","-C",t,...u,"-"],c=r.default.openSync(this.runPath(o,"jsonl"),"a");try{i=(0,to.spawn)(this.command[0],_,{cwd:t,env:l,detached:!0,stdio:["pipe",c,"ignore"]})}catch(e){return r.default.closeSync(c),d?.end("launch_failed"),tt("unavailable",`codex exec did not start: ${e.message}`)}r.default.closeSync(c);let E=new Promise(e=>i.once("error",t=>e(t.message)));i.stdin?.on("error",()=>{}),i.stdin?.end(n.prompt);let p={run_id:o,pid:i.pid??null,thread_id:e,key:n.idempotency_key,authority:n.authority,cwd:t,correlation:n.correlation??{},cancelled:!1,started_at:Date.now()};if(r.default.writeFileSync(this.runPath(o,"json"),JSON.stringify(p)),i.unref(),!e){let e=Date.now()+3e4,t=null;for(E.then(e=>{t=e});;){let n=ni(nt(this.readLog(o)));if(n.thread_id){p.thread_id=n.thread_id,r.default.writeFileSync(this.runPath(o,"json"),JSON.stringify(p));break}if(t||n.terminal||Date.now()>e||p.pid&&!nR(p.pid))return tt("unavailable",`codex exec reported no thread${t?`: ${t}`:""}`);await new Promise(e=>setTimeout(e,25))}}return tn({provider_turn_id:nu("ex",p.thread_id,o),provider_session_id:p.thread_id})}readLog(e){try{return r.default.readFileSync(this.runPath(e,"jsonl"),"utf8")}catch{return""}}execResult(e,t){let n=this.readMeta(t);if(!n)return null;let r=ni(nt(this.readLog(t))),i="number"==typeof n.pid&&nR(n.pid);if(!r.terminal&&i&&!n.cancelled)return null;let s=n.cancelled&&"completed"!==r.terminal?"cancelled":"completed"===r.terminal?"completed":"failed";return{status:s,provider_session_id:e,output:r.output,failure:"completed"===s?null:"cancelled"===s?{code:"cancelled",message:"interrupted"}:{code:r.terminal?"codex_turn_failed":"interrupted",message:r.error??"codex exec ended without a result"},usage:r.usage,finished_at:Number(n.finished_at??Date.now())}}async execObserve(e,t,n){if(!this.readMeta(t))return tt("not_found","no such run");for(;;){let r=this.execResult(e,t);if(r)return tn(r);if(n.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof n.deadline_at&&Date.now()>=n.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,25))}}execCancel(e){let t=this.readMeta(e);if(!t)return tt("not_found","no such run");let n=ni(nt(this.readLog(e)));if(t.cancelled||n.terminal||"number"!=typeof t.pid||!nR(t.pid))return tn("already_terminal");try{process.kill(t.pid,"SIGINT")}catch{return tn("already_terminal")}return r.default.writeFileSync(this.runPath(e,"json"),JSON.stringify({...t,cancelled:!0,finished_at:Date.now()})),tn("cancelled")}}function nR(e){try{return process.kill(e,0),!0}catch{return!1}}let nv=null;"off"!==process.env.BOTMANCERS_CODEX_PROVIDER&&ta("codex",()=>{var e;return nv||(nv=new nN),e=nv,{kind:"codex-direct",capabilities:()=>e.capabilities(),ready:()=>e.ready(),listSessions:t=>e.listSessions(t),getSession:t=>e.getSession(t),readTranscript:t=>e.readTranscript(t),startSession:t=>e.startSession(t),sendTurn:t=>e.sendTurn(t),observeTurn:t=>e.observeTurn(t),cancelTurn:t=>e.cancelTurn(t)}}),e.s([],78636);let ny="cursor",nL=/^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$/,nO=new Map,nw=`
1899
+ `)},onLine:e=>r.push(e),onClose:e=>i.push(e),close(){s||(n.stdin?.end(),n.kill("SIGTERM"))}}})([...e,"app-server"],{env:tp(t)})))(this.command,this.env),this.options.requestTimeoutMs??3e4),r=await n.request("initialize",{clientInfo:{name:"botmancers",title:"Botmancers",version:"1"},capabilities:null},{timeoutMs:2e4});if(!r.ok)return(n.close(),null===e)?t("unavailable",`codex is not installed or did not start (${r.error.message})`):t("rpc"===r.kind?"unsupported":"unavailable",`codex ${e}: app-server initialize failed (${r.error.message})`);n.notify("initialized");let i=await Promise.all(na.map(e=>n.request(e,no[e],{timeoutMs:1e4}))),s={...nd};if(na.forEach((e,t)=>{var n;let r=i[t];s[e]=r.ok||"rpc"===r.kind&&(n=r.error,!(!(-32601!==n.code||/not supported yet/i.test(n.message))||n.message.includes(`unknown variant \`${e}\``)))}),!s["thread/list"])return n.close(),t("unsupported",`codex ${e??"unknown"}: app-server has no thread/list`);let a=await n.request("account/read",{},{timeoutMs:1e4});return a.ok&&a.result&&null==a.result.account&&!0===a.result.requiresOpenaiAuth?(n.close(),t("auth_required","codex is not signed in")):(this.attach(n),this.probe={status:"ready",cli_version:e,methods:s,exec_fallback:!1!==this.options.execFallback&&null!==e,detail:`codex ${e??"unknown"} app-server`},this.probe)}attach(e){this.client=e;let t=new Map;this.loads=t,e.onClose(()=>{for(let e of t.values())e?.end("app_server_exit");t.clear()}),e.handleServerRequests(e=>"item/commandExecution/requestApproval"===e||"item/fileChange/requestApproval"===e?{result:{decision:"decline"}}:"applyPatchApproval"===e||"execCommandApproval"===e?{result:{decision:{denied:{rejection:"Botmancers turns run with a fixed authority."}}}}:{error:{code:-32601,message:"not supported by Botmancers"}}),e.onNotification(({method:e,params:n})=>{if("thread/closed"===e&&"string"==typeof n.threadId){t.get(n.threadId)?.end("thread_unload"),t.delete(n.threadId);return}let r="string"==typeof n.turnId?n.turnId:n.turn&&"string"==typeof n.turn.id?n.turn.id:null;if(!r||"string"!=typeof n.threadId)return;let i=this.tracker(r,n.threadId);if("item/completed"===e){let e=n.item;e?.type==="agentMessage"&&"string"==typeof e.text&&e.text&&(i.output=e.text,"final_answer"===e.phase&&(i.finalOutput=e.text))}else if("thread/tokenUsage/updated"===e){var s;i.usage=function(e,t){if(!e)return t;if(!t)return e;let n=(e,t)=>null==e&&null==t?null:(e??0)+(t??0);return{input_tokens:n(e.input_tokens,t.input_tokens),output_tokens:n(e.output_tokens,t.output_tokens),cached_input_tokens:n(e.cached_input_tokens,t.cached_input_tokens),cost_usd:null}}(i.usage,(s=n.tokenUsage?.last)&&"object"==typeof s?nr(nn(s.inputTokens),nn(s.cachedInputTokens),nn(s.outputTokens)):null)}else if("turn/completed"===e){let e=n.turn;this.settle(i,e)}}),e.onClose(()=>{for(let e of this.trackers.values())"inProgress"===e.status&&(e.status="lost",e.error="the Codex app-server exited during the turn",e.finishedAt=Date.now(),e.waiters.splice(0).forEach(e=>e()))})}tracker(e,t){let n=this.trackers.get(e);return n||(n={threadId:t,status:"inProgress",output:null,finalOutput:null,usage:null,error:null,finishedAt:null,waiters:[]},this.trackers.set(e,n)),n}settle(e,t){"inProgress"!==t.status&&"inProgress"===e.status&&(e.status="completed"===t.status?"completed":"interrupted"===t.status?"interrupted":"failed",e.output=e.finalOutput??e.output??nm(t.items),e.error=t.error?.message??("failed"===e.status?"codex turn failed":null),e.finishedAt=nE(t.completedAt)??Date.now(),e.waiters.splice(0).forEach(e=>e()),this.scheduleIdle())}scheduleIdle(){this.idleTimer&&clearTimeout(this.idleTimer);let e=this.options.idleMs??3e5;this.idleTimer=setTimeout(()=>{if([...this.trackers.values()].some(e=>"inProgress"===e.status))return this.scheduleIdle();this.client?.close()},e),this.idleTimer.unref?.()}async rpc(e,t,n){let r=await this.connect();return"ready"===r.status&&this.client?(this.scheduleIdle(),this.client.request(e,t,{signal:n.signal??null})):{ok:!1,kind:"closed",error:{code:-1,message:r.detail}}}isLoaded(e){return!!this.client&&!this.client.closed&&this.loads.has(e)}markLoaded(e,t){this.loads.has(e)?t?.end("launch_failed"):this.loads.set(e,t)}mintLoad(e){return e?.mint({kind:"codex_thread_load",ref:`load-${(0,s.randomUUID)()}`,processBound:!0})??null}has(e){return!!this.probe?.methods[e]}shutdown(){this.idleTimer&&clearTimeout(this.idleTimer),this.client?.close(),this.client=null,this.probe=null}async listSessions(e){let t=nc(e.cursor);if("sessions"===e.scope.kind){let n=Number(t?.i??0),r=e.scope.provider_session_ids.slice(n,n+e.limit),i=[];for(let t of r){let n=await this.getSession({...e,provider_session_id:t});if(!n.ok)return n;n.value&&i.push(n.value)}return tn({items:i,next_cursor:n+e.limit<e.scope.provider_session_ids.length?n_({i:n+e.limit}):null})}let n=t?.phase==="archived"?"archived":"open",r=await this.rpc("thread/list",{limit:e.limit,cursor:"string"==typeof t?.c?t.c:null,archived:"archived"===n,sourceKinds:ns,sortKey:"updated_at",...e.query?{searchTerm:e.query}:{}},e);if(!r.ok)return nh(r,"thread/list");let i=(Array.isArray(r.result?.data)?r.result.data:[]).filter(e=>e&&"string"==typeof e.id&&!0!==e.ephemeral&&!e.parentThreadId).map(e=>np(e,n)).filter(t=>"all_provider_sessions"===e.scope.kind||null!==t.workspace&&e.scope.workspaces.some(e=>v(e,t.workspace))),s=r.result?.nextCursor??null;return tn({items:i,next_cursor:s?n_({phase:n,c:s}):"open"===n?n_({phase:"archived"}):null})}async getSession(e){let t=await this.rpc("thread/read",{threadId:e.provider_session_id},e);if(!t.ok)return ng(t)?tn(null):nh(t,"thread/read");let n=t.result?.thread;return tn(n&&"string"==typeof n.id?np(n):null)}async readTranscript(e){let t=nc(e.cursor)??{},n=Number(t.n??0),r=e.provider_session_id;if("turns"!==t.mode&&this.has("thread/items/list")){let i=await this.rpc("thread/items/list",{threadId:r,cursor:"string"==typeof t.c?t.c:null,limit:e.limit,sortDirection:"asc"},e);if(i.ok){let t=(i.result?.data??[]).slice(0,e.limit);return tn({items:t.map((e,t)=>nT(e.item??{},n+t+1,e.completedAtMs??e.startedAtMs??null)).filter(e=>null!==e),next_cursor:i.result?.nextCursor?n_({c:i.result.nextCursor,n:n+t.length}):null})}if(ng(i))return tt("not_found","no such thread");if("rpc"!==i.kind||-32601!==i.error.code)return nh(i,"thread/items/list")}if(!this.has("thread/turns/list"))return tt("unsupported","no transcript method");let i="string"==typeof t.c?t.c:null,s=Number(t.skip??0),a=await this.rpc("thread/turns/list",{threadId:r,cursor:i,limit:1,sortDirection:"asc",itemsView:"full"},e);if(!a.ok)return ng(a)?tt("not_found","no such thread"):nh(a,"thread/turns/list");let o=(a.result?.data??[])[0];if(!o)return tn({items:[],next_cursor:null});let d=Array.isArray(o.items)?o.items:[],u=d.slice(s,s+e.limit),l=u.map((e,t)=>nT(e,n+t+1,null)).filter(e=>null!==e),_=n+u.length;return tn({items:l,next_cursor:s+e.limit<d.length?n_({mode:"turns",c:i,skip:s+e.limit,n:_}):a.result?.nextCursor?n_({mode:"turns",c:a.result.nextCursor,skip:0,n:_}):null})}turnInput(e){return[{type:"text",text:e,text_elements:[]}]}async beginTurn(e,t,n){var r;let i=await this.rpc("turn/start",{threadId:e,input:this.turnInput(n.prompt),cwd:t,approvalPolicy:"never",sandboxPolicy:(r=n.authority,"workspace_write"===r?{type:"workspaceWrite",writableRoots:[t],networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}:{type:"readOnly",networkAccess:!1}),clientUserMessageId:n.idempotency_key},n);if(!i.ok)return ng(i)?tt("not_found","no such thread"):nh(i,"turn/start");let s=i.result?.turn;if(!s||"string"!=typeof s.id)return tt("unavailable","turn/start returned no turn");let a=this.tracker(s.id,e);this.settle(a,s);let o={provider_turn_id:nu("as",e,s.id),provider_session_id:e};return this.keys.set(n.idempotency_key,o),tn(o)}async startSession(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return tn(t);let n=this.selection().start;if(null===n)return tt("unsupported","this Codex cannot start sessions");if("exec"===n)return this.execStart(null,e.workspace,e);let r=this.mintLoad(e.session_context),i=await this.rpc("thread/start",{cwd:e.workspace,approvalPolicy:"never",sandbox:nf(e.authority),ephemeral:!1,...r?{config:tm(r)}:{}},e),s=i.ok?i.result?.thread?.id:void 0;return("string"!=typeof s&&r?.end("launch_failed"),i.ok)?"string"!=typeof s?tt("unavailable","thread/start returned no thread"):(this.markLoaded(s,r),this.beginTurn(s,e.workspace,e)):nh(i,"thread/start")}async findKeyedTurn(e,t,n){if(!this.has("thread/turns/list"))return null;let r=await this.rpc("thread/turns/list",{threadId:e,limit:5,sortDirection:"desc",itemsView:"full"},n);if(!r.ok)return null;for(let e of r.result?.data??[])if((e.items??[]).some(e=>e?.type==="userMessage"&&e.clientId===t))return e.id;return null}async sendTurn(e){let t=this.keys.get(e.idempotency_key)??this.execRunByKey(e.idempotency_key);if(t)return tn(t);let n=e.provider_session_id,i=this.selection().resume;if(null===i)return tt("unsupported","this Codex cannot resume sessions");if("exec"===i){let t=await this.getSession(e);return t.ok?t.value?t.value.resumable&&t.value.workspace?this.execStart(n,t.value.workspace,e):tt("not_resumable","the thread cannot be resumed"):tt("not_found","no such thread"):t}await this.connect();let s=this.isLoaded(n)?null:this.mintLoad(e.session_context),a=await this.rpc("thread/resume",{threadId:n,approvalPolicy:"never",sandbox:nf(e.authority),excludeTurns:!0,...s?{config:tm(s)}:{}},e);if(!a.ok)return s?.end("launch_failed"),ng(a)?tt("not_found","no such thread"):nh(a,"thread/resume");this.isLoaded(n)||this.markLoaded(n,s);let o="string"==typeof a.result?.cwd?a.result.cwd:a.result?.thread?.cwd;if(!o||!r.default.existsSync(o))return tt("not_resumable","the thread workspace no longer exists");let d=await this.findKeyedTurn(n,e.idempotency_key,e);if(d){let t={provider_turn_id:nu("as",n,d),provider_session_id:n};return this.keys.set(e.idempotency_key,t),tn(t)}return a.result?.thread?.status?.type==="active"?tt("busy","the thread has a turn in flight"):this.beginTurn(n,o,e)}result(e){let t="completed"===e.status?"completed":"interrupted"===e.status?"cancelled":"failed";return{status:t,provider_session_id:e.threadId,output:e.output,failure:"completed"===t?null:"cancelled"===t?{code:"cancelled",message:"interrupted"}:{code:"lost"===e.status?"interrupted":"codex_turn_failed",message:e.error??"codex turn failed"},usage:e.usage,finished_at:e.finishedAt??Date.now()}}async recover(e,t,n){let r=null;for(let i=0;i<10;i++){let i=await this.rpc("thread/turns/list",{threadId:e,cursor:r,limit:10,sortDirection:"desc",itemsView:"full"},n);if(!i.ok)return ng(i)?tt("not_found","no such thread"):nh(i,"thread/turns/list");let s=(i.result?.data??[]).find(e=>e.id===t);if(s){let r=this.tracker(t,e);if("inProgress"!==s.status)return this.settle(r,s),tn(r);let i=await this.rpc("thread/read",{threadId:e},n);if(i.ok&&i.result?.thread?.status?.type==="active")return(await this.rpc("thread/resume",{threadId:e,excludeTurns:!0},n)).ok&&!this.isLoaded(e)&&this.markLoaded(e,null),tn(r);return r.status="lost",r.output=nm(s.items),r.error="the turn ended without a result (its Codex app-server exited)",r.finishedAt=Date.now(),tn(r)}if(!(r=i.result?.nextCursor??null))break}return tt("not_found","no such turn")}async liveTracker(e,t,n){let r=this.trackers.get(t);return r&&("inProgress"!==r.status||this.client&&!this.client.closed)?tn(r):this.has("thread/turns/list")||(await this.connect(),this.has("thread/turns/list"))?this.recover(e,t,n):tt("unsupported","cannot read turn history")}async observeTurn(e){let t=nl(e.provider_turn_id);if(!t)return tt("not_found","unknown turn handle");if("ex"===t.kind)return this.execObserve(t.threadId,t.id,e);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let r=n.value;for(;"inProgress"===r.status;){let t=await new Promise(t=>{let n=()=>o("done"),i=()=>o("aborted"),s="number"==typeof e.deadline_at?Math.max(0,e.deadline_at-Date.now()):null,a=null===s?null:setTimeout(()=>o("deadline"),s);function o(s){a&&clearTimeout(a),e.signal?.removeEventListener("abort",i);let o=r.waiters.indexOf(n);o>=0&&r.waiters.splice(o,1),t(s)}if(e.signal?.aborted)return o("aborted");r.waiters.push(n),e.signal?.addEventListener("abort",i,{once:!0})});if("aborted"===t)return tt("cancelled","observe aborted");if("deadline"===t)return tt("timed_out","observe deadline")}return tn(this.result(r))}async cancelTurn(e){let t=nl(e.provider_turn_id);if(!t)return tt("not_found","unknown turn handle");if("ex"===t.kind)return this.execCancel(t.id);let n=await this.liveTracker(t.threadId,t.id,e);if(!n.ok)return n;let r=n.value;if("inProgress"!==r.status)return tn("already_terminal");if(!this.has("turn/interrupt"))return tt("unsupported","this Codex cannot interrupt turns");let i=await this.rpc("turn/interrupt",{threadId:t.threadId,turnId:t.id},e);if(!i.ok)return"inProgress"!==r.status?tn("already_terminal"):nh(i,"turn/interrupt");let s=Date.now()+1e4;for(;"inProgress"===r.status&&Date.now()<s;)await new Promise(e=>setTimeout(e,20));return"inProgress"===r.status||"interrupted"===r.status?(r.status="interrupted",r.finishedAt=r.finishedAt??Date.now(),r.waiters.splice(0).forEach(e=>e()),tn("cancelled")):tn("already_terminal")}runPath(e,t){return i.default.join(this.runsDir,`${e.replace(/[^A-Za-z0-9-]/g,"")}.${t}`)}readMeta(e){try{return JSON.parse(r.default.readFileSync(this.runPath(e,"json"),"utf8"))}catch{return null}}execRunByKey(e){if(!r.default.existsSync(this.runsDir))return null;for(let t of r.default.readdirSync(this.runsDir)){if(!t.endsWith(".json"))continue;let n=this.readMeta(t.slice(0,-5));if(n?.key===e&&"string"==typeof n.thread_id)return{provider_turn_id:nu("ex",n.thread_id,String(n.run_id)),provider_session_id:n.thread_id}}return null}async execStart(e,t,n){let i,a;r.default.mkdirSync(this.runsDir,{recursive:!0});let o=(0,s.randomUUID)(),d=n.session_context?.mint({kind:"codex_exec",ref:o})??null,u=["-c",`sandbox_mode="${nf(n.authority)}"`,"-c",'approval_policy="never"',...d?(a=`mcp_servers.${t_}`,["-c",`${a}.url=${JSON.stringify(d.url)}`,"-c",`${a}.env_http_headers={ ${JSON.stringify(td)} = ${JSON.stringify(tl)} }`,"-c",`${a}.enabled_tools=[${JSON.stringify(tc)}]`,"-c",`${a}.tools.${tc}.approval_mode="approve"`]):[]],l=tp(this.env);d&&(l[tl]=d.token);let _=e?[...this.command.slice(1),"exec","resume","--json",...u,e,"-"]:[...this.command.slice(1),"exec","--json","-C",t,...u,"-"],c=r.default.openSync(this.runPath(o,"jsonl"),"a");try{i=(0,to.spawn)(this.command[0],_,{cwd:t,env:l,detached:!0,stdio:["pipe",c,"ignore"]})}catch(e){return r.default.closeSync(c),d?.end("launch_failed"),tt("unavailable",`codex exec did not start: ${e.message}`)}r.default.closeSync(c);let E=new Promise(e=>i.once("error",t=>e(t.message)));i.stdin?.on("error",()=>{}),i.stdin?.end(n.prompt);let p={run_id:o,pid:i.pid??null,thread_id:e,key:n.idempotency_key,authority:n.authority,cwd:t,correlation:n.correlation??{},cancelled:!1,started_at:Date.now()};if(r.default.writeFileSync(this.runPath(o,"json"),JSON.stringify(p)),i.unref(),!e){let e=Date.now()+3e4,t=null;for(E.then(e=>{t=e});;){let n=ni(nt(this.readLog(o)));if(n.thread_id){p.thread_id=n.thread_id,r.default.writeFileSync(this.runPath(o,"json"),JSON.stringify(p));break}if(t||n.terminal||Date.now()>e||p.pid&&!nR(p.pid))return tt("unavailable",`codex exec reported no thread${t?`: ${t}`:""}`);await new Promise(e=>setTimeout(e,25))}}return tn({provider_turn_id:nu("ex",p.thread_id,o),provider_session_id:p.thread_id})}readLog(e){try{return r.default.readFileSync(this.runPath(e,"jsonl"),"utf8")}catch{return""}}execResult(e,t){let n=this.readMeta(t);if(!n)return null;let r=ni(nt(this.readLog(t))),i="number"==typeof n.pid&&nR(n.pid);if(!r.terminal&&i&&!n.cancelled)return null;let s=n.cancelled&&"completed"!==r.terminal?"cancelled":"completed"===r.terminal?"completed":"failed";return{status:s,provider_session_id:e,output:r.output,failure:"completed"===s?null:"cancelled"===s?{code:"cancelled",message:"interrupted"}:{code:r.terminal?"codex_turn_failed":"interrupted",message:r.error??"codex exec ended without a result"},usage:r.usage,finished_at:Number(n.finished_at??Date.now())}}async execObserve(e,t,n){if(!this.readMeta(t))return tt("not_found","no such run");for(;;){let r=this.execResult(e,t);if(r)return tn(r);if(n.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof n.deadline_at&&Date.now()>=n.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,25))}}execCancel(e){let t=this.readMeta(e);if(!t)return tt("not_found","no such run");let n=ni(nt(this.readLog(e)));if(t.cancelled||n.terminal||"number"!=typeof t.pid||!nR(t.pid))return tn("already_terminal");try{process.kill(t.pid,"SIGINT")}catch{return tn("already_terminal")}return r.default.writeFileSync(this.runPath(e,"json"),JSON.stringify({...t,cancelled:!0,finished_at:Date.now()})),tn("cancelled")}}function nR(e){try{return process.kill(e,0),!0}catch{return!1}}let nv=null;"off"!==process.env.BOTMANCERS_CODEX_PROVIDER&&ta("codex",()=>{var e;return nv||(nv=new nN),e=nv,{kind:"codex-direct",capabilities:()=>e.capabilities(),ready:()=>e.ready(),listSessions:t=>e.listSessions(t),getSession:t=>e.getSession(t),readTranscript:t=>e.readTranscript(t),startSession:t=>e.startSession(t),sendTurn:t=>e.sendTurn(t),observeTurn:t=>e.observeTurn(t),cancelTurn:t=>e.cancelTurn(t)}}),e.s([],78636);let ny="cursor",nL=/^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$/,nw=new Map,nO=`
1900
1900
  import { createRequire } from 'module';
1901
1901
  import { pathToFileURL } from 'url';
1902
1902
  import path from 'path';
@@ -1928,9 +1928,9 @@ try {
1928
1928
  if (op === 'turn') out({ type: 'result', subtype: 'sdk_error', is_error: true, result: null });
1929
1929
  process.exit(op === 'probe' ? 3 : 1);
1930
1930
  }
1931
- `;function nk(e,t,n){return["--input-type=module","-e",nw,e,t.sdkModule,...n]}function nI(e){return"string"==typeof e?e:null}function nS(e,t){let n=e.env??process.env,r=e.stateDir??(n.BOTMANCERS_CURSOR_STATE_DIR?.trim()||i.default.join(i.default.dirname(i.default.resolve(eU(n))),"providers","cursor"));return{cliPath:e.cliPath??(n.BOTMANCERS_CURSOR_CLI?.trim()||"cursor-agent"),sdkModule:e.sdkModule??(n.BOTMANCERS_CURSOR_SDK_MODULE?.trim()||"@cursor/sdk"),stateDir:i.default.join(r,t.replace(/[^A-Za-z0-9._-]/g,"_")),pollMs:e.pollMs??100,env:void 0!==n[tu]||void 0!==n[tl]?tp(n):n}}function nA(e){return i.default.join(e.stateDir,"state.json")}function nb(e,t,n){return i.default.join(e.stateDir,"turns",`${t}.${n}`)}function nq(e){try{let t=JSON.parse(r.default.readFileSync(nA(e),"utf8"));if(t&&1===t.version)return t}catch{}return{version:1,chats:{},turns:{},keys:{}}}function nC(e,t){r.default.mkdirSync(i.default.join(e.stateDir,"turns"),{recursive:!0});let n=`${nA(e)}.${process.pid}.${(0,s.randomUUID)()}.tmp`;r.default.writeFileSync(n,JSON.stringify(t)),r.default.renameSync(n,nA(e))}function nx(e){try{return r.default.readFileSync(e,"utf8")}catch{return null}}function nD(e){if(!e)return!1;try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function nU(e){try{return r.default.realpathSync(e)}catch{return i.default.resolve(e)}}function nF(e){try{return r.default.statSync(e).isDirectory()}catch{return!1}}function nW(e,t,n,r){return{state:"terminal",parsed:n,result:{status:"failed",provider_session_id:e.chat,output:null,failure:{code:t,message:t},usage:n.result?.usage??null,finished_at:r}}}function nM(e,t){let n=nx(nb(e,t.id,"exit")),r=null!==n||!nD(t.pid),i=function(e,t=!1){let n={init:null,steps:[],result:null,result_events:0,malformed:0},r=e.split("\n");for(let e of(t||r.pop(),r)){let t,r=e.trim();if(!r)continue;try{let e=JSON.parse(r);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("not an object");t=e}catch{n.malformed++;continue}let i="number"==typeof t.timestamp_ms?t.timestamp_ms:null;if("system"!==t.type||"init"!==t.subtype||n.init)if("assistant"===t.type){let e=function(e){let t=e?.content;if("string"==typeof t)return t;if(!Array.isArray(t))return null;let n=t.map(e=>e&&"text"===e.type?nI(e.text):null).filter(e=>null!==e);return n.length?n.join(""):null}(t.message);e&&n.steps.push({role:"assistant",text:e,at:i})}else"tool_call"===t.type&&"completed"===t.subtype?n.steps.push({role:"tool",text:`${function(e){let t=Object.keys(e.tool_call&&"object"==typeof e.tool_call?e.tool_call:{}).find(e=>/ToolCall$/.test(e));return t?t.replace(/ToolCall$/,""):"tool"}(t)} (completed)`,at:i}):"result"===t.type&&(n.result_events++,n.result||(n.result={ok:!1===t.is_error&&"success"===t.subtype,subtype:nI(t.subtype),text:nI(t.result),usage:function(e){let t=e.usage&&"object"==typeof e.usage?e.usage:null,n=e.total_cost_usd??t?.costUsd??t?.cost_usd;return t||void 0!==n?te({input_tokens:t?.inputTokens??t?.input_tokens,output_tokens:t?.outputTokens??t?.output_tokens,cost_usd:n}):null}(t)}));else n.init={session_id:nI(t.session_id),cwd:nI(t.cwd)}}return n}(nx(nb(e,t.id,"out"))??"",r),s=Date.now();if(i.init){if(i.init.session_id!==t.chat)return nW(t,"session_mismatch",i,s);if(null!==i.init.cwd&&nU(i.init.cwd)!==nU(t.workspace))return nW(t,"workspace_mismatch",i,s)}if(i.result){if(!i.result.ok)return nW(t,`cursor_${(i.result.subtype??"error").replace(/[^A-Za-z0-9_]/g,"_").slice(0,40)}`,i,s);let e=i.result.text??(i.steps.filter(e=>"assistant"===e.role).map(e=>e.text).join("\n")||null);return{state:"terminal",parsed:i,result:{status:"completed",provider_session_id:t.chat,output:e,failure:null,usage:i.result.usage,finished_at:s}}}return null!==t.cancel_requested_at?{state:"terminal",parsed:i,result:{status:"cancelled",provider_session_id:t.chat,output:null,failure:{code:"cancelled",message:"cancelled"},usage:null,finished_at:t.cancel_requested_at}}:null!==n?nW(t,`exit_${String(Number.parseInt(n,10))}`,i,s):nD(t.pid)?{state:"running",parsed:i}:nW(t,"process_lost",i,s)}function nH(e,t,n,r,i){return new Promise(s=>{let a=(0,to.spawn)(e,t,{cwd:n,env:r.env,stdio:["ignore","pipe","ignore"]}),o="",d=setTimeout(()=>a.kill("SIGKILL"),i);a.stdout?.on("data",e=>{o+=String(e)}),a.on("error",()=>{clearTimeout(d),s({status:null,stdout:o})}),a.on("close",e=>{clearTimeout(d),s({status:e,stdout:o})})})}async function nX(e,t,n){let r="cli"===t?await nH(e.cliPath,["create-chat"],n,e,6e4):await nH(process.execPath,nk("create",e,[n]),n,e,6e4);if(0!==r.status)return null;let i=r.stdout.trim().split("\n").pop()?.trim()??"",s=i;if("sdk"===t)try{s=JSON.parse(i).id}catch{s=null}return"string"==typeof s&&nL.test(s)?s:null}function nG(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=Date.parse(e);return Number.isFinite(t)?t:null}return null}async function nB(e,t){let n;r.default.mkdirSync(e.stateDir,{recursive:!0});let s="cli"===t?await nH(e.cliPath,["ls","--output-format","json"],e.stateDir,e,6e4):await nH(process.execPath,nk("list",e,[]),e.stateDir,e,6e4);if(0!==s.status)return null;try{n=JSON.parse(s.stdout.trim())}catch{return null}let a=Array.isArray(n)?n:n?.sessions??n?.chats;if(!Array.isArray(a))return null;let o=[];for(let e of a){if(!e||"object"!=typeof e)continue;let t=nI(e.id)??nI(e.chatId)??nI(e.session_id);if(!t||!nL.test(t))continue;let n=nI(e.cwd)??nI(e.workspace);o.push({id:t,workspace:n&&i.default.isAbsolute(n)?n:null,title:nI(e.title)??nI(e.name),created_at:nG(e.createdAt??e.created_at),updated_at:nG(e.updatedAt??e.updated_at)})}return o}e.s(["CURSOR_PROVIDER_KIND",0,ny,"cursorSessionProviderFactory",0,function(e){return function(e,t={}){let n=nS(t,e.id),a=()=>(function(e={}){let t=nS(e,"probe"),n=`${t.cliPath}
1931
+ `;function nk(e,t,n){return["--input-type=module","-e",nO,e,t.sdkModule,...n]}function nI(e){return"string"==typeof e?e:null}function nS(e,t){let n=e.env??process.env,r=e.stateDir??(n.BOTMANCERS_CURSOR_STATE_DIR?.trim()||i.default.join(i.default.dirname(i.default.resolve(eU(n))),"providers","cursor"));return{cliPath:e.cliPath??(n.BOTMANCERS_CURSOR_CLI?.trim()||"cursor-agent"),sdkModule:e.sdkModule??(n.BOTMANCERS_CURSOR_SDK_MODULE?.trim()||"@cursor/sdk"),stateDir:i.default.join(r,t.replace(/[^A-Za-z0-9._-]/g,"_")),pollMs:e.pollMs??100,env:void 0!==n[tu]||void 0!==n[tl]?tp(n):n}}function nA(e){return i.default.join(e.stateDir,"state.json")}function nb(e,t,n){return i.default.join(e.stateDir,"turns",`${t}.${n}`)}function nq(e){try{let t=JSON.parse(r.default.readFileSync(nA(e),"utf8"));if(t&&1===t.version)return t}catch{}return{version:1,chats:{},turns:{},keys:{}}}function nC(e,t){r.default.mkdirSync(i.default.join(e.stateDir,"turns"),{recursive:!0});let n=`${nA(e)}.${process.pid}.${(0,s.randomUUID)()}.tmp`;r.default.writeFileSync(n,JSON.stringify(t)),r.default.renameSync(n,nA(e))}function nx(e){try{return r.default.readFileSync(e,"utf8")}catch{return null}}function nD(e){if(!e)return!1;try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function nU(e){try{return r.default.realpathSync(e)}catch{return i.default.resolve(e)}}function nF(e){try{return r.default.statSync(e).isDirectory()}catch{return!1}}function nW(e,t,n,r){return{state:"terminal",parsed:n,result:{status:"failed",provider_session_id:e.chat,output:null,failure:{code:t,message:t},usage:n.result?.usage??null,finished_at:r}}}function nM(e,t){let n=nx(nb(e,t.id,"exit")),r=null!==n||!nD(t.pid),i=function(e,t=!1){let n={init:null,steps:[],result:null,result_events:0,malformed:0},r=e.split("\n");for(let e of(t||r.pop(),r)){let t,r=e.trim();if(!r)continue;try{let e=JSON.parse(r);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("not an object");t=e}catch{n.malformed++;continue}let i="number"==typeof t.timestamp_ms?t.timestamp_ms:null;if("system"!==t.type||"init"!==t.subtype||n.init)if("assistant"===t.type){let e=function(e){let t=e?.content;if("string"==typeof t)return t;if(!Array.isArray(t))return null;let n=t.map(e=>e&&"text"===e.type?nI(e.text):null).filter(e=>null!==e);return n.length?n.join(""):null}(t.message);e&&n.steps.push({role:"assistant",text:e,at:i})}else"tool_call"===t.type&&"completed"===t.subtype?n.steps.push({role:"tool",text:`${function(e){let t=Object.keys(e.tool_call&&"object"==typeof e.tool_call?e.tool_call:{}).find(e=>/ToolCall$/.test(e));return t?t.replace(/ToolCall$/,""):"tool"}(t)} (completed)`,at:i}):"result"===t.type&&(n.result_events++,n.result||(n.result={ok:!1===t.is_error&&"success"===t.subtype,subtype:nI(t.subtype),text:nI(t.result),usage:function(e){let t=e.usage&&"object"==typeof e.usage?e.usage:null,n=e.total_cost_usd??t?.costUsd??t?.cost_usd;return t||void 0!==n?te({input_tokens:t?.inputTokens??t?.input_tokens,output_tokens:t?.outputTokens??t?.output_tokens,cost_usd:n}):null}(t)}));else n.init={session_id:nI(t.session_id),cwd:nI(t.cwd)}}return n}(nx(nb(e,t.id,"out"))??"",r),s=Date.now();if(i.init){if(i.init.session_id!==t.chat)return nW(t,"session_mismatch",i,s);if(null!==i.init.cwd&&nU(i.init.cwd)!==nU(t.workspace))return nW(t,"workspace_mismatch",i,s)}if(i.result){if(!i.result.ok)return nW(t,`cursor_${(i.result.subtype??"error").replace(/[^A-Za-z0-9_]/g,"_").slice(0,40)}`,i,s);let e=i.result.text??(i.steps.filter(e=>"assistant"===e.role).map(e=>e.text).join("\n")||null);return{state:"terminal",parsed:i,result:{status:"completed",provider_session_id:t.chat,output:e,failure:null,usage:i.result.usage,finished_at:s}}}return null!==t.cancel_requested_at?{state:"terminal",parsed:i,result:{status:"cancelled",provider_session_id:t.chat,output:null,failure:{code:"cancelled",message:"cancelled"},usage:null,finished_at:t.cancel_requested_at}}:null!==n?nW(t,`exit_${String(Number.parseInt(n,10))}`,i,s):nD(t.pid)?{state:"running",parsed:i}:nW(t,"process_lost",i,s)}function nH(e,t,n,r,i){return new Promise(s=>{let a=(0,to.spawn)(e,t,{cwd:n,env:r.env,stdio:["ignore","pipe","ignore"]}),o="",d=setTimeout(()=>a.kill("SIGKILL"),i);a.stdout?.on("data",e=>{o+=String(e)}),a.on("error",()=>{clearTimeout(d),s({status:null,stdout:o})}),a.on("close",e=>{clearTimeout(d),s({status:e,stdout:o})})})}async function nX(e,t,n){let r="cli"===t?await nH(e.cliPath,["create-chat"],n,e,6e4):await nH(process.execPath,nk("create",e,[n]),n,e,6e4);if(0!==r.status)return null;let i=r.stdout.trim().split("\n").pop()?.trim()??"",s=i;if("sdk"===t)try{s=JSON.parse(i).id}catch{s=null}return"string"==typeof s&&nL.test(s)?s:null}function nG(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=Date.parse(e);return Number.isFinite(t)?t:null}return null}async function nB(e,t){let n;r.default.mkdirSync(e.stateDir,{recursive:!0});let s="cli"===t?await nH(e.cliPath,["ls","--output-format","json"],e.stateDir,e,6e4):await nH(process.execPath,nk("list",e,[]),e.stateDir,e,6e4);if(0!==s.status)return null;try{n=JSON.parse(s.stdout.trim())}catch{return null}let a=Array.isArray(n)?n:n?.sessions??n?.chats;if(!Array.isArray(a))return null;let o=[];for(let e of a){if(!e||"object"!=typeof e)continue;let t=nI(e.id)??nI(e.chatId)??nI(e.session_id);if(!t||!nL.test(t))continue;let n=nI(e.cwd)??nI(e.workspace);o.push({id:t,workspace:n&&i.default.isAbsolute(n)?n:null,title:nI(e.title)??nI(e.name),created_at:nG(e.createdAt??e.created_at),updated_at:nG(e.updatedAt??e.updated_at)})}return o}e.s(["CURSOR_PROVIDER_KIND",0,ny,"cursorSessionProviderFactory",0,function(e){return function(e,t={}){let n=nS(t,e.id),a=()=>(function(e={}){let t=nS(e,"probe"),n=`${t.cliPath}
1932
1932
  ${t.sdkModule}
1933
- ${t.env===process.env?"":JSON.stringify(t.env)}`,r=nO.get(n);if(r&&Date.now()-r.at<3e5)return r.probe;let i=function(e){let t=(0,to.spawnSync)(e.cliPath,["--version"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]}),n=0===t.status?String(t.stdout??"").trim().split("\n").pop()?.trim()??"":"";if(!/^[0-9][\w.+-]{0,80}$/.test(n))return{available:!1,version:null,list:!1};let r=(0,to.spawnSync)(e.cliPath,["ls","--help"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});return{available:!0,version:n,list:0===r.status&&/--output-format\b[^\n]*\bjson\b/.test(String(r.stdout??""))}}(t),s=i.available?{available:!1,version:null,list:!1}:function(e){let t=(0,to.spawnSync)(process.execPath,nk("probe",e,[]),{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});if(0!==t.status)return{available:!1,version:null,list:!1};try{let e=JSON.parse(String(t.stdout).trim().split("\n").pop()??""),n=!0===e.resume&&!0===e.create;return{available:n,version:n&&"string"==typeof e.version?e.version.slice(0,80):null,list:n&&!0===e.list}}catch{return{available:!1,version:null,list:!1}}}(t),a={backend:i.available?"cli":s.available?"sdk":null,cli:i,sdk:s};return nO.set(n,{at:Date.now(),probe:a}),a})(t),o=()=>{var e;let t;return t=null!==(e=a()).backend,{list:"cli"===e.backend?e.cli.list:"sdk"===e.backend&&e.sdk.list,search:!1,read:t,resume:t,start:t,cancel:t,usage:t,authorities:t?["read_only","workspace_write"]:[],max_page_size:50}},d=e=>tt(null===a().backend?"unavailable":"unsupported",`Cursor ${e} is not available.`);function u(e,t,r){let i=r.turns.some(t=>e.turns[t]&&"running"===nM(n,e.turns[t]).state),s=r.turns.length?e.turns[r.turns[r.turns.length-1]]?.started_at??r.updated_at:r.updated_at;return{provider_session_id:t,title:r.title,workspace:r.workspace,created_at:r.created_at,updated_at:Math.max(r.updated_at,s),lifecycle:"open",resumable:!0,busy:i}}async function l(e){let t=await nB(n,e);return t?tn(t):tt("unavailable","Cursor session listing failed.")}function _(e,t,a,o){let d=e.chats[a],u={id:`ct-${(0,s.randomUUID)()}`,chat:a,workspace:d.workspace,prompt:o.prompt,authority:o.authority,backend:t,pid:null,started_at:Date.now(),cancel_requested_at:null,correlation:{...o.correlation}};return e.turns[u.id]=u,e.keys[o.idempotency_key]=u.id,d.turns.push(u.id),nC(n,e),u.pid=function(e,t){r.default.mkdirSync(i.default.join(e.stateDir,"turns"),{recursive:!0});let[n,s]="cli"===t.backend?[e.cliPath,["--print","--output-format","stream-json","--trust","--workspace",t.workspace,..."read_only"===t.authority?["--mode","ask"]:[],"--resume",t.chat,t.prompt]]:[process.execPath,nk("turn",e,[t.chat,t.workspace,"read_only"===t.authority?"ask":"-",t.prompt])];try{let r=(0,to.spawn)("/bin/sh",["-c",'"$@" >"$BM_OUT" 2>"$BM_ERR" </dev/null; echo $? >"$BM_EXIT.tmp" && mv "$BM_EXIT.tmp" "$BM_EXIT"',"sh",n,...s],{cwd:t.workspace,detached:!0,stdio:"ignore",env:{...e.env,BM_OUT:nb(e,t.id,"out"),BM_ERR:nb(e,t.id,"err"),BM_EXIT:nb(e,t.id,"exit"),BOTMANCERS_CORRELATION:JSON.stringify(t.correlation)}});return r.on("error",()=>{}),r.unref(),r.pid??null}catch{return null}}(n,u),nC(n,e),tn({provider_turn_id:u.id,provider_session_id:a})}function c(e,t){let n=e.keys[t];return n&&e.turns[n]?tn({provider_turn_id:n,provider_session_id:e.turns[n].chat}):null}return{kind:ny,probe:a,capabilities:o,async listSessions(e){let t=a().backend;if(!t||!o().list)return d("session listing");let r=await l(t);if(!r.ok)return r;let i=nq(n),s=r.value.filter(t=>{var n,r,i;return n=e.scope,r=t.id,i=t.workspace,"all_provider_sessions"===n.kind||("sessions"===n.kind?n.provider_session_ids.includes(r):null!==i&&n.workspaces.some(e=>i===e||i.startsWith(`${e.replace(/\/+$/,"")}/`)))}),_=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,c=s.slice(_,_+Math.min(e.limit,50)),E=Date.now();for(let e of c)!i.chats[e.id]&&e.workspace&&(i.chats[e.id]={workspace:e.workspace,title:e.title,origin:"listed",created_at:e.created_at??E,updated_at:e.updated_at??E,turns:[]});return nC(n,i),tn({items:c.map(e=>i.chats[e.id]?{...u(i,e.id,i.chats[e.id]),title:e.title??i.chats[e.id].title}:{provider_session_id:e.id,title:e.title,workspace:null,created_at:e.created_at,updated_at:e.updated_at,lifecycle:"open",resumable:!1,busy:!1}),next_cursor:_+c.length<s.length?String(_+c.length):null})},async getSession(e){let t=a().backend;if(!t)return d("sessions");let r=nq(n),i=r.chats[e.provider_session_id];if(!i)return tn(null);if(o().list){let n=await l(t);if(!n.ok)return n;if(!n.value.some(t=>t.id===e.provider_session_id))return tn(null)}return tn(u(r,e.provider_session_id,i))},async importSession(e){let t=a().backend;if(!t)return d("sessions");if(!nL.test(e.provider_session_id))return tt("invalid_input","Not a Cursor session id.");if(!i.default.isAbsolute(e.workspace)||!nF(e.workspace))return tt("invalid_input","workspace must be an existing absolute directory.");let r=nq(n),s=r.chats[e.provider_session_id];if(s)return tn(u(r,e.provider_session_id,s));let _=e.workspace,c=null;if(o().list){let n=await l(t);if(!n.ok)return n;let r=n.value.find(t=>t.id===e.provider_session_id);if(!r)return tt("not_found","Cursor does not list that session.");_=r.workspace??_,c=r.title}let E=Date.now();return r.chats[e.provider_session_id]={workspace:_,title:c,origin:o().list?"listed":"imported",created_at:E,updated_at:E,turns:[]},nC(n,r),tn(u(r,e.provider_session_id,r.chats[e.provider_session_id]))},async readTranscript(e){if(!a().backend)return d("transcripts");let t=nq(n),r=t.chats[e.provider_session_id];if(!r)return tt("not_found","Unknown Cursor session.");let i=[];for(let e of r.turns){let r=t.turns[e];if(r)for(let e of(i.push({seq:i.length+1,role:"user",text:r.prompt,at:r.started_at}),nM(n,r).parsed.steps))i.push({seq:i.length+1,role:e.role,text:e.text,at:e.at})}let s=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,o=i.slice(s,s+Math.min(e.limit,50));return tn({items:o,next_cursor:s+o.length<i.length?String(s+o.length):null})},async startSession(e){let t=a().backend;if(!t)return d("sessions");let r=c(nq(n),e.idempotency_key);if(r)return r;if(!i.default.isAbsolute(e.workspace)||!nF(e.workspace))return tt("invalid_input","workspace must be an existing absolute directory.");let s=await nX(n,t,e.workspace);if(!s)return tt("unavailable","Cursor did not create a chat.");let o=nq(n),u=Date.now();return o.chats[s]={workspace:e.workspace,title:null,origin:"created",created_at:u,updated_at:u,turns:[]},_(o,t,s,e)},async sendTurn(e){let t=a().backend;if(!t)return d("sessions");let r=nq(n),i=c(r,e.idempotency_key);if(i)return i;let s=r.chats[e.provider_session_id];return s?s.turns.some(e=>r.turns[e]&&"running"===nM(n,r.turns[e]).state)?tt("busy","A turn is in flight."):_(r,t,e.provider_session_id,e):tt("not_found","Unknown Cursor session.")},async observeTurn(e){for(;;){let t=nq(n).turns[e.provider_turn_id];if(!t)return tt("not_found","Unknown Cursor turn.");let r=nM(n,t);if("terminal"===r.state)return tn(r.result);if(e.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,n.pollMs))}},async cancelTurn(e){let t=nq(n),r=t.turns[e.provider_turn_id];if(!r)return tt("not_found","Unknown Cursor turn.");if("terminal"===nM(n,r).state)return tn("already_terminal");if(r.cancel_requested_at=Date.now(),nC(n,t),r.pid){try{process.kill(-r.pid,"SIGTERM")}catch{}let e=r.pid;setTimeout(()=>{try{process.kill(-e,"SIGKILL")}catch{}},2e3).unref()}return tn("cancelled")}}}(e)}],48758)},72414,1537,69312,e=>{"use strict";e.s(["serviceRedactor",()=>ed],72414),e.s(["ProviderSessionError",()=>R,"cancelProviderTurn",()=>Q,"getProviderTurn",()=>Z,"observeProviderTurn",()=>V,"privateProviderIds",()=>ee,"sendProviderTurn",()=>j,"startProviderSession",()=>P],69312),e.s(["attachSessionContextsToTurn",()=>f,"bindSessionContext",()=>m,"endSessionContext",()=>N,"endTurnSessionContexts",()=>h,"mintSessionContext",()=>T],1537);var t=e.i(46786),n=e.i(99904),r=e.i(54799),i=e.i(98307),s=e.i(74455),a=e.i(71711),o=e.i(23325);e.i(78636);var d=e.i(98596),u=e.i(46632),l=e.i(48758),_=e.i(89443);Object.freeze({kind:"service",id:"botmancers-session-context"}),n.default.exec(`
1933
+ ${t.env===process.env?"":JSON.stringify(t.env)}`,r=nw.get(n);if(r&&Date.now()-r.at<3e5)return r.probe;let i=function(e){let t=(0,to.spawnSync)(e.cliPath,["--version"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]}),n=0===t.status?String(t.stdout??"").trim().split("\n").pop()?.trim()??"":"";if(!/^[0-9][\w.+-]{0,80}$/.test(n))return{available:!1,version:null,list:!1};let r=(0,to.spawnSync)(e.cliPath,["ls","--help"],{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});return{available:!0,version:n,list:0===r.status&&/--output-format\b[^\n]*\bjson\b/.test(String(r.stdout??""))}}(t),s=i.available?{available:!1,version:null,list:!1}:function(e){let t=(0,to.spawnSync)(process.execPath,nk("probe",e,[]),{encoding:"utf8",timeout:15e3,env:e.env,stdio:["ignore","pipe","pipe"]});if(0!==t.status)return{available:!1,version:null,list:!1};try{let e=JSON.parse(String(t.stdout).trim().split("\n").pop()??""),n=!0===e.resume&&!0===e.create;return{available:n,version:n&&"string"==typeof e.version?e.version.slice(0,80):null,list:n&&!0===e.list}}catch{return{available:!1,version:null,list:!1}}}(t),a={backend:i.available?"cli":s.available?"sdk":null,cli:i,sdk:s};return nw.set(n,{at:Date.now(),probe:a}),a})(t),o=()=>{var e;let t;return t=null!==(e=a()).backend,{list:"cli"===e.backend?e.cli.list:"sdk"===e.backend&&e.sdk.list,search:!1,read:t,resume:t,start:t,cancel:t,usage:t,authorities:t?["read_only","workspace_write"]:[],max_page_size:50}},d=e=>tt(null===a().backend?"unavailable":"unsupported",`Cursor ${e} is not available.`);function u(e,t,r){let i=r.turns.some(t=>e.turns[t]&&"running"===nM(n,e.turns[t]).state),s=r.turns.length?e.turns[r.turns[r.turns.length-1]]?.started_at??r.updated_at:r.updated_at;return{provider_session_id:t,title:r.title,workspace:r.workspace,created_at:r.created_at,updated_at:Math.max(r.updated_at,s),lifecycle:"open",resumable:!0,busy:i}}async function l(e){let t=await nB(n,e);return t?tn(t):tt("unavailable","Cursor session listing failed.")}function _(e,t,a,o){let d=e.chats[a],u={id:`ct-${(0,s.randomUUID)()}`,chat:a,workspace:d.workspace,prompt:o.prompt,authority:o.authority,backend:t,pid:null,started_at:Date.now(),cancel_requested_at:null,correlation:{...o.correlation}};return e.turns[u.id]=u,e.keys[o.idempotency_key]=u.id,d.turns.push(u.id),nC(n,e),u.pid=function(e,t){r.default.mkdirSync(i.default.join(e.stateDir,"turns"),{recursive:!0});let[n,s]="cli"===t.backend?[e.cliPath,["--print","--output-format","stream-json","--trust","--workspace",t.workspace,..."read_only"===t.authority?["--mode","ask"]:[],"--resume",t.chat,t.prompt]]:[process.execPath,nk("turn",e,[t.chat,t.workspace,"read_only"===t.authority?"ask":"-",t.prompt])];try{let r=(0,to.spawn)("/bin/sh",["-c",'"$@" >"$BM_OUT" 2>"$BM_ERR" </dev/null; echo $? >"$BM_EXIT.tmp" && mv "$BM_EXIT.tmp" "$BM_EXIT"',"sh",n,...s],{cwd:t.workspace,detached:!0,stdio:"ignore",env:{...e.env,BM_OUT:nb(e,t.id,"out"),BM_ERR:nb(e,t.id,"err"),BM_EXIT:nb(e,t.id,"exit"),BOTMANCERS_CORRELATION:JSON.stringify(t.correlation)}});return r.on("error",()=>{}),r.unref(),r.pid??null}catch{return null}}(n,u),nC(n,e),tn({provider_turn_id:u.id,provider_session_id:a})}function c(e,t){let n=e.keys[t];return n&&e.turns[n]?tn({provider_turn_id:n,provider_session_id:e.turns[n].chat}):null}return{kind:ny,probe:a,capabilities:o,async listSessions(e){let t=a().backend;if(!t||!o().list)return d("session listing");let r=await l(t);if(!r.ok)return r;let i=nq(n),s=r.value.filter(t=>{var n,r,i;return n=e.scope,r=t.id,i=t.workspace,"all_provider_sessions"===n.kind||("sessions"===n.kind?n.provider_session_ids.includes(r):null!==i&&n.workspaces.some(e=>i===e||i.startsWith(`${e.replace(/\/+$/,"")}/`)))}),_=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,c=s.slice(_,_+Math.min(e.limit,50)),E=Date.now();for(let e of c)!i.chats[e.id]&&e.workspace&&(i.chats[e.id]={workspace:e.workspace,title:e.title,origin:"listed",created_at:e.created_at??E,updated_at:e.updated_at??E,turns:[]});return nC(n,i),tn({items:c.map(e=>i.chats[e.id]?{...u(i,e.id,i.chats[e.id]),title:e.title??i.chats[e.id].title}:{provider_session_id:e.id,title:e.title,workspace:null,created_at:e.created_at,updated_at:e.updated_at,lifecycle:"open",resumable:!1,busy:!1}),next_cursor:_+c.length<s.length?String(_+c.length):null})},async getSession(e){let t=a().backend;if(!t)return d("sessions");let r=nq(n),i=r.chats[e.provider_session_id];if(!i)return tn(null);if(o().list){let n=await l(t);if(!n.ok)return n;if(!n.value.some(t=>t.id===e.provider_session_id))return tn(null)}return tn(u(r,e.provider_session_id,i))},async importSession(e){let t=a().backend;if(!t)return d("sessions");if(!nL.test(e.provider_session_id))return tt("invalid_input","Not a Cursor session id.");if(!i.default.isAbsolute(e.workspace)||!nF(e.workspace))return tt("invalid_input","workspace must be an existing absolute directory.");let r=nq(n),s=r.chats[e.provider_session_id];if(s)return tn(u(r,e.provider_session_id,s));let _=e.workspace,c=null;if(o().list){let n=await l(t);if(!n.ok)return n;let r=n.value.find(t=>t.id===e.provider_session_id);if(!r)return tt("not_found","Cursor does not list that session.");_=r.workspace??_,c=r.title}let E=Date.now();return r.chats[e.provider_session_id]={workspace:_,title:c,origin:o().list?"listed":"imported",created_at:E,updated_at:E,turns:[]},nC(n,r),tn(u(r,e.provider_session_id,r.chats[e.provider_session_id]))},async readTranscript(e){if(!a().backend)return d("transcripts");let t=nq(n),r=t.chats[e.provider_session_id];if(!r)return tt("not_found","Unknown Cursor session.");let i=[];for(let e of r.turns){let r=t.turns[e];if(r)for(let e of(i.push({seq:i.length+1,role:"user",text:r.prompt,at:r.started_at}),nM(n,r).parsed.steps))i.push({seq:i.length+1,role:e.role,text:e.text,at:e.at})}let s=e.cursor&&/^\d+$/.test(e.cursor)?Number(e.cursor):0,o=i.slice(s,s+Math.min(e.limit,50));return tn({items:o,next_cursor:s+o.length<i.length?String(s+o.length):null})},async startSession(e){let t=a().backend;if(!t)return d("sessions");let r=c(nq(n),e.idempotency_key);if(r)return r;if(!i.default.isAbsolute(e.workspace)||!nF(e.workspace))return tt("invalid_input","workspace must be an existing absolute directory.");let s=await nX(n,t,e.workspace);if(!s)return tt("unavailable","Cursor did not create a chat.");let o=nq(n),u=Date.now();return o.chats[s]={workspace:e.workspace,title:null,origin:"created",created_at:u,updated_at:u,turns:[]},_(o,t,s,e)},async sendTurn(e){let t=a().backend;if(!t)return d("sessions");let r=nq(n),i=c(r,e.idempotency_key);if(i)return i;let s=r.chats[e.provider_session_id];return s?s.turns.some(e=>r.turns[e]&&"running"===nM(n,r.turns[e]).state)?tt("busy","A turn is in flight."):_(r,t,e.provider_session_id,e):tt("not_found","Unknown Cursor session.")},async observeTurn(e){for(;;){let t=nq(n).turns[e.provider_turn_id];if(!t)return tt("not_found","Unknown Cursor turn.");let r=nM(n,t);if("terminal"===r.state)return tn(r.result);if(e.signal?.aborted)return tt("cancelled","observe aborted");if("number"==typeof e.deadline_at&&Date.now()>=e.deadline_at)return tt("timed_out","observe deadline");await new Promise(e=>setTimeout(e,n.pollMs))}},async cancelTurn(e){let t=nq(n),r=t.turns[e.provider_turn_id];if(!r)return tt("not_found","Unknown Cursor turn.");if("terminal"===nM(n,r).state)return tn("already_terminal");if(r.cancel_requested_at=Date.now(),nC(n,t),r.pid){try{process.kill(-r.pid,"SIGTERM")}catch{}let e=r.pid;setTimeout(()=>{try{process.kill(-e,"SIGKILL")}catch{}},2e3).unref()}return tn("cancelled")}}}(e)}],48758)},69312,1537,e=>{"use strict";e.s(["ProviderSessionError",()=>N,"cancelProviderTurn",()=>es,"getProviderTurn",()=>ea,"observeProviderTurn",()=>ei,"privateProviderIds",()=>eo,"sendProviderTurn",()=>ee,"startProviderSession",()=>Z,"syncHistoryAtRegistration",()=>G],69312),e.s(["attachSessionContextsToTurn",()=>m,"bindSessionContext",()=>T,"endSessionContext",()=>h,"endTurnSessionContexts",()=>g,"mintSessionContext",()=>p],1537);var t=e.i(54799),n=e.i(98307),r=e.i(74455),i=e.i(71711),s=e.i(23325);e.i(78636);var a=e.i(98596),o=e.i(46632),d=e.i(48758),u=e.i(99904),l=e.i(89443);Object.freeze({kind:"service",id:"botmancers-session-context"}),u.default.exec(`
1934
1934
  CREATE TABLE IF NOT EXISTS session_contexts (
1935
1935
  id TEXT PRIMARY KEY CHECK (id LIKE 'sctx_%'),
1936
1936
  token_sha256 TEXT NOT NULL UNIQUE CHECK (length(token_sha256) = 64),
@@ -1958,54 +1958,63 @@ ${t.env===process.env?"":JSON.stringify(t.env)}`,r=nO.get(n);if(r&&Date.now()-r.
1958
1958
  CREATE INDEX IF NOT EXISTS idx_session_contexts_launch ON session_contexts(launch_digest, state);
1959
1959
  CREATE INDEX IF NOT EXISTS idx_session_contexts_agent ON session_contexts(agent_id, state);
1960
1960
  CREATE INDEX IF NOT EXISTS idx_session_contexts_turn ON session_contexts(turn_ref, state);
1961
- `);let c=e=>(0,r.createHash)("sha256").update(e,"utf8").digest("hex");function E(e){let t=n.default.prepare("SELECT id FROM provider_sessions WHERE id = ?").get(e);if(t)return t.id;let r=n.default.prepare("SELECT id FROM provider_sessions WHERE binding_id = ?").get(e);return r?.id??null}function p(e){let t=n.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);if(t)return t.agent_id;let r=n.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ?").get(e);return r?.agent_id??null}function T(e){var t,i;if(function(){let e=n.default.prepare("SELECT DISTINCT agent_id FROM session_contexts WHERE state = 'live'").all();for(let{agent_id:t}of e)n.bots.getById(t)&&(0,_.shareFromTurnEnabled)(t)||function(e){let t=Date.now();n.default.prepare("UPDATE session_contexts SET state = 'revoked', end_reason = 'owner_off', ended_at = ?, updated_at = ? WHERE agent_id = ? AND state = 'live'").run(t,t,e).changes}(t)}(),!n.bots.getById(e.agentId)||!(0,_.shareFromTurnEnabled)(e.agentId)||null!==e.sessionRef&&p(e.sessionRef)!==e.agentId)return null;let s=`bmsc_${(0,r.randomBytes)(32).toString("base64url")}`,a=`sctx_${(0,r.randomBytes)(16).toString("base64url")}`,o=Date.now();return n.default.prepare(`
1961
+ `);let _=e=>(0,t.createHash)("sha256").update(e,"utf8").digest("hex");function c(e){let t=u.default.prepare("SELECT id FROM provider_sessions WHERE id = ?").get(e);if(t)return t.id;let n=u.default.prepare("SELECT id FROM provider_sessions WHERE binding_id = ?").get(e);return n?.id??null}function E(e){let t=u.default.prepare("SELECT agent_id FROM session_bindings WHERE id = ?").get(e);if(t)return t.agent_id;let n=u.default.prepare("SELECT agent_id FROM provider_sessions WHERE id = ?").get(e);return n?.agent_id??null}function p(e){var n,r;if(function(){let e=u.default.prepare("SELECT DISTINCT agent_id FROM session_contexts WHERE state = 'live'").all();for(let{agent_id:t}of e)u.bots.getById(t)&&(0,l.shareFromTurnEnabled)(t)||function(e){let t=Date.now();u.default.prepare("UPDATE session_contexts SET state = 'revoked', end_reason = 'owner_off', ended_at = ?, updated_at = ? WHERE agent_id = ? AND state = 'live'").run(t,t,e).changes}(t)}(),!u.bots.getById(e.agentId)||!(0,l.shareFromTurnEnabled)(e.agentId)||null!==e.sessionRef&&E(e.sessionRef)!==e.agentId)return null;let i=`bmsc_${(0,t.randomBytes)(32).toString("base64url")}`,s=`sctx_${(0,t.randomBytes)(16).toString("base64url")}`,a=Date.now();return u.default.prepare(`
1962
1962
  INSERT INTO session_contexts (id, token_sha256, agent_id, session_ref, registry_ref, launch_kind, launch_digest, process_ref, state, created_at, updated_at)
1963
1963
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'live', ?, ?)
1964
- `).run(a,c(s),e.agentId,e.sessionRef,null===e.sessionRef?null:E(e.sessionRef),e.launch.kind,(t=e.launch.kind,i=e.launch.ref,c(`botmancers-session-launch
1965
- ${t}
1966
- ${i}`)),e.processBound?`${process.pid}:${Math.round(performance.timeOrigin)}`:null,o,o),{id:a,token:s,url:function(e=process.env){let t=(e.BOTMANCERS_SESSION_CONTEXT_URL||"").trim();if(t)return t;let n=/^\d{1,5}$/.test((e.PORT||"").trim())?e.PORT.trim():"3333";return`http://127.0.0.1:${n}/api/v0/mcp`}(e.env)}}function m(e,t){return n.default.transaction(()=>{var r;let i=(r=e,n.default.prepare("SELECT * FROM session_contexts WHERE id = ?").get(r));return!!i&&"live"===i.state&&(null!==i.session_ref?i.session_ref===t:p(t)!==i.agent_id?(g(i.id,"ended","session_changed"),!1):(n.default.prepare("UPDATE session_contexts SET session_ref = ?, registry_ref = ?, updated_at = ? WHERE id = ? AND session_ref IS NULL").run(t,E(t),Date.now(),e),!0))}).immediate()}function f(e,t){let r=n.default.prepare("UPDATE session_contexts SET turn_ref = ?, updated_at = ? WHERE id = ? AND state = 'live' AND turn_ref IS NULL"),i=Date.now();for(let n of e)r.run(t,i,n)}function g(e,t,r){let i=Date.now();return n.default.prepare("UPDATE session_contexts SET state = ?, end_reason = ?, ended_at = ?, updated_at = ? WHERE id = ? AND state = 'live'").run(t,r,i,i,e).changes}function h(e,t="turn_end"){let r=Date.now();return n.default.prepare(`
1964
+ `).run(s,_(i),e.agentId,e.sessionRef,null===e.sessionRef?null:c(e.sessionRef),e.launch.kind,(n=e.launch.kind,r=e.launch.ref,_(`botmancers-session-launch
1965
+ ${n}
1966
+ ${r}`)),e.processBound?`${process.pid}:${Math.round(performance.timeOrigin)}`:null,a,a),{id:s,token:i,url:function(e=process.env){let t=(e.BOTMANCERS_SESSION_CONTEXT_URL||"").trim();if(t)return t;let n=/^\d{1,5}$/.test((e.PORT||"").trim())?e.PORT.trim():"3333";return`http://127.0.0.1:${n}/api/v0/mcp`}(e.env)}}function T(e,t){return u.default.transaction(()=>{var n;let r=(n=e,u.default.prepare("SELECT * FROM session_contexts WHERE id = ?").get(n));return!!r&&"live"===r.state&&(null!==r.session_ref?r.session_ref===t:E(t)!==r.agent_id?(f(r.id,"ended","session_changed"),!1):(u.default.prepare("UPDATE session_contexts SET session_ref = ?, registry_ref = ?, updated_at = ? WHERE id = ? AND session_ref IS NULL").run(t,c(t),Date.now(),e),!0))}).immediate()}function m(e,t){let n=u.default.prepare("UPDATE session_contexts SET turn_ref = ?, updated_at = ? WHERE id = ? AND state = 'live' AND turn_ref IS NULL"),r=Date.now();for(let i of e)n.run(t,r,i)}function f(e,t,n){let r=Date.now();return u.default.prepare("UPDATE session_contexts SET state = ?, end_reason = ?, ended_at = ?, updated_at = ? WHERE id = ? AND state = 'live'").run(t,n,r,r,e).changes}function g(e,t="turn_end"){let n=Date.now();return u.default.prepare(`
1967
1967
  UPDATE session_contexts SET state = 'ended', end_reason = ?, ended_at = ?, updated_at = ?
1968
1968
  WHERE turn_ref = ? AND state = 'live' AND launch_kind IN ('claude_turn', 'codex_exec')
1969
- `).run(t,r,r,e).changes}function N(e,t){return 1===g(e,"ended",t)}(0,s.registerBuiltinSessionProvider)("claude",()=>(0,a.createClaudeSessionProvider)()),(0,s.registerSessionProvider)({provider:l.CURSOR_PROVIDER_KIND},l.cursorSessionProviderFactory),(0,s.registerBuiltinSessionProvider)("muse",e=>(0,o.createMuseSessionProvider)(e.id));class R extends Error{code;constructor(e,t){super(t),this.name="ProviderSessionError",this.code=e}}function v(e,t){let n=e.prepare(`
1969
+ `).run(t,n,n,e).changes}function h(e,t){return 1===f(e,"ended",t)}(0,r.registerBuiltinSessionProvider)("claude",()=>(0,i.createClaudeSessionProvider)()),(0,r.registerSessionProvider)({provider:d.CURSOR_PROVIDER_KIND},d.cursorSessionProviderFactory),(0,r.registerBuiltinSessionProvider)("muse",e=>(0,s.createMuseSessionProvider)(e.id));class N extends Error{code;constructor(e,t){super(t),this.name="ProviderSessionError",this.code=e}}function R(e,t){let i=e.prepare(`
1970
1970
  SELECT id, runtime_connection_id, session_scope_kind, session_scope_items, policy_mode, allow_new_sessions, allow_resume_with_edits
1971
1971
  FROM bots WHERE id = ?
1972
- `).get(t);if(!n)throw new R("agent_not_found","No such Agent.");let r=n.runtime_connection_id?e.prepare("SELECT id, provider FROM runtime_connections WHERE id = ?").get(n.runtime_connection_id):void 0,a=r?(0,s.sessionProviderFor)(r):null;if(!r||!a)throw new R("provider_unavailable","The Agent's runtime connection has no session provider.");return{agentId:t,connection:r,provider:a,capabilities:(0,s.normalizeCapabilities)(a.capabilities()),scope:(0,i.readStoredScope)(n),policy:(0,i.readStoredPolicy)(n)}}async function y(e,t,n={}){let r=v(e,t);if(!r.provider.ready)return r;let i=await r.provider.ready(k(n));return i.ok||w(i.error),{...r,capabilities:(0,s.normalizeCapabilities)(r.provider.capabilities())}}function L(e,t){if(!e.capabilities[t])throw new R("unsupported",`The session provider does not support ${t}.`)}function O(e){if(!e.scope)throw new R("scope_missing","The Agent has no session scope.");return e.scope}function w(e,t="provider_failed"){throw new R("unsupported"===e.code?"unsupported":"unsupported_authority"===e.code?"authority_not_allowed":"not_found"===e.code?"session_missing":"busy"===e.code?"busy":"not_resumable"===e.code?"not_resumable":"invalid_input"===e.code?"invalid_input":"unavailable"===e.code?"provider_unavailable":"auth_required"===e.code||"permission_denied"===e.code||"incompatible_version"===e.code||"usage_limit"===e.code?e.code:t,`The session provider refused the call (${e.code}).`)}function k(e){return{correlation:{...e.correlation??{}},signal:e.signal??null,deadline_at:e.deadlineAt??null}}function I(e,t){let n=[];return{minted:n,minter:{mint:r=>{let i=T({agentId:e,sessionRef:t,launch:{kind:r.kind,ref:r.ref},processBound:!0===r.processBound});if(!i)return null;n.push(i.id);let s=i.id;return{token:i.token,url:i.url,end:e=>{N(s,e)}}}},record:(e,t)=>{for(let t of n)m(t,e);f(n,t)},abandon:()=>{for(let e of n)N(e,"launch_failed")}}}let S="SELECT * FROM provider_sessions";function A(e,t,n){let r=e.prepare(`${S} WHERE id = ? AND agent_id = ?`).get(n,t);if(!r)throw new R("session_not_found","No session with that reference.");return r}function b(e,t){e.prepare("INSERT INTO provider_session_events (id, agent_id, session_ref, turn_id, type, detail, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run((0,r.randomUUID)(),t.agentId,t.sessionRef??null,t.turnId??null,t.type,JSON.stringify(t.detail??{}),t.now)}function q(e){let t=(e??"").split("\n").map(e=>e.trim()).find(e=>e.length>0);return t?t.length>80?`${t.slice(0,79).trimEnd()}…`:t:null}function C(e){return"string"==typeof e&&e.startsWith("/")?e:null}function x(e,t,n,r,i){e.prepare(`
1972
+ `).get(t);if(!i)throw new N("agent_not_found","No such Agent.");let s=i.runtime_connection_id?e.prepare("SELECT id, provider FROM runtime_connections WHERE id = ?").get(i.runtime_connection_id):void 0,a=s?(0,r.sessionProviderFor)(s):null;if(!s||!a)throw new N("provider_unavailable","The Agent's runtime connection has no session provider.");return{agentId:t,connection:s,provider:a,capabilities:(0,r.normalizeCapabilities)(a.capabilities()),scope:(0,n.readStoredScope)(i),policy:(0,n.readStoredPolicy)(i)}}async function v(e,t,n={}){let i=R(e,t);if(!i.provider.ready)return i;let s=await i.provider.ready(O(n));return s.ok||w(s.error),{...i,capabilities:(0,r.normalizeCapabilities)(i.provider.capabilities())}}function y(e,t){if(!e.capabilities[t])throw new N("unsupported",`The session provider does not support ${t}.`)}function L(e){if(!e.scope)throw new N("scope_missing","The Agent has no session scope.");return e.scope}function w(e,t="provider_failed"){throw new N("unsupported"===e.code?"unsupported":"unsupported_authority"===e.code?"authority_not_allowed":"not_found"===e.code?"session_missing":"busy"===e.code?"busy":"not_resumable"===e.code?"not_resumable":"invalid_input"===e.code?"invalid_input":"unavailable"===e.code?"provider_unavailable":"auth_required"===e.code||"permission_denied"===e.code||"incompatible_version"===e.code||"usage_limit"===e.code?e.code:t,`The session provider refused the call (${e.code}).`)}function O(e){return{correlation:{...e.correlation??{}},signal:e.signal??null,deadline_at:e.deadlineAt??null}}function k(e,t){let n=[];return{minted:n,minter:{mint:r=>{let i=p({agentId:e,sessionRef:t,launch:{kind:r.kind,ref:r.ref},processBound:!0===r.processBound});if(!i)return null;n.push(i.id);let s=i.id;return{token:i.token,url:i.url,end:e=>{h(s,e)}}}},record:(e,t)=>{for(let t of n)T(t,e);m(n,t)},abandon:()=>{for(let e of n)h(e,"launch_failed")}}}let I="SELECT * FROM provider_sessions";function S(e,t,n){let r=e.prepare(`${I} WHERE id = ? AND agent_id = ?`).get(n,t);if(!r)throw new N("session_not_found","No session with that reference.");return r}function A(e,n){e.prepare("INSERT INTO provider_session_events (id, agent_id, session_ref, turn_id, type, detail, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run((0,t.randomUUID)(),n.agentId,n.sessionRef??null,n.turnId??null,n.type,JSON.stringify(n.detail??{}),n.now)}function b(e){let t=(e??"").split("\n").map(e=>e.trim()).find(e=>e.length>0);return t?t.length>80?`${t.slice(0,79).trimEnd()}…`:t:null}function q(e){return"string"==typeof e&&e.startsWith("/")?e:null}function C(e,t,r){if("all_provider_sessions"===e.kind)return!0;if("sessions"===e.kind)return r.has(t.provider_session_id);let i=q(t.workspace);return null!==i&&e.workspaces.some(e=>(0,n.workspaceContains)(e,i))}function x(e,t,n){return"sessions"!==n.kind||0===n.sessions.length?new Set:new Set(e.prepare(`
1973
+ SELECT provider_session_id FROM provider_sessions
1974
+ WHERE agent_id = ? AND runtime_connection_id = ? AND id IN (SELECT value FROM json_each(?))
1975
+ `).all(t.agentId,t.connection.id,JSON.stringify(n.sessions)).map(e=>e.provider_session_id))}function D(e,n,r,i,s,a=null){var o;let d=(o=r.provider_session_id,e.prepare(`
1976
+ ${I} WHERE agent_id = ? AND runtime_connection_id = ? AND provider_session_id = ?
1977
+ ORDER BY (binding_id IS NULL) DESC, created_at DESC, id DESC LIMIT 1
1978
+ `).get(n.agentId,n.connection.id,o));if(d)return U(e,n,d.id,r,s),{ref:d.id,created:!1};let u=(0,t.randomUUID)();return e.prepare(`
1979
+ INSERT INTO provider_sessions (
1980
+ id, agent_id, runtime_connection_id, provider_kind, provider_session_id, binding_id, origin, title, workspace,
1981
+ provider_created_at, provider_updated_at, availability, lifecycle, resumable, busy, capabilities, last_synced_at, created_at, updated_at
1982
+ ) VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, 'available', ?, ?, ?, ?, ?, ?, ?)
1983
+ `).run(u,n.agentId,n.connection.id,n.provider.kind,r.provider_session_id,i,b(r.title)??a,q(r.workspace),r.created_at,r.updated_at,"archived"===r.lifecycle?"archived":"open",+!!r.resumable,+!!r.busy,JSON.stringify(n.capabilities),s,s,s),{ref:u,created:!0}}function U(e,t,n,r,i){e.prepare(`
1973
1984
  UPDATE provider_sessions SET title = COALESCE(?, title), workspace = COALESCE(?, workspace),
1974
1985
  provider_created_at = COALESCE(?, provider_created_at), provider_updated_at = COALESCE(?, provider_updated_at),
1975
1986
  availability = 'available', lifecycle = ?, resumable = ?, busy = ?, capabilities = ?, last_synced_at = ?, updated_at = ?
1976
1987
  WHERE id = ?
1977
- `).run(q(r.title),C(r.workspace),r.created_at,r.updated_at,"archived"===r.lifecycle?"archived":"open",+!!r.resumable,+!!r.busy,JSON.stringify(t.capabilities),i,i,n)}function D(e,t,n){"missing"===t.availability?e.prepare("UPDATE provider_sessions SET last_synced_at = ? WHERE id = ?").run(n,t.id):(e.prepare("UPDATE provider_sessions SET availability = 'missing', busy = 0, last_synced_at = ?, updated_at = ? WHERE id = ?").run(n,n,t.id),b(e,{agentId:t.agent_id,sessionRef:t.id,type:"session_missing",now:n}))}async function U(e,t,n,r={}){let i=await y(e,t,r),s=A(e,t,n);if(s.runtime_connection_id!==i.connection.id)throw new R("provider_unavailable","The session belongs to another runtime connection.");let a=await i.provider.getSession({...k(r),provider_session_id:s.provider_session_id});a.ok||w(a.error);let o=r.now??Date.now();return e.transaction(()=>{null===a.value?D(e,s,o):(x(e,i,s.id,a.value,o),b(e,{agentId:t,sessionRef:s.id,type:"session_synced",now:o}))}).immediate(),A(e,t,n)}function F(e){if("string"!=typeof e.prompt||!e.prompt.trim())throw new R("invalid_input","prompt is required.");if(e.prompt.length>2e4)throw new R("invalid_input","prompt is longer than 20000 characters.");if("read_only"!==e.authority&&"workspace_write"!==e.authority)throw new R("invalid_input","authority must be read_only or workspace_write.");if("string"!=typeof e.idempotencyKey||!e.idempotencyKey.trim()||e.idempotencyKey.length>200)throw new R("invalid_input","idempotencyKey is required.");if(!e.requester||!["person","bot","service"].includes(e.requester.kind)||!e.requester.id)throw new R("invalid_input","requester is required.")}function W(e,t,n){if(!e.capabilities.authorities.includes(t))throw new R("authority_not_allowed",`The session provider cannot enforce ${t}.`);if(!e.policy)throw new R("authority_not_allowed","The Agent has no launch policy.");if("workspace_write"===t){if("workspace_write"!==e.policy.mode)throw new R("authority_not_allowed","The Agent's policy is read only.");if("send"===n&&!e.policy.allow_resume_with_edits)throw new R("authority_not_allowed","The Agent's policy does not allow resuming with edits.")}}function M(e){return(0,r.createHash)("sha256").update(JSON.stringify(e)).digest("hex")}function H(e,t,n){return`bm-${(0,r.createHash)("sha256").update(`${e}
1978
- ${t.kind}
1979
- ${t.id}
1980
- ${n}`).digest("hex").slice(0,32)}`}function X(e,t,n){return e.prepare("SELECT * FROM provider_session_turns WHERE agent_id = ? AND requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(t,n.requester.kind,n.requester.id,n.idempotencyKey)}function G(e,t){if(e){if(e.request_hash!==t)throw new R("idempotency_conflict","That idempotency key was used for a different turn.");return e}}function B(e,t){let n=function(e,t=[]){let n=[e.provider_session_id,...t].filter(e=>e.length>0).sort((e,t)=>t.length-e.length);return e=>n.reduce((e,t)=>e.split(t).join("[redacted]"),e)}(e.prepare(`${S} WHERE id = ?`).get(t.session_ref),[t.provider_turn_id]);return{turn_ref:t.id,session_ref:t.session_ref,kind:t.kind,authority:t.authority,state:t.state,output:null===t.output?null:n(t.output),failure_code:t.failure_code,usage:"running"===t.state?null:{input_tokens:t.input_tokens??null,output_tokens:t.output_tokens??null,total_cost_usd:t.total_cost_usd??null},created_at:t.created_at,finished_at:t.finished_at}}function $(e,t){return e.prepare(`
1988
+ `).run(b(r.title),q(r.workspace),r.created_at,r.updated_at,"archived"===r.lifecycle?"archived":"open",+!!r.resumable,+!!r.busy,JSON.stringify(t.capabilities),i,i,n)}function F(e,t,n){"missing"===t.availability?e.prepare("UPDATE provider_sessions SET last_synced_at = ? WHERE id = ?").run(n,t.id):(e.prepare("UPDATE provider_sessions SET availability = 'missing', busy = 0, last_synced_at = ?, updated_at = ? WHERE id = ?").run(n,n,t.id),A(e,{agentId:t.agent_id,sessionRef:t.id,type:"session_missing",now:n}))}async function W(e,t,n={}){let r=await v(e,t,n);y(r,"list");let i="string"==typeof n.query&&n.query.trim()?n.query.trim().slice(0,200):null;i&&y(r,"search");let s=L(r),a=x(e,r,s),o=function(e,t){let n=Number(t??e.capabilities.max_page_size);if(!Number.isInteger(n)||n<1)throw new N("invalid_input","limit must be a positive integer.");return Math.min(n,e.capabilities.max_page_size)}(r,n.limit),d=await r.provider.listSessions({...O(n),scope:{kind:s.kind,workspaces:[...s.workspaces],provider_session_ids:[...a]},query:i,cursor:n.cursor??null,limit:o});d.ok||w(d.error);let u=n.now??Date.now(),l=d.value.items.slice(0,o);return e.transaction(()=>{let i={imported:[],updated:[],rejected_out_of_scope:0,next_cursor:d.value.next_cursor??null};for(let o of l){if(!o||"string"!=typeof o.provider_session_id||!o.provider_session_id)continue;if(n.seenCollector&&n.seenCollector.add(o.provider_session_id),!C(s,o,a)){i.rejected_out_of_scope++;continue}let{ref:d,created:l}=D(e,r,o,"discovered",u);(l?i.imported:i.updated).push(d),A(e,{agentId:t,sessionRef:d,type:l?"session_imported":"session_synced",now:u})}return i.rejected_out_of_scope>0&&A(e,{agentId:t,type:"sync_rejected_out_of_scope",detail:{count:i.rejected_out_of_scope},now:u}),i}).immediate()}async function M(e,t,n={}){let r=[],i=[],s=0,a=n.cursor??null,o=a,d="string"==typeof n.query&&n.query.trim().length>0,u=0,l=new Set,_=new Set,c=n.now??Date.now();for(;u<1e3;){let E;if(null!==a){if(l.has(a))return A(e,{agentId:t,type:"sync_incomplete_guarded",detail:{pages:u,reason:"cursor_loop"},now:c}),{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:a,pages:u,complete:!1};l.add(a)}try{E=await W(e,t,{...n,cursor:a,seenCollector:_})}catch(r){if(r instanceof N){if("agent_not_found"===r.code||"scope_missing"===r.code||"unsupported"===r.code)throw r;if("provider_unavailable"===r.code)try{R(e,t)}catch{throw r}else if("invalid_input"===r.code&&void 0!==n.limit&&null!==n.limit){let e=Number(n.limit);if(!Number.isInteger(e)||e<1)throw r}}throw A(e,{agentId:t,type:"sync_error_guarded",detail:{error_code:r instanceof N?r.code:"provider_failed",pages:u},now:c}),r}if(r.push(...E.imported),i.push(...E.updated),s+=E.rejected_out_of_scope,u++,null===(a=E.next_cursor))return function(e,t,n){let r;if(n.hasQuery||null!==n.initialCursor)return;try{r=R(e,t)}catch{return}let i=r.scope;if(!i||"sessions"===i.kind)return;let s=e.prepare(`
1989
+ SELECT COUNT(*) AS n FROM provider_sessions
1990
+ WHERE agent_id = ? AND runtime_connection_id = ? AND origin = 'discovered' AND binding_id IS NULL AND availability = 'available'
1991
+ `).get(t,r.connection.id).n;if(0===n.seenProviderIds.size){s>0&&A(e,{agentId:t,type:"sync_empty_guarded",detail:{stored:s},now:n.now});return}if(0===s)return;let a=x(e,r,i),o=e.prepare(`
1992
+ SELECT * FROM provider_sessions
1993
+ WHERE agent_id = ? AND runtime_connection_id = ? AND origin = 'discovered' AND binding_id IS NULL AND availability = 'available'
1994
+ `).all(t,r.connection.id);e.transaction(()=>{for(let t of o)C(i,{workspace:t.workspace,provider_session_id:t.provider_session_id},a)&&(n.seenProviderIds.has(t.provider_session_id)||F(e,t,n.now))}).immediate()}(e,t,{seenProviderIds:_,hasQuery:d,initialCursor:o,now:c}),{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:null,pages:u,complete:!0}}return A(e,{agentId:t,type:"sync_incomplete_guarded",detail:{pages:u,reason:"page_cap"},now:c}),{imported:r,updated:i,rejected_out_of_scope:s,next_cursor:a,pages:u,complete:!1}}function H(e,t,n){A(e,{agentId:t,type:"sync_completed",detail:{imported:n.imported,rejected_out_of_scope:n.rejected_out_of_scope,complete:n.complete},now:n.now})}function X(e,t,n){A(e,{agentId:t,type:"sync_failed",detail:{error_code:n.error_code},now:n.now})}async function G(e,t,n={}){let r,i=n.now??Date.now();try{R(e,t)}catch(n){if(n instanceof N&&"provider_unavailable"===n.code)return H(e,t,{imported:0,rejected_out_of_scope:0,complete:!0,now:i}),{outcome:"unsupported",imported:0,rejected_out_of_scope:0,complete:!0};return{outcome:"failed",imported:0,rejected_out_of_scope:0,complete:!1,error_code:n instanceof N?n.code:"provider_failed"}}try{r=await v(e,t,n)}catch(r){if(r instanceof N&&"unsupported"===r.code)return H(e,t,{imported:0,rejected_out_of_scope:0,complete:!0,now:i}),{outcome:"unsupported",imported:0,rejected_out_of_scope:0,complete:!0};let n=r instanceof N?r.code:"provider_failed";return X(e,t,{error_code:n,now:i}),{outcome:"failed",imported:0,rejected_out_of_scope:0,complete:!1,error_code:n}}if(!r.capabilities.list)return H(e,t,{imported:0,rejected_out_of_scope:0,complete:!0,now:i}),{outcome:"unsupported",imported:0,rejected_out_of_scope:0,complete:!0};try{let r=await M(e,t,n);return H(e,t,{imported:r.imported.length,rejected_out_of_scope:r.rejected_out_of_scope,complete:r.complete,now:i}),{outcome:"synced",imported:r.imported.length,rejected_out_of_scope:r.rejected_out_of_scope,complete:r.complete}}catch(r){if(r instanceof N&&"unsupported"===r.code)return H(e,t,{imported:0,rejected_out_of_scope:0,complete:!0,now:i}),{outcome:"unsupported",imported:0,rejected_out_of_scope:0,complete:!0};let n=r instanceof N?r.code:"provider_failed";return X(e,t,{error_code:n,now:i}),{outcome:"failed",imported:0,rejected_out_of_scope:0,complete:!1,error_code:n}}}async function B(e,t,n,r={}){let i=await v(e,t,r),s=S(e,t,n);if(s.runtime_connection_id!==i.connection.id)throw new N("provider_unavailable","The session belongs to another runtime connection.");let a=await i.provider.getSession({...O(r),provider_session_id:s.provider_session_id});a.ok||w(a.error);let o=r.now??Date.now();return e.transaction(()=>{null===a.value?F(e,s,o):(U(e,i,s.id,a.value,o),A(e,{agentId:t,sessionRef:s.id,type:"session_synced",now:o}))}).immediate(),S(e,t,n)}function $(e){if("string"!=typeof e.prompt||!e.prompt.trim())throw new N("invalid_input","prompt is required.");if(e.prompt.length>2e4)throw new N("invalid_input","prompt is longer than 20000 characters.");if("read_only"!==e.authority&&"workspace_write"!==e.authority)throw new N("invalid_input","authority must be read_only or workspace_write.");if("string"!=typeof e.idempotencyKey||!e.idempotencyKey.trim()||e.idempotencyKey.length>200)throw new N("invalid_input","idempotencyKey is required.");if(!e.requester||!["person","bot","service"].includes(e.requester.kind)||!e.requester.id)throw new N("invalid_input","requester is required.")}function K(e,t,n){if(!e.capabilities.authorities.includes(t))throw new N("authority_not_allowed",`The session provider cannot enforce ${t}.`);if(!e.policy)throw new N("authority_not_allowed","The Agent has no launch policy.");if("workspace_write"===t){if("workspace_write"!==e.policy.mode)throw new N("authority_not_allowed","The Agent's policy is read only.");if("send"===n&&!e.policy.allow_resume_with_edits)throw new N("authority_not_allowed","The Agent's policy does not allow resuming with edits.")}}function P(e){return(0,t.createHash)("sha256").update(JSON.stringify(e)).digest("hex")}function j(e,n,r){return`bm-${(0,t.createHash)("sha256").update(`${e}
1995
+ ${n.kind}
1996
+ ${n.id}
1997
+ ${r}`).digest("hex").slice(0,32)}`}function Y(e,t,n){return e.prepare("SELECT * FROM provider_session_turns WHERE agent_id = ? AND requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(t,n.requester.kind,n.requester.id,n.idempotencyKey)}function z(e,t){if(e){if(e.request_hash!==t)throw new N("idempotency_conflict","That idempotency key was used for a different turn.");return e}}function J(e,t){let n=function(e,t=[]){let n=[e.provider_session_id,...t].filter(e=>e.length>0).sort((e,t)=>t.length-e.length);return e=>n.reduce((e,t)=>e.split(t).join("[redacted]"),e)}(e.prepare(`${I} WHERE id = ?`).get(t.session_ref),[t.provider_turn_id]);return{turn_ref:t.id,session_ref:t.session_ref,kind:t.kind,authority:t.authority,state:t.state,output:null===t.output?null:n(t.output),failure_code:t.failure_code,usage:"running"===t.state?null:{input_tokens:t.input_tokens??null,output_tokens:t.output_tokens??null,total_cost_usd:t.total_cost_usd??null},created_at:t.created_at,finished_at:t.finished_at}}function V(e,t){return e.prepare(`
1981
1998
  INSERT INTO provider_session_turns (
1982
1999
  id, session_ref, agent_id, kind, authority, requester_kind, requester_id, idempotency_key, request_hash,
1983
2000
  provider_turn_id, state, output, failure_code, correlation, created_at, finished_at
1984
2001
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', NULL, NULL, ?, ?, NULL)
1985
- `).run(t.id,t.session_ref,t.agent_id,t.kind,t.authority,t.requester_kind,t.requester_id,t.idempotency_key,t.request_hash,t.provider_turn_id,t.correlation,t.created_at),e.prepare("UPDATE provider_sessions SET busy = 1, updated_at = ? WHERE id = ?").run(t.created_at,t.session_ref),b(e,{agentId:t.agent_id,sessionRef:t.session_ref,turnId:t.id,type:"turn_started",detail:{kind:t.kind,authority:t.authority},now:t.created_at}),e.prepare("SELECT * FROM provider_session_turns WHERE id = ?").get(t.id)}function K(e){return e instanceof Error&&/UNIQUE constraint failed: provider_session_turns/.test(e.message)}async function P(e,t,n){F(n);let s=C(n.workspace);if(!s)throw new R("invalid_input","workspace must be an absolute path.");v(e,t);let a=M({kind:"start",workspace:s,prompt:n.prompt,authority:n.authority}),o=G(X(e,t,n),a);if(o)return{turn:B(e,o),replayed:!0};let d=await y(e,t,n);L(d,"start");let u=O(d);if("sessions"===u.kind)throw new R("out_of_scope","The Agent is scoped to selected sessions; it cannot start new ones.");if("workspaces"===u.kind&&!u.workspaces.some(e=>(0,i.workspaceContains)(e,s)))throw new R("out_of_scope","The workspace is outside the Agent's session scope.");if(!d.policy?.allow_new_sessions)throw new R("new_sessions_not_allowed","The Agent's policy does not allow new sessions.");W(d,n.authority,"start");let l=I(t,null),_=await d.provider.startSession({...k(n),workspace:s,prompt:n.prompt,authority:n.authority,idempotency_key:H(t,n.requester,n.idempotencyKey),session_context:l.minter});_.ok||(l.abandon(),w(_.error));let c=_.value,E=await d.provider.getSession({...k(n),provider_session_id:c.provider_session_id}),p=n.now??Date.now();try{let i=e.transaction(()=>{let i=E.ok&&E.value?{...E.value,provider_session_id:c.provider_session_id,workspace:E.value.workspace??s}:{provider_session_id:c.provider_session_id,title:null,workspace:s,created_at:p,updated_at:p,lifecycle:"open",resumable:!1,busy:!0},{ref:o,created:u}=function(e,t,n,i,s,a=null){var o;let d=(o=n.provider_session_id,e.prepare(`
1986
- ${S} WHERE agent_id = ? AND runtime_connection_id = ? AND provider_session_id = ?
1987
- ORDER BY (binding_id IS NULL) DESC, created_at DESC, id DESC LIMIT 1
1988
- `).get(t.agentId,t.connection.id,o));if(d)return x(e,t,d.id,n,s),{ref:d.id,created:!1};let u=(0,r.randomUUID)();return e.prepare(`
1989
- INSERT INTO provider_sessions (
1990
- id, agent_id, runtime_connection_id, provider_kind, provider_session_id, binding_id, origin, title, workspace,
1991
- provider_created_at, provider_updated_at, availability, lifecycle, resumable, busy, capabilities, last_synced_at, created_at, updated_at
1992
- ) VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, 'available', ?, ?, ?, ?, ?, ?, ?)
1993
- `).run(u,t.agentId,t.connection.id,t.provider.kind,n.provider_session_id,i,q(n.title)??a,C(n.workspace),n.created_at,n.updated_at,"archived"===n.lifecycle?"archived":"open",+!!n.resumable,+!!n.busy,JSON.stringify(t.capabilities),s,s,s),{ref:u,created:!0}}(e,d,i,"started",p,q(n.prompt));return u&&b(e,{agentId:t,sessionRef:o,type:"session_started",detail:{authority:n.authority},now:p}),$(e,{id:(0,r.randomUUID)(),session_ref:o,agent_id:t,kind:"start",authority:n.authority,requester_kind:n.requester.kind,requester_id:n.requester.id,idempotency_key:n.idempotencyKey,request_hash:a,provider_turn_id:c.provider_turn_id,correlation:JSON.stringify(n.correlation??{}),created_at:p})}).immediate();return l.record(i.session_ref,i.id),{turn:B(e,i),replayed:!1}}catch(r){if(l.abandon(),K(r))return{turn:B(e,G(X(e,t,n),a)),replayed:!0};throw r}}async function j(e,t,n,s){F(s),v(e,t);let a=A(e,t,n),o=M({kind:"send",ref:n,prompt:s.prompt,authority:s.authority}),d=G(X(e,t,s),o);if(d)return{turn:B(e,d),replayed:!0};let u=await y(e,t,s);if(L(u,"resume"),a.runtime_connection_id!==u.connection.id)throw new R("provider_unavailable","The session belongs to another runtime connection.");let l=O(u);if("binding"!==a.origin&&!("all_provider_sessions"===l.kind||"sessions"===l.kind&&l.sessions.includes(a.id)||"workspaces"===l.kind&&null!==a.workspace&&l.workspaces.some(e=>(0,i.workspaceContains)(e,a.workspace))))throw new R("out_of_scope","The session is outside the Agent's session scope.");W(u,s.authority,"send");let _=await U(e,t,n,s);if("missing"===_.availability)throw new R("session_missing","The provider no longer has this session.");if(1!==_.resumable)throw new R("not_resumable","The provider cannot resume this session.");let c=e.prepare("SELECT 1 FROM provider_session_turns WHERE session_ref = ? AND state = 'running'").get(n);if(1===_.busy||c)throw new R("busy","The session has a turn in flight.");let E=I(t,n),p=await u.provider.sendTurn({...k(s),provider_session_id:a.provider_session_id,prompt:s.prompt,authority:s.authority,idempotency_key:H(t,s.requester,s.idempotencyKey),session_context:E.minter});p.ok||(E.abandon(),w(p.error));let T=s.now??Date.now();try{let i=e.transaction(()=>$(e,{id:(0,r.randomUUID)(),session_ref:n,agent_id:t,kind:"send",authority:s.authority,requester_kind:s.requester.kind,requester_id:s.requester.id,idempotency_key:s.idempotencyKey,request_hash:o,provider_turn_id:p.value.provider_turn_id,correlation:JSON.stringify(s.correlation??{}),created_at:T})).immediate();return E.record(n,i.id),{turn:B(e,i),replayed:!1}}catch(n){if(E.abandon(),K(n))return{turn:B(e,G(X(e,t,s),o)),replayed:!0};throw n}}function Y(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);if(!r)throw new R("turn_not_found","No turn with that reference.");return r}function z(e){return"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null}function J(e,t,n,r){e.transaction(()=>{var i;let a="completed"===n.status?"completed":"cancelled"===n.status?"cancelled":"failed",o=n.usage??null;if(0===e.prepare(`
2002
+ `).run(t.id,t.session_ref,t.agent_id,t.kind,t.authority,t.requester_kind,t.requester_id,t.idempotency_key,t.request_hash,t.provider_turn_id,t.correlation,t.created_at),e.prepare("UPDATE provider_sessions SET busy = 1, updated_at = ? WHERE id = ?").run(t.created_at,t.session_ref),A(e,{agentId:t.agent_id,sessionRef:t.session_ref,turnId:t.id,type:"turn_started",detail:{kind:t.kind,authority:t.authority},now:t.created_at}),e.prepare("SELECT * FROM provider_session_turns WHERE id = ?").get(t.id)}function Q(e){return e instanceof Error&&/UNIQUE constraint failed: provider_session_turns/.test(e.message)}async function Z(e,r,i){$(i);let s=q(i.workspace);if(!s)throw new N("invalid_input","workspace must be an absolute path.");R(e,r);let a=P({kind:"start",workspace:s,prompt:i.prompt,authority:i.authority}),o=z(Y(e,r,i),a);if(o)return{turn:J(e,o),replayed:!0};let d=await v(e,r,i);y(d,"start");let u=L(d);if("sessions"===u.kind)throw new N("out_of_scope","The Agent is scoped to selected sessions; it cannot start new ones.");if("workspaces"===u.kind&&!u.workspaces.some(e=>(0,n.workspaceContains)(e,s)))throw new N("out_of_scope","The workspace is outside the Agent's session scope.");if(!d.policy?.allow_new_sessions)throw new N("new_sessions_not_allowed","The Agent's policy does not allow new sessions.");K(d,i.authority,"start");let l=k(r,null),_=await d.provider.startSession({...O(i),workspace:s,prompt:i.prompt,authority:i.authority,idempotency_key:j(r,i.requester,i.idempotencyKey),session_context:l.minter});_.ok||(l.abandon(),w(_.error));let c=_.value,E=await d.provider.getSession({...O(i),provider_session_id:c.provider_session_id}),p=i.now??Date.now();try{let n=e.transaction(()=>{let n=E.ok&&E.value?{...E.value,provider_session_id:c.provider_session_id,workspace:E.value.workspace??s}:{provider_session_id:c.provider_session_id,title:null,workspace:s,created_at:p,updated_at:p,lifecycle:"open",resumable:!1,busy:!0},{ref:o,created:u}=D(e,d,n,"started",p,b(i.prompt));return u&&A(e,{agentId:r,sessionRef:o,type:"session_started",detail:{authority:i.authority},now:p}),V(e,{id:(0,t.randomUUID)(),session_ref:o,agent_id:r,kind:"start",authority:i.authority,requester_kind:i.requester.kind,requester_id:i.requester.id,idempotency_key:i.idempotencyKey,request_hash:a,provider_turn_id:c.provider_turn_id,correlation:JSON.stringify(i.correlation??{}),created_at:p})}).immediate();return l.record(n.session_ref,n.id),{turn:J(e,n),replayed:!1}}catch(t){if(l.abandon(),Q(t))return{turn:J(e,z(Y(e,r,i),a)),replayed:!0};throw t}}async function ee(e,r,i,s){$(s),R(e,r);let a=S(e,r,i),o=P({kind:"send",ref:i,prompt:s.prompt,authority:s.authority}),d=z(Y(e,r,s),o);if(d)return{turn:J(e,d),replayed:!0};let u=await v(e,r,s);if(y(u,"resume"),a.runtime_connection_id!==u.connection.id)throw new N("provider_unavailable","The session belongs to another runtime connection.");let l=L(u);if("binding"!==a.origin&&!("all_provider_sessions"===l.kind||"sessions"===l.kind&&l.sessions.includes(a.id)||"workspaces"===l.kind&&null!==a.workspace&&l.workspaces.some(e=>(0,n.workspaceContains)(e,a.workspace))))throw new N("out_of_scope","The session is outside the Agent's session scope.");K(u,s.authority,"send");let _=await B(e,r,i,s);if("missing"===_.availability)throw new N("session_missing","The provider no longer has this session.");if(1!==_.resumable)throw new N("not_resumable","The provider cannot resume this session.");let c=e.prepare("SELECT 1 FROM provider_session_turns WHERE session_ref = ? AND state = 'running'").get(i);if(1===_.busy||c)throw new N("busy","The session has a turn in flight.");let E=k(r,i),p=await u.provider.sendTurn({...O(s),provider_session_id:a.provider_session_id,prompt:s.prompt,authority:s.authority,idempotency_key:j(r,s.requester,s.idempotencyKey),session_context:E.minter});p.ok||(E.abandon(),w(p.error));let T=s.now??Date.now();try{let n=e.transaction(()=>V(e,{id:(0,t.randomUUID)(),session_ref:i,agent_id:r,kind:"send",authority:s.authority,requester_kind:s.requester.kind,requester_id:s.requester.id,idempotency_key:s.idempotencyKey,request_hash:o,provider_turn_id:p.value.provider_turn_id,correlation:JSON.stringify(s.correlation??{}),created_at:T})).immediate();return E.record(i,n.id),{turn:J(e,n),replayed:!1}}catch(t){if(E.abandon(),Q(t))return{turn:J(e,z(Y(e,r,s),o)),replayed:!0};throw t}}function et(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);if(!r)throw new N("turn_not_found","No turn with that reference.");return r}function en(e){return"number"==typeof e&&Number.isInteger(e)&&e>=0?e:null}function er(e,t,n,i){e.transaction(()=>{var s;let d="completed"===n.status?"completed":"cancelled"===n.status?"cancelled":"failed",u=n.usage??null;if(0===e.prepare(`
1994
2003
  UPDATE provider_session_turns SET state = ?, output = ?, failure_code = ?, finished_at = ?, input_tokens = ?, output_tokens = ?, total_cost_usd = ?
1995
2004
  WHERE id = ? AND state = 'running'
1996
- `).run(a,"string"==typeof n.output?n.output:null,n.failure?String(n.failure.code).slice(0,100):null,"number"==typeof n.finished_at?n.finished_at:r,z(o?.input_tokens),z(o?.output_tokens),"number"==typeof(i=o?.total_cost_usd)&&Number.isFinite(i)&&i>=0?i:null,t.id).changes)return;if(h(t.id),n.failure?.code==="session_missing"){let n=e.prepare(`${S} WHERE id = ?`).get(t.session_ref);D(e,n,r)}let l=e.prepare("SELECT provider_kind FROM provider_sessions WHERE id = ?").get(t.session_ref);(0,u.recordTurnUsageSample)(e,t.id,t.session_ref,{agentId:t.agent_id,provider:l?.provider_kind??"unknown",usage:function(e){try{return(0,d.usageFromEvent)(e)}catch{return null}}(n.usage),observedAt:"number"==typeof n.finished_at?n.finished_at:r,now:r}),e.prepare(`
2005
+ `).run(d,"string"==typeof n.output?n.output:null,n.failure?String(n.failure.code).slice(0,100):null,"number"==typeof n.finished_at?n.finished_at:i,en(u?.input_tokens),en(u?.output_tokens),"number"==typeof(s=u?.total_cost_usd)&&Number.isFinite(s)&&s>=0?s:null,t.id).changes)return;if(g(t.id),n.failure?.code==="session_missing"){let n=e.prepare(`${I} WHERE id = ?`).get(t.session_ref);F(e,n,i)}let l=e.prepare("SELECT provider_kind FROM provider_sessions WHERE id = ?").get(t.session_ref);(0,o.recordTurnUsageSample)(e,t.id,t.session_ref,{agentId:t.agent_id,provider:l?.provider_kind??"unknown",usage:function(e){try{return(0,a.usageFromEvent)(e)}catch{return null}}(n.usage),observedAt:"number"==typeof n.finished_at?n.finished_at:i,now:i}),e.prepare(`
1997
2006
  UPDATE provider_sessions SET busy = CASE WHEN EXISTS (
1998
2007
  SELECT 1 FROM provider_session_turns WHERE session_ref = ? AND state = 'running') THEN 1 ELSE 0 END,
1999
2008
  provider_updated_at = ?, updated_at = ? WHERE id = ?
2000
- `).run(t.session_ref,r,r,t.session_ref);let _=(0,s.normalizeUsage)(o&&void 0===o.cost_usd&&"total_cost_usd"in o?{...o,cost_usd:o.total_cost_usd}:o);b(e,{agentId:t.agent_id,sessionRef:t.session_ref,turnId:t.id,type:`turn_${a}`,detail:_?{usage:_}:{},now:r})}).immediate()}async function V(e,t,n,r={}){let i=Y(e,t,n);if("running"!==i.state)return B(e,i);let s=await y(e,t,r),a=await s.provider.observeTurn({...k(r),provider_turn_id:i.provider_turn_id});if(!a.ok){if("cancelled"===a.error.code||"timed_out"===a.error.code)return B(e,Y(e,t,n));w(a.error)}return J(e,i,a.value,r.now??Date.now()),B(e,Y(e,t,n))}async function Q(e,t,n,r={}){let i=Y(e,t,n);if("running"!==i.state)return{turn:B(e,i),outcome:"already_terminal"};let s=await y(e,t,r);L(s,"cancel");let a=r.now??Date.now();b(e,{agentId:t,sessionRef:i.session_ref,turnId:i.id,type:"cancel_requested",now:a});let o=await s.provider.cancelTurn({...k(r),provider_turn_id:i.provider_turn_id});return(o.ok||w(o.error),"cancelled"===o.value)?(J(e,i,{status:"cancelled",provider_session_id:"",output:null,failure:{code:"cancelled",message:""},finished_at:a},a),{turn:B(e,Y(e,t,n)),outcome:"cancelled"}):{turn:await V(e,t,n,r),outcome:"already_terminal"}}function Z(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);return r?B(e,r):void 0}function ee(e){return e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get()?[...e.prepare("SELECT provider_session_id AS id FROM provider_sessions").all(),...e.prepare("SELECT provider_turn_id AS id FROM provider_session_turns").all()].map(e=>e.id):[]}let et=/^(cwd|working_directory|workspace|default_workspace|workspaces|deck|deck_id|deck_name|hermes_profile|hermes_profile_path)$/,en=/(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,er=/^(id|ref|session_ref|sessionRef|kind)$|(request|conversation|agent|message|attempt|exchange|event|wake|grant|binding|finalization|bot|participant|sender|requester|origin|group)_?id$/i;function ei(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function es(e){try{return JSON.parse(e)}catch{return null}}function ea(e,t,n=!1){if("string"==typeof e)n&&t.add(e);else if(Array.isArray(e))for(let r of e)ea(r,t,n);else if(ei(e))for(let[r,i]of Object.entries(e))ea(i,t,n||et.test(r))}function eo(e,t,n){return t.reduce((e,t)=>t.length>=6?e.includes(t)?e.split(t).join(n):e:e.includes(t)?e.replace(RegExp(`(?<![A-Za-z0-9])${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![A-Za-z0-9])`,"g"),n):e,e)}function ed(){let e,r=function(){let e=new Set;for(let t of n.default.prepare("SELECT external_session_id AS id FROM session_bindings").all())e.add(t.id);for(let t of ee(n.default))e.add(t);for(let t of n.default.prepare("SELECT external_session_id, external_run_id FROM work_attempts WHERE external_session_id IS NOT NULL OR external_run_id IS NOT NULL").all())t.external_session_id&&e.add(t.external_session_id),t.external_run_id&&e.add(t.external_run_id);return[...e].filter(e=>e.length>0).sort((e,t)=>t.length-e.length)}(),i=function(){let e=new Set;for(let t of n.bots.getAll())ea(t,e),"string"==typeof t.session_scope_items&&ea(es(t.session_scope_items),e,!0);if(n.default.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())for(let t of n.default.prepare("SELECT workspace FROM provider_sessions WHERE workspace IS NOT NULL").all())e.add(t.workspace);for(let n of[...e]){var r;let i="~"===(r=n)?t.default.homedir():r.startsWith("~/")?`${t.default.homedir()}/${r.slice(2)}`:null;i&&e.add(i),n.length>1&&n.endsWith("/")&&e.add(n.replace(/\/+$/,""))}for(let t of n.default.prepare(`
2009
+ `).run(t.session_ref,i,i,t.session_ref);let _=(0,r.normalizeUsage)(u&&void 0===u.cost_usd&&"total_cost_usd"in u?{...u,cost_usd:u.total_cost_usd}:u);A(e,{agentId:t.agent_id,sessionRef:t.session_ref,turnId:t.id,type:`turn_${d}`,detail:_?{usage:_}:{},now:i})}).immediate()}async function ei(e,t,n,r={}){let i=et(e,t,n);if("running"!==i.state)return J(e,i);let s=await v(e,t,r),a=await s.provider.observeTurn({...O(r),provider_turn_id:i.provider_turn_id});if(!a.ok){if("cancelled"===a.error.code||"timed_out"===a.error.code)return J(e,et(e,t,n));w(a.error)}return er(e,i,a.value,r.now??Date.now()),J(e,et(e,t,n))}async function es(e,t,n,r={}){let i=et(e,t,n);if("running"!==i.state)return{turn:J(e,i),outcome:"already_terminal"};let s=await v(e,t,r);y(s,"cancel");let a=r.now??Date.now();A(e,{agentId:t,sessionRef:i.session_ref,turnId:i.id,type:"cancel_requested",now:a});let o=await s.provider.cancelTurn({...O(r),provider_turn_id:i.provider_turn_id});return(o.ok||w(o.error),"cancelled"===o.value)?(er(e,i,{status:"cancelled",provider_session_id:"",output:null,failure:{code:"cancelled",message:""},finished_at:a},a),{turn:J(e,et(e,t,n)),outcome:"cancelled"}):{turn:await ei(e,t,n,r),outcome:"already_terminal"}}function ea(e,t,n){let r=e.prepare("SELECT * FROM provider_session_turns WHERE id = ? AND agent_id = ?").get(n,t);return r?J(e,r):void 0}function eo(e){return e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get()?[...e.prepare("SELECT provider_session_id AS id FROM provider_sessions").all(),...e.prepare("SELECT provider_turn_id AS id FROM provider_session_turns").all()].map(e=>e.id):[]}},72414,e=>{"use strict";e.s(["serviceRedactor",()=>_]);var t=e.i(46786),n=e.i(99904),r=e.i(69312);let i=/^(cwd|working_directory|workspace|default_workspace|workspaces|deck|deck_id|deck_name|hermes_profile|hermes_profile_path)$/,s=/(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,a=/^(id|ref|session_ref|sessionRef|kind)$|(request|conversation|agent|message|attempt|exchange|event|wake|grant|binding|finalization|bot|participant|sender|requester|origin|group)_?id$/i;function o(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function d(e){try{return JSON.parse(e)}catch{return null}}function u(e,t,n=!1){if("string"==typeof e)n&&t.add(e);else if(Array.isArray(e))for(let r of e)u(r,t,n);else if(o(e))for(let[r,s]of Object.entries(e))u(s,t,n||i.test(r))}function l(e,t,n){return t.reduce((e,t)=>t.length>=6?e.includes(t)?e.split(t).join(n):e:e.includes(t)?e.replace(RegExp(`(?<![A-Za-z0-9])${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![A-Za-z0-9])`,"g"),n):e,e)}function _(){let e,i=function(){let e=new Set;for(let t of n.default.prepare("SELECT external_session_id AS id FROM session_bindings").all())e.add(t.id);for(let t of(0,r.privateProviderIds)(n.default))e.add(t);for(let t of n.default.prepare("SELECT external_session_id, external_run_id FROM work_attempts WHERE external_session_id IS NOT NULL OR external_run_id IS NOT NULL").all())t.external_session_id&&e.add(t.external_session_id),t.external_run_id&&e.add(t.external_run_id);return[...e].filter(e=>e.length>0).sort((e,t)=>t.length-e.length)}(),_=function(){let e=new Set;for(let t of n.bots.getAll())u(t,e),"string"==typeof t.session_scope_items&&u(d(t.session_scope_items),e,!0);if(n.default.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'provider_sessions'").get())for(let t of n.default.prepare("SELECT workspace FROM provider_sessions WHERE workspace IS NOT NULL").all())e.add(t.workspace);for(let n of[...e]){var r;let i="~"===(r=n)?t.default.homedir():r.startsWith("~/")?`${t.default.homedir()}/${r.slice(2)}`:null;i&&e.add(i),n.length>1&&n.endsWith("/")&&e.add(n.replace(/\/+$/,""))}for(let t of n.default.prepare(`
2001
2010
  SELECT launch_snapshot AS snapshot FROM work_attempts WHERE launch_snapshot IS NOT NULL
2002
2011
  UNION ALL SELECT snapshot FROM launch_snapshots
2003
- `).all())ea(es(t.snapshot),e);return[...new Set([...[...e].filter(e=>e.trim().length>=4),...Object.entries(process.env).filter(([e,t])=>en.test(e)&&"string"==typeof t).flatMap(([,e])=>[e,...e.split(/[\s,=]+/)]).filter(e=>e.length>=8)])].sort((e,t)=>t.length-e.length)}(),s=(e=t.default.homedir().replace(/\/+$/,"")).length<4?null:RegExp(`${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?=$|[/\\s"'\`)\\]}>,;:])[^\\s"'\`)\\]}>,;]*`,"g"),a=e=>{let t=eo(eo(e,r,"[redacted runtime id]"),i,"[redacted]");return s?t.replace(s,"[redacted]"):t},o=(e,t)=>"string"==typeof e?null!==t&&er.test(t)?e:a(e):Array.isArray(e)?e.map(e=>o(e,null)):ei(e)?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,o(t,e)])):e;return{text:a,deep:e=>o(e,null)}}},89443,e=>{"use strict";e.s(["SHARE_LIMITS",()=>ts,"ShareAskError",()=>tO,"ShareError",()=>to,"askShare",()=>tS,"audienceAllowed",()=>tg,"loadSessionSharesConfig",()=>tf,"shareAnswer",()=>tA,"shareFromTurnEnabled",()=>th,"shareRow",()=>tN,"shareState",()=>tR,"sweepExpiredShares",()=>tL],89443);var t=e.i(22734),n=e.i(14747),r=e.i(54799),i=e.i(99904),s=e.i(99684),a=e.i(72414),o=e.i(46786),d=e.i(98307),u=e.i(94057),l=e.i(89965);e.i(46632);var _=e.i(69312),c=e.i(76422),E=e.i(34923);let p=Object.freeze({maxWakeDepth:3,rootBudget:12,maxContinuations:24,globalConcurrency:4,perTargetConcurrency:1}),T={maxWakeDepth:"BOTMANCERS_WAKE_MAX_DEPTH",rootBudget:"BOTMANCERS_WAKE_ROOT_BUDGET"};function m(e=process.env){let t=(t,n)=>{let r=e[T[t]]?.trim(),i=r&&/^\d+$/.test(r)?Number(r):NaN;return Number.isSafeInteger(i)&&i>=n&&i<p[t]?i:p[t]},n=t("rootBudget",1);return{...p,maxWakeDepth:t("maxWakeDepth",0),rootBudget:n,maxContinuations:2*n}}let f=Object.freeze({kind:"person",id:"local-owner"}),g=Object.freeze({kind:"service",id:"botmancers-exchanges"}),h=["ask","continue"],N={invalid_request:400,authority_not_allowed:403,recursive_exchange:403,conversation_not_found:404,agent_not_found:404,session_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,idempotency_conflict:409,exchange_not_found:404,exchange_terminal:409,invalid_transition:409};class R extends Error{code;constructor(e,t){super(t),this.name="ExchangeError",this.code=e}get status(){return N[this.code]}}let v=["decisions","constraints","artifacts","open_questions"];function y(e){return"string"==typeof e&&e.trim().length>0}function L(e,...t){return t.reduce((e,t)=>t?e.split(t).join("[redacted session id]"):e,e)}let O="\n[truncated]";function w(e,t){return e.length<=t?{content:e,truncated:!1}:t<=O.length?{content:e.slice(0,t),truncated:!0}:{content:`${e.slice(0,t-O.length)}${O}`,truncated:!0}}let k="This is a read-only turn: do not edit files, change state, start other work, or emit Wakes.";function I(e,t){return`${e}:
2012
+ `).all())u(d(t.snapshot),e);return[...new Set([...[...e].filter(e=>e.trim().length>=4),...Object.entries(process.env).filter(([e,t])=>s.test(e)&&"string"==typeof t).flatMap(([,e])=>[e,...e.split(/[\s,=]+/)]).filter(e=>e.length>=8)])].sort((e,t)=>t.length-e.length)}(),c=(e=t.default.homedir().replace(/\/+$/,"")).length<4?null:RegExp(`${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?=$|[/\\s"'\`)\\]}>,;:])[^\\s"'\`)\\]}>,;]*`,"g"),E=e=>{let t=l(l(e,i,"[redacted runtime id]"),_,"[redacted]");return c?t.replace(c,"[redacted]"):t},p=(e,t)=>"string"==typeof e?null!==t&&a.test(t)?e:E(e):Array.isArray(e)?e.map(e=>p(e,null)):o(e)?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t,e)])):e;return{text:E,deep:e=>p(e,null)}}},89443,e=>{"use strict";e.s(["SHARE_LIMITS",()=>ts,"ShareAskError",()=>tw,"ShareError",()=>to,"askShare",()=>tS,"audienceAllowed",()=>tg,"loadSessionSharesConfig",()=>tf,"shareAnswer",()=>tA,"shareFromTurnEnabled",()=>th,"shareRow",()=>tN,"shareState",()=>tR,"sweepExpiredShares",()=>tL],89443);var t=e.i(22734),n=e.i(14747),r=e.i(54799),i=e.i(99904),s=e.i(99684),a=e.i(72414),o=e.i(46786),d=e.i(98307),u=e.i(94057),l=e.i(89965);e.i(46632),Object.freeze({default:50,max:200});var _=e.i(69312),c=e.i(76422),E=e.i(34923);let p=Object.freeze({maxWakeDepth:3,rootBudget:12,maxContinuations:24,globalConcurrency:4,perTargetConcurrency:1}),T={maxWakeDepth:"BOTMANCERS_WAKE_MAX_DEPTH",rootBudget:"BOTMANCERS_WAKE_ROOT_BUDGET"};function m(e=process.env){let t=(t,n)=>{let r=e[T[t]]?.trim(),i=r&&/^\d+$/.test(r)?Number(r):NaN;return Number.isSafeInteger(i)&&i>=n&&i<p[t]?i:p[t]},n=t("rootBudget",1);return{...p,maxWakeDepth:t("maxWakeDepth",0),rootBudget:n,maxContinuations:2*n}}let f=Object.freeze({kind:"person",id:"local-owner"}),g=Object.freeze({kind:"service",id:"botmancers-exchanges"}),h=["ask","continue"],N={invalid_request:400,authority_not_allowed:403,recursive_exchange:403,conversation_not_found:404,agent_not_found:404,session_not_found:404,session_ended:409,session_not_resumable:409,source_session_busy:409,agent_unavailable:409,destination_invalid:400,idempotency_conflict:409,exchange_not_found:404,exchange_terminal:409,invalid_transition:409};class R extends Error{code;constructor(e,t){super(t),this.name="ExchangeError",this.code=e}get status(){return N[this.code]}}let v=["decisions","constraints","artifacts","open_questions"];function y(e){return"string"==typeof e&&e.trim().length>0}function L(e,...t){return t.reduce((e,t)=>t?e.split(t).join("[redacted session id]"):e,e)}let w="\n[truncated]";function O(e,t){return e.length<=t?{content:e,truncated:!1}:t<=w.length?{content:e.slice(0,t),truncated:!0}:{content:`${e.slice(0,t-w.length)}${w}`,truncated:!0}}let k="This is a read-only turn: do not edit files, change state, start other work, or emit Wakes.";function I(e,t){return`${e}:
2004
2013
  ${t.length>0?t.map(e=>`- ${e}`).join("\n"):"(none)"}`}function S(e){let t;if(e.requester_kind!==g.kind||e.requester_id!==g.id)return null;try{t=JSON.parse(e.policy_snapshot)}catch{return null}return t&&"session_exchange"===t.source&&"string"==typeof t.exchange_id&&("ask"===t.hop||"extract"===t.hop||"deliver"===t.hop)?{exchangeId:t.exchange_id,hop:t.hop,resumeBindingId:"string"==typeof t.resume_session_binding?t.resume_session_binding:null}:null}let A="/v1/chat/completions";class b extends Error{code;status;constructor(e,t,n){super(t),this.name="HermesError",this.code=e,this.status=n}}function q(e=process.env){var t;let n,r=(e.HERMES_API_SERVER_KEY||"").trim();if(!r)return null;let i=(e.HERMES_BASE_URL||"").trim()||"http://127.0.0.1:8642",s=(e.HERMES_SESSION_PREFIX||"").trim()||"botmancer-specialist-",a=(e.HERMES_MODEL||"").trim()||"hermes";return{baseUrl:i.replace(/\/+$/,""),apiKey:r,timeoutMs:(n=Number(t=e.HERMES_TIMEOUT_MS),void 0!==t&&""!==t&&Number.isFinite(n)&&n>0?Math.floor(n):24e4),sessionPrefix:s,model:a}}function C(e,t){return`${t.sessionPrefix}${e}`}function x(e,t){return new b("aborted","Hermes request aborted")}async function D(e){var t;let n,r,{config:i,profilePath:s,sessionId:a,messages:o,signal:d}=e,u=e.fetchImpl||((e,t)=>fetch(e,t)),l=(t=i.baseUrl,n=t.replace(/\/+$/,""),r=s.startsWith("/")?s:`/${s}`,`${n}${r}`),_=new AbortController,c=!1,E=setTimeout(()=>{c=!0,_.abort()},i.timeoutMs);E.unref&&E.unref();let p=()=>_.abort();if(d){if(d.aborted)throw clearTimeout(E),x(d,i.timeoutMs);d.addEventListener("abort",p,{once:!0})}try{let e,t;try{e=await u(l,{method:"POST",headers:{Authorization:`Bearer ${i.apiKey}`,"Content-Type":"application/json","X-Hermes-Session-Id":a},body:JSON.stringify({model:i.model,stream:!1,messages:o}),signal:_.signal})}catch(e){if(c)throw new b("timeout",`Hermes request timed out after ${i.timeoutMs} ms`);if(_.signal.aborted)throw x(d??_.signal,i.timeoutMs);throw new b("network",`Hermes request failed: ${String(e)}`)}let n="";try{n=await e.text()}catch{n=""}if(!e.ok){let t=`Hermes turn failed with status ${e.status}`;try{let e=JSON.parse(n);e?.error?.message&&(t=e.error.message)}catch{let e=n.trim().slice(0,120);e&&(t=`${t}: ${e}`)}throw new b("http",t,e.status)}try{t=JSON.parse(n)}catch{throw new b("protocol","Hermes reply was not JSON",e.status)}return t.choices?.[0]?.message?.content?.trim()||"No response"}finally{clearTimeout(E),d&&d.removeEventListener("abort",p)}}function U(e,t,n=null){return{category:e,code:n,message:t.slice(0,500)}}function F(e){let t=null,n=null;return{promise:new Promise(r=>{if(e.signal&&(n=()=>r(U("cancelled","The attempt was cancelled.")),e.signal.aborted?n():e.signal.addEventListener("abort",n,{once:!0})),"number"==typeof e.deadlineAt){let n=e.deadlineAt,i=()=>{let e=n-Date.now();e<=0?r(U("timed_out","The attempt passed its deadline.")):(t=setTimeout(i,Math.min(e,0x7fffffff))).unref&&t.unref()};i()}}),dispose:()=>{t&&clearTimeout(t),n&&e.signal&&e.signal.removeEventListener("abort",n)}}}function W(e){return e.signal?.aborted?U("cancelled","The attempt was cancelled before launch."):"number"==typeof e.deadlineAt&&Date.now()>=e.deadlineAt?U("timed_out","The attempt passed its deadline before launch."):null}var M=e.i(98596);let H="session-provider",X="\n[truncated]",G=Object.freeze({kind:"service",id:"botmancers-attempt"});function B(e){let t=e.correlation?.attemptId;if("string"==typeof t&&t)return`botmancers-attempt-${t}`;let n=(0,r.createHash)("sha256").update(JSON.stringify({requestId:e.correlation?.requestId??null,conversationId:e.correlation?.conversationId??null,agentId:e.target.agentId,prompt:e.prompt,cwd:e.cwd,toolProfile:e.toolProfile,binding:e.sessionBinding?.externalSessionId??null})).digest("hex").slice(0,32);return`botmancers-direct-${n}`}function $(e){var t;if(e.freshSession&&e.sessionBinding)return{ok:!1,failure:U("session_mismatch","A fresh-session turn cannot resume a session.")};let n="readonly"===(t=e.toolProfile)?"read_only":"edit"===t?"workspace_write":null;if(!n)return{ok:!1,failure:U("unsupported_authority",`Unsupported tool profile: ${JSON.stringify(String(e.toolProfile))}.`)};let r=function(e){if("text"===e.kind)return e.text;let t=e.history.map(e=>`[${e.fromAgent?"you":e.speakerLabel}] ${e.content}`).join("\n\n");return`${e.system}
2005
2014
 
2006
2015
  Conversation so far (reply to the last message):
2007
2016
 
2008
- ${t}`}(e.prompt);if(!r.trim())return{ok:!1,failure:U("launch_failed","The attempt prompt is empty.")};if(e.sessionBinding){let t=e.sessionBinding.externalSessionId;return"string"==typeof t&&t?{ok:!0,plan:{kind:"send",agentId:e.target.agentId,workspace:null,sessionRef:t,prompt:r,authority:n}}:{ok:!1,failure:U("launch_failed","The session binding names no session.")}}return"string"==typeof e.cwd&&e.cwd.startsWith("/")?{ok:!0,plan:{kind:"start",agentId:e.target.agentId,workspace:e.cwd,sessionRef:null,prompt:r,authority:n}}:{ok:!1,failure:U("unavailable","A session provider start requires an absolute working directory.")}}function K(e){return"unavailable"===e?"The session provider is not available.":"unsupported_authority"===e?"The session provider cannot honor the requested authority.":"launch_failed"===e?"The session provider did not start the turn.":"The session provider did not complete the turn."}function P(e,t){try{let n=e.prepare("SELECT agent_id FROM provider_session_turns WHERE id = ?").get(t);return n?.agent_id??null}catch{return null}}function j(e){let t=t=>({adapter:H,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:e,finishedAt:Date.now(),failure:null,...t});return{result:t,failed:(e,n={})=>t({status:"failed",failure:e,...n})}}async function Y(e,t,n,r,i){let{failed:s}=j(i),a=F({signal:r.signal??null,deadlineAt:r.deadlineAt??null}),o=(0,_.observeProviderTurn)(e,n,t,{signal:r.signal??null,deadlineAt:r.deadlineAt??null,correlation:r.correlation??{}});o.catch(()=>{});try{let u=await Promise.race([o.then(e=>({view:e}),e=>({error:e})),a.promise.then(e=>({interrupted:e}))]);if("interrupted"in u){let i="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{i="failed"}let a=await z(e,n,t);return s(u.interrupted,{...a,externalCancel:i})}if("error"in u){var d;let i="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{i="failed"}let a=await z(e,n,t);return s((d=u.error)instanceof _.ProviderSessionError?"provider_unavailable"===d.code||"auth_required"===d.code?U("unavailable",`[${d.code}] ${K("unavailable")}`,d.code):U("runtime_failed",`[${d.code}] ${K("runtime_failed")}`,d.code):U("runtime_failed","The session provider did not complete the turn."),{...a,externalCancel:i})}let l=u.view;if("running"===l.state){let i=r.signal?.aborted?U("cancelled","The attempt was cancelled."):U("timed_out","The attempt passed its deadline."),a="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{a="failed"}return s(i,{externalRunId:l.turn_ref,externalSessionId:l.session_ref,externalCancel:a})}return function(e,t,n){var r;let{result:i,failed:s}=j(n),a={externalRunId:e.turn_ref,externalSessionId:e.session_ref},o=(0,M.usageFromEvent)(e.usage??null),d=Date.now();if("cancelled"===e.state)return s(U("cancelled","The provider turn was cancelled."),{...a,usage:o,finishedAt:d});if("failed"===e.state){let t="string"==typeof e.failure_code&&e.failure_code?e.failure_code.slice(0,100):"provider_failed";return s(U("runtime_failed",`[${t}] ${K("runtime_failed")}`,t),{...a,usage:o,finishedAt:d})}if("completed"!==e.state)return s(U("runtime_failed",K("runtime_failed")),{...a,usage:o,finishedAt:d});if("string"!=typeof e.output||!e.output)return s(U("result_contract",`Provider turn ${e.turn_ref} result contract mismatch: expected a non-empty string output.`),{...a,usage:o,finishedAt:d});if(null!==t&&e.session_ref!==t)return s(U("session_mismatch",`Resume turn ${e.turn_ref} forked the session; failing closed.`),{...a,usage:o,finishedAt:d});let u=(r=e.output).length<=32e3?{content:r,truncated:!1}:32e3<=X.length?{content:r.slice(0,32e3),truncated:!0}:{content:`${r.slice(0,32e3-X.length)}${X}`,truncated:!0};return i({status:"completed",...a,output:u.content,...u.truncated?{outputTruncated:!0}:{},usage:o,finishedAt:d})}(l,r.resumeSessionId,i)}finally{a.dispose()}}async function z(e,t,n){try{let r=(0,_.getProviderTurn)(e,t,n);return{externalRunId:n,externalSessionId:r?.session_ref??null}}catch{return{externalRunId:n,externalSessionId:null}}}function J(e={}){let t=e.db??i.default;return{name:H,reconciler:{currentGrantFingerprint:()=>null,async inspect(e){try{let n=P(t,e);if(!n)return{kind:"not_found"};let r=(0,_.getProviderTurn)(t,n,e);if(!r)return{kind:"not_found"};if("running"===r.state)return{kind:"run",state:"running"};if("completed"===r.state)return{kind:"run",state:"ended"};if("cancelled"===r.state)return{kind:"run",state:"canceled"};return{kind:"run",state:"error"}}catch{return{kind:"unreachable"}}},async repost(e){let n=function(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||"object"!=typeof t)return null;let n=t;if("string"!=typeof n.agentId||!n.agentId||"start"!==n.kind&&"send"!==n.kind||"start"===n.kind&&("string"!=typeof n.workspace||!n.workspace.startsWith("/"))||"send"===n.kind&&("string"!=typeof n.sessionRef||!n.sessionRef)||"string"!=typeof n.prompt||!n.prompt.trim()||"read_only"!==n.authority&&"workspace_write"!==n.authority)return null;let r=n.requester;return r&&["person","bot","service"].includes(String(r.kind))&&"string"==typeof r.id&&r.id?n:null}(e.body);if(!n)return{kind:"rejected",status:null,code:"INTENT_UNREADABLE"};try{let r="start"===n.kind?await (0,_.startProviderSession)(t,n.agentId,{workspace:n.workspace,prompt:n.prompt,authority:n.authority,idempotencyKey:e.idempotencyKey,requester:n.requester,correlation:{}}):await (0,_.sendProviderTurn)(t,n.agentId,n.sessionRef,{prompt:n.prompt,authority:n.authority,idempotencyKey:e.idempotencyKey,requester:n.requester,correlation:{}});return{kind:"accepted",runId:r.turn.turn_ref}}catch(e){if(e instanceof _.ProviderSessionError){if("idempotency_conflict"===e.code)return{kind:"rejected",status:409,code:"IDEMPOTENCY_CONFLICT"};if(["invalid_input","out_of_scope","scope_missing","authority_not_allowed","new_sessions_not_allowed","not_resumable","session_missing","session_not_found","agent_not_found","unsupported"].includes(e.code))return{kind:"rejected",status:400,code:e.code.toUpperCase()};if("provider_unavailable"===e.code)return{kind:"unreachable"};return{kind:"rejected",status:null,code:e.code.toUpperCase().slice(0,64)}}return{kind:"rejected",status:null,code:null}}},async follow(e,n){let r=Date.now(),{failed:i}=j(r),s=P(t,e);return s?Y(t,e,s,{resumeSessionId:n.resumeSessionId,deadlineAt:n.deadlineAt??null,signal:n.signal??null,correlation:{}},r):i(U("runtime_failed","The provider turn was not found."),{externalRunId:e})},async cancel(e){try{let n=P(t,e);if(!n)return"failed";return await (0,_.cancelProviderTurn)(t,n,e,{correlation:{}}),"requested"}catch{return"failed"}}},externalCancel:!0,launchIntent(e){var t;let n=$(e);return n.ok?{idempotencyKey:B(e),body:JSON.stringify({agentId:(t=n.plan).agentId,kind:t.kind,workspace:t.workspace,sessionRef:t.sessionRef,prompt:t.prompt,authority:t.authority,requester:{...G}}),grantFingerprint:null}:null},async run(e,n){let r,i=Date.now(),{failed:s}=j(i),a=$(e);if(!a.ok)return s(a.failure);let o=W(e);if(o)return s(o);let d=a.plan,u=B(e),l={...G};try{r="start"===d.kind?(await (0,_.startProviderSession)(t,d.agentId,{workspace:d.workspace,prompt:d.prompt,authority:d.authority,idempotencyKey:u,requester:l,correlation:{...e.correlation}})).turn:(await (0,_.sendProviderTurn)(t,d.agentId,d.sessionRef,{prompt:d.prompt,authority:d.authority,idempotencyKey:u,requester:l,correlation:{...e.correlation}})).turn}catch(e){return s(function(e){if(e instanceof _.ProviderSessionError){var t;let n="authority_not_allowed"===(t=e.code)||"new_sessions_not_allowed"===t?"unsupported_authority":"provider_unavailable"===t||"auth_required"===t||"permission_denied"===t||"incompatible_version"===t||"usage_limit"===t||"unsupported"===t||"agent_not_found"===t?"unavailable":"launch_failed";return U(n,`[${e.code}] ${K(n)}`,e.code)}return U("launch_failed",e instanceof Error?`The session provider did not start the turn (${e.name}).`:"The session provider did not start the turn.")}(e))}return n?.({type:"started",adapter:H,at:Date.now(),externalRunId:r.turn_ref,externalSessionId:r.session_ref}),Y(t,r.turn_ref,d.agentId,{resumeSessionId:d.sessionRef,deadlineAt:e.deadlineAt??null,signal:e.signal??null,correlation:{...e.correlation}},i)}}}class V extends Error{code;constructor(e,t){super(t),this.name="DispatchFailure",this.code=e}}let Q={"hermes-gateway":()=>(function(e={}){let t="hermes-gateway";return{name:t,async run(n,i){var s,a;let o=Date.now(),d=(e,n=null)=>({status:"failed",adapter:t,externalRunId:null,externalSessionId:n,output:null,artifacts:[],startedAt:o,finishedAt:Date.now(),failure:e});if("readonly"!==n.toolProfile)return d(U("unsupported_authority",`The Hermes gateway does not support the ${n.toolProfile} tool profile.`));let u=(e.loadConfig??q)();if(!u)return d(U("unavailable","The Hermes gateway is not configured."));let l=W(n);if(l)return d(l);if(n.freshSession&&n.sessionBinding)return d(U("session_mismatch","A fresh-session turn cannot resume a session."));let _=n.sessionBinding?.externalSessionId??(n.freshSession?(s=n.target.agentId,`${C(s,u)}-x-${(0,r.randomUUID)()}`):C(n.target.agentId,u)),c=new AbortController,E=F(n),p=null;E.promise.then(e=>{p=e,c.abort()}),i?.({type:"started",adapter:t,at:Date.now(),externalRunId:null,externalSessionId:_});try{let r=await D({config:u,profilePath:n.target.hermesProfilePath||A,sessionId:_,messages:(a=n.prompt,"text"===a.kind?[{role:"user",content:a.text}]:[{role:"system",content:a.system},...a.history.map(e=>e.fromAgent?{role:"assistant",content:e.content}:{role:"user",content:`[From ${e.speakerLabel}] ${e.content}`})]),signal:c.signal,...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});return{status:"completed",adapter:t,externalRunId:null,externalSessionId:_,output:r,artifacts:[],startedAt:o,finishedAt:Date.now(),failure:null}}catch(r){let e=r instanceof b?r.code:"unknown";if(p)return d({...p,code:e},_);let t="timeout"===e?"timed_out":"runtime_failed",n=r instanceof b&&void 0!==r.status?` ${r.status}`:"";return d(U(t,`The Hermes gateway did not complete the turn (${e}${n}).`,e),_)}finally{E.dispose()}}}})({fetchImpl:null}),"session-provider":()=>J()};function Z(e){return"completed"===e.status?"succeeded":e.failure?.category==="cancelled"?"cancelled":e.failure?.category==="timed_out"?"timed_out":"failed"}function ee(e,t,n){(function(e){if(e.usage||"completed"===e.status||e.externalRunId)return!0;let t=e.failure?.category;return void 0!==t&&!["unavailable","unsupported_authority","launch_failed"].includes(t)})(n)&&e.recordAttemptUsage(t,{usage:n.usage??null,observedAt:n.finishedAt})}function et(e,t,n,r=Date.now()){ee(e,t.id,n);let i=e.getWorkRequest(t.request_id);e.appendEvent(t.request_id,{type:"late_result_recorded",attemptId:t.id,data:{attempt_number:t.attempt_number,attempt_outcome:t.outcome,result_status:n.status,result_outcome:Z(n),error_category:n.failure?.category??null,external_run_id:n.externalRunId,output:n.output,request_state:i?.state??null},now:r})}async function en(e,t,n,r={}){let i,s=!1,a=!1;try{i=await n.run(t.input,n=>{var i,o;if("started"===n.type&&(a=!0),s||(i=t.attempt,o=r.fence,!e.transaction(()=>(!o||!!o())&&("started"===n.type?((n.externalRunId||n.externalSessionId)&&e.recordAttemptExternalIds(i.id,{...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{}}),e.appendEvent(i.request_id,{type:"runtime_started",attemptId:i.id,data:{adapter:n.adapter,external_run_id:n.externalRunId},now:n.at})):e.appendEvent(i.request_id,{type:"runtime_progress",attemptId:i.id,data:{adapter:n.adapter,...n.detail},now:n.at}),!0)))){s=!0;return}r.onEvent?.(n)})}catch(r){let e=Date.now();i={status:"failed",adapter:n.name,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:t.attempt.started_at,finishedAt:e,failure:U("runtime_failed",r instanceof Error?r.message:String(r))}}return r.sanitize&&(i=r.sanitize(i)),e.transaction(()=>{var s,o,d,u,l;let _,c,E=e.getAttempt(t.attempt.id);if(E&&null!==E.finished_at)return et(e,E,i),{attempt:E,result:i,projected:void 0,late:!0,abandoned:null};let p=a?function(e,t,n,r){if("failed"!==r.status)return null;let i=r.failure?.category,s="failed"===r.externalCancel,a={requestId:e.request_id,attemptId:e.id,externalRunId:r.externalRunId,transport:t.name};return"cancelled"!==i&&"timed_out"!==i?s?{...a,reason:"observation_lost",externalCancel:"failed"}:null:("cancelled"!==i||n?.aborted)&&(!t.externalCancel||s)?{...a,reason:i,externalCancel:s?"failed":null}:null}(t.attempt,n,t.input.signal??null,i):null,T=p?(d=e,u=p,l=i,ee(d,u.attemptId,l),_="failed"===u.externalCancel?"The runtime did not accept the cancel request":"The runtime cannot stop the run",c=d.finishAttempt(u.attemptId,{outcome:Z(l),errorCategory:"abandoned",errorMessage:`${l.failure?.message??"The attempt was interrupted."} ${_}; it may continue and a later result is not awaited.`.slice(0,500),artifacts:l.artifacts,...l.externalRunId?{externalRunId:l.externalRunId}:{},...l.externalSessionId?{externalSessionId:l.externalSessionId}:{},now:l.finishedAt}),u.externalRunId=c.external_run_id,d.appendEvent(u.requestId,{type:"attempt_abandoned",attemptId:u.attemptId,data:{reason:u.reason,attempt_number:c.attempt_number,external_run_id:c.external_run_id,transport:u.transport,local_only:!0,error_code:l.failure?.code??null,external_cancel:u.externalCancel},now:l.finishedAt}),c):(ee(e,s=t.attempt.id,o=i),e.finishAttempt(s,{outcome:Z(o),output:o.output,errorCategory:o.failure?.category??null,errorMessage:o.failure?.message??null,artifacts:o.artifacts,...o.externalRunId?{externalRunId:o.externalRunId}:{},...o.externalSessionId?{externalSessionId:o.externalSessionId}:{},now:o.finishedAt})),m=r.project?r.project(i,T):void 0;return{attempt:T,result:i,projected:m,late:!1,abandoned:p}})}class er extends Error{code;constructor(e,t){super(t),this.name="ControlError",this.code=e}}let ei=["queued","blocked","running","waiting"];function es(e){try{let t=JSON.parse(e.launch_snapshot);return t&&"object"==typeof t?t:{}}catch{return{}}}let ea="'grant_requested', 'grant_approved', 'grant_denied', 'grant_revoked'",eo=Object.freeze({maxGlobal:4,maxPerTarget:1,leaseMs:6e4,heartbeatMs:15e3,deferMs:5e3,cancelGraceMs:3e4}),ed={maxGlobal:"BOTMANCERS_DISPATCH_MAX_GLOBAL",maxPerTarget:"BOTMANCERS_DISPATCH_MAX_PER_TARGET",leaseMs:"BOTMANCERS_DISPATCH_LEASE_MS",heartbeatMs:"BOTMANCERS_DISPATCH_HEARTBEAT_MS",deferMs:"BOTMANCERS_DISPATCH_DEFER_MS",cancelGraceMs:"BOTMANCERS_DISPATCH_CANCEL_GRACE_MS"},eu=Object.freeze({maxGlobal:eo.maxGlobal,maxPerTarget:eo.maxPerTarget});class el extends Error{requestId;constructor(e){super(`The dispatch lease for ${e} is no longer held.`),this.name="LeaseLostError",this.requestId=e}}let e_=new Set(["version","target","executionKind","objective","contextWorkRequests","resumeWorkRequest","limits"]),ec=new Set(["maxAttempts","deadlineSeconds"]),eE=new Set(["conversation","implementation","review","revision"]);function ep(e,t){return"string"==typeof e&&e.trim().length>0&&e.length<=t}function eT(e,t,n){return Number.isInteger(e)&&e>=t&&e<=n}function em(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"envelope must be a JSON object"};let t=Object.keys(e).filter(e=>!e_.has(e));if(t.length>0)return{ok:!1,reason:`unknown field ${t.join(", ")}`};if(1!==e.version)return{ok:!1,reason:"version must be 1"};if(!ep(e.target,120))return{ok:!1,reason:"target must be a non-empty Agent name (max 120 characters)"};if("string"!=typeof e.executionKind||!eE.has(e.executionKind))return{ok:!1,reason:"unknown executionKind"};if(!ep(e.objective,2e4))return{ok:!1,reason:"objective must be non-empty (max 20000 characters)"};let n={version:1,target:e.target.trim(),executionKind:e.executionKind,objective:e.objective.trim()};if(void 0!==e.contextWorkRequests){let t=e.contextWorkRequests;if(!Array.isArray(t)||t.length>8||t.some(e=>!ep(e,160)))return{ok:!1,reason:"contextWorkRequests must be at most 8 Work Request references"};if(new Set(t).size!==t.length)return{ok:!1,reason:"contextWorkRequests must be unique"};n.contextWorkRequests=[...t]}let r=Object.prototype.hasOwnProperty.call(e,"resumeWorkRequest");if("revision"===n.executionKind){if(!r||!ep(e.resumeWorkRequest,160))return{ok:!1,reason:"revision requires resumeWorkRequest"};n.resumeWorkRequest=e.resumeWorkRequest}else if(r)return{ok:!1,reason:"resumeWorkRequest is revision-only"};if(void 0!==e.limits){let t=e.limits;if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"limits must be an object"};if(Object.keys(t).some(e=>!ec.has(e)))return{ok:!1,reason:"unknown limits field"};if(void 0!==t.maxAttempts&&!eT(t.maxAttempts,1,10))return{ok:!1,reason:"limits.maxAttempts must be 1-10"};if(void 0!==t.deadlineSeconds&&!eT(t.deadlineSeconds,1,86400))return{ok:!1,reason:"limits.deadlineSeconds must be 1-86400"};n.limits={},void 0!==t.maxAttempts&&(n.limits.maxAttempts=t.maxAttempts),void 0!==t.deadlineSeconds&&(n.limits.deadlineSeconds=t.deadlineSeconds)}return{ok:!0,envelope:n}}let ef=/```botmancers-wake[^\S\r\n]*\r?\n([\s\S]*?)```/g,eg=/WAKE\s+([A-Za-z0-9_-]+)\s*:/gi;function eh(e){return JSON.stringify(function e(t){return Array.isArray(t)?t.map(e):t&&"object"==typeof t?Object.fromEntries(Object.keys(t).sort().map(n=>[n,e(t[n])])):t}(e.validation.ok?{syntax:e.syntax,envelope:e.validation.envelope}:{syntax:e.syntax,raw:e.raw}))}m().maxWakeDepth,m().rootBudget;class eN extends Error{code;constructor(e,t){super(t),this.name="WakeRouterError",this.code=e}}let eR=i.default.prepare("SELECT * FROM wakes WHERE id = ?"),ev=i.default.prepare("SELECT * FROM wakes WHERE idempotency_key = ?"),ey=i.default.prepare("SELECT * FROM wakes WHERE source_event_id = ? AND position = ?");function eL(e,t){return{wake:e,request:e.work_request_id?i.engine.getWorkRequest(e.work_request_id)??null:null,created:t}}function eO(e){return"accepted"===e.status||"blocked"===e.status}function ew(e){return i.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND wake_event_id IS NOT NULL").get(e).n}m().maxContinuations;let ek={kind:"service",id:"botmancers-engine"},eI="Botmancers";function eS(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function eA(e){return i.bots.getById(e)?.name??`agent:${e}`}function eb(e){let t;if("completed"!==e.state||!e.result)return null;try{t=JSON.parse(e.result).reply_message_id}catch{return null}if("string"!=typeof t)return null;let n=i.default.prepare("SELECT * FROM messages WHERE id = ?").get(t);return n&&"bot"===n.sender_type&&n.sender_id===e.target_agent_id?n:null}function eq(e,t=!1){let n=i.engine.listAttempts(e.id),r=n.length>0?n[n.length-1]:null,s=[`Work Request: ${e.id}`,...r?[`Attempt: ${r.id}`]:[],`Agent: ${eA(e.target_agent_id)}`,`Execution kind: ${e.execution_kind}`,`State: ${e.state}`],a=eb(e);if(a){var o;s.push(t?`Result: the ${eA(e.target_agent_id)} reply above.`:`Result:
2017
+ ${t}`}(e.prompt);if(!r.trim())return{ok:!1,failure:U("launch_failed","The attempt prompt is empty.")};if(e.sessionBinding){let t=e.sessionBinding.externalSessionId;return"string"==typeof t&&t?{ok:!0,plan:{kind:"send",agentId:e.target.agentId,workspace:null,sessionRef:t,prompt:r,authority:n}}:{ok:!1,failure:U("launch_failed","The session binding names no session.")}}return"string"==typeof e.cwd&&e.cwd.startsWith("/")?{ok:!0,plan:{kind:"start",agentId:e.target.agentId,workspace:e.cwd,sessionRef:null,prompt:r,authority:n}}:{ok:!1,failure:U("unavailable","A session provider start requires an absolute working directory.")}}function K(e){return"unavailable"===e?"The session provider is not available.":"unsupported_authority"===e?"The session provider cannot honor the requested authority.":"launch_failed"===e?"The session provider did not start the turn.":"The session provider did not complete the turn."}function P(e,t){try{let n=e.prepare("SELECT agent_id FROM provider_session_turns WHERE id = ?").get(t);return n?.agent_id??null}catch{return null}}function j(e){let t=t=>({adapter:H,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:e,finishedAt:Date.now(),failure:null,...t});return{result:t,failed:(e,n={})=>t({status:"failed",failure:e,...n})}}async function Y(e,t,n,r,i){let{failed:s}=j(i),a=F({signal:r.signal??null,deadlineAt:r.deadlineAt??null}),o=(0,_.observeProviderTurn)(e,n,t,{signal:r.signal??null,deadlineAt:r.deadlineAt??null,correlation:r.correlation??{}});o.catch(()=>{});try{let u=await Promise.race([o.then(e=>({view:e}),e=>({error:e})),a.promise.then(e=>({interrupted:e}))]);if("interrupted"in u){let i="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{i="failed"}let a=await z(e,n,t);return s(u.interrupted,{...a,externalCancel:i})}if("error"in u){var d;let i="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{i="failed"}let a=await z(e,n,t);return s((d=u.error)instanceof _.ProviderSessionError?"provider_unavailable"===d.code||"auth_required"===d.code?U("unavailable",`[${d.code}] ${K("unavailable")}`,d.code):U("runtime_failed",`[${d.code}] ${K("runtime_failed")}`,d.code):U("runtime_failed","The session provider did not complete the turn."),{...a,externalCancel:i})}let l=u.view;if("running"===l.state){let i=r.signal?.aborted?U("cancelled","The attempt was cancelled."):U("timed_out","The attempt passed its deadline."),a="requested";try{await (0,_.cancelProviderTurn)(e,n,t,{correlation:r.correlation??{}})}catch{a="failed"}return s(i,{externalRunId:l.turn_ref,externalSessionId:l.session_ref,externalCancel:a})}return function(e,t,n){var r;let{result:i,failed:s}=j(n),a={externalRunId:e.turn_ref,externalSessionId:e.session_ref},o=(0,M.usageFromEvent)(e.usage??null),d=Date.now();if("cancelled"===e.state)return s(U("cancelled","The provider turn was cancelled."),{...a,usage:o,finishedAt:d});if("failed"===e.state){let t="string"==typeof e.failure_code&&e.failure_code?e.failure_code.slice(0,100):"provider_failed";return s(U("runtime_failed",`[${t}] ${K("runtime_failed")}`,t),{...a,usage:o,finishedAt:d})}if("completed"!==e.state)return s(U("runtime_failed",K("runtime_failed")),{...a,usage:o,finishedAt:d});if("string"!=typeof e.output||!e.output)return s(U("result_contract",`Provider turn ${e.turn_ref} result contract mismatch: expected a non-empty string output.`),{...a,usage:o,finishedAt:d});if(null!==t&&e.session_ref!==t)return s(U("session_mismatch",`Resume turn ${e.turn_ref} forked the session; failing closed.`),{...a,usage:o,finishedAt:d});let u=(r=e.output).length<=32e3?{content:r,truncated:!1}:32e3<=X.length?{content:r.slice(0,32e3),truncated:!0}:{content:`${r.slice(0,32e3-X.length)}${X}`,truncated:!0};return i({status:"completed",...a,output:u.content,...u.truncated?{outputTruncated:!0}:{},usage:o,finishedAt:d})}(l,r.resumeSessionId,i)}finally{a.dispose()}}async function z(e,t,n){try{let r=(0,_.getProviderTurn)(e,t,n);return{externalRunId:n,externalSessionId:r?.session_ref??null}}catch{return{externalRunId:n,externalSessionId:null}}}function J(e={}){let t=e.db??i.default;return{name:H,reconciler:{currentGrantFingerprint:()=>null,async inspect(e){try{let n=P(t,e);if(!n)return{kind:"not_found"};let r=(0,_.getProviderTurn)(t,n,e);if(!r)return{kind:"not_found"};if("running"===r.state)return{kind:"run",state:"running"};if("completed"===r.state)return{kind:"run",state:"ended"};if("cancelled"===r.state)return{kind:"run",state:"canceled"};return{kind:"run",state:"error"}}catch{return{kind:"unreachable"}}},async repost(e){let n=function(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||"object"!=typeof t)return null;let n=t;if("string"!=typeof n.agentId||!n.agentId||"start"!==n.kind&&"send"!==n.kind||"start"===n.kind&&("string"!=typeof n.workspace||!n.workspace.startsWith("/"))||"send"===n.kind&&("string"!=typeof n.sessionRef||!n.sessionRef)||"string"!=typeof n.prompt||!n.prompt.trim()||"read_only"!==n.authority&&"workspace_write"!==n.authority)return null;let r=n.requester;return r&&["person","bot","service"].includes(String(r.kind))&&"string"==typeof r.id&&r.id?n:null}(e.body);if(!n)return{kind:"rejected",status:null,code:"INTENT_UNREADABLE"};try{let r="start"===n.kind?await (0,_.startProviderSession)(t,n.agentId,{workspace:n.workspace,prompt:n.prompt,authority:n.authority,idempotencyKey:e.idempotencyKey,requester:n.requester,correlation:{}}):await (0,_.sendProviderTurn)(t,n.agentId,n.sessionRef,{prompt:n.prompt,authority:n.authority,idempotencyKey:e.idempotencyKey,requester:n.requester,correlation:{}});return{kind:"accepted",runId:r.turn.turn_ref}}catch(e){if(e instanceof _.ProviderSessionError){if("idempotency_conflict"===e.code)return{kind:"rejected",status:409,code:"IDEMPOTENCY_CONFLICT"};if(["invalid_input","out_of_scope","scope_missing","authority_not_allowed","new_sessions_not_allowed","not_resumable","session_missing","session_not_found","agent_not_found","unsupported"].includes(e.code))return{kind:"rejected",status:400,code:e.code.toUpperCase()};if("provider_unavailable"===e.code)return{kind:"unreachable"};return{kind:"rejected",status:null,code:e.code.toUpperCase().slice(0,64)}}return{kind:"rejected",status:null,code:null}}},async follow(e,n){let r=Date.now(),{failed:i}=j(r),s=P(t,e);return s?Y(t,e,s,{resumeSessionId:n.resumeSessionId,deadlineAt:n.deadlineAt??null,signal:n.signal??null,correlation:{}},r):i(U("runtime_failed","The provider turn was not found."),{externalRunId:e})},async cancel(e){try{let n=P(t,e);if(!n)return"failed";return await (0,_.cancelProviderTurn)(t,n,e,{correlation:{}}),"requested"}catch{return"failed"}}},externalCancel:!0,launchIntent(e){var t;let n=$(e);return n.ok?{idempotencyKey:B(e),body:JSON.stringify({agentId:(t=n.plan).agentId,kind:t.kind,workspace:t.workspace,sessionRef:t.sessionRef,prompt:t.prompt,authority:t.authority,requester:{...G}}),grantFingerprint:null}:null},async run(e,n){let r,i=Date.now(),{failed:s}=j(i),a=$(e);if(!a.ok)return s(a.failure);let o=W(e);if(o)return s(o);let d=a.plan,u=B(e),l={...G};try{r="start"===d.kind?(await (0,_.startProviderSession)(t,d.agentId,{workspace:d.workspace,prompt:d.prompt,authority:d.authority,idempotencyKey:u,requester:l,correlation:{...e.correlation}})).turn:(await (0,_.sendProviderTurn)(t,d.agentId,d.sessionRef,{prompt:d.prompt,authority:d.authority,idempotencyKey:u,requester:l,correlation:{...e.correlation}})).turn}catch(e){return s(function(e){if(e instanceof _.ProviderSessionError){var t;let n="authority_not_allowed"===(t=e.code)||"new_sessions_not_allowed"===t?"unsupported_authority":"provider_unavailable"===t||"auth_required"===t||"permission_denied"===t||"incompatible_version"===t||"usage_limit"===t||"unsupported"===t||"agent_not_found"===t?"unavailable":"launch_failed";return U(n,`[${e.code}] ${K(n)}`,e.code)}return U("launch_failed",e instanceof Error?`The session provider did not start the turn (${e.name}).`:"The session provider did not start the turn.")}(e))}return n?.({type:"started",adapter:H,at:Date.now(),externalRunId:r.turn_ref,externalSessionId:r.session_ref}),Y(t,r.turn_ref,d.agentId,{resumeSessionId:d.sessionRef,deadlineAt:e.deadlineAt??null,signal:e.signal??null,correlation:{...e.correlation}},i)}}}class V extends Error{code;constructor(e,t){super(t),this.name="DispatchFailure",this.code=e}}let Q={"hermes-gateway":()=>(function(e={}){let t="hermes-gateway";return{name:t,async run(n,i){var s,a;let o=Date.now(),d=(e,n=null)=>({status:"failed",adapter:t,externalRunId:null,externalSessionId:n,output:null,artifacts:[],startedAt:o,finishedAt:Date.now(),failure:e});if("readonly"!==n.toolProfile)return d(U("unsupported_authority",`The Hermes gateway does not support the ${n.toolProfile} tool profile.`));let u=(e.loadConfig??q)();if(!u)return d(U("unavailable","The Hermes gateway is not configured."));let l=W(n);if(l)return d(l);if(n.freshSession&&n.sessionBinding)return d(U("session_mismatch","A fresh-session turn cannot resume a session."));let _=n.sessionBinding?.externalSessionId??(n.freshSession?(s=n.target.agentId,`${C(s,u)}-x-${(0,r.randomUUID)()}`):C(n.target.agentId,u)),c=new AbortController,E=F(n),p=null;E.promise.then(e=>{p=e,c.abort()}),i?.({type:"started",adapter:t,at:Date.now(),externalRunId:null,externalSessionId:_});try{let r=await D({config:u,profilePath:n.target.hermesProfilePath||A,sessionId:_,messages:(a=n.prompt,"text"===a.kind?[{role:"user",content:a.text}]:[{role:"system",content:a.system},...a.history.map(e=>e.fromAgent?{role:"assistant",content:e.content}:{role:"user",content:`[From ${e.speakerLabel}] ${e.content}`})]),signal:c.signal,...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});return{status:"completed",adapter:t,externalRunId:null,externalSessionId:_,output:r,artifacts:[],startedAt:o,finishedAt:Date.now(),failure:null}}catch(r){let e=r instanceof b?r.code:"unknown";if(p)return d({...p,code:e},_);let t="timeout"===e?"timed_out":"runtime_failed",n=r instanceof b&&void 0!==r.status?` ${r.status}`:"";return d(U(t,`The Hermes gateway did not complete the turn (${e}${n}).`,e),_)}finally{E.dispose()}}}})({fetchImpl:null}),"session-provider":()=>J()};function Z(e){return"completed"===e.status?"succeeded":e.failure?.category==="cancelled"?"cancelled":e.failure?.category==="timed_out"?"timed_out":"failed"}function ee(e,t,n){(function(e){if(e.usage||"completed"===e.status||e.externalRunId)return!0;let t=e.failure?.category;return void 0!==t&&!["unavailable","unsupported_authority","launch_failed"].includes(t)})(n)&&e.recordAttemptUsage(t,{usage:n.usage??null,observedAt:n.finishedAt})}function et(e,t,n,r=Date.now()){ee(e,t.id,n);let i=e.getWorkRequest(t.request_id);e.appendEvent(t.request_id,{type:"late_result_recorded",attemptId:t.id,data:{attempt_number:t.attempt_number,attempt_outcome:t.outcome,result_status:n.status,result_outcome:Z(n),error_category:n.failure?.category??null,external_run_id:n.externalRunId,output:n.output,request_state:i?.state??null},now:r})}async function en(e,t,n,r={}){let i,s=!1,a=!1;try{i=await n.run(t.input,n=>{var i,o;if("started"===n.type&&(a=!0),s||(i=t.attempt,o=r.fence,!e.transaction(()=>(!o||!!o())&&("started"===n.type?((n.externalRunId||n.externalSessionId)&&e.recordAttemptExternalIds(i.id,{...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{}}),e.appendEvent(i.request_id,{type:"runtime_started",attemptId:i.id,data:{adapter:n.adapter,external_run_id:n.externalRunId},now:n.at})):e.appendEvent(i.request_id,{type:"runtime_progress",attemptId:i.id,data:{adapter:n.adapter,...n.detail},now:n.at}),!0)))){s=!0;return}r.onEvent?.(n)})}catch(r){let e=Date.now();i={status:"failed",adapter:n.name,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:t.attempt.started_at,finishedAt:e,failure:U("runtime_failed",r instanceof Error?r.message:String(r))}}return r.sanitize&&(i=r.sanitize(i)),e.transaction(()=>{var s,o,d,u,l;let _,c,E=e.getAttempt(t.attempt.id);if(E&&null!==E.finished_at)return et(e,E,i),{attempt:E,result:i,projected:void 0,late:!0,abandoned:null};let p=a?function(e,t,n,r){if("failed"!==r.status)return null;let i=r.failure?.category,s="failed"===r.externalCancel,a={requestId:e.request_id,attemptId:e.id,externalRunId:r.externalRunId,transport:t.name};return"cancelled"!==i&&"timed_out"!==i?s?{...a,reason:"observation_lost",externalCancel:"failed"}:null:("cancelled"!==i||n?.aborted)&&(!t.externalCancel||s)?{...a,reason:i,externalCancel:s?"failed":null}:null}(t.attempt,n,t.input.signal??null,i):null,T=p?(d=e,u=p,l=i,ee(d,u.attemptId,l),_="failed"===u.externalCancel?"The runtime did not accept the cancel request":"The runtime cannot stop the run",c=d.finishAttempt(u.attemptId,{outcome:Z(l),errorCategory:"abandoned",errorMessage:`${l.failure?.message??"The attempt was interrupted."} ${_}; it may continue and a later result is not awaited.`.slice(0,500),artifacts:l.artifacts,...l.externalRunId?{externalRunId:l.externalRunId}:{},...l.externalSessionId?{externalSessionId:l.externalSessionId}:{},now:l.finishedAt}),u.externalRunId=c.external_run_id,d.appendEvent(u.requestId,{type:"attempt_abandoned",attemptId:u.attemptId,data:{reason:u.reason,attempt_number:c.attempt_number,external_run_id:c.external_run_id,transport:u.transport,local_only:!0,error_code:l.failure?.code??null,external_cancel:u.externalCancel},now:l.finishedAt}),c):(ee(e,s=t.attempt.id,o=i),e.finishAttempt(s,{outcome:Z(o),output:o.output,errorCategory:o.failure?.category??null,errorMessage:o.failure?.message??null,artifacts:o.artifacts,...o.externalRunId?{externalRunId:o.externalRunId}:{},...o.externalSessionId?{externalSessionId:o.externalSessionId}:{},now:o.finishedAt})),m=r.project?r.project(i,T):void 0;return{attempt:T,result:i,projected:m,late:!1,abandoned:p}})}class er extends Error{code;constructor(e,t){super(t),this.name="ControlError",this.code=e}}let ei=["queued","blocked","running","waiting"];function es(e){try{let t=JSON.parse(e.launch_snapshot);return t&&"object"==typeof t?t:{}}catch{return{}}}let ea="'grant_requested', 'grant_approved', 'grant_denied', 'grant_revoked'",eo=Object.freeze({maxGlobal:4,maxPerTarget:1,leaseMs:6e4,heartbeatMs:15e3,deferMs:5e3,cancelGraceMs:3e4}),ed={maxGlobal:"BOTMANCERS_DISPATCH_MAX_GLOBAL",maxPerTarget:"BOTMANCERS_DISPATCH_MAX_PER_TARGET",leaseMs:"BOTMANCERS_DISPATCH_LEASE_MS",heartbeatMs:"BOTMANCERS_DISPATCH_HEARTBEAT_MS",deferMs:"BOTMANCERS_DISPATCH_DEFER_MS",cancelGraceMs:"BOTMANCERS_DISPATCH_CANCEL_GRACE_MS"},eu=Object.freeze({maxGlobal:eo.maxGlobal,maxPerTarget:eo.maxPerTarget});class el extends Error{requestId;constructor(e){super(`The dispatch lease for ${e} is no longer held.`),this.name="LeaseLostError",this.requestId=e}}let e_=new Set(["version","target","executionKind","objective","contextWorkRequests","resumeWorkRequest","limits"]),ec=new Set(["maxAttempts","deadlineSeconds"]),eE=new Set(["conversation","implementation","review","revision"]);function ep(e,t){return"string"==typeof e&&e.trim().length>0&&e.length<=t}function eT(e,t,n){return Number.isInteger(e)&&e>=t&&e<=n}function em(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"envelope must be a JSON object"};let t=Object.keys(e).filter(e=>!e_.has(e));if(t.length>0)return{ok:!1,reason:`unknown field ${t.join(", ")}`};if(1!==e.version)return{ok:!1,reason:"version must be 1"};if(!ep(e.target,120))return{ok:!1,reason:"target must be a non-empty Agent name (max 120 characters)"};if("string"!=typeof e.executionKind||!eE.has(e.executionKind))return{ok:!1,reason:"unknown executionKind"};if(!ep(e.objective,2e4))return{ok:!1,reason:"objective must be non-empty (max 20000 characters)"};let n={version:1,target:e.target.trim(),executionKind:e.executionKind,objective:e.objective.trim()};if(void 0!==e.contextWorkRequests){let t=e.contextWorkRequests;if(!Array.isArray(t)||t.length>8||t.some(e=>!ep(e,160)))return{ok:!1,reason:"contextWorkRequests must be at most 8 Work Request references"};if(new Set(t).size!==t.length)return{ok:!1,reason:"contextWorkRequests must be unique"};n.contextWorkRequests=[...t]}let r=Object.prototype.hasOwnProperty.call(e,"resumeWorkRequest");if("revision"===n.executionKind){if(!r||!ep(e.resumeWorkRequest,160))return{ok:!1,reason:"revision requires resumeWorkRequest"};n.resumeWorkRequest=e.resumeWorkRequest}else if(r)return{ok:!1,reason:"resumeWorkRequest is revision-only"};if(void 0!==e.limits){let t=e.limits;if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"limits must be an object"};if(Object.keys(t).some(e=>!ec.has(e)))return{ok:!1,reason:"unknown limits field"};if(void 0!==t.maxAttempts&&!eT(t.maxAttempts,1,10))return{ok:!1,reason:"limits.maxAttempts must be 1-10"};if(void 0!==t.deadlineSeconds&&!eT(t.deadlineSeconds,1,86400))return{ok:!1,reason:"limits.deadlineSeconds must be 1-86400"};n.limits={},void 0!==t.maxAttempts&&(n.limits.maxAttempts=t.maxAttempts),void 0!==t.deadlineSeconds&&(n.limits.deadlineSeconds=t.deadlineSeconds)}return{ok:!0,envelope:n}}let ef=/```botmancers-wake[^\S\r\n]*\r?\n([\s\S]*?)```/g,eg=/WAKE\s+([A-Za-z0-9_-]+)\s*:/gi;function eh(e){return JSON.stringify(function e(t){return Array.isArray(t)?t.map(e):t&&"object"==typeof t?Object.fromEntries(Object.keys(t).sort().map(n=>[n,e(t[n])])):t}(e.validation.ok?{syntax:e.syntax,envelope:e.validation.envelope}:{syntax:e.syntax,raw:e.raw}))}m().maxWakeDepth,m().rootBudget;class eN extends Error{code;constructor(e,t){super(t),this.name="WakeRouterError",this.code=e}}let eR=i.default.prepare("SELECT * FROM wakes WHERE id = ?"),ev=i.default.prepare("SELECT * FROM wakes WHERE idempotency_key = ?"),ey=i.default.prepare("SELECT * FROM wakes WHERE source_event_id = ? AND position = ?");function eL(e,t){return{wake:e,request:e.work_request_id?i.engine.getWorkRequest(e.work_request_id)??null:null,created:t}}function ew(e){return"accepted"===e.status||"blocked"===e.status}function eO(e){return i.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND wake_event_id IS NOT NULL").get(e).n}m().maxContinuations;let ek={kind:"service",id:"botmancers-engine"},eI="Botmancers";function eS(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function eA(e){return i.bots.getById(e)?.name??`agent:${e}`}function eb(e){let t;if("completed"!==e.state||!e.result)return null;try{t=JSON.parse(e.result).reply_message_id}catch{return null}if("string"!=typeof t)return null;let n=i.default.prepare("SELECT * FROM messages WHERE id = ?").get(t);return n&&"bot"===n.sender_type&&n.sender_id===e.target_agent_id?n:null}function eq(e,t=!1){let n=i.engine.listAttempts(e.id),r=n.length>0?n[n.length-1]:null,s=[`Work Request: ${e.id}`,...r?[`Attempt: ${r.id}`]:[],`Agent: ${eA(e.target_agent_id)}`,`Execution kind: ${e.execution_kind}`,`State: ${e.state}`],a=eb(e);if(a){var o;s.push(t?`Result: the ${eA(e.target_agent_id)} reply above.`:`Result:
2009
2018
  ${(o=a.content).length>8e3?`${o.slice(0,8e3)}
2010
2019
  [truncated]`:o}`)}else"failed"===e.state||"cancelled"===e.state?s.push(`Failure: ${e.error_code??e.state}${e.error_message?` - ${e.error_message}`:""}`):null===e.terminal_at&&s.push("Result: not finished yet.");return s.join("\n")}let eC='You coordinate this work. Decide the next step yourself: reply to the person, ask a question, or emit a botmancers-wake block (one per Agent). Reference earlier work with "contextWorkRequests"; a revision names the implementation it resumes in "resumeWorkRequest". Never report a review that did not run.',ex=i.default.prepare("SELECT * FROM work_requests WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?");function eD(e){let t=ex.get(ek.kind,ek.id,e.key);if(t)return t;if(!i.bots.getById(e.coordinatorId)||!i.default.prepare("SELECT 1 FROM conversations WHERE id = ?").get(e.conversationId))return null;let n=i.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND requester_kind = ? AND requester_id = ?").get(e.parent.root_request_id,ek.kind,ek.id),r=m().maxContinuations;if(n.n>=r)return i.default.prepare("SELECT 1 FROM engine_events WHERE request_id = ? AND type = 'lineage_stopped'").get(e.parent.id)||i.engine.appendEvent(e.parent.id,{type:"lineage_stopped",data:{reason:"continuation_budget_exhausted",limit:r,observed:n.n,continues:e.continues,coordinator_agent_id:e.coordinatorId},now:e.now}),null;let s=(0,c.selectExecutionPolicy)({entryPoint:"continuation",executionKind:"conversation"});if(!s.ok)return null;let a="result"===e.continues?Math.max(e.parent.wake_depth-1,0):e.parent.wake_depth,o={safety_version:1,root_principal:{kind:e.parent.root_principal_kind??"unknown",id:e.parent.root_principal_id??"unknown"},wake_depth:a,grant_rule:"readonly_default",grant_id:null,continuations:{used:n.n+1,limit:r}};return i.engine.createOrGetWorkRequest({sourceConversationId:e.conversationId,sourceEventId:e.sourceEventId,requester:ek,targetAgentId:e.coordinatorId,intent:e.intent,executionKind:s.policy.execution_kind,toolProfile:s.policy.tool_profile,idempotencyKey:e.key,parentRequestId:e.parent.id,policy:{source:"coordinator_continuation",continues:e.continues,work_requests:e.subjects},executionPolicy:s.policy,wakeDepth:a,safetySnapshot:o,safety:{principalType:"engine",principal:ek,decision:"allowed",grantRule:"readonly_default",snapshot:o,now:e.now},now:e.now}).request}let eU=i.default.prepare("SELECT 1 FROM terminal_followups WHERE request_id = ? AND done_at IS NULL"),eF=i.default.prepare("UPDATE terminal_followups SET done_at = ? WHERE request_id = ? AND done_at IS NULL");function eW(e,t,n,r){i.engine.transaction(()=>{t&&i.engine.finishAttempt(t,{outcome:"failed",errorCategory:n,errorMessage:r});let s=i.engine.getWorkRequest(e);s&&("queued"===s.state||"running"===s.state)&&i.engine.transitionWorkRequest(e,{from:s.state,to:"failed",errorCode:n,errorMessage:r})})}let eM=function(e,t,n={}){let i=n.owner??`${o.default.hostname()}:${process.pid}:${(0,r.randomUUID)().slice(0,8)}`,s={...function(e=process.env){let t={...eo};for(let n of Object.keys(ed)){let r=e[ed[n]];if(void 0===r||!/^\d+$/.test(r.trim()))continue;let i=Number(r.trim());Number.isSafeInteger(i)&&i>0&&(t[n]=i)}return t.maxGlobal=Math.min(t.maxGlobal,eu.maxGlobal),t.maxPerTarget=Math.min(t.maxPerTarget,eu.maxPerTarget),t}(),...n.config??{}},a=n.now??Date.now,d=function(e,t,n={}){let i=n.now??Date.now,s=n.cancelGraceMs??3e4,a=e.prepare("SELECT * FROM work_attempts WHERE request_id = ? AND finished_at IS NULL"),o=e.prepare("SELECT COUNT(*) AS n FROM work_attempts WHERE request_id = ?"),d=e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?"),l=e.prepare("SELECT 1 FROM engine_events WHERE attempt_id = ? AND type = 'runtime_started' LIMIT 1");function _(e){let n=t.getWorkRequest(e);if(!n)throw new er("not_found",`No work request ${e}.`);return n}function c(e,t,n,r){if(r&&(!e||!r(e,t,n)))throw new er("forbidden",`Not allowed to ${n} this request.`)}function p(e){return Math.max(e.attempt_count,o.get(e.id).n)}function T(t,n){e.prepare("UPDATE dispatch_attention SET cleared_at = ? WHERE request_id = ? AND cleared_at IS NULL").run(n,t)}function m(n,r,i){let s=d.get(n);s&&(e.prepare("DELETE FROM dispatch_leases WHERE request_id = ?").run(n),t.appendEvent(n,{type:"dispatch_released",data:{owner:s.owner,outcome:r,forced:!0},now:i}))}function f(e,n,r){let i=a.get(e.id);if(!i)return null;let s=es(i).transport;return t.finishAttempt(i.id,{outcome:"timed_out"===n?"timed_out":"cancelled"===n?"cancelled":"interrupted",errorCategory:"abandoned",errorMessage:{cancelled:"The request was cancelled while this Attempt was open; its result is no longer awaited.",timed_out:"The Attempt passed its deadline; its result is no longer awaited.",retried:"An operator retried the request; this Attempt is superseded."}[n],now:r}),t.appendEvent(e.id,{type:"attempt_abandoned",attemptId:i.id,data:{reason:n,attempt_number:i.attempt_number,external_run_id:i.external_run_id,transport:"string"==typeof s?s:null},now:r}),{requestId:e.id,attemptId:i.id,externalRunId:i.external_run_id,transport:"string"==typeof s?s:null,reason:n,launched:!!i.external_run_id||!!i.external_session_id||!!l.get(i.id)}}function g(n,r,i,s){let a=r?`${r.kind}:${r.id}`:null;e.prepare("UPDATE work_requests SET cancel_requested_at = ?, cancel_requested_by = ?, cancel_reason = ?, updated_at = ? WHERE id = ? AND cancel_requested_at IS NULL").run(s,a,i,s,n.id),t.appendEvent(n.id,{type:"cancel_requested",data:{by:a,reason:i,state:n.state},now:s})}function h(e,n,r={}){return t.transitionWorkRequest(e.id,{from:e.state,to:"cancelled",reason:"cancel_requested",errorCode:"cancelled",errorMessage:e.cancel_reason??"The request was cancelled.",data:r,now:n})}function N(e,n,r={}){return t.transitionWorkRequest(e.id,{from:e.state,to:"failed",reason:"timed_out",errorCode:"timed_out",errorMessage:"The request passed its deadline.",data:{...r,deadline_at:e.deadline_at},now:n})}function R(n,i,s){let a=(0,E.storedRetryPolicy)(n.retry_policy),o=(0,E.classifyFailure)(i.category,i.code),d=p(n),u=(0,E.decideRetry)({policy:a,attemptCount:d,disposition:o,deadlineAt:n.deadline_at,now:s}),l=i.attention&&"retry"===u.action?{action:"attention"}:u,_={category:i.category,disposition:o,attempt_count:d,max_attempts:a.max_attempts};switch(l.action){case"retry":{e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(l.nextEligibleAt,n.id);let r=t.transitionWorkRequest(n.id,{from:"running",to:"queued",reason:"retry_scheduled",data:{..._,retry:l.retry,delay_ms:l.delayMs,next_eligible_at:l.nextEligibleAt,error_code:i.errorCode},now:s});return{outcome:"retry_scheduled",decision:l,request:r}}case"deadline":return{outcome:"timed_out",decision:l,request:N(n,s,_)};case"attention":{let a=i.attention??`failure:${i.category??"unknown"}`;return e.prepare("INSERT INTO dispatch_attention (id, request_id, attempt_id, reason, detail, created_at) VALUES (?, ?, NULL, ?, ?, ?)").run((0,r.randomUUID)(),n.id,a,i.code,s),t.appendEvent(n.id,{type:"attention_set",data:{reason:a,detail:i.code},now:s}),{outcome:"attention",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"waiting",reason:`manual_attention:${i.attention??i.category??"unknown"}`,data:_,now:s})}}case"exhausted":if(a.max_attempts>1)return{outcome:"retries_exhausted",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",reason:"retries_exhausted",errorCode:i.errorCode,errorMessage:i.errorMessage,data:_,now:s})};case"fail":return{outcome:"failed",decision:l,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",errorCode:i.errorCode,errorMessage:i.errorMessage,data:"fail"===l.action?_:{},now:s})}}}let v={now:i,cancelGraceMs:s,cancel:(e,n={})=>t.transaction(()=>{let t=_(e);if(c(n.actor,t,"cancel",n.authorize),u.TERMINAL_STATES.includes(t.state))return{outcome:"already_terminal",state:t.state,replayed:!0,abandoned:null};let r=n.now??i();if("running"===t.state)return null!==t.cancel_requested_at?{outcome:"cancel_requested",state:"running",replayed:!0,abandoned:null}:(g(t,n.actor,n.reason??null,r),{outcome:"cancel_requested",state:"running",replayed:!1,abandoned:null});null===t.cancel_requested_at&&g(t,n.actor,n.reason??null,r);let s=_(e),a=f(s,"cancelled",r);return T(e,r),m(e,"cancelled",r),{outcome:"cancelled",state:h(s,r,{from_state:t.state}).state,replayed:!1,abandoned:a}}),retry:(n,r={})=>t.transaction(()=>{let s=_(n);if(c(r.actor,s,"retry",r.authorize),u.TERMINAL_STATES.includes(s.state))return{outcome:"already_terminal",state:s.state,abandoned:null};if("queued"===s.state)return{outcome:"already_queued",state:"queued",abandoned:null};if("waiting"!==s.state||null!==s.cancel_requested_at)return{outcome:"not_retryable",state:s.state,abandoned:null};let a=(0,E.storedRetryPolicy)(s.retry_policy),o=p(s);if(o>=a.max_attempts)return{outcome:"retries_exhausted",state:s.state,abandoned:null};let d=r.now??i();if(null!==s.deadline_at&&d>=s.deadline_at)return{outcome:"not_retryable",state:s.state,abandoned:null};let l=f(s,"retried",d);return T(n,d),e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(d,n),{outcome:"retry_scheduled",state:t.transitionWorkRequest(n,{from:"waiting",to:"queued",reason:"retry_scheduled",data:{manual:!0,by:r.actor?`${r.actor.kind}:${r.actor.id}`:null,attempt_count:o,max_attempts:a.max_attempts,retry:o,delay_ms:0,next_eligible_at:d},now:d}).state,abandoned:l}}),timeOut:(e,n)=>t.transaction(()=>{let r=t.getWorkRequest(e),s=n??i();if(!r||!ei.includes(r.state)||null===r.deadline_at||s<r.deadline_at)return null;let a=f(r,"timed_out",s);return T(e,s),m(e,"timed_out",s),N(r,s,{from_state:r.state}),{requestId:e,outcome:"timed_out",abandoned:a}}),settleFailure:(e,n,r)=>t.transaction(()=>{let t=_(e);if("running"!==t.state)throw new u.EngineStoreError("stale_state",`Work request ${e} is ${t.state}, not running.`);return R(t,n,r??i())}),enforceRequest:(e,n,r={})=>t.transaction(()=>{let o,u=t.getWorkRequest(e),l=n??i();if(!u||!ei.includes(u.state)||null!==u.legacy_agent_request_id)return null;if(null!==u.deadline_at&&l>=u.deadline_at)return v.timeOut(e,l);if("running"!==u.state)return null;if(null!==u.cancel_requested_at){let t=d.get(e);if(!(!0===r.force||!t||t.expires_at<=l)&&l-u.cancel_requested_at<s)return null;let n=f(u,"cancelled",l);return m(e,"cancelled",l),h(u,l,{abandoned:null!==n}),{requestId:e,outcome:"cancelled",abandoned:n}}let c=a.get(e),E=c&&"number"==typeof(o=es(c).deadline_at)?o:null;if(!c||null===E||l<E)return null;let p=f(u,"timed_out",l);m(e,"attempt_timed_out",l);let T=R(_(e),{category:"timed_out",code:null,errorCode:"timed_out",errorMessage:"The Attempt passed its deadline."},l);return{requestId:e,outcome:T.outcome,abandoned:p}}),dueRequests(t){let n=t??i();return e.prepare(`
2011
2020
  SELECT id FROM work_requests
@@ -2029,10 +2038,10 @@ ${(o=a.content).length>8e3?`${o.slice(0,8e3)}
2029
2038
  AND (SELECT COUNT(*) FROM dispatch_leases l WHERE l.target_agent_id = w.target_agent_id) < ?
2030
2039
  ORDER BY w.created_at ASC, w.rowid ASC
2031
2040
  LIMIT 1
2032
- `);function N(e,n,r,i){let o=p.get(e.id);return(o?.type==="dispatch_deferred"&&o.data?JSON.parse(o.data).reason:null)!==n&&t.appendEvent(e.id,{type:"dispatch_deferred",data:{reason:n,active_global:r.global,active_target:r.target,max_global:s.maxGlobal,max_per_target:s.maxPerTarget,...i?{waiting_behind:i}:{}},now:a()}),i?{ok:!1,reason:n,blockedBy:i}:{ok:!1,reason:n}}function R(e){if(!m.get(e.requestId,e.token))throw new el(e.requestId)}let v={owner:i,config:s,now:a,control:d,claim:(n,o={})=>t.transaction(()=>{let u=t.getWorkRequest(n);if(!u||"queued"!==u.state||void 0!==o.expectedVersion&&u.version!==o.expectedVersion)return{ok:!1,reason:"not_queued"};let p=a();if(null!==u.deadline_at&&p>=u.deadline_at)return d.timeOut(n,p),{ok:!1,reason:"timed_out"};if(null!==u.next_eligible_at&&p<u.next_eligible_at)return{ok:!1,reason:"not_eligible"};if(c.get(n))return{ok:!1,reason:"attention"};let T=function(e){let t=f.get(e.id);if(t?.decision!=="allowed")return"The request has no allowed safety decision.";if(null!==e.wake_event_id){let t=g.get(e.wake_event_id);if(t?.status!=="accepted")return"The Wake that created this request was not accepted."}return null}(u);if(T)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"not_authorized",expectedVersion:u.version,errorCode:"not_authorized",errorMessage:T,now:p}),{ok:!1,reason:"not_authorized"};let m=(0,E.storedRetryPolicy)(u.retry_policy),R=d.attemptsUsed(u);if(R>=m.max_attempts)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"retries_exhausted",expectedVersion:u.version,errorCode:"retries_exhausted",errorMessage:"No Attempt is left in the retry budget.",data:{attempt_count:R,max_attempts:m.max_attempts},now:p}),{ok:!1,reason:"exhausted"};let v=l.get().n,y=_.get(u.target_agent_id).n;if(v>=s.maxGlobal)return N(u,"global_limit",{global:v,target:y});if(y>=s.maxPerTarget)return N(u,"target_limit",{global:v,target:y});let L=h.get(n,u.created_at,u.created_at,n,p,p,s.maxPerTarget);if(L)return N(u,"older_waiting",{global:v,target:y},L.id);let O={requestId:n,owner:i,token:(0,r.randomUUID)(),expiresAt:p+s.leaseMs};return e.prepare(`
2041
+ `);function N(e,n,r,i){let o=p.get(e.id);return(o?.type==="dispatch_deferred"&&o.data?JSON.parse(o.data).reason:null)!==n&&t.appendEvent(e.id,{type:"dispatch_deferred",data:{reason:n,active_global:r.global,active_target:r.target,max_global:s.maxGlobal,max_per_target:s.maxPerTarget,...i?{waiting_behind:i}:{}},now:a()}),i?{ok:!1,reason:n,blockedBy:i}:{ok:!1,reason:n}}function R(e){if(!m.get(e.requestId,e.token))throw new el(e.requestId)}let v={owner:i,config:s,now:a,control:d,claim:(n,o={})=>t.transaction(()=>{let u=t.getWorkRequest(n);if(!u||"queued"!==u.state||void 0!==o.expectedVersion&&u.version!==o.expectedVersion)return{ok:!1,reason:"not_queued"};let p=a();if(null!==u.deadline_at&&p>=u.deadline_at)return d.timeOut(n,p),{ok:!1,reason:"timed_out"};if(null!==u.next_eligible_at&&p<u.next_eligible_at)return{ok:!1,reason:"not_eligible"};if(c.get(n))return{ok:!1,reason:"attention"};let T=function(e){let t=f.get(e.id);if(t?.decision!=="allowed")return"The request has no allowed safety decision.";if(null!==e.wake_event_id){let t=g.get(e.wake_event_id);if(t?.status!=="accepted")return"The Wake that created this request was not accepted."}return null}(u);if(T)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"not_authorized",expectedVersion:u.version,errorCode:"not_authorized",errorMessage:T,now:p}),{ok:!1,reason:"not_authorized"};let m=(0,E.storedRetryPolicy)(u.retry_policy),R=d.attemptsUsed(u);if(R>=m.max_attempts)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"retries_exhausted",expectedVersion:u.version,errorCode:"retries_exhausted",errorMessage:"No Attempt is left in the retry budget.",data:{attempt_count:R,max_attempts:m.max_attempts},now:p}),{ok:!1,reason:"exhausted"};let v=l.get().n,y=_.get(u.target_agent_id).n;if(v>=s.maxGlobal)return N(u,"global_limit",{global:v,target:y});if(y>=s.maxPerTarget)return N(u,"target_limit",{global:v,target:y});let L=h.get(n,u.created_at,u.created_at,n,p,p,s.maxPerTarget);if(L)return N(u,"older_waiting",{global:v,target:y},L.id);let w={requestId:n,owner:i,token:(0,r.randomUUID)(),expiresAt:p+s.leaseMs};return e.prepare(`
2033
2042
  INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
2034
2043
  VALUES (?, ?, ?, ?, ?, ?, ?)
2035
- `).run(n,u.target_agent_id,i,O.token,p,p,O.expiresAt),t.appendEvent(n,{type:"dispatch_claimed",data:{owner:i,lease_expires_at:O.expiresAt,active_global:v+1,active_target:y+1,attempt_number:R+1,max_attempts:m.max_attempts},now:p}),e.prepare("UPDATE work_requests SET attempt_count = ?, next_eligible_at = NULL WHERE id = ?").run(R+1,n),{ok:!0,lease:O,request:t.transitionWorkRequest(n,{from:"queued",to:"running",expectedVersion:u.version,data:o.data,now:p})}}),claimNext(t){let n=t??e.prepare(`
2044
+ `).run(n,u.target_agent_id,i,w.token,p,p,w.expiresAt),t.appendEvent(n,{type:"dispatch_claimed",data:{owner:i,lease_expires_at:w.expiresAt,active_global:v+1,active_target:y+1,attempt_number:R+1,max_attempts:m.max_attempts},now:p}),e.prepare("UPDATE work_requests SET attempt_count = ?, next_eligible_at = NULL WHERE id = ?").run(R+1,n),{ok:!0,lease:w,request:t.transitionWorkRequest(n,{from:"queued",to:"running",expectedVersion:u.version,data:o.data,now:p})}}),claimNext(t){let n=t??e.prepare(`
2036
2045
  SELECT id FROM work_requests WHERE state = 'queued' AND legacy_agent_request_id IS NULL AND executor = 'dispatcher'
2037
2046
  AND (next_eligible_at IS NULL OR next_eligible_at <= ?)
2038
2047
  ORDER BY created_at ASC, rowid ASC
@@ -2051,14 +2060,14 @@ ${(o=a.content).length>8e3?`${o.slice(0,8e3)}
2051
2060
  `).run(...r).changes)return null}else{let r=t.getWorkRequest(n.requestId);if(!r||"running"!==r.state||e.prepare("SELECT 1 FROM dispatch_leases WHERE request_id = ?").get(n.requestId)||c.get(n.requestId))return null;e.prepare(`
2052
2061
  INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
2053
2062
  VALUES (?, ?, ?, ?, ?, ?, ?)
2054
- `).run(n.requestId,r.target_agent_id,i,d.token,o,o,d.expiresAt)}return t.appendEvent(n.requestId,{type:"dispatch_lease_taken_over",data:{owner:i,previous_owner:n.priorOwner,reason:n.reason},now:o}),d}),deferredRequestIds:()=>T.all().map(e=>e.id),leaseOf:t=>e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?").get(t)};return v}(i.default,i.engine);class eH extends Error{reason;constructor(e){super(`Commit deferred: ${e}`),this.reason=e}}async function eX(e){let t=await eG(e);var n=e,s=t||i.engine.getWorkRequest(e)?.state!=="queued";for(let e of function(e,t=Date.now()){return i.engine.transaction(()=>{var n;if(!eU.get(e))return[];let s=i.engine.getWorkRequest(e);if(!s||null===s.terminal_at||null!==s.legacy_agent_request_id)return[];eF.run(t,e);let a=[],o=e=>{e&&"queued"===e.state&&a.push(e.id)},d=eb(s);if(d){let e,n=[],a=null;try{n=function(e){if("string"!=typeof e.sourceEventId||!e.sourceEventId.trim())throw new eN("invalid_input","sourceEventId is required.");return i.default.transaction(()=>{let t=i.default.prepare("SELECT * FROM messages WHERE id = ?").get(e.sourceEventId);if(!t)throw new eN("source_not_found",`No conversation event ${e.sourceEventId}.`);if("bot"!==t.sender_type||!t.sender_id||!i.bots.getById(t.sender_id))throw new eN("invalid_input","Wakes are routed only from an Agent message.");let n=null;if(e.parentRequestId){if(!(n=i.engine.getWorkRequest(e.parentRequestId)??null))throw new eN("not_found",`No parent Work Request ${e.parentRequestId}.`);if(n.target_agent_id!==t.sender_id||n.source_conversation_id!==t.conversation_id)throw new eN("parent_mismatch","The parent Work Request was not run by this Agent in this conversation.")}let s=e.now??Date.now();return(function(e){let t=[],n=0,r=(n,r)=>{var i,s;let a;for(let o of(i=e.slice(n,r),(a=[...i.matchAll(eg)]).map((e,t)=>{let r=t+1<a.length?a[t+1].index:i.length,s=i.slice(e.index,r);return{at:n+e.index,raw:s.trim(),target:e[1],message:s.slice(e[0].length).trim()}}))){let e="GROUP"===o.target.toUpperCase()?{ok:!1,reason:"group wakes are not supported; wake one Agent by name"}:0===o.message.length?{ok:!1,reason:"objective must be non-empty (max 20000 characters)"}:em((s=o.target,{version:1,target:s,executionKind:"conversation",objective:o.message}));t.push({at:o.at,syntax:"legacy",raw:o.raw,validation:e})}};for(let i of e.matchAll(ef)){let e,s=i.index;r(n,s);try{e=em(JSON.parse(i[1]))}catch{e={ok:!1,reason:"block is not valid JSON"}}t.push({at:s,syntax:"structured",raw:i[0],validation:e}),n=s+i[0].length}return r(n,e.length),t.sort((e,t)=>e.at-t.at).map((e,t)=>({position:t,syntax:e.syntax,raw:e.raw,validation:e.validation}))})(t.content).map(e=>(function(e,t,n,s,a){var o,d;let u,_,E=(o=t.id,_=(0,r.createHash)("sha256").update(eh(e)).digest("hex").slice(0,32),`wake:v1:${o}:${e.position}:${_}`),p=ev.get(E);if(p)return eL(p,!1);if(ey.get(t.id,e.position))throw new eN("idempotency_conflict",`Wake ${e.position} of event ${t.id} was already recorded with a different payload.`);let T=(0,r.randomUUID)(),g=s?.wake_event_id?(d=s.wake_event_id,eR.get(d)):void 0,h={id:T,idempotency_key:E,source_conversation_id:t.conversation_id,source_event_id:t.id,requester_agent_id:n,parent_request_id:s?.id??null,root_wake_id:g?.root_wake_id??T,syntax:e.syntax},N=null;if(e.validation.ok)if(s){let r=function(e,t,n){for(let r of[...e.contextWorkRequests??[],...e.resumeWorkRequest?[e.resumeWorkRequest]:[]]){let e=i.engine.getWorkRequest(r);if(!(e&&(n?e.root_request_id===n.root_request_id:e.source_conversation_id===t)))return`Work Request ${r} is not in this conversation lineage.`}return null}(N=e.validation.envelope,t.conversation_id,s);u=r?{status:"rejected",code:"invalid_reference",reason:r}:function(e){let{maxWakeDepth:t}=m(),n=e.wake_depth+1;return n>t?{status:"rejected",code:"depth_exceeded",limit:t,observed:n,reason:`This work is already ${e.wake_depth} Wakes deep (limit ${t}).`}:function(e){let{rootBudget:t}=m(),n=ew(e);return n<t?null:{status:"rejected",code:"root_budget_exhausted",limit:t,observed:n,reason:`This work already used ${n} Wakes (limit ${t}).`}}(e.root_request_id)}(s)??function(e,t,n){let r=(0,i.resolveWakeTarget)(e.target);if(!r.ok){var s;return"ambiguous"===r.reason?{status:"unavailable",code:"target_ambiguous",reason:`More than one Agent is named ${e.target}; rename one to restore routing.`}:(s=e.target,i.default.prepare("SELECT 1 FROM groups WHERE lower(trim(name)) = lower(trim(?))").get(s))?{status:"rejected",code:"target_is_group",reason:`${e.target} is a Group; wake one Agent by name.`}:{status:"unavailable",code:"target_not_found",reason:`No Agent is named ${e.target}.`}}return function(e,t,n,r){let s=r.parent?.root_request_id??null,a=(0,c.selectExecutionPolicy)({entryPoint:"wake",executionKind:e.executionKind,wakeSyntax:t,resumesWorkRequest:!!e.resumeWorkRequest});if(!a.ok)return{status:"rejected",code:"unsupported_policy",reason:a.reason,target:n};let o=a.policy;if(e.resumeWorkRequest){let t=i.engine.getWorkRequest(e.resumeWorkRequest);if(!t||t.target_agent_id!==n.id||!["implementation","revision"].includes(t.execution_kind))return{status:"rejected",code:"invalid_reference",reason:"A revision resumes an implementation Work Request of the same Agent.",target:n}}if("review"===e.executionKind&&((e.contextWorkRequests??[]).some(e=>{let t=i.engine.getWorkRequest(e);return t&&["implementation","revision"].includes(t.execution_kind)&&t.target_agent_id===n.id})||null!==s&&i.default.prepare("SELECT 1 FROM work_requests WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision') LIMIT 1").get(s,n.id)))return{status:"rejected",code:"reviewer_not_independent",reason:`${n.name} did the work under review; wake a different reviewer or ask the person.`,target:n};let d=function(e,t,n){var r,s,a;if("implementation"!==(r=e.executionKind)&&"revision"!==r)return{rule:"readonly_default",id:null};if(function(e,t,n){var r;let s=n.parent;if("implementation"!==e.executionKind||t.id!==n.agentId||!s||null!==s.wake_event_id||0!==s.wake_depth||null!==s.parent_request_id||s.target_agent_id!==n.agentId||(r={kind:s.root_principal_kind??"",id:s.root_principal_id??""},r.kind!==f.kind||r.id!==f.id))return!1;let a=i.engine.listSafetyDecisions(s.id)[0];return a?.principal_type==="human_owner"}(e,t,n))return{rule:"owner_direct_self_wake",id:null};let o=(s=n.agentId,a=t.id,i.default.prepare("SELECT * FROM wake_grants WHERE caller_agent_id = ? AND target_agent_id = ? AND authority = 'edit' AND revoked_at IS NULL").get(s,a));return o?{rule:"edit_grant",id:o.id}:null}(e,n,r);return d?function(e,t,n){var r;let s=i.bots.getById(e.id),a=(0,l.resolveAgent)(s);if(!a.launchable)return{status:"blocked",code:"target_unconfigured",reason:"connection"===a.launch_blocker?`${e.name} has no runtime connection.`:"session_scope"===a.launch_blocker?`${e.name} has no session scope.`:`${e.name} has an unsupported Agent type.`,target:e,policy:t,grant:n};let o=(r=s,"hermes-gateway"===(0,l.agentTransport)((0,l.resolveAgent)(r).agent)?q()?{available:!0}:{available:!1,reason:"The Hermes gateway is not configured (HERMES_API_SERVER_KEY is unset)."}:{available:!0});return o.available?{status:"accepted",code:null,reason:null,target:e,policy:t,grant:n}:{status:"blocked",code:"target_unavailable",reason:o.reason,target:e,policy:t,grant:n}}(n,o,d):{status:"blocked",code:"grant_required",reason:`${n.name} needs your approval for edit work.`,target:n,policy:o,grant:null}}(e,t,{id:r.agentId,name:r.displayName},n)}(N,e.syntax,{agentId:n,parent:s})}else N=e.validation.envelope,u={status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};else u={status:"rejected",code:"invalid_envelope",reason:e.validation.reason};let R=N&&eO(u)?function(e,t,n,r){var s,a,o,d,u,l;let _,c,E=e.parent_request_id?i.engine.getWorkRequest(e.parent_request_id)??null:null;if(!E)throw new eN("invalid_input","A Wake creates work only in a tracked lineage.");let p=(s={rootPrincipal:{kind:E.root_principal_kind??"unknown",id:E.root_principal_id??"unknown"},wakeDepth:E.wake_depth+1,grant:n.grant,rootRequestId:E.root_request_id,counting:!0},_=m(),c=s.rootRequestId?ew(s.rootRequestId):0,{safety_version:1,root_principal:s.rootPrincipal,wake_depth:s.wakeDepth,grant_rule:s.grant?.rule??null,grant_id:s.grant?.id??null,root_budget:{used:c+ +!!s.counting,limit:_.rootBudget},safety_limits:{max_wake_depth:_.maxWakeDepth,root_budget:_.rootBudget}}),{request:T}=i.engine.createOrGetWorkRequest({sourceConversationId:e.source_conversation_id,sourceEventId:e.source_event_id,requester:{kind:"bot",id:e.requester_agent_id},targetAgentId:n.target.id,intent:t.objective,executionKind:n.policy.execution_kind,toolProfile:n.policy.tool_profile,idempotencyKey:e.idempotency_key,parentRequestId:e.parent_request_id,wakeEventId:e.id,policy:{source:"wake",wake_version:1,wake_syntax:e.syntax,root_wake_id:e.root_wake_id,requested_target:t.target,target_name_snapshot:n.target.name,context_work_requests:t.contextWorkRequests??[],resume_work_request:t.resumeWorkRequest??null,limits:t.limits??{},return_to:{agent_id:e.requester_agent_id,conversation_id:e.source_conversation_id}},executionPolicy:n.policy,initialState:"blocked"===n.status?"blocked":"queued",stateReason:"blocked"===n.status?`${n.code}: ${n.reason}`:null,safetySnapshot:p,safety:(a=e.id,o=e.requester_agent_id,{principalType:"agent_principal",principal:{kind:"bot",id:o},decision:"accepted"===n.status?"allowed":"blocked",reasonCode:n.code,grantRule:n.grant?.rule??null,grantId:n.grant?.id??null,wakeId:a,snapshot:p,now:r}),now:r});return"grant_required"===n.code&&(d=T,u=e.id,l=r,i.engine.appendEvent(d.id,{type:"grant_requested",data:{wake_id:u,caller_agent_id:d.requester_id,target_agent_id:d.target_agent_id,authority:"edit",execution_kind:d.execution_kind},now:l})),T}(h,N,u,a):null;return i.default.prepare(`
2063
+ `).run(n.requestId,r.target_agent_id,i,d.token,o,o,d.expiresAt)}return t.appendEvent(n.requestId,{type:"dispatch_lease_taken_over",data:{owner:i,previous_owner:n.priorOwner,reason:n.reason},now:o}),d}),deferredRequestIds:()=>T.all().map(e=>e.id),leaseOf:t=>e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?").get(t)};return v}(i.default,i.engine);class eH extends Error{reason;constructor(e){super(`Commit deferred: ${e}`),this.reason=e}}async function eX(e){let t=await eG(e);var n=e,s=t||i.engine.getWorkRequest(e)?.state!=="queued";for(let e of function(e,t=Date.now()){return i.engine.transaction(()=>{var n;if(!eU.get(e))return[];let s=i.engine.getWorkRequest(e);if(!s||null===s.terminal_at||null!==s.legacy_agent_request_id)return[];eF.run(t,e);let a=[],o=e=>{e&&"queued"===e.state&&a.push(e.id)},d=eb(s);if(d){let e,n=[],a=null;try{n=function(e){if("string"!=typeof e.sourceEventId||!e.sourceEventId.trim())throw new eN("invalid_input","sourceEventId is required.");return i.default.transaction(()=>{let t=i.default.prepare("SELECT * FROM messages WHERE id = ?").get(e.sourceEventId);if(!t)throw new eN("source_not_found",`No conversation event ${e.sourceEventId}.`);if("bot"!==t.sender_type||!t.sender_id||!i.bots.getById(t.sender_id))throw new eN("invalid_input","Wakes are routed only from an Agent message.");let n=null;if(e.parentRequestId){if(!(n=i.engine.getWorkRequest(e.parentRequestId)??null))throw new eN("not_found",`No parent Work Request ${e.parentRequestId}.`);if(n.target_agent_id!==t.sender_id||n.source_conversation_id!==t.conversation_id)throw new eN("parent_mismatch","The parent Work Request was not run by this Agent in this conversation.")}let s=e.now??Date.now();return(function(e){let t=[],n=0,r=(n,r)=>{var i,s;let a;for(let o of(i=e.slice(n,r),(a=[...i.matchAll(eg)]).map((e,t)=>{let r=t+1<a.length?a[t+1].index:i.length,s=i.slice(e.index,r);return{at:n+e.index,raw:s.trim(),target:e[1],message:s.slice(e[0].length).trim()}}))){let e="GROUP"===o.target.toUpperCase()?{ok:!1,reason:"group wakes are not supported; wake one Agent by name"}:0===o.message.length?{ok:!1,reason:"objective must be non-empty (max 20000 characters)"}:em((s=o.target,{version:1,target:s,executionKind:"conversation",objective:o.message}));t.push({at:o.at,syntax:"legacy",raw:o.raw,validation:e})}};for(let i of e.matchAll(ef)){let e,s=i.index;r(n,s);try{e=em(JSON.parse(i[1]))}catch{e={ok:!1,reason:"block is not valid JSON"}}t.push({at:s,syntax:"structured",raw:i[0],validation:e}),n=s+i[0].length}return r(n,e.length),t.sort((e,t)=>e.at-t.at).map((e,t)=>({position:t,syntax:e.syntax,raw:e.raw,validation:e.validation}))})(t.content).map(e=>(function(e,t,n,s,a){var o,d;let u,_,E=(o=t.id,_=(0,r.createHash)("sha256").update(eh(e)).digest("hex").slice(0,32),`wake:v1:${o}:${e.position}:${_}`),p=ev.get(E);if(p)return eL(p,!1);if(ey.get(t.id,e.position))throw new eN("idempotency_conflict",`Wake ${e.position} of event ${t.id} was already recorded with a different payload.`);let T=(0,r.randomUUID)(),g=s?.wake_event_id?(d=s.wake_event_id,eR.get(d)):void 0,h={id:T,idempotency_key:E,source_conversation_id:t.conversation_id,source_event_id:t.id,requester_agent_id:n,parent_request_id:s?.id??null,root_wake_id:g?.root_wake_id??T,syntax:e.syntax},N=null;if(e.validation.ok)if(s){let r=function(e,t,n){for(let r of[...e.contextWorkRequests??[],...e.resumeWorkRequest?[e.resumeWorkRequest]:[]]){let e=i.engine.getWorkRequest(r);if(!(e&&(n?e.root_request_id===n.root_request_id:e.source_conversation_id===t)))return`Work Request ${r} is not in this conversation lineage.`}return null}(N=e.validation.envelope,t.conversation_id,s);u=r?{status:"rejected",code:"invalid_reference",reason:r}:function(e){let{maxWakeDepth:t}=m(),n=e.wake_depth+1;return n>t?{status:"rejected",code:"depth_exceeded",limit:t,observed:n,reason:`This work is already ${e.wake_depth} Wakes deep (limit ${t}).`}:function(e){let{rootBudget:t}=m(),n=eO(e);return n<t?null:{status:"rejected",code:"root_budget_exhausted",limit:t,observed:n,reason:`This work already used ${n} Wakes (limit ${t}).`}}(e.root_request_id)}(s)??function(e,t,n){let r=(0,i.resolveWakeTarget)(e.target);if(!r.ok){var s;return"ambiguous"===r.reason?{status:"unavailable",code:"target_ambiguous",reason:`More than one Agent is named ${e.target}; rename one to restore routing.`}:(s=e.target,i.default.prepare("SELECT 1 FROM groups WHERE lower(trim(name)) = lower(trim(?))").get(s))?{status:"rejected",code:"target_is_group",reason:`${e.target} is a Group; wake one Agent by name.`}:{status:"unavailable",code:"target_not_found",reason:`No Agent is named ${e.target}.`}}return function(e,t,n,r){let s=r.parent?.root_request_id??null,a=(0,c.selectExecutionPolicy)({entryPoint:"wake",executionKind:e.executionKind,wakeSyntax:t,resumesWorkRequest:!!e.resumeWorkRequest});if(!a.ok)return{status:"rejected",code:"unsupported_policy",reason:a.reason,target:n};let o=a.policy;if(e.resumeWorkRequest){let t=i.engine.getWorkRequest(e.resumeWorkRequest);if(!t||t.target_agent_id!==n.id||!["implementation","revision"].includes(t.execution_kind))return{status:"rejected",code:"invalid_reference",reason:"A revision resumes an implementation Work Request of the same Agent.",target:n}}if("review"===e.executionKind&&((e.contextWorkRequests??[]).some(e=>{let t=i.engine.getWorkRequest(e);return t&&["implementation","revision"].includes(t.execution_kind)&&t.target_agent_id===n.id})||null!==s&&i.default.prepare("SELECT 1 FROM work_requests WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision') LIMIT 1").get(s,n.id)))return{status:"rejected",code:"reviewer_not_independent",reason:`${n.name} did the work under review; wake a different reviewer or ask the person.`,target:n};let d=function(e,t,n){var r,s,a;if("implementation"!==(r=e.executionKind)&&"revision"!==r)return{rule:"readonly_default",id:null};if(function(e,t,n){var r;let s=n.parent;if("implementation"!==e.executionKind||t.id!==n.agentId||!s||null!==s.wake_event_id||0!==s.wake_depth||null!==s.parent_request_id||s.target_agent_id!==n.agentId||(r={kind:s.root_principal_kind??"",id:s.root_principal_id??""},r.kind!==f.kind||r.id!==f.id))return!1;let a=i.engine.listSafetyDecisions(s.id)[0];return a?.principal_type==="human_owner"}(e,t,n))return{rule:"owner_direct_self_wake",id:null};let o=(s=n.agentId,a=t.id,i.default.prepare("SELECT * FROM wake_grants WHERE caller_agent_id = ? AND target_agent_id = ? AND authority = 'edit' AND revoked_at IS NULL").get(s,a));return o?{rule:"edit_grant",id:o.id}:null}(e,n,r);return d?function(e,t,n){var r;let s=i.bots.getById(e.id),a=(0,l.resolveAgent)(s);if(!a.launchable)return{status:"blocked",code:"target_unconfigured",reason:"connection"===a.launch_blocker?`${e.name} has no runtime connection.`:"session_scope"===a.launch_blocker?`${e.name} has no session scope.`:`${e.name} has an unsupported Agent type.`,target:e,policy:t,grant:n};let o=(r=s,"hermes-gateway"===(0,l.agentTransport)((0,l.resolveAgent)(r).agent)?q()?{available:!0}:{available:!1,reason:"The Hermes gateway is not configured (HERMES_API_SERVER_KEY is unset)."}:{available:!0});return o.available?{status:"accepted",code:null,reason:null,target:e,policy:t,grant:n}:{status:"blocked",code:"target_unavailable",reason:o.reason,target:e,policy:t,grant:n}}(n,o,d):{status:"blocked",code:"grant_required",reason:`${n.name} needs your approval for edit work.`,target:n,policy:o,grant:null}}(e,t,{id:r.agentId,name:r.displayName},n)}(N,e.syntax,{agentId:n,parent:s})}else N=e.validation.envelope,u={status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};else u={status:"rejected",code:"invalid_envelope",reason:e.validation.reason};let R=N&&ew(u)?function(e,t,n,r){var s,a,o,d,u,l;let _,c,E=e.parent_request_id?i.engine.getWorkRequest(e.parent_request_id)??null:null;if(!E)throw new eN("invalid_input","A Wake creates work only in a tracked lineage.");let p=(s={rootPrincipal:{kind:E.root_principal_kind??"unknown",id:E.root_principal_id??"unknown"},wakeDepth:E.wake_depth+1,grant:n.grant,rootRequestId:E.root_request_id,counting:!0},_=m(),c=s.rootRequestId?eO(s.rootRequestId):0,{safety_version:1,root_principal:s.rootPrincipal,wake_depth:s.wakeDepth,grant_rule:s.grant?.rule??null,grant_id:s.grant?.id??null,root_budget:{used:c+ +!!s.counting,limit:_.rootBudget},safety_limits:{max_wake_depth:_.maxWakeDepth,root_budget:_.rootBudget}}),{request:T}=i.engine.createOrGetWorkRequest({sourceConversationId:e.source_conversation_id,sourceEventId:e.source_event_id,requester:{kind:"bot",id:e.requester_agent_id},targetAgentId:n.target.id,intent:t.objective,executionKind:n.policy.execution_kind,toolProfile:n.policy.tool_profile,idempotencyKey:e.idempotency_key,parentRequestId:e.parent_request_id,wakeEventId:e.id,policy:{source:"wake",wake_version:1,wake_syntax:e.syntax,root_wake_id:e.root_wake_id,requested_target:t.target,target_name_snapshot:n.target.name,context_work_requests:t.contextWorkRequests??[],resume_work_request:t.resumeWorkRequest??null,limits:t.limits??{},return_to:{agent_id:e.requester_agent_id,conversation_id:e.source_conversation_id}},executionPolicy:n.policy,initialState:"blocked"===n.status?"blocked":"queued",stateReason:"blocked"===n.status?`${n.code}: ${n.reason}`:null,safetySnapshot:p,safety:(a=e.id,o=e.requester_agent_id,{principalType:"agent_principal",principal:{kind:"bot",id:o},decision:"accepted"===n.status?"allowed":"blocked",reasonCode:n.code,grantRule:n.grant?.rule??null,grantId:n.grant?.id??null,wakeId:a,snapshot:p,now:r}),now:r});return"grant_required"===n.code&&(d=T,u=e.id,l=r,i.engine.appendEvent(d.id,{type:"grant_requested",data:{wake_id:u,caller_agent_id:d.requester_id,target_agent_id:d.target_agent_id,authority:"edit",execution_kind:d.execution_kind},now:l})),T}(h,N,u,a):null;return i.default.prepare(`
2055
2064
  INSERT INTO wakes (
2056
2065
  id, idempotency_key, source_conversation_id, source_event_id, position, syntax, payload,
2057
2066
  requester_agent_id, requested_target, target_agent_id, target_name_snapshot, execution_kind,
2058
2067
  parent_request_id, root_request_id, root_wake_id, depth, status, reason_code, reason,
2059
2068
  work_request_id, limit_value, observed_value, created_at, updated_at
2060
2069
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2061
- `).run(T,E,t.conversation_id,t.id,e.position,e.syntax,eh(e),n,N?.target??null,u.target?.id??null,u.target?.name??null,N?.executionKind??null,s?.id??null,R?.root_request_id??s?.root_request_id??null,h.root_wake_id,R?.wake_depth??(s?s.wake_depth+1:0),u.status,u.code,u.reason,R?.id??null,eO(u)?null:u.limit??null,eO(u)?null:u.observed??null,a,a),eL(eR.get(T),!0)})(e,t,t.sender_id,n,s))}).immediate()}({sourceEventId:d.id,parentRequestId:s.id,now:t})}catch(e){if(!(e instanceof eN))throw e;console.error(`Wakes of ${d.id} could not be routed:`,e.message),a=e}for(let e of n)o(e.request);let u=n.filter(e=>"rejected"===e.wake.status||"unavailable"===e.wake.status);(a||u.length>0)&&o(eD({key:`continuation:v1:wakes:${d.id}`,coordinatorId:s.target_agent_id,conversationId:d.conversation_id,sourceEventId:d.id,parent:s,intent:a?["[Wake not started] The Wakes in your last message could not be routed, so no work started:",a.message,eC].join("\n\n"):(e=u.map(({wake:e})=>{let t=e.target_name_snapshot??e.requested_target??"an unnamed target",n=e.execution_kind??"unknown",r="blocked"===e.status?"is waiting (blocked)":`was ${e.status}`;return`- Wake ${e.position+1} (${n}) to ${t} ${r}: ${e.reason??e.reason_code??"no reason recorded"}`+(e.work_request_id?` Work Request: ${e.work_request_id}.`:" No Work Request was created.")}),[`[Wake not started] ${1===u.length?"One Wake":`${u.length} Wakes`} from your last message did not start any work:`,e.join("\n"),eC].join("\n\n")),continues:"wake_outcome",subjects:u.flatMap(e=>e.wake.work_request_id?[e.wake.work_request_id]:[]),now:t}))}let u=function(e){if(!e.wake_event_id)return null;let t=eS(e).return_to;return t&&"string"==typeof t.agent_id&&"string"==typeof t.conversation_id?{agentId:t.agent_id,conversationId:t.conversation_id}:null}(s);return u&&o(eD({key:`continuation:v1:result:${s.id}`,coordinatorId:u.agentId,conversationId:u.conversationId,sourceEventId:d?.id??s.source_event_id,parent:s,intent:(n=d?.conversation_id===u.conversationId,[`[Work Request result] ${eA(s.target_agent_id)} finished the ${s.execution_kind} you requested.`,eq(s,n),eC].join("\n\n")),continues:"result",subjects:[s.id],now:t})),a})}(n))ej(e);(function(e){let t=eY.forHopRequest(e);if(t)try{for(let e of eY.advance(t.id))ej(e)}catch(e){console.error("Exchange advance failed:",e instanceof Error?e.message:"unknown error")}})(n),s&&function(){for(let e of eM.deferredRequestIds())eP.has(e)||ej(e)}()}async function eG(e){let n,s,a=i.engine.getWorkRequest(e);if(!a||"queued"!==a.state||null!==a.next_eligible_at&&eM.now()<a.next_eligible_at)return!1;let o=i.bots.getById(a.target_agent_id);if(!o)return eW(e,null,"agent_unavailable","The agent is no longer registered."),!1;let _=(0,c.authorizeWorkRequest)(a);if(!_.ok){try{i.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:a.version,reason:"policy_rejected",errorCode:_.code,errorMessage:_.reason})}catch(e){if(!(e instanceof u.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let E=_.policy,p=(0,l.resolveAgent)(o).agent,T=eY.resumeFor(a,p)??function(e,t){if("revision"!==e.execution_kind)return{ok:!0,binding:null};let n=eS(e).resume_work_request,r="string"==typeof n?i.engine.getWorkRequest(n):void 0;if(!r||r.root_request_id!==e.root_request_id||r.target_agent_id!==e.target_agent_id||!["implementation","revision"].includes(r.execution_kind))return{ok:!1,reason:"The revision does not reference an implementation of this Agent in this lineage."};let s=i.engine.getActiveSessionBinding({agentId:e.target_agent_id,adapter:t,conversationId:r.source_conversation_id,requestId:r.id});return s?{ok:!0,binding:s}:{ok:!1,reason:"The session of the referenced implementation is not available to resume."}}(a,p);if(!T.ok){try{i.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:a.version,reason:"session_unavailable",errorCode:"session_unavailable",errorMessage:T.reason})}catch(e){if(!(e instanceof u.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let m=null,f=null;try{m=function(e){var n,r;let i,s=(0,l.resolveAgent)(e.bot);if(!s.launchable)throw new V("agent_unavailable","connection"===(n=s.launch_blocker)?"The agent has no runtime connection. Choose one in Config.":"session_scope"===n?"The agent has no session scope. Choose one in Config.":"The agent has an unsupported Agent type.");let a={prompt:{kind:"conversation",system:(i=(r=e.bot).title?`${r.name} (${r.title})`:r.name,`You are ${i}.
2070
+ `).run(T,E,t.conversation_id,t.id,e.position,e.syntax,eh(e),n,N?.target??null,u.target?.id??null,u.target?.name??null,N?.executionKind??null,s?.id??null,R?.root_request_id??s?.root_request_id??null,h.root_wake_id,R?.wake_depth??(s?s.wake_depth+1:0),u.status,u.code,u.reason,R?.id??null,ew(u)?null:u.limit??null,ew(u)?null:u.observed??null,a,a),eL(eR.get(T),!0)})(e,t,t.sender_id,n,s))}).immediate()}({sourceEventId:d.id,parentRequestId:s.id,now:t})}catch(e){if(!(e instanceof eN))throw e;console.error(`Wakes of ${d.id} could not be routed:`,e.message),a=e}for(let e of n)o(e.request);let u=n.filter(e=>"rejected"===e.wake.status||"unavailable"===e.wake.status);(a||u.length>0)&&o(eD({key:`continuation:v1:wakes:${d.id}`,coordinatorId:s.target_agent_id,conversationId:d.conversation_id,sourceEventId:d.id,parent:s,intent:a?["[Wake not started] The Wakes in your last message could not be routed, so no work started:",a.message,eC].join("\n\n"):(e=u.map(({wake:e})=>{let t=e.target_name_snapshot??e.requested_target??"an unnamed target",n=e.execution_kind??"unknown",r="blocked"===e.status?"is waiting (blocked)":`was ${e.status}`;return`- Wake ${e.position+1} (${n}) to ${t} ${r}: ${e.reason??e.reason_code??"no reason recorded"}`+(e.work_request_id?` Work Request: ${e.work_request_id}.`:" No Work Request was created.")}),[`[Wake not started] ${1===u.length?"One Wake":`${u.length} Wakes`} from your last message did not start any work:`,e.join("\n"),eC].join("\n\n")),continues:"wake_outcome",subjects:u.flatMap(e=>e.wake.work_request_id?[e.wake.work_request_id]:[]),now:t}))}let u=function(e){if(!e.wake_event_id)return null;let t=eS(e).return_to;return t&&"string"==typeof t.agent_id&&"string"==typeof t.conversation_id?{agentId:t.agent_id,conversationId:t.conversation_id}:null}(s);return u&&o(eD({key:`continuation:v1:result:${s.id}`,coordinatorId:u.agentId,conversationId:u.conversationId,sourceEventId:d?.id??s.source_event_id,parent:s,intent:(n=d?.conversation_id===u.conversationId,[`[Work Request result] ${eA(s.target_agent_id)} finished the ${s.execution_kind} you requested.`,eq(s,n),eC].join("\n\n")),continues:"result",subjects:[s.id],now:t})),a})}(n))ej(e);(function(e){let t=eY.forHopRequest(e);if(t)try{for(let e of eY.advance(t.id))ej(e)}catch(e){console.error("Exchange advance failed:",e instanceof Error?e.message:"unknown error")}})(n),s&&function(){for(let e of eM.deferredRequestIds())eP.has(e)||ej(e)}()}async function eG(e){let n,s,a=i.engine.getWorkRequest(e);if(!a||"queued"!==a.state||null!==a.next_eligible_at&&eM.now()<a.next_eligible_at)return!1;let o=i.bots.getById(a.target_agent_id);if(!o)return eW(e,null,"agent_unavailable","The agent is no longer registered."),!1;let _=(0,c.authorizeWorkRequest)(a);if(!_.ok){try{i.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:a.version,reason:"policy_rejected",errorCode:_.code,errorMessage:_.reason})}catch(e){if(!(e instanceof u.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let E=_.policy,p=(0,l.resolveAgent)(o).agent,T=eY.resumeFor(a,p)??function(e,t){if("revision"!==e.execution_kind)return{ok:!0,binding:null};let n=eS(e).resume_work_request,r="string"==typeof n?i.engine.getWorkRequest(n):void 0;if(!r||r.root_request_id!==e.root_request_id||r.target_agent_id!==e.target_agent_id||!["implementation","revision"].includes(r.execution_kind))return{ok:!1,reason:"The revision does not reference an implementation of this Agent in this lineage."};let s=i.engine.getActiveSessionBinding({agentId:e.target_agent_id,adapter:t,conversationId:r.source_conversation_id,requestId:r.id});return s?{ok:!0,binding:s}:{ok:!1,reason:"The session of the referenced implementation is not available to resume."}}(a,p);if(!T.ok){try{i.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:a.version,reason:"session_unavailable",errorCode:"session_unavailable",errorMessage:T.reason})}catch(e){if(!(e instanceof u.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let m=null,f=null;try{m=function(e){var n,r;let i,s=(0,l.resolveAgent)(e.bot);if(!s.launchable)throw new V("agent_unavailable","connection"===(n=s.launch_blocker)?"The agent has no runtime connection. Choose one in Config.":"session_scope"===n?"The agent has no session scope. Choose one in Config.":"The agent has an unsupported Agent type.");let a={prompt:{kind:"conversation",system:(i=(r=e.bot).title?`${r.name} (${r.title})`:r.name,`You are ${i}.
2062
2071
  ${r.description}`),history:e.history},toolProfile:e.toolProfile??c.TOOL_PROFILE_FOR_KIND.conversation,sessionBinding:e.sessionBinding??null,correlation:{},...e.freshSession?{freshSession:!0}:{}};if("hermes-gateway"===(0,l.agentTransport)(s.agent))return{agent:s.agent,adapter:Q["hermes-gateway"](),input:{...a,target:{agentId:e.bot.id,agent:s.agent,hermesProfilePath:function(e){let t=(e.hermes_profile||"").trim();if(!t)return A;let n=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return n?`/p/${n}${A}`:A}(e.bot)},cwd:null}};let o=a.sessionBinding?null:function(e){let n=(0,d.directLaunchWorkspace)(e);if(!n){let t=(0,d.readStoredScope)(e);throw new V("agent_unavailable",t?.kind==="sessions"?"This turn starts a new session but the agent is limited to selected sessions.":"The agent has no default workspace for a new session. Set one in Config, or resume one of its sessions.")}try{return t.default.mkdirSync(n,{recursive:!0}),n}catch{throw new V("agent_unavailable","The agent working directory is unavailable.")}}(e.bot);return{agent:s.agent,adapter:Q["session-provider"](),input:{...a,target:{agentId:e.bot.id,agent:s.agent},cwd:o}}}({bot:o,history:[...i.default.prepare(`SELECT * FROM messages WHERE conversation_id = ?
2063
2072
  AND rowid <= (SELECT rowid FROM messages WHERE id = ?)
2064
2073
  ORDER BY rowid ASC`).all(a.source_conversation_id,a.source_event_id).map(e=>({speakerLabel:function(e){if("bot"===e.sender_kind&&e.sender_id){let t=i.bots.getById(e.sender_id);return t?t.name:`bot:${e.sender_id}`}return`${e.sender_kind??"person"}:${e.sender_id??"unknown"}`}(e),fromAgent:"bot"===e.sender_kind&&e.sender_id===o.id,content:e.content})),...function(e){if(e.requester_kind===ek.kind&&e.requester_id===ek.id&&"coordinator_continuation"===eS(e).source)return[{speakerLabel:eI,fromAgent:!1,content:e.intent}];if(!e.wake_event_id)return[];let t=eS(e),n=Array.isArray(t.context_work_requests)?t.context_work_requests.filter(e=>"string"==typeof e):[],r=[`[${e.execution_kind} Wake from ${eA(e.requester_id)}] Work Request: ${e.id}`,`Objective:
@@ -2070,13 +2079,13 @@ ${eq(t)}`)}return[{speakerLabel:eI,fromAgent:!1,content:r.join("\n\n")}]}(a),...
2070
2079
  UPDATE session_exchanges SET state = ?, version = version + 1, updated_at = ?, terminal_at = ?,
2071
2080
  failure_code = ?, failure_message = ?
2072
2081
  WHERE id = ? AND state = ? AND version = ?
2073
- `).run(n,r,s?r:null,"failed"===n?i.failureCode??"failed":t.failure_code,"failed"===n?i.failureMessage??"The exchange failed.":t.failure_message,t.id,t.state,t.version).changes)throw new R("invalid_transition",`Exchange ${t.id} changed concurrently.`);return p(t.id,"state_changed",{from:t.state,to:n,reason:i.reason??null,..."failed"===n?{failure_code:i.failureCode??"failed"}:{}},r),_(t.id)}function N(t,n,r){let i=Object.keys(n);if(0===i.length)return t;if(1!==e.prepare(`UPDATE session_exchanges SET ${i.map(e=>`${e} = ?`).join(", ")}, version = version + 1, updated_at = ? WHERE id = ? AND version = ?`).run(...i.map(e=>n[e]??null),r,t.id,t.version).changes)throw new R("invalid_transition",`Exchange ${t.id} changed concurrently.`);return _(t.id)}function O(e,n,r){let i,s={kind:e.requester_kind,id:e.requester_id},a=`exchange:${e.id}:${n}`;if(r.intent.length>u.EXCHANGE_LIMITS.promptChars)throw new R("invalid_request",`The ${n} prompt exceeds ${u.EXCHANGE_LIMITS.promptChars} characters.`);return t.createOrGetWorkRequest({sourceConversationId:r.conversationId,sourceEventId:a,requester:g,targetAgentId:r.targetAgentId,intent:r.intent,executionKind:"conversation",toolProfile:"readonly",idempotencyKey:a,parentRequestId:r.parentRequestId,policy:{source:"session_exchange",exchange_id:e.id,hop:n,...r.resumeBindingId?{resume_session_binding:r.resumeBindingId}:{}},executionPolicy:function(){let e=(0,c.selectExecutionPolicy)({entryPoint:"exchange",executionKind:"conversation"});if(!e.ok)throw Error(e.reason);return e.policy}(),rootPrincipal:s,retryPolicy:{...E.DEFAULT_RETRY_POLICY},...{safetySnapshot:i={safety_version:1,root_principal:{kind:s.kind,id:s.id},grant_rule:"readonly_default",grant_id:null,exchange:!0},safety:{principalType:"service"===s.kind?"api_principal":"human_owner",principal:s,decision:"allowed",grantRule:"readonly_default",snapshot:i}},now:r.now}).request}function A(e,t){let n=o.get(e);if(!n)throw new R("agent_not_found",`No ${t} Agent ${e}.`);let r=(0,l.resolveAgent)(n);if(!r.launchable){let e="connection"===r.launch_blocker?"has no runtime connection":"session_scope"===r.launch_blocker?"has no session scope":"has an unsupported Agent type";throw new R("agent_unavailable",`The ${t} Agent ${n.name} ${e}.`)}return{id:n.id,name:n.name,agent:r.agent}}function b(t,n,r){if(!e.prepare("SELECT 1 FROM conversations WHERE id = ?").get(t)||!e.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(t,n.kind,n.id))throw new R("conversation_not_found",`No ${r} conversation ${t} is visible to the owner.`)}let q={create(n){var s;if(!n.requester||!y(n.requester.id)||!["person","bot","service"].includes(n.requester.kind))throw new R("invalid_request","A requester principal is required.");let d="service"===n.requester.kind&&!0===n.serviceGrant&&n.requester.id!==g.id;if("person"!==n.requester.kind&&!d)throw new R("recursive_exchange","Exchanges are started by the owner; an Agent or exchange hop cannot start another exchange.");if(!y(n.idempotencyKey)||n.idempotencyKey.length>200)throw new R("invalid_request","An idempotency key (1-200 characters) is required.");if(!h.includes(n.mode))throw new R("invalid_request",'mode must be "ask" or "continue".');if(!y(n.originConversationId))throw new R("invalid_request","origin_conversation_id is required.");if(!y(n.sourceAgentId))throw new R("invalid_request","source.agent_id is required.");if(!y(n.sessionRef))throw new R("invalid_request","source.session_ref is required.");if(!y(n.instruction))throw new R("invalid_request","instruction is required.");if(n.instruction.length>u.EXCHANGE_LIMITS.instructionChars)throw new R("invalid_request",`instruction exceeds ${u.EXCHANGE_LIMITS.instructionChars} characters.`);if(void 0!==n.executionKind){let e=(0,c.selectExecutionPolicy)({entryPoint:"exchange",executionKind:n.executionKind});if(!e.ok)throw new R("authority_not_allowed",`${e.reason} An exchange never requests edit authority.`)}if("ask"===n.mode&&(null!=n.destinationAgentId||null!=n.destinationConversationId))throw new R("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===n.mode){if(!y(n.destinationAgentId))throw new R("destination_invalid","A Continue names destination.agent_id.");if(n.destinationAgentId===n.sourceAgentId)throw new R("destination_invalid","A Continue hands off to another Agent; the destination cannot be the source Agent.");if(null!=n.destinationConversationId&&!y(n.destinationConversationId))throw new R("destination_invalid","destination.conversation_id must be a non-empty string when present.")}let l=(s=JSON.stringify([n.mode,n.originConversationId,n.sourceAgentId,n.sessionRef,n.destinationAgentId??null,n.destinationConversationId??null,n.instruction]),(0,r.createHash)("sha256").update(s).digest("hex"));return e.transaction(()=>{var s,d;let c=i.get(n.requester.kind,n.requester.id,n.idempotencyKey);if(c){if(c.request_hash!==l)throw new R("idempotency_conflict","The idempotency key was already used with a different exchange.");return{exchange:c,created:!1}}let E=n.now??Date.now();if(b(n.originConversationId,n.requester,"origin"),!o.get(n.sourceAgentId))throw new R("agent_not_found",`No source Agent ${n.sourceAgentId}.`);let T=a.get(n.sessionRef);if(!T||T.agent_id!==n.sourceAgentId)throw new R("session_not_found",`Session ${n.sessionRef} is not a session of Agent ${n.sourceAgentId}.`);if(null!==T.released_at)throw new R("session_ended",`Session ${T.id} has ended and cannot be resumed.`);let m=A(n.sourceAgentId,"source");if(T.adapter!==m.agent)throw new R("session_not_resumable",`Session ${T.id} was bound under ${T.adapter}; ${m.name} now runs ${m.agent}.`);let f=T.conversation_id?T.conversation_id:T.request_id?t.getWorkRequest(T.request_id)?.source_conversation_id??null:null;if(!f)throw new R("session_not_resumable",`Session ${T.id} has no conversation to resume in.`);if(e.prepare("SELECT 1 FROM session_exchanges WHERE source_binding_id = ? AND terminal_at IS NULL").get(T.id))throw new R("source_session_busy",`Session ${T.id} already has an exchange in progress; wait for it or cancel it.`);let g=null,h=null;if("continue"===n.mode)if(g=A(n.destinationAgentId,"destination"),n.destinationConversationId)b(n.destinationConversationId,n.requester,"destination"),h=n.destinationConversationId;else if("service"===n.requester.kind)throw new R("destination_invalid","A service-started Continue names destination.conversation_id.");else{let t=e.prepare("SELECT id FROM conversations WHERE bot_id = ?").get(g.id);if(!t)throw new R("destination_invalid",`${g.name} has no direct thread; name destination.conversation_id.`);h=t.id}let v=(0,r.randomUUID)();e.prepare(`
2082
+ `).run(n,r,s?r:null,"failed"===n?i.failureCode??"failed":t.failure_code,"failed"===n?i.failureMessage??"The exchange failed.":t.failure_message,t.id,t.state,t.version).changes)throw new R("invalid_transition",`Exchange ${t.id} changed concurrently.`);return p(t.id,"state_changed",{from:t.state,to:n,reason:i.reason??null,..."failed"===n?{failure_code:i.failureCode??"failed"}:{}},r),_(t.id)}function N(t,n,r){let i=Object.keys(n);if(0===i.length)return t;if(1!==e.prepare(`UPDATE session_exchanges SET ${i.map(e=>`${e} = ?`).join(", ")}, version = version + 1, updated_at = ? WHERE id = ? AND version = ?`).run(...i.map(e=>n[e]??null),r,t.id,t.version).changes)throw new R("invalid_transition",`Exchange ${t.id} changed concurrently.`);return _(t.id)}function w(e,n,r){let i,s={kind:e.requester_kind,id:e.requester_id},a=`exchange:${e.id}:${n}`;if(r.intent.length>u.EXCHANGE_LIMITS.promptChars)throw new R("invalid_request",`The ${n} prompt exceeds ${u.EXCHANGE_LIMITS.promptChars} characters.`);return t.createOrGetWorkRequest({sourceConversationId:r.conversationId,sourceEventId:a,requester:g,targetAgentId:r.targetAgentId,intent:r.intent,executionKind:"conversation",toolProfile:"readonly",idempotencyKey:a,parentRequestId:r.parentRequestId,policy:{source:"session_exchange",exchange_id:e.id,hop:n,...r.resumeBindingId?{resume_session_binding:r.resumeBindingId}:{}},executionPolicy:function(){let e=(0,c.selectExecutionPolicy)({entryPoint:"exchange",executionKind:"conversation"});if(!e.ok)throw Error(e.reason);return e.policy}(),rootPrincipal:s,retryPolicy:{...E.DEFAULT_RETRY_POLICY},...{safetySnapshot:i={safety_version:1,root_principal:{kind:s.kind,id:s.id},grant_rule:"readonly_default",grant_id:null,exchange:!0},safety:{principalType:"service"===s.kind?"api_principal":"human_owner",principal:s,decision:"allowed",grantRule:"readonly_default",snapshot:i}},now:r.now}).request}function A(e,t){let n=o.get(e);if(!n)throw new R("agent_not_found",`No ${t} Agent ${e}.`);let r=(0,l.resolveAgent)(n);if(!r.launchable){let e="connection"===r.launch_blocker?"has no runtime connection":"session_scope"===r.launch_blocker?"has no session scope":"has an unsupported Agent type";throw new R("agent_unavailable",`The ${t} Agent ${n.name} ${e}.`)}return{id:n.id,name:n.name,agent:r.agent}}function b(t,n,r){if(!e.prepare("SELECT 1 FROM conversations WHERE id = ?").get(t)||!e.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(t,n.kind,n.id))throw new R("conversation_not_found",`No ${r} conversation ${t} is visible to the owner.`)}let q={create(n){var s;if(!n.requester||!y(n.requester.id)||!["person","bot","service"].includes(n.requester.kind))throw new R("invalid_request","A requester principal is required.");let d="service"===n.requester.kind&&!0===n.serviceGrant&&n.requester.id!==g.id;if("person"!==n.requester.kind&&!d)throw new R("recursive_exchange","Exchanges are started by the owner; an Agent or exchange hop cannot start another exchange.");if(!y(n.idempotencyKey)||n.idempotencyKey.length>200)throw new R("invalid_request","An idempotency key (1-200 characters) is required.");if(!h.includes(n.mode))throw new R("invalid_request",'mode must be "ask" or "continue".');if(!y(n.originConversationId))throw new R("invalid_request","origin_conversation_id is required.");if(!y(n.sourceAgentId))throw new R("invalid_request","source.agent_id is required.");if(!y(n.sessionRef))throw new R("invalid_request","source.session_ref is required.");if(!y(n.instruction))throw new R("invalid_request","instruction is required.");if(n.instruction.length>u.EXCHANGE_LIMITS.instructionChars)throw new R("invalid_request",`instruction exceeds ${u.EXCHANGE_LIMITS.instructionChars} characters.`);if(void 0!==n.executionKind){let e=(0,c.selectExecutionPolicy)({entryPoint:"exchange",executionKind:n.executionKind});if(!e.ok)throw new R("authority_not_allowed",`${e.reason} An exchange never requests edit authority.`)}if("ask"===n.mode&&(null!=n.destinationAgentId||null!=n.destinationConversationId))throw new R("destination_invalid","An Ask returns to the origin conversation and takes no destination.");if("continue"===n.mode){if(!y(n.destinationAgentId))throw new R("destination_invalid","A Continue names destination.agent_id.");if(n.destinationAgentId===n.sourceAgentId)throw new R("destination_invalid","A Continue hands off to another Agent; the destination cannot be the source Agent.");if(null!=n.destinationConversationId&&!y(n.destinationConversationId))throw new R("destination_invalid","destination.conversation_id must be a non-empty string when present.")}let l=(s=JSON.stringify([n.mode,n.originConversationId,n.sourceAgentId,n.sessionRef,n.destinationAgentId??null,n.destinationConversationId??null,n.instruction]),(0,r.createHash)("sha256").update(s).digest("hex"));return e.transaction(()=>{var s,d;let c=i.get(n.requester.kind,n.requester.id,n.idempotencyKey);if(c){if(c.request_hash!==l)throw new R("idempotency_conflict","The idempotency key was already used with a different exchange.");return{exchange:c,created:!1}}let E=n.now??Date.now();if(b(n.originConversationId,n.requester,"origin"),!o.get(n.sourceAgentId))throw new R("agent_not_found",`No source Agent ${n.sourceAgentId}.`);let T=a.get(n.sessionRef);if(!T||T.agent_id!==n.sourceAgentId)throw new R("session_not_found",`Session ${n.sessionRef} is not a session of Agent ${n.sourceAgentId}.`);if(null!==T.released_at)throw new R("session_ended",`Session ${T.id} has ended and cannot be resumed.`);let m=A(n.sourceAgentId,"source");if(T.adapter!==m.agent)throw new R("session_not_resumable",`Session ${T.id} was bound under ${T.adapter}; ${m.name} now runs ${m.agent}.`);let f=T.conversation_id?T.conversation_id:T.request_id?t.getWorkRequest(T.request_id)?.source_conversation_id??null:null;if(!f)throw new R("session_not_resumable",`Session ${T.id} has no conversation to resume in.`);if(e.prepare("SELECT 1 FROM session_exchanges WHERE source_binding_id = ? AND terminal_at IS NULL").get(T.id))throw new R("source_session_busy",`Session ${T.id} already has an exchange in progress; wait for it or cancel it.`);let g=null,h=null;if("continue"===n.mode)if(g=A(n.destinationAgentId,"destination"),n.destinationConversationId)b(n.destinationConversationId,n.requester,"destination"),h=n.destinationConversationId;else if("service"===n.requester.kind)throw new R("destination_invalid","A service-started Continue names destination.conversation_id.");else{let t=e.prepare("SELECT id FROM conversations WHERE bot_id = ?").get(g.id);if(!t)throw new R("destination_invalid",`${g.name} has no direct thread; name destination.conversation_id.`);h=t.id}let v=(0,r.randomUUID)();e.prepare(`
2074
2083
  INSERT INTO session_exchanges (
2075
2084
  id, requester_kind, requester_id, idempotency_key, request_hash, mode, origin_conversation_id,
2076
2085
  source_agent_id, source_binding_id, destination_agent_id, destination_conversation_id, instruction,
2077
2086
  state, created_at, updated_at
2078
2087
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, ?)
2079
- `).run(v,n.requester.kind,n.requester.id,n.idempotencyKey,l,n.mode,n.originConversationId,n.sourceAgentId,T.id,g?.id??null,h,n.instruction,E,E),p(v,"created",{mode:n.mode,source_agent_id:n.sourceAgentId,source_binding_id:T.id,destination_agent_id:g?.id??null,destination_conversation_id:h},E);let y=_(v),L="ask"===n.mode?"ask":"extract",w=O(y,L,{conversationId:f,targetAgentId:n.sourceAgentId,intent:"ask"===L?function(e,t,n="the owner"){return`[Session Ask from ${n}] Exchange: ${e}
2088
+ `).run(v,n.requester.kind,n.requester.id,n.idempotencyKey,l,n.mode,n.originConversationId,n.sourceAgentId,T.id,g?.id??null,h,n.instruction,E,E),p(v,"created",{mode:n.mode,source_agent_id:n.sourceAgentId,source_binding_id:T.id,destination_agent_id:g?.id??null,destination_conversation_id:h},E);let y=_(v),L="ask"===n.mode?"ask":"extract",O=w(y,L,{conversationId:f,targetAgentId:n.sourceAgentId,intent:"ask"===L?function(e,t,n="the owner"){return`[Session Ask from ${n}] Exchange: ${e}
2080
2089
 
2081
2090
  Answer one question from the context of this session. ${k} Reply with the answer only.
2082
2091
 
@@ -2094,7 +2103,7 @@ objective: what ${s} should achieve. decisions: what was decided and why. constr
2094
2103
  Limits: objective at most ${u.EXCHANGE_LIMITS.packetObjectiveChars} characters; each list at most ${u.EXCHANGE_LIMITS.packetListItems} entries of at most ${u.EXCHANGE_LIMITS.packetItemChars} characters.
2095
2104
 
2096
2105
  Owner instruction:
2097
- ${d}`),parentRequestId:T.request_id,resumeBindingId:T.id,now:E}),I=N(y,{source_request_id:w.id},E);return p(v,"hop_queued",{hop:L,request_id:w.id},E),{exchange:I,created:!0}}).immediate()},get:e=>n.get(e),require:_,listEvents:t=>e.prepare("SELECT * FROM session_exchange_events WHERE exchange_id = ? ORDER BY sequence ASC").all(t),forHopRequest:e=>s.get(e,e),resumeFor(e,t){let n=S(e);if(!n)return null;if("deliver"===n.hop)return{ok:!0,binding:null,freshSession:!0};let r=q.get(n.exchangeId),i=n.resumeBindingId?a.get(n.resumeBindingId):void 0;return r&&i&&r.source_binding_id===i.id&&r.source_request_id===e.id?null!==i.released_at?{ok:!1,reason:"The selected session has ended."}:i.agent_id!==e.target_agent_id||i.adapter!==t?{ok:!1,reason:"The selected session belongs to another Agent or runtime."}:{ok:!0,binding:i}:{ok:!1,reason:"The exchange does not name this session."}},turnContext:e=>S(e)?[{speakerLabel:"Botmancers",fromAgent:!1,content:e.intent}]:null,hopClaimed(e,t,n){let r=q.forHopRequest(e);if(!(!r||m(r.state))){if(r.source_request_id===e){let i=r.source_attempt_id?r:N(r,{source_attempt_id:t},n);"queued"===i.state&&f(i,"extracting",n,{reason:"hop_started"}),p(r.id,"hop_started",{hop:"ask"===r.mode?"ask":"extract",request_id:e,attempt_id:t},n);return}r.destination_attempt_id||N(r,{destination_attempt_id:t},n),p(r.id,"hop_started",{hop:"deliver",request_id:e,attempt_id:t},n)}},sanitizeHopResult(e,t){let n=S(e),r=n?q.get(n.exchangeId):void 0;if(!n||!r)return t;let i=a.get(r.source_binding_id)?.external_session_id??null,s="ask"===n.hop?u.EXCHANGE_LIMITS.answerChars:"extract"===n.hop?u.EXCHANGE_LIMITS.extractionOutputChars:u.EXCHANGE_LIMITS.replyChars,o=t.externalSessionId??null,d=null===t.output?null:w(L(t.output,i,o),s);return{...t,output:d?d.content:null,outputTruncated:!0===t.outputTruncated||d?.truncated===!0,failure:t.failure?{...t.failure,message:L(t.failure.message,i,o)}:null}},commitHop(n,i,s,o){let d=S(n),l=d?q.get(d.exchangeId):void 0;if(!d||!l)return{exchange_id:d?.exchangeId??null,discarded:"exchange_missing"};if(m(l.state)||null!==l.cancel_requested_at)return p(l.id,"hop_result_discarded",{hop:d.hop,request_id:n.id,reason:m(l.state)?l.state:"cancel_requested"},o),{exchange_id:l.id,discarded:"cancel_requested"};let _=s.output??"",c=a.get(l.source_binding_id)?.external_session_id??null;if("ask"===d.hop){let t=w(L(_,c),u.EXCHANGE_LIMITS.answerChars),{content:a}=t,d=t.truncated||!0===s.outputTruncated,E=(0,r.randomUUID)();return e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(E,l.origin_conversation_id,"bot",l.source_agent_id,"bot",n.id,a,o),N(l,{answer_message_id:E},o),p(l.id,"answer_returned",{request_id:n.id,attempt_id:i.id,message_id:E,conversation_id:l.origin_conversation_id,truncated:d},o),{exchange_id:l.id,answer_message_id:E}}if("extract"===d.hop){var E;let e=s.outputTruncated?{ok:!1,reason:`The extraction output exceeds ${u.EXCHANGE_LIMITS.extractionOutputChars} characters.`}:function(e){let t;if(e.length>u.EXCHANGE_LIMITS.extractionOutputChars)return{ok:!1,reason:`The extraction output exceeds ${u.EXCHANGE_LIMITS.extractionOutputChars} characters.`};let n=/```(?:json)?\s*([\s\S]*?)```/.exec(e),r=(n?n[1]:e).trim(),i=r.indexOf("{"),s=r.lastIndexOf("}");if(i<0||s<i)return{ok:!1,reason:"The handoff packet is not a JSON object."};try{t=JSON.parse(r.slice(i,s+1))}catch{return{ok:!1,reason:"The handoff packet is not valid JSON."}}if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"The handoff packet is not a JSON object."};let a=t;if(!y(a.objective))return{ok:!1,reason:"The handoff packet has no objective."};if(a.objective.length>u.EXCHANGE_LIMITS.packetObjectiveChars)return{ok:!1,reason:`The handoff packet objective exceeds ${u.EXCHANGE_LIMITS.packetObjectiveChars} characters.`};let o={objective:a.objective.trim(),decisions:[],constraints:[],artifacts:[],open_questions:[]};for(let e of v){let t=a[e]??[];if(!Array.isArray(t)||t.some(e=>"string"!=typeof e))return{ok:!1,reason:`The handoff packet field ${e} must be a list of strings.`};if(t.length>u.EXCHANGE_LIMITS.packetListItems)return{ok:!1,reason:`The handoff packet field ${e} has ${t.length} entries (limit ${u.EXCHANGE_LIMITS.packetListItems}).`};if(t.some(e=>e.length>u.EXCHANGE_LIMITS.packetItemChars))return{ok:!1,reason:`An entry of the handoff packet field ${e} exceeds ${u.EXCHANGE_LIMITS.packetItemChars} characters.`};o[e]=t.map(e=>e.trim()).filter(e=>e.length>0)}return JSON.stringify(o).length>u.EXCHANGE_LIMITS.packetChars?{ok:!1,reason:`The handoff packet exceeds ${u.EXCHANGE_LIMITS.packetChars} characters.`}:{ok:!0,packet:o}}(_);if(!e.ok)return p(l.id,"packet_rejected",{request_id:n.id,attempt_id:i.id,reason:e.reason},o),f(l,"failed",o,{reason:"packet_invalid",failureCode:"packet_invalid",failureMessage:e.reason}),{exchange_id:l.id,packet:"rejected"};let t=(E=e.packet,{objective:L(E.objective,c),decisions:E.decisions.map(e=>L(e,c)),constraints:E.constraints.map(e=>L(e,c)),artifacts:E.artifacts.map(e=>L(e,c)),open_questions:E.open_questions.map(e=>L(e,c))});return N(l,{packet:JSON.stringify(t)},o),p(l.id,"packet_extracted",{request_id:n.id,attempt_id:i.id,size:JSON.stringify(t).length,counts:Object.fromEntries(v.map(e=>[e,t[e].length]))},o),{exchange_id:l.id,packet:"stored"}}let T=s.externalSessionId??null,g=!1;try{g=!0===JSON.parse(i.launch_snapshot).fresh_session}catch{g=!1}if(!(g&&T&&T!==c&&!e.prepare("SELECT 1 FROM session_bindings WHERE external_session_id = ?").get(T)&&!e.prepare("SELECT 1 FROM work_attempts WHERE external_session_id = ? AND id != ?").get(T,i.id))){let e=g?T?"reused":"not_reported":"not_fresh_launch";return p(l.id,"destination_session_rejected",{request_id:n.id,attempt_id:i.id,reason:e},o),f(l,"failed",o,{reason:"destination_session_invalid",failureCode:"destination_session_invalid",failureMessage:T?"The destination Agent reported a session that is not new; the hand-off needs a fresh destination-owned session.":"The destination Agent reported no session; the hand-off needs a fresh destination-owned session."}),{exchange_id:l.id,destination_session:"rejected"}}let h=(0,r.randomUUID)(),R=l.destination_conversation_id,O=w(L(_,c,T),u.EXCHANGE_LIMITS.replyChars),{content:k}=O,I=O.truncated||!0===s.outputTruncated;e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(h,R,"bot",n.target_agent_id,"bot",n.id,k,o);let A=t.bindSession({agentId:n.target_agent_id,adapter:i.adapter,externalSessionId:T,conversationId:R,requestId:n.id,sourceAttemptId:i.id,now:o}).id;return N(l,{destination_binding_id:A},o),p(l.id,"destination_replied",{request_id:n.id,attempt_id:i.id,message_id:h,conversation_id:R,session_ref:A,truncated:I},o),{exchange_id:l.id,destination_message_id:h}},advance:(n,r=Date.now())=>e.transaction(()=>{let i=q.get(n);if(!i||m(i.state))return[];if("queued"===i.state||"extracting"===i.state){var s,a,o,d;let n=i.source_request_id?t.getWorkRequest(i.source_request_id):void 0;if(!n)return f(i,"failed",r,{reason:"hop_missing",failureCode:"hop_missing",failureMessage:"The source session turn is missing."}),[];if(!u.TERMINAL_STATES.includes(n.state))return"queued"!==n.state&&"queued"===i.state&&f(i,"extracting",r,{reason:"hop_started"}),"queued"===n.state&&null===i.cancel_requested_at?[n.id]:[];if(null!==i.cancel_requested_at||"cancelled"===n.state)return f(i,"cancelled",r,{reason:null!==i.cancel_requested_at?"cancel_requested":"hop_cancelled"}),[];if("failed"===n.state)return f(i,"failed",r,{reason:"hop_failed",failureCode:"source_turn_failed",failureMessage:`The source session turn failed (${n.error_code??"failed"}): ${n.error_message??"no detail"}`}),[];if("queued"===i.state&&(i=f(i,"extracting",r,{reason:"hop_started"})),"ask"===i.mode)return i.answer_message_id?f(i,"completed",r,{reason:"answered"}):f(i,"failed",r,{reason:"answer_missing",failureCode:"answer_missing",failureMessage:"The source session turn returned no answer."}),[];if(!i.packet)return f(i,"failed",r,{reason:"packet_missing",failureCode:"packet_missing",failureMessage:"The source session turn returned no handoff packet."}),[];let l=JSON.parse(i.packet),_=i.destination_conversation_id,c=i.destination_agent_id;s={kind:"bot",id:c},e.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)").run(_,s.kind,s.id,r);let E=O(i,"deliver",{conversationId:_,targetAgentId:c,intent:(a=i.id,o=T(i.source_agent_id)??"the source Agent",d=i.instruction,[`Continue from ${o}: ${function(e,t=80){let n=e.split("\n").map(e=>e.trim()).find(e=>e.length>0)??"";return n.length>t?`${n.slice(0,t-1).trimEnd()}…`:n}(l.objective)}`,`[Session Continue] Exchange: ${a}`,`The owner handed you this work from ${o}'s session. You start a fresh session of your own: ${o}'s session is not available to you, and this handoff packet is everything carried over.`,`Objective:
2106
+ ${d}`),parentRequestId:T.request_id,resumeBindingId:T.id,now:E}),I=N(y,{source_request_id:O.id},E);return p(v,"hop_queued",{hop:L,request_id:O.id},E),{exchange:I,created:!0}}).immediate()},get:e=>n.get(e),require:_,listEvents:t=>e.prepare("SELECT * FROM session_exchange_events WHERE exchange_id = ? ORDER BY sequence ASC").all(t),forHopRequest:e=>s.get(e,e),resumeFor(e,t){let n=S(e);if(!n)return null;if("deliver"===n.hop)return{ok:!0,binding:null,freshSession:!0};let r=q.get(n.exchangeId),i=n.resumeBindingId?a.get(n.resumeBindingId):void 0;return r&&i&&r.source_binding_id===i.id&&r.source_request_id===e.id?null!==i.released_at?{ok:!1,reason:"The selected session has ended."}:i.agent_id!==e.target_agent_id||i.adapter!==t?{ok:!1,reason:"The selected session belongs to another Agent or runtime."}:{ok:!0,binding:i}:{ok:!1,reason:"The exchange does not name this session."}},turnContext:e=>S(e)?[{speakerLabel:"Botmancers",fromAgent:!1,content:e.intent}]:null,hopClaimed(e,t,n){let r=q.forHopRequest(e);if(!(!r||m(r.state))){if(r.source_request_id===e){let i=r.source_attempt_id?r:N(r,{source_attempt_id:t},n);"queued"===i.state&&f(i,"extracting",n,{reason:"hop_started"}),p(r.id,"hop_started",{hop:"ask"===r.mode?"ask":"extract",request_id:e,attempt_id:t},n);return}r.destination_attempt_id||N(r,{destination_attempt_id:t},n),p(r.id,"hop_started",{hop:"deliver",request_id:e,attempt_id:t},n)}},sanitizeHopResult(e,t){let n=S(e),r=n?q.get(n.exchangeId):void 0;if(!n||!r)return t;let i=a.get(r.source_binding_id)?.external_session_id??null,s="ask"===n.hop?u.EXCHANGE_LIMITS.answerChars:"extract"===n.hop?u.EXCHANGE_LIMITS.extractionOutputChars:u.EXCHANGE_LIMITS.replyChars,o=t.externalSessionId??null,d=null===t.output?null:O(L(t.output,i,o),s);return{...t,output:d?d.content:null,outputTruncated:!0===t.outputTruncated||d?.truncated===!0,failure:t.failure?{...t.failure,message:L(t.failure.message,i,o)}:null}},commitHop(n,i,s,o){let d=S(n),l=d?q.get(d.exchangeId):void 0;if(!d||!l)return{exchange_id:d?.exchangeId??null,discarded:"exchange_missing"};if(m(l.state)||null!==l.cancel_requested_at)return p(l.id,"hop_result_discarded",{hop:d.hop,request_id:n.id,reason:m(l.state)?l.state:"cancel_requested"},o),{exchange_id:l.id,discarded:"cancel_requested"};let _=s.output??"",c=a.get(l.source_binding_id)?.external_session_id??null;if("ask"===d.hop){let t=O(L(_,c),u.EXCHANGE_LIMITS.answerChars),{content:a}=t,d=t.truncated||!0===s.outputTruncated,E=(0,r.randomUUID)();return e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(E,l.origin_conversation_id,"bot",l.source_agent_id,"bot",n.id,a,o),N(l,{answer_message_id:E},o),p(l.id,"answer_returned",{request_id:n.id,attempt_id:i.id,message_id:E,conversation_id:l.origin_conversation_id,truncated:d},o),{exchange_id:l.id,answer_message_id:E}}if("extract"===d.hop){var E;let e=s.outputTruncated?{ok:!1,reason:`The extraction output exceeds ${u.EXCHANGE_LIMITS.extractionOutputChars} characters.`}:function(e){let t;if(e.length>u.EXCHANGE_LIMITS.extractionOutputChars)return{ok:!1,reason:`The extraction output exceeds ${u.EXCHANGE_LIMITS.extractionOutputChars} characters.`};let n=/```(?:json)?\s*([\s\S]*?)```/.exec(e),r=(n?n[1]:e).trim(),i=r.indexOf("{"),s=r.lastIndexOf("}");if(i<0||s<i)return{ok:!1,reason:"The handoff packet is not a JSON object."};try{t=JSON.parse(r.slice(i,s+1))}catch{return{ok:!1,reason:"The handoff packet is not valid JSON."}}if(!t||"object"!=typeof t||Array.isArray(t))return{ok:!1,reason:"The handoff packet is not a JSON object."};let a=t;if(!y(a.objective))return{ok:!1,reason:"The handoff packet has no objective."};if(a.objective.length>u.EXCHANGE_LIMITS.packetObjectiveChars)return{ok:!1,reason:`The handoff packet objective exceeds ${u.EXCHANGE_LIMITS.packetObjectiveChars} characters.`};let o={objective:a.objective.trim(),decisions:[],constraints:[],artifacts:[],open_questions:[]};for(let e of v){let t=a[e]??[];if(!Array.isArray(t)||t.some(e=>"string"!=typeof e))return{ok:!1,reason:`The handoff packet field ${e} must be a list of strings.`};if(t.length>u.EXCHANGE_LIMITS.packetListItems)return{ok:!1,reason:`The handoff packet field ${e} has ${t.length} entries (limit ${u.EXCHANGE_LIMITS.packetListItems}).`};if(t.some(e=>e.length>u.EXCHANGE_LIMITS.packetItemChars))return{ok:!1,reason:`An entry of the handoff packet field ${e} exceeds ${u.EXCHANGE_LIMITS.packetItemChars} characters.`};o[e]=t.map(e=>e.trim()).filter(e=>e.length>0)}return JSON.stringify(o).length>u.EXCHANGE_LIMITS.packetChars?{ok:!1,reason:`The handoff packet exceeds ${u.EXCHANGE_LIMITS.packetChars} characters.`}:{ok:!0,packet:o}}(_);if(!e.ok)return p(l.id,"packet_rejected",{request_id:n.id,attempt_id:i.id,reason:e.reason},o),f(l,"failed",o,{reason:"packet_invalid",failureCode:"packet_invalid",failureMessage:e.reason}),{exchange_id:l.id,packet:"rejected"};let t=(E=e.packet,{objective:L(E.objective,c),decisions:E.decisions.map(e=>L(e,c)),constraints:E.constraints.map(e=>L(e,c)),artifacts:E.artifacts.map(e=>L(e,c)),open_questions:E.open_questions.map(e=>L(e,c))});return N(l,{packet:JSON.stringify(t)},o),p(l.id,"packet_extracted",{request_id:n.id,attempt_id:i.id,size:JSON.stringify(t).length,counts:Object.fromEntries(v.map(e=>[e,t[e].length]))},o),{exchange_id:l.id,packet:"stored"}}let T=s.externalSessionId??null,g=!1;try{g=!0===JSON.parse(i.launch_snapshot).fresh_session}catch{g=!1}if(!(g&&T&&T!==c&&!e.prepare("SELECT 1 FROM session_bindings WHERE external_session_id = ?").get(T)&&!e.prepare("SELECT 1 FROM work_attempts WHERE external_session_id = ? AND id != ?").get(T,i.id))){let e=g?T?"reused":"not_reported":"not_fresh_launch";return p(l.id,"destination_session_rejected",{request_id:n.id,attempt_id:i.id,reason:e},o),f(l,"failed",o,{reason:"destination_session_invalid",failureCode:"destination_session_invalid",failureMessage:T?"The destination Agent reported a session that is not new; the hand-off needs a fresh destination-owned session.":"The destination Agent reported no session; the hand-off needs a fresh destination-owned session."}),{exchange_id:l.id,destination_session:"rejected"}}let h=(0,r.randomUUID)(),R=l.destination_conversation_id,w=O(L(_,c,T),u.EXCHANGE_LIMITS.replyChars),{content:k}=w,I=w.truncated||!0===s.outputTruncated;e.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(h,R,"bot",n.target_agent_id,"bot",n.id,k,o);let A=t.bindSession({agentId:n.target_agent_id,adapter:i.adapter,externalSessionId:T,conversationId:R,requestId:n.id,sourceAttemptId:i.id,now:o}).id;return N(l,{destination_binding_id:A},o),p(l.id,"destination_replied",{request_id:n.id,attempt_id:i.id,message_id:h,conversation_id:R,session_ref:A,truncated:I},o),{exchange_id:l.id,destination_message_id:h}},advance:(n,r=Date.now())=>e.transaction(()=>{let i=q.get(n);if(!i||m(i.state))return[];if("queued"===i.state||"extracting"===i.state){var s,a,o,d;let n=i.source_request_id?t.getWorkRequest(i.source_request_id):void 0;if(!n)return f(i,"failed",r,{reason:"hop_missing",failureCode:"hop_missing",failureMessage:"The source session turn is missing."}),[];if(!u.TERMINAL_STATES.includes(n.state))return"queued"!==n.state&&"queued"===i.state&&f(i,"extracting",r,{reason:"hop_started"}),"queued"===n.state&&null===i.cancel_requested_at?[n.id]:[];if(null!==i.cancel_requested_at||"cancelled"===n.state)return f(i,"cancelled",r,{reason:null!==i.cancel_requested_at?"cancel_requested":"hop_cancelled"}),[];if("failed"===n.state)return f(i,"failed",r,{reason:"hop_failed",failureCode:"source_turn_failed",failureMessage:`The source session turn failed (${n.error_code??"failed"}): ${n.error_message??"no detail"}`}),[];if("queued"===i.state&&(i=f(i,"extracting",r,{reason:"hop_started"})),"ask"===i.mode)return i.answer_message_id?f(i,"completed",r,{reason:"answered"}):f(i,"failed",r,{reason:"answer_missing",failureCode:"answer_missing",failureMessage:"The source session turn returned no answer."}),[];if(!i.packet)return f(i,"failed",r,{reason:"packet_missing",failureCode:"packet_missing",failureMessage:"The source session turn returned no handoff packet."}),[];let l=JSON.parse(i.packet),_=i.destination_conversation_id,c=i.destination_agent_id;s={kind:"bot",id:c},e.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)").run(_,s.kind,s.id,r);let E=w(i,"deliver",{conversationId:_,targetAgentId:c,intent:(a=i.id,o=T(i.source_agent_id)??"the source Agent",d=i.instruction,[`Continue from ${o}: ${function(e,t=80){let n=e.split("\n").map(e=>e.trim()).find(e=>e.length>0)??"";return n.length>t?`${n.slice(0,t-1).trimEnd()}…`:n}(l.objective)}`,`[Session Continue] Exchange: ${a}`,`The owner handed you this work from ${o}'s session. You start a fresh session of your own: ${o}'s session is not available to you, and this handoff packet is everything carried over.`,`Objective:
2098
2107
  ${l.objective}`,I("Decisions",l.decisions),I("Constraints",l.constraints),I("Artifacts and references",l.artifacts),I("Open questions",l.open_questions),`Owner instruction:
2099
2108
  ${d}`].join("\n\n")),parentRequestId:null,resumeBindingId:null,now:r});return p((i=N(i,{destination_request_id:E.id},r)).id,"hop_queued",{hop:"deliver",request_id:E.id},r),f(i,"delivering",r,{reason:"packet_extracted"}),[E.id]}let l=i.destination_request_id?t.getWorkRequest(i.destination_request_id):void 0;return l?u.TERMINAL_STATES.includes(l.state)?(null!==i.cancel_requested_at||"cancelled"===l.state?f(i,"cancelled",r,{reason:null!==i.cancel_requested_at?"cancel_requested":"hop_cancelled"}):"failed"===l.state?f(i,"failed",r,{reason:"hop_failed",failureCode:"destination_turn_failed",failureMessage:`The destination turn failed (${l.error_code??"failed"}): ${l.error_message??"no detail"}`}):i.destination_binding_id?f(i,"completed",r,{reason:"delivered"}):f(i,"failed",r,{reason:"destination_session_missing",failureCode:"destination_session_invalid",failureMessage:"The destination turn bound no fresh destination-owned session."}),[]):"queued"===l.state&&null===i.cancel_requested_at?[l.id]:[]:(f(i,"failed",r,{reason:"hop_missing",failureCode:"hop_missing",failureMessage:"The destination turn is missing."}),[])}).immediate(),requestCancel:(t,n,r,i=Date.now())=>e.transaction(()=>{let s=_(t);if(m(s.state))throw new R("exchange_terminal",`Exchange ${t} is already ${s.state}; it cannot be cancelled.`);let a="delivering"===s.state?s.destination_request_id:s.source_request_id;return null!==s.cancel_requested_at?{exchange:s,hopRequestId:a,replayed:!0}:(e.prepare("UPDATE session_exchanges SET cancel_requested_at = ?, cancel_requested_by = ?, cancel_reason = ?, version = version + 1, updated_at = ? WHERE id = ? AND cancel_requested_at IS NULL").run(i,`${n.kind}:${n.id}`,r,i,t),p(t,"cancel_requested",{by:`${n.kind}:${n.id}`,reason:r,state:s.state,request_id:a},i),{exchange:_(t),hopRequestId:a,replayed:!1})}).immediate(),openIds:()=>e.prepare("SELECT id FROM session_exchanges WHERE terminal_at IS NULL ORDER BY created_at ASC, id ASC").all().map(e=>e.id),view(n){let r=_(n),i=(e,n)=>{let r=e?t.getWorkRequest(e):void 0;return r?{request_id:r.id,attempt_id:n,state:r.state,execution_kind:r.execution_kind,tool_profile:r.tool_profile}:null},s=r.answer_message_id?e.prepare("SELECT id, conversation_id, content FROM messages WHERE id = ?").get(r.answer_message_id):void 0;return{id:r.id,mode:r.mode,state:r.state,requester:{kind:r.requester_kind,id:r.requester_id},origin_conversation_id:r.origin_conversation_id,instruction:r.instruction,source:{agent_id:r.source_agent_id,agent_name:T(r.source_agent_id),session_ref:r.source_binding_id},destination:r.destination_agent_id&&r.destination_conversation_id?{agent_id:r.destination_agent_id,agent_name:T(r.destination_agent_id),conversation_id:r.destination_conversation_id,session_ref:r.destination_binding_id}:null,hops:{source:i(r.source_request_id,r.source_attempt_id),destination:i(r.destination_request_id,r.destination_attempt_id)},answer:s?{message_id:s.id,conversation_id:s.conversation_id,content:s.content}:null,packet:r.packet?JSON.parse(r.packet):null,failure:"failed"===r.state?{code:r.failure_code??"failed",message:r.failure_message??""}:null,cancel:null!==r.cancel_requested_at?{requested_at:r.cancel_requested_at,reason:r.cancel_reason}:null,events:q.listEvents(r.id).map(e=>({sequence:e.sequence,type:e.type,at:e.created_at,data:e.data?JSON.parse(e.data):null})),limits:u.EXCHANGE_LIMITS,created_at:r.created_at,updated_at:r.updated_at,terminal_at:r.terminal_at}}};return q}(i.default,i.engine),ez={session_missing:"choose_session",session_ended:"choose_session",session_not_resumable:"choose_session",source_session_busy:"retry_later",action_unavailable:"choose_action",authority_not_allowed:"ask_owner",workspace_required:"ask_owner",no_eligible_session:"ask_owner",grant_required:"ask_owner",agent_unavailable:"ask_owner",approval_required:"approve_write",pin_not_found:"pin_again",pin_detached:"pin_again",provider_failed:"retry_later",rate_limited:"retry_later",session_context_required:"choose_session"},eJ={invalid_request:400,agent_not_found:404,session_not_found:404,conversation_not_found:404,pin_not_found:404,pin_detached:409,workspace_required:409,no_eligible_session:409,session_missing:410,session_ended:409,session_not_resumable:409,source_session_busy:409,action_unavailable:409,approval_required:403,authority_not_allowed:403,agent_unavailable:409,grant_required:403,provider_failed:502,idempotency_conflict:409};class eV extends Error{code;recovery;constructor(e,t){super(t),this.name="PinError",this.code=e,this.recovery=function(e){return Object.prototype.hasOwnProperty.call(ez,e)?ez[e]:null}(e)}get status(){return eJ[this.code]}}function eQ(e){return"string"==typeof e&&e.trim().length>0}function eZ(e,t,n,s){i.default.prepare(`
2100
2109
  INSERT INTO session_pin_events (id, pin_id, sequence, type, data, created_at)
@@ -2161,12 +2170,12 @@ ${t}`).digest("hex").slice(0,40)}`}function e8(e,t,n,s,a,o,d){var u;let l=(0,r.r
2161
2170
  SELECT s.id FROM session_shares s JOIN session_pins p ON p.id = s.pin_ref
2162
2171
  WHERE s.state = 'active' AND s.expires_at <= ? AND p.state = 'attached'
2163
2172
  ORDER BY s.expires_at, s.id LIMIT 500
2164
- `).all(e),n=[];for(let{id:r}of t)i.default.transaction(()=>{let t=tN(r);if(!t||"expired"!==tR(t,e))return;let{replayed:s}=function(e,t,n={}){return i.default.transaction(()=>{var r;let s=e4(e,t);if("detached"===s.state)return n.onCommit?.(s),{pin:s,replayed:!0};r=n.now??Date.now(),i.default.prepare("UPDATE session_pins SET state = 'detached', detach_reason = ?, replaced_by = ?, detached_at = ?, updated_at = ? WHERE id = ? AND state = 'attached'").run("detached",null,r,r,s.id),eZ(s.id,"detached",{},r);let a=e0(s.id);return n.onCommit?.(a),{pin:a,replayed:!1}}).immediate()}(ti,t.pin_ref,{now:e});s||(i.serviceAudit.append({principal:ti,operation:"shares.expire",capability:"shares:ask",targetKind:"session",targetRef:t.session_ref,agentId:t.agent_id,outcome:"allowed",code:"expired"}),n.push(r))}).immediate();return{swept:n}}class tO extends Error{code;status;constructor(e,t,n){super(t),this.name="ShareAskError",this.code=e,this.status=n}}function tw(e){return{turn_ref:e.turn_ref,state:e.state,answer:"completed"===e.state?function(e){if(null===e)return null;let t=(0,a.serviceRedactor)().text(e);return t.length>ts.replyChars?`${t.slice(0,ts.replyChars-1)}…`:t}(e.answer):null,failure:e.failure?{code:e.failure.code}:null}}async function tk(e,t){let{turns:n}=await tr(ti,e.pin_ref);return n.find(e=>e.turn_ref===t)??null}async function tI(e){if(e.inflight_turn_ref){let t=await tk(e,e.inflight_turn_ref);if(t&&"running"===t.state)return"busy";i.default.prepare("UPDATE session_shares SET inflight_turn_ref = NULL WHERE id = ? AND inflight_turn_ref = ?").run(e.id,e.inflight_turn_ref)}if(e.inflight_key){if(e.inflight_owner===td&&tu.has(e.id))return"busy";i.default.prepare("UPDATE session_shares SET inflight_key = NULL, inflight_owner = NULL WHERE id = ? AND inflight_key = ?").run(e.id,e.inflight_key)}return"free"}async function tS(e){var t,n,r;let s=tN(e.shareRef),a=(e,t)=>i.serviceAudit.append({principal:ti,operation:"shares.ask",capability:"shares:ask",targetKind:"session",targetRef:s?.session_ref??null,agentId:s?.agent_id??null,outcome:e,code:t}),o=(e,t,n)=>{let r="invalid_request"===e||"idempotency_conflict"===e?"rejected":"denied";throw i.default.transaction(()=>{a(r,e),s&&ty(s.id,"turn_refused",Date.now(),{code:e})}).immediate(),new tO(e,t,n)},d=(e,t)=>o(e,t,ta[e]);s||d("share_not_found","No share with that reference."),("string"!=typeof e.messageKey||0===e.messageKey.trim().length||e.messageKey.length>200)&&d("invalid_request","A question key (1-200 characters) is required."),("string"!=typeof e.question||0===e.question.trim().length||e.question.length>ts.questionChars)&&d("invalid_request",`The question must be 1-${ts.questionChars} characters.`);let u=tR(s);"revoked"===u&&d("share_revoked","This share was revoked."),"expired"===u&&d("share_expired","This share has expired.");let l=()=>tn({requester:ti,pinRef:s.pin_ref,content:e.question,idempotencyKey:e.messageKey,onCommit:(e,t)=>{let n=Date.now();if(1!==i.default.prepare(`
2173
+ `).all(e),n=[];for(let{id:r}of t)i.default.transaction(()=>{let t=tN(r);if(!t||"expired"!==tR(t,e))return;let{replayed:s}=function(e,t,n={}){return i.default.transaction(()=>{var r;let s=e4(e,t);if("detached"===s.state)return n.onCommit?.(s),{pin:s,replayed:!0};r=n.now??Date.now(),i.default.prepare("UPDATE session_pins SET state = 'detached', detach_reason = ?, replaced_by = ?, detached_at = ?, updated_at = ? WHERE id = ? AND state = 'attached'").run("detached",null,r,r,s.id),eZ(s.id,"detached",{},r);let a=e0(s.id);return n.onCommit?.(a),{pin:a,replayed:!1}}).immediate()}(ti,t.pin_ref,{now:e});s||(i.serviceAudit.append({principal:ti,operation:"shares.expire",capability:"shares:ask",targetKind:"session",targetRef:t.session_ref,agentId:t.agent_id,outcome:"allowed",code:"expired"}),n.push(r))}).immediate();return{swept:n}}class tw extends Error{code;status;constructor(e,t,n){super(t),this.name="ShareAskError",this.code=e,this.status=n}}function tO(e){return{turn_ref:e.turn_ref,state:e.state,answer:"completed"===e.state?function(e){if(null===e)return null;let t=(0,a.serviceRedactor)().text(e);return t.length>ts.replyChars?`${t.slice(0,ts.replyChars-1)}…`:t}(e.answer):null,failure:e.failure?{code:e.failure.code}:null}}async function tk(e,t){let{turns:n}=await tr(ti,e.pin_ref);return n.find(e=>e.turn_ref===t)??null}async function tI(e){if(e.inflight_turn_ref){let t=await tk(e,e.inflight_turn_ref);if(t&&"running"===t.state)return"busy";i.default.prepare("UPDATE session_shares SET inflight_turn_ref = NULL WHERE id = ? AND inflight_turn_ref = ?").run(e.id,e.inflight_turn_ref)}if(e.inflight_key){if(e.inflight_owner===td&&tu.has(e.id))return"busy";i.default.prepare("UPDATE session_shares SET inflight_key = NULL, inflight_owner = NULL WHERE id = ? AND inflight_key = ?").run(e.id,e.inflight_key)}return"free"}async function tS(e){var t,n,r;let s=tN(e.shareRef),a=(e,t)=>i.serviceAudit.append({principal:ti,operation:"shares.ask",capability:"shares:ask",targetKind:"session",targetRef:s?.session_ref??null,agentId:s?.agent_id??null,outcome:e,code:t}),o=(e,t,n)=>{let r="invalid_request"===e||"idempotency_conflict"===e?"rejected":"denied";throw i.default.transaction(()=>{a(r,e),s&&ty(s.id,"turn_refused",Date.now(),{code:e})}).immediate(),new tw(e,t,n)},d=(e,t)=>o(e,t,ta[e]);s||d("share_not_found","No share with that reference."),("string"!=typeof e.messageKey||0===e.messageKey.trim().length||e.messageKey.length>200)&&d("invalid_request","A question key (1-200 characters) is required."),("string"!=typeof e.question||0===e.question.trim().length||e.question.length>ts.questionChars)&&d("invalid_request",`The question must be 1-${ts.questionChars} characters.`);let u=tR(s);"revoked"===u&&d("share_revoked","This share was revoked."),"expired"===u&&d("share_expired","This share has expired.");let l=()=>tn({requester:ti,pinRef:s.pin_ref,content:e.question,idempotencyKey:e.messageKey,onCommit:(e,t)=>{let n=Date.now();if(1!==i.default.prepare(`
2165
2174
  UPDATE session_shares SET turns_used = turns_used + 1, inflight_turn_ref = ?, inflight_key = NULL, inflight_owner = NULL, updated_at = ?
2166
2175
  WHERE id = ? AND turns_used < max_turns
2167
- `).run(t.id,n,s.id).changes)throw new to("share_turn_limit","This share has used all of its questions.");ty(s.id,"turn_sent",n,{turnRef:t.id}),a("allowed",null)}}),_=e=>{if(e instanceof tO)throw e;throw e instanceof to&&d(e.code,e.message),e instanceof eV&&(("pin_detached"===e.code||"pin_not_found"===e.code)&&d("share_revoked","This share was revoked."),o(e.code,e.message,e.status)),e};if(t=e.messageKey,i.default.prepare("SELECT pin_id FROM session_pin_turns WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(ti.kind,ti.id,`turn:${t}`)){let e;try{e=await l()}catch(e){return _(e)}return e.replayed&&a("allowed","replayed"),{share:tv(tN(s.id)),turn:tw(e.turn),replayed:e.replayed,settled:e.settled}}if(s.turns_used>=s.max_turns&&d("share_turn_limit","This share has used all of its questions."),await tI(s)==="busy"&&d("share_turn_in_progress","A question on this share is still being answered."),1!==i.default.prepare(`
2176
+ `).run(t.id,n,s.id).changes)throw new to("share_turn_limit","This share has used all of its questions.");ty(s.id,"turn_sent",n,{turnRef:t.id}),a("allowed",null)}}),_=e=>{if(e instanceof tw)throw e;throw e instanceof to&&d(e.code,e.message),e instanceof eV&&(("pin_detached"===e.code||"pin_not_found"===e.code)&&d("share_revoked","This share was revoked."),o(e.code,e.message,e.status)),e};if(t=e.messageKey,i.default.prepare("SELECT pin_id FROM session_pin_turns WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(ti.kind,ti.id,`turn:${t}`)){let e;try{e=await l()}catch(e){return _(e)}return e.replayed&&a("allowed","replayed"),{share:tv(tN(s.id)),turn:tO(e.turn),replayed:e.replayed,settled:e.settled}}if(s.turns_used>=s.max_turns&&d("share_turn_limit","This share has used all of its questions."),await tI(s)==="busy"&&d("share_turn_in_progress","A question on this share is still being answered."),1!==i.default.prepare(`
2168
2177
  UPDATE session_shares SET inflight_key = ?, inflight_owner = ?
2169
2178
  WHERE id = ? AND state = 'active' AND inflight_key IS NULL AND inflight_turn_ref IS NULL AND turns_used < max_turns
2170
- `).run(e.messageKey,td,s.id).changes){let e=tN(s.id);"revoked"===tR(e)&&d("share_revoked","This share was revoked."),e.turns_used>=e.max_turns&&d("share_turn_limit","This share has used all of its questions."),d("share_turn_in_progress","A question on this share is still being answered.")}tu.add(s.id);try{let e=await l();return{share:tv(tN(s.id)),turn:tw(e.turn),replayed:e.replayed,settled:e.settled}}catch(t){return n=s.id,r=e.messageKey,i.default.prepare("UPDATE session_shares SET inflight_key = NULL, inflight_owner = NULL WHERE id = ? AND inflight_key = ? AND inflight_turn_ref IS NULL").run(n,r),_(t)}finally{tu.delete(s.id)}}async function tA(e,t){let n=tN(e);if(!n)throw new to("share_not_found","No share with that reference.");let r=await tk(n,t);if(!r)throw new to("share_not_found","No turn with that reference on this share.");return"running"===r.state?null:(i.default.prepare("UPDATE session_shares SET inflight_turn_ref = NULL WHERE id = ? AND inflight_turn_ref = ?").run(n.id,t),tw(r))}}];
2179
+ `).run(e.messageKey,td,s.id).changes){let e=tN(s.id);"revoked"===tR(e)&&d("share_revoked","This share was revoked."),e.turns_used>=e.max_turns&&d("share_turn_limit","This share has used all of its questions."),d("share_turn_in_progress","A question on this share is still being answered.")}tu.add(s.id);try{let e=await l();return{share:tv(tN(s.id)),turn:tO(e.turn),replayed:e.replayed,settled:e.settled}}catch(t){return n=s.id,r=e.messageKey,i.default.prepare("UPDATE session_shares SET inflight_key = NULL, inflight_owner = NULL WHERE id = ? AND inflight_key = ? AND inflight_turn_ref IS NULL").run(n,r),_(t)}finally{tu.delete(s.id)}}async function tA(e,t){let n=tN(e);if(!n)throw new to("share_not_found","No share with that reference.");let r=await tk(n,t);if(!r)throw new to("share_not_found","No turn with that reference on this share.");return"running"===r.state?null:(i.default.prepare("UPDATE session_shares SET inflight_turn_ref = NULL WHERE id = ? AND inflight_turn_ref = ?").run(n.id,t),tO(r))}}];
2171
2180
 
2172
- //# sourceMappingURL=lib_1zc7-gl._.js.map
2181
+ //# sourceMappingURL=lib_19pzc33._.js.map