@desplega.ai/agent-swarm 2.4.4 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/{acp-adapter-thq04adh.js → acp-adapter-11gp67nr.js} +8 -6
- package/dist/{actions-j6ywh6x5.js → actions-8p2kze8j.js} +24 -22
- package/dist/{amp-adapter-k8b5xmj8.js → amp-adapter-z4qvhacj.js} +2 -2
- package/dist/{anthropic-messages-g6pqmqk4.js → anthropic-messages-txs190dd.js} +17 -20
- package/dist/{app-rb7vc02s.js → app-0qp0a2gk.js} +3 -3
- package/dist/{assistant-ftta1zjf.js → assistant-jedd3ktm.js} +27 -25
- package/dist/{azure-openai-responses-9dbmj346.js → azure-openai-responses-9kfwhmn7.js} +18 -13
- package/dist/{boot-reembed-xns7h5h9.js → boot-reembed-4xwq5tg0.js} +1 -1
- package/dist/{boot-reembed-srp6v6af.js → boot-reembed-n4wq5dd2.js} +1 -1
- package/dist/{boot-scrub-sweep-3qqrh2mz.js → boot-scrub-sweep-69h90xcq.js} +4 -4
- package/dist/{boot-seeds-9ks8hce7.js → boot-seeds-3vn0m9sg.js} +4 -4
- package/dist/{claude-adapter-k5ksyres.js → claude-adapter-221mvad5.js} +8 -6
- package/dist/{claude-managed-adapter-h2y889ge.js → claude-managed-adapter-gt6pa35d.js} +2 -2
- package/dist/{claude-managed-setup-n5a5eqks.js → claude-managed-setup-c3hp36ph.js} +4 -4
- package/dist/{claude-sdk-session-2j3j4kwn.js → claude-sdk-session-8thjsk5e.js} +9729 -9628
- package/dist/{cli-b9fcxxev.js → cli-007cnhm1.js} +50 -4
- package/dist/{cli-j4rqdf2n.js → cli-03vpq45j.js} +2 -2
- package/dist/{cli-amyhm3gj.js → cli-0y6f0ckq.js} +1 -1
- package/dist/{cli-4dg55wsk.js → cli-0z3vjrpm.js} +1 -1
- package/dist/{cli-pccfmtb5.js → cli-179xcyky.js} +11 -11
- package/dist/{cli-3r8samv3.js → cli-1f0gp9vz.js} +3 -2
- package/dist/{cli-hj3debgw.js → cli-1pr672hz.js} +3 -3
- package/dist/{cli-0bqteszy.js → cli-2nf3b08t.js} +328 -25
- package/dist/{cli-t7cyef5g.js → cli-36j4jnk3.js} +4 -4
- package/dist/{cli-er83cjbn.js → cli-3qv8naq8.js} +527 -231
- package/dist/cli-3zwye9sn.js +1193 -0
- package/dist/{cli-60cgh1rv.js → cli-459fk97x.js} +7 -7
- package/dist/{cli-xj0re5tm.js → cli-4w24f7z3.js} +1 -1
- package/dist/{cli-v3yr2gbg.js → cli-5kzk3472.js} +2198 -968
- package/dist/{cli-h7gc0b4r.js → cli-5m84zd2k.js} +55 -18
- package/dist/{cli-w6nadkh4.js → cli-5rvg1ddk.js} +5 -5
- package/dist/{cli-dvkmp9bt.js → cli-6ctwrf1z.js} +20 -10
- package/dist/{cli-9qtjfd60.js → cli-6rg2jn2y.js} +3 -2
- package/dist/{cli-2v045xyf.js → cli-7bwtc6yx.js} +3 -3
- package/dist/{cli-3cgngyd8.js → cli-7g40g8hq.js} +35 -17
- package/dist/{cli-q6r7t299.js → cli-92mqenkc.js} +2379 -154
- package/dist/{cli-cynvc9fj.js → cli-9ce2xw98.js} +8 -8
- package/dist/{cli-gqvh8d8a.js → cli-bgdtv62r.js} +36 -22
- package/dist/{cli-wxbn3yfx.js → cli-cz5nmdxt.js} +2 -2
- package/dist/{cli-wt645v7q.js → cli-dabehxhp.js} +1 -1
- package/dist/{cli-vfha21c9.js → cli-e5bxnjps.js} +2 -2
- package/dist/{cli-p20r8w42.js → cli-fcc5qe3f.js} +763 -268
- package/dist/{cli-1ephgwnq.js → cli-fes51ya2.js} +3 -3
- package/dist/{cli-1d70crsy.js → cli-ftmq4nvk.js} +2 -2
- package/dist/{cli-qkhc5aqy.js → cli-fy1jyyym.js} +13 -13
- package/dist/{cli-s95dknxh.js → cli-g1cw7xtt.js} +1 -1
- package/dist/{cli-qje9k2nh.js → cli-g9ypd5en.js} +12 -2
- package/dist/{cli-74c1wpm0.js → cli-gpv60278.js} +1 -1
- package/dist/{cli-pemywhfq.js → cli-ha9rmwgq.js} +2 -1
- package/dist/{cli-bnz0r3kc.js → cli-j1eghqfm.js} +5 -5
- package/dist/{cli-2zqpkvtt.js → cli-jpxsrxcb.js} +1 -1
- package/dist/{cli-ejs3m1sx.js → cli-kxpfx2xr.js} +1 -1
- package/dist/{cli-37yb7307.js → cli-mbfj11fq.js} +1 -1
- package/dist/{cli-pnp2j5zg.js → cli-mmhj8vd7.js} +2 -2
- package/dist/{cli-xf234ws8.js → cli-n4c8e3s5.js} +2 -0
- package/dist/{cli-a0kcty51.js → cli-n6kmqngw.js} +2 -2
- package/dist/{cli-te6b5wvg.js → cli-nnvjb17s.js} +3 -3
- package/dist/{cli-1dmcq2eh.js → cli-nzfnt2gs.js} +1 -1
- package/dist/{cli-625tb7aq.js → cli-p859hcc8.js} +2 -2
- package/dist/{cli-smvcw9z5.js → cli-pasyvjmm.js} +1 -1
- package/dist/cli-pkaqk57w.js +128 -0
- package/dist/{cli-8nyhf7za.js → cli-qqzmjxkf.js} +129 -105
- package/dist/{cli-zrwpctp4.js → cli-r25qpaxt.js} +161 -63
- package/dist/{cli-nc35pxb7.js → cli-rh5smt8t.js} +19 -4
- package/dist/{cli-qwkcwjdn.js → cli-rycdaj0a.js} +1 -1
- package/dist/{cli-esxerzg7.js → cli-s4sntwt4.js} +2 -2
- package/dist/{cli-b8k7epj1.js → cli-segs7hx9.js} +8 -8
- package/dist/{cli-36ckw0wx.js → cli-stxdrqs2.js} +2 -2
- package/dist/{cli-vdm20wej.js → cli-sy8f9705.js} +4 -4
- package/dist/{cli-1m17dc9d.js → cli-ta8bd7th.js} +2 -2
- package/dist/{cli-2y91wnbh.js → cli-we0ra057.js} +222 -10
- package/dist/{cli-55qmbp6z.js → cli-x21dqn18.js} +5 -5
- package/dist/{cli-dqb4n629.js → cli-x6vf4sad.js} +11 -11
- package/dist/{cli-d2mb5s8a.js → cli-x77gen2p.js} +680 -440
- package/dist/{cli-vq97g1jq.js → cli-xawhpgc9.js} +95 -195
- package/dist/{cli-82d3nkc3.js → cli-xd4eqtr2.js} +2 -2
- package/dist/{cli-9fhkkpj5.js → cli-xt768r5m.js} +2 -2
- package/dist/{cli-zrk6jxv8.js → cli-y4x8ww6s.js} +2 -2
- package/dist/{cli-xc27fwzg.js → cli-y9jvxfhk.js} +3 -3
- package/dist/{cli-44159k28.js → cli-z63a269p.js} +2 -2
- package/dist/{cli-sm8rses9.js → cli-zfdp01hn.js} +8 -5
- package/dist/cli.js +31 -29
- package/dist/{cloudflare-workers-ai-system-one-ch2wxfcp.js → cloudflare-workers-ai-system-one-43v9qkjk.js} +7 -2
- package/dist/{codex-adapter-968xwfy7.js → codex-adapter-tcg1q3jk.js} +6 -4
- package/dist/{codex-login-m819c41r.js → codex-login-rn7c5gxt.js} +1 -1
- package/dist/{codex-session-runner-ht4z99fa.js → codex-session-runner-xfx4wd9x.js} +7 -5
- package/dist/{commands-pcymaeg9.js → commands-ew83nj70.js} +2 -2
- package/dist/{controller-fpjyk46r.js → controller-gnq1k1mf.js} +4 -4
- package/dist/{controllers-connect-mwzx1fh6.js → controllers-connect-tw1dan9r.js} +26 -24
- package/dist/{cursor-adapter-cp4s2e2f.js → cursor-adapter-yq5xgfcg.js} +1 -1
- package/dist/{db-xsjg9jqq.js → db-7gbc53fd.js} +14 -2
- package/dist/{db-sgd12bt9.js → db-t86xrnes.js} +3 -3
- package/dist/{devin-adapter-zgqadvnm.js → devin-adapter-4ycy4vrf.js} +1 -1
- package/dist/{dispatcher-x0jfw2c9.js → dispatcher-64bdyhps.js} +23 -21
- package/dist/{docker-fkgtr75t.js → docker-nfy2gc8t.js} +2 -2
- package/dist/{dsh-adapter-jrq7ma7h.js → dsh-adapter-tvhc4k2d.js} +1 -1
- package/dist/{e2b-16d6ch39.js → e2b-9gkdhm3c.js} +2 -2
- package/dist/{e2b-zn0b4w5w.js → e2b-cjtf8k1z.js} +2 -2
- package/dist/{easter-egg-3d-5cgynaja.js → easter-egg-3d-e4qv8dxj.js} +1 -1
- package/dist/{event-bus-9vpk8gmq.js → event-bus-3z78ep5n.js} +1 -1
- package/dist/{execute-t4e6m3rw.js → execute-0xpz8950.js} +85 -23
- package/dist/{external-channel-8njj4h3b.js → external-channel-e9nw24zv.js} +2 -2
- package/dist/{google-generative-ai-bmq8gkf3.js → google-generative-ai-mk9vcpe1.js} +15 -15
- package/dist/{google-vertex-b1rvp52s.js → google-vertex-q580kz8k.js} +20 -20
- package/dist/{grok-adapter-kkr97v2f.js → grok-adapter-v82srhrx.js} +9 -7
- package/dist/handlers-c9ajzhbn.js +41 -0
- package/dist/{heartbeat-wd03zhn0.js → heartbeat-2vqs1319.js} +26 -24
- package/dist/{hook-xzj2ts2p.js → hook-01nk13wx.js} +7 -5
- package/dist/{hook-f0vghj42.js → hook-jzpheegg.js} +9 -7
- package/dist/{http-4hwxv62p.js → http-fc1k6ec8.js} +859 -252
- package/dist/index-07ef7nkm.js +42 -0
- package/dist/{index-g6tbb6ve.js → index-31ceyf42.js} +1 -1
- package/dist/index-7yts8n9s.js +43 -0
- package/dist/{index-c4ykd0f1.js → index-dr94zbnh.js} +13348 -11611
- package/dist/index-q3t40ryv.js +46 -0
- package/dist/{index-ww2vznkp.js → index-sepja052.js} +1 -1
- package/dist/{index-97q4xn03.js → index-zdycv3ja.js} +135 -79
- package/dist/{index-g216q6jr.js → index-zsyx51ap.js} +1 -4
- package/dist/{keepalive-hrh7xnr9.js → keepalive-5nh2rhmr.js} +4 -4
- package/dist/lead-aayq64jn.js +79 -0
- package/dist/{llama-cpp-classify-vv43gswy.js → llama-cpp-classify-ee7vmd7q.js} +4 -1
- package/dist/{maintenance-e8wnwnqx.js → maintenance-hjhzdt3k.js} +1 -1
- package/dist/{mistral-conversations-1medfwv7.js → mistral-conversations-sd0xf1tn.js} +13 -13
- package/dist/{node-3v3f08f7.js → node-jzjj7r9x.js} +10 -9
- package/dist/{oauth-refresh-sweep-zm0yj4sj.js → oauth-refresh-sweep-y3n1knmd.js} +3 -3
- package/dist/{onboard-dtwcq603.js → onboard-1zq3m7db.js} +2 -2
- package/dist/{openai-codex-responses-de9pvs4d.js → openai-codex-responses-79s8xnbh.js} +29 -23
- package/dist/{openai-completions-mtqge3nf.js → openai-completions-tdbyts0x.js} +21 -20
- package/dist/{openai-decisions-ygk4kkxd.js → openai-decisions-bqhnjyfz.js} +2 -1
- package/dist/{openai-responses-dkyng71g.js → openai-responses-dm3t5vqp.js} +26 -17
- package/dist/{opencode-adapter-x4tqzhkh.js → opencode-adapter-e56086m1.js} +7 -5
- package/dist/{openrouter-images-wvv7camj.js → openrouter-images-ssttr1y4.js} +6 -3
- package/dist/{otel-impl-w3fbhpn0.js → otel-impl-h9yyza47.js} +2 -2
- package/dist/{pi-messages-nhh1pkz2.js → pi-messages-3nf8bq1a.js} +6 -4
- package/dist/{pi-mono-adapter-mcfkn9vf.js → pi-mono-adapter-tzps8f38.js} +9 -37
- package/dist/{pricing-refresh-j38dehfs.js → pricing-refresh-nevhat8h.js} +3 -3
- package/dist/{rbac-roles-ae8yttq4.js → rbac-roles-4y6ngvzq.js} +1 -1
- package/dist/{rbac-roles-ejxx9b35.js → rbac-roles-exbg8xb6.js} +2 -2
- package/dist/{registry-rxw10xzg.js → registry-ajhexe44.js} +1 -1
- package/dist/{render-v2-n16n0phe.js → render-v2-cfsh13z3.js} +3 -3
- package/dist/{resume-z0fgjc38.js → resume-5s2t0dbs.js} +10 -8
- package/dist/{runtime-xe3aqy4x.js → runtime-bt5pkpm1.js} +1 -1
- package/dist/{session-access-cv3mq6mc.js → session-access-dnbyp3cn.js} +6 -4
- package/dist/{setup-mafhj3yt.js → setup-1wj1y77j.js} +1 -1
- package/dist/{typesafe-system-one-2hgpayzy.js → typesafe-system-one-bre38hvs.js} +4 -2
- package/dist/{virtual-modules-4r3zkc20.js → virtual-modules-mnfbh5mr.js} +8 -2
- package/dist/{work-objects-8b86mgjp.js → work-objects-7mg6216g.js} +26 -24
- package/dist/worker-nwb789mg.js +79 -0
- package/dist/{x-y45mthwn.js → x-pbpezr0s.js} +2 -2
- package/openapi.json +793 -6
- package/package.json +11 -11
- package/src/apps/catalog.generated.json +206 -4
- package/src/apps/page-validator.ts +13 -1
- package/src/assets/key.ts +17 -0
- package/src/azure-devops/handlers.ts +1 -1
- package/src/be/chunking.ts +42 -9
- package/src/be/db/approvals.ts +18 -0
- package/src/be/db/session-moves.ts +164 -0
- package/src/be/db/session-tree.ts +384 -0
- package/src/be/db/tasks/draft-text.ts +15 -0
- package/src/be/db/tasks/read.ts +54 -5
- package/src/be/db/workflow-runs.ts +96 -0
- package/src/be/db.ts +85 -237
- package/src/be/memory/index-content.ts +36 -17
- package/src/be/memory/providers/openai-embedding.ts +115 -61
- package/src/be/memory/providers/sqlite-store.ts +69 -23
- package/src/be/memory/reranker.ts +31 -1
- package/src/be/memory/search-candidates.ts +47 -0
- package/src/be/memory/types.ts +14 -0
- package/src/be/onboarding.ts +3 -0
- package/src/be/scripts/typecheck.ts +2 -0
- package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +106 -54
- package/src/be/seed-scripts/index.ts +2 -2
- package/src/be/skill-sync.ts +43 -2
- package/src/be/swarm-config-guard.ts +25 -1
- package/src/be/task-attachment-store.ts +30 -0
- package/src/bitbucket/api.ts +81 -0
- package/src/bitbucket/auth.ts +64 -0
- package/src/bitbucket/handlers.ts +434 -0
- package/src/bitbucket/index.ts +28 -0
- package/src/bitbucket/templates.ts +134 -0
- package/src/bitbucket/types.ts +65 -0
- package/src/commands/runner.ts +55 -3
- package/src/e2b/env.ts +1 -0
- package/src/extensions/catalog.generated.json +4 -4
- package/src/extensions/contract-types.generated.ts +1 -1
- package/src/extensions/contract.ts +9 -2
- package/src/extensions/post-bridge.ts +1 -0
- package/src/fs/provider.ts +13 -1
- package/src/github/handlers.ts +6 -6
- package/src/gitlab/handlers.ts +5 -5
- package/src/heartbeat/heartbeat.ts +31 -11
- package/src/http/assets.ts +14 -2
- package/src/http/core.ts +12 -0
- package/src/http/fs.ts +54 -34
- package/src/http/index.ts +4 -0
- package/src/http/mcp-body.ts +37 -0
- package/src/http/mcp-user.ts +3 -5
- package/src/http/mcp.ts +6 -7
- package/src/http/memory.ts +26 -15
- package/src/http/onboarding.ts +1 -0
- package/src/http/page-proxy.ts +61 -5
- package/src/http/pages-public.ts +27 -44
- package/src/http/pages.ts +4 -4
- package/src/http/script-runs.ts +2 -0
- package/src/http/sessions.ts +366 -12
- package/src/http/skills.ts +48 -1
- package/src/http/tasks.ts +1 -1
- package/src/http/users.ts +13 -1
- package/src/http/webhooks.ts +141 -0
- package/src/integrations/chat-sdk/adapters.ts +24 -4
- package/src/integrations/chat-sdk/attachments.ts +90 -12
- package/src/integrations/chat-sdk/facts.ts +138 -0
- package/src/integrations/chat-sdk/inbound.ts +156 -8
- package/src/integrations/chat-sdk/limits.ts +24 -0
- package/src/integrations/chat-sdk/outbound-files.ts +186 -0
- package/src/integrations/chat-sdk/outbound.ts +272 -5
- package/src/integrations/chat-sdk/relay.ts +4 -1
- package/src/integrations/chat-sdk/router.ts +28 -2
- package/src/integrations/chat-sdk/steering.ts +9 -0
- package/src/integrations/chat-sdk/templates.ts +14 -0
- package/src/integrations/chat-sdk/thread-buffer.ts +4 -0
- package/src/mcp-limits.ts +20 -0
- package/src/pages/browser-sdk.ts +8 -3
- package/src/pages/feedback-overlay.ts +1 -1
- package/src/providers/acp-targets.ts +1 -1
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/codex-adapter.ts +106 -119
- package/src/providers/codex-agents-md.ts +35 -229
- package/src/providers/cursor-adapter.ts +1 -1
- package/src/providers/pi-mono-adapter.ts +5 -53
- package/src/realtime/transport.ts +1 -2
- package/src/script-workflows/workflow-ctx.ts +1 -0
- package/src/scripts-runtime/types/stdlib.d.ts +2 -0
- package/src/scripts-runtime/types/swarm-extension.d.ts +14 -4
- package/src/scripts-runtime/types/swarm-sdk.d.ts +2 -0
- package/src/server-user.ts +2 -0
- package/src/server.ts +2 -0
- package/src/slack/assistant.ts +2 -2
- package/src/slack/files.ts +2 -0
- package/src/slack/handlers.test.ts +158 -0
- package/src/slack/handlers.ts +23 -32
- package/src/slack/inbound-files.ts +39 -6
- package/src/slack/thread-buffer.ts +2 -1
- package/src/tasks/context-key.ts +61 -1
- package/src/tasks/task-terminal-effects.ts +21 -17
- package/src/tests/apps-card-grid.test.ts +197 -0
- package/src/tests/apps-catalog-additions.test.ts +120 -0
- package/src/tests/apps-tree.test.ts +129 -0
- package/src/tests/bitbucket-auth.test.ts +156 -0
- package/src/tests/bitbucket-handlers.test.ts +425 -0
- package/src/tests/bitbucket-webhook.test.ts +220 -0
- package/src/tests/chat-sdk-attachments-reply.test.ts +52 -0
- package/src/tests/chat-sdk-config.test.ts +11 -0
- package/src/tests/chat-sdk-facts.test.ts +23 -0
- package/src/tests/chat-sdk-inbound.test.ts +597 -4
- package/src/tests/chat-sdk-outbound-files.test.ts +652 -0
- package/src/tests/chat-sdk-telegram-markdown.test.ts +92 -0
- package/src/tests/codex-adapter.test.ts +167 -242
- package/src/tests/config-api-only-keys.test.ts +9 -0
- package/src/tests/context-key.test.ts +50 -0
- package/src/tests/core-auth.test.ts +5 -0
- package/src/tests/cors-allowlist.test.ts +1 -1
- package/src/tests/db-task-read-contract.test.ts +7 -0
- package/src/tests/db-task-write-contract.test.ts +6 -0
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/extensions-example-slack-reply-gate.test.ts +262 -91
- package/src/tests/fixtures/bitbucket/pullrequest-comment-created-inline.json +174 -0
- package/src/tests/fixtures/bitbucket/pullrequest-comment-created.json +170 -0
- package/src/tests/fixtures/bitbucket/pullrequest-created-mention.json +132 -0
- package/src/tests/fixtures/bitbucket/pullrequest-created-reviewer.json +140 -0
- package/src/tests/fixtures/bitbucket/pullrequest-fulfilled.json +134 -0
- package/src/tests/fixtures/bitbucket/pullrequest-rejected.json +133 -0
- package/src/tests/generate-mcp-docs.test.ts +101 -0
- package/src/tests/gitlab-handlers.test.ts +3 -3
- package/src/tests/gitlab-vcs-db.test.ts +4 -4
- package/src/tests/heartbeat-checklist.test.ts +33 -0
- package/src/tests/heartbeat-jev-gate-credentials.test.ts +44 -0
- package/src/tests/heartbeat-jev-gate.test.ts +242 -1
- package/src/tests/integration-disable-flags.test.ts +36 -0
- package/src/tests/kv-page-proxy.test.ts +91 -5
- package/src/tests/launch-password-rejection.test.ts +2 -2
- package/src/tests/mcp-input-caps.test.ts +294 -0
- package/src/tests/mcp-tools.test.ts +1 -1
- package/src/tests/memory-chunked-search-starvation.test.ts +200 -0
- package/src/tests/memory-embedding-input-cap.test.ts +114 -0
- package/src/tests/memory.test.ts +14 -0
- package/src/tests/onboarding.test.ts +12 -0
- package/src/tests/page-guest-session.test.ts +19 -8
- package/src/tests/page-proxy-authed.test.ts +1 -1
- package/src/tests/page-proxy.test.ts +17 -10
- package/src/tests/page-session.test.ts +102 -1
- package/src/tests/pages-authed-mode.test.ts +82 -12
- package/src/tests/pages-password-mode.test.ts +5 -5
- package/src/tests/pi-codemode.test.ts +8 -2
- package/src/tests/preload-env.test.ts +57 -0
- package/src/tests/preload.ts +21 -0
- package/src/tests/prompt-template-remaining.test.ts +38 -0
- package/src/tests/realtime-transport.test.ts +13 -7
- package/src/tests/run-root-coverage.test.ts +39 -0
- package/src/tests/runner-bitbucket-vcs.test.ts +191 -0
- package/src/tests/runner-skills-refresh.test.ts +58 -0
- package/src/tests/script-runs-http.test.ts +84 -0
- package/src/tests/scripts-http.test.ts +10 -1
- package/src/tests/secret-scrubber.test.ts +15 -0
- package/src/tests/sessions-move.test.ts +576 -0
- package/src/tests/sessions-tree.test.ts +493 -0
- package/src/tests/skill-files-http.test.ts +50 -0
- package/src/tests/skills-bundle.test.ts +99 -0
- package/src/tests/swarm-config-export-to-env.test.ts +23 -3
- package/src/tests/task-audio-transcription.test.ts +299 -0
- package/src/tests/task-completion-memory-chunking.test.ts +434 -0
- package/src/tests/task-terminal-secret-scrub.test.ts +6 -1
- package/src/tests/transcription.test.ts +299 -0
- package/src/tests/vcs-bitbucket.test.ts +91 -0
- package/src/tests/vcs-provider-isolation.test.ts +123 -0
- package/src/tests/vcs-provider.test.ts +16 -1
- package/src/tests/vcs-tracking.test.ts +3 -3
- package/src/tests/workflow-foreach-bodies.test.ts +637 -0
- package/src/tests/workflow-foreach-concurrency.test.ts +342 -0
- package/src/tests/workflow-foreach-retry.test.ts +537 -0
- package/src/tests/workflow-foreach.test.ts +44 -23
- package/src/tests/workflow-step-claims.test.ts +6 -6
- package/src/tests/workflow-system-one-decision-providers.test.ts +98 -1
- package/src/tests/workflow-system-one-decision.test.ts +2 -1
- package/src/tests/workflow-tla-races.test.ts +2 -2
- package/src/tools/chat-access.ts +10 -0
- package/src/tools/chat-post.ts +31 -11
- package/src/tools/chat-reply.ts +32 -10
- package/src/tools/memory-search.ts +3 -1
- package/src/tools/script-delete.ts +1 -1
- package/src/tools/system-one-decide.ts +17 -4
- package/src/tools/workflows/create-workflow.ts +5 -3
- package/src/types.ts +9 -2
- package/src/utils/config-env-export.ts +4 -1
- package/src/utils/page-session.ts +133 -20
- package/src/utils/secret-scrubber.ts +4 -0
- package/src/utils/skills-refresh.ts +83 -43
- package/src/utils/transcription.ts +246 -0
- package/src/vcs/bitbucket.ts +58 -0
- package/src/vcs/index.ts +2 -0
- package/src/vcs/types.ts +2 -2
- package/src/workflows/approval-resolution.ts +4 -1
- package/src/workflows/checkpoint.ts +9 -1
- package/src/workflows/constants.ts +3 -0
- package/src/workflows/definition.ts +48 -17
- package/src/workflows/engine.ts +25 -15
- package/src/workflows/executors/foreach.ts +45 -99
- package/src/workflows/executors/system-one-decision.ts +28 -7
- package/src/workflows/executors/system-one-providers.ts +39 -4
- package/src/workflows/foreach-body.ts +146 -0
- package/src/workflows/foreach-driver.ts +552 -0
- package/src/workflows/foreach-join.ts +206 -7
- package/src/workflows/node-timeout.ts +21 -0
- package/src/workflows/recovery.ts +68 -3
- package/src/workflows/resume.ts +221 -43
- package/src/workflows/retry-poller.ts +39 -24
- package/src/workflows/step-input.ts +59 -0
- package/src/workflows/task-step-routing.ts +114 -56
- package/templates/extensions/slack-reply-gate/README.md +24 -22
- package/templates/extensions/slack-reply-gate/hooks.ts +146 -95
- package/templates/extensions/slack-reply-gate/manifest.json +2 -2
- package/templates/skills/apps/SKILL.md +28 -6
- package/templates/skills/apps/content.md +28 -6
- package/templates/skills/chat-sdk/content.md +6 -2
- package/templates/skills/code-quality/content.md +2 -1
- package/templates/skills/heartbeat-runbook/content.md +5 -5
- package/templates/skills/pages/content.md +6 -4
- package/templates/skills/slack-interaction/content.md +5 -0
- package/templates/skills/swarm-scripts/SKILL.md +2 -2
- package/templates/skills/swarm-scripts/content.md +2 -2
- package/templates/skills/work-on-task/SKILL.md +1 -1
- package/templates/skills/work-on-task/content.md +1 -1
- package/dist/cli-51y09c6p.js +0 -2657
- package/dist/cli-yw91rnmw.js +0 -13
- package/dist/handlers-0pvee9nw.js +0 -39
- package/dist/index-gdh8jrdm.js +0 -43
- package/dist/index-hg0x2cdv.js +0 -40
- package/dist/index-thm0y6a8.js +0 -41
- package/dist/lead-ee8vazz2.js +0 -77
- package/dist/worker-16s75hm5.js +0 -77
|
@@ -5,12 +5,16 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
normalizeAssetKey,
|
|
7
7
|
defaultAssetKey,
|
|
8
|
+
keyPrefixRange,
|
|
9
|
+
SESSION_LEAF_KINDS,
|
|
10
|
+
sessionGroupKey,
|
|
8
11
|
parseAssetKey,
|
|
9
12
|
isCanonicalAssetKey,
|
|
10
13
|
init_key,
|
|
11
14
|
MODEL_TIERS,
|
|
12
15
|
ReasoningEffortSchema,
|
|
13
16
|
parseModelTier,
|
|
17
|
+
TERMINAL_TASK_STATUSES,
|
|
14
18
|
isTerminalTaskStatus,
|
|
15
19
|
ProviderNameSchema,
|
|
16
20
|
PROVIDER_STEER_CAPABILITIES,
|
|
@@ -22,7 +26,7 @@ import {
|
|
|
22
26
|
VersionableFieldSchema,
|
|
23
27
|
SessionCostModelBreakdownSchema,
|
|
24
28
|
init_types
|
|
25
|
-
} from "./cli-
|
|
29
|
+
} from "./cli-rh5smt8t.js";
|
|
26
30
|
import {
|
|
27
31
|
generateDefaultClaudeMd2,
|
|
28
32
|
generateDefaultSoulMd2,
|
|
@@ -36,7 +40,7 @@ import {
|
|
|
36
40
|
init_identity_field_budget,
|
|
37
41
|
contentSha256,
|
|
38
42
|
init_profile_sync
|
|
39
|
-
} from "./cli-
|
|
43
|
+
} from "./cli-gpv60278.js";
|
|
40
44
|
import {
|
|
41
45
|
isSlackConfigured,
|
|
42
46
|
init_config
|
|
@@ -105,7 +109,7 @@ import {
|
|
|
105
109
|
import {
|
|
106
110
|
init_package,
|
|
107
111
|
package_default
|
|
108
|
-
} from "./cli-
|
|
112
|
+
} from "./cli-179xcyky.js";
|
|
109
113
|
import {
|
|
110
114
|
realtimeBus,
|
|
111
115
|
init_bus
|
|
@@ -120,7 +124,7 @@ import {
|
|
|
120
124
|
registerVolatileSecret,
|
|
121
125
|
registerSensitiveKeyName,
|
|
122
126
|
init_secret_scrubber
|
|
123
|
-
} from "./cli-
|
|
127
|
+
} from "./cli-n4c8e3s5.js";
|
|
124
128
|
import {
|
|
125
129
|
isAlias,
|
|
126
130
|
parseAlias,
|
|
@@ -219,6 +223,21 @@ function azureDevOpsWorkItemContextKey(input) {
|
|
|
219
223
|
}
|
|
220
224
|
return ["task", "trackers", "azure-devops", organization, "workitem", workItemId].join(SEPARATOR);
|
|
221
225
|
}
|
|
226
|
+
function bitbucketContextKey({
|
|
227
|
+
repoUuid,
|
|
228
|
+
pullRequestId
|
|
229
|
+
}) {
|
|
230
|
+
const rawUuid = typeof repoUuid === "string" ? repoUuid.trim().replace(/^\{|\}$/g, "") : repoUuid;
|
|
231
|
+
const uuid = assertSafePart(rawUuid, "repoUuid").toLowerCase();
|
|
232
|
+
if (/[{}]/.test(uuid)) {
|
|
233
|
+
throw new Error(`context-key: bitbucket "repoUuid" has unbalanced braces (got ${JSON.stringify(repoUuid)})`);
|
|
234
|
+
}
|
|
235
|
+
const id = assertSafePart(pullRequestId, "pullRequestId");
|
|
236
|
+
if (!/^\d+$/.test(id)) {
|
|
237
|
+
throw new Error(`context-key: bitbucket "pullRequestId" must be a positive integer (got ${JSON.stringify(id)})`);
|
|
238
|
+
}
|
|
239
|
+
return ["task", "trackers", "bitbucket", uuid, "pr", id].join(SEPARATOR);
|
|
240
|
+
}
|
|
222
241
|
function linearContextKey(input) {
|
|
223
242
|
const issueIdentifier = assertSafePart(input.issueIdentifier, "issueIdentifier");
|
|
224
243
|
return ["task", "trackers", "linear", issueIdentifier].join(SEPARATOR);
|
|
@@ -362,6 +381,21 @@ function parseContextKey(key) {
|
|
|
362
381
|
parts: { repositoryId: parts[3], kind: "pr", pullRequestId }
|
|
363
382
|
};
|
|
364
383
|
}
|
|
384
|
+
if (subFamily === "bitbucket") {
|
|
385
|
+
if (parts.length !== 6 || parts[4] !== "pr" || !parts[3]) {
|
|
386
|
+
throw new Error(`context-key: malformed bitbucket key: ${JSON.stringify(key)}`);
|
|
387
|
+
}
|
|
388
|
+
const idStr = parts[5];
|
|
389
|
+
const pullRequestId = Number.parseInt(idStr, 10);
|
|
390
|
+
if (!/^\d+$/.test(idStr) || !Number.isFinite(pullRequestId)) {
|
|
391
|
+
throw new Error(`context-key: malformed bitbucket pullRequestId "${idStr}": ${JSON.stringify(key)}`);
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
family: "trackers",
|
|
395
|
+
subFamily: "bitbucket",
|
|
396
|
+
parts: { repoUuid: parts[3], kind: "pr", pullRequestId }
|
|
397
|
+
};
|
|
398
|
+
}
|
|
365
399
|
if (subFamily === "linear") {
|
|
366
400
|
if (parts.length !== 4) {
|
|
367
401
|
throw new Error(`context-key: malformed linear key: ${JSON.stringify(key)}`);
|
|
@@ -4837,7 +4871,7 @@ var init_runtime = __esm(() => {
|
|
|
4837
4871
|
// src/telemetry-identity.ts
|
|
4838
4872
|
async function loadUserRole(userId) {
|
|
4839
4873
|
try {
|
|
4840
|
-
const { getUserGrant } = await import("./rbac-roles-
|
|
4874
|
+
const { getUserGrant } = await import("./rbac-roles-exbg8xb6.js");
|
|
4841
4875
|
const grant = await getUserGrant(userId);
|
|
4842
4876
|
const role = grant.grantsAll ? "admin" : "member";
|
|
4843
4877
|
const user = await getDbClient2().get("SELECT json_extract(metadata, '$.jobFunction') AS jobFunction FROM users WHERE id = ? AND json_valid(metadata)", [userId]);
|
|
@@ -5047,8 +5081,10 @@ var init_config_env_export = __esm(() => {
|
|
|
5047
5081
|
"JIRA_CLIENT_SECRET",
|
|
5048
5082
|
"JIRA_WEBHOOK_TOKEN",
|
|
5049
5083
|
"AZURE_DEVOPS_WEBHOOK_SECRET",
|
|
5084
|
+
"BITBUCKET_WEBHOOK_SECRET",
|
|
5050
5085
|
"AGENTMAIL_WEBHOOK_SECRET",
|
|
5051
|
-
"API_AGENT_FS_API_KEY"
|
|
5086
|
+
"API_AGENT_FS_API_KEY",
|
|
5087
|
+
"TRANSCRIPTION_API_KEY"
|
|
5052
5088
|
]);
|
|
5053
5089
|
ENV_EXPORT_DEFAULT_OFF_KEYS = new Set([
|
|
5054
5090
|
"KAPSO_WEBHOOK_HMAC_SECRET",
|
|
@@ -5582,6 +5618,13 @@ function scrubApprovalVotesJson(approvals) {
|
|
|
5582
5618
|
return scrubbed;
|
|
5583
5619
|
return JSON.stringify(scrubObject(approvals));
|
|
5584
5620
|
}
|
|
5621
|
+
async function getPendingApprovalsForTasks2(taskIds) {
|
|
5622
|
+
if (!taskIds.length)
|
|
5623
|
+
return [];
|
|
5624
|
+
return getDbClient2().query(`SELECT id, status, sourceTaskId, title FROM approval_requests
|
|
5625
|
+
WHERE sourceTaskId IN (${taskIds.map(() => "?").join(",")}) AND status = 'pending'
|
|
5626
|
+
ORDER BY createdAt, id`, taskIds);
|
|
5627
|
+
}
|
|
5585
5628
|
var init_approvals = __esm(() => {
|
|
5586
5629
|
init_secret_scrubber();
|
|
5587
5630
|
init_date_utils();
|
|
@@ -5976,14 +6019,23 @@ async function getTasksByStatus2(status) {
|
|
|
5976
6019
|
const rows = await getDbClient2().query("SELECT * FROM agent_tasks WHERE status = ? ORDER BY createdAt DESC", [status]);
|
|
5977
6020
|
return rows.map(rowToAgentTask);
|
|
5978
6021
|
}
|
|
5979
|
-
async function findTaskByVcs2(vcsRepo, vcsNumber) {
|
|
6022
|
+
async function findTaskByVcs2(vcsRepo, vcsNumber, vcsProvider) {
|
|
6023
|
+
const providerClause = vcsProvider === "github" ? "(vcsProvider = ? OR vcsProvider IS NULL)" : "vcsProvider = ?";
|
|
5980
6024
|
const row = await getDbClient2().get(`SELECT * FROM agent_tasks
|
|
5981
|
-
WHERE vcsRepo = ? AND vcsNumber = ?
|
|
6025
|
+
WHERE vcsRepo = ? AND vcsNumber = ? AND ${providerClause}
|
|
5982
6026
|
AND status NOT IN ('completed', 'failed', 'cancelled', 'superseded')
|
|
5983
6027
|
ORDER BY createdAt DESC
|
|
5984
|
-
LIMIT 1`, [vcsRepo, vcsNumber]);
|
|
6028
|
+
LIMIT 1`, [vcsRepo, vcsNumber, vcsProvider]);
|
|
5985
6029
|
return row ? rowToAgentTask(row) : null;
|
|
5986
6030
|
}
|
|
6031
|
+
async function findActiveTasksByVcs2(vcsRepo, vcsNumber, vcsProvider) {
|
|
6032
|
+
const providerClause = vcsProvider === "github" ? "(vcsProvider = ? OR vcsProvider IS NULL)" : "vcsProvider = ?";
|
|
6033
|
+
const rows = await getDbClient2().query(`SELECT * FROM agent_tasks
|
|
6034
|
+
WHERE vcsRepo = ? AND vcsNumber = ? AND ${providerClause}
|
|
6035
|
+
AND status NOT IN ('completed', 'failed', 'cancelled', 'superseded')
|
|
6036
|
+
ORDER BY createdAt DESC`, [vcsRepo, vcsNumber, vcsProvider]);
|
|
6037
|
+
return rows.map(rowToAgentTask);
|
|
6038
|
+
}
|
|
5987
6039
|
function readableSessionCondition(userId, taskIdColumn = "agent_tasks.id", opts = {}) {
|
|
5988
6040
|
const otherOwner = userId ? "r.requestedByUserId IS NOT NULL AND r.requestedByUserId != ?" : "r.requestedByUserId IS NOT NULL";
|
|
5989
6041
|
const shareMatch = userId ? "(s.userId IS NULL OR s.userId = ?)" : "s.userId IS NULL";
|
|
@@ -6531,12 +6583,22 @@ async function getLatestLeadTaskInThread2(channelId, threadTs) {
|
|
|
6531
6583
|
LIMIT 1`, [channelId, threadTs]);
|
|
6532
6584
|
return row ? rowToAgentTask(row) : null;
|
|
6533
6585
|
}
|
|
6534
|
-
async function getAgentWorkingOnContextKey2(contextKey, source) {
|
|
6586
|
+
async function getAgentWorkingOnContextKey2(contextKey, source, endedSince) {
|
|
6535
6587
|
const taskRow = await getDbClient2().get(`SELECT agentId FROM agent_tasks
|
|
6536
6588
|
WHERE contextKey = ?
|
|
6537
6589
|
AND (? IS NULL OR source = ?)
|
|
6590
|
+
AND (? IS NULL
|
|
6591
|
+
OR status NOT IN (${TERMINAL_TASK_STATUSES.map(() => "?").join(", ")})
|
|
6592
|
+
OR finishedAt >= ?)
|
|
6538
6593
|
ORDER BY createdAt DESC, rowid DESC
|
|
6539
|
-
LIMIT 1`, [
|
|
6594
|
+
LIMIT 1`, [
|
|
6595
|
+
contextKey,
|
|
6596
|
+
source ?? null,
|
|
6597
|
+
source ?? null,
|
|
6598
|
+
endedSince ?? null,
|
|
6599
|
+
...TERMINAL_TASK_STATUSES,
|
|
6600
|
+
endedSince ?? null
|
|
6601
|
+
]);
|
|
6540
6602
|
if (taskRow?.agentId)
|
|
6541
6603
|
return getAgentById2(taskRow.agentId);
|
|
6542
6604
|
return null;
|
|
@@ -6823,6 +6885,385 @@ function sessionViewerCondition(viewer) {
|
|
|
6823
6885
|
}
|
|
6824
6886
|
var init_session_visibility = () => {};
|
|
6825
6887
|
|
|
6888
|
+
// src/be/db/session-moves.ts
|
|
6889
|
+
function configureSessionMoveDependencies(value) {
|
|
6890
|
+
insertAssetKeyHistory = value.insertAssetKeyHistory;
|
|
6891
|
+
auditAssetKeys2 = value.auditAssetKeys;
|
|
6892
|
+
}
|
|
6893
|
+
async function assertAssetKeyMovesAllowed2() {
|
|
6894
|
+
const audit = await getDbClient2().transaction(async () => auditAssetKeys2(), {
|
|
6895
|
+
readOnly: true
|
|
6896
|
+
});
|
|
6897
|
+
if (!audit.ok) {
|
|
6898
|
+
throw new AssetKeyMovesBlockedError2;
|
|
6899
|
+
}
|
|
6900
|
+
}
|
|
6901
|
+
async function moveTaskChainKeyInTx2(rootId, taskIds, key, changedBy) {
|
|
6902
|
+
if (!isInTransaction()) {
|
|
6903
|
+
throw new Error("moveTaskChainKeyInTx requires an active transaction");
|
|
6904
|
+
}
|
|
6905
|
+
const client = getDbClient2();
|
|
6906
|
+
const now = new Date().toISOString();
|
|
6907
|
+
const root = await getTaskById2(rootId);
|
|
6908
|
+
if (!root)
|
|
6909
|
+
return false;
|
|
6910
|
+
const tasks = [root];
|
|
6911
|
+
for (const id of taskIds) {
|
|
6912
|
+
const task = id === root.id ? null : await getTaskById2(id);
|
|
6913
|
+
if (task)
|
|
6914
|
+
tasks.push(task);
|
|
6915
|
+
}
|
|
6916
|
+
const movedTaskIds = [];
|
|
6917
|
+
for (const task of tasks) {
|
|
6918
|
+
if (task.key === key)
|
|
6919
|
+
continue;
|
|
6920
|
+
const mappedFiles = await client.query(`SELECT DISTINCT m.id, m."key" AS key
|
|
6921
|
+
FROM asset_key_mappings m
|
|
6922
|
+
JOIN task_attachments a
|
|
6923
|
+
ON m.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
|
|
6924
|
+
AND m.provider_org_id = COALESCE(a.agent_fs_org_id, '')
|
|
6925
|
+
AND m.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
|
|
6926
|
+
AND m.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
|
|
6927
|
+
WHERE a.task_id = ?
|
|
6928
|
+
AND (m.source_entity_type IS NOT 'task-attachment'
|
|
6929
|
+
OR m.source_entity_id IN (SELECT id FROM task_attachments WHERE task_id = ?))`, [task.id, task.id]);
|
|
6930
|
+
await client.run('UPDATE agent_tasks SET "key" = ?, updated_by = ? WHERE id = ?', [
|
|
6931
|
+
key,
|
|
6932
|
+
changedBy ?? null,
|
|
6933
|
+
task.id
|
|
6934
|
+
]);
|
|
6935
|
+
for (const mapping of mappedFiles) {
|
|
6936
|
+
if (mapping.key === key)
|
|
6937
|
+
continue;
|
|
6938
|
+
await client.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, changedBy ?? null, mapping.id]);
|
|
6939
|
+
await insertAssetKeyHistory({
|
|
6940
|
+
entityType: "file",
|
|
6941
|
+
entityId: mapping.id,
|
|
6942
|
+
previousKey: mapping.key,
|
|
6943
|
+
newKey: key,
|
|
6944
|
+
changedBy
|
|
6945
|
+
});
|
|
6946
|
+
}
|
|
6947
|
+
await insertAssetKeyHistory({
|
|
6948
|
+
entityType: "task",
|
|
6949
|
+
entityId: task.id,
|
|
6950
|
+
previousKey: task.key,
|
|
6951
|
+
newKey: key,
|
|
6952
|
+
changedBy
|
|
6953
|
+
});
|
|
6954
|
+
movedTaskIds.push(task.id);
|
|
6955
|
+
}
|
|
6956
|
+
return movedTaskIds;
|
|
6957
|
+
}
|
|
6958
|
+
async function moveSessionChains(input) {
|
|
6959
|
+
const moved = [];
|
|
6960
|
+
for (const move of input.moves) {
|
|
6961
|
+
const taskIds = await getDbClient2().transaction(async () => moveTaskChainKeyInTx2(move.rootId, move.taskIds, move.key, input.changedBy));
|
|
6962
|
+
if (taskIds && taskIds.length > 0)
|
|
6963
|
+
moved.push(move.rootId);
|
|
6964
|
+
}
|
|
6965
|
+
return moved;
|
|
6966
|
+
}
|
|
6967
|
+
async function listPrefixRoots(input) {
|
|
6968
|
+
const { lo, hi } = keyPrefixRange(input.from);
|
|
6969
|
+
return getDbClient2().query(`SELECT r.id, r."key" FROM agent_tasks r
|
|
6970
|
+
WHERE r.parentTaskId IS NULL AND r."key" >= ? AND r."key" < ?
|
|
6971
|
+
${input.userId !== undefined ? "AND r.requestedByUserId = ?" : ""}
|
|
6972
|
+
ORDER BY r.id LIMIT ? OFFSET ?`, [lo, hi, ...input.userId !== undefined ? [input.userId] : [], input.limit, input.offset ?? 0]);
|
|
6973
|
+
}
|
|
6974
|
+
async function listSharedPrefixRoots(input) {
|
|
6975
|
+
const { lo, hi } = keyPrefixRange(input.from);
|
|
6976
|
+
const visibility = sessionViewerCondition({ userId: input.userId, scope: "shared" });
|
|
6977
|
+
return getDbClient2().query(`SELECT r.id FROM agent_tasks r
|
|
6978
|
+
WHERE r.parentTaskId IS NULL AND r."key" >= ? AND r."key" < ?
|
|
6979
|
+
AND ${visibility.sql} ORDER BY r.id`, [lo, hi, ...visibility.params]);
|
|
6980
|
+
}
|
|
6981
|
+
var insertAssetKeyHistory, auditAssetKeys2, AssetKeyMovesBlockedError2;
|
|
6982
|
+
var init_session_moves = __esm(() => {
|
|
6983
|
+
init_key();
|
|
6984
|
+
init_db_client();
|
|
6985
|
+
init_runtime();
|
|
6986
|
+
init_session_visibility();
|
|
6987
|
+
init_read();
|
|
6988
|
+
AssetKeyMovesBlockedError2 = class AssetKeyMovesBlockedError2 extends Error {
|
|
6989
|
+
constructor() {
|
|
6990
|
+
super("Asset namespace moves are blocked until structural errors, unknown personal users, or provider mapping drift are repaired.");
|
|
6991
|
+
this.name = "AssetKeyMovesBlockedError";
|
|
6992
|
+
}
|
|
6993
|
+
};
|
|
6994
|
+
});
|
|
6995
|
+
|
|
6996
|
+
// src/be/db/session-tree.ts
|
|
6997
|
+
function sessionReadStateSql(now = new Date().toISOString()) {
|
|
6998
|
+
return {
|
|
6999
|
+
sql: `CASE
|
|
7000
|
+
WHEN s.id IS NULL THEN CASE WHEN a.lastActivityAt > ? THEN 'unread' ELSE 'read' END
|
|
7001
|
+
WHEN s.status = 'dismissed' THEN 'done'
|
|
7002
|
+
WHEN s.status = 'done' THEN CASE WHEN a.lastActivityAt > s.lastUpdatedAt THEN 'unread' ELSE 'done' END
|
|
7003
|
+
WHEN s.status = 'snoozed' THEN CASE WHEN s.snoozeUntil > ? THEN 'later' ELSE 'unread' END
|
|
7004
|
+
WHEN a.lastActivityAt > COALESCE(s.lastReadAt, s.lastUpdatedAt) THEN 'unread'
|
|
7005
|
+
ELSE 'read'
|
|
7006
|
+
END`,
|
|
7007
|
+
params: [new Date(Date.parse(now) - 7 * 86400000).toISOString(), now]
|
|
7008
|
+
};
|
|
7009
|
+
}
|
|
7010
|
+
function groupCondition(group) {
|
|
7011
|
+
const { lo, hi } = keyPrefixRange(group);
|
|
7012
|
+
const start = [...lo].length + 1;
|
|
7013
|
+
return {
|
|
7014
|
+
sql: `(r."key" >= ? AND r."key" < ? AND (r."key" = ? OR (
|
|
7015
|
+
instr(substr(r."key", ?, length(r."key") - ?), '/') = 0 AND
|
|
7016
|
+
(${SESSION_LEAF_KINDS.map(() => 'substr(r."key", ?) GLOB ?').join(" OR ")})
|
|
7017
|
+
)))`,
|
|
7018
|
+
params: [
|
|
7019
|
+
lo,
|
|
7020
|
+
hi,
|
|
7021
|
+
lo,
|
|
7022
|
+
start,
|
|
7023
|
+
start,
|
|
7024
|
+
...SESSION_LEAF_KINDS.flatMap((kind) => [start, `${kind}:?*/`])
|
|
7025
|
+
]
|
|
7026
|
+
};
|
|
7027
|
+
}
|
|
7028
|
+
function sessionRootFilter(opts = {}) {
|
|
7029
|
+
const conditions = ["r.parentTaskId IS NULL"];
|
|
7030
|
+
const params = [];
|
|
7031
|
+
const add = (fragment) => {
|
|
7032
|
+
conditions.push(fragment.sql);
|
|
7033
|
+
params.push(...fragment.params);
|
|
7034
|
+
};
|
|
7035
|
+
if (opts.rootId)
|
|
7036
|
+
add({ sql: "r.id = ?", params: [opts.rootId] });
|
|
7037
|
+
const sources = opts.source?.filter(Boolean) ?? [];
|
|
7038
|
+
if (sources.length)
|
|
7039
|
+
add({ sql: `r.source IN (${sources.map(() => "?").join(",")})`, params: sources });
|
|
7040
|
+
if (opts.q?.trim()) {
|
|
7041
|
+
const like = `%${opts.q.trim().toLowerCase()}%`;
|
|
7042
|
+
add({
|
|
7043
|
+
sql: "(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)",
|
|
7044
|
+
params: [like, like]
|
|
7045
|
+
});
|
|
7046
|
+
}
|
|
7047
|
+
if (opts.requestedByUserId?.trim())
|
|
7048
|
+
add({ sql: "r.requestedByUserId = ?", params: [opts.requestedByUserId.trim()] });
|
|
7049
|
+
if (opts.contextKeyPrefix)
|
|
7050
|
+
add({
|
|
7051
|
+
sql: "r.contextKey LIKE ? ESCAPE '\\'",
|
|
7052
|
+
params: [literalPrefixPattern2(opts.contextKeyPrefix)]
|
|
7053
|
+
});
|
|
7054
|
+
if (opts.viewer) {
|
|
7055
|
+
add(sessionViewerCondition(opts.viewer));
|
|
7056
|
+
if (opts.tree)
|
|
7057
|
+
conditions.push("r.requestedByUserId IS NOT NULL");
|
|
7058
|
+
}
|
|
7059
|
+
if (opts.keyPrefix) {
|
|
7060
|
+
const { lo, hi } = keyPrefixRange(opts.keyPrefix);
|
|
7061
|
+
add({ sql: 'r."key" >= ? AND r."key" < ?', params: [lo, hi] });
|
|
7062
|
+
}
|
|
7063
|
+
if (opts.groupKey)
|
|
7064
|
+
add(groupCondition(normalizeAssetKey(opts.groupKey)));
|
|
7065
|
+
if (opts.noGroup) {
|
|
7066
|
+
const groups = [groupCondition("shared/")];
|
|
7067
|
+
if (opts.viewer?.userId)
|
|
7068
|
+
groups.push(groupCondition(`personal/${opts.viewer.userId}/`));
|
|
7069
|
+
add({
|
|
7070
|
+
sql: `(${groups.map((g) => g.sql).join(" OR ")})`,
|
|
7071
|
+
params: groups.flatMap((g) => g.params)
|
|
7072
|
+
});
|
|
7073
|
+
}
|
|
7074
|
+
if (opts.triage === "later" || opts.triage === "done") {
|
|
7075
|
+
add({
|
|
7076
|
+
sql: `r.id IN (SELECT itemId FROM inbox_item_state
|
|
7077
|
+
WHERE userId = ? AND itemType = 'to_read' AND status IN (${opts.triage === "later" ? "'snoozed'" : "'done','dismissed'"}))`,
|
|
7078
|
+
params: [opts.viewer?.userId ?? null]
|
|
7079
|
+
});
|
|
7080
|
+
}
|
|
7081
|
+
return { sql: conditions.join(" AND "), params };
|
|
7082
|
+
}
|
|
7083
|
+
function excludesTriaged(opts) {
|
|
7084
|
+
return !!(opts.viewer?.userId && (opts.groupKey || opts.keyPrefix || opts.noGroup));
|
|
7085
|
+
}
|
|
7086
|
+
function hasSessionChainFilter(opts) {
|
|
7087
|
+
return !!(opts.triage || opts.status || opts.withUserId || excludesTriaged(opts));
|
|
7088
|
+
}
|
|
7089
|
+
function sessionSummaryQuery(opts = {}) {
|
|
7090
|
+
const root = sessionRootFilter(opts);
|
|
7091
|
+
const read = opts.viewer?.userId ? sessionReadStateSql(opts.now) : { sql: "NULL", params: [] };
|
|
7092
|
+
const params = [...root.params];
|
|
7093
|
+
if (opts.withUserId)
|
|
7094
|
+
params.push(opts.withUserId);
|
|
7095
|
+
params.push(...read.params, opts.viewer?.userId ?? null);
|
|
7096
|
+
const filters = [];
|
|
7097
|
+
if (opts.triage === "unread")
|
|
7098
|
+
filters.push("readState = 'unread'");
|
|
7099
|
+
else if (opts.triage === "later" || opts.triage === "done") {
|
|
7100
|
+
filters.push("readState = ?");
|
|
7101
|
+
params.push(opts.triage);
|
|
7102
|
+
} else if (opts.triage === "inbox" || excludesTriaged(opts)) {
|
|
7103
|
+
filters.push("(readState IS NULL OR readState IN ('read','unread'))");
|
|
7104
|
+
}
|
|
7105
|
+
if (opts.status === "running")
|
|
7106
|
+
filters.push(runningSql);
|
|
7107
|
+
if (opts.status === "failed")
|
|
7108
|
+
filters.push("latestStatus = 'failed'");
|
|
7109
|
+
if (opts.status === "needs")
|
|
7110
|
+
filters.push("needsYou = 1");
|
|
7111
|
+
if (opts.withUserId) {
|
|
7112
|
+
filters.push(`(a.withUser > 0 OR EXISTS (SELECT 1 FROM session_shares sh
|
|
7113
|
+
WHERE sh.rootTaskId = a.root_id AND sh.revokedAt IS NULL AND sh.userId = ?))`);
|
|
7114
|
+
params.push(opts.withUserId);
|
|
7115
|
+
}
|
|
7116
|
+
return {
|
|
7117
|
+
sql: `WITH RECURSIVE chain(root_id, id, lastUpdatedAt, status, requestedByUserId) AS (
|
|
7118
|
+
SELECT r.id, r.id, r.lastUpdatedAt, r.status, r.requestedByUserId
|
|
7119
|
+
FROM agent_tasks r WHERE ${root.sql}
|
|
7120
|
+
UNION ALL
|
|
7121
|
+
SELECT c.root_id, t.id, t.lastUpdatedAt, t.status, t.requestedByUserId
|
|
7122
|
+
FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
|
|
7123
|
+
), agg AS (
|
|
7124
|
+
SELECT root_id, COUNT(*) AS chainCount,
|
|
7125
|
+
status AS latestStatus, MAX(lastUpdatedAt) AS lastActivityAt,
|
|
7126
|
+
${opts.withUserId ? "SUM(requestedByUserId = ?) AS withUser," : ""}
|
|
7127
|
+
SUM(EXISTS (SELECT 1 FROM approval_requests ar
|
|
7128
|
+
WHERE ar.sourceTaskId = chain.id AND ar.status = 'pending')) AS pendingApproval
|
|
7129
|
+
FROM chain GROUP BY root_id
|
|
7130
|
+
), state AS (
|
|
7131
|
+
SELECT a.*, ${read.sql} AS readState, s.snoozeUntil
|
|
7132
|
+
FROM agg a LEFT JOIN inbox_item_state s
|
|
7133
|
+
ON s.userId = ? AND s.itemType = 'to_read' AND s.itemId = a.root_id
|
|
7134
|
+
), summary AS (
|
|
7135
|
+
SELECT *, (COALESCE(readState = 'unread' AND latestStatus = 'failed', 0) OR pendingApproval) AS needsYou
|
|
7136
|
+
FROM state
|
|
7137
|
+
)
|
|
7138
|
+
SELECT a.* FROM summary a ${filters.length ? `WHERE ${filters.join(" AND ")}` : ""}`,
|
|
7139
|
+
params
|
|
7140
|
+
};
|
|
7141
|
+
}
|
|
7142
|
+
async function getSessionReadState(rootId, userId, now) {
|
|
7143
|
+
const query = sessionSummaryQuery({ rootId, viewer: { userId, scope: "all" }, now });
|
|
7144
|
+
const row = await getDbClient2().get(`SELECT readState, lastActivityAt FROM (${query.sql})`, query.params);
|
|
7145
|
+
return row?.readState ? { readState: row.readState, lastActivityAt: row.lastActivityAt } : null;
|
|
7146
|
+
}
|
|
7147
|
+
function sessionCountQuery(opts = {}) {
|
|
7148
|
+
const chain = hasSessionChainFilter(opts);
|
|
7149
|
+
const query = chain ? sessionSummaryQuery(opts) : sessionRootFilter(opts);
|
|
7150
|
+
return {
|
|
7151
|
+
sql: chain ? `SELECT COUNT(*) AS count FROM (${query.sql})` : `SELECT COUNT(*) AS count FROM agent_tasks r WHERE ${query.sql}`,
|
|
7152
|
+
params: query.params
|
|
7153
|
+
};
|
|
7154
|
+
}
|
|
7155
|
+
async function sessionPageFields(roots) {
|
|
7156
|
+
const result = new Map;
|
|
7157
|
+
if (!roots.length)
|
|
7158
|
+
return result;
|
|
7159
|
+
const ids = roots.map((r) => r.id);
|
|
7160
|
+
const [tasks, shares] = await Promise.all([
|
|
7161
|
+
getDbClient2().query(`WITH RECURSIVE chain(root_id, id) AS (
|
|
7162
|
+
SELECT id, id FROM agent_tasks WHERE id IN (${ids.map(() => "?").join(",")})
|
|
7163
|
+
UNION ALL SELECT c.root_id, t.id FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
|
|
7164
|
+
) SELECT c.root_id, t.requestedByUserId AS id, u.name,
|
|
7165
|
+
CASE WHEN t.source = 'system' AND t.taskType = 'follow-up' THEN NULL ELSE NULLIF(trim(substr(t.output, 1, 200)), '') END AS preview
|
|
7166
|
+
FROM chain c CROSS JOIN agent_tasks t ON t.id = c.id
|
|
7167
|
+
LEFT JOIN users u ON u.id = t.requestedByUserId
|
|
7168
|
+
ORDER BY t.lastUpdatedAt DESC, t.createdAt DESC, t.id DESC`, ids),
|
|
7169
|
+
getDbClient2().query(`SELECT sh.rootTaskId AS root_id, sh.userId AS id, u.name, sh.access FROM session_shares sh
|
|
7170
|
+
LEFT JOIN users u ON u.id = sh.userId
|
|
7171
|
+
WHERE sh.revokedAt IS NULL AND sh.rootTaskId IN (${ids.map(() => "?").join(",")})
|
|
7172
|
+
ORDER BY sh.createdAt, sh.id`, ids)
|
|
7173
|
+
]);
|
|
7174
|
+
const people = new Map;
|
|
7175
|
+
for (const root of roots) {
|
|
7176
|
+
result.set(root.id, { shared: false, preview: null, shares: [] });
|
|
7177
|
+
people.set(root.id, new Map);
|
|
7178
|
+
}
|
|
7179
|
+
for (const root of roots) {
|
|
7180
|
+
if (!root.requestedByUserId)
|
|
7181
|
+
continue;
|
|
7182
|
+
people.get(root.id).set(root.requestedByUserId, root.requestedByUserId);
|
|
7183
|
+
}
|
|
7184
|
+
for (const task of tasks) {
|
|
7185
|
+
if (task.id)
|
|
7186
|
+
people.get(task.root_id).set(task.id, task.name ?? task.id);
|
|
7187
|
+
const fields = result.get(task.root_id);
|
|
7188
|
+
if (fields.preview === null && task.preview !== null)
|
|
7189
|
+
fields.preview = task.preview;
|
|
7190
|
+
}
|
|
7191
|
+
for (const share of shares) {
|
|
7192
|
+
const fields = result.get(share.root_id);
|
|
7193
|
+
fields.shared = true;
|
|
7194
|
+
fields.shares.push({ userId: share.id, name: share.name, access: share.access });
|
|
7195
|
+
if (share.id)
|
|
7196
|
+
people.get(share.root_id).set(share.id, share.name ?? share.id);
|
|
7197
|
+
}
|
|
7198
|
+
for (const [id, members] of people) {
|
|
7199
|
+
Object.assign(result.get(id), {
|
|
7200
|
+
people: [...members].slice(0, 8).map(([id, name]) => ({ id, name })),
|
|
7201
|
+
peopleCount: members.size
|
|
7202
|
+
});
|
|
7203
|
+
}
|
|
7204
|
+
return result;
|
|
7205
|
+
}
|
|
7206
|
+
async function getSessionTree(actor, now) {
|
|
7207
|
+
const query = sessionSummaryQuery({
|
|
7208
|
+
...actor.kind === "user" ? { viewer: { userId: actor.userId, scope: "all" } } : {},
|
|
7209
|
+
now,
|
|
7210
|
+
tree: true
|
|
7211
|
+
});
|
|
7212
|
+
const rows = await getDbClient2().query(`SELECT r."key", a.lastActivityAt, a.latestStatus, a.readState, a.needsYou
|
|
7213
|
+
FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id`, query.params);
|
|
7214
|
+
const counts = () => ({ total: 0, unread: 0, running: 0, needsYou: 0 });
|
|
7215
|
+
const result = {
|
|
7216
|
+
groups: [],
|
|
7217
|
+
inbox: counts(),
|
|
7218
|
+
later: counts(),
|
|
7219
|
+
done: counts(),
|
|
7220
|
+
noGroup: counts()
|
|
7221
|
+
};
|
|
7222
|
+
const groups = new Map;
|
|
7223
|
+
const add = (section, row) => {
|
|
7224
|
+
section.total++;
|
|
7225
|
+
if (row.readState === "unread")
|
|
7226
|
+
section.unread++;
|
|
7227
|
+
if (!isTerminalTaskStatus(row.latestStatus))
|
|
7228
|
+
section.running++;
|
|
7229
|
+
if (row.needsYou)
|
|
7230
|
+
section.needsYou++;
|
|
7231
|
+
};
|
|
7232
|
+
for (const row of rows) {
|
|
7233
|
+
const key = sessionGroupKey(row.key);
|
|
7234
|
+
const noGroup = key === "shared/" || actor.kind === "user" && key === `personal/${actor.userId}/`;
|
|
7235
|
+
let group;
|
|
7236
|
+
if (!noGroup) {
|
|
7237
|
+
group = groups.get(key);
|
|
7238
|
+
if (!group) {
|
|
7239
|
+
group = { key, ...counts(), lastActivityAt: row.lastActivityAt };
|
|
7240
|
+
groups.set(key, group);
|
|
7241
|
+
}
|
|
7242
|
+
if (row.lastActivityAt > group.lastActivityAt)
|
|
7243
|
+
group.lastActivityAt = row.lastActivityAt;
|
|
7244
|
+
}
|
|
7245
|
+
if (row.readState === "later" || row.readState === "done")
|
|
7246
|
+
add(result[row.readState], row);
|
|
7247
|
+
else {
|
|
7248
|
+
add(result.inbox, row);
|
|
7249
|
+
if (noGroup)
|
|
7250
|
+
add(result.noGroup, row);
|
|
7251
|
+
else if (group)
|
|
7252
|
+
add(group, row);
|
|
7253
|
+
}
|
|
7254
|
+
}
|
|
7255
|
+
result.groups = [...groups.values()].sort((a, b) => a.key.localeCompare(b.key));
|
|
7256
|
+
return result;
|
|
7257
|
+
}
|
|
7258
|
+
var runningSql;
|
|
7259
|
+
var init_session_tree = __esm(() => {
|
|
7260
|
+
init_key();
|
|
7261
|
+
init_types();
|
|
7262
|
+
init_db3();
|
|
7263
|
+
init_session_visibility();
|
|
7264
|
+
runningSql = `latestStatus NOT IN (${TERMINAL_TASK_STATUSES.map((s) => `'${s}'`).join(",")})`;
|
|
7265
|
+
});
|
|
7266
|
+
|
|
6826
7267
|
// src/be/db/tasks/human-free.ts
|
|
6827
7268
|
function humanFreeCase(parentFlag) {
|
|
6828
7269
|
return `CASE
|
|
@@ -7338,7 +7779,7 @@ async function completeTask2(id, output, options) {
|
|
|
7338
7779
|
});
|
|
7339
7780
|
} catch {}
|
|
7340
7781
|
getDbClient2().afterCommit(() => {
|
|
7341
|
-
import("./event-bus-
|
|
7782
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7342
7783
|
workflowEventBus.emit("task.completed", {
|
|
7343
7784
|
taskId: id,
|
|
7344
7785
|
output: scrubbedOutput,
|
|
@@ -7393,7 +7834,7 @@ async function failTask2(id, reason, opts = {}) {
|
|
|
7393
7834
|
});
|
|
7394
7835
|
} catch {}
|
|
7395
7836
|
getDbClient2().afterCommit(() => {
|
|
7396
|
-
import("./event-bus-
|
|
7837
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7397
7838
|
workflowEventBus.emit("task.failed", {
|
|
7398
7839
|
taskId: id,
|
|
7399
7840
|
failureReason: scrubbedReason,
|
|
@@ -7475,7 +7916,7 @@ async function cancelTask2(id, reason) {
|
|
|
7475
7916
|
});
|
|
7476
7917
|
} catch {}
|
|
7477
7918
|
getDbClient2().afterCommit(() => {
|
|
7478
|
-
import("./event-bus-
|
|
7919
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7479
7920
|
workflowEventBus.emit("task.cancelled", {
|
|
7480
7921
|
taskId: id,
|
|
7481
7922
|
agentId: row.agentId,
|
|
@@ -7532,7 +7973,7 @@ async function supersedeTask2(id, args) {
|
|
|
7532
7973
|
});
|
|
7533
7974
|
} catch {}
|
|
7534
7975
|
getDbClient2().afterCommit(() => {
|
|
7535
|
-
import("./event-bus-
|
|
7976
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7536
7977
|
workflowEventBus.emit("task.superseded", {
|
|
7537
7978
|
taskId: id,
|
|
7538
7979
|
reason: args.reason,
|
|
@@ -7746,7 +8187,7 @@ async function updateTaskProgress2(id, progress) {
|
|
|
7746
8187
|
});
|
|
7747
8188
|
} catch {}
|
|
7748
8189
|
getDbClient2().afterCommit(() => {
|
|
7749
|
-
import("./event-bus-
|
|
8190
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7750
8191
|
workflowEventBus.emit("task.progress", {
|
|
7751
8192
|
taskId: id,
|
|
7752
8193
|
progress: scrubbedProgress,
|
|
@@ -7817,14 +8258,70 @@ function emitChildRunFinished(childRunId, parentStepId, status) {
|
|
|
7817
8258
|
}
|
|
7818
8259
|
function emitAfterCommit(childRunId, parentStepId) {
|
|
7819
8260
|
getDbClient2().afterCommit(() => {
|
|
7820
|
-
import("./event-bus-
|
|
8261
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
7821
8262
|
workflowEventBus.emit("workflow.child.finished", { childRunId, parentStepId });
|
|
7822
8263
|
}).catch((err) => console.error("[db] workflow.child.finished event not emitted:", scrubSecrets(err instanceof Error ? err.message : String(err))));
|
|
7823
8264
|
});
|
|
7824
8265
|
}
|
|
8266
|
+
async function createForeachChildSteps(runId, parentNodeId, rows) {
|
|
8267
|
+
if (rows.length === 0)
|
|
8268
|
+
return 0;
|
|
8269
|
+
const prefix = `${parentNodeId}#`;
|
|
8270
|
+
return getDbClient2().transaction(async (tx) => {
|
|
8271
|
+
const existing = await tx.query("SELECT DISTINCT nodeId FROM workflow_run_steps WHERE runId = ? AND substr(nodeId, 1, ?) = ?", [runId, prefix.length, prefix]);
|
|
8272
|
+
const existingNodeIds = new Set(existing.map((row) => row.nodeId));
|
|
8273
|
+
const now = new Date().toISOString();
|
|
8274
|
+
let created = 0;
|
|
8275
|
+
for (const row of rows) {
|
|
8276
|
+
if (existingNodeIds.has(row.nodeId))
|
|
8277
|
+
continue;
|
|
8278
|
+
await tx.run(`INSERT INTO workflow_run_steps (id, runId, nodeId, nodeType, status, startedAt, input, idempotencyKey)
|
|
8279
|
+
VALUES (?, ?, ?, ?, 'pending', ?, ?, ?)`, [
|
|
8280
|
+
row.id,
|
|
8281
|
+
runId,
|
|
8282
|
+
row.nodeId,
|
|
8283
|
+
row.nodeType,
|
|
8284
|
+
now,
|
|
8285
|
+
scrubJsonValue(row.input),
|
|
8286
|
+
row.idempotencyKey
|
|
8287
|
+
]);
|
|
8288
|
+
existingNodeIds.add(row.nodeId);
|
|
8289
|
+
created++;
|
|
8290
|
+
}
|
|
8291
|
+
return created;
|
|
8292
|
+
});
|
|
8293
|
+
}
|
|
8294
|
+
async function createForeachAttemptSteps(runId, rows) {
|
|
8295
|
+
if (rows.length === 0)
|
|
8296
|
+
return 0;
|
|
8297
|
+
return getDbClient2().transaction(async (tx) => {
|
|
8298
|
+
const now = new Date().toISOString();
|
|
8299
|
+
let created = 0;
|
|
8300
|
+
for (const row of rows) {
|
|
8301
|
+
const count = await tx.get("SELECT COUNT(*) AS n FROM workflow_run_steps WHERE runId = ? AND nodeId = ?", [runId, row.nodeId]);
|
|
8302
|
+
const attempt = count?.n ?? 0;
|
|
8303
|
+
const inserted = await tx.get(`INSERT INTO workflow_run_steps (id, runId, nodeId, nodeType, status, startedAt, input, idempotencyKey)
|
|
8304
|
+
VALUES (?, ?, ?, ?, 'pending', ?, ?, ?)
|
|
8305
|
+
ON CONFLICT(idempotencyKey) DO NOTHING
|
|
8306
|
+
RETURNING id`, [
|
|
8307
|
+
crypto.randomUUID(),
|
|
8308
|
+
runId,
|
|
8309
|
+
row.nodeId,
|
|
8310
|
+
row.nodeType,
|
|
8311
|
+
now,
|
|
8312
|
+
scrubJsonValue({ itemKey: row.itemKey, index: row.index, attempt }),
|
|
8313
|
+
`${runId}:${row.nodeId}:${attempt}`
|
|
8314
|
+
]);
|
|
8315
|
+
if (inserted)
|
|
8316
|
+
created++;
|
|
8317
|
+
}
|
|
8318
|
+
return created;
|
|
8319
|
+
});
|
|
8320
|
+
}
|
|
7825
8321
|
var TERMINAL_STATUSES;
|
|
7826
8322
|
var init_workflow_runs = __esm(() => {
|
|
7827
8323
|
init_secret_scrubber();
|
|
8324
|
+
init_scrub_json();
|
|
7828
8325
|
init_runtime();
|
|
7829
8326
|
TERMINAL_STATUSES = new Set([
|
|
7830
8327
|
"completed",
|
|
@@ -8345,7 +8842,7 @@ function validateConfigValue(key, value) {
|
|
|
8345
8842
|
function validateExportToEnv(key, exportToEnv) {
|
|
8346
8843
|
return exportToEnv === true && isEnvExportRestrictedKey(key) ? envExportRestrictedError(key) : null;
|
|
8347
8844
|
}
|
|
8348
|
-
var TEAMS_SDK_ENV_KEYS, RESERVED_KEYS, API_ONLY_CONFIG_KEYS, INTERNAL_CONFIG_KEYS, BOOLEAN_LITERALS, MAX_DB_RETENTION_DAYS = 1e6, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
|
|
8845
|
+
var TEAMS_SDK_ENV_KEYS, RESERVED_KEYS, API_ONLY_CONFIG_KEYS, INTERNAL_CONFIG_KEYS, BOOLEAN_LITERALS, MAX_DB_RETENTION_DAYS = 1e6, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
|
|
8349
8846
|
var init_swarm_config_guard = __esm(() => {
|
|
8350
8847
|
init_schema();
|
|
8351
8848
|
init_telemetry_ranking();
|
|
@@ -8375,7 +8872,11 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
8375
8872
|
"EXTENSION_ALLOW_LEAD_ACTIVATION",
|
|
8376
8873
|
"CHAT_SDK_API_URL_OVERRIDES"
|
|
8377
8874
|
]);
|
|
8378
|
-
API_ONLY_CONFIG_KEYS = new Set([
|
|
8875
|
+
API_ONLY_CONFIG_KEYS = new Set([
|
|
8876
|
+
"API_AGENT_FS_API_KEY",
|
|
8877
|
+
"SLACK_SIGNING_SECRET",
|
|
8878
|
+
"TRANSCRIPTION_API_KEY"
|
|
8879
|
+
]);
|
|
8379
8880
|
INTERNAL_CONFIG_KEYS = new Set([
|
|
8380
8881
|
"onboarding_state",
|
|
8381
8882
|
"runtime_owner_id",
|
|
@@ -8389,6 +8890,13 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
8389
8890
|
};
|
|
8390
8891
|
APPS_JSON_COLUMN_MAX_BYTES_BOUNDS = { min: 1024, max: 16777216 };
|
|
8391
8892
|
CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS = { min: 1, max: 216 };
|
|
8893
|
+
SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS = [
|
|
8894
|
+
"typesafe",
|
|
8895
|
+
"openrouter",
|
|
8896
|
+
"laya",
|
|
8897
|
+
"openai",
|
|
8898
|
+
"cloudflare"
|
|
8899
|
+
];
|
|
8392
8900
|
validateControllerTokenTtlDays = boundedIntegerValidators(["RUNTIME_CONTROLLER_TOKEN_TTL_DAYS"], 1, 3650).RUNTIME_CONTROLLER_TOKEN_TTL_DAYS;
|
|
8393
8901
|
validateControllerGraceSec = boundedIntegerValidators(["RUNTIME_CONTROLLER_GRACE_SEC"], 0, 86400).RUNTIME_CONTROLLER_GRACE_SEC;
|
|
8394
8902
|
VALIDATED_KEYS = {
|
|
@@ -8468,11 +8976,13 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
8468
8976
|
},
|
|
8469
8977
|
...enumValidator("CLAUDE_TRANSPORT", ["cli", "sdk"]),
|
|
8470
8978
|
...enumValidator("SCRIPT_EXECUTOR", ["native", "quickjs"]),
|
|
8979
|
+
...enumValidator("TRANSCRIPTION_PROVIDER", ["openai", "elevenlabs", "groq"]),
|
|
8471
8980
|
SCRIPT_QUICKJS_POOL_SIZE: validateQuickJSPoolSize,
|
|
8472
8981
|
...booleanValidators(["SCRIPT_EGRESS_ALLOW_PRIVATE"]),
|
|
8473
8982
|
SCRIPT_EGRESS_ALLOWLIST: (value) => typeof value === "string" ? validateEgressAllowlist(value) : "Invalid SCRIPT_EGRESS_ALLOWLIST",
|
|
8474
8983
|
...enumValidator("MODEL_WINDOW_EXHAUSTED_POLICY", ["fail", "fallback"]),
|
|
8475
8984
|
...enumValidator("HEARTBEAT_CHECKLIST_GATE_MODE", ["shadow", "enforce"]),
|
|
8985
|
+
...enumValidator("SYSTEM_ONE_DEFAULT_PROVIDER", [...SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS]),
|
|
8476
8986
|
CODEX_CREDITS_EXHAUSTED_COOLDOWN_MS: (value) => {
|
|
8477
8987
|
const str = String(value).trim();
|
|
8478
8988
|
if (!/^\d+$/.test(str) || Number(str) <= 0) {
|
|
@@ -8534,6 +9044,7 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
8534
9044
|
"GITHUB_DISABLE",
|
|
8535
9045
|
"GITLAB_DISABLE",
|
|
8536
9046
|
"AZURE_DEVOPS_DISABLE",
|
|
9047
|
+
"BITBUCKET_DISABLE",
|
|
8537
9048
|
"LINEAR_DISABLE",
|
|
8538
9049
|
"JIRA_DISABLE",
|
|
8539
9050
|
"AGENTMAIL_DISABLE",
|
|
@@ -8606,6 +9117,7 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
8606
9117
|
...integerValidators(["APPROVAL_REQUEST_AUTO_CANCELLATION_DAYS"], 0),
|
|
8607
9118
|
...boundedIntegerValidators(["API_DRAIN_MAX_MS"], 0, API_DRAIN_MAX_MS_LIMIT),
|
|
8608
9119
|
...boundedIntegerValidators(["CHAT_SDK_BUFFER_MS"], 1, 600000),
|
|
9120
|
+
...boundedIntegerValidators(["CHAT_SDK_OWNER_WINDOW_MIN"], 0, 1440),
|
|
8609
9121
|
...boundedIntegerValidators(["CONTEXT_PREAMBLE_MAX_TOKENS"], 100, 20000),
|
|
8610
9122
|
MEMORY_MIN_SIMILARITY: (value) => validateFloatRange("MEMORY_MIN_SIMILARITY", value, 0, 1, "between 0 and 1 inclusive"),
|
|
8611
9123
|
MEMORY_ACCESS_BOOST_MAX: (value) => validateFloatRange("MEMORY_ACCESS_BOOST_MAX", value, 1, Number.POSITIVE_INFINITY, "a number >= 1")
|
|
@@ -17235,6 +17747,15 @@ var exports_openai_embedding = {};
|
|
|
17235
17747
|
__export(exports_openai_embedding, {
|
|
17236
17748
|
OpenAIEmbeddingProvider: () => OpenAIEmbeddingProvider
|
|
17237
17749
|
});
|
|
17750
|
+
function cleanInput(text) {
|
|
17751
|
+
return text.replace(/[\n\r]/g, " ").trim().slice(0, MAX_EMBEDDING_INPUT_CHARS);
|
|
17752
|
+
}
|
|
17753
|
+
function isInputRejection(err) {
|
|
17754
|
+
return err instanceof OpenAI2.APIError && err.status === 400;
|
|
17755
|
+
}
|
|
17756
|
+
function isInputTooLong(err) {
|
|
17757
|
+
return isInputRejection(err) && /maximum (context|input) length/i.test(err.message ?? "");
|
|
17758
|
+
}
|
|
17238
17759
|
|
|
17239
17760
|
class OpenAIEmbeddingProvider {
|
|
17240
17761
|
name;
|
|
@@ -17264,73 +17785,98 @@ class OpenAIEmbeddingProvider {
|
|
|
17264
17785
|
}
|
|
17265
17786
|
return this.client;
|
|
17266
17787
|
}
|
|
17788
|
+
async request(client, input) {
|
|
17789
|
+
return client.embeddings.create({
|
|
17790
|
+
model: this.model,
|
|
17791
|
+
input,
|
|
17792
|
+
dimensions: this.dimensions,
|
|
17793
|
+
encoding_format: "float"
|
|
17794
|
+
});
|
|
17795
|
+
}
|
|
17796
|
+
toVector(values, label) {
|
|
17797
|
+
if (!values)
|
|
17798
|
+
return null;
|
|
17799
|
+
if (values.length !== this.dimensions) {
|
|
17800
|
+
console.error(`[memory] ${label} dimension mismatch: expected=${this.dimensions} got=${values.length}. Provider may not support the 'dimensions' parameter.`);
|
|
17801
|
+
return null;
|
|
17802
|
+
}
|
|
17803
|
+
return new Float32Array(values);
|
|
17804
|
+
}
|
|
17805
|
+
async embedOne(client, cleaned) {
|
|
17806
|
+
let input = cleaned;
|
|
17807
|
+
while (true) {
|
|
17808
|
+
try {
|
|
17809
|
+
const response = await this.request(client, input);
|
|
17810
|
+
return this.toVector(response.data[0]?.embedding, "Embedding");
|
|
17811
|
+
} catch (err) {
|
|
17812
|
+
const message = err.message;
|
|
17813
|
+
if (isInputTooLong(err) && input.length > MIN_EMBEDDING_INPUT_CHARS) {
|
|
17814
|
+
const next = Math.max(MIN_EMBEDDING_INPUT_CHARS, Math.floor(input.length / 2));
|
|
17815
|
+
console.warn(`[memory] Embedding input over the token cap at ${input.length} chars, retrying at ${next}: ${message}`);
|
|
17816
|
+
input = input.slice(0, next);
|
|
17817
|
+
continue;
|
|
17818
|
+
}
|
|
17819
|
+
console.error("[memory] Embedding failed:", message);
|
|
17820
|
+
return null;
|
|
17821
|
+
}
|
|
17822
|
+
}
|
|
17823
|
+
}
|
|
17267
17824
|
async embed(text) {
|
|
17268
17825
|
const client = this.getClient();
|
|
17269
17826
|
if (!client)
|
|
17270
17827
|
return null;
|
|
17271
|
-
|
|
17272
|
-
|
|
17273
|
-
if (!cleaned)
|
|
17274
|
-
return null;
|
|
17275
|
-
const response = await client.embeddings.create({
|
|
17276
|
-
model: this.model,
|
|
17277
|
-
input: cleaned,
|
|
17278
|
-
dimensions: this.dimensions,
|
|
17279
|
-
encoding_format: "float"
|
|
17280
|
-
});
|
|
17281
|
-
const values = response.data[0]?.embedding;
|
|
17282
|
-
if (!values)
|
|
17283
|
-
return null;
|
|
17284
|
-
if (values.length !== this.dimensions) {
|
|
17285
|
-
console.error(`[memory] Embedding dimension mismatch: expected=${this.dimensions} got=${values.length}. Provider may not support the 'dimensions' parameter.`);
|
|
17286
|
-
return null;
|
|
17287
|
-
}
|
|
17288
|
-
return new Float32Array(values);
|
|
17289
|
-
} catch (err) {
|
|
17290
|
-
console.error("[memory] Embedding failed:", err.message);
|
|
17828
|
+
const cleaned = cleanInput(text);
|
|
17829
|
+
if (!cleaned)
|
|
17291
17830
|
return null;
|
|
17292
|
-
|
|
17831
|
+
return this.embedOne(client, cleaned);
|
|
17293
17832
|
}
|
|
17294
17833
|
async embedBatch(texts) {
|
|
17834
|
+
const results = texts.map(() => null);
|
|
17295
17835
|
const client = this.getClient();
|
|
17296
17836
|
if (!client)
|
|
17297
|
-
return
|
|
17298
|
-
const cleaned = texts.map(
|
|
17299
|
-
const
|
|
17300
|
-
|
|
17837
|
+
return results;
|
|
17838
|
+
const cleaned = texts.map(cleanInput);
|
|
17839
|
+
const groups = [];
|
|
17840
|
+
let group = [];
|
|
17841
|
+
let groupChars = 0;
|
|
17301
17842
|
for (let i = 0;i < cleaned.length; i++) {
|
|
17302
|
-
|
|
17303
|
-
|
|
17304
|
-
|
|
17843
|
+
const length = cleaned[i].length;
|
|
17844
|
+
if (length === 0)
|
|
17845
|
+
continue;
|
|
17846
|
+
if (group.length > 0 && groupChars + length > MAX_BATCH_REQUEST_CHARS) {
|
|
17847
|
+
groups.push(group);
|
|
17848
|
+
group = [];
|
|
17849
|
+
groupChars = 0;
|
|
17305
17850
|
}
|
|
17851
|
+
group.push(i);
|
|
17852
|
+
groupChars += length;
|
|
17306
17853
|
}
|
|
17307
|
-
if (
|
|
17308
|
-
|
|
17309
|
-
|
|
17310
|
-
|
|
17311
|
-
|
|
17312
|
-
|
|
17313
|
-
|
|
17314
|
-
|
|
17315
|
-
});
|
|
17316
|
-
const results = texts.map(() => null);
|
|
17317
|
-
for (const item of response.data) {
|
|
17318
|
-
const originalIndex = nonEmptyIndices[item.index];
|
|
17319
|
-
if (originalIndex !== undefined && item.embedding) {
|
|
17320
|
-
if (item.embedding.length !== this.dimensions) {
|
|
17321
|
-
console.error(`[memory] Batch embedding dimension mismatch: expected=${this.dimensions} got=${item.embedding.length}. Provider may not support the 'dimensions' parameter.`);
|
|
17854
|
+
if (group.length > 0)
|
|
17855
|
+
groups.push(group);
|
|
17856
|
+
for (const indices of groups) {
|
|
17857
|
+
try {
|
|
17858
|
+
const response = await this.request(client, indices.map((i) => cleaned[i]));
|
|
17859
|
+
for (const item of response.data) {
|
|
17860
|
+
const originalIndex = indices[item.index];
|
|
17861
|
+
if (originalIndex === undefined)
|
|
17322
17862
|
continue;
|
|
17323
|
-
|
|
17324
|
-
|
|
17863
|
+
results[originalIndex] = this.toVector(item.embedding, "Batch embedding");
|
|
17864
|
+
}
|
|
17865
|
+
} catch (err) {
|
|
17866
|
+
if (!isInputRejection(err)) {
|
|
17867
|
+
console.error("[memory] Batch embedding failed:", err.message);
|
|
17868
|
+
continue;
|
|
17869
|
+
}
|
|
17870
|
+
console.warn(`[memory] Batch embedding rejected, embedding ${indices.length} inputs one by one: ${err.message}`);
|
|
17871
|
+
for (const i of indices) {
|
|
17872
|
+
results[i] = await this.embedOne(client, cleaned[i]);
|
|
17325
17873
|
}
|
|
17326
17874
|
}
|
|
17327
|
-
return results;
|
|
17328
|
-
} catch (err) {
|
|
17329
|
-
console.error("[memory] Batch embedding failed:", err.message);
|
|
17330
|
-
return texts.map(() => null);
|
|
17331
17875
|
}
|
|
17876
|
+
return results;
|
|
17332
17877
|
}
|
|
17333
17878
|
}
|
|
17879
|
+
var MAX_EMBEDDING_INPUT_CHARS = 24000, MIN_EMBEDDING_INPUT_CHARS = 1000, MAX_BATCH_REQUEST_CHARS = 200000;
|
|
17334
17880
|
var init_openai_embedding = __esm(() => {
|
|
17335
17881
|
init_openai();
|
|
17336
17882
|
init_openrouter_base_url();
|
|
@@ -17472,7 +18018,25 @@ function rerank(candidates, options) {
|
|
|
17472
18018
|
};
|
|
17473
18019
|
});
|
|
17474
18020
|
scored.sort((a, b) => b.similarity - a.similarity || b.rawSimilarity - a.rawSimilarity);
|
|
17475
|
-
return scored.slice(0, limit);
|
|
18021
|
+
return collapseTaskCompletionChunks(scored).slice(0, limit);
|
|
18022
|
+
}
|
|
18023
|
+
function collapsedDocumentKey(candidate) {
|
|
18024
|
+
if (candidate.source !== "task_completion" || candidate.totalChunks <= 1 || !candidate.key) {
|
|
18025
|
+
return null;
|
|
18026
|
+
}
|
|
18027
|
+
return JSON.stringify([candidate.agentId, candidate.scope, candidate.key]);
|
|
18028
|
+
}
|
|
18029
|
+
function collapseTaskCompletionChunks(ranked) {
|
|
18030
|
+
const seen = new Set;
|
|
18031
|
+
return ranked.filter((candidate) => {
|
|
18032
|
+
const document = collapsedDocumentKey(candidate);
|
|
18033
|
+
if (document === null)
|
|
18034
|
+
return true;
|
|
18035
|
+
if (seen.has(document))
|
|
18036
|
+
return false;
|
|
18037
|
+
seen.add(document);
|
|
18038
|
+
return true;
|
|
18039
|
+
});
|
|
17476
18040
|
}
|
|
17477
18041
|
var MS_PER_DAY, MS_PER_HOUR;
|
|
17478
18042
|
var init_reranker = __esm(() => {
|
|
@@ -17482,12 +18046,49 @@ var init_reranker = __esm(() => {
|
|
|
17482
18046
|
MS_PER_HOUR = 1000 * 60 * 60;
|
|
17483
18047
|
});
|
|
17484
18048
|
|
|
18049
|
+
// src/be/memory/search-candidates.ts
|
|
18050
|
+
function countCandidateDocuments(candidates) {
|
|
18051
|
+
const documents = new Set;
|
|
18052
|
+
let standalone = 0;
|
|
18053
|
+
for (const candidate of candidates) {
|
|
18054
|
+
const document = collapsedDocumentKey(candidate);
|
|
18055
|
+
if (document === null)
|
|
18056
|
+
standalone++;
|
|
18057
|
+
else
|
|
18058
|
+
documents.add(document);
|
|
18059
|
+
}
|
|
18060
|
+
return standalone + documents.size;
|
|
18061
|
+
}
|
|
18062
|
+
async function searchMemoryCandidates(store, embedding, agentId, options) {
|
|
18063
|
+
let fetchLimit = options.limit;
|
|
18064
|
+
let rows = await store.search(embedding, agentId, { ...options, limit: fetchLimit });
|
|
18065
|
+
while (fetchLimit < MAX_CANDIDATE_FETCH) {
|
|
18066
|
+
const documents = countCandidateDocuments(rows);
|
|
18067
|
+
if (documents >= options.limit || documents === rows.length)
|
|
18068
|
+
break;
|
|
18069
|
+
const nextLimit = Math.min(fetchLimit * WIDEN_FACTOR, MAX_CANDIDATE_FETCH);
|
|
18070
|
+
const wider = await store.search(embedding, agentId, { ...options, limit: nextLimit });
|
|
18071
|
+
if (wider.length <= rows.length)
|
|
18072
|
+
break;
|
|
18073
|
+
rows = wider;
|
|
18074
|
+
fetchLimit = nextLimit;
|
|
18075
|
+
}
|
|
18076
|
+
return rows;
|
|
18077
|
+
}
|
|
18078
|
+
var MAX_CANDIDATE_FETCH = 4096, WIDEN_FACTOR = 4;
|
|
18079
|
+
var init_search_candidates = __esm(() => {
|
|
18080
|
+
init_reranker();
|
|
18081
|
+
});
|
|
18082
|
+
|
|
17485
18083
|
// src/be/memory/providers/sqlite-store.ts
|
|
17486
18084
|
var exports_sqlite_store = {};
|
|
17487
18085
|
__export(exports_sqlite_store, {
|
|
17488
18086
|
SqliteMemoryStore: () => SqliteMemoryStore,
|
|
17489
18087
|
rowToCandidate: () => rowToCandidate
|
|
17490
18088
|
});
|
|
18089
|
+
function armFetchLimit(limit) {
|
|
18090
|
+
return Math.min(Math.max(Math.min(limit * 4, 100), limit), MAX_CANDIDATE_FETCH);
|
|
18091
|
+
}
|
|
17491
18092
|
function rowToAgentMemory(row) {
|
|
17492
18093
|
return {
|
|
17493
18094
|
id: row.id,
|
|
@@ -17811,6 +18412,23 @@ class SqliteMemoryStore {
|
|
|
17811
18412
|
});
|
|
17812
18413
|
return results;
|
|
17813
18414
|
}
|
|
18415
|
+
async replaceDocument(document, inputs) {
|
|
18416
|
+
const results = [];
|
|
18417
|
+
await getDbClient2().transaction(async (tx) => {
|
|
18418
|
+
const rows = await tx.query(`SELECT id FROM agent_memory
|
|
18419
|
+
WHERE key = ? AND scope = ? AND COALESCE(agentId, '') = COALESCE(?, '') AND source = ?`, [document.key, document.scope, document.agentId ?? null, document.source]);
|
|
18420
|
+
const ids = rows.map((row) => row.id);
|
|
18421
|
+
if (ids.length > 0) {
|
|
18422
|
+
await this.purgeByIds(ids);
|
|
18423
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
18424
|
+
await tx.run(`DELETE FROM agent_memory WHERE id IN (${placeholders})`, ids);
|
|
18425
|
+
}
|
|
18426
|
+
for (const input of inputs) {
|
|
18427
|
+
results.push(await this.store(input));
|
|
18428
|
+
}
|
|
18429
|
+
});
|
|
18430
|
+
return results;
|
|
18431
|
+
}
|
|
17814
18432
|
async get(id) {
|
|
17815
18433
|
const db = getDbClient2();
|
|
17816
18434
|
const row = await db.get("SELECT * FROM agent_memory WHERE id = ?", [id]);
|
|
@@ -17881,7 +18499,7 @@ class SqliteMemoryStore {
|
|
|
17881
18499
|
});
|
|
17882
18500
|
}
|
|
17883
18501
|
async searchHybrid(queryEmbedding, queryText, agentId, options) {
|
|
17884
|
-
const overfetchLimit =
|
|
18502
|
+
const overfetchLimit = armFetchLimit(options.limit);
|
|
17885
18503
|
const vectorCandidates = await this.searchWithVec(queryEmbedding, agentId, {
|
|
17886
18504
|
...options,
|
|
17887
18505
|
limit: overfetchLimit
|
|
@@ -17949,7 +18567,7 @@ class SqliteMemoryStore {
|
|
|
17949
18567
|
conditions.push("(m.expiresAt IS NULL OR m.expiresAt > datetime('now'))");
|
|
17950
18568
|
}
|
|
17951
18569
|
try {
|
|
17952
|
-
const sqlLimit =
|
|
18570
|
+
const sqlLimit = armFetchLimit(limit);
|
|
17953
18571
|
const rows = await getDbClient2().query(`SELECT m.*, bm25(memory_fts) AS rank
|
|
17954
18572
|
FROM memory_fts
|
|
17955
18573
|
JOIN agent_memory m ON m.id = memory_fts.memory_id
|
|
@@ -18286,26 +18904,28 @@ class SqliteMemoryStore {
|
|
|
18286
18904
|
return result.changes;
|
|
18287
18905
|
}
|
|
18288
18906
|
async updateEmbedding(id, embedding, model) {
|
|
18289
|
-
const db = getDbClient2();
|
|
18290
18907
|
const buffer = serializeEmbedding(embedding);
|
|
18291
|
-
await
|
|
18292
|
-
buffer,
|
|
18293
|
-
|
|
18294
|
-
id
|
|
18295
|
-
]);
|
|
18296
|
-
if (this.vecInitialized && this.getVecTableSchema()) {
|
|
18297
|
-
const vecBuffer = this.toVecBuffer(embedding);
|
|
18298
|
-
if (!vecBuffer) {
|
|
18299
|
-
console.warn(`[memory-vec] update skipped memory_id=${id} reason=invalid_dimensions dimensions=${embedding.length} expected=${EMBEDDING_DIMENSIONS}`);
|
|
18908
|
+
await getDbClient2().transaction(async (tx) => {
|
|
18909
|
+
const updated = await tx.run("UPDATE agent_memory SET embedding = ?, embeddingModel = ? WHERE id = ?", [buffer, model, id]);
|
|
18910
|
+
if (updated.changes === 0)
|
|
18300
18911
|
return;
|
|
18912
|
+
if (this.vecInitialized && this.getVecTableSchema()) {
|
|
18913
|
+
const vecBuffer = this.toVecBuffer(embedding);
|
|
18914
|
+
if (!vecBuffer) {
|
|
18915
|
+
console.warn(`[memory-vec] update skipped memory_id=${id} reason=invalid_dimensions dimensions=${embedding.length} expected=${EMBEDDING_DIMENSIONS}`);
|
|
18916
|
+
return;
|
|
18917
|
+
}
|
|
18918
|
+
try {
|
|
18919
|
+
await tx.run("DELETE FROM memory_vec WHERE memory_id = ?", [id]);
|
|
18920
|
+
await tx.run("INSERT INTO memory_vec(memory_id, embedding) VALUES (?, ?)", [
|
|
18921
|
+
id,
|
|
18922
|
+
vecBuffer
|
|
18923
|
+
]);
|
|
18924
|
+
} catch (err) {
|
|
18925
|
+
console.error(`[memory-vec] update failed memory_id=${id}: ${err.message}`);
|
|
18926
|
+
}
|
|
18301
18927
|
}
|
|
18302
|
-
|
|
18303
|
-
await db.run("DELETE FROM memory_vec WHERE memory_id = ?", [id]);
|
|
18304
|
-
await db.run("INSERT INTO memory_vec(memory_id, embedding) VALUES (?, ?)", [id, vecBuffer]);
|
|
18305
|
-
} catch (err) {
|
|
18306
|
-
console.error(`[memory-vec] update failed memory_id=${id}: ${err.message}`);
|
|
18307
|
-
}
|
|
18308
|
-
}
|
|
18928
|
+
});
|
|
18309
18929
|
}
|
|
18310
18930
|
async rewriteForScrub(id, before, after) {
|
|
18311
18931
|
const contentChanged = after.content !== before.content;
|
|
@@ -18428,6 +19048,7 @@ var init_sqlite_store = __esm(() => {
|
|
|
18428
19048
|
init_constants();
|
|
18429
19049
|
init_key_paths();
|
|
18430
19050
|
init_reranker();
|
|
19051
|
+
init_search_candidates();
|
|
18431
19052
|
VECTOR_BYTES = EMBEDDING_DIMENSIONS * Float32Array.BYTES_PER_ELEMENT;
|
|
18432
19053
|
});
|
|
18433
19054
|
|
|
@@ -19087,7 +19708,7 @@ async function loadSecretRegistry() {
|
|
|
19087
19708
|
result.failed += 1;
|
|
19088
19709
|
}
|
|
19089
19710
|
try {
|
|
19090
|
-
const { loadRuntimeControllerSecrets } = await import("./db-
|
|
19711
|
+
const { loadRuntimeControllerSecrets } = await import("./db-t86xrnes.js");
|
|
19091
19712
|
const loaded = await loadRuntimeControllerSecrets();
|
|
19092
19713
|
result.runtimeController = loaded.count;
|
|
19093
19714
|
result.failed += loaded.failed;
|
|
@@ -19402,6 +20023,7 @@ var init_script_runs = __esm(() => {
|
|
|
19402
20023
|
// src/be/db.ts
|
|
19403
20024
|
var exports_db = {};
|
|
19404
20025
|
__export(exports_db, {
|
|
20026
|
+
AssetKeyMovesBlockedError: () => AssetKeyMovesBlockedError2,
|
|
19405
20027
|
EXTENSION_AGENT_ROLE: () => EXTENSION_AGENT_ROLE2,
|
|
19406
20028
|
ExtensionAgentAssignmentError: () => ExtensionAgentAssignmentError2,
|
|
19407
20029
|
KvTypeCollisionError: () => KvTypeCollisionError2,
|
|
@@ -19416,6 +20038,7 @@ __export(exports_db, {
|
|
|
19416
20038
|
__resetSqliteVecExtensionPathCacheForTests: () => __resetSqliteVecExtensionPathCacheForTests2,
|
|
19417
20039
|
abandonSlackOutcomeDelivery: () => abandonSlackOutcomeDelivery2,
|
|
19418
20040
|
acceptTask: () => acceptTask2,
|
|
20041
|
+
assertAssetKeyMovesAllowed: () => assertAssetKeyMovesAllowed2,
|
|
19419
20042
|
assignUnassignedTaskPending: () => assignUnassignedTaskPending2,
|
|
19420
20043
|
autoEncryptLegacyPlaintextSecrets: () => autoEncryptLegacyPlaintextSecrets2,
|
|
19421
20044
|
backfillSupersedeTaskResumeTaskId: () => backfillSupersedeTaskResumeTaskId2,
|
|
@@ -19515,6 +20138,7 @@ __export(exports_db, {
|
|
|
19515
20138
|
extensionAgentAssignmentError: () => extensionAgentAssignmentError2,
|
|
19516
20139
|
failPendingResumeIfUnclaimed: () => failPendingResumeIfUnclaimed2,
|
|
19517
20140
|
failTask: () => failTask2,
|
|
20141
|
+
findActiveTasksByVcs: () => findActiveTasksByVcs2,
|
|
19518
20142
|
findCompletedTaskInThread: () => findCompletedTaskInThread2,
|
|
19519
20143
|
findExistingLinearTrackerContextWork: () => findExistingLinearTrackerContextWork2,
|
|
19520
20144
|
findRecentCancelledTaskInThread: () => findRecentCancelledTaskInThread2,
|
|
@@ -19635,6 +20259,7 @@ __export(exports_db, {
|
|
|
19635
20259
|
getPageVersions: () => getPageVersions2,
|
|
19636
20260
|
getPausedTasksForAgent: () => getPausedTasksForAgent2,
|
|
19637
20261
|
getPendingApprovalVoteState: () => getPendingApprovalVoteState2,
|
|
20262
|
+
getPendingApprovalsForTasks: () => getPendingApprovalsForTasks2,
|
|
19638
20263
|
getPendingChatRelayTasks: () => getPendingChatRelayTasks2,
|
|
19639
20264
|
getPendingEventWaitNames: () => getPendingEventWaitNames2,
|
|
19640
20265
|
getPendingSlackRelayTasks: () => getPendingSlackRelayTasks2,
|
|
@@ -19786,6 +20411,7 @@ __export(exports_db, {
|
|
|
19786
20411
|
listWorkflowRuns: () => listWorkflowRuns2,
|
|
19787
20412
|
listWorkflowRunsPage: () => listWorkflowRunsPage2,
|
|
19788
20413
|
listWorkflows: () => listWorkflows2,
|
|
20414
|
+
literalPrefixPattern: () => literalPrefixPattern2,
|
|
19789
20415
|
markChatRelayAttempted: () => markChatRelayAttempted2,
|
|
19790
20416
|
markChatRelayDelivered: () => markChatRelayDelivered2,
|
|
19791
20417
|
markChatRelayGivenUp: () => markChatRelayGivenUp2,
|
|
@@ -19805,6 +20431,7 @@ __export(exports_db, {
|
|
|
19805
20431
|
markTasksNotified: () => markTasksNotified2,
|
|
19806
20432
|
maskSecrets: () => maskSecrets2,
|
|
19807
20433
|
moveAssetKey: () => moveAssetKey2,
|
|
20434
|
+
moveTaskChainKeyInTx: () => moveTaskChainKeyInTx2,
|
|
19808
20435
|
moveTaskFromBacklog: () => moveTaskFromBacklog2,
|
|
19809
20436
|
moveTaskToBacklog: () => moveTaskToBacklog2,
|
|
19810
20437
|
normalizeSkillFilePath: () => normalizeSkillFilePath2,
|
|
@@ -19910,11 +20537,11 @@ __export(exports_db, {
|
|
|
19910
20537
|
upsertSwarmConfig: () => upsertSwarmConfig2,
|
|
19911
20538
|
withFavoriteFlags: () => withFavoriteFlags2
|
|
19912
20539
|
});
|
|
19913
|
-
function
|
|
20540
|
+
function literalPrefixPattern2(prefix) {
|
|
19914
20541
|
return `${prefix.replace(/[\\%_]/g, "\\$&")}%`;
|
|
19915
20542
|
}
|
|
19916
20543
|
function assetKeyPrefixPattern(input) {
|
|
19917
|
-
return
|
|
20544
|
+
return literalPrefixPattern2(normalizeAssetKey(input));
|
|
19918
20545
|
}
|
|
19919
20546
|
function emitTaskLifecycleTelemetryAfterCommit(event, props, verify, actorUserId) {
|
|
19920
20547
|
getDbClient2().afterCommit(() => {
|
|
@@ -20496,7 +21123,7 @@ function rowToAssetKeyMapping(row) {
|
|
|
20496
21123
|
updatedBy: row.updated_by ?? undefined
|
|
20497
21124
|
};
|
|
20498
21125
|
}
|
|
20499
|
-
async function
|
|
21126
|
+
async function insertAssetKeyHistory2(input) {
|
|
20500
21127
|
await getDbClient2().run(`INSERT INTO asset_key_history
|
|
20501
21128
|
(id, entity_type, entity_id, previous_key, new_key, changed_by)
|
|
20502
21129
|
VALUES (?, ?, ?, ?, ?, ?)`, [
|
|
@@ -20538,7 +21165,7 @@ async function upsertAssetKeyMapping2(input) {
|
|
|
20538
21165
|
if (!row)
|
|
20539
21166
|
throw new Error("Failed to update asset key mapping");
|
|
20540
21167
|
if (existing.key !== key) {
|
|
20541
|
-
await
|
|
21168
|
+
await insertAssetKeyHistory2({
|
|
20542
21169
|
entityType: "file",
|
|
20543
21170
|
entityId: existing.id,
|
|
20544
21171
|
previousKey: existing.key,
|
|
@@ -20570,7 +21197,7 @@ async function upsertAssetKeyMapping2(input) {
|
|
|
20570
21197
|
]);
|
|
20571
21198
|
if (!row)
|
|
20572
21199
|
throw new Error("Failed to create asset key mapping");
|
|
20573
|
-
await
|
|
21200
|
+
await insertAssetKeyHistory2({
|
|
20574
21201
|
entityType: "file",
|
|
20575
21202
|
entityId: id,
|
|
20576
21203
|
newKey: key,
|
|
@@ -20694,12 +21321,7 @@ async function currentAssetKey(entityType, id) {
|
|
|
20694
21321
|
}
|
|
20695
21322
|
async function moveAssetKey2(input) {
|
|
20696
21323
|
const key = normalizeAssetKey(input.key);
|
|
20697
|
-
|
|
20698
|
-
readOnly: true
|
|
20699
|
-
});
|
|
20700
|
-
if (!audit.ok) {
|
|
20701
|
-
throw new Error("Asset namespace moves are blocked until structural errors, unknown personal users, or provider mapping drift are repaired.");
|
|
20702
|
-
}
|
|
21324
|
+
await assertAssetKeyMovesAllowed2();
|
|
20703
21325
|
const previousKey = await currentAssetKey(input.entityType, input.id);
|
|
20704
21326
|
if (!previousKey)
|
|
20705
21327
|
return false;
|
|
@@ -20715,55 +21337,9 @@ async function moveAssetKey2(input) {
|
|
|
20715
21337
|
return getDbClient2().transaction(async (tx) => {
|
|
20716
21338
|
switch (input.entityType) {
|
|
20717
21339
|
case "task": {
|
|
20718
|
-
const
|
|
20719
|
-
if (
|
|
21340
|
+
const movedTaskIds = await moveTaskChainKeyInTx2(input.id, input.descendantTaskIds ?? [], key, input.changedBy);
|
|
21341
|
+
if (movedTaskIds === false)
|
|
20720
21342
|
return false;
|
|
20721
|
-
const tasks = [root];
|
|
20722
|
-
for (const id of input.descendantTaskIds ?? []) {
|
|
20723
|
-
const task = id === root.id ? null : await getTaskById2(id);
|
|
20724
|
-
if (task)
|
|
20725
|
-
tasks.push(task);
|
|
20726
|
-
}
|
|
20727
|
-
const movedTaskIds = [];
|
|
20728
|
-
for (const task of tasks) {
|
|
20729
|
-
if (task.key === key)
|
|
20730
|
-
continue;
|
|
20731
|
-
const mappedFiles = await tx.query(`SELECT DISTINCT m.id, m."key" AS key
|
|
20732
|
-
FROM asset_key_mappings m
|
|
20733
|
-
JOIN task_attachments a
|
|
20734
|
-
ON m.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
|
|
20735
|
-
AND m.provider_org_id = COALESCE(a.agent_fs_org_id, '')
|
|
20736
|
-
AND m.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
|
|
20737
|
-
AND m.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
|
|
20738
|
-
WHERE a.task_id = ?
|
|
20739
|
-
AND (m.source_entity_type IS NOT 'task-attachment'
|
|
20740
|
-
OR m.source_entity_id IN (SELECT id FROM task_attachments WHERE task_id = ?))`, [task.id, task.id]);
|
|
20741
|
-
await tx.run('UPDATE agent_tasks SET "key" = ?, updated_by = ? WHERE id = ?', [
|
|
20742
|
-
key,
|
|
20743
|
-
input.changedBy ?? null,
|
|
20744
|
-
task.id
|
|
20745
|
-
]);
|
|
20746
|
-
for (const mapping of mappedFiles) {
|
|
20747
|
-
if (mapping.key === key)
|
|
20748
|
-
continue;
|
|
20749
|
-
await tx.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, mapping.id]);
|
|
20750
|
-
await insertAssetKeyHistory({
|
|
20751
|
-
entityType: "file",
|
|
20752
|
-
entityId: mapping.id,
|
|
20753
|
-
previousKey: mapping.key,
|
|
20754
|
-
newKey: key,
|
|
20755
|
-
changedBy: input.changedBy
|
|
20756
|
-
});
|
|
20757
|
-
}
|
|
20758
|
-
await insertAssetKeyHistory({
|
|
20759
|
-
entityType: "task",
|
|
20760
|
-
entityId: task.id,
|
|
20761
|
-
previousKey: task.key,
|
|
20762
|
-
newKey: key,
|
|
20763
|
-
changedBy: input.changedBy
|
|
20764
|
-
});
|
|
20765
|
-
movedTaskIds.push(task.id);
|
|
20766
|
-
}
|
|
20767
21343
|
return { movedTaskIds };
|
|
20768
21344
|
}
|
|
20769
21345
|
case "workflow":
|
|
@@ -20799,7 +21375,7 @@ async function moveAssetKey2(input) {
|
|
|
20799
21375
|
await tx.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, input.id]);
|
|
20800
21376
|
break;
|
|
20801
21377
|
}
|
|
20802
|
-
await
|
|
21378
|
+
await insertAssetKeyHistory2({
|
|
20803
21379
|
entityType: input.entityType,
|
|
20804
21380
|
entityId: input.id,
|
|
20805
21381
|
previousKey,
|
|
@@ -21213,7 +21789,7 @@ async function createTaskExtended2(task, options) {
|
|
|
21213
21789
|
if (parent.outputSchema && !options.outputSchema && options.inheritParentOutputSchema !== false) {
|
|
21214
21790
|
options.outputSchema = parent.outputSchema;
|
|
21215
21791
|
}
|
|
21216
|
-
if (parent.requestedByUserId && !options.requestedByUserId) {
|
|
21792
|
+
if (parent.requestedByUserId && !options.requestedByUserId && options.inheritParentRequester !== false) {
|
|
21217
21793
|
options.requestedByUserId = parent.requestedByUserId;
|
|
21218
21794
|
requestedByUserIdInherited = true;
|
|
21219
21795
|
}
|
|
@@ -21449,7 +22025,7 @@ async function createTaskExtended2(task, options) {
|
|
|
21449
22025
|
priority: row.priority
|
|
21450
22026
|
}, (task) => task !== null, row.requestedByUserId);
|
|
21451
22027
|
getDbClient2().afterCommit(() => {
|
|
21452
|
-
import("./event-bus-
|
|
22028
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
|
|
21453
22029
|
workflowEventBus.emit("task.created", {
|
|
21454
22030
|
taskId: row.id,
|
|
21455
22031
|
task: row.task,
|
|
@@ -21531,7 +22107,7 @@ async function releaseTask2(taskId, wakeSnapshot) {
|
|
|
21531
22107
|
} catch {}
|
|
21532
22108
|
if (isRuntimePoolsEnabled() && !wakeSnapshot)
|
|
21533
22109
|
getDbClient2().afterCommit(() => {
|
|
21534
|
-
import("./event-bus-
|
|
22110
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
|
|
21535
22111
|
});
|
|
21536
22112
|
}
|
|
21537
22113
|
return row ? rowToAgentTask(row) : null;
|
|
@@ -21601,7 +22177,7 @@ async function rejectTask2(taskId, agentId, reason) {
|
|
|
21601
22177
|
} catch {}
|
|
21602
22178
|
if (isRuntimePoolsEnabled())
|
|
21603
22179
|
getDbClient2().afterCommit(() => {
|
|
21604
|
-
import("./event-bus-
|
|
22180
|
+
import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
|
|
21605
22181
|
});
|
|
21606
22182
|
}
|
|
21607
22183
|
return row ? rowToAgentTask(row) : null;
|
|
@@ -26762,120 +27338,33 @@ async function getRootTaskChain2(rootTaskId) {
|
|
|
26762
27338
|
ORDER BY t.createdAt, t.rowid`, [rootTaskId]);
|
|
26763
27339
|
return rows.map(rowToAgentTask);
|
|
26764
27340
|
}
|
|
26765
|
-
async function listRecentSessions2(opts) {
|
|
26766
|
-
const
|
|
26767
|
-
const
|
|
26768
|
-
|
|
26769
|
-
|
|
26770
|
-
|
|
26771
|
-
|
|
26772
|
-
|
|
26773
|
-
|
|
26774
|
-
|
|
26775
|
-
|
|
26776
|
-
}
|
|
26777
|
-
|
|
26778
|
-
|
|
26779
|
-
|
|
26780
|
-
|
|
26781
|
-
|
|
26782
|
-
|
|
26783
|
-
|
|
26784
|
-
|
|
26785
|
-
|
|
26786
|
-
|
|
26787
|
-
|
|
26788
|
-
params.push(literalPrefixPattern(opts.contextKeyPrefix));
|
|
26789
|
-
}
|
|
26790
|
-
if (opts?.viewer) {
|
|
26791
|
-
const viewer = sessionViewerCondition(opts.viewer);
|
|
26792
|
-
conditions.push(viewer.sql);
|
|
26793
|
-
params.push(...viewer.params);
|
|
26794
|
-
}
|
|
26795
|
-
params.push(limit, offset);
|
|
26796
|
-
const rootRows = await getDbClient2().query(`WITH RECURSIVE chain(root_id, id, lastUpdatedAt, status) AS (
|
|
26797
|
-
SELECT r.id, r.id, r.lastUpdatedAt, r.status
|
|
26798
|
-
FROM agent_tasks r
|
|
26799
|
-
WHERE ${conditions.join(" AND ")}
|
|
26800
|
-
UNION ALL
|
|
26801
|
-
SELECT c.root_id, t.id, t.lastUpdatedAt, t.status
|
|
26802
|
-
FROM agent_tasks t
|
|
26803
|
-
JOIN chain c ON t.parentTaskId = c.id
|
|
26804
|
-
),
|
|
26805
|
-
agg AS (
|
|
26806
|
-
SELECT
|
|
26807
|
-
root_id,
|
|
26808
|
-
COUNT(*) AS chainCount,
|
|
26809
|
-
MAX(lastUpdatedAt) AS lastActivityAt
|
|
26810
|
-
FROM chain
|
|
26811
|
-
GROUP BY root_id
|
|
26812
|
-
),
|
|
26813
|
-
latest_status AS (
|
|
26814
|
-
SELECT c.root_id, c.status AS latestStatus
|
|
26815
|
-
FROM chain c
|
|
26816
|
-
JOIN agg a ON c.root_id = a.root_id AND c.lastUpdatedAt = a.lastActivityAt
|
|
26817
|
-
GROUP BY c.root_id
|
|
26818
|
-
)
|
|
26819
|
-
SELECT
|
|
26820
|
-
r.*,
|
|
26821
|
-
a.chainCount AS __chainCount,
|
|
26822
|
-
a.lastActivityAt AS __lastActivityAt,
|
|
26823
|
-
COALESCE(ls.latestStatus, r.status) AS __latestStatus
|
|
26824
|
-
FROM agent_tasks r
|
|
26825
|
-
JOIN agg a ON a.root_id = r.id
|
|
26826
|
-
LEFT JOIN latest_status ls ON ls.root_id = r.id
|
|
26827
|
-
ORDER BY a.lastActivityAt DESC, r.createdAt DESC, r.id DESC
|
|
26828
|
-
LIMIT ? OFFSET ?`, params);
|
|
26829
|
-
if (opts?.slim) {
|
|
26830
|
-
return rootRows.map((row) => {
|
|
26831
|
-
const { __chainCount, __lastActivityAt, __latestStatus, ...taskRow } = row;
|
|
26832
|
-
return {
|
|
26833
|
-
root: rowToAgentTaskSummary(taskRow),
|
|
26834
|
-
chainTaskCount: __chainCount,
|
|
26835
|
-
lastActivityAt: __lastActivityAt ?? row.lastUpdatedAt,
|
|
26836
|
-
latestStatus: __latestStatus ?? row.status
|
|
26837
|
-
};
|
|
26838
|
-
});
|
|
26839
|
-
}
|
|
26840
|
-
return rootRows.map((row) => {
|
|
26841
|
-
const { __chainCount, __lastActivityAt, __latestStatus, ...taskRow } = row;
|
|
26842
|
-
return {
|
|
26843
|
-
root: rowToAgentTask(taskRow),
|
|
26844
|
-
chainTaskCount: __chainCount,
|
|
26845
|
-
lastActivityAt: __lastActivityAt ?? row.lastUpdatedAt,
|
|
26846
|
-
latestStatus: __latestStatus ?? row.status
|
|
26847
|
-
};
|
|
26848
|
-
});
|
|
27341
|
+
async function listRecentSessions2(opts = {}) {
|
|
27342
|
+
const query = sessionSummaryQuery(opts);
|
|
27343
|
+
const rootRows = await getDbClient2().query(`SELECT r.*, a.chainCount AS __chainCount, a.lastActivityAt AS __lastActivityAt,
|
|
27344
|
+
a.latestStatus AS __latestStatus, a.readState AS __readState,
|
|
27345
|
+
a.snoozeUntil AS __snoozeUntil, a.needsYou AS __needsYou
|
|
27346
|
+
FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id
|
|
27347
|
+
ORDER BY ${opts.triage === "later" ? "a.snoozeUntil ASC," : ""}
|
|
27348
|
+
a.lastActivityAt DESC, r.createdAt DESC, r.id DESC LIMIT ? OFFSET ?`, [...query.params, opts.limit ?? 25, opts.offset ?? 0]);
|
|
27349
|
+
const fields = await sessionPageFields(rootRows.map((row) => ({
|
|
27350
|
+
id: row.id,
|
|
27351
|
+
requestedByUserId: row.requestedByUserId ?? undefined
|
|
27352
|
+
})));
|
|
27353
|
+
return rootRows.map((row) => ({
|
|
27354
|
+
root: opts.slim ? rowToAgentTaskSummary(row) : rowToAgentTask(row),
|
|
27355
|
+
chainTaskCount: row.__chainCount,
|
|
27356
|
+
lastActivityAt: row.__lastActivityAt,
|
|
27357
|
+
latestStatus: row.__latestStatus,
|
|
27358
|
+
...row.__readState ? { readState: row.__readState } : {},
|
|
27359
|
+
snoozeUntil: row.__snoozeUntil,
|
|
27360
|
+
needsYou: !!row.__needsYou,
|
|
27361
|
+
groupKey: sessionGroupKey(row.key),
|
|
27362
|
+
...fields.get(row.id)
|
|
27363
|
+
}));
|
|
26849
27364
|
}
|
|
26850
|
-
async function countSessions2(opts) {
|
|
26851
|
-
const
|
|
26852
|
-
const
|
|
26853
|
-
const requestedByUserId = opts?.requestedByUserId?.trim() || undefined;
|
|
26854
|
-
const conditions = ["r.parentTaskId IS NULL"];
|
|
26855
|
-
const params = [];
|
|
26856
|
-
if (sources.length > 0) {
|
|
26857
|
-
conditions.push(`r.source IN (${sources.map(() => "?").join(", ")})`);
|
|
26858
|
-
params.push(...sources);
|
|
26859
|
-
}
|
|
26860
|
-
if (q && q.length > 0) {
|
|
26861
|
-
conditions.push("(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)");
|
|
26862
|
-
const like = `%${q.toLowerCase()}%`;
|
|
26863
|
-
params.push(like, like);
|
|
26864
|
-
}
|
|
26865
|
-
if (requestedByUserId) {
|
|
26866
|
-
conditions.push("r.requestedByUserId = ?");
|
|
26867
|
-
params.push(requestedByUserId);
|
|
26868
|
-
}
|
|
26869
|
-
if (opts?.contextKeyPrefix) {
|
|
26870
|
-
conditions.push(`r.contextKey LIKE ? ESCAPE '\\'`);
|
|
26871
|
-
params.push(literalPrefixPattern(opts.contextKeyPrefix));
|
|
26872
|
-
}
|
|
26873
|
-
if (opts?.viewer) {
|
|
26874
|
-
const viewer = sessionViewerCondition(opts.viewer);
|
|
26875
|
-
conditions.push(viewer.sql);
|
|
26876
|
-
params.push(...viewer.params);
|
|
26877
|
-
}
|
|
26878
|
-
const row = await getDbClient2().get(`SELECT COUNT(*) AS count FROM agent_tasks r WHERE ${conditions.join(" AND ")}`, params);
|
|
27365
|
+
async function countSessions2(opts = {}) {
|
|
27366
|
+
const query = sessionCountQuery(opts);
|
|
27367
|
+
const row = await getDbClient2().get(query.sql, query.params);
|
|
26879
27368
|
return row?.count ?? 0;
|
|
26880
27369
|
}
|
|
26881
27370
|
function rowToBudget(row) {
|
|
@@ -27604,7 +28093,8 @@ var init_db3 = __esm(() => {
|
|
|
27604
28093
|
init_context_versions();
|
|
27605
28094
|
init_model_profiles();
|
|
27606
28095
|
init_runtime();
|
|
27607
|
-
|
|
28096
|
+
init_session_moves();
|
|
28097
|
+
init_session_tree();
|
|
27608
28098
|
init_human_free();
|
|
27609
28099
|
init_read();
|
|
27610
28100
|
init_write();
|
|
@@ -27623,6 +28113,7 @@ var init_db3 = __esm(() => {
|
|
|
27623
28113
|
init_approvals();
|
|
27624
28114
|
init_context_versions();
|
|
27625
28115
|
init_script_runs();
|
|
28116
|
+
init_session_moves();
|
|
27626
28117
|
init_runtime();
|
|
27627
28118
|
init_read();
|
|
27628
28119
|
init_write();
|
|
@@ -27640,6 +28131,10 @@ var init_db3 = __esm(() => {
|
|
|
27640
28131
|
promotePendingSteeringForTask: (...args) => promotePendingSteeringForTask(...args),
|
|
27641
28132
|
cascadeFailDependents: (...args) => cascadeFailDependents2(...args)
|
|
27642
28133
|
});
|
|
28134
|
+
configureSessionMoveDependencies({
|
|
28135
|
+
auditAssetKeys: () => auditAssetKeys(getDb2()),
|
|
28136
|
+
insertAssetKeyHistory: (...args) => insertAssetKeyHistory2(...args)
|
|
28137
|
+
});
|
|
27643
28138
|
configureTaskReadDependencies({
|
|
27644
28139
|
checkDependencies: (taskId) => checkDependencies2(taskId),
|
|
27645
28140
|
assetKeyPrefixPattern: (input) => assetKeyPrefixPattern(input),
|
|
@@ -27677,4 +28172,4 @@ var init_db3 = __esm(() => {
|
|
|
27677
28172
|
};
|
|
27678
28173
|
});
|
|
27679
28174
|
|
|
27680
|
-
export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, getCurrentRequestUserId, init_request_auth_context, setTelemetryIngestObserver, isTelemetryEnabled, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, setTelemetryRoleResolver, setTelemetryFunctionResolver, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates, init_templates2, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime, cachedUserRole, cachedUserFunction, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey, isCodexAuthFailureReason, init_codex_auth_failure, isEnvExportRestrictedKey, init_config_env_export, MASKED_SECRET_VALUE, init_config_secrets, HeartbeatExpiryError, init_heartbeat_expiry, isRuntimePoolsEnabled, init_runtime_pools_flag, normalizeDate, normalizeDateRequired, init_date_utils, rowToAgent, updateAgentCredentialState2, updateAgentCredentialMissing2, createAgent2, getAgentById2, EXTENSION_AGENT_ROLE2, NOT_EXTENSION_AGENT_SQL2, isExtensionAgent2, extensionAgentAssignmentError2, ReservedAgentRoleError2, reservedRoleViolation2, ExtensionAgentAssignmentError2, getAllAgents2, getAgentStatusCounts2, getLeadAgent2, updateAgentStatus2, updateAgentMaxTasks2, updateAgentProvider2, setAgentHarnessProvider2, updateAgentCredStatus2, listAgentsWithCredStatusByProvider2, getAgentHarnessProviders2, updateAgentActivity2, MAX_EMPTY_POLLS2, incrementEmptyPollCount2, resetEmptyPollCount2, shouldBlockPolling2, deleteAgent2, getActiveTaskCount2, hasCapacity2, getRemainingCapacity2, updateAgentStatusFromCapacity2, isPoolAffinityEnforcementEnabled2, buildRoutingAffinityFromAgent2, isAgentEligibleForTask2, getAgentDailyTaskCounts2, init_agents, listApprovalRequestSummaries2, getPendingApprovalVoteState2, recordApprovalVotes2, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, rowToAgentTask, getTaskById2, getChildTasks2, TASK_LINEAGE_LIMITS2, getTaskLineage2, hasNonTerminalResumeChild2, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, getSupersededTasksWithoutResume2, getSupersededTasksWithUnsettledDependents2, hasNonTerminalRerouteDecisionChild2, getTasksByAgentId2, getAgentCurrentTask2, getTasksByStatus2, findTaskByVcs2, findTaskByGitHub2, readableSessionCondition, getAllTasks2, getTasksCount2, getTaskStats2, getCompletedSlackTasks2, getPendingSlackRelayTasks2, markSlackRelayAttempted2, markSlackRelayDelivered2, markFinalizedSlackRelaysDelivered2, getPendingChatRelayTasks2, giveUpStaleChatRelays2, markChatRelayAttempted2, recordChatRelayError2, markChatRelayDelivered2, markChatRelayGivenUp2, getRecentlyFinishedWorkerTasks2, markTasksNotified2, resetTasksNotified2, getInProgressSlackTasks2, getSlackTasksMissingTree2, getInProgressTasksByContextKey2, isLinearTrackerContextKey2, findExistingLinearTrackerContextWork2, getLatestTaskByContextKey2, getLatestScriptRunStepTaskByContextKey2, getAgentWorkingOnThread2, getLatestActiveTaskInThread2, getLatestLeadTaskInThread2, getAgentWorkingOnContextKey2, getLatestActiveTaskByContextKey2, getLatestLeadTaskByContextKey2, getMostRecentTaskInThread2, findCompletedTaskInThread2, findRecentCancelledTaskInThread2, init_read, MODEL_PROFILE_CONFIG_KEY, listModelProfiles, getModelProfileByName, createModelProfile, updateModelProfile, modelProfileReferences, modelProfileRefError, deleteModelProfile, getAgentDefaultProfileName, repoModelOverrideKeys, taskProfileError, init_model_profiles, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, init_workflow_runs, CHAT_SDK_ADAPTER_NAMES, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, firstIssueText, isAdapterEntryEnabled, init_schema, TELEMETRY_RANKING_KEY, PUBLIC_RANKING_ENABLED_KEY, RANKING_CATEGORIES, readTelemetryRanking, rankingFormSchema, buildListing, init_telemetry_ranking, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, completedStatusIcon, init_reaction_shortcode, API_DRAINING_HEADER, API_DRAIN_MAX_MS_LIMIT, isApiDrainingResponse, init_api_drain, parseEnabledTools, init_enabled_tools, parseTaskToolManifest, CHAT_TASK_ONLY_TOOLS, isChatSdkTask, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isApiOnlyConfigKey, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateRuntimeTokenTtlHours, validateControllerTokenTtlDays, validateControllerGraceSec, validateConfigValue, validateExportToEnv, init_swarm_config_guard, getDefaultAuthorizationIdForProvider, getOAuthApp, getOAuthAppById, getOAuthAppIdByProvider, createOAuthApp, updateOAuthAppById, upsertOAuthApp, listAuthorizationsForApp, getAuthorizationById, upsertAuthorization, updateAuthorizationTokens, updateAuthorizationIdentity, deleteAuthorizationById, deleteAuthorizationsForApp, createOAuthPending, consumeOAuthPending, gcOAuthPending, markAuthorizationRefreshFailed, getOAuthTokens, listAuthorizationSweepRows, listKeepAliveAuthorizations, deleteOAuthTokens, acquireOAuthRefreshLock, releaseOAuthRefreshLock, init_oauth, OpenAI2, init_openai, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants, LONGTERM_ROOT, MEMORY_KEY_PATTERN, MEMORY_KEY_PATTERN_MESSAGE, MEMORY_KEY_MAX_LENGTH, isLongtermKey, longtermKeyError, isConsolidatedKey, consolidatedKeyMessage, resolveStoreKey, init_key_paths, computeScore, rerank, init_reranker, rowToCandidate, init_sqlite_store, getEmbeddingProvider2, resetEmbeddingProvider2, getMemoryStore2, init_memory, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db2, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, STEERING_MOVED_ERROR, SteeringRequestError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, recordKeySeatMismatch2, getScriptRunExecutionArgs2, getSlackRenderV2ActivatedAt2, ensureSlackRenderV2Activation2, getSlackDelegationActivatedAt2, ensureSlackDelegationActivation2, isPendingSlackMessage2, isSettledSlackMessage2, recordSlackMessage2, reserveSlackMessage2, bindSlackMessageTimestamp2, updateSlackMessageRecord2, markSlackTreeRendered2, deleteSlackMessageRecord2, getSlackTreeMessage2, getSlackTreeMessageByThread2, getSlackOutcomeMessage2, getResolvableDeferralOutcomes2, markSlackDeferralResolved2, noteSlackOutcomeDeliveryFailure2, abandonSlackOutcomeDelivery2, getSlackTreeMessages2, getSlackMessageByChannelTs2, getSlackTasksInThread2, listSlackThreadsAwaitingHuman2, isSlackThreadAwaitingHuman2, markTaskSlackReplySent2, setSlackMessageTracking2, updateTaskVcs2, insertTaskAttachment2, recordTaskPullRequestAttachments2, getAssetKeyMappingByProvider2, upsertAssetKeyMapping2, getAssetKeyMapping2, listAssetSummaries2, moveAssetKey2, deleteTaskAttachment2, replaceTaskAttachment2, getTaskAttachments2, createSteeringMessage2, getSteeringMessagesForTask2, getSteeringMessageById2, getPendingSteeringForTask2, getPendingSteeringForAgent2, markSteeringDelivered2, markSteeringHandled2, markSteeringPromoted2, cancelPendingSteeringForTask2, hasPendingSteering2, getAgentWithTasks2, getAllAgentsWithTasks2, createLogEntry2, getLogsByAgentId2, getLogsByTaskId2, getLogsByTaskIdAndEventType2, getLogsByTaskIdChronological2, getLogsByEventType2, getAllLogs2, findRecentSimilarTasks2, createTaskExtended2, claimTask2, releaseTask2, acceptTask2, rejectTask2, moveTaskToBacklog2, moveTaskFromBacklog2, promoteDraftTask2, refreshDraftTaskLease2, promoteAbandonedDraftTasks2, releaseStaleReviewingTasks2, releaseStaleOfferedTasksForOfflineAgents2, getOfferedTasksForAgent2, claimOfferedTask2, getUnassignedTasksCount2, getUnassignedTaskIds2, getUnassignedTaskIdsForAgent2, checkDependencies2, getDependentTasks2, cascadeFailDependents2, updateAgentProfile2, updateAgentName2, createChannel2, getMessageById2, getChannelById2, getChannelByName2, getAllChannels2, deleteChannel2, postMessage2, getChannelMessages2, updateReadState2, getLastReadAt2, getUnreadMessages2, getMentionsForAgent2, getInboxSummary2, claimMentions2, releaseMentionProcessing2, releaseStaleMentionProcessing2, createService2, getServiceById2, getServiceByAgentAndName2, getServicesByAgentId2, getAllServices2, updateServiceStatus2, deleteService2, upsertService2, deleteServicesByAgentId2, createSessionLogs2, getSessionLogsByTaskId2, getSessionLogsBySession2, createSessionCost2, getSessionCostsByTaskId2, getSessionCostsByAgentId2, getAllSessionCosts2, getSessionCostsFiltered2, UNATTRIBUTED_USER_ID2, getSessionCostSummary2, getAttributionByPerson2, getDashboardCostSummary2, createInboxMessage2, getInboxMessageById2, getUnreadInboxMessages2, claimInboxMessages2, markInboxMessageRead2, markInboxMessageResponded2, markInboxMessageDelegated2, releaseStaleProcessingInbox2, getConcurrentContext2, getScheduledTasks2, getScheduledTaskById2, getScheduledTaskByName2, createScheduledTask2, updateScheduledTask2, deleteScheduledTask2, getDueScheduledTasks2, autoEncryptLegacyPlaintextSecrets2, maskSecrets2, getSwarmConfigs2, getInjectableGlobalConfigs2, getSwarmConfigById2, getSwarmConfigLookupById2, upsertSwarmConfig2, emitBuiltInIntegrationConnectedOnce2, deleteSwarmConfig2, deleteSwarmConfigByKey2, getResolvedConfig2, getSwarmRepos2, getSwarmRepoById2, getSwarmRepoByName2, getSwarmRepoByUrl2, createSwarmRepo2, updateSwarmRepo2, deleteSwarmRepo2, getAgentMailInboxMapping2, getAgentMailInboxMappingsByAgent2, getAllAgentMailInboxMappings2, createAgentMailInboxMapping2, deleteAgentMailInboxMapping2, findTaskByAgentMailThread2, insertActiveSession2, deleteActiveSession2, deleteActiveSessionById2, getActiveSessions2, heartbeatActiveSession2, cleanupStaleSessions2, cleanupAgentSessions2, updateActiveSessionProviderSessionId2, getActiveSessionForTask2, reassociateSessionLogs2, getStalledInProgressTasks2, getStalePinnedResumes2, failPendingResumeIfUnclaimed2, getIdleWorkersWithCapacity2, getUnassignedPoolTasks2, getStaleUnassignedAffinityTasks2, getRecentFailedTasks2, getRecentCompletedCount2, getRecentFailedCount2, createWorkflow2, getWorkflow2, listWorkflows2, updateWorkflow2, deleteWorkflow2, getWorkflowsByScheduleId2, createWorkflowRun2, getWorkflowRun2, updateWorkflowRun2, listWorkflowRuns2, countWorkflowRuns2, listWorkflowRunsPage2, createWorkflowRunStep2, getWorkflowRunStep2, updateWorkflowRunStep2, getWorkflowRunStepsByRunId2, getStuckWorkflowRuns2, getLastSuccessfulRun2, getLastRunStart2, getRetryableSteps2, getCompletedStepNodeIds2, getTaskByWorkflowRunStepId2, detachTaskFromWorkflowRunStep2, getStepByIdempotencyKey2, getStepCountForNode2, getLatestStepForNode2, getCurrentStepForNode2, createWorkflowVersion2, getWorkflowVersions2, getWorkflowVersion2, createAppVersion2, getAppVersions2, getAppVersion2, createPage2, getPage2, getPageBySlug2, getLatestPageBySlug2, listPagesByAgent2, listAllPages2, countAllPages2, countPagesByAgent2, updatePage2, deletePage2, incrementPageViewCount2, createPageVersion2, getPageVersions2, getPageVersion2, createMetric2, getMetric2, getMetricBySlug2, listMetricsByAgent2, listAllMetrics2, countAllMetrics2, countMetricsByAgent2, updateMetric2, deleteMetric2, createMetricVersion2, getMetricVersions2, getMetricVersion2, getPromptTemplates2, getPromptTemplateById2, upsertPromptTemplate2, deletePromptTemplate2, resetPromptTemplateToDefault2, getPromptTemplateHistory2, resolvePromptTemplate2, checkoutPromptTemplate2, getAllChannelActivityCursors2, getChannelActivityCursor2, upsertChannelActivityCursor2, createApprovalRequest2, getApprovalRequestById2, resolveApprovalRequest2, cancelApprovalRequestById2, cancelPendingApprovalRequestsForRun2, listCancelledApprovalRequestsForRun2, listCancelledApprovalRequestsForStep2, claimApprovalCancellationNotification2, completeApprovalCancellationNotificationClaim2, releaseApprovalCancellationNotificationClaim2, updateApprovalRequestNotifications2, listApprovalRequests2, getStuckApprovalRuns2, getApprovalRequestByStepId2, getExpiredPendingApprovals2, getStaleApprovalRequests2, createWaitState2, getWaitStateById2, getWaitStateByStepId2, getDueWaitStates2, getPendingEventWaitNames2, getPendingWaitsByEvent2, resolveWaitState2, getStuckWaitRuns2, SKILL_FILE_LIMITS2, normalizeSkillFilePath2, createSkill2, updateSkill2, listSkillFileManifest2, getSkillFiles2, getSkillFile2, upsertSkillFile2, upsertSkillFiles2, deleteSkillFile2, deleteSkill2, getSkillById2, getSkillByName2, listSkills2, searchSkills2, installSkill2, getSystemDefaultSkills2, installSystemDefaultSkillsForAgent2, uninstallSkill2, getAgentSkills2, toggleAgentSkill2, createMcpServer2, emitMcpServerConnectedTelemetry2, updateMcpServer2, deleteMcpServer2, getMcpServerById2, getMcpServerByName2, listMcpServers2, installMcpServer2, uninstallMcpServer2, getAgentMcpServers2, createContextSnapshot2, getContextSnapshotsByTaskId2, getContextSnapshotsBySessionId2, getContextSummaryByTaskId2, getAvailableKeyIndices2, recordKeyUsage2, setApiKeyPlan2, markKeyRateLimited2, recordKeyAuthFailure2, recordKeyRateLimitWindows2, setApiKeyName2, clearKeyRateLimit2, getKeyStatuses2, getKeyCostSummary2, getUserById2, getAllUsers2, createUser2, updateUser2, deleteUser2, listInboxState2, upsertInboxState2, listFavorites2, listUserFavorites2, getFavoriteItemIdSet2, setFavorite2, setUserFavorite2, withFavoriteFlags2, listTaskTemplates2, getRootTaskChain2, listRecentSessions2, countSessions2, getBudget2, getBudgets2, upsertBudget2, deleteBudget2, getAllPricingRows2, getPricingRows2, getActivePricingRow2, insertPricingRow2, deletePricingRow2, getDailySpendForAgent2, getDailySpendGlobal2, getDailySpendForUser2, recordBudgetRefusalNotification2, getBudgetRefusalNotification2, getRecentBudgetRefusalNotifications2, hasBudgetRefusalNotificationToday2, setBudgetRefusalFollowUpTaskId2, getLiveAgentCounts2, getReadyAgentCounts2, getInstanceActivity2, getSwarmMetrics2, hasFirstCompletedTask2, getKv2, sweepExpiredKv2, sweepExpiredKvPrefix2, upsertKv2, claimKv2, deleteKv2, KvTypeCollisionError2, incrKv2, kvPrefixUpperBound2, listKv2, countKv2, createScriptRun2, recordInlineScriptRun2, getScriptRun2, getScriptRunByIdempotencyKey2, listScriptRuns2, countScriptRuns2, countActiveScriptRuns2, updateScriptRun2, updateScriptRunIfNotTerminal2, updateScriptRunIfRunning2, getRunningScriptRuns2, getScriptRunJournalStep2, upsertScriptRunJournalStep2, listScriptRunJournalSteps2, countScriptRunJournalSteps2, countScriptRunJournalAgentTaskSteps2, exports_db, init_db3 };
|
|
28175
|
+
export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, bitbucketContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, getCurrentRequestUserId, init_request_auth_context, setTelemetryIngestObserver, isTelemetryEnabled, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, setTelemetryRoleResolver, setTelemetryFunctionResolver, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates, init_templates2, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime, cachedUserRole, cachedUserFunction, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey, isCodexAuthFailureReason, init_codex_auth_failure, isEnvExportRestrictedKey, init_config_env_export, MASKED_SECRET_VALUE, init_config_secrets, HeartbeatExpiryError, init_heartbeat_expiry, isRuntimePoolsEnabled, init_runtime_pools_flag, normalizeDate, normalizeDateRequired, init_date_utils, rowToAgent, updateAgentCredentialState2, updateAgentCredentialMissing2, createAgent2, getAgentById2, EXTENSION_AGENT_ROLE2, NOT_EXTENSION_AGENT_SQL2, isExtensionAgent2, extensionAgentAssignmentError2, ReservedAgentRoleError2, reservedRoleViolation2, ExtensionAgentAssignmentError2, getAllAgents2, getAgentStatusCounts2, getLeadAgent2, updateAgentStatus2, updateAgentMaxTasks2, updateAgentProvider2, setAgentHarnessProvider2, updateAgentCredStatus2, listAgentsWithCredStatusByProvider2, getAgentHarnessProviders2, updateAgentActivity2, MAX_EMPTY_POLLS2, incrementEmptyPollCount2, resetEmptyPollCount2, shouldBlockPolling2, deleteAgent2, getActiveTaskCount2, hasCapacity2, getRemainingCapacity2, updateAgentStatusFromCapacity2, isPoolAffinityEnforcementEnabled2, buildRoutingAffinityFromAgent2, isAgentEligibleForTask2, getAgentDailyTaskCounts2, init_agents, listApprovalRequestSummaries2, getPendingApprovalVoteState2, recordApprovalVotes2, getPendingApprovalsForTasks2, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, rowToAgentTask, getTaskById2, getChildTasks2, TASK_LINEAGE_LIMITS2, getTaskLineage2, hasNonTerminalResumeChild2, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, getSupersededTasksWithoutResume2, getSupersededTasksWithUnsettledDependents2, hasNonTerminalRerouteDecisionChild2, getTasksByAgentId2, getAgentCurrentTask2, getTasksByStatus2, findTaskByVcs2, findActiveTasksByVcs2, findTaskByGitHub2, readableSessionCondition, getAllTasks2, getTasksCount2, getTaskStats2, getCompletedSlackTasks2, getPendingSlackRelayTasks2, markSlackRelayAttempted2, markSlackRelayDelivered2, markFinalizedSlackRelaysDelivered2, getPendingChatRelayTasks2, giveUpStaleChatRelays2, markChatRelayAttempted2, recordChatRelayError2, markChatRelayDelivered2, markChatRelayGivenUp2, getRecentlyFinishedWorkerTasks2, markTasksNotified2, resetTasksNotified2, getInProgressSlackTasks2, getSlackTasksMissingTree2, getInProgressTasksByContextKey2, isLinearTrackerContextKey2, findExistingLinearTrackerContextWork2, getLatestTaskByContextKey2, getLatestScriptRunStepTaskByContextKey2, getAgentWorkingOnThread2, getLatestActiveTaskInThread2, getLatestLeadTaskInThread2, getAgentWorkingOnContextKey2, getLatestActiveTaskByContextKey2, getLatestLeadTaskByContextKey2, getMostRecentTaskInThread2, findCompletedTaskInThread2, findRecentCancelledTaskInThread2, init_read, MODEL_PROFILE_CONFIG_KEY, listModelProfiles, getModelProfileByName, createModelProfile, updateModelProfile, modelProfileReferences, modelProfileRefError, deleteModelProfile, getAgentDefaultProfileName, repoModelOverrideKeys, taskProfileError, init_model_profiles, AssetKeyMovesBlockedError2, assertAssetKeyMovesAllowed2, moveTaskChainKeyInTx2, moveSessionChains, listPrefixRoots, listSharedPrefixRoots, init_session_moves, getSessionReadState, getSessionTree, init_session_tree, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, createForeachChildSteps, createForeachAttemptSteps, init_workflow_runs, CHAT_SDK_ADAPTER_NAMES, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, firstIssueText, isAdapterEntryEnabled, init_schema, TELEMETRY_RANKING_KEY, PUBLIC_RANKING_ENABLED_KEY, RANKING_CATEGORIES, readTelemetryRanking, rankingFormSchema, buildListing, init_telemetry_ranking, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, completedStatusIcon, init_reaction_shortcode, API_DRAINING_HEADER, API_DRAIN_MAX_MS_LIMIT, isApiDrainingResponse, init_api_drain, parseEnabledTools, init_enabled_tools, parseTaskToolManifest, CHAT_TASK_ONLY_TOOLS, isChatSdkTask, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isApiOnlyConfigKey, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateRuntimeTokenTtlHours, validateControllerTokenTtlDays, validateControllerGraceSec, validateConfigValue, validateExportToEnv, init_swarm_config_guard, getDefaultAuthorizationIdForProvider, getOAuthApp, getOAuthAppById, getOAuthAppIdByProvider, createOAuthApp, updateOAuthAppById, upsertOAuthApp, listAuthorizationsForApp, getAuthorizationById, upsertAuthorization, updateAuthorizationTokens, updateAuthorizationIdentity, deleteAuthorizationById, deleteAuthorizationsForApp, createOAuthPending, consumeOAuthPending, gcOAuthPending, markAuthorizationRefreshFailed, getOAuthTokens, listAuthorizationSweepRows, listKeepAliveAuthorizations, deleteOAuthTokens, acquireOAuthRefreshLock, releaseOAuthRefreshLock, init_oauth, OpenAI2, init_openai, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants, LONGTERM_ROOT, MEMORY_KEY_PATTERN, MEMORY_KEY_PATTERN_MESSAGE, MEMORY_KEY_MAX_LENGTH, isLongtermKey, longtermKeyError, isConsolidatedKey, consolidatedKeyMessage, resolveStoreKey, init_key_paths, computeScore, rerank, init_reranker, searchMemoryCandidates, init_search_candidates, rowToCandidate, init_sqlite_store, getEmbeddingProvider2, resetEmbeddingProvider2, getMemoryStore2, init_memory, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db2, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, STEERING_MOVED_ERROR, SteeringRequestError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, recordKeySeatMismatch2, getScriptRunExecutionArgs2, literalPrefixPattern2, getSlackRenderV2ActivatedAt2, ensureSlackRenderV2Activation2, getSlackDelegationActivatedAt2, ensureSlackDelegationActivation2, isPendingSlackMessage2, isSettledSlackMessage2, recordSlackMessage2, reserveSlackMessage2, bindSlackMessageTimestamp2, updateSlackMessageRecord2, markSlackTreeRendered2, deleteSlackMessageRecord2, getSlackTreeMessage2, getSlackTreeMessageByThread2, getSlackOutcomeMessage2, getResolvableDeferralOutcomes2, markSlackDeferralResolved2, noteSlackOutcomeDeliveryFailure2, abandonSlackOutcomeDelivery2, getSlackTreeMessages2, getSlackMessageByChannelTs2, getSlackTasksInThread2, listSlackThreadsAwaitingHuman2, isSlackThreadAwaitingHuman2, markTaskSlackReplySent2, setSlackMessageTracking2, updateTaskVcs2, insertTaskAttachment2, recordTaskPullRequestAttachments2, getAssetKeyMappingByProvider2, upsertAssetKeyMapping2, getAssetKeyMapping2, listAssetSummaries2, moveAssetKey2, deleteTaskAttachment2, replaceTaskAttachment2, getTaskAttachments2, createSteeringMessage2, getSteeringMessagesForTask2, getSteeringMessageById2, getPendingSteeringForTask2, getPendingSteeringForAgent2, markSteeringDelivered2, markSteeringHandled2, markSteeringPromoted2, cancelPendingSteeringForTask2, hasPendingSteering2, getAgentWithTasks2, getAllAgentsWithTasks2, createLogEntry2, getLogsByAgentId2, getLogsByTaskId2, getLogsByTaskIdAndEventType2, getLogsByTaskIdChronological2, getLogsByEventType2, getAllLogs2, findRecentSimilarTasks2, createTaskExtended2, claimTask2, releaseTask2, acceptTask2, rejectTask2, moveTaskToBacklog2, moveTaskFromBacklog2, promoteDraftTask2, refreshDraftTaskLease2, promoteAbandonedDraftTasks2, releaseStaleReviewingTasks2, releaseStaleOfferedTasksForOfflineAgents2, getOfferedTasksForAgent2, claimOfferedTask2, getUnassignedTasksCount2, getUnassignedTaskIds2, getUnassignedTaskIdsForAgent2, checkDependencies2, getDependentTasks2, cascadeFailDependents2, updateAgentProfile2, updateAgentName2, createChannel2, getMessageById2, getChannelById2, getChannelByName2, getAllChannels2, deleteChannel2, postMessage2, getChannelMessages2, updateReadState2, getLastReadAt2, getUnreadMessages2, getMentionsForAgent2, getInboxSummary2, claimMentions2, releaseMentionProcessing2, releaseStaleMentionProcessing2, createService2, getServiceById2, getServiceByAgentAndName2, getServicesByAgentId2, getAllServices2, updateServiceStatus2, deleteService2, upsertService2, deleteServicesByAgentId2, createSessionLogs2, getSessionLogsByTaskId2, getSessionLogsBySession2, createSessionCost2, getSessionCostsByTaskId2, getSessionCostsByAgentId2, getAllSessionCosts2, getSessionCostsFiltered2, UNATTRIBUTED_USER_ID2, getSessionCostSummary2, getAttributionByPerson2, getDashboardCostSummary2, createInboxMessage2, getInboxMessageById2, getUnreadInboxMessages2, claimInboxMessages2, markInboxMessageRead2, markInboxMessageResponded2, markInboxMessageDelegated2, releaseStaleProcessingInbox2, getConcurrentContext2, getScheduledTasks2, getScheduledTaskById2, getScheduledTaskByName2, createScheduledTask2, updateScheduledTask2, deleteScheduledTask2, getDueScheduledTasks2, autoEncryptLegacyPlaintextSecrets2, maskSecrets2, getSwarmConfigs2, getInjectableGlobalConfigs2, getSwarmConfigById2, getSwarmConfigLookupById2, upsertSwarmConfig2, emitBuiltInIntegrationConnectedOnce2, deleteSwarmConfig2, deleteSwarmConfigByKey2, getResolvedConfig2, getSwarmRepos2, getSwarmRepoById2, getSwarmRepoByName2, getSwarmRepoByUrl2, createSwarmRepo2, updateSwarmRepo2, deleteSwarmRepo2, getAgentMailInboxMapping2, getAgentMailInboxMappingsByAgent2, getAllAgentMailInboxMappings2, createAgentMailInboxMapping2, deleteAgentMailInboxMapping2, findTaskByAgentMailThread2, insertActiveSession2, deleteActiveSession2, deleteActiveSessionById2, getActiveSessions2, heartbeatActiveSession2, cleanupStaleSessions2, cleanupAgentSessions2, updateActiveSessionProviderSessionId2, getActiveSessionForTask2, reassociateSessionLogs2, getStalledInProgressTasks2, getStalePinnedResumes2, failPendingResumeIfUnclaimed2, getIdleWorkersWithCapacity2, getUnassignedPoolTasks2, getStaleUnassignedAffinityTasks2, getRecentFailedTasks2, getRecentCompletedCount2, getRecentFailedCount2, createWorkflow2, getWorkflow2, listWorkflows2, updateWorkflow2, deleteWorkflow2, getWorkflowsByScheduleId2, createWorkflowRun2, getWorkflowRun2, updateWorkflowRun2, listWorkflowRuns2, countWorkflowRuns2, listWorkflowRunsPage2, createWorkflowRunStep2, getWorkflowRunStep2, updateWorkflowRunStep2, getWorkflowRunStepsByRunId2, getStuckWorkflowRuns2, getLastSuccessfulRun2, getLastRunStart2, getRetryableSteps2, getCompletedStepNodeIds2, getTaskByWorkflowRunStepId2, detachTaskFromWorkflowRunStep2, getStepByIdempotencyKey2, getStepCountForNode2, getLatestStepForNode2, getCurrentStepForNode2, createWorkflowVersion2, getWorkflowVersions2, getWorkflowVersion2, createAppVersion2, getAppVersions2, getAppVersion2, createPage2, getPage2, getPageBySlug2, getLatestPageBySlug2, listPagesByAgent2, listAllPages2, countAllPages2, countPagesByAgent2, updatePage2, deletePage2, incrementPageViewCount2, createPageVersion2, getPageVersions2, getPageVersion2, createMetric2, getMetric2, getMetricBySlug2, listMetricsByAgent2, listAllMetrics2, countAllMetrics2, countMetricsByAgent2, updateMetric2, deleteMetric2, createMetricVersion2, getMetricVersions2, getMetricVersion2, getPromptTemplates2, getPromptTemplateById2, upsertPromptTemplate2, deletePromptTemplate2, resetPromptTemplateToDefault2, getPromptTemplateHistory2, resolvePromptTemplate2, checkoutPromptTemplate2, getAllChannelActivityCursors2, getChannelActivityCursor2, upsertChannelActivityCursor2, createApprovalRequest2, getApprovalRequestById2, resolveApprovalRequest2, cancelApprovalRequestById2, cancelPendingApprovalRequestsForRun2, listCancelledApprovalRequestsForRun2, listCancelledApprovalRequestsForStep2, claimApprovalCancellationNotification2, completeApprovalCancellationNotificationClaim2, releaseApprovalCancellationNotificationClaim2, updateApprovalRequestNotifications2, listApprovalRequests2, getStuckApprovalRuns2, getApprovalRequestByStepId2, getExpiredPendingApprovals2, getStaleApprovalRequests2, createWaitState2, getWaitStateById2, getWaitStateByStepId2, getDueWaitStates2, getPendingEventWaitNames2, getPendingWaitsByEvent2, resolveWaitState2, getStuckWaitRuns2, SKILL_FILE_LIMITS2, normalizeSkillFilePath2, createSkill2, updateSkill2, listSkillFileManifest2, getSkillFiles2, getSkillFile2, upsertSkillFile2, upsertSkillFiles2, deleteSkillFile2, deleteSkill2, getSkillById2, getSkillByName2, listSkills2, searchSkills2, installSkill2, getSystemDefaultSkills2, installSystemDefaultSkillsForAgent2, uninstallSkill2, getAgentSkills2, toggleAgentSkill2, createMcpServer2, emitMcpServerConnectedTelemetry2, updateMcpServer2, deleteMcpServer2, getMcpServerById2, getMcpServerByName2, listMcpServers2, installMcpServer2, uninstallMcpServer2, getAgentMcpServers2, createContextSnapshot2, getContextSnapshotsByTaskId2, getContextSnapshotsBySessionId2, getContextSummaryByTaskId2, getAvailableKeyIndices2, recordKeyUsage2, setApiKeyPlan2, markKeyRateLimited2, recordKeyAuthFailure2, recordKeyRateLimitWindows2, setApiKeyName2, clearKeyRateLimit2, getKeyStatuses2, getKeyCostSummary2, getUserById2, getAllUsers2, createUser2, updateUser2, deleteUser2, listInboxState2, upsertInboxState2, listFavorites2, listUserFavorites2, getFavoriteItemIdSet2, setFavorite2, setUserFavorite2, withFavoriteFlags2, listTaskTemplates2, getRootTaskChain2, listRecentSessions2, countSessions2, getBudget2, getBudgets2, upsertBudget2, deleteBudget2, getAllPricingRows2, getPricingRows2, getActivePricingRow2, insertPricingRow2, deletePricingRow2, getDailySpendForAgent2, getDailySpendGlobal2, getDailySpendForUser2, recordBudgetRefusalNotification2, getBudgetRefusalNotification2, getRecentBudgetRefusalNotifications2, hasBudgetRefusalNotificationToday2, setBudgetRefusalFollowUpTaskId2, getLiveAgentCounts2, getReadyAgentCounts2, getInstanceActivity2, getSwarmMetrics2, hasFirstCompletedTask2, getKv2, sweepExpiredKv2, sweepExpiredKvPrefix2, upsertKv2, claimKv2, deleteKv2, KvTypeCollisionError2, incrKv2, kvPrefixUpperBound2, listKv2, countKv2, createScriptRun2, recordInlineScriptRun2, getScriptRun2, getScriptRunByIdempotencyKey2, listScriptRuns2, countScriptRuns2, countActiveScriptRuns2, updateScriptRun2, updateScriptRunIfNotTerminal2, updateScriptRunIfRunning2, getRunningScriptRuns2, getScriptRunJournalStep2, upsertScriptRunJournalStep2, listScriptRunJournalSteps2, countScriptRunJournalSteps2, countScriptRunJournalAgentTaskSteps2, exports_db, init_db3 };
|