botmancers 0.3.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -1
- package/README.md +162 -21
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +20 -1
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +32 -4
- package/app/.next/required-server-files.json +2 -2
- package/app/.next/routes-manifest.json +143 -0
- package/app/.next/server/app/_global-error/page.js +1 -1
- package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +1 -1
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/agent-deck/decks/route.js +2 -2
- package/app/.next/server/app/api/agent-deck/decks/route.js.nft.json +1 -1
- package/app/.next/server/app/api/agent-deck/settings/route.js +2 -2
- package/app/.next/server/app/api/agent-deck/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/[id]/config/route.js +2 -2
- package/app/.next/server/app/api/bots/[id]/config/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js +9 -0
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/bots/[id]/sessions/[ref]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route.js +9 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route.js.nft.json +1 -0
- package/app/.next/server/app/api/bots/[id]/sessions/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/bots/[id]/skill/route.js +2 -2
- package/app/.next/server/app/api/bots/[id]/skill/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/availability/route.js +1 -1
- package/app/.next/server/app/api/bots/availability/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/delete-preview/route.js +3 -3
- package/app/.next/server/app/api/bots/delete-preview/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/import/route.js +2 -2
- package/app/.next/server/app/api/bots/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/manage/route.js +2 -2
- package/app/.next/server/app/api/bots/manage/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/name-migrations/route.js +2 -2
- package/app/.next/server/app/api/bots/name-migrations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/bots/route.js +6 -6
- package/app/.next/server/app/api/bots/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/approve/route.js +2 -2
- package/app/.next/server/app/api/conversations/[id]/approve/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/deny/route.js +2 -2
- package/app/.next/server/app/api/conversations/[id]/deny/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/draft/route.js +2 -2
- package/app/.next/server/app/api/conversations/[id]/draft/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js +2 -2
- package/app/.next/server/app/api/conversations/[id]/messages/[messageId]/stop/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/messages/route.js +6 -6
- package/app/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/route.js +2 -2
- package/app/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/[id]/stop/route.js +3 -3
- package/app/.next/server/app/api/conversations/[id]/stop/route.js.nft.json +1 -1
- package/app/.next/server/app/api/conversations/route.js +2 -2
- package/app/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/exchanges/[id]/cancel/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/exchanges/[id]/cancel/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/exchanges/[id]/cancel/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/exchanges/[id]/cancel/route.js +11 -0
- package/app/.next/server/app/api/exchanges/[id]/cancel/route.js.nft.json +1 -0
- package/app/.next/server/app/api/exchanges/[id]/cancel/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/exchanges/[id]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/exchanges/[id]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/exchanges/[id]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/exchanges/[id]/route.js +11 -0
- package/app/.next/server/app/api/exchanges/[id]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/exchanges/[id]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/exchanges/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/exchanges/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/exchanges/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/exchanges/route.js +12 -0
- package/app/.next/server/app/api/exchanges/route.js.nft.json +1 -0
- package/app/.next/server/app/api/exchanges/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/files/[name]/route.js +1 -1
- package/app/.next/server/app/api/files/[name]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/groups/route.js +2 -2
- package/app/.next/server/app/api/groups/route.js.nft.json +1 -1
- package/app/.next/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next/server/app/api/import-capabilities/route.js +1 -1
- package/app/.next/server/app/api/import-capabilities/route.js.nft.json +1 -1
- package/app/.next/server/app/api/marketplace-handoff/route.js +1 -1
- package/app/.next/server/app/api/marketplace-handoff/route.js.nft.json +1 -1
- package/app/.next/server/app/api/marketplace-handoff/status/route.js +1 -1
- package/app/.next/server/app/api/marketplace-handoff/status/route.js.nft.json +1 -1
- package/app/.next/server/app/api/mcp/route.js +2 -2
- package/app/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/app/.next/server/app/api/messages/[id]/between/route.js +2 -2
- package/app/.next/server/app/api/messages/[id]/between/route.js.nft.json +1 -1
- package/app/.next/server/app/api/service-grants/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/service-grants/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/service-grants/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/service-grants/route.js +9 -0
- package/app/.next/server/app/api/service-grants/route.js.nft.json +1 -0
- package/app/.next/server/app/api/service-grants/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/[conversationId]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/conversations/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js +4 -3
- package/app/.next/server/app/api/v0/agents/[agentId]/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v0/agents/[agentId]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/[ref]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/[agentId]/sessions/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/agents/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/agents/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/agents/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/agents/route.js +11 -0
- package/app/.next/server/app/api/v0/agents/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/agents/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/capabilities/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/capabilities/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/capabilities/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/capabilities/route.js +11 -0
- package/app/.next/server/app/api/v0/capabilities/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/capabilities/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/conversations/[id]/route.js +4 -3
- package/app/.next/server/app/api/v0/conversations/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js +11 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/cancel/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route.js +11 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/exchanges/[id]/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/exchanges/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/exchanges/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/exchanges/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/exchanges/route.js +11 -0
- package/app/.next/server/app/api/v0/exchanges/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/exchanges/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/v0/mcp/route.js +5 -3
- package/app/.next/server/app/api/v0/mcp/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v0/requests/[id]/route.js +4 -3
- package/app/.next/server/app/api/v0/requests/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route/app-paths-manifest.json +3 -0
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route/build-manifest.json +12 -0
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route/server-reference-manifest.json +4 -0
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js +11 -0
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route.js.nft.json +1 -0
- package/app/.next/server/app/api/v0/sessions/[ref]/messages/route_client-reference-manifest.js +3 -0
- package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js +5 -5
- package/app/.next/server/app/api/wake-grants/[id]/revoke/route.js.nft.json +1 -1
- package/app/.next/server/app/api/wakes/[id]/decision/route.js +5 -5
- package/app/.next/server/app/api/wakes/[id]/decision/route.js.nft.json +1 -1
- package/app/.next/server/app/api/wakes/[id]/retry/route.js +5 -5
- package/app/.next/server/app/api/wakes/[id]/retry/route.js.nft.json +1 -1
- package/app/.next/server/app/bots/[id]/config/page.js +1 -1
- package/app/.next/server/app/bots/[id]/config/page.js.nft.json +1 -1
- package/app/.next/server/app/bots/[id]/config/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/exchanges/page/app-paths-manifest.json +3 -0
- package/app/.next/server/app/exchanges/page/build-manifest.json +20 -0
- package/app/.next/server/app/exchanges/page/next-font-manifest.json +11 -0
- package/app/.next/server/app/exchanges/page/react-loadable-manifest.json +1 -0
- package/app/.next/server/app/exchanges/page/server-reference-manifest.json +4 -0
- package/app/.next/server/app/exchanges/page.js +13 -0
- package/app/.next/server/app/exchanges/page.js.nft.json +1 -0
- package/app/.next/server/app/exchanges/page_client-reference-manifest.js +3 -0
- package/app/.next/server/app/exchanges.html +1 -0
- package/app/.next/server/app/exchanges.meta +34 -0
- package/app/.next/server/app/exchanges.rsc +22 -0
- package/app/.next/server/app/exchanges.segments/_full.segment.rsc +22 -0
- package/app/.next/server/app/exchanges.segments/_tree.segment.rsc +4 -0
- package/app/.next/server/app/exchanges.segments/exchanges/__PAGE__.segment.rsc +26 -0
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +3 -3
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/page.js +1 -1
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/settings/page.js +1 -1
- package/app/.next/server/app/settings/page.js.nft.json +1 -1
- package/app/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/settings.html +1 -1
- package/app/.next/server/app/settings.rsc +2 -2
- package/app/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/app/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/threads/[id]/page/app-paths-manifest.json +3 -0
- package/app/.next/server/app/threads/[id]/page/build-manifest.json +20 -0
- package/app/.next/server/app/threads/[id]/page/next-font-manifest.json +11 -0
- package/app/.next/server/app/threads/[id]/page/react-loadable-manifest.json +1 -0
- package/app/.next/server/app/threads/[id]/page/server-reference-manifest.json +4 -0
- package/app/.next/server/app/threads/[id]/page.js +13 -0
- package/app/.next/server/app/threads/[id]/page.js.nft.json +1 -0
- package/app/.next/server/app/threads/[id]/page_client-reference-manifest.js +3 -0
- package/app/.next/server/app-paths-manifest.json +20 -1
- package/app/.next/server/chunks/0ivl_api_v0_agents_[agentId]_conversations_[conversationId]_route_actions_0lvijtu.js +3 -0
- package/app/.next/server/chunks/1oeh_server_app_api_v0_agents_[agentId]_conversations_route_actions_0ko3117.js +3 -0
- package/app/.next/server/chunks/1oeh_server_app_api_v0_agents_[agentId]_sessions_[ref]_route_actions_0o7q3vt.js +3 -0
- package/app/.next/server/chunks/{[externals]__18bqksw._.js → [externals]__06lqs5i._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__1vxmbdl._.js → [root-of-the-server]__0-45blq._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0ab4e_k._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0izjfmr._.js +285 -53
- package/app/.next/server/chunks/{[root-of-the-server]__07l_rgn._.js → [root-of-the-server]__0j0i8xz._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0wtzcge._.js +3 -0
- package/app/.next/server/chunks/{[root-of-the-server]__19hjzs0._.js → [root-of-the-server]__15hknun._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__08i4wq6._.js → [root-of-the-server]__16ikszu._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__1khwkvb._.js → [root-of-the-server]__1c3e2ds._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1kvvdpx._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__1qoa704._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__1slu7d7._.js +7 -0
- package/app/.next/server/chunks/_06rti77._.js +30 -0
- package/app/.next/server/chunks/_09k38l1._.js +3 -0
- package/app/.next/server/chunks/_0dlg5kj._.js +30 -0
- package/app/.next/server/chunks/_0dyculb._.js +30 -0
- package/app/.next/server/chunks/_0eig2jc._.js +30 -0
- package/app/.next/server/chunks/_0ggf7vy._.js +1 -1
- package/app/.next/server/chunks/_0kghtb6._.js +3 -0
- package/app/.next/server/chunks/_0th2j4w._.js +1 -1
- package/app/.next/server/chunks/_0uz7r06._.js +30 -0
- package/app/.next/server/chunks/_0x05ts4._.js +3 -0
- package/app/.next/server/chunks/_0y3geoj._.js +30 -0
- package/app/.next/server/chunks/_1-5mthb._.js +1 -1
- package/app/.next/server/chunks/_12tq5uv._.js +30 -0
- package/app/.next/server/chunks/_147-4gl._.js +3 -0
- package/app/.next/server/chunks/_14ky6a2._.js +30 -0
- package/app/.next/server/chunks/_16kbxdt._.js +30 -0
- package/app/.next/server/chunks/_1963m2f._.js +30 -0
- package/app/.next/server/chunks/_1_34_h3._.js +30 -0
- package/app/.next/server/chunks/_1cc-2mx._.js +3 -0
- package/app/.next/server/chunks/_1inyx08._.js +1 -1
- package/app/.next/server/chunks/_1nurj3f._.js +30 -0
- package/app/.next/server/chunks/_1p2rf_n._.js +30 -0
- package/app/.next/server/chunks/_1u6tw78._.js +30 -0
- package/app/.next/server/chunks/_20azcus._.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_bots_[id]_sessions_[ref]_route_actions_02gp9-5.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_bots_[id]_sessions_route_actions_1s_wxg4.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_exchanges_[id]_cancel_route_actions_0lh0fl4.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_exchanges_[id]_route_actions_1w4jhin.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_exchanges_route_actions_028wchg.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_service-grants_route_actions_1459xk1.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_agents_[agentId]_route_actions_127sxvv.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_agents_[agentId]_sessions_route_actions_0pm6tcu.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_agents_route_actions_00azkhd.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_capabilities_route_actions_0d-eefd.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_exchanges_[id]_cancel_route_actions_1hb2q7i.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_exchanges_[id]_route_actions_098f50-.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_exchanges_route_actions_1ftmhhm.js +3 -0
- package/app/.next/server/chunks/_next-internal_server_app_api_v0_sessions_[ref]_messages_route_actions_1-rgf_k.js +3 -0
- package/app/.next/server/chunks/lib_0kik6bx._.js +1 -1
- package/app/.next/server/chunks/lib_0pe3tiv._.js +1 -1
- package/app/.next/server/chunks/lib_0t3s3rj._.js +30 -0
- package/app/.next/server/chunks/lib_0zxi6rx._.js +148 -0
- package/app/.next/server/chunks/lib_12udr7g._.js +148 -0
- package/app/.next/server/chunks/lib_service-api-http_ts_0xzqhny._.js +25 -0
- package/app/.next/server/chunks/lib_session-catalog_ts_1i7f38f._.js +30 -0
- package/app/.next/server/chunks/ssr/{[root-of-the-server]__0sq4frf._.js → [root-of-the-server]__03186rx._.js} +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__03xw2d9._.js +3 -0
- package/app/.next/server/chunks/ssr/{[root-of-the-server]__1x7o-fe._.js → [root-of-the-server]__0zzcbqg._.js} +1 -1
- package/app/.next/server/chunks/ssr/{[root-of-the-server]__029oxo_._.js → [root-of-the-server]__1feicqq._.js} +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__1t063pe._.js +3 -0
- package/app/.next/server/chunks/ssr/_00ysoah._.js +3 -0
- package/app/.next/server/chunks/ssr/_157wnb_._.js +3 -0
- package/app/.next/server/chunks/ssr/_1o94bnv._.js +1 -1
- package/app/.next/server/chunks/ssr/_next-internal_server_app_exchanges_page_actions_0hcso2x.js +3 -0
- package/app/.next/server/chunks/ssr/_next-internal_server_app_threads_[id]_page_actions_1fte2n3.js +3 -0
- package/app/.next/server/chunks/ssr/app_1-nwnha._.js +3 -0
- package/app/.next/server/chunks/ssr/app_bots_[id]_config_page_tsx_1e0uue9._.js +3 -0
- package/app/.next/server/chunks/ssr/app_components_AgentDeckRuntime_tsx_024janf._.js +3 -0
- package/app/.next/server/chunks/ssr/node_modules_1nkgb45._.js +23 -0
- package/app/.next/server/chunks/ssr/node_modules_next_0x3i8za._.js +131 -0
- package/app/.next/server/middleware-build-manifest.js +3 -3
- package/app/.next/server/middleware.js +1 -1
- package/app/.next/server/next-font-manifest.js +1 -1
- package/app/.next/server/next-font-manifest.json +8 -0
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/prefetch-hints.json +14 -0
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/1i5xroz391zkb.js +1 -0
- package/app/.next/static/chunks/{3zqbpbm93yqzh.css → 1vz50l951sr9e.css} +1 -1
- package/app/.next/static/chunks/24ggj819yt3y6.js +1 -0
- package/app/.next/static/chunks/2_8lcalraul5s.js +3 -0
- package/app/.next/static/chunks/30i0-l04mmdvk.js +1 -0
- package/app/BUILD_INFO.json +2 -2
- package/app/package.json +1 -1
- package/app/server.js +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +33 -5
- package/dist/clients.d.ts +86 -0
- package/dist/clients.js +635 -0
- package/dist/config.js +2 -2
- package/dist/contract.d.ts +6 -1
- package/dist/contract.js +28 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/managed.js +7 -0
- package/dist/product.d.ts +2 -0
- package/dist/product.js +6 -0
- package/dist/server.js +5 -4
- package/dist/upstream.js +21 -7
- package/package.json +7 -6
- package/schemas/botmancers.mcp.v2.tools.json +2981 -0
- package/skills/botmancers-collaboration/SKILL.md +99 -0
- package/skills/botmancers-collaboration/references/workflows.md +209 -0
- package/app/.next/server/chunks/[root-of-the-server]__09d-yrq._.js +0 -3
- package/app/.next/server/chunks/[root-of-the-server]__0za34e1._.js +0 -7
- package/app/.next/server/chunks/[root-of-the-server]__1fjpie4._.js +0 -3
- package/app/.next/server/chunks/[root-of-the-server]__1qanlbg._.js +0 -3
- package/app/.next/server/chunks/[root-of-the-server]__20wve4_._.js +0 -3
- package/app/.next/server/chunks/lib_051fv4x._.js +0 -111
- package/app/.next/server/chunks/lib_07adeq3._.js +0 -111
- package/app/.next/server/chunks/ssr/_0k_7i66._.js +0 -131
- package/app/.next/server/chunks/ssr/_1flnty7._.js +0 -23
- package/app/.next/server/chunks/ssr/node_modules_@swc_helpers_cjs__interop_require_default_cjs_1ztp13a._.js +0 -3
- package/app/.next/static/chunks/0qbtymorcz-l9.js +0 -3
- /package/app/.next/static/{u4r8RPgEfpxk-DGXeKV6g → ewp56HqU5-d9bpFog3bli}/_buildManifest.js +0 -0
- /package/app/.next/static/{u4r8RPgEfpxk-DGXeKV6g → ewp56HqU5-d9bpFog3bli}/_clientMiddlewareManifest.js +0 -0
- /package/app/.next/static/{u4r8RPgEfpxk-DGXeKV6g → ewp56HqU5-d9bpFog3bli}/_ssgManifest.js +0 -0
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
module.exports=[91084,17834,e=>{"use strict";var t=e.i(54799),n=e.i(62294),r=e.i(27510),a=e.i(53059),i=e.i(35613);e.i(57281);var o=e.i(54226),s=e.i(64974),d=e.i(76459),l=e.i(62349),u=e.i(51749);let c=new Set(["version","target","executionKind","objective","contextWorkRequests","resumeWorkRequest","limits"]),_=new Set(["maxAttempts","deadlineSeconds"]),p=new Set(["conversation","implementation","review","revision"]);function f(e,t){return"string"==typeof e&&e.trim().length>0&&e.length<=t}function g(e,t,n){return Number.isInteger(e)&&e>=t&&e<=n}function m(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=>!c.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(!f(e.target,120))return{ok:!1,reason:"target must be a non-empty Agent name (max 120 characters)"};if("string"!=typeof e.executionKind||!p.has(e.executionKind))return{ok:!1,reason:"unknown executionKind"};if(!f(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=>!f(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||!f(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=>!_.has(e)))return{ok:!1,reason:"unknown limits field"};if(void 0!==t.maxAttempts&&!g(t.maxAttempts,1,10))return{ok:!1,reason:"limits.maxAttempts must be 1-10"};if(void 0!==t.deadlineSeconds&&!g(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 h=/```botmancers-wake[^\S\r\n]*\r?\n([\s\S]*?)```/g,k=/WAKE\s+([A-Za-z0-9_-]+)\s*:/gi;function w(e){return JSON.stringify(function e(t){return Array.isArray(t)?t.map(e):t&&"object"==typeof t?Object.fromEntries(Object.keys(t).sort().map(n=>[n,e(t[n])])):t}(e.validation.ok?{syntax:e.syntax,envelope:e.validation.envelope}:{syntax:e.syntax,raw:e.raw}))}var y=e.i(142);(0,y.wakeSafetyLimits)().maxWakeDepth,(0,y.wakeSafetyLimits)().rootBudget;class E extends Error{code;constructor(e,t){super(t),this.name="WakeRouterError",this.code=e}}let v=n.default.prepare("SELECT * FROM wakes WHERE id = ?"),I=n.default.prepare("SELECT * FROM wakes WHERE idempotency_key = ?"),R=n.default.prepare("SELECT * FROM wakes WHERE source_event_id = ? AND position = ?");function q(e){return v.get(e)}function b(e,t){return{wake:e,request:e.work_request_id?n.engine.getWorkRequest(e.work_request_id)??null:null,created:t}}function A(e){return"accepted"===e.status||"blocked"===e.status}function S(e){return n.default.prepare("SELECT COUNT(*) AS n FROM work_requests WHERE root_request_id = ? AND wake_event_id IS NOT NULL").get(e).n}function x(e){let{rootBudget:t}=(0,y.wakeSafetyLimits)(),n=S(e);return n<t?null:{status:"rejected",code:"root_budget_exhausted",limit:t,observed:n,reason:`This work already used ${n} Wakes (limit ${t}).`}}function T(e,t,r){let a=(0,n.resolveWakeTarget)(e.target);if(!a.ok){var i;return"ambiguous"===a.reason?{status:"unavailable",code:"target_ambiguous",reason:`More than one Agent is named ${e.target}; rename one to restore routing.`}:(i=e.target,n.default.prepare("SELECT 1 FROM groups WHERE lower(trim(name)) = lower(trim(?))").get(i))?{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 D(e,t,{id:a.agentId,name:a.displayName},r)}function D(e,t,r,a){let i=a.parent?.root_request_id??null,o=(0,s.selectExecutionPolicy)({entryPoint:"wake",executionKind:e.executionKind,wakeSyntax:t,resumesWorkRequest:!!e.resumeWorkRequest});if(!o.ok)return{status:"rejected",code:"unsupported_policy",reason:o.reason,target:r};let d=o.policy;if(e.resumeWorkRequest){let t=n.engine.getWorkRequest(e.resumeWorkRequest);if(!t||t.target_agent_id!==r.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:r}}if("review"===e.executionKind&&((e.contextWorkRequests??[]).some(e=>{let t=n.engine.getWorkRequest(e);return t&&["implementation","revision"].includes(t.execution_kind)&&t.target_agent_id===r.id})||null!==i&&n.default.prepare("SELECT 1 FROM work_requests WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision') LIMIT 1").get(i,r.id)))return{status:"rejected",code:"reviewer_not_independent",reason:`${r.name} did the work under review; wake a different reviewer or ask the person.`,target:r};let c=function(e,t,r){if(!(0,y.needsEditGrant)(e.executionKind))return{rule:"readonly_default",id:null};if(function(e,t,r){let a=r.parent;if("implementation"!==e.executionKind||t.id!==r.agentId||!a||null!==a.wake_event_id||0!==a.wake_depth||null!==a.parent_request_id||a.target_agent_id!==r.agentId||!(0,y.isOwnerPrincipal)({kind:a.root_principal_kind??"",id:a.root_principal_id??""}))return!1;let i=n.engine.listSafetyDecisions(a.id)[0];return i?.principal_type==="human_owner"}(e,t,r))return{rule:"owner_direct_self_wake",id:null};let a=(0,y.activeEditGrant)(r.agentId,t.id);return a?{rule:"edit_grant",id:a.id}:null}(e,r,a);return c?function(e,t,r){var a;let i=n.bots.getById(e.id),o=(0,l.resolveAgent)(i);if(!o.launchable)return{status:"blocked",code:"target_unconfigured",reason:o.needs_deck_selection?`${e.name} has no Agent Deck selected.`:`${e.name} has an unsupported Agent type.`,target:e,policy:t,grant:r};let s=(a=i,"hermes-gateway"===(0,l.agentTransport)((0,l.resolveAgent)(a).agent)?(0,u.loadHermesConfig)()?{available:!0}:{available:!1,reason:"The Hermes gateway is not configured (HERMES_API_SERVER_KEY is unset)."}:{available:!0});return s.available?{status:"accepted",code:null,reason:null,target:e,policy:t,grant:r}:{status:"blocked",code:"target_unavailable",reason:s.reason,target:e,policy:t,grant:r}}(r,d,c):{status:"blocked",code:"grant_required",reason:`${r.name} needs your approval for edit work.`,target:r,policy:d,grant:null}}function N(e){let t=(0,y.wakeSafetyLimits)(),n=e.rootRequestId?S(e.rootRequestId):0;return{safety_version:y.WAKE_SAFETY_VERSION,root_principal:e.rootPrincipal,wake_depth:e.wakeDepth,grant_rule:e.grant?.rule??null,grant_id:e.grant?.id??null,root_budget:{used:n+ +!!e.counting,limit:t.rootBudget},safety_limits:{max_wake_depth:t.maxWakeDepth,root_budget:t.rootBudget}}}function C(e,t,n,r,a){return{principalType:"agent_principal",principal:{kind:"bot",id:n},decision:"accepted"===e.status?"allowed":"blocked",reasonCode:e.code,grantRule:e.grant?.rule??null,grantId:e.grant?.id??null,wakeId:t,snapshot:r,now:a}}function O(e,t,r,a){let i=e.parent_request_id?n.engine.getWorkRequest(e.parent_request_id)??null:null;if(!i)throw new E("invalid_input","A Wake creates work only in a tracked lineage.");let o=N({rootPrincipal:{kind:i.root_principal_kind??"unknown",id:i.root_principal_id??"unknown"},wakeDepth:i.wake_depth+1,grant:r.grant,rootRequestId:i.root_request_id,counting:!0}),{request:s}=n.engine.createOrGetWorkRequest({sourceConversationId:e.source_conversation_id,sourceEventId:e.source_event_id,requester:{kind:"bot",id:e.requester_agent_id},targetAgentId:r.target.id,intent:t.objective,executionKind:r.policy.execution_kind,toolProfile:r.policy.tool_profile,idempotencyKey:e.idempotency_key,parentRequestId:e.parent_request_id,wakeEventId:e.id,policy:{source:"wake",wake_version:1,wake_syntax:e.syntax,root_wake_id:e.root_wake_id,requested_target:t.target,target_name_snapshot:r.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:r.policy,initialState:"blocked"===r.status?"blocked":"queued",stateReason:"blocked"===r.status?`${r.code}: ${r.reason}`:null,safetySnapshot:o,safety:C(r,e.id,e.requester_agent_id,o,a),now:a});return"grant_required"===r.code&&W(s,e.id,a),s}function W(e,t,r){n.engine.appendEvent(e.id,{type:"grant_requested",data:{wake_id:t,caller_agent_id:e.requester_id,target_agent_id:e.target_agent_id,authority:"edit",execution_kind:e.execution_kind},now:r})}function L(e){if("string"!=typeof e.sourceEventId||!e.sourceEventId.trim())throw new E("invalid_input","sourceEventId is required.");return n.default.transaction(()=>{let r=n.default.prepare("SELECT * FROM messages WHERE id = ?").get(e.sourceEventId);if(!r)throw new E("source_not_found",`No conversation event ${e.sourceEventId}.`);if("bot"!==r.sender_type||!r.sender_id||!n.bots.getById(r.sender_id))throw new E("invalid_input","Wakes are routed only from an Agent message.");let a=null;if(e.parentRequestId){if(!(a=n.engine.getWorkRequest(e.parentRequestId)??null))throw new E("not_found",`No parent Work Request ${e.parentRequestId}.`);if(a.target_agent_id!==r.sender_id||a.source_conversation_id!==r.conversation_id)throw new E("parent_mismatch","The parent Work Request was not run by this Agent in this conversation.")}let i=e.now??Date.now();return(function(e){let t=[],n=0,r=(n,r)=>{var a;let i;for(let o of(a=e.slice(n,r),(i=[...a.matchAll(k)]).map((e,t)=>{let r=t+1<i.length?i[t+1].index:a.length,o=a.slice(e.index,r);return{at:n+e.index,raw:o.trim(),target:e[1],message:o.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)"}:m({version:1,target:o.target,executionKind:"conversation",objective:o.message});t.push({at:o.at,syntax:"legacy",raw:o.raw,validation:e})}};for(let a of e.matchAll(h)){let e,i=a.index;r(n,i);try{e=m(JSON.parse(a[1]))}catch{e={ok:!1,reason:"block is not valid JSON"}}t.push({at:i,syntax:"structured",raw:a[0],validation:e}),n=i+a[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}))})(r.content).map(e=>(function(e,r,a,i,o){var s;let d,l,u=(s=r.id,l=(0,t.createHash)("sha256").update(w(e)).digest("hex").slice(0,32),`wake:v1:${s}:${e.position}:${l}`),c=I.get(u);if(c)return b(c,!1);if(R.get(r.id,e.position))throw new E("idempotency_conflict",`Wake ${e.position} of event ${r.id} was already recorded with a different payload.`);let _=(0,t.randomUUID)(),p=i?.wake_event_id?q(i.wake_event_id):void 0,f={id:_,idempotency_key:u,source_conversation_id:r.conversation_id,source_event_id:r.id,requester_agent_id:a,parent_request_id:i?.id??null,root_wake_id:p?.root_wake_id??_,syntax:e.syntax},g=null;if(e.validation.ok)if(i){let t=function(e,t,r){for(let a of[...e.contextWorkRequests??[],...e.resumeWorkRequest?[e.resumeWorkRequest]:[]]){let e=n.engine.getWorkRequest(a);if(!(e&&(r?e.root_request_id===r.root_request_id:e.source_conversation_id===t)))return`Work Request ${a} is not in this conversation lineage.`}return null}(g=e.validation.envelope,r.conversation_id,i);d=t?{status:"rejected",code:"invalid_reference",reason:t}:function(e){let{maxWakeDepth:t}=(0,y.wakeSafetyLimits)(),n=e.wake_depth+1;return n>t?{status:"rejected",code:"depth_exceeded",limit:t,observed:n,reason:`This work is already ${e.wake_depth} Wakes deep (limit ${t}).`}:x(e.root_request_id)}(i)??T(g,e.syntax,{agentId:a,parent:i})}else g=e.validation.envelope,d={status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};else d={status:"rejected",code:"invalid_envelope",reason:e.validation.reason};let m=g&&A(d)?O(f,g,d,o):null;return n.default.prepare(`
|
|
2
|
-
INSERT INTO wakes (
|
|
3
|
-
id, idempotency_key, source_conversation_id, source_event_id, position, syntax, payload,
|
|
4
|
-
requester_agent_id, requested_target, target_agent_id, target_name_snapshot, execution_kind,
|
|
5
|
-
parent_request_id, root_request_id, root_wake_id, depth, status, reason_code, reason,
|
|
6
|
-
work_request_id, limit_value, observed_value, created_at, updated_at
|
|
7
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
8
|
-
`).run(_,u,r.conversation_id,r.id,e.position,e.syntax,w(e),a,g?.target??null,d.target?.id??null,d.target?.name??null,g?.executionKind??null,i?.id??null,m?.root_request_id??i?.root_request_id??null,f.root_wake_id,m?.wake_depth??(i?i.wake_depth+1:0),d.status,d.code,d.reason,m?.id??null,A(d)?null:d.limit??null,A(d)?null:d.observed??null,o,o),b(q(_),!0)})(e,r,r.sender_id,a,i))}).immediate()}function M(e,t=Date.now()){return n.default.transaction(()=>{let r=q(e);if(!r)throw new E("not_found",`No Wake ${e}.`);if("unavailable"!==r.status&&"blocked"!==r.status||"grant_denied"===r.reason_code)return b(r,!1);let a=JSON.parse(r.payload).envelope,i=n.default.prepare(`
|
|
9
|
-
UPDATE wakes SET status = ?, reason_code = ?, reason = ?, target_agent_id = ?, target_name_snapshot = ?,
|
|
10
|
-
work_request_id = ?, root_request_id = ?, limit_value = ?, observed_value = ?, updated_at = ?
|
|
11
|
-
WHERE id = ?
|
|
12
|
-
`),o=r.parent_request_id?n.engine.getWorkRequest(r.parent_request_id)??null:null,s={agentId:r.requester_agent_id,parent:o};if("unavailable"===r.status){let e=o?x(o.root_request_id)??T(a,r.syntax,s):{status:"rejected",code:"untracked_lineage",reason:"Its source turn is not tracked work, so the Wake cannot start a lineage."};if(!A(e))return(e.status!==r.status||e.code!==r.reason_code||e.reason!==r.reason)&&i.run(e.status,e.code,e.reason,null,null,null,r.root_request_id,e.limit??null,e.observed??null,t,r.id),b(q(r.id),!1);let n=O(r,a,e,t);return i.run(e.status,e.code,e.reason,e.target.id,e.target.name,n.id,n.root_request_id,null,null,t,r.id),b(q(r.id),!0)}let d=n.engine.getWorkRequest(r.work_request_id),l=n.bots.getById(d.target_agent_id);if(!l||"blocked"!==d.state)return b(r,!1);let u=D(a,r.syntax,{id:l.id,name:l.name},s);return $(r,d,u,"target_available",t)}).immediate()}function $(e,t,r,a,i){let o=n.default.prepare("UPDATE wakes SET status = ?, reason_code = ?, reason = ?, updated_at = ? WHERE id = ?");if("blocked"===r.status){var s,d;if(r.code===e.reason_code&&r.reason===e.reason)return b(e,!1);o.run("blocked",r.code,r.reason,i,e.id);let a=N({rootPrincipal:{kind:t.root_principal_kind??"unknown",id:t.root_principal_id??"unknown"},wakeDepth:t.wake_depth,grant:r.grant,rootRequestId:null,counting:!1});return n.engine.recordSafetyDecision(t.id,C(r,e.id,e.requester_agent_id,a,i)),"grant_required"===r.code&&W(t,e.id,i),s=r.code,d=r.reason,n.engine.reblockWorkRequest(t.id,{reason:`${s}: ${d}`,type:"wake_reblocked",data:{reason_code:s,reason:d},now:i}),b(q(e.id),!1)}if("accepted"!==r.status)return b(e,!1);let l=N({rootPrincipal:{kind:t.root_principal_kind??"unknown",id:t.root_principal_id??"unknown"},wakeDepth:t.wake_depth,grant:r.grant,rootRequestId:null,counting:!1});return n.engine.recordSafetyDecision(t.id,C(r,e.id,e.requester_agent_id,l,i)),n.engine.transitionWorkRequest(t.id,{from:"blocked",to:"queued",reason:a,data:{grant_rule:r.grant?.rule??null,grant_id:r.grant?.id??null},now:i}),o.run("accepted",null,null,i,e.id),b(q(e.id),!0)}function F(e){if((0,y.assertOwner)(e.caller.category),"allow"!==e.decision&&"deny"!==e.decision)throw new E("invalid_input","decision must be allow or deny.");let t=e.now??Date.now();return n.default.transaction(()=>{let r=q(e.wakeId);if(!r)throw new y.WakeSafetyError("not_found",`No Wake ${e.wakeId}.`);let a=r.work_request_id?n.engine.getWorkRequest(r.work_request_id):void 0,i=(t,n)=>({...t,decision:e.decision,grant:n,runnable:t.request?.state==="queued",ended:t.request?.terminal_at!==null&&t.request?.terminal_at!==void 0});if("blocked"!==r.status||"grant_required"!==r.reason_code||!a||"blocked"!==a.state){let t=a?(0,y.activeEditGrant)(r.requester_agent_id,a.target_agent_id)??null:null;if("deny"===e.decision&&"grant_denied"===r.reason_code)return{...i(b(r,!1),null),runnable:!1};if("allow"===e.decision&&t&&"grant_denied"!==r.reason_code)return{...i(b(r,!1),t),runnable:!1};throw new y.WakeSafetyError("not_pending","This Wake is not waiting for an owner grant decision.")}let o={kind:e.caller.principal.kind,id:e.caller.principal.id};if("deny"===e.decision)return n.default.prepare("UPDATE wakes SET reason_code = 'grant_denied', reason = ?, updated_at = ? WHERE id = ?").run("The owner denied this edit Wake.",t,r.id),n.engine.appendEvent(a.id,{type:"grant_denied",data:{wake_id:r.id,caller_agent_id:r.requester_agent_id,target_agent_id:a.target_agent_id,authority:"edit",decided_by:o},now:t}),n.engine.recordSafetyDecision(a.id,{principalType:"human_owner",principal:o,decision:"denied",reasonCode:"grant_denied",wakeId:r.id,snapshot:{safety_version:y.WAKE_SAFETY_VERSION,decision:"deny",decided_by:o},now:t}),n.engine.transitionWorkRequest(a.id,{from:"blocked",to:"cancelled",reason:"grant_denied",expectedVersion:a.version,errorCode:"grant_denied",errorMessage:"The owner denied this edit Wake; no work ran.",now:t}),i(b(q(r.id),!1),null);let{grant:s}=(0,y.ensureEditGrant)({callerAgentId:r.requester_agent_id,targetAgentId:a.target_agent_id,grantedBy:o,sourceWakeId:r.id,now:t});n.engine.appendEvent(a.id,{type:"grant_approved",data:{wake_id:r.id,grant_id:s.id,caller_agent_id:s.caller_agent_id,target_agent_id:s.target_agent_id,authority:"edit",decided_by:o},now:t});let d=JSON.parse(r.payload).envelope,l=n.bots.getById(a.target_agent_id),u=r.parent_request_id?n.engine.getWorkRequest(r.parent_request_id)??null:null,c=D(d,r.syntax,{id:l.id,name:l.name},{agentId:r.requester_agent_id,parent:u});return i($(r,a,c,"grant_approved",t),s)}).immediate()}e.s(["WakeRouterError",0,E,"decideWakeGrant",0,F,"retryWake",0,M,"routeAgentWakes",0,L],17834);var H=e.i(9346);let U=new Set(["version","decision","implementationAttemptId","reviewAttemptId","commitMessage"]);function P(e){return"string"==typeof e&&e.trim().length>0&&e.length<=160}let z=/```botmancers-finalize[^\S\r\n]*\r?\n([\s\S]*?)```/g;function j(e){return(0,t.createHash)("sha256").update(e).digest("hex")}function B(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}let K=["implementation","revision"];function G(e){return n.default.prepare("SELECT * FROM work_attempts WHERE request_id = ? ORDER BY attempt_number DESC LIMIT 1").get(e)}function J(e){return n.default.prepare("SELECT * FROM candidate_manifests WHERE attempt_id = ?").get(e)}function V(e){return n.default.prepare("SELECT * FROM finalizations WHERE id = ?").get(e)}function Y(e){return JSON.parse(e.files)}function X(e,t,r=Date.now()){let a=n.engine.getAttempt(e);if(!a?.external_run_id)return!1;let i=n.default.prepare("SELECT baseline_ref, baseline_digest FROM attempt_finalization_baselines WHERE attempt_id = ?").get(e);return i?i.baseline_ref===t.baselineRef&&i.baseline_digest===t.baselineDigest:(n.default.prepare(`
|
|
13
|
-
INSERT OR IGNORE INTO attempt_finalization_baselines (attempt_id, request_id, external_run_id, baseline_ref, baseline_digest, created_at)
|
|
14
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
15
|
-
`).run(e,a.request_id,a.external_run_id,t.baselineRef,t.baselineDigest,r),!0)}function Z(e,r,a,i=Date.now()){let o=a.finalization;if(!o||!r.external_run_id||!K.includes(e.execution_kind)||"edit"!==e.tool_profile)return;if(o.baselineRef&&o.baselineDigest&&!X(r.id,{baselineRef:o.baselineRef,baselineDigest:o.baselineDigest},i))return void n.engine.appendEvent(e.id,{type:"candidate_manifest_unavailable",attemptId:r.id,data:{external_run_id:r.external_run_id,reason_code:"BASELINE_MISMATCH",reason:"The terminal baseline did not match the baseline captured at launch."},now:i});let s=o.candidate;if(!s)return;if(!s.ok)return void n.engine.appendEvent(e.id,{type:"candidate_manifest_unavailable",attemptId:r.id,data:{external_run_id:r.external_run_id,reason_code:s.code,reason:s.message.slice(0,300)},now:i});let d=s.manifest;if(J(r.id))return;let l=(0,t.randomUUID)();n.default.prepare(`
|
|
16
|
-
INSERT INTO candidate_manifests (
|
|
17
|
-
id, attempt_id, request_id, conversation_id, external_run_id, baseline_ref, baseline_digest,
|
|
18
|
-
base_commit, manifest_digest, files, file_count, created_at
|
|
19
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
20
|
-
`).run(l,r.id,e.id,e.source_conversation_id,r.external_run_id,d.baselineRef,d.baselineDigest,d.baseCommit,d.manifestDigest,JSON.stringify(d.files),d.files.length,i),n.engine.appendEvent(e.id,{type:"candidate_manifest_recorded",attemptId:r.id,data:{manifest_id:l,external_run_id:r.external_run_id,baseline_ref:d.baselineRef,baseline_digest:d.baselineDigest,base_commit:d.baseCommit,manifest_digest:d.manifestDigest,file_count:d.files.length},now:i})}function Q(e,t,n,r){return`botmancers-finalize-v1-${j([e,t,n,r].join(":")).slice(0,48)}`}function ee(e,t){return{finalization_id:e.id,decision_event_id:e.decision_event_id,coordinator_agent_id:e.coordinator_agent_id,implementation_request_id:e.implementation_request_id,implementation_attempt_id:e.implementation_attempt_id,review_request_id:e.review_request_id,review_attempt_id:e.review_attempt_id,external_run_id:e.external_run_id,manifest_id:e.manifest_id,manifest_digest:t?.manifest_digest??null,baseline_digest:t?.baseline_digest??null,base_commit:t?.base_commit??null,file_count:t?.file_count??null}}let et=new Set(["BASE_MISMATCH","INDEX_DIRTY","BASELINE_MISMATCH","PATH_INVALID","PATH_UNEXPECTED","DIGEST_MISMATCH","IDEMPOTENCY_CONFLICT","GIT_LOCK_CONFLICT","REF_RACE","FINALIZATION_NOT_PREPARED","RUN_NOT_TERMINAL","FINALIZATION_INVALID","RUN_NOT_FOUND"]);function en(e,t,r,a){return n.engine.transaction(()=>{let i=n.default.prepare(`
|
|
21
|
-
UPDATE finalizations SET state = ?, reason_code = ?, reason = ?, commit_id = ?, tree_id = ?, parent_commit = ?,
|
|
22
|
-
result_manifest_digest = ?, file_count = ?, updated_at = ?, finished_at = ?
|
|
23
|
-
WHERE id = ? AND finished_at IS NULL
|
|
24
|
-
`).run(t,r.reasonCode??null,r.reason?.slice(0,300)??null,r.commit??null,r.tree??null,r.parent??null,r.manifestDigest??null,r.fileCount??null,a,a,e.id),o=V(e.id);if(1!==i.changes)return o;let s=n.default.prepare("SELECT * FROM candidate_manifests WHERE id = ?").get(e.manifest_id);return n.engine.appendEvent(e.implementation_request_id,{type:`finalization_${t}`,attemptId:e.implementation_attempt_id,data:{...ee(o,s),reason_code:o.reason_code,reason:o.reason,commit:o.commit_id,tree:o.tree_id,parent:o.parent_commit,result_manifest_digest:o.result_manifest_digest},now:a}),o})}function er(e,t=!1){if(!(e instanceof H.AgentDeckApiError))return{state:t?null:"failed",reasonCode:"finalization_failed",reason:"The finalization outcome is unknown; retrying with the same idempotency key is safe."};if("agent_deck_unreachable"===e.code||t&&"agent_deck_invalid_response"===e.code)return{state:null,reasonCode:e.code,reason:e.message};if("agent_deck_rejected"!==e.code)return{state:"failed",reasonCode:e.code,reason:e.message};let n=e.deckCode??"";return"FINALIZATION_CANCELED"===n?{state:"canceled",reasonCode:n.toLowerCase(),reason:e.message}:et.has(n)?{state:"blocked",reasonCode:n.toLowerCase(),reason:e.message}:t&&(!n||null!==e.status&&e.status>=500)?{state:null,reasonCode:n?n.toLowerCase():"finalization_failed",reason:"The finalization outcome is unknown; retrying with the same idempotency key is safe."}:{state:"failed",reasonCode:n?n.toLowerCase():"finalization_failed",reason:e.message}}function ea(e,t,r,a){return n.engine.appendEvent(e.implementation_request_id,{type:"finalization_retry_pending",attemptId:e.implementation_attempt_id,data:{finalization_id:e.id,external_run_id:e.external_run_id,reason_code:t,reason:r},now:a}),V(e.id)}async function ei(e){let t=V(e);if(!t||"preparing"!==t.state)return t;if(!(0,H.hasAgentDeckRunToken)())return en(t,"failed",{reasonCode:"agent_deck_token_missing",reason:H.AGENT_DECK_API_MESSAGES.agent_deck_token_missing},Date.now());let r=JSON.parse(t.request_body),a=n.default.prepare("SELECT * FROM candidate_manifests WHERE id = ?").get(t.manifest_id);if(null===t.submitted_at){try{var i,o;let e=await (0,H.getAgentDeckRunChanges)(t.external_run_id);if(e.manifestDigest!==a.manifest_digest||e.baselineDigest!==a.baseline_digest||e.baseCommit!==a.base_commit||(i=e.files,o=r.files,JSON.stringify(i)!==JSON.stringify(o)))return en(t,"blocked",{reasonCode:"manifest_changed",reason:`The workspace changed after review (candidate manifest ${e.manifestDigest}, reviewed ${a.manifest_digest}); nothing was committed.`},Date.now())}catch(n){let e=er(n);if(!e.state)return ea(t,e.reasonCode,e.reason,Date.now());return en(t,e.state,{reasonCode:e.reasonCode,reason:e.reason},Date.now())}n.default.prepare("UPDATE finalizations SET submitted_at = ?, updated_at = ? WHERE id = ? AND submitted_at IS NULL AND finished_at IS NULL").run(Date.now(),Date.now(),t.id),t=V(e)}try{let e=await (0,H.finalizeAgentDeckRun)(t.external_run_id,r,t.idempotency_key);if(e.manifestDigest!==a.manifest_digest||void 0!==e.fileCount&&e.fileCount!==a.file_count||void 0!==e.reviewId&&e.reviewId!==t.review_request_id||void 0!==e.parent&&e.parent!==a.base_commit)return en(t,"failed",{reasonCode:"agent_deck_invalid_response",reason:"Agent Deck returned commit evidence that does not match the persisted finalization request."},Date.now());return en(t,"committed",{commit:e.commit,tree:e.tree,parent:e.parent??a.base_commit,manifestDigest:e.manifestDigest,fileCount:e.fileCount??a.file_count},Date.now())}catch(n){let e=er(n,!0);if(!e.state)return ea(t,e.reasonCode,e.reason,Date.now());return en(t,e.state,{reasonCode:e.reasonCode,reason:e.reason},Date.now())}}function eo(){return n.default.prepare("SELECT id FROM finalizations WHERE state = 'preparing' ORDER BY created_at ASC, id ASC").all().map(e=>e.id)}(0,y.wakeSafetyLimits)().maxContinuations;let es={kind:"service",id:"botmancers-engine"},ed="Botmancers";function el(e){try{let t=JSON.parse(e.policy_snapshot);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function eu(e){return n.bots.getById(e)?.name??`agent:${e}`}function ec(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 r=n.default.prepare("SELECT * FROM messages WHERE id = ?").get(t);return r&&"bot"===r.sender_type&&r.sender_id===e.target_agent_id?r:null}function e_(e,t=!1){let r=n.engine.listAttempts(e.id),a=r.length>0?r[r.length-1]:null,i=[`Work Request: ${e.id}`,...a?[`Attempt: ${a.id}`]:[],`Agent: ${eu(e.target_agent_id)}`,`Execution kind: ${e.execution_kind}`,`State: ${e.state}`],o=ec(e);if(o){var s;i.push(t?`Result: the ${eu(e.target_agent_id)} reply above.`:`Result:
|
|
25
|
-
${(s=o.content).length>8e3?`${s.slice(0,8e3)}
|
|
26
|
-
[truncated]`:s}`)}else"failed"===e.state||"cancelled"===e.state?i.push(`Failure: ${e.error_code??e.state}${e.error_message?` - ${e.error_message}`:""}`):null===e.terminal_at&&i.push("Result: not finished yet.");let d=function(e){if(!K.includes(e.execution_kind))return null;let t=G(e.id);if(!t)return null;let r=J(t.id);if(r){let e=Y(r),t=e.slice(0,50).map(e=>`- ${e.path} ${e.sha256?`sha256=${e.sha256} mode=${e.mode}`:"deleted"}`);return e.length>50&&t.push(`- ... ${e.length-50} more`),[`Candidate manifest: ${r.manifest_digest} (${e.length} ${1===e.length?"file":"files"}, base commit ${r.base_commit}, baseline ${r.baseline_digest})`,...t].join("\n")}let a=n.default.prepare("SELECT data FROM engine_events WHERE request_id = ? AND attempt_id = ? AND type = 'candidate_manifest_unavailable' ORDER BY sequence DESC LIMIT 1").get(e.id,t.id);if(a){let e=JSON.parse(a.data);return`Candidate manifest: unavailable (${e.reason_code??"unknown"}); this work cannot be finalized.`}return null}(e);return d&&i.push(d),i.join("\n")}let ep='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.',ef=n.default.prepare("SELECT * FROM work_requests WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?");function eg(e){let t=ef.get(es.kind,es.id,e.key);if(t)return t;if(!n.bots.getById(e.coordinatorId)||!n.default.prepare("SELECT 1 FROM conversations WHERE id = ?").get(e.conversationId))return null;let r=n.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,es.kind,es.id),a=(0,y.wakeSafetyLimits)().maxContinuations;if(r.n>=a)return n.default.prepare("SELECT 1 FROM engine_events WHERE request_id = ? AND type = 'lineage_stopped'").get(e.parent.id)||n.engine.appendEvent(e.parent.id,{type:"lineage_stopped",data:{reason:"continuation_budget_exhausted",limit:a,observed:r.n,continues:e.continues,coordinator_agent_id:e.coordinatorId},now:e.now}),null;let i=(0,s.selectExecutionPolicy)({entryPoint:"continuation",executionKind:"conversation"});if(!i.ok)return null;let o="result"===e.continues?Math.max(e.parent.wake_depth-1,0):e.parent.wake_depth,d={safety_version:y.WAKE_SAFETY_VERSION,root_principal:{kind:e.parent.root_principal_kind??"unknown",id:e.parent.root_principal_id??"unknown"},wake_depth:o,grant_rule:"readonly_default",grant_id:null,continuations:{used:r.n+1,limit:a}};return n.engine.createOrGetWorkRequest({sourceConversationId:e.conversationId,sourceEventId:e.sourceEventId,requester:es,targetAgentId:e.coordinatorId,intent:e.intent,executionKind:i.policy.execution_kind,toolProfile:i.policy.tool_profile,idempotencyKey:e.key,parentRequestId:e.parent.id,policy:{source:"coordinator_continuation",continues:e.continues,work_requests:e.subjects},executionPolicy:i.policy,wakeDepth:o,safetySnapshot:d,safety:{principalType:"engine",principal:es,decision:"allowed",grantRule:"readonly_default",snapshot:d,now:e.now},now:e.now}).request}let em=n.default.prepare("SELECT 1 FROM terminal_followups WHERE request_id = ? AND done_at IS NULL"),eh=n.default.prepare("UPDATE terminal_followups SET done_at = ? WHERE request_id = ? AND done_at IS NULL");function ek(e,r=Date.now()){return n.engine.transaction(()=>{var a;if(!em.get(e))return[];let i=n.engine.getWorkRequest(e);if(!i||null===i.terminal_at||null!==i.legacy_agent_request_id)return[];eh.run(r,e);let o=[],s=e=>{e&&"queued"===e.state&&o.push(e.id)},d=ec(i);if(d){let e,a,o=[],l=null;try{o=L({sourceEventId:d.id,parentRequestId:i.id,now:r})}catch(e){if(!(e instanceof E))throw e;console.error(`Wakes of ${d.id} could not be routed:`,e.message),l=e}for(let e of o)s(e.request);let u=(function(e,r,a=Date.now()){let i=[...e.content.matchAll(z)].map((e,t)=>{let n;try{n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return{ok:!1,reason:"decision must be a JSON object"};let t=Object.keys(e).filter(e=>!U.has(e));if(t.length>0)return{ok:!1,reason:`unknown field ${t.join(", ")} (the manifest is never supplied in a decision)`};if(1!==e.version)return{ok:!1,reason:"version must be 1"};if("accept"!==e.decision&&"reject"!==e.decision)return{ok:!1,reason:'decision must be "accept" or "reject"'};if(!P(e.implementationAttemptId))return{ok:!1,reason:"implementationAttemptId must name an Attempt"};if(!P(e.reviewAttemptId))return{ok:!1,reason:"reviewAttemptId must name an Attempt"};let n={version:1,decision:e.decision,implementationAttemptId:e.implementationAttemptId.trim(),reviewAttemptId:e.reviewAttemptId.trim()};if(void 0!==e.commitMessage){if("string"!=typeof e.commitMessage||0===e.commitMessage.trim().length||e.commitMessage.length>2e3||e.commitMessage.includes("\0"))return{ok:!1,reason:"commitMessage must be non-empty text (max 2000 characters)"};n.commitMessage=e.commitMessage.trim()}return{ok:!0,decision:n}}(JSON.parse(e[1]))}catch{n={ok:!1,reason:"block is not valid JSON"}}return{position:t,validation:n}});return 0===i.length?[]:n.engine.transaction(()=>i.map(i=>{let o={position:i.position,finalizationId:null,reasonCode:null,reason:null,implementationRequestId:null,reviewRequestId:null},s=(t,s)=>(n.engine.appendEvent(r.id,{type:"finalization_rejected",data:{decision_event_id:e.id,position:i.position,reason_code:t,reason:s,implementation_request_id:o.implementationRequestId,review_request_id:o.reviewRequestId},now:a}),{...o,reasonCode:t,reason:s});if(!i.validation.ok)return s("invalid_decision",i.validation.reason);let d=i.validation.decision,l=n.engine.getAttempt(d.implementationAttemptId),u=n.engine.getAttempt(d.reviewAttemptId);if(o.implementationRequestId=l?.request_id??null,o.reviewRequestId=u?.request_id??null,"reject"===d.decision)return s("review_rejected","The coordinator rejected the review; nothing was finalized.");let c=function(e,t,r){let a=t.target_agent_id,i=(e,t)=>({ok:!1,code:e,reason:t}),o=n.engine.getAttempt(e.implementationAttemptId),s=o?n.engine.getWorkRequest(o.request_id):void 0;if(!s||!K.includes(s.execution_kind))return i("invalid_implementation",`Attempt ${e.implementationAttemptId} is not an implementation or revision Attempt.`);let d=n.engine.getAttempt(e.reviewAttemptId),l=d?n.engine.getWorkRequest(d.request_id):void 0;if(!l||"review"!==l.execution_kind||"readonly"!==l.tool_profile)return i("invalid_review",`Attempt ${e.reviewAttemptId} is not a readonly review Attempt.`);if(s.source_conversation_id!==r||l.source_conversation_id!==r)return i("cross_conversation","The implementation and review must belong to this conversation.");for(let e of[s,l])if(e.root_request_id!==t.root_request_id||function(e){if(!e.wake_event_id)return null;let t=B(e).return_to;return t&&"string"==typeof t.agent_id?t.agent_id:null}(e)!==a)return i("lineage_mismatch",`Work Request ${e.id} was not woken by this coordinator in this lineage.`);if("completed"!==s.state)return i("implementation_not_completed",`Implementation ${s.id} is ${s.state}, not completed.`);let u=G(s.id);if(!u||u.id!==o?.id||"succeeded"!==u.outcome)return i("implementation_not_completed",`Implementation ${s.id} has no successful Attempt.`);let c=J(u.id);if(!c)return i("not_finalizable",`Implementation ${s.id} has no candidate manifest to finalize.`);let _=B(l).context_work_requests;if(!Array.isArray(_)||!_.includes(s.id))return i("review_not_linked",`Review ${l.id} does not reference implementation ${s.id}.`);if(l.target_agent_id===s.target_agent_id)return i("reviewer_not_independent","The reviewer did the work under review.");let p=G(l.id);if("completed"!==l.state||!p||p.id!==d?.id||"succeeded"!==p.outcome)return i("review_not_completed",`Review ${l.id} did not complete.`);if(l.created_at<=c.created_at)return i("stale_manifest",`Review ${l.id} was requested before the candidate manifest was recorded.`);let f=n.default.prepare(`
|
|
27
|
-
SELECT candidate.id FROM work_requests candidate
|
|
28
|
-
WHERE root_request_id = ? AND target_agent_id = ? AND execution_kind IN ('implementation', 'revision')
|
|
29
|
-
AND id <> ? AND (
|
|
30
|
-
created_at > ? OR (created_at = ? AND candidate.rowid > (SELECT rowid FROM work_requests WHERE id = ?))
|
|
31
|
-
) LIMIT 1
|
|
32
|
-
`).get(s.root_request_id,s.target_agent_id,s.id,s.created_at,s.created_at,s.id);if(f)return i("stale_manifest",`A later edit (${f.id}) replaced the manifest of ${s.id}.`);let g=n.default.prepare("SELECT id FROM finalizations WHERE implementation_attempt_id = ? AND state IN ('preparing', 'committed') LIMIT 1").get(u.id);return{ok:!0,chain:{implementation:s,implementationAttempt:u,review:l,reviewAttempt:p,manifest:c},existing:g?.id??null}}(d,r,e.conversation_id);if(!c.ok)return s(c.code,c.reason);let _=Q(e.id,c.chain.implementationAttempt.id,c.chain.reviewAttempt.id,c.chain.manifest.manifest_digest),p=n.default.prepare("SELECT id FROM finalizations WHERE idempotency_key = ?").get(_);if(c.existing&&!p)return s("already_finalized",`Implementation ${c.chain.implementation.id} already has a finalization (${c.existing}).`);let{row:f}=function(e,r,a,i,o){var s,d;let l,u,c=Q(i.id,e.implementationAttempt.id,e.reviewAttempt.id,e.manifest.manifest_digest),_=n.default.prepare("SELECT * FROM finalizations WHERE idempotency_key = ?").get(c);if(_)return{row:_,created:!1};let p=JSON.stringify({baselineDigest:e.manifest.baseline_digest,expectedBaseCommit:e.manifest.base_commit,reviewId:e.review.id,commitMessage:(s=e.implementation,d=e.review,l=r.commitMessage??`Botmancers: ${(s.intent.split("\n").find(e=>e.trim())??"reviewed change").trim().slice(0,60)}`,u=`
|
|
33
|
-
|
|
34
|
-
Botmancers-Work-Request: ${s.id}
|
|
35
|
-
Botmancers-Review: ${d.id}`,`${l.slice(0,4e3-u.length)}${u}`),files:Y(e.manifest)}),f=(0,t.randomUUID)();n.default.prepare(`
|
|
36
|
-
INSERT INTO finalizations (
|
|
37
|
-
id, idempotency_key, conversation_id, decision_event_id, decision_request_id, coordinator_agent_id,
|
|
38
|
-
implementation_request_id, implementation_attempt_id, review_request_id, review_attempt_id,
|
|
39
|
-
manifest_id, external_run_id, request_body, request_hash, state, created_at, updated_at
|
|
40
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'preparing', ?, ?)
|
|
41
|
-
`).run(f,c,i.conversation_id,i.id,a.id,a.target_agent_id,e.implementation.id,e.implementationAttempt.id,e.review.id,e.reviewAttempt.id,e.manifest.id,e.manifest.external_run_id,p,j(p),o,o);let g=V(f);return n.engine.appendEvent(e.implementation.id,{type:"finalization_preparing",attemptId:e.implementationAttempt.id,data:ee(g,e.manifest),now:o}),{row:g,created:!0}}(c.chain,d,r,e,a);return{...o,finalizationId:f.id}}))})(d,i,r).filter(e=>null!==e.reasonCode&&"review_rejected"!==e.reasonCode);u.length>0&&s(eg({key:`continuation:v1:finalize-decision:${d.id}`,coordinatorId:i.target_agent_id,conversationId:d.conversation_id,sourceEventId:d.id,parent:i,intent:(e=u.map(e=>`- Decision ${e.position+1}: ${e.reasonCode} - ${e.reason}`),[`[Finalization not started] ${1===u.length?"One finalization decision":`${u.length} finalization decisions`} from your last message committed nothing:`,e.join("\n"),ep].join("\n\n")),continues:"finalize_decision",subjects:u.flatMap(e=>e.implementationRequestId?[e.implementationRequestId]:[]),now:r}));let c=o.filter(e=>"rejected"===e.wake.status||"unavailable"===e.wake.status);(l||c.length>0)&&s(eg({key:`continuation:v1:wakes:${d.id}`,coordinatorId:i.target_agent_id,conversationId:d.conversation_id,sourceEventId:d.id,parent:i,intent:l?["[Wake not started] The Wakes in your last message could not be routed, so no work started:",l.message,ep].join("\n\n"):(a=c.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===c.length?"One Wake":`${c.length} Wakes`} from your last message did not start any work:`,a.join("\n"),ep].join("\n\n")),continues:"wake_outcome",subjects:c.flatMap(e=>e.wake.work_request_id?[e.wake.work_request_id]:[]),now:r}))}let l=function(e){if(!e.wake_event_id)return null;let t=el(e).return_to;return t&&"string"==typeof t.agent_id&&"string"==typeof t.conversation_id?{agentId:t.agent_id,conversationId:t.conversation_id}:null}(i);return l&&s(eg({key:`continuation:v1:result:${i.id}`,coordinatorId:l.agentId,conversationId:l.conversationId,sourceEventId:d?.id??i.source_event_id,parent:i,intent:(a=d?.conversation_id===l.conversationId,[`[Work Request result] ${eu(i.target_agent_id)} finished the ${i.execution_kind} you requested.`,e_(i,a),..."review"===i.execution_kind&&"completed"===i.state?['If this review satisfies you and the implementation has a candidate manifest, you may commit it by emitting a botmancers-finalize block: {"version": 1, "decision": "accept", "implementationAttemptId": "<id>", "reviewAttemptId": "<id>", "commitMessage": "<optional>"}, or "decision": "reject". Botmancers commits exactly the reviewed manifest; never list files or digests.']:[],ep].join("\n\n")),continues:"result",subjects:[i.id],now:r})),o})}let ew=["person","bot","service"],ey={authentication_unavailable:503,unauthenticated:401,principal_mismatch:403,invalid_request:400,agent_not_found:404,conversation_not_found:404,conversation_not_writable:409,request_not_found:404,idempotency_conflict:409,internal_error:500};class eE extends Error{code;constructor(e,t){super(t),this.name="AgentApiError",this.code=e}get status(){return ey[this.code]}}function ev(e){return"string"==typeof e&&ew.includes(e)}function eI(e){return"string"==typeof e&&e.trim().length>0}function eR(e,t){return!!n.default.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(e,t.kind,t.id)}function eq(e){switch(e){case"running":case"waiting":return"dispatched";case"completed":return"completed";case"failed":case"cancelled":return"failed";default:return"accepted"}}function eb(e){if(!ev(e.kind)||!eI(e.id)||"bot"===e.kind&&!n.bots.getById(e.id))throw new eE("unauthenticated","Authentication failed.")}let eA={invalid_request:"invalid_request",conversation_not_found:"conversation_not_found",conversation_not_writable:"conversation_not_writable",target_not_found:"agent_not_found",idempotency_conflict:"idempotency_conflict",unknown_principal:"unauthenticated",intake_failed:"internal_error"};function eS(e){return Promise.all(e.requestIds.map(eJ)).then(()=>void 0)}function ex(e,t,r,a){n.engine.transaction(()=>{t&&n.engine.finishAttempt(t,{outcome:"failed",errorCategory:r,errorMessage:a});let i=n.engine.getWorkRequest(e);i&&("queued"===i.state||"running"===i.state)&&n.engine.transitionWorkRequest(e,{from:i.state,to:"failed",errorCode:r,errorMessage:a})})}let eT=(0,o.createDispatcher)(n.default,n.engine);class eD extends Error{reason;constructor(e){super(`Commit deferred: ${e}`),this.reason=e}}async function eN(e){let t=await eW(e);eC(e,t||n.engine.getWorkRequest(e)?.state!=="queued")}function eC(e,t){for(let t of ek(e))eJ(t);for(let e of eo())eV.has(e)||eY(e);t&&eO()}function eO(){for(let e of eT.deferredRequestIds())eG.has(e)||eJ(e)}async function eW(e){let t,d,l=n.engine.getWorkRequest(e);if(!l||"queued"!==l.state||null!==l.next_eligible_at&&eT.now()<l.next_eligible_at)return!1;let u=n.bots.getById(l.target_agent_id);if(!u)return ex(e,null,"agent_unavailable","The agent is no longer registered."),!1;let c=(0,s.authorizeWorkRequest)(l);if(!c.ok){try{n.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:l.version,reason:"policy_rejected",errorCode:c.code,errorMessage:c.reason})}catch(e){if(!(e instanceof i.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let _=c.policy,p=(0,r.agentForDispatch)(u),f=function(e,t){if("revision"!==e.execution_kind)return{ok:!0,binding:null};let r=el(e).resume_work_request,a="string"==typeof r?n.engine.getWorkRequest(r):void 0;if(!a||a.root_request_id!==e.root_request_id||a.target_agent_id!==e.target_agent_id||!["implementation","revision"].includes(a.execution_kind))return{ok:!1,reason:"The revision does not reference an implementation of this Agent in this lineage."};let i=n.engine.getActiveSessionBinding({agentId:e.target_agent_id,adapter:t,conversationId:a.source_conversation_id,requestId:a.id});return i?{ok:!0,binding:i}:{ok:!1,reason:"The session of the referenced implementation is not available to resume."}}(l,p);if(!f.ok){try{n.engine.transitionWorkRequest(e,{from:"queued",to:"failed",expectedVersion:l.version,reason:"session_unavailable",errorCode:"session_unavailable",errorMessage:f.reason})}catch(e){if(!(e instanceof i.EngineStoreError&&"stale_state"===e.code))throw e}return!1}let g=null,m=null;try{g=(0,r.prepareDispatch)({bot:u,history:[...n.default.prepare(`SELECT * FROM messages WHERE conversation_id = ?
|
|
42
|
-
AND rowid <= (SELECT rowid FROM messages WHERE id = ?)
|
|
43
|
-
ORDER BY rowid ASC`).all(l.source_conversation_id,l.source_event_id).map(e=>({speakerLabel:function(e){if("bot"===e.sender_kind&&e.sender_id){let t=n.bots.getById(e.sender_id);return t?t.name:`bot:${e.sender_id}`}return`${e.sender_kind??"person"}:${e.sender_id??"unknown"}`}(e),fromAgent:"bot"===e.sender_kind&&e.sender_id===u.id,content:e.content})),...function(e){if(e.requester_kind===es.kind&&e.requester_id===es.id&&"coordinator_continuation"===el(e).source)return[{speakerLabel:ed,fromAgent:!1,content:e.intent}];if(!e.wake_event_id)return[];let t=el(e),r=Array.isArray(t.context_work_requests)?t.context_work_requests.filter(e=>"string"==typeof e):[],a=[`[${e.execution_kind} Wake from ${eu(e.requester_id)}] Work Request: ${e.id}`,`Objective:
|
|
44
|
-
${e.intent}`];for(let i of("string"==typeof t.resume_work_request&&a.push(`This revision continues your session from Work Request ${t.resume_work_request}.`),r)){let t=n.engine.getWorkRequest(i);t&&t.root_request_id===e.root_request_id&&a.push(`Context:
|
|
45
|
-
${e_(t)}`)}return[{speakerLabel:ed,fromAgent:!1,content:a.join("\n\n")}]}(l)],toolProfile:_.tool_profile,sessionBinding:f.binding?{bindingId:f.binding.id,externalSessionId:f.binding.external_session_id}:null,prepareFinalization:"implementation"===_.execution_kind||"revision"===_.execution_kind})}catch(e){m=e instanceof r.DispatchFailure?e:new r.DispatchFailure("runtime_failed","The agent runtime did not complete the turn.")}let h={agent:p,agent_id:u.id,execution_kind:_.execution_kind,tool_profile:_.tool_profile,policy_rule:_.rule},k=new AbortController;try{t=n.engine.transaction(()=>{let t=eT.claim(e,{expectedVersion:l.version,data:{agent:p}});if(!t.ok)return d=t.blockedBy,null;if(g){let r=eT.now(),i=eT.control.attemptDeadlineFor(t.request,r),o={...g.input,deadlineAt:i,signal:k.signal},s=(0,a.beginAttempt)(n.engine,e,{agent:p,adapter:g.adapter,input:o,snapshot:h,now:r});return eT.recordLaunchIntent(t.lease,s.attempt.id,g.adapter.name,g.adapter.launchIntent?.(s.input)??null),{lease:t.lease,attempt:s}}return{lease:t.lease,attempt:n.engine.createAttempt(e,{kind:"launch",adapter:p,toolProfile:_.tool_profile,launchSnapshot:h}).id}})}catch(e){if(e instanceof i.EngineStoreError&&"stale_state"===e.code)return!1;throw e}if(!t)return d&&eJ(d),!1;let{lease:w}=t;if(!g||"string"==typeof t.attempt){let a=m??new r.DispatchFailure("runtime_failed","The agent runtime did not complete the turn."),i="string"==typeof t.attempt?t.attempt:t.attempt.attempt.id;return n.engine.transaction(()=>{eT.assertHeld(w),ex(e,i,a.code,a.message),eT.release(w,"failed")}),!0}let y=t.attempt.attempt.id;return eL.set(e,{attemptId:y,controller:k}),await eU(w,async()=>{(0,o.dispatchFault)("before_launch",e);try{let r=await (0,a.runAttempt)(n.engine,t.attempt,g.adapter,{fence:()=>eT.holds(w),onEvent:t=>{"started"===t.type&&(0,o.dispatchFault)("after_run_id_persisted",e),eH(w,y,t)},project:(e,t)=>ez(w,l,t,e)});r.abandoned&&await eF(r.abandoned,{localSignalled:!0,launched:!0}),r.projected?.retryAt!=null&&eM(e,r.projected.retryAt)}catch(e){eP(w,y,e)}},k),eL.get(e)?.attemptId===y&&eL.delete(e),!0}let eL=new Map;function eM(e,t){let n=setTimeout(()=>{eJ(e)},Math.max(0,t-eT.now()));n.unref&&n.unref()}async function e$(e){let t=eL.get(e.requestId);if(t&&t.attemptId===e.attemptId){t.controller.abort();let n=eG.get(e.requestId);if(n){let t=`abandoned:${e.attemptId}`;eG.delete(e.requestId),eG.set(t,n),n.finally(()=>{eG.get(t)===n&&eG.delete(t)})}}await eF(e,{localSignalled:!!t&&t.attemptId===e.attemptId,launched:e.launched})}async function eF(e,t){let a,i=e.transport?(0,r.adapterForTransport)(e.transport)?.reconciler??null:null;a="failed"===e.externalCancel?"failed":e.externalRunId?i?.cancel?await i.cancel(e.externalRunId):"unsupported":t.launched?"unsupported":"not_launched",n.engine.appendEvent(e.requestId,{type:"external_cancel",attemptId:e.attemptId,data:{status:a,reason:e.reason,external_run_id:e.externalRunId,transport:e.transport,local_signalled:t.localSignalled},now:eT.now()})}function eH(e,t,r){if("progress"===r.type&&"finalization_prepared"===r.detail.phase&&"string"==typeof r.detail.baseline_ref&&"string"==typeof r.detail.baseline_digest){let a={baselineRef:r.detail.baseline_ref,baselineDigest:r.detail.baseline_digest};n.engine.transaction(()=>{eT.holds(e)&&X(t,a,r.at)})}}async function eU(e,t,r){let a=setInterval(()=>{try{eT.heartbeat(e);let t=n.engine.getWorkRequest(e.requestId);r&&t&&(null!==t.cancel_requested_at||i.TERMINAL_STATES.includes(t.state))&&r.abort()}catch(e){console.error("Dispatch heartbeat failed:",e)}},eT.config.heartbeatMs);a.unref&&a.unref();try{return await t()}finally{clearInterval(a)}}function eP(e,t,n){if(!(n instanceof o.LeaseLostError)){if(n instanceof eD){try{eT.defer(e,n.reason,t)}catch(e){if(!(e instanceof o.LeaseLostError))throw e}return}throw n}}function ez(e,i,s,d){if((0,o.dispatchFault)("before_terminal_commit",i.id),eT.assertHeld(e),"failed"===d.status&&d.failure?.code==="agent_deck_unreachable"&&s.external_run_id)throw new eD("unreachable");if("failed"===d.status&&d.launchUnconfirmed&&!s.external_run_id)throw new eD("launch_unconfirmed");let l=i.id,u=eT.now();Z(i,s,d,u);let c=n.engine.getWorkRequest(l)??i,_=null!==c.cancel_requested_at;if(_||null!==c.deadline_at&&u>=c.deadline_at)return _?n.engine.transitionWorkRequest(l,{from:"running",to:"cancelled",reason:"cancel_requested",errorCode:"cancelled",errorMessage:c.cancel_reason??"The request was cancelled.",data:{attempt_outcome:s.outcome},now:u}):n.engine.transitionWorkRequest(l,{from:"running",to:"failed",reason:"timed_out",errorCode:"timed_out",errorMessage:"The request passed its deadline.",data:{deadline_at:c.deadline_at,attempt_outcome:s.outcome},now:u}),"completed"===d.status&&(0,a.recordLateResult)(n.engine,s,d,u),eT.release(e,_?"cancelled":"timed_out"),{retryAt:null};if("completed"!==d.status||null===d.output){let t=(0,r.dispatchFailureFor)(d),n=eT.control.settleFailure(l,{category:"completed"===d.status?"result_contract":d.failure?.category??"runtime_failed",code:d.failure?.code??null,errorCode:t.code,errorMessage:t.message,..."failed"===d.externalCancel?{attention:"external_cancel_failed"}:{}},u);return eT.release(e,n.outcome),{retryAt:"retry"===n.decision.action?n.decision.nextEligibleAt:null}}let p=(0,t.randomUUID)();return n.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, request_id, content, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(p,i.source_conversation_id,"bot",i.target_agent_id,"bot",l,d.output,u),"edit"===i.tool_profile&&d.externalSessionId&&n.engine.bindSession({agentId:i.target_agent_id,adapter:s.adapter,externalSessionId:d.externalSessionId,conversationId:i.source_conversation_id,requestId:l,sourceAttemptId:s.id,now:u}),n.engine.transitionWorkRequest(l,{from:"running",to:"completed",result:{reply_message_id:p},now:u}),eT.release(e,"completed"),{retryAt:null}}function ej(e){return e?{kind:e.kind,..."run"===e.kind?{state:e.state}:{},..."accepted"===e.kind?{run_id:e.runId}:{},..."rejected"===e.kind?{status:e.status,code:e.code}:{}}:null}async function eB(e){let t=n.engine.getWorkRequest(e.requestId);if(!t||"running"!==t.state)return void eT.release(e,"stale");let i=async(r,a)=>{let i=n.engine.transaction(()=>{eT.assertHeld(e);let n=eT.control.enforceRequest(t.id,eT.now(),{force:!0});return n?(a?.(),{enforced:n}):{value:r()}});return"enforced"in i?(i.enforced.abandoned&&await e$(i.enforced.abandoned),{won:!0}):{won:!1,value:i.value}},s=null;try{let p;if((await i(()=>void 0)).won)return;let f=n.engine.listAttempts(t.id).find(e=>null===e.finished_at);if(!f)return void n.engine.transaction(()=>{eT.assertHeld(e),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"interrupted",errorMessage:"The request was interrupted before its Attempt was recorded."}),eT.release(e,"interrupted")});s=f.id;let g={};try{g=JSON.parse(f.launch_snapshot)}catch{}let m="string"==typeof g.transport?(0,r.adapterForTransport)(g.transport):null,h=m?.reconciler??null,k=async(e,r,a,o)=>!(await i(()=>{n.engine.appendEvent(t.id,{type:"reconcile_decided",attemptId:f.id,data:{phase:e,...r,external_run_id:o,observation:ej(a)}})})).won,w=f.external_run_id,y=null;if(w){if(h){if(y=await h.inspect(w),p=(0,o.decideWithRunId)(y),!await k("run",p,y,w))return}else if(p={action:"interrupted",reason:"runtime_unobservable"},!await k("run",p,null,w))return}else{let r=eT.launchIntent(f.id);if(p=(0,o.decideWithoutRunId)({reconcilable:!!h,intent:r,currentGrantFingerprint:h?.currentGrantFingerprint()??null}),"repost"===p.action&&h&&r?.body&&r.idempotency_key){if(!await k("launch",p,null,null))return;if(y=await h.repost({idempotencyKey:r.idempotency_key,body:r.body}),p=(0,o.decideRepostResult)(y),"accepted"===y.kind){var d,l,u,c,_;let r=y.runId,a=(d=e,l=t.id,u=f.id,c=r,_=m?.name??null,n.engine.transaction(()=>{let e=n.engine.getAttempt(u);if(!e)return null;if(null===e.finished_at)return eT.assertHeld(d),n.engine.recordAttemptExternalIds(u,{externalRunId:c}),n.engine.appendEvent(l,{type:"runtime_started",attemptId:u,data:{adapter:_,external_run_id:c,recovered:!0}}),null;n.default.prepare("UPDATE work_attempts SET external_run_id = ? WHERE id = ? AND external_run_id IS NULL").run(c,u),n.engine.appendEvent(l,{type:"runtime_started",attemptId:u,data:{adapter:_,external_run_id:c,recovered:!0,after_abandon:!0}});let t="timed_out"===e.outcome?"timed_out":"cancelled"===e.outcome?"cancelled":"retried",r=null;try{let t=JSON.parse(e.launch_snapshot);r="string"==typeof t.transport?t.transport:null}catch{}return{requestId:l,attemptId:u,externalRunId:c,transport:r,reason:t,launched:!0}}));if(a)return void await eF(a,{localSignalled:!1,launched:!0});w=r}}if(!await k("launch",p,y,w))return}let E=!0===g.prepare_finalization;switch(p.action){case"defer":await i(()=>eT.defer(e,p.reason,f.id));return;case"attention":await i(()=>eT.setAttention(e,{attemptId:f.id,reason:p.reason,detail:y?JSON.stringify(ej(y)):null}));return;case"interrupted_attention":{let r=E&&h&&w?await h.evidence(w):null,a=e=>{r&&e&&Z(t,e,{finalization:r})};await i(()=>{a(n.engine.finishAttempt(f.id,{outcome:"interrupted",errorCategory:"interrupted",errorMessage:`Agent Deck run ${w} died.`})),eT.setAttention(e,{attemptId:f.id,reason:p.reason})},()=>a(n.engine.getAttempt(f.id)));return}case"fail":await i(()=>{n.engine.finishAttempt(f.id,{outcome:"failed",errorCategory:p.category,errorMessage:`Agent Deck refused the launch (${p.code}).`}),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"runtime_failed",errorMessage:"The agent runtime did not start the turn."}),eT.release(e,"failed")});return;case"interrupted":await i(()=>{n.engine.finishAttempt(f.id,{outcome:"interrupted",errorCategory:"interrupted",errorMessage:"The runtime cannot be observed after a restart; the outcome is unknown."}),n.engine.transitionWorkRequest(t.id,{from:"running",to:"failed",reason:"retryable",errorCode:"interrupted",errorMessage:"The agent turn was interrupted by a restart. It was not relaunched."}),eT.release(e,"interrupted")});return}if(!h||!w)return;let v=w,I="string"==typeof g.session_binding_id?g.session_binding_id:null,R=I?n.default.prepare("SELECT external_session_id FROM session_bindings WHERE id = ?").get(I):void 0,q=new AbortController;if((await i(()=>eL.set(t.id,{attemptId:f.id,controller:q}))).won)return;await eU(e,async()=>{let r=await h.follow(v,{resumeSessionId:R?.external_session_id??null,prepareFinalization:E,deadlineAt:"number"==typeof g.deadline_at?g.deadline_at:null,signal:q.signal},t=>eH(e,f.id,t)),i=null,o=n.engine.transaction(()=>{let o=n.engine.getAttempt(f.id);if(o&&null!==o.finished_at)return(0,a.recordLateResult)(n.engine,o,r,eT.now()),{retryAt:null};if(eT.assertHeld(e),"failed"===r.status&&r.failure?.code==="agent_deck_unreachable")throw new eD("unreachable");let s=(i=m?(0,a.abandonedLocally)(f,m,q.signal,r):null)?(0,a.recordAbandonedResult)(n.engine,i,r):(0,a.recordAttemptResult)(n.engine,f.id,r);return ez(e,t,s,r)});i&&await eF(i,{localSignalled:!0,launched:!0}),null!==o.retryAt&&eM(t.id,o.retryAt)},q).finally(()=>{eL.get(t.id)?.attemptId===f.id&&eL.delete(t.id)})}catch(t){eP(e,s,t)}}function eK(){let e=[];for(let t of eT.control.enforceDue())e.push((t.abandoned?e$(t.abandoned):Promise.resolve()).then(()=>eC(t.requestId,!0)).catch(e=>{console.error("Request enforcement follow-up failed:",e)}));for(let t of eT.recoverable()){let n=`reconcile:${t.requestId}`;if(eG.has(n)||eG.has(t.requestId))continue;let r=eT.takeOver(t);if(!r)continue;let a=eB(r).then(()=>eC(t.requestId,!eT.holds(r))).catch(e=>{console.error("Dispatch reconciliation failed unexpectedly:",e)}).finally(()=>{eG.delete(n)});eG.set(n,a),e.push(a)}for(let e of(eO(),n.default.prepare(`
|
|
46
|
-
SELECT id FROM work_requests
|
|
47
|
-
WHERE state = 'queued' AND legacy_agent_request_id IS NULL AND executor = 'dispatcher' AND next_eligible_at IS NOT NULL AND next_eligible_at <= ?
|
|
48
|
-
ORDER BY next_eligible_at ASC, id ASC
|
|
49
|
-
`).all(eT.now()).map(e=>e.id)))eG.has(e)||eJ(e);return Promise.all(e).then(()=>void 0)}let eG=new Map;function eJ(e){let t=eG.get(e);if(t)return t;let n=eN(e).catch(e=>{console.error("Agent dispatch failed unexpectedly:",e)}).finally(()=>{eG.get(e)===n&&eG.delete(e)});return eG.set(e,n),n}let eV=new Set;function eY(e){let t=`finalization:${e}`,r=eG.get(t);if(r)return r;eV.add(e);let a=ei(e).then(e=>{if(e&&"preparing"!==e.state)for(let t of function(e,t=Date.now()){return n.engine.transaction(()=>{let r,a=V(e);if(!a||"preparing"===a.state)return[];let i=n.engine.getWorkRequest(a.decision_request_id);if(!i)return[];let o=eg({key:`continuation:v1:finalization:${a.id}`,coordinatorId:a.coordinator_agent_id,conversationId:a.conversation_id,sourceEventId:a.decision_event_id,parent:i,intent:["committed"===a.state?"[Finalization committed] The reviewed manifest was committed.":`[Finalization ${a.state}] The reviewed manifest was not committed.`,(r=[`Finalization: ${a.id}`,`Implementation: ${a.implementation_request_id}`,`Review: ${a.review_request_id}`,`State: ${a.state}`],"committed"===a.state?r.push(`Commit: ${a.commit_id}`,`Tree: ${a.tree_id}`,`Manifest: ${a.result_manifest_digest}`,`Files: ${a.file_count}`):a.reason_code&&r.push(`Reason: ${a.reason_code}${a.reason?` - ${a.reason}`:""}`),r.join("\n")),ep].join("\n\n"),continues:"finalization",subjects:[a.implementation_request_id,a.review_request_id],now:t});return o&&"queued"===o.state?[o.id]:[]})}(e.id))eJ(t)}).catch(e=>{console.error("Finalization failed unexpectedly:",e instanceof Error?e.message:"unknown error")}).finally(()=>{eG.delete(t)});return eG.set(t,a),a}let eX=["attempt_started","attempt_finished","session_bound","backfilled","runtime_progress","policy_selected","dispatch_claimed","dispatch_released","dispatch_deferred","dispatch_lease_taken_over","launch_intent_recorded","reconcile_decided","reconcile_deferred","attention_set","attempt_abandoned","external_cancel","late_result_recorded"];function eZ(e){return e.legacy_agent_request_id??e.id}function eQ(e,t){eb(e);let r=n.default.prepare("SELECT id FROM work_requests WHERE legacy_agent_request_id = ?").get(t),a=n.engine.getWorkRequest(r?r.id:t);if(!a||!eR(a.source_conversation_id,e))throw new eE("request_not_found","No request with that id is visible to this principal.");return a}let e0={agent:"agent",bot:"direct",group:"group"};e.s(["AgentApiError",0,eE,"MCP_IDEMPOTENCY_PREFIX",0,"mcp:","acceptAgentMessage",0,function(e,t){let n;if(eb(e),!eI(t.agentId))throw new eE("invalid_request","agentId is required.");if(!eI(t.content))throw new eE("invalid_request","content is required.");if(!eI(t.idempotencyKey)||t.idempotencyKey.length>200)throw new eE("invalid_request","An idempotency key (1-200 characters) is required.");if(void 0!==t.conversationId&&null!==t.conversationId&&!eI(t.conversationId))throw new eE("invalid_request","conversationId must be a non-empty string when present.");try{n=(0,d.acceptConversationMessage)({surface:"api",requester:e,idempotencyKey:t.idempotencyKey,conversation:t.conversationId?{id:t.conversationId}:{create:!0},content:t.content,fingerprint:[t.agentId,t.conversationId??null,t.content],route:()=>({deliveries:[{agentId:t.agentId}]}),dispatch:eS})}catch(e){if(e instanceof d.IntakeError)throw new eE(eA[e.code],"intake_failed"===e.code?"The request could not be processed.":e.message);throw e}let r=n.requests[0];return{accepted:{requestId:r?eZ(r):n.requestIds[0],conversationId:n.conversationId,acceptedMessageId:n.acceptedMessageId,state:r?eq(r.state):"accepted",replayed:n.replayed},dispatched:n.dispatched}},"decideWakeGrantCommand",0,function(e,t,n){let r=F({wakeId:e,decision:t,caller:n});if(r.request&&r.runnable&&eJ(r.request.id),r.request&&r.ended)for(let e of ek(r.request.id))eJ(e);return r},"getAgentRequest",0,function(e,t){var r;let a,i,o;return a=(r=eQ(e,t)).result?JSON.parse(r.result):null,i=a?.reply_message_id?n.default.prepare("SELECT id, content FROM messages WHERE id = ?").get(a.reply_message_id):void 0,o="failed"===r.state||"cancelled"===r.state,{requestId:eZ(r),conversationId:r.source_conversation_id,agentId:r.target_agent_id,acceptedMessageId:r.source_event_id,state:eq(r.state),reply:i?{messageId:i.id,content:i.content}:null,failure:o?{code:r.error_code??r.state,message:r.error_message??""}:null,events:n.engine.listEvents(r.id).flatMap(e=>{let t=function(e){if("state_changed"===e.type){let t=e.data?JSON.parse(e.data).to:void 0;return"running"===t?"dispatched":"completed"===t?"completed":"failed"===t||"cancelled"===t?"failed":t??null}return eX.includes(e.type)?null:e.type}(e);return t?[{type:t,at:e.created_at}]:[]}),createdAt:r.created_at,updatedAt:r.updated_at}},"getAuthorizedWorkRequest",0,eQ,"getConversation",0,function(e,t){eb(e);let r=n.default.prepare("SELECT * FROM conversations WHERE id = ?").get(t);if(!r||!eR(r.id,e))throw new eE("conversation_not_found","No conversation with that id is visible to this principal.");let a=n.default.prepare("SELECT participant_kind, participant_id, joined_at FROM conversation_participants WHERE conversation_id = ? ORDER BY joined_at ASC, rowid ASC").all(r.id),i=n.default.prepare("SELECT * FROM messages WHERE conversation_id = ? ORDER BY rowid ASC").all(r.id);return{conversationId:r.id,type:e0[r.type]??"agent",origin:r.origin_kind&&r.origin_id?{kind:r.origin_kind,id:r.origin_id}:null,participants:a.map(e=>({kind:e.participant_kind,id:e.participant_id,joinedAt:e.joined_at})),messages:i.map((e,t)=>{var n,a;let i;return{messageId:e.id,seq:t+1,sender:(n=e,a=r,i=n.sender_kind??("bot"===n.sender_type?"bot":"person"),n.sender_id?{kind:i,id:n.sender_id}:"bot"!==i&&a.origin_kind===i&&a.origin_id?{kind:i,id:a.origin_id}:{kind:i,id:"unknown"}),content:e.content,requestId:e.request_id,createdAt:e.created_at}}),events:n.projector.listConversationEvents(r.id)}},"isPrincipalKind",0,ev,"recoverCoordinatorLoops",0,function(){return Promise.all([eK(),...(function(e=Date.now()){let t=n.default.prepare("SELECT request_id AS id FROM terminal_followups WHERE done_at IS NULL ORDER BY created_at ASC, request_id ASC").all(),r=new Set;for(let n of t)for(let t of ek(n.id,e))r.add(t);for(let e of n.default.prepare(`
|
|
50
|
-
SELECT w.id FROM work_requests w JOIN terminal_followups f ON f.request_id = w.parent_request_id
|
|
51
|
-
WHERE w.state = 'queued' AND (w.wake_event_id IS NOT NULL OR (w.requester_kind = ? AND w.requester_id = ?))
|
|
52
|
-
ORDER BY w.created_at ASC, w.id ASC
|
|
53
|
-
`).all(es.kind,es.id))r.add(e.id);return[...r]})().map(eJ),...eo().map(eY)]).then(()=>void 0)},"retryWakeCommand",0,function(e){let t=M(e);return t.request?.state==="queued"&&eJ(t.request.id),t},"revokeWakeGrantCommand",0,function(e,t){return(0,y.revokeWakeGrant)(e,t)},"samePrincipal",0,function(e,t){return e.kind===t.kind&&e.id===t.id},"startAgentDispatch",0,eJ,"sweepDispatch",0,eK],91084)},27510,9346,57281,54226,53059,e=>{"use strict";var t=e.i(22734),n=e.i(14747),r=e.i(62349),a=e.i(51749),i=e.i(29370),o=e.i(54799),s=e.i(67505);let d="AGENT_DECK_RUN_TOKEN",l=["ended","error","died","canceled"],u=["starting","running","ended","error","died","canceled"];class c extends Error{code;status;deckCode;constructor(e,t,n=null,r=null){super(t.slice(0,300)),this.name="AgentDeckApiError",this.code=e,this.status=n,this.deckCode=r}}let _={agent_deck_token_missing:`Agent Deck API token is not configured on the Botmancers server (set ${d}).`,agent_deck_unauthorized:`Agent Deck rejected the Botmancers run token (check ${d} and that its grant is not revoked or expired).`,agent_deck_forbidden:"Agent Deck refused this run for the Botmancers grant (enable runs and finalization on the grant and allow this deck).",agent_deck_unreachable:"The Agent Deck server is unreachable at the workspace Agent Deck URL (start it or correct the URL).",agent_deck_rejected:"Agent Deck rejected the request.",agent_deck_invalid_response:"Agent Deck returned an unexpected response."};function p(){let e=process.env[d];return"string"==typeof e&&e.trim().length>0?e.trim():null}function f(){let e=p();return e?(0,o.createHash)("sha256").update(`botmancers-grant-v1:${e}`).digest("hex").slice(0,16):null}function g(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function m(e){return"string"==typeof e&&e.length>0?e:null}async function h(e,t,n={}){var r,a,i;let o,d=p();if(!d)throw new c("agent_deck_token_missing",_.agent_deck_token_missing);let l={authorization:`Bearer ${d}`,accept:"application/json"};n.idempotencyKey&&(l["idempotency-key"]=n.idempotencyKey),void 0!==n.body&&(l["content-type"]="application/json");let u=`${(0,s.getAgentDeckServerUrl)()}${t}`;try{o=await (r={method:e,headers:l,...void 0!==n.body?{body:JSON.stringify(n.body)}:{},...n.signal?{signal:n.signal}:{}},fetch(u,r).then(e=>({status:e.status,json:()=>e.json()})))}catch{throw new c("agent_deck_unreachable",_.agent_deck_unreachable)}let f=null;try{f=g(await o.json())}catch{f=null}if(o.status<200||o.status>=300||f?.success!==!0){let e,t;if(o.status>=200&&o.status<300)throw new c("agent_deck_invalid_response",_.agent_deck_invalid_response,o.status);throw a=o.status,i=f,t=(e=m(i?.error_code))&&/^[A-Z][A-Z0-9_]{0,63}$/.test(e)?e:null,401===a?new c("agent_deck_unauthorized",_.agent_deck_unauthorized,a,t):403===a?new c("agent_deck_forbidden",`${_.agent_deck_forbidden}${t?` (${t})`:""}`,a,t):new c("agent_deck_rejected",`Agent Deck rejected the request (${a}${t?` ${t}`:""}).`,a,t)}let k=g(f.data);if(!k)throw new c("agent_deck_invalid_response",_.agent_deck_invalid_response,o.status);return k}function k(e){return new c("agent_deck_invalid_response",`${_.agent_deck_invalid_response} (${e})`)}function w(e){if("string"!=typeof e||!u.includes(e))throw k("run state");return e}let y=/^[0-9a-f]{64}$/,E=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/,v=/^bl_[0-9a-f]{24}$/;function I(e){var t;let n=g(e);if(!n||Object.keys(n).some(e=>!["path","sha256","mode"].includes(e)))throw k("manifest entry");if(!(!("string"!=typeof(t=n.path)||0===t.length||t.length>1024||t.startsWith("/")||t.includes("\\")||/^[A-Za-z]:/.test(t)||t.includes("\0"))&&t.split("/").every(e=>e.length>0&&"."!==e&&".."!==e&&".git"!==e)))throw k("manifest path");let r=null===n.sha256&&null===n.mode,a="string"==typeof n.sha256&&y.test(n.sha256)&&("100644"===n.mode||"100755"===n.mode);if(!r&&!a)throw k("manifest digest or mode");return{path:n.path,sha256:n.sha256,mode:n.mode}}async function R(e,t){let n=await h("POST","/api/agent-runs",{body:e,idempotencyKey:t}),r=m(n.runId);if(!r)throw k("runId");return{runId:r,state:w(n.state)}}async function q(e){let t=await h("GET",`/api/agent-runs/${encodeURIComponent(e)}`);if(!m(t.runId)||!m(t.deckId)||!m(t.client)||"edit"!==t.tools&&"readonly"!==t.tools)throw k("run status");return{runId:m(t.runId),deckId:m(t.deckId),client:m(t.client),tools:t.tools,state:w(t.state),sessionId:m(t.sessionId),finalization:function(e){if(null==e)return null;let t=g(e);if(!t||"string"!=typeof t.baselineRef||!v.test(t.baselineRef)||"string"!=typeof t.baselineDigest||!y.test(t.baselineDigest)||!["prepared","finalizing","finalized"].includes(String(t.state)))throw k("finalization status");let n="string"==typeof t.commit&&E.test(t.commit)?t.commit:null;return{baselineRef:t.baselineRef,baselineDigest:t.baselineDigest,state:t.state,commit:n}}(t.finalization)}}async function b(e,t){let n=t?`?after=${encodeURIComponent(t)}`:"",r=await h("GET",`/api/agent-runs/${encodeURIComponent(e)}/events${n}`);if(!Array.isArray(r.events))throw k("events");return{runId:m(r.runId)??e,state:w(r.state),events:r.events.filter(e=>!!g(e)&&"string"==typeof e.type),nextCursor:"string"==typeof r.nextCursor?r.nextCursor:t??"0"}}async function A(e){return w((await h("POST",`/api/agent-runs/${encodeURIComponent(e)}/cancel`)).state)}async function S(e){let t=await h("GET",`/api/agent-runs/${encodeURIComponent(e)}/changes`);if("string"!=typeof t.baselineRef||!v.test(t.baselineRef))throw k("baselineRef");if("string"!=typeof t.baselineDigest||!y.test(t.baselineDigest))throw k("baselineDigest");if("string"!=typeof t.baseCommit||!E.test(t.baseCommit))throw k("baseCommit");if("string"!=typeof t.manifestDigest||!y.test(t.manifestDigest))throw k("manifestDigest");if(!Array.isArray(t.files))throw k("files");return{runId:m(t.runId)??e,baselineRef:t.baselineRef,baselineDigest:t.baselineDigest,baseCommit:t.baseCommit,files:t.files.map(I),manifestDigest:t.manifestDigest}}async function x(e,t,n){let r=await h("POST",`/api/agent-runs/${encodeURIComponent(e)}/finalize`,{body:t,idempotencyKey:n});if("finalized"!==r.finalizationState||"string"!=typeof r.commit||!E.test(r.commit)||"string"!=typeof r.tree||!E.test(r.tree)||"string"!=typeof r.manifestDigest||!y.test(r.manifestDigest))throw k("finalize result");return{runId:m(r.runId)??e,finalizationState:"finalized",commit:r.commit,tree:r.tree,..."string"==typeof r.parent&&E.test(r.parent)?{parent:r.parent}:{},manifestDigest:r.manifestDigest,..."number"==typeof r.fileCount?{fileCount:r.fileCount}:{},..."string"==typeof r.reviewId?{reviewId:r.reviewId}:{}}}e.s(["AGENT_DECK_API_MESSAGES",0,_,"AGENT_DECK_TERMINAL_STATES",0,l,"AgentDeckApiError",0,c,"agentDeckGrantFingerprint",0,f,"cancelAgentDeckRun",0,A,"finalizeAgentDeckRun",0,x,"getAgentDeckRun",0,q,"getAgentDeckRunChanges",0,S,"getAgentDeckRunEvents",0,b,"hasAgentDeckRunToken",0,function(){return null!==p()},"startAgentDeckRun",0,R],9346);var T=e.i(39229),D=e.i(46786),N=e.i(11626),C=e.i(35613);class O extends Error{code;constructor(e,t){super(t),this.name="ControlError",this.code=e}}let W=["queued","blocked","running","waiting"];function L(e){try{let t=JSON.parse(e.launch_snapshot);return t&&"object"==typeof t?t:{}}catch{return{}}}function M(e,t,n={}){let r=n.now??Date.now,a=n.cancelGraceMs??3e4,i=e.prepare("SELECT * FROM work_attempts WHERE request_id = ? AND finished_at IS NULL"),s=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 u(e){let n=t.getWorkRequest(e);if(!n)throw new O("not_found",`No work request ${e}.`);return n}function c(e,t,n,r){if(r&&(!e||!r(e,t,n)))throw new O("forbidden",`Not allowed to ${n} this request.`)}function _(e){return Math.max(e.attempt_count,s.get(e.id).n)}function p(t,n){e.prepare("UPDATE dispatch_attention SET cleared_at = ? WHERE request_id = ? AND cleared_at IS NULL").run(n,t)}function f(n,r,a){let i=d.get(n);i&&(e.prepare("DELETE FROM dispatch_leases WHERE request_id = ?").run(n),t.appendEvent(n,{type:"dispatch_released",data:{owner:i.owner,outcome:r,forced:!0},now:a}))}function g(e,n,r){let a=i.get(e.id);if(!a)return null;let o=L(a).transport;return t.finishAttempt(a.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:a.id,data:{reason:n,attempt_number:a.attempt_number,external_run_id:a.external_run_id,transport:"string"==typeof o?o:null},now:r}),{requestId:e.id,attemptId:a.id,externalRunId:a.external_run_id,transport:"string"==typeof o?o:null,reason:n,launched:!!a.external_run_id||!!a.external_session_id||!!l.get(a.id)}}function m(n,r,a,i){let o=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(i,o,a,i,n.id),t.appendEvent(n.id,{type:"cancel_requested",data:{by:o,reason:a,state:n.state},now:i})}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 k(e,n,r={}){return t.transitionWorkRequest(e.id,{from:e.state,to:"failed",reason:"timed_out",errorCode:"timed_out",errorMessage:"The request passed its deadline.",data:{...r,deadline_at:e.deadline_at},now:n})}function w(n,r,a){let i=(0,N.storedRetryPolicy)(n.retry_policy),s=(0,N.classifyFailure)(r.category,r.code),d=_(n),l=(0,N.decideRetry)({policy:i,attemptCount:d,disposition:s,deadlineAt:n.deadline_at,now:a}),u=r.attention&&"retry"===l.action?{action:"attention"}:l,c={category:r.category,disposition:s,attempt_count:d,max_attempts:i.max_attempts};switch(u.action){case"retry":{e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(u.nextEligibleAt,n.id);let i=t.transitionWorkRequest(n.id,{from:"running",to:"queued",reason:"retry_scheduled",data:{...c,retry:u.retry,delay_ms:u.delayMs,next_eligible_at:u.nextEligibleAt,error_code:r.errorCode},now:a});return{outcome:"retry_scheduled",decision:u,request:i}}case"deadline":return{outcome:"timed_out",decision:u,request:k(n,a,c)};case"attention":{let i=r.attention??`failure:${r.category??"unknown"}`;return e.prepare("INSERT INTO dispatch_attention (id, request_id, attempt_id, reason, detail, created_at) VALUES (?, ?, NULL, ?, ?, ?)").run((0,o.randomUUID)(),n.id,i,r.code,a),t.appendEvent(n.id,{type:"attention_set",data:{reason:i,detail:r.code},now:a}),{outcome:"attention",decision:u,request:t.transitionWorkRequest(n.id,{from:"running",to:"waiting",reason:`manual_attention:${r.attention??r.category??"unknown"}`,data:c,now:a})}}case"exhausted":if(i.max_attempts>1)return{outcome:"retries_exhausted",decision:u,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",reason:"retries_exhausted",errorCode:r.errorCode,errorMessage:r.errorMessage,data:c,now:a})};case"fail":return{outcome:"failed",decision:u,request:t.transitionWorkRequest(n.id,{from:"running",to:"failed",errorCode:r.errorCode,errorMessage:r.errorMessage,data:"fail"===u.action?c:{},now:a})}}}let y={now:r,cancelGraceMs:a,cancel:(e,n={})=>t.transaction(()=>{let t=u(e);if(c(n.actor,t,"cancel",n.authorize),C.TERMINAL_STATES.includes(t.state))return{outcome:"already_terminal",state:t.state,replayed:!0,abandoned:null};let a=n.now??r();if("running"===t.state)return null!==t.cancel_requested_at?{outcome:"cancel_requested",state:"running",replayed:!0,abandoned:null}:(m(t,n.actor,n.reason??null,a),{outcome:"cancel_requested",state:"running",replayed:!1,abandoned:null});null===t.cancel_requested_at&&m(t,n.actor,n.reason??null,a);let i=u(e),o=g(i,"cancelled",a);return p(e,a),f(e,"cancelled",a),{outcome:"cancelled",state:h(i,a,{from_state:t.state}).state,replayed:!1,abandoned:o}}),retry:(n,a={})=>t.transaction(()=>{let i=u(n);if(c(a.actor,i,"retry",a.authorize),C.TERMINAL_STATES.includes(i.state))return{outcome:"already_terminal",state:i.state,abandoned:null};if("queued"===i.state)return{outcome:"already_queued",state:"queued",abandoned:null};if("waiting"!==i.state||null!==i.cancel_requested_at)return{outcome:"not_retryable",state:i.state,abandoned:null};let o=(0,N.storedRetryPolicy)(i.retry_policy),s=_(i);if(s>=o.max_attempts)return{outcome:"retries_exhausted",state:i.state,abandoned:null};let d=a.now??r();if(null!==i.deadline_at&&d>=i.deadline_at)return{outcome:"not_retryable",state:i.state,abandoned:null};let l=g(i,"retried",d);return p(n,d),e.prepare("UPDATE work_requests SET next_eligible_at = ? WHERE id = ?").run(d,n),{outcome:"retry_scheduled",state:t.transitionWorkRequest(n,{from:"waiting",to:"queued",reason:"retry_scheduled",data:{manual:!0,by:a.actor?`${a.actor.kind}:${a.actor.id}`:null,attempt_count:s,max_attempts:o.max_attempts,retry:s,delay_ms:0,next_eligible_at:d},now:d}).state,abandoned:l}}),timeOut:(e,n)=>t.transaction(()=>{let a=t.getWorkRequest(e),i=n??r();if(!a||!W.includes(a.state)||null===a.deadline_at||i<a.deadline_at)return null;let o=g(a,"timed_out",i);return p(e,i),f(e,"timed_out",i),k(a,i,{from_state:a.state}),{requestId:e,outcome:"timed_out",abandoned:o}}),settleFailure:(e,n,a)=>t.transaction(()=>{let t=u(e);if("running"!==t.state)throw new C.EngineStoreError("stale_state",`Work request ${e} is ${t.state}, not running.`);return w(t,n,a??r())}),enforceRequest:(e,n,o={})=>t.transaction(()=>{let s,l=t.getWorkRequest(e),c=n??r();if(!l||!W.includes(l.state)||null!==l.legacy_agent_request_id)return null;if(null!==l.deadline_at&&c>=l.deadline_at)return y.timeOut(e,c);if("running"!==l.state)return null;if(null!==l.cancel_requested_at){let t=d.get(e);if(!(!0===o.force||!t||t.expires_at<=c)&&c-l.cancel_requested_at<a)return null;let n=g(l,"cancelled",c);return f(e,"cancelled",c),h(l,c,{abandoned:null!==n}),{requestId:e,outcome:"cancelled",abandoned:n}}let _=i.get(e),p=_&&"number"==typeof(s=L(_).deadline_at)?s:null;if(!_||null===p||c<p)return null;let m=g(l,"timed_out",c);f(e,"attempt_timed_out",c);let k=w(u(e),{category:"timed_out",code:null,errorCode:"timed_out",errorMessage:"The Attempt passed its deadline."},c);return{requestId:e,outcome:k.outcome,abandoned:m}}),dueRequests(t){let n=t??r();return e.prepare(`
|
|
54
|
-
SELECT id FROM work_requests
|
|
55
|
-
WHERE state IN ('queued', 'blocked', 'running', 'waiting') AND legacy_agent_request_id IS NULL AND executor = 'dispatcher'
|
|
56
|
-
AND ((deadline_at IS NOT NULL AND deadline_at <= ?) OR state = 'running')
|
|
57
|
-
ORDER BY created_at ASC, id ASC
|
|
58
|
-
`).all(n).map(e=>e.id)},enforceDue(e){let t=e??r(),n=[];for(let e of y.dueRequests(t)){let r=y.enforceRequest(e,t);r&&n.push(r)}return n},attemptDeadlineFor:(e,t)=>(0,N.attemptDeadline)((0,N.storedRetryPolicy)(e.retry_policy),e.deadline_at,t),attemptsUsed:_};return y}e.s(["createRequestControl",0,M],57281);let $="'grant_requested', 'grant_approved', 'grant_denied', 'grant_revoked'",F=Object.freeze({maxGlobal:4,maxPerTarget:1,leaseMs:6e4,heartbeatMs:15e3,deferMs:5e3,cancelGraceMs:3e4}),H={maxGlobal:"BOTMANCERS_DISPATCH_MAX_GLOBAL",maxPerTarget:"BOTMANCERS_DISPATCH_MAX_PER_TARGET",leaseMs:"BOTMANCERS_DISPATCH_LEASE_MS",heartbeatMs:"BOTMANCERS_DISPATCH_HEARTBEAT_MS",deferMs:"BOTMANCERS_DISPATCH_DEFER_MS",cancelGraceMs:"BOTMANCERS_DISPATCH_CANCEL_GRACE_MS"},U=Object.freeze({maxGlobal:F.maxGlobal,maxPerTarget:F.maxPerTarget});class P extends Error{requestId;constructor(e){super(`The dispatch lease for ${e} is no longer held.`),this.name="LeaseLostError",this.requestId=e}}let z=[{status:400,code:/.*/},{status:404,code:/^DECK_NOT_FOUND$/},{status:422,code:/^(WORKSPACE_[A-Z0-9_]+|PROFILE_UNSUPPORTED|RESUME_UNVERIFIED|FINALIZATION_INVALID)$/},{status:409,code:/^INDEX_DIRTY$/},{status:503,code:/^CLIENT_UNAVAILABLE$/}];function j(e){return z.some(t=>t.status===e.status&&t.code.test(e.code??""))}function B(e){switch(e.kind){case"no_grant":case"unauthorized":case"forbidden":return!0;case"rejected":return j(e);default:return!1}}function K(e){let t=e.correlation.attemptId;return t?`botmancers-attempt-${t}`:`botmancers-direct-${(0,o.randomUUID)()}`}function G(e,t){if(e instanceof c)return(0,i.attemptFailure)(e instanceof c?"agent_deck_token_missing"===e.code||"agent_deck_unauthorized"===e.code||"agent_deck_forbidden"===e.code||"agent_deck_unreachable"===e.code?"unavailable":"agent_deck_invalid_response"===e.code?"result_contract":t:t,`[${e.code}${e.deckCode?` ${e.deckCode}`:""}] ${e.message}`,e.code);return(0,i.attemptFailure)(t,e instanceof Error?e.message:String(e))}e.s(["LeaseLostError",0,P,"createDispatcher",0,function(e,t,n={}){let r=n.owner??`${D.default.hostname()}:${process.pid}:${(0,o.randomUUID)().slice(0,8)}`,a={...function(e=process.env){let t={...F};for(let n of Object.keys(H)){let r=e[H[n]];if(void 0===r||!/^\d+$/.test(r.trim()))continue;let a=Number(r.trim());Number.isSafeInteger(a)&&a>0&&(t[n]=a)}return t.maxGlobal=Math.min(t.maxGlobal,U.maxGlobal),t.maxPerTarget=Math.min(t.maxPerTarget,U.maxPerTarget),t}(),...n.config??{}},i=n.now??Date.now,s=M(e,t,{now:i,cancelGraceMs:a.cancelGraceMs}),d=e.prepare("SELECT COUNT(*) AS n FROM dispatch_leases"),l=e.prepare("SELECT COUNT(*) AS n FROM dispatch_leases WHERE target_agent_id = ?"),u=e.prepare("SELECT * FROM dispatch_attention WHERE request_id = ? AND cleared_at IS NULL"),c=e.prepare(`SELECT type, data FROM engine_events WHERE request_id = ? AND type NOT IN (${$}) ORDER BY sequence DESC LIMIT 1`),_=e.prepare(`
|
|
59
|
-
SELECT w.id FROM work_requests w
|
|
60
|
-
WHERE w.state = 'queued' AND w.executor = 'dispatcher'
|
|
61
|
-
AND (SELECT e.type FROM engine_events e WHERE e.request_id = w.id AND e.type NOT IN (${$}) ORDER BY e.sequence DESC LIMIT 1) = 'dispatch_deferred'
|
|
62
|
-
ORDER BY w.created_at ASC, w.id ASC
|
|
63
|
-
`),p=e.prepare("SELECT 1 FROM dispatch_leases WHERE request_id = ? AND token = ?"),f=e.prepare("SELECT decision FROM wake_safety_decisions WHERE request_id = ? ORDER BY sequence DESC LIMIT 1"),g=e.prepare("SELECT status FROM wakes WHERE id = ?"),m=e.prepare(`
|
|
64
|
-
SELECT w.id FROM work_requests w
|
|
65
|
-
WHERE w.state = 'queued' AND w.legacy_agent_request_id IS NULL AND w.executor = 'dispatcher' AND w.id <> ?
|
|
66
|
-
AND (w.created_at < ? OR (w.created_at = ? AND w.rowid < (SELECT rowid FROM work_requests WHERE id = ?)))
|
|
67
|
-
AND (w.next_eligible_at IS NULL OR w.next_eligible_at <= ?)
|
|
68
|
-
AND (w.deadline_at IS NULL OR w.deadline_at > ?)
|
|
69
|
-
AND NOT EXISTS (SELECT 1 FROM dispatch_attention a WHERE a.request_id = w.id AND a.cleared_at IS NULL)
|
|
70
|
-
AND (SELECT d.decision FROM wake_safety_decisions d WHERE d.request_id = w.id ORDER BY d.sequence DESC LIMIT 1) = 'allowed'
|
|
71
|
-
AND (w.wake_event_id IS NULL OR EXISTS (SELECT 1 FROM wakes k WHERE k.id = w.wake_event_id AND k.status = 'accepted'))
|
|
72
|
-
AND (SELECT COUNT(*) FROM dispatch_leases l WHERE l.target_agent_id = w.target_agent_id) < ?
|
|
73
|
-
ORDER BY w.created_at ASC, w.rowid ASC
|
|
74
|
-
LIMIT 1
|
|
75
|
-
`);function h(e,n,r,o){let s=c.get(e.id);return(s?.type==="dispatch_deferred"&&s.data?JSON.parse(s.data).reason:null)!==n&&t.appendEvent(e.id,{type:"dispatch_deferred",data:{reason:n,active_global:r.global,active_target:r.target,max_global:a.maxGlobal,max_per_target:a.maxPerTarget,...o?{waiting_behind:o}:{}},now:i()}),o?{ok:!1,reason:n,blockedBy:o}:{ok:!1,reason:n}}function k(e){if(!p.get(e.requestId,e.token))throw new P(e.requestId)}let w={owner:r,config:a,now:i,control:s,claim:(n,c={})=>t.transaction(()=>{let _=t.getWorkRequest(n);if(!_||"queued"!==_.state||void 0!==c.expectedVersion&&_.version!==c.expectedVersion)return{ok:!1,reason:"not_queued"};let p=i();if(null!==_.deadline_at&&p>=_.deadline_at)return s.timeOut(n,p),{ok:!1,reason:"timed_out"};if(null!==_.next_eligible_at&&p<_.next_eligible_at)return{ok:!1,reason:"not_eligible"};if(u.get(n))return{ok:!1,reason:"attention"};let k=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}(_);if(k)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"not_authorized",expectedVersion:_.version,errorCode:"not_authorized",errorMessage:k,now:p}),{ok:!1,reason:"not_authorized"};let w=(0,N.storedRetryPolicy)(_.retry_policy),y=s.attemptsUsed(_);if(y>=w.max_attempts)return t.transitionWorkRequest(n,{from:"queued",to:"failed",reason:"retries_exhausted",expectedVersion:_.version,errorCode:"retries_exhausted",errorMessage:"No Attempt is left in the retry budget.",data:{attempt_count:y,max_attempts:w.max_attempts},now:p}),{ok:!1,reason:"exhausted"};let E=d.get().n,v=l.get(_.target_agent_id).n;if(E>=a.maxGlobal)return h(_,"global_limit",{global:E,target:v});if(v>=a.maxPerTarget)return h(_,"target_limit",{global:E,target:v});let I=m.get(n,_.created_at,_.created_at,n,p,p,a.maxPerTarget);if(I)return h(_,"older_waiting",{global:E,target:v},I.id);let R={requestId:n,owner:r,token:(0,o.randomUUID)(),expiresAt:p+a.leaseMs};return e.prepare(`
|
|
76
|
-
INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
|
|
77
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
78
|
-
`).run(n,_.target_agent_id,r,R.token,p,p,R.expiresAt),t.appendEvent(n,{type:"dispatch_claimed",data:{owner:r,lease_expires_at:R.expiresAt,active_global:E+1,active_target:v+1,attempt_number:y+1,max_attempts:w.max_attempts},now:p}),e.prepare("UPDATE work_requests SET attempt_count = ?, next_eligible_at = NULL WHERE id = ?").run(y+1,n),{ok:!0,lease:R,request:t.transitionWorkRequest(n,{from:"queued",to:"running",expectedVersion:_.version,data:c.data,now:p})}}),claimNext(t){let n=t??e.prepare(`
|
|
79
|
-
SELECT id FROM work_requests WHERE state = 'queued' AND legacy_agent_request_id IS NULL AND executor = 'dispatcher'
|
|
80
|
-
AND (next_eligible_at IS NULL OR next_eligible_at <= ?)
|
|
81
|
-
ORDER BY created_at ASC, rowid ASC
|
|
82
|
-
`).all(i()).map(e=>e.id),r="not_queued";for(let e of n){let t=w.claim(e);if(t.ok||"global_limit"===t.reason)return t;("target_limit"===t.reason||"older_waiting"===t.reason)&&(r=t.reason)}return{ok:!1,reason:r}},recordLaunchIntent:(n,a,s,d)=>t.transaction(()=>{k(n);let l=i(),u=d?(0,o.createHash)("sha256").update(d.body).digest("hex"):null;return e.prepare(`
|
|
83
|
-
INSERT INTO attempt_launch_intents (attempt_id, request_id, transport, idempotency_key, body, body_hash, grant_fingerprint, owner, created_at)
|
|
84
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
85
|
-
`).run(a,n.requestId,s,d?.idempotencyKey??null,d?.body??null,u,d?.grantFingerprint??null,r,l),t.appendEvent(n.requestId,{type:"launch_intent_recorded",attemptId:a,data:{transport:s,idempotency_key:d?.idempotencyKey??null,body_hash:u,grant_fingerprint:d?.grantFingerprint??null},now:l}),w.launchIntent(a)}),launchIntent:t=>e.prepare("SELECT * FROM attempt_launch_intents WHERE attempt_id = ?").get(t),heartbeat(t){let n=i(),r=n+a.leaseMs,o=1===e.prepare("UPDATE dispatch_leases SET heartbeat_at = ?, expires_at = ? WHERE request_id = ? AND token = ?").run(n,r,t.requestId,t.token).changes;return o&&(t.expiresAt=r),o},holds:e=>!!p.get(e.requestId,e.token),assertHeld(e){k(e)},release(n,a){t.transaction(()=>{k(n),e.prepare("DELETE FROM dispatch_leases WHERE request_id = ? AND token = ?").run(n.requestId,n.token),t.appendEvent(n.requestId,{type:"dispatch_released",data:{owner:r,outcome:a},now:i()})})},defer(n,o,s=null){t.transaction(()=>{k(n);let d=i();n.expiresAt=d+a.deferMs,e.prepare("UPDATE dispatch_leases SET heartbeat_at = ?, expires_at = ? WHERE request_id = ? AND token = ?").run(d,n.expiresAt,n.requestId,n.token),t.appendEvent(n.requestId,{type:"reconcile_deferred",attemptId:s,data:{owner:r,reason:o,retry_at:n.expiresAt},now:d})})},setAttention:(n,a)=>t.transaction(()=>{k(n);let s=i(),d=(0,o.randomUUID)();e.prepare("INSERT INTO dispatch_attention (id, request_id, attempt_id, reason, detail, created_at) VALUES (?, ?, ?, ?, ?, ?)").run(d,n.requestId,a.attemptId,a.reason,a.detail??null,s),t.appendEvent(n.requestId,{type:"attention_set",attemptId:a.attemptId,data:{reason:a.reason,detail:a.detail??null},now:s});let l=t.getWorkRequest(n.requestId);return l?.state==="running"&&t.transitionWorkRequest(n.requestId,{from:"running",to:"waiting",reason:`manual_attention:${a.reason}`,now:s}),e.prepare("DELETE FROM dispatch_leases WHERE request_id = ? AND token = ?").run(n.requestId,n.token),t.appendEvent(n.requestId,{type:"dispatch_released",data:{owner:r,outcome:"attention"},now:s}),u.get(n.requestId)}),attention:e=>u.get(e),recoverable(){let t=i(),n=[];for(let a of e.prepare("SELECT request_id, owner, token, expires_at FROM dispatch_leases ORDER BY acquired_at ASC, request_id ASC").all()){if(a.owner===r&&a.expires_at>t)continue;let e=a.expires_at<=t?"lease_expired":!function(e){let t=/^(.*):(\d+):[^:]+$/.exec(e);if(!t||t[1]!==D.default.hostname())return!1;let n=Number(t[2]);if(n===process.pid)return!1;try{return process.kill(n,0),!1}catch(e){return"ESRCH"===e.code}}(a.owner)?null:"owner_exited";e&&n.push({requestId:a.request_id,reason:e,priorToken:a.token,priorOwner:a.owner})}for(let t of e.prepare(`
|
|
86
|
-
SELECT w.id FROM work_requests w
|
|
87
|
-
WHERE w.state = 'running' AND w.legacy_agent_request_id IS NULL AND w.executor = 'dispatcher'
|
|
88
|
-
AND NOT EXISTS (SELECT 1 FROM dispatch_leases l WHERE l.request_id = w.id)
|
|
89
|
-
AND NOT EXISTS (SELECT 1 FROM dispatch_attention a WHERE a.request_id = w.id AND a.cleared_at IS NULL)
|
|
90
|
-
ORDER BY w.updated_at ASC, w.id ASC
|
|
91
|
-
`).all())n.push({requestId:t.id,reason:"unleased_running",priorToken:null,priorOwner:null});return n},takeOver:n=>t.transaction(()=>{let s=i(),d={requestId:n.requestId,owner:r,token:(0,o.randomUUID)(),expiresAt:s+a.leaseMs};if(n.priorToken){let t="lease_expired"===n.reason?"AND expires_at <= ?":"",a=[r,d.token,s,s,d.expiresAt,n.requestId,n.priorToken];if(t&&a.push(s),1!==e.prepare(`
|
|
92
|
-
UPDATE dispatch_leases SET owner = ?, token = ?, acquired_at = ?, heartbeat_at = ?, expires_at = ?
|
|
93
|
-
WHERE request_id = ? AND token = ? ${t}
|
|
94
|
-
`).run(...a).changes)return null}else{let a=t.getWorkRequest(n.requestId);if(!a||"running"!==a.state||e.prepare("SELECT 1 FROM dispatch_leases WHERE request_id = ?").get(n.requestId)||u.get(n.requestId))return null;e.prepare(`
|
|
95
|
-
INSERT INTO dispatch_leases (request_id, target_agent_id, owner, token, acquired_at, heartbeat_at, expires_at)
|
|
96
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
97
|
-
`).run(n.requestId,a.target_agent_id,r,d.token,s,s,d.expiresAt)}return t.appendEvent(n.requestId,{type:"dispatch_lease_taken_over",data:{owner:r,previous_owner:n.priorOwner,reason:n.reason},now:s}),d}),deferredRequestIds:()=>_.all().map(e=>e.id),leaseOf:t=>e.prepare("SELECT owner, token, expires_at FROM dispatch_leases WHERE request_id = ?").get(t)};return w},"decideRepostResult",0,function(e){switch(e.kind){case"accepted":return{action:"reattach"};case"unreachable":return{action:"defer",reason:"unreachable"};case"unauthorized":case"forbidden":case"no_grant":return{action:"attention",reason:"grant"};case"rejected":if(409===e.status&&"IDEMPOTENCY_CONFLICT"===e.code)return{action:"attention",reason:"idempotency_conflict"};if(j(e))return{action:"fail",category:"launch_failed",code:e.code??String(e.status)};if(null!==e.status&&e.status>=500)return{action:"defer",reason:"server_error"};return{action:"attention",reason:"unrecognized_response"};default:return{action:"attention",reason:"unrecognized_response"}}},"decideWithRunId",0,function(e){switch(e.kind){case"run":if("died"===e.state)return{action:"interrupted_attention",reason:"run_died"};return{action:"reattach"};case"not_found":return{action:"attention",reason:"run_not_found"};case"unauthorized":return{action:"attention",reason:"grant_expired"};case"forbidden":return{action:"attention",reason:"grant_scope"};case"no_grant":return{action:"attention",reason:"grant_unavailable"};case"unreachable":return{action:"defer",reason:"unreachable"};case"rejected":if(null!==e.status&&e.status>=500)return{action:"defer",reason:"server_error"};return{action:"attention",reason:"unrecognized_response"};default:return{action:"attention",reason:"unrecognized_response"}}},"decideWithoutRunId",0,function(e){return e.reconcilable?e.intent?.body&&e.intent.idempotency_key?e.currentGrantFingerprint?e.intent.grant_fingerprint!==e.currentGrantFingerprint?{action:"attention",reason:"grant_mismatch"}:{action:"repost"}:{action:"attention",reason:"grant_unavailable"}:{action:"attention",reason:"launch_intent_missing"}:{action:"interrupted",reason:"runtime_unobservable"}},"dispatchFault",0,function(e,t){},"launchRejectedBeforeWork",0,B],54226);let J=e=>l.includes(e);async function V(e){let t={state:"starting",result:null,resultMismatch:null,sessionId:null},n=null;for(;;){let r=await b(e,n);for(let e of r.events)"sessionId"in e&&"string"==typeof e.sessionId&&e.sessionId&&(t.sessionId=e.sessionId),"result"===e.type&&("string"==typeof e.result&&e.result.length>0?(t.result=e.result,t.resultMismatch=null):(t.result=null,t.resultMismatch=null===e.result?"null":Array.isArray(e.result)?"array":""===e.result?"empty string":typeof e.result));t.state=r.state;let a=r.nextCursor!==(n??"0")&&r.events.length>0;if(n=r.nextCursor,J(r.state)&&!a)return t;a||await new Promise(e=>setTimeout(e,1e3))}}async function Y(e,t){if(!t?.finalization)return{baselineRef:null,baselineDigest:null,candidate:{ok:!1,code:"FINALIZATION_NOT_PREPARED",message:"The run reported no finalization baseline."}};let n={baselineRef:t.finalization.baselineRef,baselineDigest:t.finalization.baselineDigest};try{let r=await S(e);if(r.baselineRef!==t.finalization.baselineRef||r.baselineDigest!==t.finalization.baselineDigest)return{...n,candidate:{ok:!1,code:"BASELINE_MISMATCH",message:"Agent Deck returned candidate evidence for a different baseline."}};return{...n,candidate:{ok:!0,manifest:{baselineRef:r.baselineRef,baselineDigest:r.baselineDigest,baseCommit:r.baseCommit,manifestDigest:r.manifestDigest,files:r.files}}}}catch(r){let e=r instanceof c?r.deckCode??r.code:"agent_deck_invalid_response",t=r instanceof c?r.message:"The candidate manifest could not be read.";return{...n,candidate:{ok:!1,code:e,message:t}}}}function X(e){let t;if("readonly"!==e.toolProfile&&"edit"!==e.toolProfile)return{ok:!1,failure:(0,i.attemptFailure)("unsupported_authority",`Unsupported tool profile: ${JSON.stringify(String(e.toolProfile))}.`)};if(e.prepareFinalization&&"edit"!==e.toolProfile)return{ok:!1,failure:(0,i.attemptFailure)("unsupported_authority","Only an edit Attempt can prepare Git finalization.")};if(!e.deck)return{ok:!1,failure:(0,i.attemptFailure)("unavailable","An Agent Deck run requires a deck.")};if(!e.cwd)return{ok:!1,failure:(0,i.attemptFailure)("unavailable","An Agent Deck run requires a working directory.")};try{t=(0,T.parseDeckRuntime)(e.target.agent)}catch(e){return{ok:!1,failure:(0,i.attemptFailure)("unavailable",e instanceof Error?e.message:String(e))}}let n=e.sessionBinding?.externalSessionId??null;return{ok:!0,body:{deckId:e.deck,client:t,cwd:e.cwd,prompt:(0,T.deckPromptForAttempt)(e.prompt),tools:e.toolProfile,...n?{resumeSessionId:n}:{},...!0===e.prepareFinalization?{prepareFinalization:!0}:{}}}}function Z(e){if(!(e instanceof c))return{kind:"rejected",status:null,code:null};switch(e.code){case"agent_deck_token_missing":return{kind:"no_grant"};case"agent_deck_unauthorized":return{kind:"unauthorized"};case"agent_deck_forbidden":return{kind:"forbidden"};case"agent_deck_unreachable":return{kind:"unreachable"};default:if(404===e.status&&("RUN_NOT_FOUND"===e.deckCode||null===e.deckCode))return{kind:"not_found"};return{kind:"rejected",status:e.status,code:e.deckCode}}}let Q="agent-deck-api";function ee(e){let t=t=>({adapter:Q,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 et(e,t,n,r){let{result:a,failed:o}=ee(r),s=t.resumeSessionId,d=t.prepareFinalization,l=(0,i.interruption)({signal:t.signal??null,deadlineAt:t.deadlineAt}),u={externalRunId:e};try{if(d)try{let t=await q(e);t.finalization&&n?.({type:"progress",adapter:Q,at:Date.now(),detail:{phase:"finalization_prepared",baseline_ref:t.finalization.baselineRef,baseline_digest:t.finalization.baselineDigest}})}catch{}let t=V(e);t.catch(()=>{});let r=await Promise.race([t.then(e=>({observed:e}),e=>({error:e})),l.promise.then(e=>({interrupted:e}))]);if("interrupted"in r){let t="requested";try{await A(e)}catch{t="failed"}return o(r.interrupted,{...u,externalCancel:t})}if("error"in r){let t="requested";try{await A(e)}catch{t="failed"}return o(G(r.error,"runtime_failed"),{...u,externalCancel:t})}let{observed:c}=r,_=null;try{_=await q(e)}catch(e){if(!d)return o(G(e,"runtime_failed"),u)}let p=_?.sessionId??c.sessionId,f=d?await Y(e,_):void 0,g={...u,externalSessionId:p,...f?{finalization:f}:{}};if("canceled"===c.state)return o((0,i.attemptFailure)("cancelled",`Agent Deck run ${e} was canceled.`),g);if("ended"!==c.state)return o((0,i.attemptFailure)("runtime_failed",`Agent Deck run ${e} ended in state ${c.state}.`),g);if(null===c.result)return o((0,i.attemptFailure)("result_contract",`Agent Deck run ${e} result contract mismatch: expected a non-empty string result, got ${c.resultMismatch??"no result event"}.`),g);if(s&&null!==p&&p!==s)return o((0,i.attemptFailure)("session_mismatch",`resume run ${e} forked the session (expected ${s}, got ${p}); failing closed.`),g);let m=f?.candidate?.ok?f.candidate.manifest:null;return a({status:"completed",...g,externalSessionId:p??s,output:c.result,artifacts:m?[{kind:"candidate_manifest",ref:m.manifestDigest}]:[]})}finally{l.dispose()}}let en={currentGrantFingerprint:f,async inspect(e){try{let t=await q(e);return{kind:"run",state:t.state}}catch(e){return Z(e)}},async repost(e){let t;try{t=JSON.parse(e.body)}catch{return{kind:"rejected",status:null,code:"INTENT_UNREADABLE"}}try{let n=await R(t,e.idempotencyKey);return{kind:"accepted",runId:n.runId}}catch(e){return Z(e)}},follow:(e,t,n)=>et(e,t,n,Date.now()),async evidence(e){let t=null;try{t=await q(e)}catch{}return Y(e,t)},async cancel(e){try{return await A(e),"requested"}catch{return"failed"}}};var er=e.i(64974);class ea extends Error{code;constructor(e,t){super(t),this.name="DispatchFailure",this.code=e}}let ei={"hermes-gateway":()=>(function(e={}){let t="hermes-gateway";return{name:t,async run(n,r){let o=Date.now(),s=(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 s((0,i.attemptFailure)("unsupported_authority",`The Hermes gateway does not support the ${n.toolProfile} tool profile.`));let d=(e.loadConfig??a.loadHermesConfig)();if(!d)return s((0,i.attemptFailure)("unavailable","The Hermes gateway is not configured."));let l=(0,i.preLaunchInterruption)(n);if(l)return s(l);let u=n.sessionBinding?.externalSessionId??(0,a.hermesSessionIdForBot)(n.target.agentId,d),c=new AbortController,_=(0,i.interruption)(n),p=null;_.promise.then(e=>{p=e,c.abort()}),r?.({type:"started",adapter:t,at:Date.now(),externalRunId:null,externalSessionId:u});try{var f;let r=await (0,a.hermesChat)({config:d,profilePath:n.target.hermesProfilePath||a.HERMES_DEFAULT_CHAT_PATH,sessionId:u,messages:(f=n.prompt,"text"===f.kind?[{role:"user",content:f.text}]:[{role:"system",content:f.system},...f.history.map(e=>e.fromAgent?{role:"assistant",content:e.content}:{role:"user",content:`[From ${e.speakerLabel}] ${e.content}`})]),signal:c.signal,...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});return{status:"completed",adapter:t,externalRunId:null,externalSessionId:u,output:r,artifacts:[],startedAt:o,finishedAt:Date.now(),failure:null}}catch(r){let e=r instanceof a.HermesError?r.code:"unknown";if(p)return s({...p,code:e},u);let t="timeout"===e?"timed_out":"runtime_failed",n=r instanceof a.HermesError&&void 0!==r.status?` ${r.status}`:"";return s((0,i.attemptFailure)(t,`The Hermes gateway did not complete the turn (${e}${n}).`,e),u)}finally{_.dispose()}}}})({fetchImpl:null}),"agent-deck-run":()=>({name:Q,reconciler:en,externalCancel:!0,launchIntent(e){let t=X(e);return t.ok?{idempotencyKey:K(e),body:JSON.stringify(t.body),grantFingerprint:f()}:null},async run(e,t){let n,r=Date.now(),{failed:a}=ee(r),o=X(e);if(!o.ok)return a(o.failure);let s=(0,i.preLaunchInterruption)(e);if(s)return a(s);try{n=(await R(o.body,K(e))).runId}catch(t){let e=B(Z(t));return a(G(t,"launch_failed"),e?{}:{launchUnconfirmed:!0})}return t?.({type:"started",adapter:Q,at:Date.now(),externalRunId:n,externalSessionId:null}),et(n,{resumeSessionId:e.sessionBinding?.externalSessionId??null,prepareFinalization:!0===e.prepareFinalization,deadlineAt:e.deadlineAt??null,signal:e.signal??null},t,r)}})},eo=["agent_deck_token_missing","agent_deck_unauthorized","agent_deck_forbidden","agent_deck_unreachable"];function es(e){return"completed"===e.status?"succeeded":e.failure?.category==="cancelled"?"cancelled":e.failure?.category==="timed_out"?"timed_out":"failed"}function ed(e,t,n){return e.finishAttempt(t,{outcome:es(n),output:n.output,errorCategory:n.failure?.category??null,errorMessage:n.failure?.message??null,artifacts:n.artifacts,...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{},now:n.finishedAt})}function el(e,t,n,r=Date.now()){let a=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:es(n),error_category:n.failure?.category??null,external_run_id:n.externalRunId,output:n.output,request_state:a?.state??null},now:r})}async function eu(e,t,n,r={}){let a,o=!1,s=!1;try{a=await n.run(t.input,n=>{var a,i;if("started"===n.type&&(s=!0),o||(a=t.attempt,i=r.fence,!e.transaction(()=>(!i||!!i())&&("started"===n.type?((n.externalRunId||n.externalSessionId)&&e.recordAttemptExternalIds(a.id,{...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{}}),e.appendEvent(a.request_id,{type:"runtime_started",attemptId:a.id,data:{adapter:n.adapter,external_run_id:n.externalRunId},now:n.at})):e.appendEvent(a.request_id,{type:"runtime_progress",attemptId:a.id,data:{adapter:n.adapter,...n.detail},now:n.at}),!0)))){o=!0;return}r.onEvent?.(n)})}catch(r){let e=Date.now();a={status:"failed",adapter:n.name,externalRunId:null,externalSessionId:null,output:null,artifacts:[],startedAt:t.attempt.started_at,finishedAt:e,failure:(0,i.attemptFailure)("runtime_failed",r instanceof Error?r.message:String(r))}}return e.transaction(()=>{let i=e.getAttempt(t.attempt.id);if(i&&null!==i.finished_at)return el(e,i,a),{attempt:i,result:a,projected:void 0,late:!0,abandoned:null};let o=s?ec(t.attempt,n,t.input.signal??null,a):null,d=o?e_(e,o,a):ed(e,t.attempt.id,a),l=r.project?r.project(a,d):void 0;return{attempt:d,result:a,projected:l,late:!1,abandoned:o}})}function ec(e,t,n,r){if("failed"!==r.status)return null;let a=r.failure?.category,i="failed"===r.externalCancel,o={requestId:e.request_id,attemptId:e.id,externalRunId:r.externalRunId,transport:t.name};return"cancelled"!==a&&"timed_out"!==a?i?{...o,reason:"observation_lost",externalCancel:"failed"}:null:("cancelled"!==a||n?.aborted)&&(!t.externalCancel||i)?{...o,reason:a,externalCancel:i?"failed":null}:null}function e_(e,t,n){let r="failed"===t.externalCancel?"The runtime did not accept the cancel request":"The runtime cannot stop the run",a=e.finishAttempt(t.attemptId,{outcome:es(n),errorCategory:"abandoned",errorMessage:`${n.failure?.message??"The attempt was interrupted."} ${r}; it may continue and a later result is not awaited.`.slice(0,500),artifacts:n.artifacts,...n.externalRunId?{externalRunId:n.externalRunId}:{},...n.externalSessionId?{externalSessionId:n.externalSessionId}:{},now:n.finishedAt});return t.externalRunId=a.external_run_id,e.appendEvent(t.requestId,{type:"attempt_abandoned",attemptId:t.attemptId,data:{reason:t.reason,attempt_number:a.attempt_number,external_run_id:a.external_run_id,transport:t.transport,local_only:!0,error_code:n.failure?.code??null,external_cancel:t.externalCancel},now:n.finishedAt}),a}e.s(["DispatchFailure",0,ea,"adapterForTransport",0,function(e){return"hermes-gateway"===e?ei["hermes-gateway"]():"agent-deck-api"===e?ei["agent-deck-run"]():null},"agentForDispatch",0,function(e){return(0,r.resolveAgent)(e).agent},"dispatchFailureFor",0,function(e){var t;let n,r=e.failure?.category??"runtime_failed";if("hermes-gateway"===e.adapter)return"unavailable"===r?new ea("agent_unavailable","The agent runtime is not configured."):new ea("runtime_failed",`The agent runtime did not complete the turn (${e.failure?.code??"unknown"}).`);let a="agent-deck-api"===e.adapter?(t=e,(n=t.failure?.code)&&eo.includes(n)?n:null):null;return a?new ea("agent_unavailable",`${_[a]} [${a}]`):"unavailable"===r?new ea("agent_unavailable","The agent runtime is not available."):"cancelled"===r?new ea("runtime_failed","The agent run was cancelled."):"launch_failed"===r?new ea("runtime_failed","The agent runtime did not start the turn."):new ea("runtime_failed","The agent runtime did not complete the turn.")},"prepareDispatch",0,function(e){var i;let o,d,l=(0,r.resolveAgent)(e.bot);if(!l.launchable||!l.deck_id)throw new ea("agent_unavailable","The agent has no Agent Deck selected.");let u={prompt:{kind:"conversation",system:(d=(i=e.bot).title?`${i.name} (${i.title})`:i.name,`You are ${d}.
|
|
98
|
-
${i.description}`),history:e.history},deck:l.deck_id,toolProfile:e.toolProfile??er.TOOL_PROFILE_FOR_KIND.conversation,sessionBinding:e.sessionBinding??null,correlation:{}};if("hermes-gateway"===(0,r.agentTransport)(l.agent))return{agent:l.agent,adapter:ei["hermes-gateway"](),input:{...u,target:{agentId:e.bot.id,agent:l.agent,hermesProfilePath:(0,a.hermesProfilePathForBot)(e.bot)},cwd:null}};try{o=(0,s.resolveAndEnsureBotWorkdir)(e.bot.id,l.working_directory)}catch{throw new ea("agent_unavailable","The agent working directory is unavailable.")}return{agent:l.agent,adapter:ei["agent-deck-run"](),input:{...u,target:{agentId:e.bot.id,agent:l.agent},cwd:o,...e.prepareFinalization&&"edit"===u.toolProfile&&function(e){let r=n.default.resolve(e);for(;;){if(t.default.existsSync(n.default.join(r,".git")))return!0;let e=n.default.dirname(r);if(e===r)return!1;r=e}}(o)?{prepareFinalization:!0}:{}}}}],27510),e.s(["abandonedLocally",0,ec,"beginAttempt",0,function(e,t,n){let r=n.input.sessionBinding;if(r&&!r.bindingId)throw new C.EngineStoreError("invalid_input","A persisted resume attempt names its Session Binding.");let a=e.createAttempt(t,{kind:r?"resume":"launch",adapter:n.agent,toolProfile:n.input.toolProfile,launchSnapshot:function(e){let{input:t}=e;return{...e.snapshot??{},agent:e.agent,agent_id:t.target.agentId,transport:e.adapter.name,deck:t.deck,cwd:t.cwd,tool_profile:t.toolProfile,hermes_profile_path:t.target.hermesProfilePath??null,prompt_kind:t.prompt.kind,prompt_hash:(0,o.createHash)("sha256").update(JSON.stringify(t.prompt)).digest("hex"),session_binding_id:t.sessionBinding?.bindingId??null,prepare_finalization:!0===t.prepareFinalization,deadline_at:t.deadlineAt??null}}(n),resumedSessionBindingId:r?.bindingId??null,now:n.now});return{attempt:a,input:(0,i.freezeAttemptInput)({...n.input,correlation:{...n.input.correlation,requestId:t,attemptId:a.id}})}},"recordAbandonedResult",0,e_,"recordAttemptResult",0,ed,"recordLateResult",0,el,"runAttempt",0,eu],53059)},76459,142,e=>{"use strict";var t=e.i(54799),n=e.i(62294),r=e.i(35613),a=e.i(64974);let i=Object.freeze({maxWakeDepth:3,rootBudget:12,maxContinuations:24,globalConcurrency:4,perTargetConcurrency:1}),o={maxWakeDepth:"BOTMANCERS_WAKE_MAX_DEPTH",rootBudget:"BOTMANCERS_WAKE_ROOT_BUDGET"},s=Object.freeze({kind:"person",id:"local-owner"});function d(e){return!!e&&e.kind===s.kind&&e.id===s.id}function l(e,t){return t&&["person","bot","service"].includes(t.kind)&&"string"==typeof t.id&&t.id.trim()?"ui"===e?d(t)?"human_owner":"unknown":"api"===e?"api_principal":"unknown":"unknown"}let u={owner_required:403,not_found:404,not_pending:409};class c extends Error{code;constructor(e,t){super(t),this.name="WakeSafetyError",this.code=e}get status(){return u[this.code]}}function _(e){if("human_owner"!==e)throw new c("owner_required","Only the owner can allow, deny, or revoke Wake grants.")}function p(e,t){return n.default.prepare("SELECT * FROM wake_grants WHERE caller_agent_id = ? AND target_agent_id = ? AND authority = 'edit' AND revoked_at IS NULL").get(e,t)}function f(e){return n.default.prepare("SELECT * FROM wake_grants WHERE id = ?").get(e)}e.s(["WAKE_SAFETY_VERSION",0,1,"WakeSafetyError",0,c,"activeEditGrant",0,p,"assertOwner",0,_,"categorizeIntakeCaller",0,l,"ensureEditGrant",0,function(e){let r=p(e.callerAgentId,e.targetAgentId);if(r)return{grant:r,created:!1};let a=(0,t.randomUUID)();return n.default.prepare(`
|
|
99
|
-
INSERT INTO wake_grants (id, caller_agent_id, target_agent_id, authority, granted_by_kind, granted_by_id, source_wake_id, created_at)
|
|
100
|
-
VALUES (?, ?, ?, 'edit', ?, ?, ?, ?)
|
|
101
|
-
`).run(a,e.callerAgentId,e.targetAgentId,e.grantedBy.kind,e.grantedBy.id,e.sourceWakeId,e.now),{grant:f(a),created:!0}},"isOwnerPrincipal",0,d,"needsEditGrant",0,function(e){return"implementation"===e||"revision"===e},"revokeWakeGrant",0,function(e,r,a=Date.now()){return _(r.category),n.default.transaction(()=>{let i=f(e);if(!i)throw new c("not_found",`No Wake grant ${e}.`);if(null!==i.revoked_at)return{grant:i,revoked:!1};n.default.prepare("UPDATE wake_grants SET revoked_at = ?, revoked_by_kind = ?, revoked_by_id = ? WHERE id = ? AND revoked_at IS NULL").run(a,r.principal.kind,r.principal.id,e);let o=i.source_wake_id?n.default.prepare("SELECT work_request_id FROM wakes WHERE id = ?").get(i.source_wake_id):void 0;return o?.work_request_id&&n.default.prepare(`
|
|
102
|
-
INSERT INTO engine_events (id, request_id, sequence, attempt_id, type, data, created_at)
|
|
103
|
-
SELECT ?, ?, COALESCE(MAX(sequence), 0) + 1, NULL, 'grant_revoked', ?, ? FROM engine_events WHERE request_id = ?
|
|
104
|
-
`).run((0,t.randomUUID)(),o.work_request_id,JSON.stringify({grant_id:i.id,wake_id:i.source_wake_id,caller_agent_id:i.caller_agent_id,target_agent_id:i.target_agent_id,decided_by:{kind:r.principal.kind,id:r.principal.id}}),a,o.work_request_id),{grant:f(e),revoked:!0}}).immediate()},"wakeSafetyLimits",0,function(e=process.env){let t=(t,n)=>{let r=e[o[t]]?.trim(),a=r&&/^\d+$/.test(r)?Number(r):NaN;return Number.isSafeInteger(a)&&a>=n&&a<i[t]?a:i[t]},n=t("rootBudget",1);return{...i,maxWakeDepth:t("maxWakeDepth",0),rootBudget:n,maxContinuations:2*n}}],142);let g={invalid_request:400,conversation_not_found:404,conversation_not_writable:409,target_not_found:404,idempotency_conflict:409,unknown_principal:403,intake_failed:500};class m extends Error{code;constructor(e,t){super(t),this.name="IntakeError",this.code=e}get status(){return g[this.code]}}let h={ui:["bot","group"],api:["agent"]};function k(e){return"string"==typeof e&&e.trim().length>0}function w(e,t,r){n.default.prepare("INSERT OR IGNORE INTO conversation_participants (conversation_id, participant_kind, participant_id, joined_at) VALUES (?, ?, ?, ?)").run(e,t.kind,t.id,r)}function y(e,r,a,i,o,s){let d=(0,t.randomUUID)();return n.default.prepare("INSERT INTO messages (id, conversation_id, sender_type, sender_id, sender_kind, content, handoff_targets, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(d,r,"bot"===a.kind?"bot":"user","ui"===e?null:a.id,a.kind,i,o&&o.length>0?JSON.stringify(o):null,s),d}function E(e){return e.map(e=>n.engine.getWorkRequest(e)).filter(e=>!!e)}e.s(["IntakeError",0,m,"acceptConversationMessage",0,function(e){var i,o;let s,d;if(!e.requester||!["person","bot","service"].includes(e.requester.kind)||!k(e.requester.id))throw new m("invalid_request","A requester principal is required.");if("unknown"===l(e.surface,e.requester))throw new m("unknown_principal","The caller is not a recognized principal.");if(!k(e.content))throw new m("invalid_request","content is required.");if(!k(e.idempotencyKey)||e.idempotencyKey.length>200)throw new m("invalid_request","An idempotency key (1-200 characters) is required.");let u=(i=e.surface,o=e.fingerprint,(0,t.createHash)("sha256").update(JSON.stringify([i,o??null])).digest("hex"));try{s=function(e,r){let{surface:i,requester:o}=e;return n.default.transaction(()=>{let s,d=n.default.prepare("SELECT * FROM conversation_intakes WHERE requester_kind = ? AND requester_id = ? AND idempotency_key = ?").get(o.kind,o.id,e.idempotencyKey);if(d){var u;if(d.request_hash!==r)throw new m("idempotency_conflict","The idempotency key was already used with a different payload.");let e=JSON.parse(d.work_request_ids);return{surface:d.surface,conversationId:d.conversation_id,acceptedMessageId:d.source_event_id,requestIds:e,requests:E(e),replayed:!0}}let c=Date.now();if("id"in e.conversation){let t=n.default.prepare("SELECT * FROM conversations WHERE id = ?").get(e.conversation.id);if(!t||(u=t.id,!n.default.prepare("SELECT 1 FROM conversation_participants WHERE conversation_id = ? AND participant_kind = ? AND participant_id = ?").get(u,o.kind,o.id)))throw new m("conversation_not_found","No conversation with that id is visible to this requester.");if(!h[i].includes(t.type))throw new m("conversation_not_writable","api"===i?"UI conversations are written through the UI compatibility routes.":"Agent conversations are written through the agent conversation API.");s=t}else{if("api"!==i)throw new m("invalid_request","Only the agent conversation API opens new conversations.");s={id:(0,t.randomUUID)(),type:"agent",origin_kind:o.kind,origin_id:o.id,created_at:c},n.default.prepare("INSERT INTO conversations (id, type, origin_kind, origin_id, created_at) VALUES (?, ?, ?, ?, ?)").run(s.id,s.type,o.kind,o.id,c),w(s.id,o,c)}let _=e.route(s),p=new Set,f=[];for(let e of _.deliveries){let t=e.conversationId??s.id,r=`${t}:${e.agentId}`;if(!p.has(r)){if(p.add(r),!k(e.agentId)||!n.bots.getById(e.agentId))throw new m("target_not_found","No registered agent has that id.");if("bot"===o.kind&&o.id===e.agentId)throw new m("invalid_request","An agent cannot address itself.");if(t!==s.id&&!n.default.prepare("SELECT 1 FROM conversations WHERE id = ?").get(t))throw new m("target_not_found","The target conversation does not exist.");f.push({agentId:e.agentId,conversationId:t})}}let g=new Map;for(let t of(g.set(s.id,y(i,s.id,o,e.content,_.handoffTargets,c)),f))g.has(t.conversationId)||g.set(t.conversationId,y(i,t.conversationId,o,e.content,_.handoffTargets,c));let v=(0,a.selectExecutionPolicy)({entryPoint:i,executionKind:"conversation"});if(!v.ok)throw new m("invalid_request",v.reason);let I=v.policy,R=l(i,o);if("unknown"===R)throw new m("unknown_principal","The caller is not a recognized principal.");let q={safety_version:1,root_principal:{kind:o.kind,id:o.id},wake_depth:0,grant_rule:"readonly_default",grant_id:null},b=[];for(let t of f){w(t.conversationId,{kind:"bot",id:t.agentId},c);let r=1===f.length?e.idempotencyKey:`${e.idempotencyKey}#${t.conversationId}:${t.agentId}`,{request:a}=n.engine.createOrGetWorkRequest({sourceConversationId:t.conversationId,sourceEventId:g.get(t.conversationId),requester:o,targetAgentId:t.agentId,intent:e.content,executionKind:I.execution_kind,toolProfile:I.tool_profile,idempotencyKey:r,policy:{source:"conversation_intake",surface:i},executionPolicy:I,rootPrincipal:o,wakeDepth:0,safetySnapshot:q,safety:{principalType:R,principal:o,decision:"allowed",grantRule:"readonly_default",snapshot:q,now:c},executor:e.executor,now:c});b.push(a.id)}for(let[e,t]of g){let r=f.flatMap((t,n)=>t.conversationId===e?[b[n]]:[]);1===r.length&&n.default.prepare("UPDATE messages SET request_id = ? WHERE id = ?").run(r[0],t)}return n.default.prepare(`
|
|
105
|
-
INSERT INTO conversation_intakes (
|
|
106
|
-
requester_kind, requester_id, idempotency_key, request_hash, surface,
|
|
107
|
-
conversation_id, source_event_id, work_request_ids, created_at
|
|
108
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
109
|
-
`).run(o.kind,o.id,e.idempotencyKey,r,i,s.id,g.get(s.id),JSON.stringify(b),c),{surface:i,conversationId:s.id,acceptedMessageId:g.get(s.id),requestIds:b,requests:E(b),replayed:!1}}).immediate()}(e,u)}catch(e){if(e instanceof m)throw e;if(e instanceof r.EngineStoreError&&"idempotency_conflict"===e.code)throw new m("idempotency_conflict","The idempotency key was already used with a different payload.");throw console.error("Conversation intake failed:",e),new m("intake_failed","The message could not be accepted.")}let c=e.dispatch;try{d=c(s)}catch(e){d=Promise.reject(e)}let _=Promise.resolve(d).catch(e=>{console.error("Intake dispatch failed:",e)});return{...s,dispatched:_}},"getAcceptedMessage",0,function(e){return n.default.prepare("SELECT * FROM messages WHERE id = ?").get(e)}],76459)}];
|
|
110
|
-
|
|
111
|
-
//# sourceMappingURL=lib_051fv4x._.js.map
|