@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
|
@@ -3,13 +3,14 @@ import {
|
|
|
3
3
|
requiredNumber,
|
|
4
4
|
postClassifierRequest,
|
|
5
5
|
parseClassifierUsage
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-zfdp01hn.js";
|
|
7
7
|
import {
|
|
8
8
|
normalizeProviderError,
|
|
9
9
|
formatProviderError
|
|
10
10
|
} from "./cli-bh87e0rh.js";
|
|
11
11
|
|
|
12
12
|
// node_modules/@earendil-works/pi-ai/dist/api/system-one-shared.js
|
|
13
|
+
var IMAGE_OPT_IN_HEADERS = { "TypeSafe-Danger-Zone-Images": "true" };
|
|
13
14
|
function probabilities(label, value, id) {
|
|
14
15
|
if (!isRecord(value))
|
|
15
16
|
throw new Error(`${label} returned invalid probabilities for ${id}`);
|
|
@@ -64,6 +65,40 @@ function parseAnswers(label, value, context) {
|
|
|
64
65
|
}
|
|
65
66
|
return Object.fromEntries(answers);
|
|
66
67
|
}
|
|
68
|
+
var ASSET_FORMATS = { "image/png": "png", "image/jpeg": "jpeg" };
|
|
69
|
+
var DATA_URL_TYPES = new Set(["image/png", "image/jpeg", "image/webp"]);
|
|
70
|
+
var MAX_DATA_URL_IMAGES = 4;
|
|
71
|
+
function addImages(label, model, input, images, request) {
|
|
72
|
+
if (input === "images") {
|
|
73
|
+
if (images.length > MAX_DATA_URL_IMAGES) {
|
|
74
|
+
throw new Error(`${label} accepts at most ${MAX_DATA_URL_IMAGES} images for ${model.id}, got ${images.length}`);
|
|
75
|
+
}
|
|
76
|
+
request.images = images.map((image) => {
|
|
77
|
+
if (!DATA_URL_TYPES.has(image.mimeType)) {
|
|
78
|
+
throw new Error(`${label} accepts PNG, JPEG, and WebP images for ${model.id}, got ${image.mimeType}`);
|
|
79
|
+
}
|
|
80
|
+
return `data:${image.mimeType};base64,${image.data}`;
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (input === "state-image-urls") {
|
|
85
|
+
const parts = images.map((image) => ({
|
|
86
|
+
type: "image_url",
|
|
87
|
+
image_url: { url: `data:${image.mimeType};base64,${image.data}` }
|
|
88
|
+
}));
|
|
89
|
+
request.state = [...parts, request.state];
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const assets = {};
|
|
93
|
+
images.forEach((image, index) => {
|
|
94
|
+
const format = ASSET_FORMATS[image.mimeType];
|
|
95
|
+
if (!format)
|
|
96
|
+
throw new Error(`${label} accepts PNG and JPEG images for ${model.id}, got ${image.mimeType}`);
|
|
97
|
+
assets[`<image-${index + 1}>`] = { type: "image", format, data_base64: image.data };
|
|
98
|
+
});
|
|
99
|
+
request.assets = assets;
|
|
100
|
+
request.state = [...Object.keys(assets), request.state];
|
|
101
|
+
}
|
|
67
102
|
function wireRequest(context) {
|
|
68
103
|
return {
|
|
69
104
|
state: context.state,
|
|
@@ -85,9 +120,20 @@ async function classifySystemOne(transport, model, context, options) {
|
|
|
85
120
|
try {
|
|
86
121
|
if (model.api !== transport.api)
|
|
87
122
|
throw new Error(`Unsupported classifier API: ${model.api}`);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
123
|
+
const request = wireRequest(context);
|
|
124
|
+
let requestOptions = options;
|
|
125
|
+
if (context.images?.length) {
|
|
126
|
+
if (!model.input.includes("image")) {
|
|
127
|
+
throw new Error(`${transport.label} does not support image input for ${model.id}`);
|
|
128
|
+
}
|
|
129
|
+
const detected = transport.detectCompat(model);
|
|
130
|
+
const imageInput = model.compat?.imageInput ?? detected.imageInput;
|
|
131
|
+
addImages(transport.label, model, imageInput, context.images, request);
|
|
132
|
+
if (model.compat?.sendImageOptInHeader ?? detected.sendImageOptInHeader) {
|
|
133
|
+
requestOptions = { ...options, headers: { ...IMAGE_OPT_IN_HEADERS, ...options?.headers } };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const body = await postClassifierRequest(transport.label, transport.url(model), model, transport.payload(model, request), requestOptions);
|
|
91
137
|
const result = transport.output(body);
|
|
92
138
|
const usage = parseClassifierUsage(result.usage, model);
|
|
93
139
|
if (usage)
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
loadMcpConfig,
|
|
10
10
|
addMcpServerConfig,
|
|
11
11
|
removeMcpServerConfig
|
|
12
|
-
} from "./cli-
|
|
12
|
+
} from "./cli-x77gen2p.js";
|
|
13
13
|
import {
|
|
14
14
|
McpOAuthCredentialStore2,
|
|
15
15
|
McpSignInCancelledError2,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
McpServerLog2,
|
|
18
18
|
createDefaultTransport2,
|
|
19
19
|
McpServerConnection2
|
|
20
|
-
} from "./cli-
|
|
20
|
+
} from "./cli-cz5nmdxt.js";
|
|
21
21
|
|
|
22
22
|
// node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/cli.js
|
|
23
23
|
import { existsSync } from "node:fs";
|
|
@@ -7,7 +7,7 @@ var package_default;
|
|
|
7
7
|
var init_package = __esm(() => {
|
|
8
8
|
package_default = {
|
|
9
9
|
name: "@desplega.ai/agent-swarm",
|
|
10
|
-
version: "2.
|
|
10
|
+
version: "2.5.0",
|
|
11
11
|
description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
|
|
12
12
|
keywords: [
|
|
13
13
|
"agent-swarm.dev",
|
|
@@ -186,8 +186,8 @@ var init_package = __esm(() => {
|
|
|
186
186
|
"@desplega/model-catalog": "workspace:*",
|
|
187
187
|
"@desplega/model-routing": "workspace:*",
|
|
188
188
|
"@faker-js/faker": "^10.4.0",
|
|
189
|
-
"@opencode/plugin": "2.1.
|
|
190
|
-
"@opencode/sdk": "2.1.
|
|
189
|
+
"@opencode/plugin": "2.1.3",
|
|
190
|
+
"@opencode/sdk": "2.1.3",
|
|
191
191
|
"@oxlint/plugins": "1.78.0",
|
|
192
192
|
"@types/bun": "latest",
|
|
193
193
|
"dependency-cruiser": "^18.0.0",
|
|
@@ -205,26 +205,26 @@ var init_package = __esm(() => {
|
|
|
205
205
|
bun: ">=1.3.12"
|
|
206
206
|
},
|
|
207
207
|
dependencies: {
|
|
208
|
-
"@agentclientprotocol/sdk": "2.0.
|
|
208
|
+
"@agentclientprotocol/sdk": "2.0.1",
|
|
209
209
|
"@ai-sdk/openai": "^3.0.41",
|
|
210
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
211
|
-
"@anthropic-ai/sdk": "^
|
|
210
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.308",
|
|
211
|
+
"@anthropic-ai/sdk": "^1.1.0",
|
|
212
212
|
"@asteasolutions/zod-to-openapi": "^8.0.0",
|
|
213
213
|
"@aws-sdk/client-bedrock": "3.1048.0",
|
|
214
214
|
"@chat-adapter/discord": "4.41.1",
|
|
215
215
|
"@chat-adapter/slack": "4.41.1",
|
|
216
216
|
"@chat-adapter/teams": "4.41.1",
|
|
217
217
|
"@chat-adapter/telegram": "4.41.1",
|
|
218
|
-
"@cursor/sdk": "1.0.
|
|
218
|
+
"@cursor/sdk": "1.0.40",
|
|
219
219
|
"@desplega.ai/agent-fs-just-bash": "0.18.5",
|
|
220
220
|
"@desplega.ai/business-use": "^0.4.2",
|
|
221
|
-
"@earendil-works/pi-agent-core": "^1.
|
|
222
|
-
"@earendil-works/pi-ai": "^1.
|
|
223
|
-
"@earendil-works/pi-coding-agent": "^1.
|
|
221
|
+
"@earendil-works/pi-agent-core": "^1.4.0",
|
|
222
|
+
"@earendil-works/pi-ai": "^1.4.0",
|
|
223
|
+
"@earendil-works/pi-coding-agent": "^1.4.0",
|
|
224
224
|
"@inkjs/ui": "^2.0.0",
|
|
225
225
|
"@jitl/quickjs-singlefile-mjs-release-sync": "0.32.0",
|
|
226
226
|
"@linear/sdk": "^77.0.0",
|
|
227
|
-
"@modelcontextprotocol/sdk": "1.
|
|
227
|
+
"@modelcontextprotocol/sdk": "1.32.1",
|
|
228
228
|
"@openai/codex": "0.163.0",
|
|
229
229
|
"@openfort/openfort-node": "^0.9.1",
|
|
230
230
|
"@opentelemetry/api": "^1.9.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getSystemMessageText,
|
|
3
3
|
clampThinkingLevel
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-2nf3b08t.js";
|
|
5
5
|
|
|
6
6
|
// node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js
|
|
7
7
|
class UnsupportedStrictJsonSchemaError extends Error {
|
|
@@ -332,13 +332,14 @@ function buildBaseOptions(model, context, options, apiKey) {
|
|
|
332
332
|
samplingParams,
|
|
333
333
|
maxTokens: clampMaxTokensToContext(model, context, options?.maxTokens ?? model.maxTokens),
|
|
334
334
|
signal: options?.signal,
|
|
335
|
-
|
|
335
|
+
telemetry: options?.telemetry,
|
|
336
336
|
apiKey: apiKey || options?.apiKey,
|
|
337
337
|
fetch: options?.fetch,
|
|
338
338
|
transport: options?.transport,
|
|
339
339
|
cacheRetention: options?.cacheRetention,
|
|
340
340
|
sessionId: options?.sessionId,
|
|
341
341
|
headers: options?.headers,
|
|
342
|
+
identity: options?.identity,
|
|
342
343
|
onPayload: options?.onPayload,
|
|
343
344
|
onResponse: options?.onResponse,
|
|
344
345
|
onProviderStreamEvent: options?.onProviderStreamEvent,
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
getResolvedConfig2,
|
|
7
7
|
getAllUsers2,
|
|
8
8
|
init_db3
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-fcc5qe3f.js";
|
|
10
10
|
import {
|
|
11
11
|
scrubSecrets,
|
|
12
12
|
init_secret_scrubber
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-n4c8e3s5.js";
|
|
14
14
|
|
|
15
15
|
// src/be/seed/agent-fs-provision.ts
|
|
16
16
|
init_secret_scrubber();
|
|
@@ -122,7 +122,7 @@ async function ensureAgentFsSharedProvisioning(options) {
|
|
|
122
122
|
await upsertSwarmConfig2({ scope: "global", key, value, isSecret: false, description });
|
|
123
123
|
}
|
|
124
124
|
process.env.AGENT_FS_API_URL = apiUrl;
|
|
125
|
-
const { resetFileStorageProvider } = await import("./registry-
|
|
125
|
+
const { resetFileStorageProvider } = await import("./registry-ajhexe44.js");
|
|
126
126
|
resetFileStorageProvider();
|
|
127
127
|
return { apiUrl, apiKey, orgId, driveId, authHeaders };
|
|
128
128
|
}
|
|
@@ -2,6 +2,29 @@ import {
|
|
|
2
2
|
AssistantMessageEventStream,
|
|
3
3
|
formatThrownValue
|
|
4
4
|
} from "./cli-m6m1bvtp.js";
|
|
5
|
+
import {
|
|
6
|
+
mergeClientIdentity,
|
|
7
|
+
getOpenCodeSessionHeaders
|
|
8
|
+
} from "./cli-pkaqk57w.js";
|
|
9
|
+
import {
|
|
10
|
+
__export
|
|
11
|
+
} from "./cli-242037k3.js";
|
|
12
|
+
|
|
13
|
+
// node_modules/@earendil-works/pi-ai/dist/models.js
|
|
14
|
+
var exports_models = {};
|
|
15
|
+
__export(exports_models, {
|
|
16
|
+
AI_TELEMETRY_SCHEMA: () => AI_TELEMETRY_SCHEMA,
|
|
17
|
+
ModelsError: () => ModelsError,
|
|
18
|
+
calculateCost: () => calculateCost,
|
|
19
|
+
clampThinkingLevel: () => clampThinkingLevel,
|
|
20
|
+
createModels: () => createModels,
|
|
21
|
+
createProvider: () => createProvider,
|
|
22
|
+
getModelType: () => getModelType,
|
|
23
|
+
getSupportedThinkingLevels: () => getSupportedThinkingLevels,
|
|
24
|
+
hasApi: () => hasApi,
|
|
25
|
+
isModelType: () => isModelType,
|
|
26
|
+
modelsAreEqual: () => modelsAreEqual
|
|
27
|
+
});
|
|
5
28
|
|
|
6
29
|
// node_modules/@earendil-works/pi-ai/dist/api/lazy.js
|
|
7
30
|
function createSetupErrorMessage(model, error, timestamp) {
|
|
@@ -27,19 +50,38 @@ function createSetupErrorMessage(model, error, timestamp) {
|
|
|
27
50
|
function hasResult(source) {
|
|
28
51
|
return typeof source.result === "function";
|
|
29
52
|
}
|
|
30
|
-
async function forwardStream(target, source) {
|
|
53
|
+
async function forwardStream(target, source, observer, observeResult) {
|
|
54
|
+
let result;
|
|
31
55
|
for await (const event of source) {
|
|
32
56
|
target.push(event);
|
|
33
|
-
|
|
34
|
-
|
|
57
|
+
observer?.onEvent?.(event);
|
|
58
|
+
if (event.type === "done")
|
|
59
|
+
result = event.message;
|
|
60
|
+
else if (event.type === "error")
|
|
61
|
+
result = event.error;
|
|
62
|
+
}
|
|
63
|
+
if (hasResult(source))
|
|
64
|
+
result = await source.result();
|
|
65
|
+
target.end(result);
|
|
66
|
+
observeResult(result);
|
|
35
67
|
}
|
|
36
|
-
function lazyStream(model, setup) {
|
|
68
|
+
function lazyStream(model, setup, observer) {
|
|
37
69
|
const startedAt = Date.now();
|
|
38
70
|
const outer = new AssistantMessageEventStream;
|
|
39
|
-
|
|
71
|
+
let observedResult = false;
|
|
72
|
+
const observeResult = (result) => {
|
|
73
|
+
if (observedResult)
|
|
74
|
+
return;
|
|
75
|
+
observedResult = true;
|
|
76
|
+
observer?.onResult?.(result);
|
|
77
|
+
};
|
|
78
|
+
setup().then((inner) => forwardStream(outer, inner, observer, observeResult)).catch((error) => {
|
|
40
79
|
const message = createSetupErrorMessage(model, error, startedAt);
|
|
41
|
-
|
|
80
|
+
const event = { type: "error", reason: "error", error: message };
|
|
81
|
+
outer.push(event);
|
|
82
|
+
observer?.onEvent?.(event);
|
|
42
83
|
outer.end(message);
|
|
84
|
+
observeResult(message);
|
|
43
85
|
});
|
|
44
86
|
return outer;
|
|
45
87
|
}
|
|
@@ -331,6 +373,251 @@ class InMemoryModelsStore {
|
|
|
331
373
|
}
|
|
332
374
|
}
|
|
333
375
|
|
|
376
|
+
// node_modules/@earendil-works/pi-telemetry/dist/metrics.js
|
|
377
|
+
function createTypedMetrics(metrics, schemas) {
|
|
378
|
+
const definitions = new Map;
|
|
379
|
+
for (const schema of schemas) {
|
|
380
|
+
for (const [name, definition] of Object.entries(schema.metrics ?? {}))
|
|
381
|
+
definitions.set(name, definition);
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
counter: (name) => metrics.counter(name, definitions.get(name)),
|
|
385
|
+
upDownCounter: (name) => metrics.upDownCounter(name, definitions.get(name)),
|
|
386
|
+
histogram: (name) => metrics.histogram(name, definitions.get(name))
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
// node_modules/@earendil-works/pi-telemetry/dist/noop.js
|
|
390
|
+
async function startNoopSpan(_options, callback) {
|
|
391
|
+
return callback(noopTelemetrySpan);
|
|
392
|
+
}
|
|
393
|
+
var noopCounter = Object.freeze({ add: () => {} });
|
|
394
|
+
var noopUpDownCounter = Object.freeze({ add: () => {} });
|
|
395
|
+
var noopHistogram = Object.freeze({ record: () => {} });
|
|
396
|
+
var NOOP_TELEMETRY_METRICS = Object.freeze({
|
|
397
|
+
counter: () => noopCounter,
|
|
398
|
+
upDownCounter: () => noopUpDownCounter,
|
|
399
|
+
histogram: () => noopHistogram
|
|
400
|
+
});
|
|
401
|
+
var NOOP_TELEMETRY_PROPAGATION = Object.freeze({
|
|
402
|
+
inject: () => {
|
|
403
|
+
return;
|
|
404
|
+
},
|
|
405
|
+
extract: () => NOOP_TELEMETRY_CONTEXT
|
|
406
|
+
});
|
|
407
|
+
var noopTelemetrySpan = {
|
|
408
|
+
metrics: NOOP_TELEMETRY_METRICS,
|
|
409
|
+
propagation: NOOP_TELEMETRY_PROPAGATION,
|
|
410
|
+
startSpan: startNoopSpan,
|
|
411
|
+
addLink: () => {},
|
|
412
|
+
addEvent: () => {},
|
|
413
|
+
setAttributes: () => {},
|
|
414
|
+
setStatus: () => {}
|
|
415
|
+
};
|
|
416
|
+
Object.freeze(noopTelemetrySpan);
|
|
417
|
+
var NOOP_TELEMETRY_CONTEXT = noopTelemetrySpan;
|
|
418
|
+
// node_modules/@earendil-works/pi-telemetry/dist/memory.js
|
|
419
|
+
var contextCarriers = new WeakMap;
|
|
420
|
+
|
|
421
|
+
// node_modules/@earendil-works/pi-telemetry/dist/index.js
|
|
422
|
+
function defineTelemetrySchema(schema) {
|
|
423
|
+
return schema;
|
|
424
|
+
}
|
|
425
|
+
function bindTypedSpanStarter(telemetryContext) {
|
|
426
|
+
const startSpan = (name, attributes, callback) => telemetryContext.startSpan({ name, attributes }, (span) => callback(span, bindTypedSpanStarter(span)));
|
|
427
|
+
return startSpan;
|
|
428
|
+
}
|
|
429
|
+
function createTypedSpanStarter(telemetryContext, _schemas) {
|
|
430
|
+
return bindTypedSpanStarter(telemetryContext);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// node_modules/@earendil-works/pi-ai/dist/telemetry.js
|
|
434
|
+
var provider = { type: "string", description: "Provider identifier.", required: true };
|
|
435
|
+
var model = { type: "string", description: "Requested model identifier.", required: true };
|
|
436
|
+
var stop = {
|
|
437
|
+
type: "string",
|
|
438
|
+
description: "Normalized stop reason.",
|
|
439
|
+
values: ["pending", "stop", "length", "toolUse", "error", "aborted", "deferred"]
|
|
440
|
+
};
|
|
441
|
+
var request = {
|
|
442
|
+
description: "One logical model request, including authentication and provider setup.",
|
|
443
|
+
parents: { kind: "any" },
|
|
444
|
+
startAttributes: {
|
|
445
|
+
provider,
|
|
446
|
+
api: { type: "string", description: "API identifier.", required: true },
|
|
447
|
+
model,
|
|
448
|
+
reasoning: { type: "string", description: "Scalar requested reasoning level.", required: false }
|
|
449
|
+
},
|
|
450
|
+
endAttributes: {
|
|
451
|
+
stop,
|
|
452
|
+
"usage.input": { type: "number", description: "Uncached input tokens." },
|
|
453
|
+
"usage.output": { type: "number", description: "Output tokens." },
|
|
454
|
+
"usage.cache_read": { type: "number", description: "Cache-read tokens." },
|
|
455
|
+
"usage.cache_write": { type: "number", description: "Cache-write tokens." },
|
|
456
|
+
"cost.total": { type: "number", description: "Total request cost in USD." },
|
|
457
|
+
"response.id": { type: "string", description: "Provider response identifier.", cardinality: "high" }
|
|
458
|
+
},
|
|
459
|
+
events: {
|
|
460
|
+
"pi.ai.first_chunk": { description: "First normalized stream event delivered.", attributes: {} },
|
|
461
|
+
"pi.ai.block": {
|
|
462
|
+
description: "A completed content block; content is never recorded.",
|
|
463
|
+
attributes: {
|
|
464
|
+
type: {
|
|
465
|
+
type: "string",
|
|
466
|
+
description: "Block kind.",
|
|
467
|
+
values: ["text", "thinking", "tool_call"],
|
|
468
|
+
required: true
|
|
469
|
+
},
|
|
470
|
+
index: { type: "number", description: "Content block index.", required: true },
|
|
471
|
+
chars: { type: "number", description: "UTF-16 character count.", required: true },
|
|
472
|
+
tool: { type: "string", description: "Tool name, for tool-call blocks only.", required: false }
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
status: {
|
|
477
|
+
default: "ok",
|
|
478
|
+
errorWhen: "Stop reason is error: provider_error with at most 500 error-message characters. Aborted stays ok."
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
var AI_TELEMETRY_SCHEMA = defineTelemetrySchema({
|
|
482
|
+
version: 1,
|
|
483
|
+
spans: {
|
|
484
|
+
"pi.ai.request": request,
|
|
485
|
+
"pi.ai.poll": { ...request, description: "One deferred-response poll, not the deferred request's lifetime." }
|
|
486
|
+
},
|
|
487
|
+
metrics: {
|
|
488
|
+
"pi.ai.request.duration": {
|
|
489
|
+
kind: "histogram",
|
|
490
|
+
description: "Logical request or poll duration.",
|
|
491
|
+
unit: "ms",
|
|
492
|
+
attributes: { provider, model, stop: { ...stop, required: true } }
|
|
493
|
+
},
|
|
494
|
+
"pi.ai.first_chunk.duration": {
|
|
495
|
+
kind: "histogram",
|
|
496
|
+
description: "Time to the first normalized stream event.",
|
|
497
|
+
unit: "ms",
|
|
498
|
+
attributes: { provider, model }
|
|
499
|
+
},
|
|
500
|
+
"pi.ai.tokens": {
|
|
501
|
+
kind: "counter",
|
|
502
|
+
description: "Reported model token usage; pending and deferred polls are excluded.",
|
|
503
|
+
unit: "token",
|
|
504
|
+
attributes: {
|
|
505
|
+
provider,
|
|
506
|
+
model,
|
|
507
|
+
kind: {
|
|
508
|
+
type: "string",
|
|
509
|
+
description: "Token usage category.",
|
|
510
|
+
values: ["input", "output", "cache_read", "cache_write"],
|
|
511
|
+
required: true
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"pi.ai.cost": {
|
|
516
|
+
kind: "counter",
|
|
517
|
+
description: "Reported model cost; pending and deferred polls are excluded.",
|
|
518
|
+
unit: "USD",
|
|
519
|
+
attributes: { provider, model }
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
function createInstruments(adapter) {
|
|
524
|
+
const metrics = createTypedMetrics(adapter, [AI_TELEMETRY_SCHEMA]);
|
|
525
|
+
return {
|
|
526
|
+
requestDuration: metrics.histogram("pi.ai.request.duration"),
|
|
527
|
+
firstChunkDuration: metrics.histogram("pi.ai.first_chunk.duration"),
|
|
528
|
+
tokens: metrics.counter("pi.ai.tokens"),
|
|
529
|
+
cost: metrics.counter("pi.ai.cost")
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
var instrumentCache = new WeakMap;
|
|
533
|
+
function observeModelRequest(requestedModel, options, poll) {
|
|
534
|
+
const started = performance.now();
|
|
535
|
+
const attributes = { provider: requestedModel.provider, model: requestedModel.id };
|
|
536
|
+
const adapter = options?.telemetry?.metrics ?? NOOP_TELEMETRY_METRICS;
|
|
537
|
+
let instruments = instrumentCache.get(adapter);
|
|
538
|
+
if (!instruments) {
|
|
539
|
+
instruments = createInstruments(adapter);
|
|
540
|
+
instrumentCache.set(adapter, instruments);
|
|
541
|
+
}
|
|
542
|
+
const { requestDuration, firstChunkDuration, tokens, cost } = instruments;
|
|
543
|
+
let span;
|
|
544
|
+
let finish;
|
|
545
|
+
let first = true;
|
|
546
|
+
const toolChars = new Map;
|
|
547
|
+
const finished = new Promise((resolve) => {
|
|
548
|
+
finish = resolve;
|
|
549
|
+
});
|
|
550
|
+
const run = (activeSpan) => {
|
|
551
|
+
span = activeSpan;
|
|
552
|
+
return finished;
|
|
553
|
+
};
|
|
554
|
+
const startAttributes = {
|
|
555
|
+
...attributes,
|
|
556
|
+
api: requestedModel.api,
|
|
557
|
+
...typeof options?.reasoning === "string" ? { reasoning: options.reasoning } : {}
|
|
558
|
+
};
|
|
559
|
+
const start = createTypedSpanStarter(options?.telemetry ?? NOOP_TELEMETRY_CONTEXT, [AI_TELEMETRY_SCHEMA]);
|
|
560
|
+
if (poll)
|
|
561
|
+
start("pi.ai.poll", startAttributes, run);
|
|
562
|
+
else
|
|
563
|
+
start("pi.ai.request", startAttributes, run);
|
|
564
|
+
return {
|
|
565
|
+
onEvent(event) {
|
|
566
|
+
if (first) {
|
|
567
|
+
first = false;
|
|
568
|
+
span.addEvent("pi.ai.first_chunk");
|
|
569
|
+
firstChunkDuration.record(performance.now() - started, attributes, span);
|
|
570
|
+
}
|
|
571
|
+
if (event.type === "toolcall_delta") {
|
|
572
|
+
toolChars.set(event.contentIndex, (toolChars.get(event.contentIndex) ?? 0) + event.delta.length);
|
|
573
|
+
} else if (event.type === "text_end" || event.type === "thinking_end") {
|
|
574
|
+
span.addEvent("pi.ai.block", {
|
|
575
|
+
type: event.type === "text_end" ? "text" : "thinking",
|
|
576
|
+
index: event.contentIndex,
|
|
577
|
+
chars: event.content.length
|
|
578
|
+
});
|
|
579
|
+
} else if (event.type === "toolcall_end") {
|
|
580
|
+
const chars = toolChars.get(event.contentIndex) ?? 0;
|
|
581
|
+
toolChars.delete(event.contentIndex);
|
|
582
|
+
span.addEvent("pi.ai.block", {
|
|
583
|
+
type: "tool_call",
|
|
584
|
+
index: event.contentIndex,
|
|
585
|
+
chars,
|
|
586
|
+
tool: event.toolCall.name
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
onResult(message) {
|
|
591
|
+
if (message) {
|
|
592
|
+
span.setAttributes({
|
|
593
|
+
stop: message.stopReason,
|
|
594
|
+
"usage.input": message.usage.input,
|
|
595
|
+
"usage.output": message.usage.output,
|
|
596
|
+
"usage.cache_read": message.usage.cacheRead,
|
|
597
|
+
"usage.cache_write": message.usage.cacheWrite,
|
|
598
|
+
"cost.total": message.usage.cost.total,
|
|
599
|
+
"response.id": message.responseId
|
|
600
|
+
});
|
|
601
|
+
if (message.stopReason === "error") {
|
|
602
|
+
span.setStatus({
|
|
603
|
+
status: "error",
|
|
604
|
+
error: { name: "provider_error", message: message.errorMessage?.slice(0, 500) ?? "" }
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
requestDuration.record(performance.now() - started, { ...attributes, stop: message.stopReason }, span);
|
|
608
|
+
if (!poll || message.stopReason !== "pending" && message.stopReason !== "deferred") {
|
|
609
|
+
tokens.add(message.usage.input, { ...attributes, kind: "input" });
|
|
610
|
+
tokens.add(message.usage.output, { ...attributes, kind: "output" });
|
|
611
|
+
tokens.add(message.usage.cacheRead, { ...attributes, kind: "cache_read" });
|
|
612
|
+
tokens.add(message.usage.cacheWrite, { ...attributes, kind: "cache_write" });
|
|
613
|
+
cost.add(message.usage.cost.total, attributes);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
finish();
|
|
617
|
+
}
|
|
618
|
+
};
|
|
619
|
+
}
|
|
620
|
+
|
|
334
621
|
// node_modules/@earendil-works/pi-ai/dist/utils/model-operations.js
|
|
335
622
|
function getModelType(model) {
|
|
336
623
|
return model.type ?? "chat";
|
|
@@ -546,26 +833,32 @@ function hasToolRedefinitions(messages) {
|
|
|
546
833
|
return false;
|
|
547
834
|
}
|
|
548
835
|
function hasNonAdditiveToolChanges(messages) {
|
|
836
|
+
return findLastNonAdditiveToolChange(messages.filter(isSystemMessage)) >= 0;
|
|
837
|
+
}
|
|
838
|
+
function findLastNonAdditiveToolChange(systemMessages) {
|
|
549
839
|
const declared = new Set;
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
840
|
+
let last = -1;
|
|
841
|
+
for (let index = 0;index < systemMessages.length; index++) {
|
|
842
|
+
const message = systemMessages[index];
|
|
553
843
|
if ((message.toolsRemoved?.length ?? 0) > 0)
|
|
554
|
-
|
|
844
|
+
last = index;
|
|
555
845
|
for (const tool of message.toolsAdded ?? []) {
|
|
556
846
|
if (declared.has(tool.name))
|
|
557
|
-
|
|
847
|
+
last = index;
|
|
558
848
|
declared.add(tool.name);
|
|
559
849
|
}
|
|
560
850
|
}
|
|
561
|
-
return
|
|
851
|
+
return last;
|
|
562
852
|
}
|
|
563
|
-
function resolveTranscriptTools(messages,
|
|
564
|
-
const
|
|
565
|
-
|
|
566
|
-
requestTools:
|
|
567
|
-
|
|
568
|
-
|
|
853
|
+
function resolveTranscriptTools(messages, support) {
|
|
854
|
+
const systemMessages = messages.filter(isSystemMessage);
|
|
855
|
+
if (support === "none") {
|
|
856
|
+
return { requestTools: getCurrentTools(systemMessages), foldedSystemMessages: systemMessages.length };
|
|
857
|
+
}
|
|
858
|
+
if (support === "changes")
|
|
859
|
+
return { requestTools: [], foldedSystemMessages: 0 };
|
|
860
|
+
const folded = Math.max(getInitialSystemMessage(messages) ? 1 : 0, findLastNonAdditiveToolChange(systemMessages) + 1);
|
|
861
|
+
return { requestTools: getCurrentTools(systemMessages.slice(0, folded)), foldedSystemMessages: folded };
|
|
569
862
|
}
|
|
570
863
|
|
|
571
864
|
// node_modules/@earendil-works/pi-ai/dist/models.js
|
|
@@ -596,6 +889,7 @@ class ModelsImpl {
|
|
|
596
889
|
credentials;
|
|
597
890
|
modelsStore;
|
|
598
891
|
authContext;
|
|
892
|
+
identity;
|
|
599
893
|
refreshGenerations = new Map;
|
|
600
894
|
refreshControllers = new Map;
|
|
601
895
|
publicationChains = new Map;
|
|
@@ -603,6 +897,7 @@ class ModelsImpl {
|
|
|
603
897
|
this.credentials = options?.credentials ?? new InMemoryCredentialStore;
|
|
604
898
|
this.modelsStore = options?.modelsStore ?? new InMemoryModelsStore;
|
|
605
899
|
this.authContext = options?.authContext ?? defaultProviderAuthContext();
|
|
900
|
+
this.identity = options?.identity;
|
|
606
901
|
}
|
|
607
902
|
setProvider(provider) {
|
|
608
903
|
this.supersedeProviderRefresh(provider.id);
|
|
@@ -967,13 +1262,21 @@ class ModelsImpl {
|
|
|
967
1262
|
}
|
|
968
1263
|
const auth = resolution.auth;
|
|
969
1264
|
const apiKey = options?.apiKey ?? auth.apiKey;
|
|
970
|
-
|
|
1265
|
+
const requestModel = auth.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model;
|
|
1266
|
+
const sessionId = options && "sessionId" in options && typeof options.sessionId === "string" ? options.sessionId : undefined;
|
|
1267
|
+
let headers = mergeHeaders(mergeHeaders(getOpenCodeSessionHeaders(requestModel, sessionId), auth.headers), options?.headers);
|
|
971
1268
|
if (options?.transformHeaders)
|
|
972
1269
|
headers = await options.transformHeaders(headers ?? {});
|
|
973
1270
|
const env = resolution.env || options?.env ? { ...resolution.env ?? {}, ...options?.env ?? {} } : undefined;
|
|
974
|
-
const
|
|
1271
|
+
const identity = mergeClientIdentity(this.identity, options?.identity);
|
|
975
1272
|
const { transformHeaders: _transformHeaders, ...providerOptions } = options ?? {};
|
|
976
|
-
const requestOptions = {
|
|
1273
|
+
const requestOptions = {
|
|
1274
|
+
...providerOptions,
|
|
1275
|
+
apiKey,
|
|
1276
|
+
headers,
|
|
1277
|
+
env,
|
|
1278
|
+
...identity === undefined ? {} : { identity }
|
|
1279
|
+
};
|
|
977
1280
|
return { requestModel, requestOptions };
|
|
978
1281
|
}
|
|
979
1282
|
stream(model, context, options) {
|
|
@@ -982,7 +1285,7 @@ class ModelsImpl {
|
|
|
982
1285
|
const provider = this.requireChatProvider(model);
|
|
983
1286
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
984
1287
|
return provider.stream(requestModel, transcript, requestOptions);
|
|
985
|
-
});
|
|
1288
|
+
}, observeModelRequest(model, options, false));
|
|
986
1289
|
}
|
|
987
1290
|
async complete(model, context, options) {
|
|
988
1291
|
return this.stream(model, context, options).result();
|
|
@@ -993,7 +1296,7 @@ class ModelsImpl {
|
|
|
993
1296
|
const provider = this.requireChatProvider(model);
|
|
994
1297
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
995
1298
|
return provider.streamSimple(requestModel, transcript, requestOptions);
|
|
996
|
-
});
|
|
1299
|
+
}, observeModelRequest(model, options, false));
|
|
997
1300
|
}
|
|
998
1301
|
async completeSimple(model, context, options) {
|
|
999
1302
|
return this.streamSimple(model, context, options).result();
|
|
@@ -1006,7 +1309,7 @@ class ModelsImpl {
|
|
|
1006
1309
|
}
|
|
1007
1310
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
1008
1311
|
return provider.fetchDeferred(requestModel, handle, requestOptions);
|
|
1009
|
-
});
|
|
1312
|
+
}, observeModelRequest(model, options, true));
|
|
1010
1313
|
}
|
|
1011
1314
|
async fetchDeferred(model, handle, options) {
|
|
1012
1315
|
return this.streamDeferred(model, handle, options).result();
|
|
@@ -1220,4 +1523,4 @@ function modelsAreEqual(a, b) {
|
|
|
1220
1523
|
return getModelType(a) === getModelType(b) && a.id === b.id && a.provider === b.provider;
|
|
1221
1524
|
}
|
|
1222
1525
|
|
|
1223
|
-
export { lazyStream, lazyApi, defaultProviderAuthContext, InMemoryCredentialStore, ModelsError, InMemoryModelsStore, getModelType, isModelType, assertChatModel, assertImageModel, assertClassifierModel, assertClassifierInputSupported, imageErrorResult, classifierErrorResult, contentText, getSystemMessageText, renderSystemMessageUpdate, createInitialSystemMessage, normalizeContext, getInitialSystemMessage, withoutInitialSystemMessage, getCurrentTools, getCurrentSystemMessage, getCurrentSystemPrompt, collapseSystemMessages, resolveTranscript, toToolDeclaration, declarationsEqual, getToolStateChanges, getDeclaredTools, hasToolRedefinitions, hasNonAdditiveToolChanges, resolveTranscriptTools, createModels, createProvider, hasApi, calculateCost, getSupportedThinkingLevels, clampThinkingLevel, modelsAreEqual };
|
|
1526
|
+
export { lazyStream, lazyApi, defaultProviderAuthContext, InMemoryCredentialStore, ModelsError, InMemoryModelsStore, AI_TELEMETRY_SCHEMA, getModelType, isModelType, assertChatModel, assertImageModel, assertClassifierModel, assertClassifierInputSupported, imageErrorResult, classifierErrorResult, contentText, getSystemMessageText, renderSystemMessageUpdate, createInitialSystemMessage, normalizeContext, getInitialSystemMessage, withoutInitialSystemMessage, getCurrentTools, getCurrentSystemMessage, getCurrentSystemPrompt, collapseSystemMessages, resolveTranscript, toToolDeclaration, declarationsEqual, getToolStateChanges, getDeclaredTools, hasToolRedefinitions, hasNonAdditiveToolChanges, resolveTranscriptTools, createModels, createProvider, hasApi, calculateCost, getSupportedThinkingLevels, clampThinkingLevel, modelsAreEqual, exports_models };
|