@desplega.ai/agent-swarm 2.6.0 → 2.7.1
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 -0
- package/dist/{acp-adapter-dgfakfpw.js → acp-adapter-8dn5tq56.js} +6 -6
- package/dist/{actions-fbqma8aa.js → actions-3r6gw7dy.js} +18 -18
- package/dist/{amp-adapter-en0jy6hs.js → amp-adapter-wjtq413p.js} +3 -3
- package/dist/{anthropic-messages-txs190dd.js → anthropic-messages-n4cby1rz.js} +4 -4
- package/dist/{app-k8a5cgpp.js → app-d53yhykk.js} +3 -3
- package/dist/{assistant-a16433gr.js → assistant-ksrawj3k.js} +20 -20
- package/dist/{boot-reembed-6c1sjfnr.js → boot-reembed-fxfw17m2.js} +11 -3
- package/dist/{boot-reembed-f4nn561n.js → boot-reembed-k5y5xbj0.js} +15 -8
- package/dist/{boot-scrub-sweep-d4w9gajf.js → boot-scrub-sweep-se41j9fd.js} +3 -3
- package/dist/{boot-seeds-9bmkspyw.js → boot-seeds-r3kwwv8b.js} +4 -4
- package/dist/{claude-adapter-nys1kjxa.js → claude-adapter-ahmyf231.js} +8 -8
- package/dist/{claude-managed-adapter-55207973.js → claude-managed-adapter-5knamegc.js} +3 -3
- package/dist/{claude-managed-setup-3cm35gey.js → claude-managed-setup-mdc7dy6b.js} +3 -3
- package/dist/{claude-sdk-session-nw5yd8cp.js → claude-sdk-session-n5wen9zk.js} +8729 -8600
- package/dist/{cli-683y0b3a.js → cli-0dqtv2jg.js} +2 -2
- package/dist/{cli-a34pr3w1.js → cli-0tww7dnz.js} +2 -2
- package/dist/{cli-w2656ka1.js → cli-0w4e4v58.js} +7 -7
- package/dist/{cli-5sckpqcx.js → cli-2sjm3t4r.js} +1 -1
- package/dist/{cli-gf2850q7.js → cli-3cywb44q.js} +18 -1
- package/dist/{cli-8wkb09q5.js → cli-3k9jej0c.js} +2 -2
- package/dist/{cli-3aqd4jaa.js → cli-3v2cyqb8.js} +3 -3
- package/dist/{cli-emhjcj2y.js → cli-5qt9vzmq.js} +89 -20
- package/dist/{cli-abkm71vr.js → cli-5rp1w4cr.js} +1 -1
- package/dist/{cli-gf95q3bm.js → cli-6vwjsetx.js} +4 -4
- package/dist/{cli-k21gx5ht.js → cli-6w2yrrc0.js} +10 -10
- package/dist/{cli-m70bajzr.js → cli-75tdydgv.js} +1 -1
- package/dist/{cli-5rj83bam.js → cli-8feswf2v.js} +47 -36
- package/dist/{cli-sxgtf5fw.js → cli-8wd3mbyj.js} +1 -1
- package/dist/{cli-ca6banwz.js → cli-9csfthbw.js} +10 -8
- package/dist/{cli-dqygeeh5.js → cli-b41p764a.js} +31 -3
- package/dist/{cli-m5a9m0ak.js → cli-c1t533hh.js} +3 -3
- package/dist/{cli-2sjhpsns.js → cli-c28jxpcv.js} +1 -1
- package/dist/{cli-bqztfyve.js → cli-cb50g9cd.js} +1 -1
- package/dist/{cli-ag2yrnt5.js → cli-d8gaphtr.js} +2 -2
- package/dist/{cli-9abdgn5t.js → cli-dgtfysne.js} +3 -3
- package/dist/{cli-nq677csy.js → cli-dscnhn18.js} +1 -1
- package/dist/{cli-3fwqy71j.js → cli-dv11pgpv.js} +39 -32
- package/dist/{cli-v49fkghp.js → cli-ekptgk2m.js} +6 -6
- package/dist/{cli-c2habvsf.js → cli-f3mzy662.js} +17 -17
- package/dist/{cli-zqne1qcj.js → cli-fk7k8s9x.js} +2 -2
- package/dist/{cli-1tem6ns9.js → cli-gt4h8cxw.js} +3 -2
- package/dist/{cli-vbhgkw9h.js → cli-h3e7bhvn.js} +3 -3
- package/dist/{cli-ffvsj2qw.js → cli-hkxqdmnb.js} +3 -3
- package/dist/{cli-a2rr0fmg.js → cli-hpkvgdad.js} +7 -4
- package/dist/{cli-art7c1zh.js → cli-hq2v4rr5.js} +37 -9
- package/dist/{cli-sqma6vw1.js → cli-k1zb7raw.js} +5 -5
- package/dist/{cli-4rvr7zfx.js → cli-k4awgvzm.js} +5 -0
- package/dist/{cli-3ndmpxxv.js → cli-k7d3hvya.js} +2 -2
- package/dist/{cli-3gfvmzht.js → cli-kbtdftbw.js} +74 -26
- package/dist/{cli-hfeb68z4.js → cli-kj69b9tw.js} +34 -6
- package/dist/{cli-az25fn5f.js → cli-kk9jy4nm.js} +2 -2
- package/dist/{cli-39aet655.js → cli-m52t4cta.js} +1 -1
- package/dist/{cli-cz37jqss.js → cli-mdadewqp.js} +5 -5
- package/dist/{cli-esakngh8.js → cli-nf6k60sn.js} +1 -1
- package/dist/{cli-j6rktc91.js → cli-nzdf09js.js} +1 -1
- package/dist/{cli-rr7zx19j.js → cli-prcyzecg.js} +12 -12
- package/dist/{cli-4hxrf0p4.js → cli-pzafyqtk.js} +393 -62
- package/dist/{cli-g8ka5j4j.js → cli-qvaa1gjp.js} +173 -52
- package/dist/{cli-d2dpf95n.js → cli-rg4b2g6j.js} +1 -1
- package/dist/{cli-kf4jree9.js → cli-rm66vqdz.js} +1 -1
- package/dist/{cli-4rf0f5vg.js → cli-s504c3w7.js} +5 -3
- package/dist/{cli-nn6vx2mq.js → cli-swkx9jm2.js} +7 -5
- package/dist/{cli-g20jjwt4.js → cli-thsaq4pd.js} +16 -16
- package/dist/{cli-aj8djyqt.js → cli-twjnyvs8.js} +2 -2
- package/dist/{cli-03gg9pd1.js → cli-typdpe8g.js} +4 -4
- package/dist/{cli-mtnj4fwa.js → cli-vg8pwmsd.js} +6 -6
- package/dist/{cli-gnsb1zxa.js → cli-vhpckzvp.js} +1 -1
- package/dist/{cli-7enjwya9.js → cli-vz78s5wm.js} +1 -1
- package/dist/{cli-dv97kdzv.js → cli-wdxgsdz5.js} +2 -2
- package/dist/{cli-7a6p4e65.js → cli-wtjg6je3.js} +1 -1
- package/dist/{cli-6y51ryva.js → cli-x3cngb1h.js} +44 -12
- package/dist/{cli-n7asmce6.js → cli-xbz6mcg4.js} +3 -3
- package/dist/{cli-24j1jeeb.js → cli-y4tdxsqb.js} +3 -3
- package/dist/{cli-mvjz5an3.js → cli-yqrsp3ny.js} +7 -7
- package/dist/cli.js +31 -21
- package/dist/{codex-adapter-d95q4qsn.js → codex-adapter-7wepzq15.js} +6 -6
- package/dist/{codex-hook-brpnycn5.js → codex-hook-pbdh4xhx.js} +2 -2
- package/dist/{codex-session-runner-gdwd8h0c.js → codex-session-runner-02sb49e4.js} +6 -6
- package/dist/{commands-jqmgk54b.js → commands-3rcspxct.js} +2 -2
- package/dist/{controller-z3jq589f.js → controller-8ar4avd6.js} +3 -3
- package/dist/{controllers-connect-r2za39ef.js → controllers-connect-ajvh9h0v.js} +19 -19
- package/dist/{cursor-adapter-4mr4jgkw.js → cursor-adapter-gd0sa7bh.js} +1 -1
- package/dist/{db-w36wwb5g.js → db-dv9j7ts5.js} +2 -2
- package/dist/{db-ppv2tze7.js → db-z26vgdvj.js} +3 -3
- package/dist/{dispatcher-pv5h77vf.js → dispatcher-8m0htjq8.js} +17 -17
- package/dist/{dsh-adapter-d4pdpb3r.js → dsh-adapter-y8gyk130.js} +1 -1
- package/dist/{e2b-fn3zacvt.js → e2b-74vg9b7e.js} +1 -1
- package/dist/{e2b-222hsajc.js → e2b-jyay8wzn.js} +1 -1
- package/dist/{easter-egg-3d-4sp4dvmc.js → easter-egg-3d-28f880xx.js} +1 -1
- package/dist/{execute-jev839y1.js → execute-9seb79vh.js} +1 -1
- package/dist/{external-channel-y6nkzhnn.js → external-channel-smz7jyth.js} +2 -2
- package/dist/{getMachineId-bsd-brn0xym3.js → getMachineId-bsd-whfre6gr.js} +3 -3
- package/dist/{getMachineId-darwin-t339sfxm.js → getMachineId-darwin-5zjynb19.js} +3 -3
- package/dist/{getMachineId-linux-5eq95d8b.js → getMachineId-linux-8mksrrsq.js} +3 -3
- package/dist/{getMachineId-unsupported-qavrtc7j.js → getMachineId-unsupported-fxtqsdt2.js} +3 -3
- package/dist/{getMachineId-win-q7fe1wx7.js → getMachineId-win-nzfmz857.js} +3 -3
- package/dist/{grok-adapter-t08b9ntm.js → grok-adapter-z0nnvtbn.js} +7 -7
- package/dist/handlers-pspryh6g.js +41 -0
- package/dist/{heartbeat-vn31xwdk.js → heartbeat-f928aqyp.js} +20 -20
- package/dist/{hook-cpjs8q51.js → hook-d7c605r4.js} +7 -7
- package/dist/{hook-6d0zbvvt.js → hook-q9hv5xf9.js} +5 -5
- package/dist/{http-9c6medda.js → http-q6j4k989.js} +1000 -251
- package/dist/{index-k0yt1tvq.js → index-5nb266jr.js} +17 -17
- package/dist/{index-ysd45kgc.js → index-8fxt5eah.js} +10 -10
- package/dist/{index-zgvqzjsw.js → index-cekzwhez.js} +5 -5
- package/dist/{index-38t35h0n.js → index-ch0c1xff.js} +17 -17
- package/dist/{index-pkma1yf8.js → index-ebnjhxh1.js} +1 -1
- package/dist/{index-yqgbfgaj.js → index-ed8dy8rn.js} +20 -20
- package/dist/{index-qhjf2htm.js → index-ejqdkkqx.js} +262 -96
- package/dist/{index-dr94zbnh.js → index-farm1zsn.js} +32661 -29443
- package/dist/{index-g6k9tctj.js → index-yn1yxg85.js} +1 -1
- package/dist/{keepalive-em0117bp.js → keepalive-zzc3hks1.js} +3 -3
- package/dist/lead-c0pjcaw4.js +79 -0
- package/dist/{maintenance-kbme3qy9.js → maintenance-kqsxzpzx.js} +1 -1
- package/dist/{oauth-refresh-sweep-xysj4yse.js → oauth-refresh-sweep-7qt0g55z.js} +8 -3
- package/dist/{onboard-p6q0vz97.js → onboard-k7x13fqg.js} +121 -8
- package/dist/{opencode-adapter-esv3k9yn.js → opencode-adapter-tqvrtter.js} +5 -5
- package/dist/{otel-impl-54qhqh1z.js → otel-impl-sqkf6k3b.js} +97 -97
- package/dist/{pi-mono-adapter-mymbwhj0.js → pi-mono-adapter-m2qnafxm.js} +89 -14
- package/dist/{pricing-refresh-yb75wv33.js → pricing-refresh-wkpwhgvs.js} +3 -3
- package/dist/{rbac-roles-dexhc9x8.js → rbac-roles-dpn0c0wj.js} +7 -4
- package/dist/{rbac-roles-1vp2mw4p.js → rbac-roles-wk7xd6a6.js} +2 -2
- package/dist/{render-v2-tjay5hhf.js → render-v2-ex2m4g2k.js} +3 -3
- package/dist/{resume-8ayf37g5.js → resume-725g9b0b.js} +7 -7
- package/dist/{runtime-hqe5cqcd.js → runtime-kajas15g.js} +1 -1
- package/dist/{session-access-fdhp987s.js → session-access-0j2ezjje.js} +8 -4
- package/dist/{session-source-backfill-qgtc86z1.js → session-source-backfill-62202awe.js} +2 -2
- package/dist/{setup-4rrmqcq3.js → setup-9sj11ax6.js} +1 -1
- package/dist/{virtual-modules-52km00d6.js → virtual-modules-c6fcq6zr.js} +2 -2
- package/dist/{work-objects-p28fgd70.js → work-objects-0y07495y.js} +20 -20
- package/dist/worker-d4q9sqbc.js +79 -0
- package/openapi.json +1536 -407
- package/package.json +7 -5
- package/src/be/automation-preflight.ts +2 -0
- package/src/be/connector-codes.ts +65 -22
- package/src/be/db/api-keys.ts +9 -0
- package/src/be/db/workflow-runs.ts +36 -5
- package/src/be/db.ts +80 -22
- package/src/be/memory/boot-reembed.ts +4 -1
- package/src/be/memory/constants.ts +6 -0
- package/src/be/memory/embedding-recovery.ts +48 -0
- package/src/be/memory/index-content.ts +5 -2
- package/src/be/memory/providers/openai-embedding.ts +65 -14
- package/src/be/memory/task-learning.ts +257 -0
- package/src/be/memory/types.ts +13 -2
- package/src/be/migrations/245_script_executor.sql +3 -0
- package/src/be/migrations/246_connector_code_kind.sql +11 -0
- package/src/be/oauth-refresh-sweep.ts +2 -1
- package/src/be/onboarding.ts +125 -15
- package/src/be/rbac-roles.ts +4 -1
- package/src/be/scripts/boot-reembed.ts +2 -0
- package/src/be/scripts/db.ts +14 -4
- package/src/be/scripts/embeddings.ts +4 -2
- package/src/be/scripts/run-saved.ts +1 -0
- package/src/be/scripts/typecheck.ts +9 -3
- package/src/be/seed/agent-fs-provision.ts +75 -14
- package/src/be/seed-skills/index.ts +7 -0
- package/src/be/swarm-config-guard.ts +3 -0
- package/src/cli.tsx +9 -0
- package/src/comb/config.ts +6 -1
- package/src/commands/onboard/agent-fs-version.ts +5 -0
- package/src/commands/onboard/compose-generator.ts +117 -4
- package/src/commands/onboard/env-generator.ts +9 -0
- package/src/commands/onboard/tei-image.ts +12 -0
- package/src/commands/onboard/types.ts +7 -0
- package/src/commands/onboard.tsx +11 -1
- package/src/commands/provider-credentials.ts +2 -1
- package/src/commands/runner.ts +14 -1
- package/src/heartbeat/heartbeat.ts +14 -1
- package/src/heartbeat/script-runner-probe.ts +47 -0
- package/src/http/agentfs-proxy.ts +369 -0
- package/src/http/all-routes.ts +1 -0
- package/src/http/api-keys.ts +24 -9
- package/src/http/codex-oauth-device.ts +8 -1
- package/src/http/fs.ts +64 -10
- package/src/http/idempotency-key.ts +1 -1
- package/src/http/inbox-state.ts +27 -1
- package/src/http/index.ts +7 -4
- package/src/http/memory.ts +7 -4
- package/src/http/onboarding.ts +139 -11
- package/src/http/pages-public.ts +38 -5
- package/src/http/scripts.ts +27 -0
- package/src/http/session-access.ts +24 -0
- package/src/http/sessions.ts +10 -6
- package/src/http/tasks.ts +85 -11
- package/src/http/telemetry-ui.ts +1 -1
- package/src/http/user-roles.ts +4 -1
- package/src/http/users.ts +272 -3
- package/src/http/utils.ts +22 -3
- package/src/http/workflows.ts +10 -0
- package/src/http/x.ts +5 -0
- package/src/prompts/base-prompt.ts +45 -10
- package/src/prompts/session-templates.ts +43 -5
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/codex-adapter.ts +6 -1
- package/src/providers/cursor-adapter.ts +1 -1
- package/src/providers/dsh-adapter.ts +1 -1
- package/src/providers/pi-mono-adapter.ts +99 -14
- package/src/rbac/legacy-policy.ts +1 -0
- package/src/rbac/permissions.ts +4 -0
- package/src/scheduler/scheduler.ts +2 -1
- package/src/scripts-runtime/eval-harness.ts +8 -1
- package/src/scripts-runtime/executors/native.ts +22 -16
- package/src/scripts-runtime/executors/quickjs-prelude.ts +103 -1
- package/src/scripts-runtime/executors/quickjs-runner.ts +2 -1
- package/src/scripts-runtime/executors/quickjs.ts +7 -0
- package/src/scripts-runtime/executors/registry.ts +32 -0
- package/src/scripts-runtime/executors/types.ts +7 -0
- package/src/scripts-runtime/host-validated-args.ts +133 -0
- package/src/scripts-runtime/loader.ts +30 -3
- package/src/scripts-runtime/swarm-sdk.ts +9 -2
- package/src/scripts-runtime/types/stdlib.d.ts +9 -1
- package/src/scripts-runtime/types/swarm-sdk.d.ts +9 -1
- package/src/tests/agent-fs-provision-seeder.test.ts +261 -92
- package/src/tests/agentfs-proxy.test.ts +1106 -0
- package/src/tests/api-key-status-by-suffix.test.ts +242 -0
- package/src/tests/base-prompt.test.ts +139 -4
- package/src/tests/codex-adapter.test.ts +46 -8
- package/src/tests/codex-oauth-device.test.ts +12 -1
- package/src/tests/comb-config-guard.test.ts +20 -0
- package/src/tests/comb-links.test.ts +79 -1
- package/src/tests/comb-status.test.ts +44 -0
- package/src/tests/community-linear-delivery-loop.test.ts +2099 -0
- package/src/tests/credential-check.test.ts +4 -2
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/docs-index.test.ts +135 -0
- package/src/tests/dsh-adapter.test.ts +1 -1
- package/src/tests/fetch-resolved-env.test.ts +16 -2
- package/src/tests/fixtures/onboard/baseline-states.ts +68 -0
- package/src/tests/fixtures/onboard/content.compose.yml.txt +190 -0
- package/src/tests/fixtures/onboard/content.env.txt +29 -0
- package/src/tests/fixtures/onboard/dev.compose.yml.txt +155 -0
- package/src/tests/fixtures/onboard/dev.env.txt +28 -0
- package/src/tests/fixtures/onboard/full-all.compose.yml.txt +582 -0
- package/src/tests/fixtures/onboard/full-all.env.txt +59 -0
- package/src/tests/fixtures/onboard/full.compose.yml.txt +435 -0
- package/src/tests/fixtures/onboard/full.env.txt +36 -0
- package/src/tests/fixtures/onboard/research.compose.yml.txt +155 -0
- package/src/tests/fixtures/onboard/research.env.txt +28 -0
- package/src/tests/fixtures/onboard/solo.compose.yml.txt +85 -0
- package/src/tests/fixtures/onboard/solo.env.txt +26 -0
- package/src/tests/heartbeat-checklist.test.ts +89 -0
- package/src/tests/heartbeat-script-runner-probe.test.ts +83 -0
- package/src/tests/http-log-scrubbing.test.ts +34 -1
- package/src/tests/http-task-write-ownership.test.ts +5 -1
- package/src/tests/invites-http.test.ts +464 -0
- package/src/tests/memory-embedding-input-cap.test.ts +122 -1
- package/src/tests/memory-embedding-recovery.test.ts +137 -0
- package/src/tests/oauth-refresh-sweep.test.ts +34 -1
- package/src/tests/onboard-compose.test.ts +162 -0
- package/src/tests/onboard-env.test.ts +24 -0
- package/src/tests/onboard-non-interactive.test.ts +29 -0
- package/src/tests/onboard-tei-image.test.ts +36 -0
- package/src/tests/onboarding.test.ts +451 -4
- package/src/tests/openai-embedding-provider.test.ts +105 -2
- package/src/tests/opencode-adapter.test.ts +2 -1
- package/src/tests/pages-frame-ancestors.test.ts +162 -0
- package/src/tests/pi-codemode.test.ts +2 -1
- package/src/tests/pi-mono-adapter.test.ts +54 -0
- package/src/tests/pi-mono-session-cost-on-abort.test.ts +270 -0
- package/src/tests/pi-native-mcp.test.ts +13 -1
- package/src/tests/pi-tool-exposure.test.ts +8 -8
- package/src/tests/preload-env.test.ts +4 -0
- package/src/tests/preload.ts +4 -0
- package/src/tests/probe-tool-schema-tokens.test.ts +144 -0
- package/src/tests/prompt-template-session.test.ts +20 -3
- package/src/tests/rbac-admission-e2e.test.ts +22 -6
- package/src/tests/rbac-admission.test.ts +342 -4
- package/src/tests/rbac-engine.test.ts +1 -0
- package/src/tests/rbac-roles.test.ts +9 -1
- package/src/tests/request-composition-derive.test.ts +329 -0
- package/src/tests/script-connections.test.ts +2 -0
- package/src/tests/script-executor-conformance.test.ts +36 -1
- package/src/tests/script-executor-quickjs-pool.test.ts +50 -0
- package/src/tests/script-executor-quickjs.test.ts +140 -0
- package/src/tests/script-host-validated-args-native.test.ts +196 -0
- package/src/tests/script-per-script-executor.test.ts +415 -0
- package/src/tests/scripts-external-api.test.ts +45 -0
- package/src/tests/sdk-allowlist.test.ts +3 -2
- package/src/tests/self-improvement.test.ts +4 -4
- package/src/tests/send-task-requester-gate.test.ts +64 -3
- package/src/tests/sessions-move.test.ts +39 -1
- package/src/tests/store-progress-learning.test.ts +381 -0
- package/src/tests/ui-logs-parser.test.ts +180 -0
- package/src/tests/whoami-route.test.ts +41 -0
- package/src/tests/workflow-engine-v2.test.ts +116 -1
- package/src/tests/workflow-mcp-trigger-schema.test.ts +209 -0
- package/src/tests/workflow-run-finished-event.test.ts +263 -0
- package/src/tests/workflow-swarm-script.test.ts +34 -0
- package/src/tools/inject-learning.ts +1 -1
- package/src/tools/memory-edit.ts +1 -1
- package/src/tools/memory-search.ts +1 -1
- package/src/tools/script-common.ts +1 -0
- package/src/tools/script-run.ts +7 -0
- package/src/tools/script-upsert.ts +7 -0
- package/src/tools/store-progress.ts +71 -1
- package/src/tools/utils.ts +12 -1
- package/src/tools/workflows/trigger-workflow.ts +104 -10
- package/src/types.ts +12 -1
- package/src/utils/constants.ts +39 -0
- package/src/utils/credentials.ts +5 -2
- package/src/utils/task-attachment-links.ts +15 -3
- package/src/workflows/engine.ts +18 -16
- package/src/workflows/executors/swarm-script.ts +5 -0
- package/src/workflows/foreach-driver.ts +5 -11
- package/src/workflows/node-timeout.ts +30 -0
- package/templates/community/linear-delivery-loop/PLAYBOOK.md +323 -0
- package/templates/community/linear-delivery-loop/README.md +38 -0
- package/templates/community/linear-delivery-loop/config.example.json +31 -0
- package/templates/community/linear-delivery-loop/lead-prompt.md +34 -0
- package/templates/community/linear-delivery-loop/schedule.json +10 -0
- package/templates/community/linear-delivery-loop/scripts/linear-delivery-setup.ts +148 -0
- package/templates/community/linear-delivery-loop/scripts/linear-delivery-tick.ts +1781 -0
- package/templates/skills/swarm-docs/config.json +14 -0
- package/templates/skills/swarm-docs/content.md +144 -0
- package/dist/handlers-eqsnmv95.js +0 -41
- package/dist/lead-23e7z59t.js +0 -79
- package/dist/worker-e3w7vye1.js +0 -79
- package/dist/{azure-openai-responses-9kfwhmn7.js → azure-openai-responses-43asa23s.js} +0 -0
- package/dist/{node-vxx896fa.js → node-t28cc56b.js} +0 -0
- package/dist/{openai-codex-responses-79s8xnbh.js → openai-codex-responses-jhr3sjtm.js} +3 -3
- package/dist/{openai-completions-tdbyts0x.js → openai-completions-gs6yn37k.js} +3 -3
- /package/dist/{openai-responses-dm3t5vqp.js → openai-responses-jqm9vwwk.js} +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unforgeable host-only capability symbol set on `RunScriptInput` strictly at
|
|
3
|
+
* the host boundary (`POST /api/x/script/{endpointId}`) after `validateJsonSchema`
|
|
4
|
+
* succeeds. Because `Symbol` keys cannot be produced by JSON deserialization,
|
|
5
|
+
* callers that forward request-shaped JSON fields into `RunScriptInput` can
|
|
6
|
+
* never opt out of `argsSchema` validation.
|
|
7
|
+
*/
|
|
8
|
+
export const HOST_VALIDATED_ARGS = Symbol("swarm.hostValidatedArgs");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Checks whether a runtime `argsSchema` (Zod v4 / `zod/mini` schema) and its
|
|
12
|
+
* candidate `value` are semantically equivalent to the host-side JSON Schema
|
|
13
|
+
* validation performed by `validateJsonSchema` in `src/http/x.ts`.
|
|
14
|
+
*
|
|
15
|
+
* Returns `true` only when `schema.parse(value)` is guaranteed to succeed and
|
|
16
|
+
* return a value deeply identical to `value` without running any defaults,
|
|
17
|
+
* coercions, transforms, refinements, or unknown-key stripping.
|
|
18
|
+
*/
|
|
19
|
+
export function isHostValidationEquivalent(schema: unknown, value: unknown): boolean {
|
|
20
|
+
if (!schema || typeof schema !== "object") return false;
|
|
21
|
+
const zodInternal = (schema as { _zod?: { def?: Record<string, unknown>; values?: unknown } })
|
|
22
|
+
._zod;
|
|
23
|
+
const def = zodInternal?.def;
|
|
24
|
+
if (!def || typeof def !== "object") return false;
|
|
25
|
+
|
|
26
|
+
if (def.coerce) return false;
|
|
27
|
+
if (Array.isArray(def.checks) && def.checks.length > 0) return false;
|
|
28
|
+
|
|
29
|
+
switch (def.type) {
|
|
30
|
+
case "string":
|
|
31
|
+
return typeof value === "string" && !def.format;
|
|
32
|
+
case "number":
|
|
33
|
+
return typeof value === "number" && Number.isFinite(value) && !def.format;
|
|
34
|
+
case "boolean":
|
|
35
|
+
return typeof value === "boolean";
|
|
36
|
+
case "literal": {
|
|
37
|
+
const rawValues = def.values;
|
|
38
|
+
const values = Array.isArray(rawValues)
|
|
39
|
+
? rawValues
|
|
40
|
+
: rawValues instanceof Set
|
|
41
|
+
? Array.from(rawValues)
|
|
42
|
+
: [];
|
|
43
|
+
return (
|
|
44
|
+
values.length > 0 &&
|
|
45
|
+
values.some((v) => v === value && typeof v !== "bigint" && typeof v !== "symbol")
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
case "enum": {
|
|
49
|
+
if (zodInternal?.values instanceof Set) {
|
|
50
|
+
return zodInternal.values.has(value);
|
|
51
|
+
}
|
|
52
|
+
const entriesObj =
|
|
53
|
+
def.entries && typeof def.entries === "object"
|
|
54
|
+
? (def.entries as Record<string, unknown>)
|
|
55
|
+
: null;
|
|
56
|
+
if (!entriesObj) return false;
|
|
57
|
+
const entries = Object.values(entriesObj).filter(
|
|
58
|
+
(v) => !(typeof v === "string" && typeof entriesObj[v] === "number"),
|
|
59
|
+
);
|
|
60
|
+
return entries.length > 0 && entries.includes(value);
|
|
61
|
+
}
|
|
62
|
+
case "optional":
|
|
63
|
+
return value === undefined
|
|
64
|
+
? isStructuralSchemaNode(def.innerType)
|
|
65
|
+
: isHostValidationEquivalent(def.innerType, value);
|
|
66
|
+
case "nullable":
|
|
67
|
+
return value === null
|
|
68
|
+
? isStructuralSchemaNode(def.innerType)
|
|
69
|
+
: isHostValidationEquivalent(def.innerType, value);
|
|
70
|
+
case "array":
|
|
71
|
+
return (
|
|
72
|
+
Array.isArray(value) &&
|
|
73
|
+
isStructuralSchemaNode(def.element) &&
|
|
74
|
+
value.every((item) => isHostValidationEquivalent(def.element, item))
|
|
75
|
+
);
|
|
76
|
+
case "object": {
|
|
77
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
78
|
+
const rawShape = typeof def.shape === "function" ? def.shape() : def.shape;
|
|
79
|
+
if (!rawShape || typeof rawShape !== "object") return false;
|
|
80
|
+
const shape = rawShape as Record<string, unknown>;
|
|
81
|
+
const obj = value as Record<string, unknown>;
|
|
82
|
+
|
|
83
|
+
// If `value` carries extra keys not declared in `shape`, let `.parse()`
|
|
84
|
+
// handle key stripping (`z.object`), passthrough (`z.looseObject`), or
|
|
85
|
+
// rejection (`z.strictObject`).
|
|
86
|
+
for (const key of Object.keys(obj)) {
|
|
87
|
+
if (!Object.hasOwn(shape, key)) return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const [key, propSchema] of Object.entries(shape)) {
|
|
91
|
+
// Retain Zod's property lookup semantics: if `key` is absent as an own
|
|
92
|
+
// property on `obj` but resolves via `Object.prototype` (e.g. `constructor`,
|
|
93
|
+
// `toString`), fall back to `.parse()` so Zod validates/rejects the
|
|
94
|
+
// inherited prototype value identically to `main`.
|
|
95
|
+
if (!Object.hasOwn(obj, key) && key in obj) return false;
|
|
96
|
+
const propValue = obj[key];
|
|
97
|
+
if (!isHostValidationEquivalent(propSchema, propValue)) return false;
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
default:
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function isStructuralSchemaNode(schema: unknown): boolean {
|
|
107
|
+
if (!schema || typeof schema !== "object") return false;
|
|
108
|
+
const def = (schema as { _zod?: { def?: Record<string, unknown> } })._zod?.def;
|
|
109
|
+
if (!def || typeof def !== "object") return false;
|
|
110
|
+
if (def.coerce) return false;
|
|
111
|
+
if (Array.isArray(def.checks) && def.checks.length > 0) return false;
|
|
112
|
+
switch (def.type) {
|
|
113
|
+
case "string":
|
|
114
|
+
case "number":
|
|
115
|
+
return !def.format;
|
|
116
|
+
case "boolean":
|
|
117
|
+
case "literal":
|
|
118
|
+
case "enum":
|
|
119
|
+
return true;
|
|
120
|
+
case "optional":
|
|
121
|
+
case "nullable":
|
|
122
|
+
return isStructuralSchemaNode(def.innerType);
|
|
123
|
+
case "array":
|
|
124
|
+
return isStructuralSchemaNode(def.element);
|
|
125
|
+
case "object": {
|
|
126
|
+
const rawShape = typeof def.shape === "function" ? def.shape() : def.shape;
|
|
127
|
+
if (!rawShape || typeof rawShape !== "object") return false;
|
|
128
|
+
return Object.values(rawShape as Record<string, unknown>).every(isStructuralSchemaNode);
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -6,16 +6,18 @@ import { createValueScrubber, scrubObject, scrubSecrets } from "../utils/secret-
|
|
|
6
6
|
import type { ScriptApiConnectionDescriptor, ScriptMcpConnectionDescriptor } from "./api-types";
|
|
7
7
|
import type { FailedCredentialBinding } from "./credential-broker";
|
|
8
8
|
import { buildEgressSecrets } from "./egress-secrets";
|
|
9
|
-
import {
|
|
9
|
+
import { isExecutorAllowedByDeployment, resolveScriptExecutor } from "./executors/registry";
|
|
10
10
|
import {
|
|
11
11
|
DEFAULT_SCRIPT_RESOURCES,
|
|
12
12
|
type EgressSecretEntry,
|
|
13
13
|
type ExecutorOutput,
|
|
14
14
|
type ScriptAgentFsDescriptor,
|
|
15
|
+
type ScriptExecutorName,
|
|
15
16
|
type ScriptFsMode,
|
|
16
17
|
type ScriptResourcePolicy,
|
|
17
18
|
type SwarmConfigPayload,
|
|
18
19
|
} from "./executors/types";
|
|
20
|
+
import { HOST_VALIDATED_ARGS } from "./host-validated-args";
|
|
19
21
|
import { validateScriptImports } from "./import-allowlist";
|
|
20
22
|
|
|
21
23
|
/**
|
|
@@ -38,7 +40,19 @@ const CAPACITY_EXCEEDED_RETRY_DELAYS_MS = [200, 750];
|
|
|
38
40
|
export type RunScriptInput = {
|
|
39
41
|
source: string;
|
|
40
42
|
args?: unknown;
|
|
43
|
+
/**
|
|
44
|
+
* Unforgeable host-only capability symbol set only when the host has already
|
|
45
|
+
* validated `args` against the script's `argsJsonSchema` (e.g. `POST /api/x/script/{endpointId}`).
|
|
46
|
+
* Keyed by a `Symbol` so request-shaped JSON inputs forwarded into `RunScriptInput`
|
|
47
|
+
* can never opt out of `argsSchema` validation.
|
|
48
|
+
*/
|
|
49
|
+
[HOST_VALIDATED_ARGS]?: boolean;
|
|
41
50
|
fsMode?: ScriptFsMode;
|
|
51
|
+
/**
|
|
52
|
+
* Optional per-script executor override ("native" | "quickjs"). When null or
|
|
53
|
+
* undefined, `getScriptExecutor` falls back to `SCRIPT_EXECUTOR ?? "native"`.
|
|
54
|
+
*/
|
|
55
|
+
executor?: ScriptExecutorName | null;
|
|
42
56
|
agentId: string;
|
|
43
57
|
/**
|
|
44
58
|
* Bearer for the run's `ctx.swarm` SDK calls. Api-side callers pass a
|
|
@@ -118,6 +132,18 @@ export async function runScript(input: RunScriptInput): Promise<RunScriptOutput>
|
|
|
118
132
|
};
|
|
119
133
|
}
|
|
120
134
|
|
|
135
|
+
if (!isExecutorAllowedByDeployment(input.executor)) {
|
|
136
|
+
return {
|
|
137
|
+
result: undefined,
|
|
138
|
+
stdout: "",
|
|
139
|
+
stderr: 'Executor "native" is not permitted when deployment SCRIPT_EXECUTOR="quickjs"',
|
|
140
|
+
truncated: { stdout: false, stderr: false },
|
|
141
|
+
durationMs: 0,
|
|
142
|
+
exitCode: 1,
|
|
143
|
+
error: "executor_error",
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
121
147
|
// The global scrubber skips values under its length floor, so this run's own
|
|
122
148
|
// secret config is redacted here at any length before the global pass. Built
|
|
123
149
|
// before the import check: its diagnostic quotes source, which can hold a value.
|
|
@@ -150,6 +176,7 @@ export async function runScript(input: RunScriptInput): Promise<RunScriptOutput>
|
|
|
150
176
|
const executorInput = {
|
|
151
177
|
source: input.source,
|
|
152
178
|
args: input.args ?? null,
|
|
179
|
+
...(input[HOST_VALIDATED_ARGS] === true ? { hostValidatedArgs: true } : {}),
|
|
153
180
|
configPayload,
|
|
154
181
|
resources,
|
|
155
182
|
fsMode: input.fsMode ?? "none",
|
|
@@ -157,11 +184,11 @@ export async function runScript(input: RunScriptInput): Promise<RunScriptOutput>
|
|
|
157
184
|
signal: input.signal,
|
|
158
185
|
};
|
|
159
186
|
|
|
160
|
-
let output = await
|
|
187
|
+
let output = await resolveScriptExecutor(input.executor).run(executorInput);
|
|
161
188
|
for (const delayMs of CAPACITY_EXCEEDED_RETRY_DELAYS_MS) {
|
|
162
189
|
if (output.error !== "capacity_exceeded" || input.signal?.aborted) break;
|
|
163
190
|
await Bun.sleep(delayMs);
|
|
164
|
-
output = await
|
|
191
|
+
output = await resolveScriptExecutor(input.executor).run(executorInput);
|
|
165
192
|
}
|
|
166
193
|
|
|
167
194
|
return {
|
|
@@ -8,6 +8,7 @@ type BridgeRequest = {
|
|
|
8
8
|
method: string;
|
|
9
9
|
path: string;
|
|
10
10
|
body?: unknown;
|
|
11
|
+
headers?: Record<string, string>;
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
function headers(config: SwarmConfig): Record<string, string> {
|
|
@@ -362,10 +363,16 @@ function bridgeRequestFor(name: string, args: unknown): BridgeRequest | null {
|
|
|
362
363
|
case "workflow_trigger": {
|
|
363
364
|
const id = typeof body.id === "string" ? body.id : undefined;
|
|
364
365
|
if (!id) throw new Error("workflow_trigger requires string `id`");
|
|
366
|
+
const path = `/api/workflows/${encodeURIComponent(id)}/trigger`;
|
|
365
367
|
return {
|
|
366
368
|
method: "POST",
|
|
367
|
-
path:
|
|
369
|
+
path: body.wait === false ? `${path}?wait=false` : path,
|
|
368
370
|
body: body.triggerData ?? {},
|
|
371
|
+
// The route's own Idempotency-Key: recorded in the run's transaction,
|
|
372
|
+
// so a retry after a kill replays the run instead of starting another.
|
|
373
|
+
...(typeof body.idempotencyKey === "string"
|
|
374
|
+
? { headers: { "Idempotency-Key": body.idempotencyKey } }
|
|
375
|
+
: {}),
|
|
369
376
|
};
|
|
370
377
|
}
|
|
371
378
|
case "workflow_retryRun": {
|
|
@@ -491,7 +498,7 @@ async function callBridgeApi(
|
|
|
491
498
|
|
|
492
499
|
const res = await fetch(`${baseUrl}${request.path}`, {
|
|
493
500
|
method: request.method,
|
|
494
|
-
headers: headers(config),
|
|
501
|
+
headers: { ...headers(config), ...request.headers },
|
|
495
502
|
body: request.body === undefined ? undefined : JSON.stringify(request.body),
|
|
496
503
|
});
|
|
497
504
|
const data = await readScriptSdkJsonResponse(res, `ctx.swarm.${name}`);
|
|
@@ -26,6 +26,7 @@ declare module "swarm-sdk" {
|
|
|
26
26
|
| { [key: string]: JsonValue };
|
|
27
27
|
export type ScriptScope = "agent" | "global";
|
|
28
28
|
export type ScriptFsMode = "none" | "workspace-rw";
|
|
29
|
+
export type ScriptExecutorName = "native" | "quickjs";
|
|
29
30
|
export type ScriptApiRawOptions = { raw: true };
|
|
30
31
|
export type ScriptApiDefaultOptions = { raw?: false };
|
|
31
32
|
export type RoutingReason =
|
|
@@ -304,6 +305,7 @@ declare module "swarm-sdk" {
|
|
|
304
305
|
intent?: string;
|
|
305
306
|
scope?: ScriptScope;
|
|
306
307
|
fsMode?: ScriptFsMode;
|
|
308
|
+
executor?: ScriptExecutorName | null;
|
|
307
309
|
idempotencyKey?: string;
|
|
308
310
|
}): Promise<unknown>;
|
|
309
311
|
// --- swarm / agent ---
|
|
@@ -535,7 +537,12 @@ declare module "swarm-sdk" {
|
|
|
535
537
|
workflow_patch(args: Record<string, unknown>): Promise<unknown>;
|
|
536
538
|
workflow_patchNode(args: Record<string, unknown>): Promise<unknown>;
|
|
537
539
|
workflow_delete(args: { id: string }): Promise<unknown>;
|
|
538
|
-
workflow_trigger(args: {
|
|
540
|
+
workflow_trigger(args: {
|
|
541
|
+
id: string;
|
|
542
|
+
triggerData?: Record<string, unknown>;
|
|
543
|
+
wait?: boolean;
|
|
544
|
+
idempotencyKey?: string;
|
|
545
|
+
}): Promise<unknown>;
|
|
539
546
|
workflow_retryRun(args: { id: string }): Promise<unknown>;
|
|
540
547
|
workflow_cancelRun(args: { id: string }): Promise<unknown>;
|
|
541
548
|
|
|
@@ -552,6 +559,7 @@ declare module "swarm-sdk" {
|
|
|
552
559
|
intent?: string;
|
|
553
560
|
scope?: ScriptScope;
|
|
554
561
|
fsMode?: ScriptFsMode;
|
|
562
|
+
executor?: ScriptExecutorName | null;
|
|
555
563
|
}): Promise<unknown>;
|
|
556
564
|
script_delete(args: { name: string; scope?: ScriptScope }): Promise<unknown>;
|
|
557
565
|
script_queryTypes(args: { name: string; scope?: ScriptScope }): Promise<unknown>;
|
|
@@ -8,6 +8,7 @@ declare module "swarm-sdk" {
|
|
|
8
8
|
| { [key: string]: JsonValue };
|
|
9
9
|
export type ScriptScope = "agent" | "global";
|
|
10
10
|
export type ScriptFsMode = "none" | "workspace-rw";
|
|
11
|
+
export type ScriptExecutorName = "native" | "quickjs";
|
|
11
12
|
export type ScriptApiRawOptions = { raw: true };
|
|
12
13
|
export type ScriptApiDefaultOptions = { raw?: false };
|
|
13
14
|
export type RoutingReason =
|
|
@@ -286,6 +287,7 @@ declare module "swarm-sdk" {
|
|
|
286
287
|
intent?: string;
|
|
287
288
|
scope?: ScriptScope;
|
|
288
289
|
fsMode?: ScriptFsMode;
|
|
290
|
+
executor?: ScriptExecutorName | null;
|
|
289
291
|
idempotencyKey?: string;
|
|
290
292
|
}): Promise<unknown>;
|
|
291
293
|
// --- swarm / agent ---
|
|
@@ -517,7 +519,12 @@ declare module "swarm-sdk" {
|
|
|
517
519
|
workflow_patch(args: Record<string, unknown>): Promise<unknown>;
|
|
518
520
|
workflow_patchNode(args: Record<string, unknown>): Promise<unknown>;
|
|
519
521
|
workflow_delete(args: { id: string }): Promise<unknown>;
|
|
520
|
-
workflow_trigger(args: {
|
|
522
|
+
workflow_trigger(args: {
|
|
523
|
+
id: string;
|
|
524
|
+
triggerData?: Record<string, unknown>;
|
|
525
|
+
wait?: boolean;
|
|
526
|
+
idempotencyKey?: string;
|
|
527
|
+
}): Promise<unknown>;
|
|
521
528
|
workflow_retryRun(args: { id: string }): Promise<unknown>;
|
|
522
529
|
workflow_cancelRun(args: { id: string }): Promise<unknown>;
|
|
523
530
|
|
|
@@ -534,6 +541,7 @@ declare module "swarm-sdk" {
|
|
|
534
541
|
intent?: string;
|
|
535
542
|
scope?: ScriptScope;
|
|
536
543
|
fsMode?: ScriptFsMode;
|
|
544
|
+
executor?: ScriptExecutorName | null;
|
|
537
545
|
}): Promise<unknown>;
|
|
538
546
|
script_delete(args: { name: string; scope?: ScriptScope }): Promise<unknown>;
|
|
539
547
|
script_queryTypes(args: { name: string; scope?: ScriptScope }): Promise<unknown>;
|