@desplega.ai/agent-swarm 1.151.0 → 1.152.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.
Files changed (108) hide show
  1. package/README.md +3 -1
  2. package/dist/{acp-adapter-ex8hzjfc.js → acp-adapter-4s7q25ft.js} +1 -1
  3. package/dist/{actions-2bgpyhww.js → actions-cs6rhmvc.js} +13 -13
  4. package/dist/{app-1706zhr1.js → app-j54aq0dj.js} +3 -3
  5. package/dist/{assistant-bavke5p7.js → assistant-w1pgn7vf.js} +14 -14
  6. package/dist/{boot-reembed-3cmrrmpa.js → boot-reembed-42vgkrrj.js} +4 -4
  7. package/dist/{boot-reembed-nafcmmmc.js → boot-reembed-smy30z32.js} +3 -3
  8. package/dist/{boot-scrub-logs-cd6a2sq0.js → boot-scrub-logs-b6s72fsw.js} +2 -2
  9. package/dist/{claude-adapter-wfp2gzvz.js → claude-adapter-fh7rmcj9.js} +3 -3
  10. package/dist/{claude-sdk-session-bht9jjak.js → claude-sdk-session-xhynatn9.js} +3 -3
  11. package/dist/{cli-f1wky6zp.js → cli-3g61md6v.js} +1 -1
  12. package/dist/{cli-a1z3h107.js → cli-3pft2z6r.js} +4 -4
  13. package/dist/{cli-5tpgq60f.js → cli-72tgtzr1.js} +152 -23
  14. package/dist/{cli-0qb1z6s2.js → cli-7bwaerjt.js} +1 -1
  15. package/dist/{cli-czjtgfys.js → cli-b4dyetqt.js} +2 -2
  16. package/dist/{cli-s14agm5s.js → cli-bdt7w021.js} +12 -3
  17. package/dist/{cli-sjaae6ff.js → cli-dsyg66vt.js} +3 -3
  18. package/dist/{cli-2tbvf1z1.js → cli-ftdjz1mk.js} +8 -8
  19. package/dist/{cli-zkxymas5.js → cli-gfez0qmk.js} +1 -1
  20. package/dist/{cli-q88st9aj.js → cli-gxf2ebyz.js} +2 -2
  21. package/dist/{cli-ppm4975n.js → cli-jtvs5m8q.js} +1 -1
  22. package/dist/{cli-7tgcstn2.js → cli-jytf5mw9.js} +2 -2
  23. package/dist/{cli-g69fdc9g.js → cli-kf8qp2vf.js} +2 -2
  24. package/dist/{cli-5jd2z7av.js → cli-ks8a1cgq.js} +6 -2
  25. package/dist/{cli-gjyvhmmh.js → cli-ng4q6a9t.js} +5 -5
  26. package/dist/{cli-3v9xhjcn.js → cli-sakxd2rg.js} +2 -2
  27. package/dist/{cli-frcta2w4.js → cli-sqmh7jj1.js} +1 -1
  28. package/dist/{cli-vwm416m6.js → cli-v9sk4dzw.js} +1 -1
  29. package/dist/{cli-j9xczhaq.js → cli-vbk025fm.js} +1 -1
  30. package/dist/{cli-r2q6pevn.js → cli-wfve107r.js} +43 -21
  31. package/dist/{cli-9004vfdf.js → cli-y8tayczk.js} +2 -2
  32. package/dist/{cli-gbfwcd3k.js → cli-zfzznn7c.js} +7 -6
  33. package/dist/cli.js +11 -11
  34. package/dist/{codex-adapter-jjjk8w4m.js → codex-adapter-k6yq95sn.js} +2 -2
  35. package/dist/{codex-session-runner-nd6ayxkx.js → codex-session-runner-3rp84pk8.js} +2 -2
  36. package/dist/{commands-9v4psyq1.js → commands-pbr5jzy5.js} +2 -2
  37. package/dist/{db-wnt58tpe.js → db-z0xaa59a.js} +2 -2
  38. package/dist/{dispatcher-05jh1aqk.js → dispatcher-pwpgsj0x.js} +12 -12
  39. package/dist/{handlers-tw90pkh5.js → handlers-5mzk4mbg.js} +15 -15
  40. package/dist/{hook-sxe3r349.js → hook-8bz33zee.js} +1 -1
  41. package/dist/{hook-123e2scb.js → hook-kbh84zb1.js} +2 -2
  42. package/dist/{http-ecsar8ez.js → http-pppxg5vr.js} +100 -36
  43. package/dist/{index-hw26vj40.js → index-68bd9b5f.js} +12 -12
  44. package/dist/{index-16js521z.js → index-k1hq1qt6.js} +8 -8
  45. package/dist/{index-zj518gf9.js → index-mjpxsr6k.js} +13 -13
  46. package/dist/{index-ymn7em0p.js → index-y0te09pn.js} +3 -3
  47. package/dist/{index-nnrbpcjp.js → index-z0zwjtkn.js} +12 -12
  48. package/dist/{keepalive-asqtcm4y.js → keepalive-xvmwnh1d.js} +4 -4
  49. package/dist/{lead-xbfr7fvt.js → lead-pf8nvxt8.js} +16 -16
  50. package/dist/{maintenance-qma55qvw.js → maintenance-jk4q0wgg.js} +4 -4
  51. package/dist/{oauth-refresh-sweep-3s04c6qw.js → oauth-refresh-sweep-6207x9sj.js} +3 -3
  52. package/dist/{onboard-drskd386.js → onboard-b0csgm0q.js} +2 -2
  53. package/dist/{otel-impl-943c96er.js → otel-impl-b6rfehth.js} +1 -1
  54. package/dist/{pricing-refresh-mx51az05.js → pricing-refresh-4e201wtd.js} +4 -4
  55. package/dist/{rbac-roles-wcmrg6sv.js → rbac-roles-mkc5n5qa.js} +4 -4
  56. package/dist/{rbac-roles-78baecqd.js → rbac-roles-zp6e4geh.js} +3 -3
  57. package/dist/{render-v2-8zjntgf5.js → render-v2-4fazz9tf.js} +3 -3
  58. package/dist/{seed-pricing-jqjs6cws.js → seed-pricing-thxpn9vn.js} +3 -3
  59. package/dist/{setup-4pks0vfk.js → setup-wb0z8cat.js} +2 -2
  60. package/dist/{work-objects-wangt792.js → work-objects-h3498kwe.js} +18 -17
  61. package/dist/{worker-p2mr422x.js → worker-2m2tzxp3.js} +16 -16
  62. package/openapi.json +5 -5
  63. package/package.json +1 -1
  64. package/src/agentmail/inbound-archive.ts +71 -0
  65. package/src/agentmail/types.ts +2 -0
  66. package/src/be/db.ts +1 -1
  67. package/src/be/scripts/typecheck.ts +4 -0
  68. package/src/be/swarm-config-guard.ts +7 -1
  69. package/src/extensions/lifecycle.ts +26 -4
  70. package/src/http/extensions.ts +8 -3
  71. package/src/http/webhooks.ts +13 -5
  72. package/src/rbac/legacy-policy.ts +13 -1
  73. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  74. package/src/scripts-runtime/types/stdlib.d.ts +4 -0
  75. package/src/scripts-runtime/types/swarm-sdk.d.ts +4 -0
  76. package/src/server.ts +12 -0
  77. package/src/slack/render-v2.ts +10 -4
  78. package/src/slack/responses.ts +7 -4
  79. package/src/slack/task-output.ts +21 -0
  80. package/src/slack/watcher.ts +3 -2
  81. package/src/slack/work-objects.ts +2 -1
  82. package/src/tests/agentmail-inbound-archive.test.ts +418 -0
  83. package/src/tests/extensions-example-mcp-install.test.ts +2 -2
  84. package/src/tests/extensions-http.test.ts +84 -3
  85. package/src/tests/extensions-lead-equivalence.test.ts +21 -0
  86. package/src/tests/extensions-mcp-tools.test.ts +111 -3
  87. package/src/tests/fixtures/store-progress-malformed-output.json +4 -0
  88. package/src/tests/rbac-admission-e2e.test.ts +35 -4
  89. package/src/tests/rbac-e2e-helpers.ts +18 -0
  90. package/src/tests/rbac-engine.test.ts +2 -2
  91. package/src/tests/rbac-mcp-admission-e2e.test.ts +22 -4
  92. package/src/tests/reload-config.test.ts +17 -0
  93. package/src/tests/scripts-only-gating.test.ts +4 -0
  94. package/src/tests/slack-render-v2.test.ts +24 -2
  95. package/src/tests/slack-task-output.test.ts +36 -0
  96. package/src/tests/store-progress-attachments-handler.test.ts +100 -1
  97. package/src/tests/swarm-config-reserved-keys.test.ts +6 -1
  98. package/src/tests/tool-annotations.test.ts +1 -1
  99. package/src/tools/extension-activate-version.ts +38 -0
  100. package/src/tools/extension-common.ts +2 -1
  101. package/src/tools/extension-delete.ts +29 -0
  102. package/src/tools/extension-disable.ts +36 -0
  103. package/src/tools/extension-enable.ts +36 -0
  104. package/src/tools/extension-install.ts +2 -2
  105. package/src/tools/store-progress.ts +30 -0
  106. package/src/tools/tool-config.ts +5 -1
  107. package/templates/skills/agent-browser/SKILL.md +84 -0
  108. package/templates/skills/agent-browser/content.md +21 -0
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runAgent
3
- } from "./cli-2tbvf1z1.js";
3
+ } from "./cli-ftdjz1mk.js";
4
4
  import"./cli-pgj4a5fb.js";
5
5
  import"./cli-kj76p1ez.js";
6
6
  import"./cli-9b13ggd1.js";
7
7
  import"./cli-d3p82erb.js";
8
- import"./cli-3v9xhjcn.js";
9
- import"./cli-frcta2w4.js";
8
+ import"./cli-sakxd2rg.js";
9
+ import"./cli-sqmh7jj1.js";
10
10
  import"./cli-wbyk465z.js";
11
11
  import"./cli-tng3131n.js";
12
12
  import"./cli-5bfdm1ah.js";
13
- import"./cli-vwm416m6.js";
13
+ import"./cli-v9sk4dzw.js";
14
14
  import"./cli-hsxj0yar.js";
15
15
  import"./cli-r94z9p1z.js";
16
16
  import"./cli-b5b30yzk.js";
@@ -25,34 +25,34 @@ import"./cli-eree7rnv.js";
25
25
  import"./cli-4yc5d8fk.js";
26
26
  import {
27
27
  getEnabledCapabilities
28
- } from "./cli-5tpgq60f.js";
28
+ } from "./cli-72tgtzr1.js";
29
29
  import"./cli-0z2v4nhw.js";
30
30
  import"./cli-4wppfkcm.js";
31
31
  import"./cli-e7d20cty.js";
32
32
  import"./cli-re8z5p8p.js";
33
33
  import"./cli-3dpj7atn.js";
34
- import"./cli-g69fdc9g.js";
35
- import"./cli-7tgcstn2.js";
36
- import"./cli-gbfwcd3k.js";
37
- import"./cli-sjaae6ff.js";
34
+ import"./cli-kf8qp2vf.js";
35
+ import"./cli-jytf5mw9.js";
36
+ import"./cli-zfzznn7c.js";
37
+ import"./cli-dsyg66vt.js";
38
38
  import"./cli-epan13p1.js";
39
39
  import"./cli-y89t4nca.js";
40
40
  import"./cli-f14fvzag.js";
41
41
  import"./cli-fad8m16k.js";
42
- import"./cli-j9xczhaq.js";
43
- import"./cli-0qb1z6s2.js";
42
+ import"./cli-vbk025fm.js";
43
+ import"./cli-7bwaerjt.js";
44
44
  import"./cli-bsakbbkm.js";
45
- import"./cli-q88st9aj.js";
45
+ import"./cli-gxf2ebyz.js";
46
46
  import"./cli-51tf7ac3.js";
47
- import"./cli-r2q6pevn.js";
47
+ import"./cli-wfve107r.js";
48
48
  import"./cli-q51yprfq.js";
49
49
  import"./cli-yatxqynm.js";
50
- import"./cli-ppm4975n.js";
50
+ import"./cli-jtvs5m8q.js";
51
51
  import"./cli-fm4ytsdk.js";
52
52
  import"./cli-aehm1rbq.js";
53
53
  import"./cli-2658f6at.js";
54
54
  import"./cli-jsp14b6c.js";
55
- import"./cli-s14agm5s.js";
55
+ import"./cli-bdt7w021.js";
56
56
  import"./cli-ht5rs63n.js";
57
57
  import"./cli-z61ykvam.js";
58
58
  import"./cli-dv6cdjs2.js";
@@ -60,7 +60,7 @@ import"./cli-c2mk1kgf.js";
60
60
  import"./cli-ej6gbxfb.js";
61
61
  import"./cli-sd0mxa3c.js";
62
62
  import"./cli-w5e1d1vv.js";
63
- import"./cli-zkxymas5.js";
63
+ import"./cli-gfez0qmk.js";
64
64
  import"./cli-r2ap2czm.js";
65
65
  import"./cli-pzxba7gw.js";
66
66
  import"./cli-f7kvq46p.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  reembedAllScripts
3
- } from "./cli-q88st9aj.js";
4
- import"./cli-ppm4975n.js";
3
+ } from "./cli-gxf2ebyz.js";
4
+ import"./cli-jtvs5m8q.js";
5
5
  import"./cli-fm4ytsdk.js";
6
6
  import"./cli-aehm1rbq.js";
7
7
  import"./cli-2658f6at.js";
8
- import"./cli-s14agm5s.js";
8
+ import"./cli-bdt7w021.js";
9
9
  import"./cli-ht5rs63n.js";
10
10
  import"./cli-z61ykvam.js";
11
11
  import"./cli-dv6cdjs2.js";
@@ -13,7 +13,7 @@ import"./cli-c2mk1kgf.js";
13
13
  import"./cli-ej6gbxfb.js";
14
14
  import"./cli-sd0mxa3c.js";
15
15
  import"./cli-w5e1d1vv.js";
16
- import"./cli-zkxymas5.js";
16
+ import"./cli-gfez0qmk.js";
17
17
  import"./cli-r2ap2czm.js";
18
18
  import"./cli-zf8jjwex.js";
19
19
  import"./cli-bc05qbss.js";
@@ -2,8 +2,8 @@ import {
2
2
  forceRefreshAuthorizationOrThrow,
3
3
  getAuthorizationById,
4
4
  listAuthorizationSweepRows
5
- } from "./cli-j9xczhaq.js";
6
- import"./cli-s14agm5s.js";
5
+ } from "./cli-vbk025fm.js";
6
+ import"./cli-bdt7w021.js";
7
7
  import"./cli-ht5rs63n.js";
8
8
  import"./cli-z61ykvam.js";
9
9
  import"./cli-dv6cdjs2.js";
@@ -11,7 +11,7 @@ import"./cli-c2mk1kgf.js";
11
11
  import"./cli-ej6gbxfb.js";
12
12
  import"./cli-sd0mxa3c.js";
13
13
  import"./cli-w5e1d1vv.js";
14
- import"./cli-zkxymas5.js";
14
+ import"./cli-gfez0qmk.js";
15
15
  import {
16
16
  init_secret_scrubber,
17
17
  scrubSecrets
@@ -3,7 +3,7 @@ import {
3
3
  createDefaultMcpJson,
4
4
  createDefaultSettingsLocal,
5
5
  createHooksConfig
6
- } from "./cli-f1wky6zp.js";
6
+ } from "./cli-3g61md6v.js";
7
7
  import {
8
8
  require_jsx_dev_runtime
9
9
  } from "./cli-s2qjdd6z.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  init_package,
15
15
  package_default
16
- } from "./cli-zkxymas5.js";
16
+ } from "./cli-gfez0qmk.js";
17
17
  import {
18
18
  Box_default,
19
19
  Select,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  init_package,
6
6
  package_default
7
- } from "./cli-zkxymas5.js";
7
+ } from "./cli-gfez0qmk.js";
8
8
  import {
9
9
  init_secret_scrubber,
10
10
  scrubSecrets
@@ -2,9 +2,9 @@ import {
2
2
  PRICING_REFRESH_INTERVAL_MS,
3
3
  refreshPricingFromModelsDev,
4
4
  startPricingRefreshLoop
5
- } from "./cli-g69fdc9g.js";
6
- import"./cli-0qb1z6s2.js";
7
- import"./cli-s14agm5s.js";
5
+ } from "./cli-kf8qp2vf.js";
6
+ import"./cli-7bwaerjt.js";
7
+ import"./cli-bdt7w021.js";
8
8
  import"./cli-ht5rs63n.js";
9
9
  import"./cli-z61ykvam.js";
10
10
  import"./cli-dv6cdjs2.js";
@@ -12,7 +12,7 @@ import"./cli-c2mk1kgf.js";
12
12
  import"./cli-ej6gbxfb.js";
13
13
  import"./cli-sd0mxa3c.js";
14
14
  import"./cli-w5e1d1vv.js";
15
- import"./cli-zkxymas5.js";
15
+ import"./cli-gfez0qmk.js";
16
16
  import"./cli-r2ap2czm.js";
17
17
  import"./cli-zf8jjwex.js";
18
18
  import"./cli-bc05qbss.js";
@@ -7,9 +7,9 @@ import {
7
7
  getUserGrant,
8
8
  listUserRoles,
9
9
  runRbacCliCommand
10
- } from "./cli-7tgcstn2.js";
11
- import"./cli-gbfwcd3k.js";
12
- import"./cli-s14agm5s.js";
10
+ } from "./cli-jytf5mw9.js";
11
+ import"./cli-zfzznn7c.js";
12
+ import"./cli-bdt7w021.js";
13
13
  import"./cli-ht5rs63n.js";
14
14
  import"./cli-z61ykvam.js";
15
15
  import"./cli-dv6cdjs2.js";
@@ -17,7 +17,7 @@ import"./cli-c2mk1kgf.js";
17
17
  import"./cli-ej6gbxfb.js";
18
18
  import"./cli-sd0mxa3c.js";
19
19
  import"./cli-w5e1d1vv.js";
20
- import"./cli-zkxymas5.js";
20
+ import"./cli-gfez0qmk.js";
21
21
  import"./cli-r2ap2czm.js";
22
22
  import"./cli-zf8jjwex.js";
23
23
  import"./cli-bc05qbss.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  PermissionVerbSchema
3
- } from "./cli-gbfwcd3k.js";
3
+ } from "./cli-zfzznn7c.js";
4
4
  import {
5
5
  getDb,
6
6
  getDbClient,
7
7
  init_db
8
- } from "./cli-s14agm5s.js";
8
+ } from "./cli-bdt7w021.js";
9
9
  import"./cli-ht5rs63n.js";
10
10
  import"./cli-z61ykvam.js";
11
11
  import"./cli-dv6cdjs2.js";
@@ -16,7 +16,7 @@ import {
16
16
  } from "./cli-ej6gbxfb.js";
17
17
  import"./cli-sd0mxa3c.js";
18
18
  import"./cli-w5e1d1vv.js";
19
- import"./cli-zkxymas5.js";
19
+ import"./cli-gfez0qmk.js";
20
20
  import"./cli-r2ap2czm.js";
21
21
  import"./cli-zf8jjwex.js";
22
22
  import"./cli-bc05qbss.js";
@@ -9,11 +9,11 @@ import {
9
9
  processSlackRenderV2,
10
10
  renderThreadTree,
11
11
  streamOutcomeCard
12
- } from "./cli-r2q6pevn.js";
12
+ } from "./cli-wfve107r.js";
13
13
  import"./cli-q51yprfq.js";
14
14
  import"./cli-yatxqynm.js";
15
15
  import"./cli-2658f6at.js";
16
- import"./cli-s14agm5s.js";
16
+ import"./cli-bdt7w021.js";
17
17
  import"./cli-ht5rs63n.js";
18
18
  import"./cli-z61ykvam.js";
19
19
  import"./cli-dv6cdjs2.js";
@@ -21,7 +21,7 @@ import"./cli-c2mk1kgf.js";
21
21
  import"./cli-ej6gbxfb.js";
22
22
  import"./cli-sd0mxa3c.js";
23
23
  import"./cli-w5e1d1vv.js";
24
- import"./cli-zkxymas5.js";
24
+ import"./cli-gfez0qmk.js";
25
25
  import"./cli-r2ap2czm.js";
26
26
  import"./cli-pzxba7gw.js";
27
27
  import"./cli-zf8jjwex.js";
@@ -2,8 +2,8 @@ import {
2
2
  buildModelsDevSeedRows,
3
3
  buildPricingSeedRows,
4
4
  seedPricingFromModelsDev
5
- } from "./cli-0qb1z6s2.js";
6
- import"./cli-s14agm5s.js";
5
+ } from "./cli-7bwaerjt.js";
6
+ import"./cli-bdt7w021.js";
7
7
  import"./cli-ht5rs63n.js";
8
8
  import"./cli-z61ykvam.js";
9
9
  import"./cli-dv6cdjs2.js";
@@ -11,7 +11,7 @@ import"./cli-c2mk1kgf.js";
11
11
  import"./cli-ej6gbxfb.js";
12
12
  import"./cli-sd0mxa3c.js";
13
13
  import"./cli-w5e1d1vv.js";
14
- import"./cli-zkxymas5.js";
14
+ import"./cli-gfez0qmk.js";
15
15
  import"./cli-r2ap2czm.js";
16
16
  import"./cli-zf8jjwex.js";
17
17
  import"./cli-bc05qbss.js";
@@ -4,14 +4,14 @@ import {
4
4
  createDefaultMcpJson,
5
5
  createDefaultSettingsLocal,
6
6
  createHooksConfig
7
- } from "./cli-f1wky6zp.js";
7
+ } from "./cli-3g61md6v.js";
8
8
  import {
9
9
  require_jsx_dev_runtime
10
10
  } from "./cli-s2qjdd6z.js";
11
11
  import {
12
12
  getApiKey
13
13
  } from "./cli-f14fvzag.js";
14
- import"./cli-zkxymas5.js";
14
+ import"./cli-gfez0qmk.js";
15
15
  import {
16
16
  Box_default,
17
17
  Spinner,
@@ -1,33 +1,34 @@
1
1
  import {
2
2
  isUserAllowed
3
- } from "./cli-gjyvhmmh.js";
4
- import"./cli-a1z3h107.js";
5
- import"./cli-czjtgfys.js";
6
- import"./cli-5tpgq60f.js";
3
+ } from "./cli-ng4q6a9t.js";
4
+ import"./cli-3pft2z6r.js";
5
+ import"./cli-b4dyetqt.js";
6
+ import"./cli-72tgtzr1.js";
7
7
  import"./cli-0z2v4nhw.js";
8
8
  import"./cli-4wppfkcm.js";
9
9
  import"./cli-e7d20cty.js";
10
10
  import"./cli-re8z5p8p.js";
11
11
  import"./cli-3dpj7atn.js";
12
- import"./cli-g69fdc9g.js";
13
- import"./cli-7tgcstn2.js";
14
- import"./cli-gbfwcd3k.js";
15
- import"./cli-sjaae6ff.js";
12
+ import"./cli-kf8qp2vf.js";
13
+ import"./cli-jytf5mw9.js";
14
+ import"./cli-zfzznn7c.js";
15
+ import"./cli-dsyg66vt.js";
16
16
  import"./cli-epan13p1.js";
17
17
  import"./cli-y89t4nca.js";
18
18
  import"./cli-f14fvzag.js";
19
19
  import"./cli-fad8m16k.js";
20
- import"./cli-j9xczhaq.js";
21
- import"./cli-0qb1z6s2.js";
20
+ import"./cli-vbk025fm.js";
21
+ import"./cli-7bwaerjt.js";
22
22
  import"./cli-bsakbbkm.js";
23
- import"./cli-q88st9aj.js";
23
+ import"./cli-gxf2ebyz.js";
24
24
  import"./cli-51tf7ac3.js";
25
25
  import {
26
- getTaskUrl
27
- } from "./cli-r2q6pevn.js";
26
+ getTaskUrl,
27
+ slackTaskOutput
28
+ } from "./cli-wfve107r.js";
28
29
  import"./cli-q51yprfq.js";
29
30
  import"./cli-yatxqynm.js";
30
- import"./cli-ppm4975n.js";
31
+ import"./cli-jtvs5m8q.js";
31
32
  import"./cli-fm4ytsdk.js";
32
33
  import"./cli-aehm1rbq.js";
33
34
  import"./cli-2658f6at.js";
@@ -36,7 +37,7 @@ import {
36
37
  getAgentById,
37
38
  getTaskById,
38
39
  init_db
39
- } from "./cli-s14agm5s.js";
40
+ } from "./cli-bdt7w021.js";
40
41
  import"./cli-ht5rs63n.js";
41
42
  import"./cli-z61ykvam.js";
42
43
  import"./cli-dv6cdjs2.js";
@@ -47,7 +48,7 @@ import {
47
48
  } from "./cli-ej6gbxfb.js";
48
49
  import"./cli-sd0mxa3c.js";
49
50
  import"./cli-w5e1d1vv.js";
50
- import"./cli-zkxymas5.js";
51
+ import"./cli-gfez0qmk.js";
51
52
  import"./cli-r2ap2czm.js";
52
53
  import"./cli-pzxba7gw.js";
53
54
  import"./cli-f7kvq46p.js";
@@ -86,7 +87,7 @@ async function getDetails(event, client) {
86
87
  if (task.slackChannelId !== event.channel)
87
88
  return { error: { status: "restricted" } };
88
89
  const agent = task.agentId ? await getAgentById(task.agentId) : null;
89
- const result = task.output || task.failureReason || task.progress;
90
+ const result = slackTaskOutput(task) || task.failureReason || task.progress;
90
91
  return {
91
92
  metadata: {
92
93
  entity_type: "slack#/entities/task",
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runAgent
3
- } from "./cli-2tbvf1z1.js";
3
+ } from "./cli-ftdjz1mk.js";
4
4
  import"./cli-pgj4a5fb.js";
5
5
  import"./cli-kj76p1ez.js";
6
6
  import"./cli-9b13ggd1.js";
7
7
  import"./cli-d3p82erb.js";
8
- import"./cli-3v9xhjcn.js";
9
- import"./cli-frcta2w4.js";
8
+ import"./cli-sakxd2rg.js";
9
+ import"./cli-sqmh7jj1.js";
10
10
  import"./cli-wbyk465z.js";
11
11
  import"./cli-tng3131n.js";
12
12
  import"./cli-5bfdm1ah.js";
13
- import"./cli-vwm416m6.js";
13
+ import"./cli-v9sk4dzw.js";
14
14
  import"./cli-hsxj0yar.js";
15
15
  import"./cli-r94z9p1z.js";
16
16
  import"./cli-b5b30yzk.js";
@@ -25,34 +25,34 @@ import"./cli-eree7rnv.js";
25
25
  import"./cli-4yc5d8fk.js";
26
26
  import {
27
27
  getEnabledCapabilities
28
- } from "./cli-5tpgq60f.js";
28
+ } from "./cli-72tgtzr1.js";
29
29
  import"./cli-0z2v4nhw.js";
30
30
  import"./cli-4wppfkcm.js";
31
31
  import"./cli-e7d20cty.js";
32
32
  import"./cli-re8z5p8p.js";
33
33
  import"./cli-3dpj7atn.js";
34
- import"./cli-g69fdc9g.js";
35
- import"./cli-7tgcstn2.js";
36
- import"./cli-gbfwcd3k.js";
37
- import"./cli-sjaae6ff.js";
34
+ import"./cli-kf8qp2vf.js";
35
+ import"./cli-jytf5mw9.js";
36
+ import"./cli-zfzznn7c.js";
37
+ import"./cli-dsyg66vt.js";
38
38
  import"./cli-epan13p1.js";
39
39
  import"./cli-y89t4nca.js";
40
40
  import"./cli-f14fvzag.js";
41
41
  import"./cli-fad8m16k.js";
42
- import"./cli-j9xczhaq.js";
43
- import"./cli-0qb1z6s2.js";
42
+ import"./cli-vbk025fm.js";
43
+ import"./cli-7bwaerjt.js";
44
44
  import"./cli-bsakbbkm.js";
45
- import"./cli-q88st9aj.js";
45
+ import"./cli-gxf2ebyz.js";
46
46
  import"./cli-51tf7ac3.js";
47
- import"./cli-r2q6pevn.js";
47
+ import"./cli-wfve107r.js";
48
48
  import"./cli-q51yprfq.js";
49
49
  import"./cli-yatxqynm.js";
50
- import"./cli-ppm4975n.js";
50
+ import"./cli-jtvs5m8q.js";
51
51
  import"./cli-fm4ytsdk.js";
52
52
  import"./cli-aehm1rbq.js";
53
53
  import"./cli-2658f6at.js";
54
54
  import"./cli-jsp14b6c.js";
55
- import"./cli-s14agm5s.js";
55
+ import"./cli-bdt7w021.js";
56
56
  import"./cli-ht5rs63n.js";
57
57
  import"./cli-z61ykvam.js";
58
58
  import"./cli-dv6cdjs2.js";
@@ -60,7 +60,7 @@ import"./cli-c2mk1kgf.js";
60
60
  import"./cli-ej6gbxfb.js";
61
61
  import"./cli-sd0mxa3c.js";
62
62
  import"./cli-w5e1d1vv.js";
63
- import"./cli-zkxymas5.js";
63
+ import"./cli-gfez0qmk.js";
64
64
  import"./cli-r2ap2czm.js";
65
65
  import"./cli-pzxba7gw.js";
66
66
  import"./cli-f7kvq46p.js";
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Agent Swarm API",
5
- "version": "1.151.0",
5
+ "version": "1.152.1",
6
6
  "description": "Multi-agent orchestration API for Claude Code, Codex, and Gemini CLI. Enables task distribution, agent communication, and service discovery.\n\nMCP tools are documented separately in [MCP.md](./MCP.md)."
7
7
  },
8
8
  "servers": [
@@ -16466,7 +16466,7 @@
16466
16466
  "post": {
16467
16467
  "operationId": "extensions_enable",
16468
16468
  "summary": "Enable an extension",
16469
- "description": "Loads and enables an extension. This route is operator-only.",
16469
+ "description": "Loads and enables an extension. Available to leads, operators, and dashboard users.",
16470
16470
  "tags": [
16471
16471
  "Extensions"
16472
16472
  ],
@@ -16542,7 +16542,7 @@
16542
16542
  "post": {
16543
16543
  "operationId": "extensions_disable",
16544
16544
  "summary": "Disable an extension",
16545
- "description": "Unloads and disables an extension. This route is operator-only.",
16545
+ "description": "Unloads and disables an extension. Available to leads, operators, and dashboard users.",
16546
16546
  "tags": [
16547
16547
  "Extensions"
16548
16548
  ],
@@ -16608,7 +16608,7 @@
16608
16608
  "post": {
16609
16609
  "operationId": "extensions_activate_version",
16610
16610
  "summary": "Activate an extension version",
16611
- "description": "Activates a stored version. This route is operator-only.",
16611
+ "description": "Activates a stored version. Available to leads, operators, and dashboard users.",
16612
16612
  "tags": [
16613
16613
  "Extensions"
16614
16614
  ],
@@ -46581,7 +46581,7 @@
46581
46581
  }
46582
46582
  },
46583
46583
  "503": {
46584
- "description": "AgentMail integration not configured",
46584
+ "description": "AgentMail integration not configured or inbound archive unavailable",
46585
46585
  "content": {
46586
46586
  "application/json": {
46587
46587
  "schema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@desplega.ai/agent-swarm",
3
- "version": "1.151.0",
3
+ "version": "1.152.1",
4
4
  "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.",
5
5
  "keywords": [
6
6
  "agent-swarm.dev",
@@ -0,0 +1,71 @@
1
+ import { createHash } from "node:crypto";
2
+ import { claimKv, sweepExpiredKv } from "../be/db";
3
+ import { scrubSecrets } from "../utils/secret-scrubber";
4
+ import type { AgentMailWebhookPayload } from "./types";
5
+
6
+ export const INBOUND_ARCHIVE_NAMESPACE = "agentmail-inbound";
7
+ export const INBOUND_ARCHIVE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
8
+ const text = (value: unknown, limit: number) =>
9
+ typeof value === "string" ? scrubSecrets(value).slice(0, limit) : "";
10
+
11
+ export const inboundArchiveKey = (inboxId: string, messageId: string) =>
12
+ createHash("sha256")
13
+ .update(JSON.stringify([inboxId, messageId]))
14
+ .digest("hex");
15
+
16
+ /** Persist verified deliveries before ACK, independent of task-routing filters.
17
+ * One minimized entry per message for 30 days from capture. Live retries preserve
18
+ * the first delivery and its expiry; a replay after expiry starts a new window.
19
+ * This is a delivery archive, not proof of historical completeness.
20
+ */
21
+ export async function archiveInboundMessage(payload: AgentMailWebhookPayload): Promise<void> {
22
+ if (
23
+ ![
24
+ "message.received",
25
+ "message.received.unauthenticated",
26
+ "message.received.blocked",
27
+ "message.received.spam",
28
+ ].includes(payload.event_type)
29
+ )
30
+ return;
31
+ const message = payload.message;
32
+ if (!message?.inbox_id || !message.message_id || !message.thread_id) {
33
+ throw new Error("Inbound webhook missing inbox, message or thread ID");
34
+ }
35
+ const now = Date.now();
36
+ // Remove expired payloads on traffic as well as the KV point-read lazy sweep.
37
+ await sweepExpiredKv(INBOUND_ARCHIVE_NAMESPACE, now);
38
+ const minimized = {
39
+ event_type: payload.event_type,
40
+ message: {
41
+ inbox_id: message.inbox_id,
42
+ message_id: message.message_id,
43
+ thread_id: message.thread_id,
44
+ from_: text(Array.isArray(message.from_) ? message.from_.join(", ") : message.from_, 1500),
45
+ reply_to: Array.isArray(message.reply_to)
46
+ ? message.reply_to.slice(0, 20).map((value) => text(value, 1500))
47
+ : undefined,
48
+ subject: text(message.subject, 300),
49
+ text: text(message.text, 16000),
50
+ html: text(message.html, 16000),
51
+ timestamp: text(message.timestamp || message.created_at, 100),
52
+ labels: Array.isArray(message.labels)
53
+ ? message.labels.filter((label) => label === "unauthenticated")
54
+ : [],
55
+ attachments: Array.isArray(message.attachments)
56
+ ? message.attachments.map((attachment) => ({
57
+ filename: text(attachment.filename, 1500),
58
+ content_type: text(attachment.content_type, 200),
59
+ size: typeof attachment.size === "number" ? attachment.size : null,
60
+ }))
61
+ : undefined,
62
+ },
63
+ };
64
+ await claimKv({
65
+ namespace: INBOUND_ARCHIVE_NAMESPACE,
66
+ key: inboundArchiveKey(message.inbox_id, message.message_id),
67
+ value: { version: 1, capturedAt: new Date(now).toISOString(), payload: minimized },
68
+ expiresAt: now + INBOUND_ARCHIVE_TTL_MS,
69
+ valueType: "json",
70
+ });
71
+ }
@@ -44,6 +44,8 @@ export interface AgentMailWebhookPayload {
44
44
  export type AgentMailEventType =
45
45
  | "message.received"
46
46
  | "message.received.unauthenticated"
47
+ | "message.received.blocked"
48
+ | "message.received.spam"
47
49
  | "message.sent"
48
50
  | "message.delivered"
49
51
  | "message.bounced"
package/src/be/db.ts CHANGED
@@ -6154,7 +6154,7 @@ export async function getInjectableGlobalConfigs(): Promise<SwarmConfig[]> {
6154
6154
  const rows = await getDbClient().query<SwarmConfigRow>(
6155
6155
  `SELECT * FROM swarm_config
6156
6156
  WHERE scope = 'global'
6157
- AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN')
6157
+ AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN', 'EXTENSION_ALLOW_LEAD_ACTIVATION')
6158
6158
  ORDER BY key ASC`,
6159
6159
  );
6160
6160
  return rows.map(rowToSwarmConfig);
@@ -318,6 +318,10 @@ export interface SwarmSdk {
318
318
  // --- write: extensions ---
319
319
  extension_install(args: { manifest: Record<string, unknown>; files: Record<string, string>; priority?: number; config?: Record<string, unknown> }): Promise<unknown>;
320
320
  extension_list(args?: { enabledOnly?: boolean }): Promise<unknown>;
321
+ extension_delete(args: { id: string }): Promise<unknown>;
322
+ extension_enable(args: { id: string }): Promise<unknown>;
323
+ extension_disable(args: { id: string }): Promise<unknown>;
324
+ extension_activate_version(args: { id: string; version: number }): Promise<unknown>;
321
325
 
322
326
  // --- write: repos ---
323
327
  repo_update(args: Record<string, unknown>): Promise<unknown>;
@@ -18,7 +18,13 @@ import { parseTaskToolManifest } from "../utils/task-tool-manifest";
18
18
  * Matching is case-insensitive so `api_key`, `Api_Key`, etc. are all
19
19
  * rejected at every write path (DB helpers, HTTP routes, MCP tools).
20
20
  */
21
- const RESERVED_KEYS = new Set(["API_KEY", "SECRETS_ENCRYPTION_KEY", "CORS_ALLOW_ANY_ORIGIN"]);
21
+ // Lead activation is also deployment-only: leads can write ordinary global config.
22
+ const RESERVED_KEYS = new Set([
23
+ "API_KEY",
24
+ "SECRETS_ENCRYPTION_KEY",
25
+ "CORS_ALLOW_ANY_ORIGIN",
26
+ "EXTENSION_ALLOW_LEAD_ACTIVATION",
27
+ ]);
22
28
 
23
29
  export function isReservedConfigKey(key: string): boolean {
24
30
  return RESERVED_KEYS.has(key.toUpperCase());