@desplega.ai/agent-swarm 1.172.0 → 1.173.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 (214) hide show
  1. package/dist/{acp-adapter-fpecx1g1.js → acp-adapter-ccm9xrep.js} +8 -8
  2. package/dist/{actions-pw87a1a8.js → actions-sgeyv08k.js} +44 -19
  3. package/dist/{amp-adapter-8jem2bc0.js → amp-adapter-gpxp3kc9.js} +1 -1
  4. package/dist/{anthropic-messages-8ee2f22q.js → anthropic-messages-r6czkjv1.js} +7 -7
  5. package/dist/{app-wmf0m843.js → app-km9qnv2f.js} +6 -4
  6. package/dist/{assistant-emp1e108.js → assistant-5r8tcvvd.js} +44 -22
  7. package/dist/{boot-reembed-4ymn9atn.js → boot-reembed-16rv9843.js} +4 -3
  8. package/dist/{boot-reembed-1de4f4aj.js → boot-reembed-swwzdgd7.js} +4 -3
  9. package/dist/{boot-scrub-sweep-adhk1s8c.js → boot-scrub-sweep-zkr6vkqb.js} +5 -4
  10. package/dist/{boot-seeds-8q637aew.js → boot-seeds-d8sp49t2.js} +7 -6
  11. package/dist/{claude-adapter-t26cv8a4.js → claude-adapter-yzzzh8jp.js} +9 -9
  12. package/dist/{claude-sdk-session-gsfsh662.js → claude-sdk-session-4whxere4.js} +9458 -9164
  13. package/dist/{cli-g4f5pj26.js → cli-0a7mm3zp.js} +92 -10
  14. package/dist/{cli-pj6x9qce.js → cli-0kxf81jj.js} +1 -1
  15. package/dist/{cli-kb4ehzx5.js → cli-1w0vj3gw.js} +4 -4
  16. package/dist/{cli-e0a9sk00.js → cli-3nxdmjrc.js} +1 -1
  17. package/dist/{cli-6jb2rf77.js → cli-42qhyvwx.js} +3 -3
  18. package/dist/{cli-esnpehf5.js → cli-5er5gjbm.js} +4 -4
  19. package/dist/{cli-04emfe2q.js → cli-5wpw4rab.js} +1 -1
  20. package/dist/{cli-aspcaef3.js → cli-6r2f7edk.js} +4 -4
  21. package/dist/{cli-xczpdp9e.js → cli-6thk4jz3.js} +1 -1
  22. package/dist/{cli-j6kpj9az.js → cli-7a93cv8c.js} +1458 -48
  23. package/dist/{cli-k46r9hmk.js → cli-94b48jhk.js} +2 -2
  24. package/dist/{cli-gp1rtyvk.js → cli-9xf7fdtp.js} +2 -2
  25. package/dist/{cli-qsztpfry.js → cli-anzdk0z4.js} +1 -1
  26. package/dist/{cli-cceskcvt.js → cli-b07hr3bt.js} +8 -8
  27. package/dist/{cli-c2pq2rjb.js → cli-bv2etw2y.js} +2 -2
  28. package/dist/{cli-hwwvy36w.js → cli-c3rk1v0x.js} +3 -3
  29. package/dist/{cli-tgpfnm6r.js → cli-fmhj1ehj.js} +53 -13
  30. package/dist/{cli-r8smj8b8.js → cli-jpc4r224.js} +1 -1
  31. package/dist/{cli-4nz8p1p5.js → cli-m89t9jdf.js} +5 -5
  32. package/dist/{cli-bf7485pm.js → cli-na2pxe4f.js} +1 -1
  33. package/dist/{cli-prrt9fa0.js → cli-ne7smj1b.js} +4 -4
  34. package/dist/{cli-cf69s3ew.js → cli-nwrdx840.js} +2 -2
  35. package/dist/cli-p0sg24zp.js +16 -0
  36. package/dist/{cli-gj81e47t.js → cli-phcqp1b9.js} +1 -1
  37. package/dist/{cli-5rv1j9ga.js → cli-qm1448f9.js} +51 -5
  38. package/dist/{cli-8hzfb6xz.js → cli-r0byd61h.js} +7 -7
  39. package/dist/{cli-nyhb1r6x.js → cli-r4fqfpwf.js} +3 -3
  40. package/dist/{cli-1hgat6pa.js → cli-rfs4vddv.js} +5 -5
  41. package/dist/{cli-ztrv9y21.js → cli-rfz2ve55.js} +861 -246
  42. package/dist/{cli-pstq9888.js → cli-s8z6x4b4.js} +22 -21
  43. package/dist/{cli-j1pmc07z.js → cli-saqyage0.js} +92 -16
  44. package/dist/{cli-zxm9p3x4.js → cli-srqq3gc5.js} +1 -1
  45. package/dist/{cli-9xsmdpdt.js → cli-tcc4wd5d.js} +136 -42
  46. package/dist/cli-v3zhnxsb.js +263 -0
  47. package/dist/{cli-388egyf6.js → cli-w1apjecb.js} +1 -1
  48. package/dist/{cli-g6t9texm.js → cli-wrh08zjd.js} +4 -4
  49. package/dist/{cli-8vs9trd4.js → cli-x119kdba.js} +1 -1
  50. package/dist/{cli-nv4zd0b9.js → cli-xc7p7s3g.js} +1 -1
  51. package/dist/cli.js +16 -16
  52. package/dist/{codex-adapter-m4tgdysy.js → codex-adapter-r3dn4fp5.js} +6 -6
  53. package/dist/{codex-session-runner-ymwzm6ea.js → codex-session-runner-fwt793h4.js} +6 -6
  54. package/dist/{commands-n0hshcvs.js → commands-z8fq9qna.js} +14 -4
  55. package/dist/{controllers-connect-y07cqcvy.js → controllers-connect-3mf2btyj.js} +21 -19
  56. package/dist/{db-4w7tmt1g.js → db-qfpq4bt7.js} +4 -3
  57. package/dist/{db-hkqvrdcb.js → db-yyhqqrbf.js} +5 -4
  58. package/dist/{dispatcher-5sd69y14.js → dispatcher-x0x7qfcq.js} +20 -18
  59. package/dist/{dsh-adapter-2h8m4cab.js → dsh-adapter-34etvb5m.js} +1 -1
  60. package/dist/external-channel-h1fjecwe.js +51 -0
  61. package/dist/{grok-adapter-8m9yqzbq.js → grok-adapter-e7mr287e.js} +9 -9
  62. package/dist/{handlers-s20xr10r.js → handlers-znb9n7d4.js} +23 -21
  63. package/dist/{heartbeat-3k31q4g2.js → heartbeat-bm4qkn8d.js} +22 -20
  64. package/dist/{hook-gdn6a2fn.js → hook-254r4mza.js} +7 -7
  65. package/dist/{hook-ygwerrdh.js → hook-xaa3q80s.js} +8 -8
  66. package/dist/{http-jdteeg81.js → http-3dgrgp8y.js} +135 -64
  67. package/dist/{index-6ksewd5y.js → index-2ybk7khy.js} +618 -120
  68. package/dist/{index-tsszt7g9.js → index-bdsqa799.js} +22 -20
  69. package/dist/{index-e0snym4t.js → index-fx3jqq1e.js} +20 -18
  70. package/dist/{index-vm3bm9t7.js → index-g2byveez.js} +20 -18
  71. package/dist/{index-ffqzqgwb.js → index-jd7sejm2.js} +4 -3
  72. package/dist/{keepalive-jekc896t.js → keepalive-6ywhpja1.js} +6 -5
  73. package/dist/{lead-4k9s9szx.js → lead-cw45n21s.js} +32 -30
  74. package/dist/{maintenance-shazch4n.js → maintenance-ss1a1ge9.js} +4 -3
  75. package/dist/node-c9we95xf.js +1 -1
  76. package/dist/{oauth-refresh-sweep-5gb36kn8.js → oauth-refresh-sweep-3c6f8vyy.js} +5 -4
  77. package/dist/{onboard-ydrbnvww.js → onboard-8hzdhc1k.js} +2 -2
  78. package/dist/{opencode-adapter-5zh0he20.js → opencode-adapter-qbchbcfz.js} +6 -6
  79. package/dist/{otel-impl-6pf5cv86.js → otel-impl-e6mnvc4v.js} +7 -2
  80. package/dist/{pi-mono-adapter-ef9wwx9m.js → pi-mono-adapter-3c9g9snh.js} +6 -6
  81. package/dist/{pricing-refresh-s52nsa5q.js → pricing-refresh-gedkjdw0.js} +6 -5
  82. package/dist/{rbac-roles-aq3msh4e.js → rbac-roles-dt4vh1yy.js} +4 -3
  83. package/dist/{rbac-roles-q5gb5e8v.js → rbac-roles-eszdg6pm.js} +5 -4
  84. package/dist/{render-v2-pd1rg54q.js → render-v2-907cy6sa.js} +6 -4
  85. package/dist/{resume-gw4a2c6v.js → resume-42stcaz0.js} +11 -9
  86. package/dist/{setup-jda1ksdh.js → setup-adbc1c10.js} +2 -2
  87. package/dist/{virtual-modules-b3ga2m65.js → virtual-modules-rtmt494q.js} +3 -3
  88. package/dist/{work-objects-tb7ycye8.js → work-objects-wpj8ck95.js} +28 -21
  89. package/dist/{worker-njjccz5d.js → worker-bzdra9rf.js} +32 -30
  90. package/openapi.json +423 -7
  91. package/package.json +4 -4
  92. package/src/apps/catalog.generated.json +1309 -53
  93. package/src/apps/page-validator.ts +93 -31
  94. package/src/azure-devops/api.ts +94 -18
  95. package/src/azure-devops/auth.ts +32 -0
  96. package/src/azure-devops/boards-sync.ts +708 -0
  97. package/src/azure-devops/handlers.ts +52 -8
  98. package/src/azure-devops/html.ts +26 -0
  99. package/src/azure-devops/index.ts +15 -0
  100. package/src/azure-devops/templates.ts +86 -0
  101. package/src/azure-devops/types.ts +65 -1
  102. package/src/be/db.ts +22 -6
  103. package/src/be/migrations/213_script_connections_sql.sql +79 -0
  104. package/src/be/script-connections.ts +47 -8
  105. package/src/be/seed-skills/bundled-files.generated.json +10 -0
  106. package/src/be/seed-skills/index.ts +3 -0
  107. package/src/be/sql-connections.ts +118 -0
  108. package/src/be/swarm-config-guard.ts +1 -0
  109. package/src/commands/profile-sync.ts +5 -3
  110. package/src/commands/runner.ts +6 -2
  111. package/src/http/mcp-oauth.ts +6 -13
  112. package/src/http/pages-public.ts +3 -2
  113. package/src/http/pages.ts +2 -1
  114. package/src/http/route-def.ts +7 -6
  115. package/src/http/script-connection-proxy.ts +51 -4
  116. package/src/http/script-connections.ts +5 -2
  117. package/src/http/session-cost-recompute.ts +12 -2
  118. package/src/http/session-data.ts +4 -0
  119. package/src/http/webhooks.ts +24 -1
  120. package/src/jira/adf.ts +3 -1
  121. package/src/kv-reserved-namespaces.ts +2 -0
  122. package/src/oauth/mcp-wrapper.ts +10 -6
  123. package/src/otel-impl.ts +2 -1
  124. package/src/prompts/base-prompt.ts +3 -3
  125. package/src/providers/acp-targets.ts +1 -1
  126. package/src/providers/amp-adapter.ts +1 -1
  127. package/src/providers/claude-adapter.ts +27 -2
  128. package/src/providers/claude-flag-settings.ts +121 -0
  129. package/src/providers/claude-sdk-session.ts +7 -0
  130. package/src/providers/dsh-adapter.ts +1 -1
  131. package/src/providers/opencode-adapter.ts +26 -12
  132. package/src/providers/opencode-billing.ts +86 -0
  133. package/src/providers/opencode-swarm-plugin.ts +20 -0
  134. package/src/providers/pricing-sources.md +4 -1
  135. package/src/providers/types.ts +5 -0
  136. package/src/scripts-runtime/api-client.ts +15 -1
  137. package/src/scripts-runtime/api-types.ts +9 -1
  138. package/src/scripts-runtime/ctx.ts +1 -1
  139. package/src/scripts-runtime/mcp-client.ts +30 -19
  140. package/src/slack/actions.ts +29 -1
  141. package/src/slack/app.ts +14 -2
  142. package/src/slack/assistant.ts +36 -2
  143. package/src/slack/channel-join.ts +3 -16
  144. package/src/slack/commands.ts +9 -1
  145. package/src/slack/external-channel-egress.ts +113 -0
  146. package/src/slack/external-channel.ts +309 -0
  147. package/src/slack/handlers.ts +61 -0
  148. package/src/slack/render-v2.ts +40 -47
  149. package/src/slack/work-objects.ts +5 -0
  150. package/src/tasks/context-key.ts +34 -1
  151. package/src/telemetry.ts +2 -1
  152. package/src/tests/apps-catalog-feedback.test.ts +310 -0
  153. package/src/tests/apps-catalog-inputs.test.ts +70 -0
  154. package/src/tests/apps-catalog-table.test.ts +113 -0
  155. package/src/tests/azure-devops-boards-sync.test.ts +584 -0
  156. package/src/tests/azure-devops-html.test.ts +13 -0
  157. package/src/tests/azure-devops-webhook-malformed.test.ts +4 -0
  158. package/src/tests/claude-adapter-binary.test.ts +139 -0
  159. package/src/tests/claude-flag-settings.test.ts +106 -0
  160. package/src/tests/claude-sdk-lifecycle.test.ts +142 -1
  161. package/src/tests/claude-sdk-process.fixture.ts +7 -0
  162. package/src/tests/context-key.test.ts +32 -0
  163. package/src/tests/deferred-task-wake.test.ts +52 -4
  164. package/src/tests/docs-index-footprint.test.js +3 -3
  165. package/src/tests/dsh-adapter.test.ts +1 -1
  166. package/src/tests/fixtures/azure-boards/workitem.commented.json +89 -0
  167. package/src/tests/fixtures/azure-boards/workitem.created.json +81 -0
  168. package/src/tests/fixtures/azure-boards/workitem.deleted.json +70 -0
  169. package/src/tests/fixtures/azure-boards/workitem.restored.json +82 -0
  170. package/src/tests/fixtures/azure-boards/workitem.updated.json +130 -0
  171. package/src/tests/fixtures/catalog-feedback-definition.json.txt +860 -0
  172. package/src/tests/fixtures/catalog-inputs-definition.json.txt +910 -0
  173. package/src/tests/fixtures/catalog-table-definition.json.txt +468 -0
  174. package/src/tests/fixtures/runner-identity-refresh.ts +3 -0
  175. package/src/tests/node-env-runtime.test.ts +98 -0
  176. package/src/tests/opencode-adapter.test.ts +132 -1
  177. package/src/tests/opencode-billing.test.ts +28 -0
  178. package/src/tests/runner-identity-refresh.test.ts +3 -0
  179. package/src/tests/script-connections-sql.test.ts +675 -0
  180. package/src/tests/script-connections.test.ts +5 -1
  181. package/src/tests/session-cost-recompute-unit.test.ts +48 -0
  182. package/src/tests/slack-channel-join.test.ts +4 -1
  183. package/src/tests/slack-external-channel-config.test.ts +65 -0
  184. package/src/tests/slack-external-channel-egress.test.ts +237 -0
  185. package/src/tests/slack-external-channel-guard.test.ts +280 -0
  186. package/src/tests/slack-external-channel-tools.test.ts +173 -0
  187. package/src/tests/slack-external-channel.test.ts +370 -0
  188. package/src/tests/slack-render-v2.test.ts +86 -10
  189. package/src/tests/spec-base-url.test.ts +16 -1
  190. package/src/tests/vendored-openapi.test.ts +16 -1
  191. package/src/tools/defer-task.ts +17 -0
  192. package/src/tools/slack-post.ts +6 -0
  193. package/src/tools/slack-read.ts +8 -0
  194. package/src/tools/slack-reply.ts +6 -0
  195. package/src/tools/slack-start-thread.ts +6 -0
  196. package/src/tools/slack-update.ts +6 -0
  197. package/src/tools/slack-upload-file.ts +6 -0
  198. package/src/utils/node-env.ts +24 -0
  199. package/templates/skills/apps/SKILL.md +742 -0
  200. package/templates/skills/apps/content.md +52 -21
  201. package/templates/skills/qa-loom/config.json +14 -0
  202. package/templates/skills/qa-loom/content.md +187 -0
  203. package/templates/skills/qa-loom/files/build-loom.mjs +221 -0
  204. package/templates/skills/qa-loom/files/run-qa.sh +57 -0
  205. package/templates/skills/slack-interaction/content.md +4 -0
  206. package/dist/{azure-openai-responses-ap1gwxgr.js → azure-openai-responses-ygfreq4t.js} +5 -5
  207. package/dist/{cli-4fnb6884.js → cli-h7k0xtry.js} +3 -3
  208. package/dist/{cli-5rqrj7q0.js → cli-pw7ebjdt.js} +0 -0
  209. package/dist/{google-generative-ai-7pavrbv7.js → google-generative-ai-szdxbpqg.js} +1 -1
  210. package/dist/{google-vertex-3f1jk41f.js → google-vertex-qzw3p36d.js} +1 -1
  211. package/dist/{openai-codex-responses-33qhkkdy.js → openai-codex-responses-3bk0grnr.js} +4 -4
  212. package/dist/{openai-completions-s88xm3ns.js → openai-completions-5d4jpakc.js} +9 -9
  213. package/dist/{openai-responses-7xd2f2e2.js → openai-responses-krb51f59.js} +5 -5
  214. package/dist/{pi-messages-xszk613n.js → pi-messages-x9gzynm1.js} +3 -3
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runStopHookSessionSummarySubprocess
3
- } from "./cli-g6t9texm.js";
3
+ } from "./cli-wrh08zjd.js";
4
4
  import {
5
5
  buildOtelTraceparentEnv,
6
6
  isHarnessOtelEnabled
@@ -47,7 +47,7 @@ import {
47
47
  import {
48
48
  init_file_lock,
49
49
  withFileLock
50
- } from "./cli-nyhb1r6x.js";
50
+ } from "./cli-r4fqfpwf.js";
51
51
  import {
52
52
  CLAUDE_CREDENTIALS_HINT,
53
53
  init_credentials,
@@ -94,7 +94,7 @@ import {
94
94
  writeFile
95
95
  } from "node:fs/promises";
96
96
  import { homedir } from "node:os";
97
- import { dirname, join, resolve } from "node:path";
97
+ import { dirname, join, resolve as resolve2 } from "node:path";
98
98
  import { promisify } from "node:util";
99
99
  init_credentials();
100
100
  init_env_flag();
@@ -167,6 +167,76 @@ class ClaudeBackgroundKeepalive {
167
167
  }
168
168
  }
169
169
 
170
+ // src/providers/claude-flag-settings.ts
171
+ init_secret_scrubber();
172
+ import { readFileSync } from "node:fs";
173
+ import { resolve } from "node:path";
174
+ var WORKSPACE_CLAUDE_MD_EXCLUDE = "/workspace/CLAUDE.md";
175
+ function claudeFlagSettings() {
176
+ return { claudeMdExcludes: [WORKSPACE_CLAUDE_MD_EXCLUDE] };
177
+ }
178
+ var SETTINGS_FLAG = "--settings";
179
+
180
+ class ClaudeSettingsConfigError extends Error {
181
+ constructor(detail) {
182
+ super(scrubSecrets(`Invalid caller --settings: ${detail}. Refusing to start Claude without the caller's settings.`));
183
+ this.name = "ClaudeSettingsConfigError";
184
+ }
185
+ }
186
+ function isPlainObject(value) {
187
+ return typeof value === "object" && value !== null && !Array.isArray(value);
188
+ }
189
+ function parseCallerSettings(value, cwd) {
190
+ const inline = value.trimStart().startsWith("{");
191
+ const source = inline ? "inline JSON" : `file ${resolve(cwd, value)}`;
192
+ let parsed;
193
+ try {
194
+ parsed = JSON.parse(inline ? value : readFileSync(resolve(cwd, value), "utf8"));
195
+ } catch (err) {
196
+ const code = err.code;
197
+ throw new ClaudeSettingsConfigError(`${source} ${inline || !code ? "is not valid JSON" : `cannot be read (${code})`}`);
198
+ }
199
+ if (!isPlainObject(parsed)) {
200
+ throw new ClaudeSettingsConfigError(`${source} is not a JSON object`);
201
+ }
202
+ return parsed;
203
+ }
204
+ function mergeClaudeSettingsArgs(argLists, cwd) {
205
+ const merged = {};
206
+ const excludes = new Set;
207
+ const absorb = (value) => {
208
+ if (!value)
209
+ throw new ClaudeSettingsConfigError("--settings has no value");
210
+ const parsed = parseCallerSettings(value, cwd);
211
+ Object.assign(merged, parsed);
212
+ if (Array.isArray(parsed.claudeMdExcludes)) {
213
+ for (const entry of parsed.claudeMdExcludes) {
214
+ if (typeof entry === "string")
215
+ excludes.add(entry);
216
+ }
217
+ }
218
+ };
219
+ const stripped = argLists.map((args) => {
220
+ const passthrough = [];
221
+ for (let i = 0;i < args.length; i++) {
222
+ const arg = args[i] ?? "";
223
+ if (arg === SETTINGS_FLAG) {
224
+ const value = args[i + 1];
225
+ absorb(value?.startsWith("-") ? undefined : value);
226
+ i++;
227
+ } else if (arg.startsWith(`${SETTINGS_FLAG}=`)) {
228
+ absorb(arg.slice(SETTINGS_FLAG.length + 1));
229
+ } else {
230
+ passthrough.push(arg);
231
+ }
232
+ }
233
+ return passthrough;
234
+ });
235
+ for (const entry of claudeFlagSettings().claudeMdExcludes)
236
+ excludes.add(entry);
237
+ return { argLists: stripped, settings: { ...merged, claudeMdExcludes: [...excludes] } };
238
+ }
239
+
170
240
  // src/providers/claude-session-events.ts
171
241
  init_secret_scrubber();
172
242
  function finiteNumber(value) {
@@ -593,7 +663,7 @@ async function resolveClaudeTrustDirs(cwd) {
593
663
  "core.worktree"
594
664
  ]).then((r) => r.stdout.trim(), () => "");
595
665
  if (configured)
596
- main = resolve(path, configured);
666
+ main = resolve2(path, configured);
597
667
  main = await realpath(main);
598
668
  if (await stat(join(main, ".git")).then(() => true, () => false)) {
599
669
  if (!dirs.includes(main))
@@ -782,6 +852,7 @@ class ClaudeSession {
782
852
  harnessVariantMeta;
783
853
  queueSteeringSupported;
784
854
  runSessionSummary;
855
+ flagSettings;
785
856
  proc;
786
857
  stdinWriter;
787
858
  listeners = [];
@@ -797,7 +868,7 @@ class ClaudeSession {
797
868
  transcript;
798
869
  backgroundKeepalive;
799
870
  deliverSteering;
800
- constructor(config, model, taskFilePath, taskFileKey, sessionMcpConfig = null, claudeBinaryArgv = ["claude"], systemPromptFile = null, harnessVariant, harnessVariantMeta, queueSteeringSupported = false, runSessionSummary = runStopHookSessionSummarySubprocess) {
871
+ constructor(config, model, taskFilePath, taskFileKey, sessionMcpConfig = null, claudeBinaryArgv = ["claude"], systemPromptFile = null, harnessVariant, harnessVariantMeta, queueSteeringSupported = false, runSessionSummary = runStopHookSessionSummarySubprocess, flagSettings = claudeFlagSettings()) {
801
872
  this.config = config;
802
873
  this.model = model;
803
874
  this.sessionMcpConfig = sessionMcpConfig;
@@ -806,6 +877,7 @@ class ClaudeSession {
806
877
  this.harnessVariantMeta = harnessVariantMeta;
807
878
  this.queueSteeringSupported = queueSteeringSupported;
808
879
  this.runSessionSummary = runSessionSummary;
880
+ this.flagSettings = flagSettings;
809
881
  this.taskFileKey = taskFileKey;
810
882
  this.contextWindowSize = getContextWindowSize(model);
811
883
  this.systemPromptFile = systemPromptFile;
@@ -885,7 +957,9 @@ class ClaudeSession {
885
957
  "--dangerously-skip-permissions",
886
958
  "--allow-dangerously-skip-permissions",
887
959
  "--permission-mode",
888
- "bypassPermissions"
960
+ "bypassPermissions",
961
+ "--settings",
962
+ JSON.stringify(this.flagSettings)
889
963
  ];
890
964
  if (this.queueSteeringSupported) {
891
965
  cmd.push("--input-format", "stream-json");
@@ -1116,7 +1190,7 @@ class ClaudeAdapter {
1116
1190
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
1117
1191
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
1118
1192
  }
1119
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-gsfsh662.js") : undefined;
1193
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-4whxere4.js") : undefined;
1120
1194
  claudeSdk?.validateClaudeSdkAdditionalArgs([
1121
1195
  ...claudeBinaryArgv.slice(1),
1122
1196
  ...config.additionalArgs ?? []
@@ -1125,7 +1199,14 @@ class ClaudeAdapter {
1125
1199
  console.warn(`\x1B[33m[claude]\x1B[0m SWARM_USE_CLAUDE_BRIDGE is set but no CLAUDE_CODE_OAUTH_TOKEN is present — falling back to stock 'claude'. claude-bridge requires a subscription/OAuth token (it forwards only the OAuth token to claude and strips ANTHROPIC_*); API-key billing is identical headless vs interactive, so the bridge isn't needed.`);
1126
1200
  }
1127
1201
  const isLegacyBridgeCompat = isLegacyClaudeBridgeCompatBinary(claudeBinaryRaw);
1128
- const effectiveClaudeBinaryArgv = useClaudeBridge ? withClaudeBridgeAuthArgs(claudeBinaryArgv, sourceEnv) : claudeBinaryArgv;
1202
+ const [claudeExecutable = "claude", ...claudePrefixArgs] = useClaudeBridge ? withClaudeBridgeAuthArgs(claudeBinaryArgv, sourceEnv) : claudeBinaryArgv;
1203
+ const {
1204
+ argLists: [prefixArgs = [], additionalArgs = []],
1205
+ settings: flagSettings
1206
+ } = mergeClaudeSettingsArgs([claudePrefixArgs, config.additionalArgs ?? []], config.cwd);
1207
+ const effectiveClaudeBinaryArgv = [claudeExecutable, ...prefixArgs];
1208
+ sessionConfig.additionalArgs = additionalArgs;
1209
+ const flagSettingsArgs = ["--settings", JSON.stringify(flagSettings)];
1129
1210
  const isInteractiveTmuxClaude = isLegacyBridgeCompat || useClaudeBridge;
1130
1211
  const configuredClaudeBinaryRaw = resolveClaudeBinary(sourceEnv);
1131
1212
  if (isLegacyClaudeBridgeCompatBinary(configuredClaudeBinaryRaw)) {
@@ -1170,7 +1251,7 @@ class ClaudeAdapter {
1170
1251
  const queueSteeringOverride = resolveClaudeQueueSteeringOverride(sourceEnv);
1171
1252
  let harnessVersion;
1172
1253
  try {
1173
- const probe = registerProcessGroup(Bun.spawn([...effectiveClaudeBinaryArgv, "--version"], {
1254
+ const probe = registerProcessGroup(Bun.spawn([...effectiveClaudeBinaryArgv, ...flagSettingsArgs, "--version"], {
1174
1255
  detached: detachedProcessGroup,
1175
1256
  env: sourceEnv,
1176
1257
  stdin: "ignore",
@@ -1206,6 +1287,7 @@ ${stderr}`.trim();
1206
1287
  taskFileKey,
1207
1288
  sessionMcpConfig,
1208
1289
  claudeBinaryArgv: effectiveClaudeBinaryArgv,
1290
+ settings: flagSettings,
1209
1291
  systemPromptFile,
1210
1292
  harnessVariant,
1211
1293
  harnessVariantMeta,
@@ -1213,7 +1295,7 @@ ${stderr}`.trim();
1213
1295
  runSessionSummary: this.runSessionSummary
1214
1296
  });
1215
1297
  }
1216
- return new ClaudeSession(sessionConfig, model, taskFilePath, taskFileKey, sessionMcpConfig, effectiveClaudeBinaryArgv, systemPromptFile, harnessVariant, harnessVariantMeta, queueSteeringSupported, this.runSessionSummary);
1298
+ return new ClaudeSession(sessionConfig, model, taskFilePath, taskFileKey, sessionMcpConfig, effectiveClaudeBinaryArgv, systemPromptFile, harnessVariant, harnessVariantMeta, queueSteeringSupported, this.runSessionSummary, flagSettings);
1217
1299
  }
1218
1300
  async canResume(_sessionId) {
1219
1301
  return true;
@@ -13,7 +13,7 @@ import {
13
13
  parseClaudeMdPendingRecord,
14
14
  planClaudeMdSync,
15
15
  withFileLock
16
- } from "./cli-nyhb1r6x.js";
16
+ } from "./cli-r4fqfpwf.js";
17
17
  import {
18
18
  init_secret_scrubber,
19
19
  scrubSecrets
@@ -8,7 +8,7 @@ import {
8
8
  resolveValidationPort,
9
9
  systemOneRetryViolations,
10
10
  systemOneUnresolvedError
11
- } from "./cli-aspcaef3.js";
11
+ } from "./cli-6r2f7edk.js";
12
12
  import {
13
13
  WorkflowReplayStateError,
14
14
  cancelPendingApprovalRequestsForRun,
@@ -51,7 +51,7 @@ import {
51
51
  telemetry,
52
52
  updateWorkflowRun,
53
53
  updateWorkflowRunStep
54
- } from "./cli-tgpfnm6r.js";
54
+ } from "./cli-fmhj1ehj.js";
55
55
  import {
56
56
  RetryPolicySchema,
57
57
  init_types
@@ -317,7 +317,7 @@ async function notifyAutomationPreflightFailure(preflight) {
317
317
  return;
318
318
  }
319
319
  try {
320
- const { getSlackApp } = await import("./app-wmf0m843.js");
320
+ const { getSlackApp } = await import("./app-km9qnv2f.js");
321
321
  const app = getSlackApp();
322
322
  if (!app) {
323
323
  console.warn("[Automation Preflight] Slack not available, cannot send notification");
@@ -1458,7 +1458,7 @@ async function runClaimedStep(def, runId, ctx, node, registry, existingStep, ste
1458
1458
  if ("async" in result && result.async) {
1459
1459
  const waiting = await checkpointStepWaiting(runId, stepId, ctx);
1460
1460
  if (waiting && result.waitFor === "workflow.child.finished") {
1461
- const { resumeFromChildRun } = await import("./resume-gw4a2c6v.js");
1461
+ const { resumeFromChildRun } = await import("./resume-42stcaz0.js");
1462
1462
  await resumeFromChildRun(stepId, registry);
1463
1463
  }
1464
1464
  return { outcome: waiting ? "waiting" : "completed", successors: [] };
@@ -22,7 +22,7 @@ import {
22
22
  upsertSwarmConfig,
23
23
  validateControllerTokenTtlDays,
24
24
  validateRuntimeTokenTtlHours
25
- } from "./cli-tgpfnm6r.js";
25
+ } from "./cli-fmhj1ehj.js";
26
26
  import {
27
27
  RuntimeControllerCreateSchema,
28
28
  RuntimeControllerUpdateSchema,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  seedPricingFromModelsDev
3
- } from "./cli-r8smj8b8.js";
3
+ } from "./cli-jpc4r224.js";
4
4
  import {
5
5
  ensureRbacSeedsSynced,
6
6
  init_rbac_roles
7
- } from "./cli-qsztpfry.js";
7
+ } from "./cli-anzdk0z4.js";
8
8
  import {
9
9
  getDb,
10
10
  init_db1 as init_db
11
- } from "./cli-tgpfnm6r.js";
11
+ } from "./cli-fmhj1ehj.js";
12
12
 
13
13
  // src/be/boot-seeds.ts
14
14
  init_db();
@@ -7,7 +7,7 @@ var package_default;
7
7
  var init_package = __esm(() => {
8
8
  package_default = {
9
9
  name: "@desplega.ai/agent-swarm",
10
- version: "1.172.0",
10
+ version: "1.173.0",
11
11
  description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
12
12
  keywords: [
13
13
  "agent-swarm.dev",
@@ -191,8 +191,8 @@ var init_package = __esm(() => {
191
191
  "@desplega/model-catalog": "workspace:*",
192
192
  "@desplega/model-routing": "workspace:*",
193
193
  "@faker-js/faker": "^10.4.0",
194
- "@opencode/plugin": "2.0.28",
195
- "@opencode/sdk": "2.0.28",
194
+ "@opencode/plugin": "2.0.29",
195
+ "@opencode/sdk": "2.0.29",
196
196
  "@oxlint/plugins": "1.78.0",
197
197
  "@types/bun": "latest",
198
198
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
@@ -212,7 +212,7 @@ var init_package = __esm(() => {
212
212
  dependencies: {
213
213
  "@agentclientprotocol/sdk": "1.8.0",
214
214
  "@ai-sdk/openai": "^3.0.41",
215
- "@anthropic-ai/claude-agent-sdk": "0.3.296",
215
+ "@anthropic-ai/claude-agent-sdk": "0.3.299",
216
216
  "@anthropic-ai/sdk": "^0.133.0",
217
217
  "@asteasolutions/zod-to-openapi": "^8.0.0",
218
218
  "@aws-sdk/client-bedrock": "3.1048.0",
@@ -36,7 +36,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
36
36
  import { tmpdir } from "node:os";
37
37
  import { join } from "node:path";
38
38
  init_secret_scrubber();
39
- var AMP_PACKAGE = "@ampcode/cli@0.0.1791878731-g2f7fd0";
39
+ var AMP_PACKAGE = "@ampcode/cli@0.0.1791979242-g144271";
40
40
  var AMP_MCP_SERVER_NAME = "agent-swarm";
41
41
  var AMP_PLUGIN_MODE_KEY = "agent-swarm";
42
42
  var AMP_LIVE_TEST_TIMEOUT_MS = 5000;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  DEFAULT_MODEL,
3
3
  resolveCredential
4
- } from "./cli-xczpdp9e.js";
4
+ } from "./cli-6thk4jz3.js";
5
5
  import {
6
6
  getSlackApp
7
- } from "./cli-9xsmdpdt.js";
7
+ } from "./cli-tcc4wd5d.js";
8
8
  import {
9
9
  claimApprovalCancellationNotification,
10
10
  completeApprovalCancellationNotificationClaim,
@@ -12,7 +12,7 @@ import {
12
12
  getTaskById,
13
13
  init_db1 as init_db,
14
14
  releaseApprovalCancellationNotificationClaim
15
- } from "./cli-tgpfnm6r.js";
15
+ } from "./cli-fmhj1ehj.js";
16
16
  import {
17
17
  TERMINAL_TASK_STATUSES,
18
18
  init_types
@@ -433,7 +433,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
433
433
  }
434
434
  if (notification.channel === "slack") {
435
435
  try {
436
- const { getSlackApp: getSlackApp2 } = await import("./app-wmf0m843.js");
436
+ const { getSlackApp: getSlackApp2 } = await import("./app-km9qnv2f.js");
437
437
  const slackApp = getSlackApp2();
438
438
  if (!slackApp) {
439
439
  console.warn("[HITL] Slack not initialized — cannot send notification");
@@ -7,7 +7,7 @@ import {
7
7
  builtinModels,
8
8
  normalizeRadiusGatewayUrl,
9
9
  registerBundledOAuthFlowLoaders
10
- } from "./cli-cceskcvt.js";
10
+ } from "./cli-b07hr3bt.js";
11
11
  import {
12
12
  oauthErrorHtml,
13
13
  oauthSuccessHtml