@desplega.ai/agent-swarm 1.159.0 → 1.161.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 +2 -2
- package/dist/{acp-adapter-qhch0n2v.js → acp-adapter-xx489vvb.js} +286 -75
- package/dist/{actions-dtsh1mfb.js → actions-ykjkn0m9.js} +32 -30
- package/dist/{anthropic-messages-f2h06k64.js → anthropic-messages-5qx80j9k.js} +99 -14
- package/dist/{app-y1b9srva.js → app-0hdqa4k1.js} +13 -11
- package/dist/{assistant-31hwy5xj.js → assistant-am2g5g8a.js} +40 -32
- package/dist/{azure-openai-responses-0k1mfax5.js → azure-openai-responses-fszbkp0e.js} +3 -3
- package/dist/{boot-reembed-48d2qpkt.js → boot-reembed-gt5gjkt4.js} +14 -12
- package/dist/{boot-reembed-w0bryhkr.js → boot-reembed-xy9t7avg.js} +15 -13
- package/dist/{boot-scrub-logs-t65wbrn7.js → boot-scrub-logs-9x0985y5.js} +12 -10
- package/dist/boot-seeds-trv0d4vg.js +29 -0
- package/dist/{claude-adapter-1t6611ne.js → claude-adapter-jb6e1e54.js} +32 -26
- package/dist/{claude-managed-adapter-werp659j.js → claude-managed-adapter-yxkfxg8j.js} +7 -7
- package/dist/{claude-managed-setup-y6rdgbc1.js → claude-managed-setup-d1q9hv2b.js} +26 -27
- package/dist/{claude-sdk-session-zhkyk8yw.js → claude-sdk-session-zga700s2.js} +11737 -11256
- package/dist/{cli-79aq9cgb.js → cli-0383bp7f.js} +1222 -406
- package/dist/{cli-xgpf00sk.js → cli-0c7ata9h.js} +24 -23
- package/dist/{cli-qjxy52w7.js → cli-121ph74b.js} +2 -2
- package/dist/{cli-20035trh.js → cli-17xpf7cm.js} +14 -7
- package/dist/{cli-cqt19wg6.js → cli-1a2j50m0.js} +11 -2
- package/dist/{cli-g9df2m37.js → cli-1cz0c18q.js} +249 -200
- package/dist/{cli-fjtp3463.js → cli-1er0rhz8.js} +13 -12
- package/dist/{cli-ca2w7zv7.js → cli-2hhfhfq5.js} +11 -6
- package/dist/{cli-npssxgaz.js → cli-2pdaysab.js} +52 -2
- package/dist/{cli-rykfmgwg.js → cli-2x0e561b.js} +1 -1
- package/dist/{cli-503ya656.js → cli-35pj2yva.js} +20 -150
- package/dist/cli-3qhyh31j.js +166 -0
- package/dist/{cli-cygyqj3b.js → cli-3zc55ctx.js} +8 -6
- package/dist/{cli-96qd5psa.js → cli-58e8yr0d.js} +1 -1
- package/dist/{cli-4aj25szq.js → cli-5nbmpy8w.js} +2 -2
- package/dist/{cli-mg24hkt4.js → cli-5p3x4zna.js} +2 -2
- package/dist/{cli-vwbbaecp.js → cli-7119ja3w.js} +3 -3
- package/dist/{cli-mzkqpxee.js → cli-798vkbks.js} +2 -2
- package/dist/{cli-3gvrr8vj.js → cli-82c1pacn.js} +111 -54
- package/dist/{cli-hgqfttfc.js → cli-89s4ngw3.js} +1 -1
- package/dist/{cli-9b13ggd1.js → cli-89v6kyq7.js} +1 -0
- package/dist/{cli-b6thtzac.js → cli-8g6mc14k.js} +7 -7
- package/dist/{cli-eg7cdg68.js → cli-9m03pzga.js} +5 -5
- package/dist/cli-9s68w752.js +303 -0
- package/dist/{cli-48527fpw.js → cli-a8c82p2t.js} +16 -15
- package/dist/{cli-5f2hq128.js → cli-ad4qxm6j.js} +12 -11
- package/dist/{cli-e4xnc0qp.js → cli-akfj32vj.js} +33 -7
- package/dist/{cli-ejpygnqz.js → cli-bh7jed3k.js} +212 -22
- package/dist/{cli-0z2v4nhw.js → cli-cat6h73s.js} +1 -1
- package/dist/{cli-e0ndxhtk.js → cli-cfkrztza.js} +190 -13
- package/dist/{cli-kc3dp84d.js → cli-d56tgd45.js} +216 -59
- package/dist/cli-dbmwby6a.js +9 -0
- package/dist/{cli-0n2e4x49.js → cli-ecfxwnyb.js} +15 -2
- package/dist/{cli-gzyh0j0g.js → cli-ee8bc46j.js} +66 -166
- package/dist/{cli-kdnehe0t.js → cli-et8m9xsv.js} +1 -1
- package/dist/cli-f9w1semm.js +413 -0
- package/dist/cli-gt4hxb8p.js +99 -0
- package/dist/{cli-qv4jv8bx.js → cli-hgmnf38m.js} +2 -2
- package/dist/{cli-10ym38qc.js → cli-hn04t9db.js} +3 -3
- package/dist/{cli-qvnnx4ct.js → cli-jpf7e1zq.js} +105 -243
- package/dist/cli-jyy6pm2f.js +333872 -0
- package/dist/{cli-dvjpkkjd.js → cli-kgd3p0bm.js} +7 -7
- package/dist/cli-ma3zvh39.js +10404 -0
- package/dist/{cli-r2ap2czm.js → cli-nexqx4ve.js} +6 -0
- package/dist/{cli-j9z8mfx3.js → cli-nsdxtcbg.js} +37 -20
- package/dist/{cli-wgjx0q33.js → cli-phfg8vy8.js} +392 -53
- package/dist/{cli-rgjprct3.js → cli-ptr8h7kp.js} +19 -1
- package/dist/{cli-s8s499xy.js → cli-qbksc292.js} +3 -2
- package/dist/{cli-bv0a38v9.js → cli-qwsnmjdd.js} +515 -229
- package/dist/{cli-68bmme5p.js → cli-r6fsxc76.js} +40018 -52654
- package/dist/{cli-rrqmqr1s.js → cli-rtx9dygp.js} +1 -1
- package/dist/{cli-rfezr056.js → cli-sqm3r5ps.js} +83 -15
- package/dist/{cli-zw65mab6.js → cli-t6v2ah3r.js} +67 -13
- package/dist/{cli-vn0qv9cj.js → cli-t845n9xk.js} +28 -14
- package/dist/cli-trc24wk2.js +143 -0
- package/dist/{cli-wd9hz40d.js → cli-tre4bdgq.js} +5 -5
- package/dist/{cli-9yg65c1j.js → cli-tsk3nz8a.js} +29 -1
- package/dist/{cli-phsaj4xq.js → cli-v0pvvhfq.js} +1 -1
- package/dist/{cli-hj65wsts.js → cli-vnnz5ncg.js} +4695 -4915
- package/dist/{cli-cpvsaqsw.js → cli-w0bwte75.js} +8 -5
- package/dist/{cli-z9x0sh1t.js → cli-we0q7t0e.js} +3 -3
- package/dist/{cli-r94z9p1z.js → cli-wgbezhw2.js} +3 -0
- package/dist/{cli-19jenss3.js → cli-xk79303e.js} +51 -17
- package/dist/{cli-31nkw3g3.js → cli-ybgv4kw2.js} +15 -8
- package/dist/{cli-ardpzhjm.js → cli-yrg7c73k.js} +13 -6
- package/dist/{cli-de1396j2.js → cli-ywybs5as.js} +7 -1
- package/dist/{cli-vhjwh6cz.js → cli-yy6dew39.js} +2 -2
- package/dist/{cli-bgv70kym.js → cli-zb6xbk61.js} +3 -2
- package/dist/{cli-4tvgz99m.js → cli-ze1d3wzv.js} +79 -27
- package/dist/cli.js +33 -32
- package/dist/{cloudflare-workers-ai-system-one-1sg586qv.js → cloudflare-workers-ai-system-one-k6fbxw9d.js} +2 -2
- package/dist/{codex-adapter-jqfqqa21.js → codex-adapter-04v97vep.js} +23 -20
- package/dist/{codex-hook-5eys3dya.js → codex-hook-20me6byw.js} +2 -2
- package/dist/{codex-login-he9vrn90.js → codex-login-cf7mzsgg.js} +48 -3
- package/dist/{codex-session-runner-zd341dsm.js → codex-session-runner-ax69mqq3.js} +21 -20
- package/dist/{commands-vfsysz4s.js → commands-18gy08n1.js} +12 -10
- package/dist/{db-s3znhvbn.js → db-d2pvjpyt.js} +22 -10
- package/dist/{devin-adapter-8vgkwh29.js → devin-adapter-dpsv6hd9.js} +1 -1
- package/dist/{dispatcher-5xn0c7rf.js → dispatcher-8wbwyzjg.js} +31 -29
- package/dist/{dsh-adapter-894mgfvs.js → dsh-adapter-ysqk9snv.js} +9 -4
- package/dist/{e2b-ez07znam.js → e2b-esmt1r16.js} +3 -1
- package/dist/{execute-71ysgv35.js → execute-cmagrbrz.js} +235 -52
- package/dist/{google-generative-ai-1nfcdphp.js → google-generative-ai-k6n5nbpp.js} +3 -3
- package/dist/{google-vertex-1tqcd7b1.js → google-vertex-44xxtcvp.js} +3 -3
- package/dist/{handlers-5w4jwycr.js → handlers-6b69m5kp.js} +34 -32
- package/dist/{hook-z0hbxj85.js → hook-k3mydf2n.js} +16 -14
- package/dist/{hook-853bxrr6.js → hook-srnkt0hb.js} +16 -14
- package/dist/{http-akc3wy3m.js → http-hrf80ca1.js} +836 -189
- package/dist/{index-ttpbhnjg.js → index-1asbaj62.js} +32 -30
- package/dist/{index-cd151qkq.js → index-45evq4ee.js} +31 -29
- package/dist/{index-k661dzzr.js → index-9rxdvj6w.js} +32 -30
- package/dist/index-k4nj18qs.js +31 -0
- package/dist/{index-5sz16ksh.js → index-xmevk2b9.js} +89 -61
- package/dist/{keepalive-8p9rpvz5.js → keepalive-sfdz6ksp.js} +14 -12
- package/dist/{lead-jp69z5h3.js → lead-ej91e9hw.js} +52 -50
- package/dist/{llama-cpp-classify-t2tccams.js → llama-cpp-classify-tgj35k8d.js} +1 -1
- package/dist/{maintenance-fwx4ev0k.js → maintenance-80dnd7ke.js} +15 -13
- package/dist/{mistral-conversations-bhvwqcnk.js → mistral-conversations-pc3ntnxt.js} +1 -1
- package/dist/node-f0ykebbv.js +2107 -0
- package/dist/node-wyamey5r.js +19 -0
- package/dist/{oauth-refresh-sweep-cwcq1ctx.js → oauth-refresh-sweep-m1etk2mx.js} +13 -11
- package/dist/{onboard-2b4q0t84.js → onboard-0q8sdfqc.js} +2 -2
- package/dist/{openai-codex-responses-nekthgks.js → openai-codex-responses-n7n683p2.js} +2 -2
- package/dist/{openai-completions-hxtzwj0s.js → openai-completions-jpaj5g2b.js} +2 -2
- package/dist/{openai-responses-w4r118w7.js → openai-responses-9a3nme9j.js} +3 -3
- package/dist/{opencode-adapter-zz7xvjj6.js → opencode-adapter-4wcgmvgf.js} +13 -11
- package/dist/{openrouter-images-b6sqqjgn.js → openrouter-images-8yx3487g.js} +1 -1
- package/dist/{otel-impl-g8rs4vwr.js → otel-impl-hnqm9mxq.js} +2 -2
- package/dist/pi-logo-animation-e9a0t68z.js +1003 -0
- package/dist/{pi-mono-adapter-n0me28wt.js → pi-mono-adapter-d6sqm9wr.js} +301 -78
- package/dist/{pricing-refresh-0v77385v.js → pricing-refresh-y60z64pm.js} +14 -13
- package/dist/quickjs-r1pq2107.wasm +0 -0
- package/dist/{rbac-roles-krjyazbj.js → rbac-roles-8pa0754b.js} +13 -11
- package/dist/{render-v2-3wjsp9aw.js → render-v2-418s1vj7.js} +13 -11
- package/dist/{runtime-ktjysacx.js → runtime-3pknc168.js} +5 -4
- package/dist/{setup-yeqryke6.js → setup-yghdkj4x.js} +2 -2
- package/dist/{typesafe-system-one-96960jxp.js → typesafe-system-one-2ef30pec.js} +2 -2
- package/dist/{virtual-modules-dzdeq1sf.js → virtual-modules-jcceevt5.js} +8 -6
- package/dist/{work-objects-3pakpkw0.js → work-objects-j1sz20v9.js} +34 -32
- package/dist/{worker-85testgj.js → worker-d4gcvkjt.js} +52 -50
- package/dist/{x-n3e0v3xa.js → x-f1gt1pz3.js} +2 -2
- package/openapi.json +587 -19
- package/package.json +16 -15
- package/src/azure-devops/api.ts +121 -0
- package/src/azure-devops/auth.ts +78 -0
- package/src/azure-devops/handlers.ts +413 -0
- package/src/azure-devops/index.ts +27 -0
- package/src/azure-devops/templates.ts +108 -0
- package/src/azure-devops/types.ts +90 -0
- package/src/be/db/api-keys.ts +70 -0
- package/src/be/db/tasks/read.ts +1 -1
- package/src/be/db/tasks/write.ts +16 -0
- package/src/be/db-client.ts +11 -2
- package/src/be/db-retention.ts +95 -32
- package/src/be/db.ts +187 -24
- package/src/be/memory/constants.ts +16 -0
- package/src/be/memory/graph-expansion.ts +8 -1
- package/src/be/memory/index-content.ts +20 -1
- package/src/be/memory/key-guard.ts +93 -0
- package/src/be/memory/key-paths.ts +103 -0
- package/src/be/memory/providers/sqlite-store.ts +203 -60
- package/src/be/memory/raters/llm-summarizer.ts +10 -4
- package/src/be/memory/raters/llm.ts +15 -5
- package/src/be/memory/raters/store.ts +6 -3
- package/src/be/memory/raters/types.ts +11 -0
- package/src/be/memory/reranker.ts +38 -7
- package/src/be/memory/types.ts +12 -1
- package/src/be/migrations/185_api_key_auth_failures.sql +6 -0
- package/src/be/migrations/186_api_key_seat_mismatch.sql +8 -0
- package/src/be/migrations/190_memory_rating_model.sql +7 -0
- package/src/be/migrations/191_context_versions_previous_index.sql +8 -0
- package/src/be/model-tier-keys.ts +16 -1
- package/src/be/model-tier-resolution.ts +63 -18
- package/src/be/model-validation.ts +86 -10
- package/src/be/pricing-normalize.ts +4 -2
- package/src/be/scripts/typecheck.ts +4 -3
- package/src/be/seed/runner.ts +18 -12
- package/src/be/seed/types.ts +1 -0
- package/src/be/seed-pricing.ts +16 -0
- package/src/be/seed-scripts/catalog/task-failure-audit.ts +26 -26
- package/src/be/swarm-config-guard.ts +13 -1
- package/src/commands/claude-managed-setup.ts +33 -31
- package/src/commands/codex-login.ts +67 -0
- package/src/commands/credential-outcome-report.ts +191 -0
- package/src/commands/provider-credentials.ts +28 -15
- package/src/commands/rate-limit-outcome.ts +34 -4
- package/src/commands/runner.ts +479 -228
- package/src/commands/seat-mismatch-report.ts +46 -0
- package/src/e2b/env.ts +2 -0
- package/src/extensions/apply-task-create.ts +27 -1
- package/src/extensions/catalog.generated.json +17 -0
- package/src/extensions/contract-types.generated.ts +1 -1
- package/src/github/handlers.ts +10 -74
- package/src/github/reactions.ts +119 -138
- package/src/github/task-reactions.ts +34 -11
- package/src/heartbeat/heartbeat.ts +15 -2
- package/src/hooks/hook.ts +1 -1
- package/src/http/agents.ts +15 -2
- package/src/http/api-keys.ts +140 -2
- package/src/http/codex-oauth-keep-warm.ts +3 -5
- package/src/http/core.ts +12 -0
- package/src/http/extensions.ts +51 -27
- package/src/http/index.ts +4 -0
- package/src/http/mcp-user.ts +8 -13
- package/src/http/mcp.ts +19 -12
- package/src/http/memory.ts +91 -18
- package/src/http/poll.ts +9 -1
- package/src/http/schedules.ts +17 -2
- package/src/http/script-runs.ts +12 -0
- package/src/http/session-data.ts +6 -4
- package/src/http/stats.ts +1 -0
- package/src/http/status.ts +15 -1
- package/src/http/tasks.ts +80 -8
- package/src/http/users.ts +1 -1
- package/src/http/webhooks.ts +120 -2
- package/src/http/workflows.ts +11 -0
- package/src/mcp-client/http-client.ts +5 -0
- package/src/memory/recall-query.ts +74 -0
- package/src/prompts/base-prompt.ts +15 -4
- package/src/prompts/session-templates.ts +22 -1
- package/src/providers/acp-adapter.ts +1 -0
- package/src/providers/claude-adapter.ts +98 -21
- package/src/providers/claude-managed-adapter.ts +30 -2
- package/src/providers/claude-sdk-session.ts +3 -1
- package/src/providers/codex-adapter.ts +11 -11
- package/src/providers/codex-skill-resolver.ts +6 -0
- package/src/providers/devin-adapter.ts +1 -0
- package/src/providers/dsh-adapter.ts +205 -7
- package/src/providers/harness-version.ts +83 -7
- package/src/providers/opencode-adapter.ts +77 -4
- package/src/providers/pi-binary-root/src/extensions/codemode/worker.ts +11 -0
- package/src/providers/pi-codemode-runtime.ts +17 -0
- package/src/providers/pi-mono-adapter.ts +387 -83
- package/src/providers/pi-mono-extension.ts +17 -2
- package/src/providers/pricing-sources.md +5 -1
- package/src/providers/reasoning-effort.ts +10 -2
- package/src/providers/types.ts +9 -1
- package/src/rbac/legacy-policy.ts +20 -0
- package/src/rbac/permissions.ts +15 -0
- package/src/scripts-runtime/types/stdlib.d.ts +13 -5
- package/src/scripts-runtime/types/swarm-extension.d.ts +4 -2
- package/src/scripts-runtime/types/swarm-sdk.d.ts +13 -5
- package/src/slack/assistant.ts +13 -0
- package/src/slack/render-v2.ts +87 -37
- package/src/slack/session-status.ts +541 -0
- package/src/tasks/context-key.ts +38 -1
- package/src/tasks/sibling-awareness.ts +3 -2
- package/src/telemetry.ts +5 -4
- package/src/templates.d.ts +6 -0
- package/src/tests/api-key-auth-failure-route.test.ts +142 -0
- package/src/tests/api-key-tracking.test.ts +368 -1
- package/src/tests/azure-devops-auth.test.ts +100 -0
- package/src/tests/azure-devops-handlers.test.ts +324 -0
- package/src/tests/azure-devops-webhook-malformed.test.ts +96 -0
- package/src/tests/base-prompt.test.ts +40 -2
- package/src/tests/claude-adapter.test.ts +58 -0
- package/src/tests/claude-default-route.test.ts +260 -0
- package/src/tests/claude-managed-adapter.test.ts +47 -0
- package/src/tests/claude-managed-setup.test.ts +48 -0
- package/src/tests/claude-prompt-body-once.test.ts +117 -0
- package/src/tests/claude-routes-e2e.test.ts +316 -0
- package/src/tests/codex-auth-failure.test.ts +52 -0
- package/src/tests/codex-login.test.ts +116 -0
- package/src/tests/context-versions-retention.test.ts +314 -0
- package/src/tests/core-auth.test.ts +7 -0
- package/src/tests/credential-exhaustion-policy.test.ts +118 -3
- package/src/tests/credential-outcome-report.test.ts +171 -0
- package/src/tests/credential-status-api.test.ts +103 -2
- package/src/tests/db-retention.test.ts +14 -14
- package/src/tests/db-task-read-contract.test.ts +6 -0
- package/src/tests/db-task-write-contract.test.ts +533 -1
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/dokploy-deploy.test.ts +315 -0
- package/src/tests/dsh-adapter.test.ts +134 -2
- package/src/tests/dsh-usage.test.ts +153 -0
- package/src/tests/explicit-model-validation.test.ts +253 -2
- package/src/tests/extensions-catalog.test.ts +1 -0
- package/src/tests/extensions-example-deploy-awareness.test.ts +301 -0
- package/src/tests/extensions-http.test.ts +137 -10
- package/src/tests/extensions-mcp-tools.test.ts +28 -0
- package/src/tests/extensions-pre-task.test.ts +73 -0
- package/src/tests/fetch-resolved-env.test.ts +70 -0
- package/src/tests/fixtures/azure-devops/pull-request-commented.json +129 -0
- package/src/tests/fixtures/azure-devops/pull-request-created.json +88 -0
- package/src/tests/fixtures/fake-claude-routes.ts +229 -0
- package/src/tests/github-handlers-reactions.test.ts +486 -0
- package/src/tests/github-reactions.test.ts +280 -0
- package/src/tests/hang-watchdog-worker.ts +47 -0
- package/src/tests/hang-watchdog.test.ts +45 -0
- package/src/tests/hang-watchdog.ts +30 -0
- package/src/tests/harness-cli-version.test.ts +62 -0
- package/src/tests/harness-model-guard.test.ts +123 -0
- package/src/tests/harness-version.test.ts +70 -3
- package/src/tests/http-api-integration.test.ts +21 -0
- package/src/tests/http-task-write-ownership.test.ts +195 -0
- package/src/tests/internal-ai/complete-structured.test.ts +94 -0
- package/src/tests/internal-ai/credentials.test.ts +22 -0
- package/src/tests/internal-ai/models.test.ts +36 -2
- package/src/tests/internal-ai/schema-parity.test.ts +25 -1
- package/src/tests/internal-ai/summarize-session.test.ts +23 -7
- package/src/tests/mcp-user-route.test.ts +133 -0
- package/src/tests/memory-fts-populate.test.ts +139 -0
- package/src/tests/memory-http-recall-gating.test.ts +125 -1
- package/src/tests/memory-key-paths.test.ts +1055 -0
- package/src/tests/memory-rate-endpoint.test.ts +66 -0
- package/src/tests/memory-rater-llm-summarizer.test.ts +2 -1
- package/src/tests/memory-rater-llm.test.ts +73 -0
- package/src/tests/memory-rater-store.test.ts +31 -0
- package/src/tests/memory-reranker.test.ts +40 -0
- package/src/tests/model-rate-limit-windows.test.ts +19 -0
- package/src/tests/model-tier-resolution.test.ts +92 -0
- package/src/tests/opencode-adapter.test.ts +214 -2
- package/src/tests/opencode-plugin.test.ts +4 -0
- package/src/tests/pi-codemode.test.ts +324 -0
- package/src/tests/pi-mono-adapter.test.ts +3 -0
- package/src/tests/pi-native-mcp.test.ts +193 -0
- package/src/tests/pi-tool-exposure.test.ts +374 -0
- package/src/tests/preload.ts +9 -0
- package/src/tests/prompt-template-session.test.ts +5 -3
- package/src/tests/provider-registration.test.ts +0 -2
- package/src/tests/providers/pi-cost.test.ts +190 -4
- package/src/tests/rate-limit-event.test.ts +65 -0
- package/src/tests/rate-limit-outcome.test.ts +90 -0
- package/src/tests/rbac-engine.test.ts +41 -2
- package/src/tests/runner-key-completion-outcome.test.ts +112 -0
- package/src/tests/runner-key-outcome-late-reset.test.ts +224 -0
- package/src/tests/runner-registration-retry.test.ts +149 -0
- package/src/tests/runner-slot-reconcile.test.ts +199 -0
- package/src/tests/script-connections.test.ts +8 -0
- package/src/tests/seat-mismatch-report.test.ts +85 -0
- package/src/tests/seed-scripts.test.ts +49 -0
- package/src/tests/seed.test.ts +25 -0
- package/src/tests/session-costs-recompute-all-providers.test.ts +23 -0
- package/src/tests/slack-render-v2.test.ts +96 -0
- package/src/tests/slack-session-status.test.ts +626 -0
- package/src/tests/status.test.ts +29 -0
- package/src/tests/steering-promotion.test.ts +51 -0
- package/src/tests/store-progress-ownership.test.ts +136 -0
- package/src/tests/subscription-plans.test.ts +28 -0
- package/src/tests/task-citations.test.ts +3 -2
- package/src/tests/task-reactions.test.ts +29 -6
- package/src/tests/vcs-azure-devops.test.ts +73 -0
- package/src/tests/webhooks-task-blocked.test.ts +23 -0
- package/src/tests/workflow-agent-task.test.ts +30 -0
- package/src/tests/workflow-llm.test.ts +14 -0
- package/src/tests/workflow-triggers-v2.test.ts +320 -0
- package/src/tools/context-diff.ts +20 -0
- package/src/tools/extension-install.ts +27 -16
- package/src/tools/memory-edit.ts +47 -3
- package/src/tools/memory-search.ts +13 -1
- package/src/tools/memory-store.ts +55 -3
- package/src/tools/schedules/create-schedule.ts +1 -1
- package/src/tools/schedules/patch-schedule.ts +16 -3
- package/src/tools/schedules/update-schedule.ts +16 -3
- package/src/tools/send-task.ts +10 -7
- package/src/tools/store-progress.ts +49 -4
- package/src/tools/task-action.ts +2 -1
- package/src/tools/workflows/create-workflow.ts +8 -2
- package/src/tools/workflows/update-workflow.ts +8 -2
- package/src/types.ts +54 -7
- package/src/utils/codex-auth-failure.ts +34 -0
- package/src/utils/credentials.test.ts +31 -1
- package/src/utils/credentials.ts +92 -39
- package/src/utils/dsh-usage.ts +53 -0
- package/src/utils/error-tracker.ts +80 -0
- package/src/utils/harness-cli-version.ts +6 -4
- package/src/utils/internal-ai/complete-structured.ts +26 -3
- package/src/utils/internal-ai/credentials.ts +23 -9
- package/src/utils/internal-ai/index.ts +8 -1
- package/src/utils/internal-ai/models.ts +34 -8
- package/src/utils/internal-ai/summarize-session.ts +22 -8
- package/src/utils/model-rate-limit-windows.ts +12 -0
- package/src/utils/runtime-model-catalog.ts +15 -0
- package/src/utils/secret-scrubber.ts +8 -0
- package/src/utils/spawn-model-guard.ts +43 -0
- package/src/utils/subscription-plans.ts +22 -0
- package/src/vcs/azure-devops.ts +80 -0
- package/src/vcs/index.ts +5 -1
- package/src/vcs/types.ts +2 -2
- package/src/workflows/executors/agent-task.ts +7 -6
- package/src/workflows/model-validation.ts +45 -0
- package/src/workflows/patch-definition.ts +5 -0
- package/src/workflows/triggers.ts +85 -0
- package/templates/community/open-prompt-showreel/PLAYBOOK.md +336 -0
- package/templates/community/open-prompt-showreel/README.md +33 -0
- package/templates/community/open-prompt-showreel/example/tla-races/facts.ts +145 -0
- package/templates/community/open-prompt-showreel/example/tla-races/facts.v3.json +140 -0
- package/templates/community/open-prompt-showreel/example/tla-races/music.mist-city.json +8 -0
- package/templates/community/open-prompt-showreel/example/tla-races/reel.html +805 -0
- package/templates/community/open-prompt-showreel/example/tla-races/smoke.sh +48 -0
- package/templates/community/open-prompt-showreel/lead-prompt.md +89 -0
- package/templates/community/open-prompt-showreel/setup.sh +167 -0
- package/templates/community/open-prompt-showreel/skills/motion-design-replication/SKILL.md +85 -0
- package/templates/community/open-prompt-showreel/skills/motion-design-video-analysis/SKILL.md +115 -0
- package/templates/community/open-prompt-showreel/skills/open-prompt-showreel/SKILL.md +147 -0
- package/templates/community/open-prompt-showreel/skills/video-generation/SKILL.md +195 -0
- package/templates/community/open-prompt-showreel/tools/fetch-music.sh +65 -0
- package/templates/community/open-prompt-showreel/tools/music-analyze.py +69 -0
- package/templates/community/open-prompt-showreel/tools/music-current.sh +34 -0
- package/templates/community/open-prompt-showreel/tools/music-cut.sh +36 -0
- package/templates/community/open-prompt-showreel/tools/music-refine.py +39 -0
- package/templates/community/open-prompt-showreel/tools/render.mjs +157 -0
- package/templates/community/open-prompt-showreel/tools/sheet.sh +44 -0
- package/templates/community/open-prompt-showreel/tools/web-compress.sh +17 -0
- package/templates/community/open-prompt-showreel/tools/x-reencode.sh +21 -0
- package/templates/extensions/README.md +1 -0
- package/templates/extensions/deploy-awareness/README.md +28 -0
- package/templates/extensions/deploy-awareness/hooks.ts +152 -0
- package/templates/extensions/deploy-awareness/manifest.json +8 -0
- package/templates/skills/memory/config.json +2 -2
- package/templates/skills/memory/content.md +59 -5
- package/templates/skills/swarm-extensions/config.json +1 -1
- package/templates/skills/swarm-extensions/content.md +28 -5
- package/templates/skills/workflow-iterate/content.md +1 -0
- package/dist/boot-seeds-h7c32hvm.js +0 -27
- package/dist/cli-2djtr51b.js +0 -48
- package/dist/cli-7zttzetj.js +0 -324
- package/dist/cli-j490egb5.js +0 -5632
- package/dist/cli-m4excttz.js +0 -333481
- package/dist/index-bjmjh9h4.js +0 -29
|
@@ -12,14 +12,14 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
DEFAULT_MODEL,
|
|
14
14
|
resolveCredential
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-sqm3r5ps.js";
|
|
16
16
|
import {
|
|
17
17
|
DEFAULT_OPENROUTER_BASE_URL,
|
|
18
18
|
getOpenRouterBaseUrl
|
|
19
19
|
} from "./cli-3dpj7atn.js";
|
|
20
20
|
import {
|
|
21
21
|
embedScript
|
|
22
|
-
} from "./cli-
|
|
22
|
+
} from "./cli-7119ja3w.js";
|
|
23
23
|
import {
|
|
24
24
|
calculatePKCECodeChallenge,
|
|
25
25
|
ensureAuthorizationTokenOrThrow,
|
|
@@ -31,10 +31,10 @@ import {
|
|
|
31
31
|
oauthAppRowToProviderConfig,
|
|
32
32
|
updateAuthorizationTokens,
|
|
33
33
|
upsertAuthorization
|
|
34
|
-
} from "./cli-
|
|
34
|
+
} from "./cli-hgmnf38m.js";
|
|
35
35
|
import {
|
|
36
36
|
getSlackApp
|
|
37
|
-
} from "./cli-
|
|
37
|
+
} from "./cli-phfg8vy8.js";
|
|
38
38
|
import {
|
|
39
39
|
CredentialBroker,
|
|
40
40
|
DEFAULT_CREDENTIAL_BINDINGS,
|
|
@@ -59,17 +59,17 @@ import {
|
|
|
59
59
|
placeholderForConfigKey,
|
|
60
60
|
releaseApprovalCancellationNotificationClaim,
|
|
61
61
|
upsertSwarmConfig
|
|
62
|
-
} from "./cli-
|
|
62
|
+
} from "./cli-1cz0c18q.js";
|
|
63
63
|
import {
|
|
64
64
|
TERMINAL_TASK_STATUSES,
|
|
65
65
|
defaultAssetKey,
|
|
66
66
|
init_key,
|
|
67
67
|
init_types
|
|
68
|
-
} from "./cli-
|
|
68
|
+
} from "./cli-akfj32vj.js";
|
|
69
69
|
import {
|
|
70
70
|
init_resolver,
|
|
71
71
|
resolveTemplate
|
|
72
|
-
} from "./cli-
|
|
72
|
+
} from "./cli-ptr8h7kp.js";
|
|
73
73
|
import {
|
|
74
74
|
getAppUrl,
|
|
75
75
|
init_constants
|
|
@@ -102,7 +102,7 @@ import {
|
|
|
102
102
|
registerVolatileSecret,
|
|
103
103
|
scrubObject,
|
|
104
104
|
scrubSecrets
|
|
105
|
-
} from "./cli-
|
|
105
|
+
} from "./cli-nexqx4ve.js";
|
|
106
106
|
import {
|
|
107
107
|
__commonJS,
|
|
108
108
|
__require,
|
|
@@ -175590,7 +175590,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
|
|
|
175590
175590
|
}
|
|
175591
175591
|
if (notification.channel === "slack") {
|
|
175592
175592
|
try {
|
|
175593
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
175593
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-0hdqa4k1.js");
|
|
175594
175594
|
const slackApp = getSlackApp2();
|
|
175595
175595
|
if (!slackApp) {
|
|
175596
175596
|
console.warn("[HITL] Slack not initialized — cannot send notification");
|
|
@@ -184059,7 +184059,7 @@ export interface RoomDecoded {
|
|
|
184059
184059
|
|
|
184060
184060
|
export interface SwarmSdk {
|
|
184061
184061
|
// --- memory ---
|
|
184062
|
-
memory_search(args: { query: string; intent: string; scope?: "all" | "agent" | "swarm"; limit?: number; source?: string }): Promise<unknown>;
|
|
184062
|
+
memory_search(args: { query: string; intent: string; scope?: "all" | "agent" | "swarm"; limit?: number; source?: string; keyPrefix?: string }): Promise<unknown>;
|
|
184063
184063
|
memory_get(args: { memoryId: string; intent: string }): Promise<unknown>;
|
|
184064
184064
|
memory_rate(args: { id: string; useful: boolean; note?: string }): Promise<unknown>;
|
|
184065
184065
|
// --- tasks ---
|
|
@@ -184132,7 +184132,7 @@ export interface SwarmSdk {
|
|
|
184132
184132
|
|
|
184133
184133
|
// --- write: memory ---
|
|
184134
184134
|
memory_delete(args: { id: string }): Promise<unknown>;
|
|
184135
|
-
memory_store(args: { content: string; name: string; scope?: "agent" | "swarm"; tags?: string[]; taskId?: string; intent?: string }): Promise<unknown>;
|
|
184135
|
+
memory_store(args: { content: string; name: string; scope?: "agent" | "swarm"; tags?: string[]; taskId?: string; intent?: string; key?: string }): Promise<unknown>;
|
|
184136
184136
|
memory_edit(args: {
|
|
184137
184137
|
memoryId?: string;
|
|
184138
184138
|
key?: string;
|
|
@@ -184143,6 +184143,7 @@ export interface SwarmSdk {
|
|
|
184143
184143
|
newString?: string;
|
|
184144
184144
|
intent: string;
|
|
184145
184145
|
expectedVersion?: number;
|
|
184146
|
+
newKey?: string;
|
|
184146
184147
|
}): Promise<unknown>;
|
|
184147
184148
|
inject_learning(args: { content: string; name?: string; scope?: "agent" | "swarm"; source?: string; tags?: string[] }): Promise<unknown>;
|
|
184148
184149
|
|
|
@@ -184226,7 +184227,7 @@ export interface SwarmSdk {
|
|
|
184226
184227
|
|
|
184227
184228
|
// --- write: extensions ---
|
|
184228
184229
|
extension_catalog(args?: Record<string, never>): Promise<unknown>;
|
|
184229
|
-
extension_install(args: { template: string; priority?: number; config?: Record<string, unknown> }): Promise<unknown>;
|
|
184230
|
+
extension_install(args: { template: string; priority?: number; config?: Record<string, unknown> } | { manifest: Record<string, unknown>; files: Record<string, string>; priority?: number; config?: Record<string, unknown> }): Promise<unknown>;
|
|
184230
184231
|
extension_list(args?: { enabledOnly?: boolean }): Promise<unknown>;
|
|
184231
184232
|
extension_delete(args: { id: string }): Promise<unknown>;
|
|
184232
184233
|
extension_enable(args: { id: string }): Promise<unknown>;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
runtimeCatalogModel,
|
|
3
|
-
runtimeCatalogSection
|
|
4
|
-
} from "./cli-m4excttz.js";
|
|
5
1
|
import {
|
|
6
2
|
claudeCatalogModelId,
|
|
3
|
+
dshCatalogRef,
|
|
4
|
+
init_runtime_model_catalog,
|
|
7
5
|
init_src,
|
|
8
|
-
reasoningLevelsFor
|
|
9
|
-
|
|
6
|
+
reasoningLevelsFor,
|
|
7
|
+
runtimeCatalogModel,
|
|
8
|
+
runtimeCatalogSection
|
|
9
|
+
} from "./cli-jyy6pm2f.js";
|
|
10
10
|
|
|
11
11
|
// src/providers/reasoning-effort.ts
|
|
12
12
|
init_src();
|
|
13
|
+
init_runtime_model_catalog();
|
|
13
14
|
function splitProviderModel(model) {
|
|
14
15
|
const slash = model.indexOf("/");
|
|
15
16
|
if (slash === -1)
|
|
@@ -27,6 +28,8 @@ function lookupModel(harness, model) {
|
|
|
27
28
|
} else if (harness === "codex") {
|
|
28
29
|
providerId = "openai";
|
|
29
30
|
modelId = model;
|
|
31
|
+
} else if (harness === "dsh") {
|
|
32
|
+
({ providerId, modelId } = dshCatalogRef(model));
|
|
30
33
|
} else {
|
|
31
34
|
({ providerId, modelId } = splitProviderModel(model));
|
|
32
35
|
if (!providerId)
|
|
@@ -105,6 +108,8 @@ function applyReasoningEffort(harness, model, level) {
|
|
|
105
108
|
return applyPiEffort(level);
|
|
106
109
|
case "opencode":
|
|
107
110
|
return applyOpencodeEffort(model, level);
|
|
111
|
+
case "dsh":
|
|
112
|
+
return { kind: "dsh-effort", reasoningEffort: level };
|
|
108
113
|
default: {
|
|
109
114
|
const _exhaustive = harness;
|
|
110
115
|
return _exhaustive;
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
init_model_rate_limit_windows,
|
|
4
4
|
isModelScopedWindow,
|
|
5
5
|
parseModelLimitMessage
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-ywybs5as.js";
|
|
7
7
|
|
|
8
8
|
// src/utils/error-tracker.ts
|
|
9
9
|
init_model_rate_limit_windows();
|
|
@@ -62,6 +62,39 @@ function parseRateLimitWindowTelemetry(json, lastSeenAt = new Date().toISOString
|
|
|
62
62
|
return null;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
+
var SEAT_PAYLOAD_FIELDS = [
|
|
66
|
+
"overageDisabledReason",
|
|
67
|
+
"canUserPurchaseCredits",
|
|
68
|
+
"hasChargeableSavedPaymentMethod"
|
|
69
|
+
];
|
|
70
|
+
function redactRateLimitEvent(message) {
|
|
71
|
+
if (!message || typeof message !== "object")
|
|
72
|
+
return message;
|
|
73
|
+
const json = message;
|
|
74
|
+
if (json.type !== "rate_limit_event")
|
|
75
|
+
return message;
|
|
76
|
+
const info = json.rate_limit_info;
|
|
77
|
+
if (!info || typeof info !== "object")
|
|
78
|
+
return message;
|
|
79
|
+
if (!SEAT_PAYLOAD_FIELDS.some((field) => (field in info)))
|
|
80
|
+
return message;
|
|
81
|
+
const redactedInfo = { ...info };
|
|
82
|
+
for (const field of SEAT_PAYLOAD_FIELDS)
|
|
83
|
+
delete redactedInfo[field];
|
|
84
|
+
return { ...json, rate_limit_info: redactedInfo };
|
|
85
|
+
}
|
|
86
|
+
function redactRateLimitEventLine(line) {
|
|
87
|
+
if (!line.includes('"rate_limit_event"'))
|
|
88
|
+
return line;
|
|
89
|
+
let parsed;
|
|
90
|
+
try {
|
|
91
|
+
parsed = JSON.parse(line);
|
|
92
|
+
} catch {
|
|
93
|
+
return line;
|
|
94
|
+
}
|
|
95
|
+
const redacted = redactRateLimitEvent(parsed);
|
|
96
|
+
return redacted === parsed ? line : JSON.stringify(redacted);
|
|
97
|
+
}
|
|
65
98
|
var MAX_RATE_LIMIT_RESET_MS = 7 * 24 * 60 * 60 * 1000;
|
|
66
99
|
function isRateLimitMessage(s) {
|
|
67
100
|
return /rate.?limit|hit your[\w\s-]*limit|usage[ _-]?limit|too many requests|\b429\b/i.test(s) || isCodexCreditsExhaustedMessage(s);
|
|
@@ -91,6 +124,7 @@ class SessionErrorTracker {
|
|
|
91
124
|
errors = [];
|
|
92
125
|
keyWideRejections = new Map;
|
|
93
126
|
modelRateLimit;
|
|
127
|
+
creditsRequired;
|
|
94
128
|
rateLimitWindows = {};
|
|
95
129
|
addApiError(errorCategory, message) {
|
|
96
130
|
this.errors.push({
|
|
@@ -149,6 +183,14 @@ class SessionErrorTracker {
|
|
|
149
183
|
}
|
|
150
184
|
return;
|
|
151
185
|
}
|
|
186
|
+
if (info.errorCode === "credits_required") {
|
|
187
|
+
this.creditsRequired = {
|
|
188
|
+
observedAt,
|
|
189
|
+
resetsAtMs: typeof info.resetsAt === "number" && Number.isFinite(info.resetsAt) ? info.resetsAt * 1000 : undefined,
|
|
190
|
+
overageDisabledReason: typeof info.overageDisabledReason === "string" ? info.overageDisabledReason : undefined
|
|
191
|
+
};
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
152
194
|
const resetsAtSec = info.resetsAt;
|
|
153
195
|
if (typeof resetsAtSec !== "number" || !Number.isFinite(resetsAtSec) || resetsAtSec <= 0) {
|
|
154
196
|
console.warn(`[rate_limit_event] Malformed resetsAt value: ${JSON.stringify(resetsAtSec)} — ignoring`);
|
|
@@ -202,6 +244,14 @@ class SessionErrorTracker {
|
|
|
202
244
|
observedAt: this.modelRateLimit.observedAt
|
|
203
245
|
};
|
|
204
246
|
}
|
|
247
|
+
getCreditsRequired() {
|
|
248
|
+
if (!this.creditsRequired)
|
|
249
|
+
return;
|
|
250
|
+
return {
|
|
251
|
+
observedAt: this.creditsRequired.observedAt,
|
|
252
|
+
overageDisabledReason: this.creditsRequired.overageDisabledReason
|
|
253
|
+
};
|
|
254
|
+
}
|
|
205
255
|
hasErrors() {
|
|
206
256
|
return this.errors.length > 0;
|
|
207
257
|
}
|
|
@@ -434,4 +484,4 @@ function parseStderrForErrors(stderr, tracker) {
|
|
|
434
484
|
}
|
|
435
485
|
}
|
|
436
486
|
|
|
437
|
-
export { MAX_RATE_LIMIT_RESET_MS, isRateLimitMessage, isCodexCreditsExhaustedMessage, CODEX_CREDITS_EXHAUSTED_COOLDOWN_MS, resolveCodexCreditsExhaustedCooldownMs, SessionErrorTracker, trackErrorFromJson, parseRateLimitResetTime, parseStderrForErrors };
|
|
487
|
+
export { redactRateLimitEvent, redactRateLimitEventLine, MAX_RATE_LIMIT_RESET_MS, isRateLimitMessage, isCodexCreditsExhaustedMessage, CODEX_CREDITS_EXHAUSTED_COOLDOWN_MS, resolveCodexCreditsExhaustedCooldownMs, SessionErrorTracker, trackErrorFromJson, parseRateLimitResetTime, parseStderrForErrors };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// node_modules/@earendil-works/pi-ai/dist/utils/oauth-page.js
|
|
2
|
-
var LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#
|
|
2
|
+
var LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#F09082" d="M165.29 165.29H517.36V400H400V282.65H165.29Z"/><path fill="#4D9ABF" d="M165.29 282.65H282.65V400H400V517.36H282.65V634.72H165.29Z"/><path fill="#F1BE58" d="M517.36 400H634.72V634.72H517.36Z"/></svg>`;
|
|
3
3
|
function escapeHtml(value) {
|
|
4
4
|
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
5
5
|
}
|
|
@@ -1,157 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
mcpNamespace,
|
|
3
|
+
require_proper_lockfile,
|
|
4
|
+
validateMcpServerConfig
|
|
5
|
+
} from "./cli-bh7jed3k.js";
|
|
4
6
|
import {
|
|
5
7
|
CONFIG_DIR_NAME,
|
|
6
8
|
canonicalizePath,
|
|
7
9
|
resolvePath,
|
|
8
10
|
stripBom
|
|
9
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-vnnz5ncg.js";
|
|
10
12
|
import {
|
|
11
13
|
__toESM
|
|
12
14
|
} from "./cli-bc05qbss.js";
|
|
13
15
|
|
|
14
|
-
// node_modules/@earendil-works/pi-coding-agent/dist/core/mcp-servers.js
|
|
15
|
-
var MCP_EXPOSURES = [
|
|
16
|
-
"codemode",
|
|
17
|
-
"codemode-deferred",
|
|
18
|
-
"deferred",
|
|
19
|
-
"direct",
|
|
20
|
-
"hidden"
|
|
21
|
-
];
|
|
22
|
-
var LOOPBACK_HOSTS = ["localhost", "127.0.0.1", "[::1]"];
|
|
23
|
-
function isLoopbackRedirectUri(value) {
|
|
24
|
-
if (!URL.canParse(value))
|
|
25
|
-
return false;
|
|
26
|
-
const url = new URL(value);
|
|
27
|
-
return url.protocol === "http:" && LOOPBACK_HOSTS.includes(url.hostname) && url.search === "" && url.hash === "";
|
|
28
|
-
}
|
|
29
|
-
var SERVER_NAME = /^[A-Za-z0-9_-]+$/;
|
|
30
|
-
function isRecord(value) {
|
|
31
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32
|
-
}
|
|
33
|
-
function isStringRecord(value) {
|
|
34
|
-
return isRecord(value) && Object.values(value).every((entry) => typeof entry === "string");
|
|
35
|
-
}
|
|
36
|
-
function validateOAuth(value) {
|
|
37
|
-
if (value === undefined)
|
|
38
|
-
return;
|
|
39
|
-
if (!isRecord(value))
|
|
40
|
-
return "oauth must be an object";
|
|
41
|
-
if (value.clientId !== undefined && typeof value.clientId !== "string")
|
|
42
|
-
return "oauth.clientId must be a string";
|
|
43
|
-
if (value.clientSecret !== undefined && typeof value.clientSecret !== "string") {
|
|
44
|
-
return "oauth.clientSecret must be a string";
|
|
45
|
-
}
|
|
46
|
-
const port = value.callbackPort;
|
|
47
|
-
if (port !== undefined && (typeof port !== "number" || !Number.isInteger(port) || port < 1 || port > 65535)) {
|
|
48
|
-
return "oauth.callbackPort must be a port number";
|
|
49
|
-
}
|
|
50
|
-
if (value.callbackUrl !== undefined) {
|
|
51
|
-
if (typeof value.callbackUrl !== "string" || !isLoopbackRedirectUri(value.callbackUrl)) {
|
|
52
|
-
return "oauth.callbackUrl must be an http URI on localhost, 127.0.0.1, or [::1] without query or fragment";
|
|
53
|
-
}
|
|
54
|
-
const urlPort = new URL(value.callbackUrl).port;
|
|
55
|
-
if (urlPort && port !== undefined && Number(urlPort) !== port) {
|
|
56
|
-
return "oauth.callbackUrl and oauth.callbackPort name different ports";
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (value.scope !== undefined && typeof value.scope !== "string")
|
|
60
|
-
return "oauth.scope must be a string";
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
function isExposure(value) {
|
|
64
|
-
return typeof value === "string" && MCP_EXPOSURES.includes(value);
|
|
65
|
-
}
|
|
66
|
-
function toolPatternRegExp(pattern) {
|
|
67
|
-
const source = pattern.split("*").map((part) => part.replace(/[.+?^${}()|[\]\\]/g, "\\$&")).join(".*");
|
|
68
|
-
return new RegExp(`^${source}$`);
|
|
69
|
-
}
|
|
70
|
-
function getMcpToolExposure(config, toolName) {
|
|
71
|
-
const overrides = config.toolExposure ?? {};
|
|
72
|
-
const exact = overrides[toolName];
|
|
73
|
-
if (exact !== undefined)
|
|
74
|
-
return exact;
|
|
75
|
-
for (const [pattern, exposure] of Object.entries(overrides)) {
|
|
76
|
-
if (pattern.includes("*") && toolPatternRegExp(pattern).test(toolName))
|
|
77
|
-
return exposure;
|
|
78
|
-
}
|
|
79
|
-
return config.exposure ?? "codemode";
|
|
80
|
-
}
|
|
81
|
-
function validateMcpServerConfig(name, value) {
|
|
82
|
-
if (!SERVER_NAME.test(name))
|
|
83
|
-
return `invalid server name "${name}" (use letters, digits, "_" and "-")`;
|
|
84
|
-
if (!isRecord(value))
|
|
85
|
-
return `server "${name}" must be an object`;
|
|
86
|
-
const { type, exposure, enabled, timeout, toolExposure } = value;
|
|
87
|
-
const exposures = MCP_EXPOSURES.map((value2) => `"${value2}"`).join(", ");
|
|
88
|
-
if (exposure !== undefined && !isExposure(exposure)) {
|
|
89
|
-
return `server "${name}": exposure must be one of ${exposures}`;
|
|
90
|
-
}
|
|
91
|
-
if (toolExposure !== undefined) {
|
|
92
|
-
if (!isRecord(toolExposure))
|
|
93
|
-
return `server "${name}": toolExposure must map tool names to exposures`;
|
|
94
|
-
for (const [tool, value2] of Object.entries(toolExposure)) {
|
|
95
|
-
if (!isExposure(value2))
|
|
96
|
-
return `server "${name}": toolExposure "${tool}" must be one of ${exposures}`;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (enabled !== undefined && typeof enabled !== "boolean")
|
|
100
|
-
return `server "${name}": enabled must be a boolean`;
|
|
101
|
-
if (timeout !== undefined && (typeof timeout !== "number" || !(timeout > 0))) {
|
|
102
|
-
return `server "${name}": timeout must be a positive number of seconds`;
|
|
103
|
-
}
|
|
104
|
-
if (type === "sse")
|
|
105
|
-
return `server "${name}": legacy SSE transport is not supported; use the streamable HTTP URL`;
|
|
106
|
-
if (typeof value.url === "string" && (type === undefined || type === "http" || type === "streamable-http")) {
|
|
107
|
-
if (!URL.canParse(value.url) || !/^https?:$/.test(new URL(value.url).protocol)) {
|
|
108
|
-
return `server "${name}": url must be an http or https URL`;
|
|
109
|
-
}
|
|
110
|
-
if (value.headers !== undefined && !isStringRecord(value.headers)) {
|
|
111
|
-
return `server "${name}": headers must map names to strings`;
|
|
112
|
-
}
|
|
113
|
-
const oauthError = validateOAuth(value.oauth);
|
|
114
|
-
if (oauthError)
|
|
115
|
-
return `server "${name}": ${oauthError}`;
|
|
116
|
-
return value;
|
|
117
|
-
}
|
|
118
|
-
if (typeof value.command === "string" && (type === undefined || type === "stdio")) {
|
|
119
|
-
if (value.args !== undefined && !(Array.isArray(value.args) && value.args.every((arg) => typeof arg === "string"))) {
|
|
120
|
-
return `server "${name}": args must be an array of strings`;
|
|
121
|
-
}
|
|
122
|
-
if (value.env !== undefined && !isStringRecord(value.env))
|
|
123
|
-
return `server "${name}": env must map names to strings`;
|
|
124
|
-
if (value.cwd !== undefined && typeof value.cwd !== "string")
|
|
125
|
-
return `server "${name}": cwd must be a string`;
|
|
126
|
-
return value;
|
|
127
|
-
}
|
|
128
|
-
return `server "${name}" needs either "command" (stdio) or "url" (streamable HTTP)`;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
class McpServerRegistry {
|
|
132
|
-
servers = new Map;
|
|
133
|
-
changeListener;
|
|
134
|
-
register(server) {
|
|
135
|
-
this.servers.set(server.name, server);
|
|
136
|
-
this.changeListener?.();
|
|
137
|
-
}
|
|
138
|
-
unregister(name, extensionPath) {
|
|
139
|
-
if (this.servers.get(name)?.extensionPath !== extensionPath)
|
|
140
|
-
return;
|
|
141
|
-
this.servers.delete(name);
|
|
142
|
-
this.changeListener?.();
|
|
143
|
-
}
|
|
144
|
-
get(name) {
|
|
145
|
-
return this.servers.get(name);
|
|
146
|
-
}
|
|
147
|
-
list() {
|
|
148
|
-
return [...this.servers.values()].map((server) => ({ ...server, config: structuredClone(server.config) }));
|
|
149
|
-
}
|
|
150
|
-
setChangeListener(listener) {
|
|
151
|
-
this.changeListener = listener;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
16
|
// node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.js
|
|
156
17
|
var import_proper_lockfile = __toESM(require_proper_lockfile(), 1);
|
|
157
18
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -351,7 +212,7 @@ function openBrowser(target) {
|
|
|
351
212
|
// node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/config.js
|
|
352
213
|
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
353
214
|
import { dirname as dirname2, join as join2 } from "node:path";
|
|
354
|
-
function
|
|
215
|
+
function isRecord(value) {
|
|
355
216
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
356
217
|
}
|
|
357
218
|
function readConfigFile(path, scope, state) {
|
|
@@ -365,7 +226,7 @@ function readConfigFile(path, scope, state) {
|
|
|
365
226
|
errors.push(`${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
366
227
|
return;
|
|
367
228
|
}
|
|
368
|
-
if (!
|
|
229
|
+
if (!isRecord(parsed) || parsed.mcpServers !== undefined && !isRecord(parsed.mcpServers)) {
|
|
369
230
|
errors.push(`${path}: expected an object with an "mcpServers" object`);
|
|
370
231
|
return;
|
|
371
232
|
}
|
|
@@ -379,6 +240,15 @@ function readConfigFile(path, scope, state) {
|
|
|
379
240
|
errors.push(`${path}: ${config}`);
|
|
380
241
|
continue;
|
|
381
242
|
}
|
|
243
|
+
const clash = [...servers.keys()].find((other) => other !== name && mcpNamespace(other) === mcpNamespace(name));
|
|
244
|
+
if (clash) {
|
|
245
|
+
errors.push(`${path}: server "${name}" conflicts with "${clash}"`);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (scope === "project" && "url" in config && config.auth) {
|
|
249
|
+
errors.push(`${path}: server "${name}": auth is only allowed in the global mcp.json`);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
382
252
|
servers.set(name, { name, config, source: path, scope });
|
|
383
253
|
}
|
|
384
254
|
}
|
|
@@ -396,7 +266,7 @@ function loadMcpConfig(options) {
|
|
|
396
266
|
function updateMcpServerConfig(path, name, patch) {
|
|
397
267
|
editMcpServers(path, (servers) => {
|
|
398
268
|
const server = servers?.[name];
|
|
399
|
-
if (!
|
|
269
|
+
if (!isRecord(server))
|
|
400
270
|
throw new Error(`${path} does not define MCP server "${name}"`);
|
|
401
271
|
if (patch.enabled !== undefined) {
|
|
402
272
|
if (patch.enabled)
|
|
@@ -440,10 +310,10 @@ function removeMcpServerConfig(path, name) {
|
|
|
440
310
|
function editMcpServers(path, edit) {
|
|
441
311
|
const text = existsSync2(path) ? readFileSync2(path, "utf8") : undefined;
|
|
442
312
|
const parsed = text === undefined ? {} : JSON.parse(text);
|
|
443
|
-
if (!
|
|
313
|
+
if (!isRecord(parsed) || parsed.mcpServers !== undefined && !isRecord(parsed.mcpServers)) {
|
|
444
314
|
throw new Error(`${path}: expected an object with an "mcpServers" object`);
|
|
445
315
|
}
|
|
446
|
-
const servers =
|
|
316
|
+
const servers = isRecord(parsed.mcpServers) ? parsed.mcpServers : undefined;
|
|
447
317
|
if (!edit(servers, parsed))
|
|
448
318
|
return;
|
|
449
319
|
const indent = text && /^([ \t]+)\S/m.exec(text)?.[1] || " ";
|
|
@@ -452,4 +322,4 @@ function editMcpServers(path, edit) {
|
|
|
452
322
|
`);
|
|
453
323
|
}
|
|
454
324
|
|
|
455
|
-
export {
|
|
325
|
+
export { getProjectTrustOptions, hasTrustRequiringProjectResources, ProjectTrustStore, openBrowser, loadMcpConfig, updateMcpServerConfig, addMcpServerConfig, removeMcpServerConfig };
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm
|
|
3
|
+
} from "./cli-bc05qbss.js";
|
|
4
|
+
|
|
5
|
+
// src/tools/tool-config.ts
|
|
6
|
+
var CORE_TOOLS, DEFERRED_TOOLS, ALL_TOOLS;
|
|
7
|
+
var init_tool_config = __esm(() => {
|
|
8
|
+
CORE_TOOLS = new Set([
|
|
9
|
+
"join-swarm",
|
|
10
|
+
"my-agent-info",
|
|
11
|
+
"poll-task",
|
|
12
|
+
"get-task-details",
|
|
13
|
+
"store-progress",
|
|
14
|
+
"task-action",
|
|
15
|
+
"send-task",
|
|
16
|
+
"get-tasks",
|
|
17
|
+
"defer-task",
|
|
18
|
+
"memory-search",
|
|
19
|
+
"memory-get",
|
|
20
|
+
"memory-store",
|
|
21
|
+
"memory-delete",
|
|
22
|
+
"memory_rate",
|
|
23
|
+
"get-swarm",
|
|
24
|
+
"script-run",
|
|
25
|
+
"db-query",
|
|
26
|
+
"kv-get",
|
|
27
|
+
"script-query-types",
|
|
28
|
+
"get-repos",
|
|
29
|
+
"accept-steer",
|
|
30
|
+
"memory-edit",
|
|
31
|
+
"script-search",
|
|
32
|
+
"steer-task",
|
|
33
|
+
"kv-list",
|
|
34
|
+
"get-config"
|
|
35
|
+
]);
|
|
36
|
+
DEFERRED_TOOLS = new Set([
|
|
37
|
+
"list-schedules",
|
|
38
|
+
"create-schedule",
|
|
39
|
+
"update-schedule",
|
|
40
|
+
"patch-schedule",
|
|
41
|
+
"delete-schedule",
|
|
42
|
+
"run-schedule-now",
|
|
43
|
+
"create-workflow",
|
|
44
|
+
"list-workflows",
|
|
45
|
+
"get-workflow",
|
|
46
|
+
"update-workflow",
|
|
47
|
+
"patch-workflow",
|
|
48
|
+
"patch-workflow-node",
|
|
49
|
+
"delete-workflow",
|
|
50
|
+
"trigger-workflow",
|
|
51
|
+
"list-workflow-runs",
|
|
52
|
+
"get-workflow-run",
|
|
53
|
+
"retry-workflow-run",
|
|
54
|
+
"cancel-workflow-run",
|
|
55
|
+
"register-service",
|
|
56
|
+
"unregister-service",
|
|
57
|
+
"list-services",
|
|
58
|
+
"update-service-status",
|
|
59
|
+
"set-config",
|
|
60
|
+
"list-config",
|
|
61
|
+
"delete-config",
|
|
62
|
+
"credential-bindings",
|
|
63
|
+
"script-connections",
|
|
64
|
+
"model-catalog-refresh",
|
|
65
|
+
"model-catalog-overlay-upsert",
|
|
66
|
+
"update-repo",
|
|
67
|
+
"update-profile",
|
|
68
|
+
"context-history",
|
|
69
|
+
"context-diff",
|
|
70
|
+
"read-messages",
|
|
71
|
+
"post-message",
|
|
72
|
+
"slack-reply",
|
|
73
|
+
"slack-read",
|
|
74
|
+
"slack-upload-file",
|
|
75
|
+
"slack-download-file",
|
|
76
|
+
"slack-list-channels",
|
|
77
|
+
"slack-post",
|
|
78
|
+
"slack-start-thread",
|
|
79
|
+
"slack-create-channel",
|
|
80
|
+
"slack-invite-to-channel",
|
|
81
|
+
"slack-archive-channel",
|
|
82
|
+
"slack-delete",
|
|
83
|
+
"slack-update",
|
|
84
|
+
"create-channel",
|
|
85
|
+
"delete-channel",
|
|
86
|
+
"list-channels",
|
|
87
|
+
"register-agentmail-inbox",
|
|
88
|
+
"register-kapso-number",
|
|
89
|
+
"unregister-kapso-number",
|
|
90
|
+
"send-whatsapp-message",
|
|
91
|
+
"reply-whatsapp-message",
|
|
92
|
+
"tracker-status",
|
|
93
|
+
"get-oauth-access-token",
|
|
94
|
+
"tracker-link-task",
|
|
95
|
+
"tracker-unlink",
|
|
96
|
+
"tracker-sync-status",
|
|
97
|
+
"tracker-map-agent",
|
|
98
|
+
"list-prompt-templates",
|
|
99
|
+
"get-prompt-template",
|
|
100
|
+
"set-prompt-template",
|
|
101
|
+
"delete-prompt-template",
|
|
102
|
+
"preview-prompt-template",
|
|
103
|
+
"create_metric",
|
|
104
|
+
"request-human-input",
|
|
105
|
+
"cancel-approval-request",
|
|
106
|
+
"skill-create",
|
|
107
|
+
"skill-update",
|
|
108
|
+
"skill-delete",
|
|
109
|
+
"skill-get",
|
|
110
|
+
"skill-get-file",
|
|
111
|
+
"skill-list",
|
|
112
|
+
"skill-search",
|
|
113
|
+
"skill-install",
|
|
114
|
+
"skill-uninstall",
|
|
115
|
+
"skill-install-remote",
|
|
116
|
+
"skill-sync-remote",
|
|
117
|
+
"skill-publish",
|
|
118
|
+
"mcp-server-create",
|
|
119
|
+
"mcp-server-delete",
|
|
120
|
+
"mcp-server-get",
|
|
121
|
+
"mcp-server-install",
|
|
122
|
+
"mcp-server-list",
|
|
123
|
+
"mcp-server-uninstall",
|
|
124
|
+
"mcp-server-update",
|
|
125
|
+
"resolve-user",
|
|
126
|
+
"manage-user",
|
|
127
|
+
"app-get",
|
|
128
|
+
"app-list",
|
|
129
|
+
"app-patch",
|
|
130
|
+
"app-query",
|
|
131
|
+
"app-sync",
|
|
132
|
+
"app-upsert",
|
|
133
|
+
"app-history",
|
|
134
|
+
"app-diff",
|
|
135
|
+
"app-rollback",
|
|
136
|
+
"create_page",
|
|
137
|
+
"delete-page",
|
|
138
|
+
"kv-set",
|
|
139
|
+
"kv-delete",
|
|
140
|
+
"kv-incr",
|
|
141
|
+
"room-get",
|
|
142
|
+
"room-change",
|
|
143
|
+
"room-reset",
|
|
144
|
+
"room-decode",
|
|
145
|
+
"script-upsert",
|
|
146
|
+
"script-delete",
|
|
147
|
+
"script-apis",
|
|
148
|
+
"launch-script-run",
|
|
149
|
+
"get-script-run",
|
|
150
|
+
"list-script-runs",
|
|
151
|
+
"extension-delete",
|
|
152
|
+
"extension-enable",
|
|
153
|
+
"extension-disable",
|
|
154
|
+
"extension-activate-version",
|
|
155
|
+
"extension-catalog",
|
|
156
|
+
"extension-install",
|
|
157
|
+
"extension-list",
|
|
158
|
+
"swarm_x",
|
|
159
|
+
"cancel-task",
|
|
160
|
+
"inject-learning",
|
|
161
|
+
"get-metrics"
|
|
162
|
+
]);
|
|
163
|
+
ALL_TOOLS = new Set([...CORE_TOOLS, ...DEFERRED_TOOLS]);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export { CORE_TOOLS, ALL_TOOLS, init_tool_config };
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
setRuntimeModelCatalog
|
|
3
|
-
} from "./cli-m4excttz.js";
|
|
4
1
|
import {
|
|
5
2
|
buildModelsDevSeedRows,
|
|
6
3
|
loadModelsDevCache
|
|
7
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-ecfxwnyb.js";
|
|
8
5
|
import {
|
|
9
6
|
createLogEntry,
|
|
10
7
|
getActivePricingRow,
|
|
11
8
|
getDbClient,
|
|
12
9
|
init_db,
|
|
13
10
|
insertPricingRow
|
|
14
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-1cz0c18q.js";
|
|
12
|
+
import {
|
|
13
|
+
init_runtime_model_catalog,
|
|
14
|
+
setRuntimeModelCatalog
|
|
15
|
+
} from "./cli-jyy6pm2f.js";
|
|
15
16
|
import {
|
|
16
17
|
init_secret_scrubber,
|
|
17
18
|
scrubSecrets
|
|
18
|
-
} from "./cli-
|
|
19
|
+
} from "./cli-nexqx4ve.js";
|
|
19
20
|
|
|
20
21
|
// src/be/pricing-refresh.ts
|
|
21
22
|
init_secret_scrubber();
|
|
22
23
|
init_db();
|
|
23
24
|
|
|
24
25
|
// src/be/model-catalog-store.ts
|
|
26
|
+
init_runtime_model_catalog();
|
|
25
27
|
init_db();
|
|
26
28
|
|
|
27
29
|
// src/be/models-catalog.ts
|