@desplega.ai/agent-swarm 1.167.0 → 1.168.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.
Files changed (100) hide show
  1. package/dist/{acp-adapter-zpvy6321.js → acp-adapter-zhejfecx.js} +2 -2
  2. package/dist/{actions-fq2zrwtf.js → actions-7jg840nr.js} +11 -11
  3. package/dist/{amp-adapter-5gbk7501.js → amp-adapter-ye6rnetm.js} +1 -1
  4. package/dist/{app-nctetn1e.js → app-ffes2kyf.js} +3 -3
  5. package/dist/{assistant-0aq8gjvj.js → assistant-fhm5smyz.js} +12 -12
  6. package/dist/{boot-reembed-1ze5853n.js → boot-reembed-20q3nzvg.js} +2 -2
  7. package/dist/{boot-reembed-fmp5ww69.js → boot-reembed-jvfadhsk.js} +2 -2
  8. package/dist/{boot-scrub-sweep-cbp8xd4e.js → boot-scrub-sweep-jtfajzve.js} +3 -3
  9. package/dist/{boot-seeds-22tx8a53.js → boot-seeds-9qt0j8j2.js} +5 -5
  10. package/dist/{claude-adapter-0jhgeh1d.js → claude-adapter-a8znhthz.js} +3 -3
  11. package/dist/{claude-sdk-session-wh77rh83.js → claude-sdk-session-7x7chdrs.js} +7590 -7578
  12. package/dist/{cli-ypgba1a8.js → cli-0jngabtb.js} +1 -1
  13. package/dist/{cli-tx2zvn23.js → cli-43jg9xdw.js} +3 -3
  14. package/dist/{cli-6qxmjpem.js → cli-47zfzshm.js} +5 -5
  15. package/dist/{cli-mkdsy1nq.js → cli-74ez9b66.js} +3 -2
  16. package/dist/{cli-ykt8f7va.js → cli-9q0bh411.js} +1 -1
  17. package/dist/{cli-p8rt8spp.js → cli-9q24yyvs.js} +2 -2
  18. package/dist/{cli-cexctgn5.js → cli-aj1e0h0d.js} +1 -1
  19. package/dist/{cli-z1dqhc9y.js → cli-bcspch6h.js} +1 -1
  20. package/dist/{cli-wydz3feg.js → cli-ee0402n1.js} +107 -30
  21. package/dist/{cli-ty4bzkqr.js → cli-ew0c3a1j.js} +1 -1
  22. package/dist/{cli-v1pwxreq.js → cli-ewhwpyrb.js} +1 -1
  23. package/dist/{cli-kw0jcfje.js → cli-fhj4y16f.js} +1 -1
  24. package/dist/{cli-m7vmeepg.js → cli-fqq06kkb.js} +1 -1
  25. package/dist/{cli-577bxkf6.js → cli-g6gx2dn1.js} +31 -6
  26. package/dist/{cli-c8r99akr.js → cli-j05x7pnb.js} +8 -8
  27. package/dist/{cli-c2tpw9ck.js → cli-jb931ba2.js} +1 -1
  28. package/dist/{cli-mxry91sa.js → cli-nctfv2yy.js} +72 -3
  29. package/dist/{cli-ymmc1zxg.js → cli-ng1pmdx6.js} +3 -3
  30. package/dist/{cli-6vfz44sr.js → cli-p5jqk8fr.js} +1 -1
  31. package/dist/{cli-qzmzwegq.js → cli-pgehz8e1.js} +4 -4
  32. package/dist/{cli-cf2vgn9d.js → cli-rr5z1j4p.js} +14 -14
  33. package/dist/{cli-1yrcfa5s.js → cli-svah6b6w.js} +4 -4
  34. package/dist/{cli-y0kjpfm9.js → cli-ytmmyj7f.js} +2 -2
  35. package/dist/{cli-pkj1w46r.js → cli-z48ggfyq.js} +1 -1
  36. package/dist/cli.js +13 -13
  37. package/dist/{codex-adapter-cgesnjkr.js → codex-adapter-n63k33d3.js} +2 -2
  38. package/dist/{codex-session-runner-8kd7ddhr.js → codex-session-runner-xkxfd81a.js} +2 -2
  39. package/dist/{commands-h6zaaxym.js → commands-q4mfhn51.js} +2 -2
  40. package/dist/{db-qg3myn53.js → db-1t0bj3pc.js} +2 -2
  41. package/dist/{dispatcher-7vnwj9qw.js → dispatcher-k1fhavcf.js} +10 -10
  42. package/dist/{dsh-adapter-tz6hfp5r.js → dsh-adapter-5423p70m.js} +1 -1
  43. package/dist/{grok-adapter-jdt2dz2s.js → grok-adapter-phrndeb8.js} +3 -3
  44. package/dist/{handlers-2qtkpncr.js → handlers-59ywqwzh.js} +13 -13
  45. package/dist/{hook-qnbdgwvd.js → hook-atj0swc2.js} +2 -2
  46. package/dist/{hook-51yfcgsv.js → hook-mew1chq9.js} +1 -1
  47. package/dist/{http-jsmtag08.js → http-ef2fnn9v.js} +659 -26
  48. package/dist/{index-t4g06w93.js → index-48pb9erw.js} +10 -10
  49. package/dist/{index-ekywyv2v.js → index-9fc2h7ww.js} +10 -10
  50. package/dist/{index-2t9kesn1.js → index-gr69c43q.js} +2 -2
  51. package/dist/{index-cx1sb9bq.js → index-h26wjcfy.js} +16 -6
  52. package/dist/{index-bt8wkv1w.js → index-w2yhye23.js} +11 -11
  53. package/dist/{keepalive-4aezx4bj.js → keepalive-qhcqz56v.js} +4 -4
  54. package/dist/{lead-r44bkpm5.js → lead-hpk5r3b1.js} +18 -18
  55. package/dist/{maintenance-grz5jrzh.js → maintenance-nvkyp2xe.js} +2 -2
  56. package/dist/{oauth-refresh-sweep-wm4ctjfj.js → oauth-refresh-sweep-ngskthwh.js} +3 -3
  57. package/dist/{onboard-v60zgqf0.js → onboard-yfnkqhxc.js} +2 -2
  58. package/dist/{otel-impl-ghh4dyf8.js → otel-impl-hhm64r6m.js} +1 -1
  59. package/dist/{pricing-refresh-mjrqvnvw.js → pricing-refresh-35f91nx2.js} +4 -4
  60. package/dist/{rbac-roles-axv4d74x.js → rbac-roles-97w370qj.js} +3 -3
  61. package/dist/{rbac-roles-fd5tskj9.js → rbac-roles-z6sje3gy.js} +2 -2
  62. package/dist/{render-v2-k50j33qd.js → render-v2-n4v66bj3.js} +3 -3
  63. package/dist/{setup-4syh0pd2.js → setup-m3hhyv5f.js} +2 -2
  64. package/dist/{work-objects-jcdbg8rr.js → work-objects-mxf2c842.js} +13 -13
  65. package/dist/{worker-x8j8c9sx.js → worker-9t07z1gq.js} +18 -18
  66. package/openapi.json +72 -1
  67. package/package.json +3 -3
  68. package/src/be/script-connections.ts +40 -6
  69. package/src/be/swarm-config-guard.ts +1 -0
  70. package/src/extensions/catalog.generated.json +17 -0
  71. package/src/http/script-connections.ts +35 -0
  72. package/src/providers/acp-targets.ts +1 -1
  73. package/src/providers/amp-adapter.ts +1 -1
  74. package/src/providers/claude-adapter.ts +6 -0
  75. package/src/providers/claude-background-keepalive.ts +100 -0
  76. package/src/providers/claude-sdk-session.ts +6 -0
  77. package/src/providers/dsh-adapter.ts +1 -1
  78. package/src/scheduler/scheduler.ts +82 -13
  79. package/src/scripts-runtime/executors/registry.ts +1 -1
  80. package/src/tests/claude-background-keepalive-wiring.test.ts +220 -0
  81. package/src/tests/claude-background-keepalive.fixture.ts +162 -0
  82. package/src/tests/claude-background-keepalive.test.ts +139 -0
  83. package/src/tests/connection-embedded-auth.test.ts +51 -0
  84. package/src/tests/docs-index-footprint.test.js +3 -3
  85. package/src/tests/dsh-adapter.test.ts +1 -1
  86. package/src/tests/extensions-catalog.test.ts +1 -0
  87. package/src/tests/extensions-example-slack-reply-gate.test.ts +756 -0
  88. package/src/tests/schedule-target-type.test.ts +136 -0
  89. package/src/tests/script-connections-http.test.ts +45 -0
  90. package/src/tests/script-connections-mcp.test.ts +41 -0
  91. package/src/tests/script-executor-registry.test.ts +18 -0
  92. package/src/tests/send-task-self-send.test.ts +107 -0
  93. package/src/tools/script-connections/tool.ts +35 -3
  94. package/src/tools/send-task.ts +9 -1
  95. package/templates/extensions/README.md +1 -0
  96. package/templates/extensions/slack-reply-gate/README.md +98 -0
  97. package/templates/extensions/slack-reply-gate/hooks.ts +582 -0
  98. package/templates/extensions/slack-reply-gate/manifest.json +8 -0
  99. package/templates/skills/swarm-scripts/SKILL.md +10 -0
  100. package/templates/skills/swarm-scripts/content.md +10 -0
@@ -9,6 +9,7 @@ import {
9
9
  } from "../be/db";
10
10
  import { getOAuthApp, upsertAuthorization, upsertOAuthApp } from "../be/db-queries/oauth";
11
11
  import {
12
+ deleteScriptConnection,
12
13
  getScriptApiConnectionDescriptors,
13
14
  getScriptConnectionById,
14
15
  listRelationalCredentialBindings,
@@ -718,3 +719,53 @@ describe("embedded connection auth", () => {
718
719
  }
719
720
  });
720
721
  });
722
+
723
+ describe("deleteScriptConnection", () => {
724
+ test("removes the connection, its managed binding, and its derived inline secret", async () => {
725
+ createdConfigKeys.push("connection.deleteVendor.secret");
726
+ const connection = await upsertScriptConnection({
727
+ slug: "deleteVendor",
728
+ kind: "graphql",
729
+ baseUrl: "https://api.vendor.test/graphql",
730
+ allowedHosts: ["api.vendor.test"],
731
+ auth: { type: "bearer", secret: "example-delete-tok-123" },
732
+ });
733
+ createdConnectionIds.push(connection.id);
734
+ expect(await managedBindingFor(connection.id)).not.toBeNull();
735
+ expect(await getSwarmConfigs({ key: "connection.deleteVendor.secret" })).toHaveLength(1);
736
+
737
+ const deleted = await deleteScriptConnection(connection.id);
738
+
739
+ expect(deleted?.id).toBe(connection.id);
740
+ expect(await getScriptConnectionById(connection.id)).toBeNull();
741
+ expect(await managedBindingFor(connection.id)).toBeNull();
742
+ expect(await getSwarmConfigs({ key: "connection.deleteVendor.secret" })).toHaveLength(0);
743
+ });
744
+
745
+ test("keeps a shared configKey secret the connection does not own", async () => {
746
+ createdConfigKeys.push("SHARED_DELETE_VENDOR_KEY");
747
+ await upsertSwarmConfig({
748
+ scope: "global",
749
+ key: "SHARED_DELETE_VENDOR_KEY",
750
+ value: "example-shared-tok",
751
+ isSecret: true,
752
+ });
753
+ const connection = await upsertScriptConnection({
754
+ slug: "sharedDeleteVendor",
755
+ kind: "graphql",
756
+ baseUrl: "https://api.vendor.test/graphql",
757
+ allowedHosts: ["api.vendor.test"],
758
+ auth: { type: "bearer", configKey: "SHARED_DELETE_VENDOR_KEY" },
759
+ });
760
+ createdConnectionIds.push(connection.id);
761
+
762
+ expect((await deleteScriptConnection(connection.id))?.id).toBe(connection.id);
763
+
764
+ expect(await managedBindingFor(connection.id)).toBeNull();
765
+ expect(await getSwarmConfigs({ key: "SHARED_DELETE_VENDOR_KEY" })).toHaveLength(1);
766
+ });
767
+
768
+ test("returns null for an unknown id", async () => {
769
+ expect(await deleteScriptConnection("00000000-0000-4000-8000-000000000000")).toBeNull();
770
+ });
771
+ });
@@ -78,7 +78,7 @@ describe("docs API index footprint", () => {
78
78
  expect(tasks).toContain('"path":"/api/task-templates","method":"get"');
79
79
  });
80
80
 
81
- test("OpenAPI and generated pages keep all 399 operations", async () => {
81
+ test("OpenAPI and generated pages keep all 400 operations", async () => {
82
82
  const spec = await Bun.file(resolve(repoRoot, "openapi.json")).json();
83
83
  const operationKeys = [];
84
84
  const tags = new Set();
@@ -103,8 +103,8 @@ describe("docs API index footprint", () => {
103
103
  expect(spec.paths["/api/agents/{id}/runtime"]?.get).toBeDefined();
104
104
 
105
105
  const generatedKeys = await generatedOperationKeys();
106
- expect(operationKeys).toHaveLength(399);
107
- expect(generatedKeys).toHaveLength(399);
106
+ expect(operationKeys).toHaveLength(400);
107
+ expect(generatedKeys).toHaveLength(400);
108
108
  expect(new Set(generatedKeys)).toEqual(new Set(operationKeys));
109
109
  });
110
110
 
@@ -376,7 +376,7 @@ describe("dsh harness", () => {
376
376
  await rename(join(config.cwd, "dsh"), join(config.cwd, "npx"));
377
377
  config.env = { ...config.env, DSH_BINARY: "", PATH: config.cwd };
378
378
  await expect(new DshAdapter().createSession(config)).rejects.toThrow(
379
- "dsh CLI not found. Install @deepseek-ai/dsh@0.2.1-alpha.1",
379
+ "dsh CLI not found. Install @deepseek-ai/dsh@0.2.1-alpha.2",
380
380
  );
381
381
  expect(await Bun.file(join(config.cwd, "invocation.json")).exists()).toBe(false);
382
382
  });
@@ -42,6 +42,7 @@ describe("predefined extension catalog", () => {
42
42
  "notify-on-complete",
43
43
  "require-ticket-ref",
44
44
  "require-verification-note",
45
+ "slack-reply-gate",
45
46
  "task-digest",
46
47
  ]);
47
48
  for (const [name, entry] of Object.entries(catalog)) {