@desplega.ai/agent-swarm 1.103.0 → 1.104.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 (122) hide show
  1. package/README.md +2 -0
  2. package/dist/{actions-7txktrdj.js → actions-2expzt47.js} +6 -6
  3. package/dist/{app-xm3xsdye.js → app-dr8hwx7z.js} +3 -3
  4. package/dist/{assistant-qpv63wk6.js → assistant-9rhgsw7v.js} +9 -10
  5. package/dist/{boot-reembed-chxhrwv8.js → boot-reembed-3q1aywnz.js} +5 -4
  6. package/dist/{boot-reembed-9cxqka3e.js → boot-reembed-9kt97g1z.js} +4 -3
  7. package/dist/{boot-scrub-logs-8qtfkcz8.js → boot-scrub-logs-vskq108e.js} +2 -2
  8. package/dist/{cli-fedn86nz.js → cli-0jw6j755.js} +8 -3
  9. package/dist/{cli-yeemwevj.js → cli-23zk7xqy.js} +20 -16
  10. package/dist/{cli-v9283nma.js → cli-2g9jf9ek.js} +1 -1
  11. package/dist/{cli-rvae030h.js → cli-2hap19dv.js} +3 -3
  12. package/dist/{cli-wjyyv518.js → cli-3j01d33e.js} +9 -14
  13. package/dist/{cli-8hyv6c2v.js → cli-54h5daha.js} +41 -23
  14. package/dist/{cli-fygaw191.js → cli-5pf0b84v.js} +2 -2
  15. package/dist/{cli-m8f6qzck.js → cli-7v4y3hyd.js} +1 -1
  16. package/dist/{cli-fwxdt7kt.js → cli-d4z1csms.js} +30 -5
  17. package/dist/{cli-jt9d9fjw.js → cli-e7bwjntj.js} +1 -1
  18. package/dist/{cli-s14sb64w.js → cli-etvgz5x8.js} +5 -7
  19. package/dist/{cli-2qynerth.js → cli-gj2n2ec1.js} +1 -1
  20. package/dist/{cli-dz3d6zjg.js → cli-nzc0h54v.js} +121 -2
  21. package/dist/{cli-8w95v19d.js → cli-p4cj4vhc.js} +351 -24
  22. package/dist/{cli-xmtsan9k.js → cli-q5tshxd6.js} +1 -1
  23. package/dist/{http-zts4haq7.js → cli-qvzgncd8.js} +83966 -76422
  24. package/dist/{cli-4fnp2tc3.js → cli-s42f54ja.js} +1 -1
  25. package/dist/{cli-krvxq8bc.js → cli-t9v14cnd.js} +23 -4
  26. package/dist/{cli-gzepjz54.js → cli-v1syqkcb.js} +900 -352
  27. package/dist/{cli-ksq38x4n.js → cli-w1nfskkg.js} +2 -2
  28. package/dist/{cli-ns0r7mkr.js → cli-y9p3e94h.js} +3 -3
  29. package/dist/{cli-85pf4z38.js → cli-yjt8a36k.js} +3 -3
  30. package/dist/{cli-yfwwjeft.js → cli-yvektv79.js} +1 -1
  31. package/dist/{cli-kk51f3tf.js → cli-zaxksbgj.js} +5 -5
  32. package/dist/{cli-rttgde5f.js → cli-zghef0em.js} +1 -1
  33. package/dist/cli.js +10 -10
  34. package/dist/{commands-aqn63mcw.js → commands-wfrkef57.js} +2 -2
  35. package/dist/{db-azrvwsnj.js → db-c42pxt7h.js} +2 -2
  36. package/dist/{handlers-hf61har3.js → handlers-n36zkfvx.js} +10 -12
  37. package/dist/{hook-306p3yz4.js → hook-gw3vhv6s.js} +7 -5
  38. package/dist/http-59ygpn2h.js +17263 -0
  39. package/dist/{index-h2yqjyk0.js → index-881c1baf.js} +9 -8
  40. package/dist/{index-29vg51x6.js → index-jca7jdpt.js} +23 -10
  41. package/dist/{index-bfh9hgek.js → index-xf6fp4y1.js} +5 -5
  42. package/dist/{index-3c651yfk.js → index-xz8vaa5c.js} +14 -11
  43. package/dist/{keepalive-a0dg5pds.js → keepalive-mj4302vw.js} +4 -4
  44. package/dist/{lead-7mcxedkc.js → lead-qm0xjvkv.js} +19 -19
  45. package/dist/{maintenance-mrzqd53t.js → maintenance-xppxbe4t.js} +5 -4
  46. package/dist/{onboard-4dkpv9wa.js → onboard-ejx6yxh8.js} +2 -2
  47. package/dist/{otel-impl-jt7gpyp9.js → otel-impl-zs5exkpk.js} +1 -1
  48. package/dist/{pricing-refresh-xqnzh8dt.js → pricing-refresh-nqyf8bkb.js} +4 -4
  49. package/dist/{seed-pricing-56tjm1fj.js → seed-pricing-w3x550cj.js} +3 -3
  50. package/dist/{setup-tbwk8j10.js → setup-7729ktfj.js} +2 -2
  51. package/dist/{worker-e03za92t.js → worker-4ttemwhw.js} +19 -19
  52. package/openapi.json +90 -4
  53. package/package.json +3 -3
  54. package/src/be/memory/constants.ts +6 -0
  55. package/src/be/memory/providers/sqlite-store.ts +468 -71
  56. package/src/be/memory/raters/retrieval.ts +4 -2
  57. package/src/be/memory/reranker.ts +5 -2
  58. package/src/be/memory/retrieval-store.ts +2 -0
  59. package/src/be/memory/types.ts +46 -0
  60. package/src/be/migrations/099_memory_structured_key_versioning.sql +41 -0
  61. package/src/be/migrations/100_memory_retrieval_source.sql +8 -0
  62. package/src/be/migrations/101_script_connections.sql +67 -0
  63. package/src/be/script-connections.ts +744 -0
  64. package/src/be/script-credential-broker.ts +38 -0
  65. package/src/be/scripts/typecheck.ts +23 -2
  66. package/src/be/seed-scripts/catalog/boot-triage.inline.ts +16 -4
  67. package/src/be/seed-scripts/catalog/boot-triage.ts +16 -4
  68. package/src/commands/runner.ts +8 -6
  69. package/src/heartbeat/heartbeat.ts +42 -1
  70. package/src/heartbeat/index.ts +7 -1
  71. package/src/http/memory.ts +127 -14
  72. package/src/http/scripts.ts +15 -14
  73. package/src/scripts-runtime/api-client.ts +100 -0
  74. package/src/scripts-runtime/api-types.ts +45 -0
  75. package/src/scripts-runtime/credential-broker/README.md +40 -0
  76. package/src/scripts-runtime/credential-broker/broker.ts +51 -0
  77. package/src/scripts-runtime/credential-broker/default-bindings.ts +19 -0
  78. package/src/scripts-runtime/credential-broker/fetch-patch.ts +102 -0
  79. package/src/scripts-runtime/credential-broker/index.ts +17 -0
  80. package/src/scripts-runtime/credential-broker/store.ts +72 -0
  81. package/src/scripts-runtime/credential-broker/types.ts +54 -0
  82. package/src/scripts-runtime/ctx.ts +11 -1
  83. package/src/scripts-runtime/egress-secrets.ts +14 -76
  84. package/src/scripts-runtime/eval-harness.ts +1 -1
  85. package/src/scripts-runtime/executors/types.ts +5 -5
  86. package/src/scripts-runtime/loader.ts +6 -1
  87. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  88. package/src/scripts-runtime/types/stdlib.d.ts +11 -0
  89. package/src/scripts-runtime/types/swarm-sdk.d.ts +11 -0
  90. package/src/server.ts +6 -0
  91. package/src/tests/credential-broker.test.ts +281 -0
  92. package/src/tests/heartbeat.test.ts +239 -0
  93. package/src/tests/memory-edit.test.ts +177 -0
  94. package/src/tests/memory-hybrid.test.ts +212 -0
  95. package/src/tests/runner-repo-autostash.test.ts +39 -8
  96. package/src/tests/script-connections.test.ts +360 -0
  97. package/src/tests/scripts-http.test.ts +16 -10
  98. package/src/tests/scripts-runtime-secret-egress.test.ts +26 -5
  99. package/src/tests/swarm-config-reserved-keys.test.ts +23 -0
  100. package/src/tests/update-schedule-mcp-tool.test.ts +83 -4
  101. package/src/tools/credential-bindings/index.ts +1 -0
  102. package/src/tools/credential-bindings/tool.ts +238 -0
  103. package/src/tools/memory-edit.ts +148 -0
  104. package/src/tools/memory-search.ts +17 -10
  105. package/src/tools/schedules/delete-schedule.ts +18 -8
  106. package/src/tools/schedules/update-schedule.ts +4 -9
  107. package/src/tools/script-connections/index.ts +1 -0
  108. package/src/tools/script-connections/tool.ts +167 -0
  109. package/src/tools/swarm-config/delete-config.ts +5 -0
  110. package/src/tools/swarm-config/set-config.ts +23 -1
  111. package/src/tools/tool-config.ts +6 -1
  112. package/src/types.ts +6 -0
  113. package/src/workflows/executors/swarm-script.ts +2 -0
  114. package/templates/community/dora-metrics/PLAYBOOK.md +294 -0
  115. package/templates/community/dora-metrics/README.md +39 -0
  116. package/templates/community/dora-metrics/lead-prompt.md +56 -0
  117. package/templates/community/dora-metrics/report.mjs +393 -0
  118. package/templates/community/dora-metrics/run.sh +113 -0
  119. package/templates/schedules/weekly-dora-metrics/config.json +13 -0
  120. package/templates/schedules/weekly-dora-metrics/content.md +61 -0
  121. package/dist/cli-2307phk1.js +0 -24223
  122. package/dist/cli-2deg0cen.js +0 -120
@@ -15,27 +15,28 @@ import {
15
15
  stopWaitPoller,
16
16
  subscribeWaitToBus,
17
17
  validateTemplateVariables
18
- } from "./cli-8hyv6c2v.js";
18
+ } from "./cli-54h5daha.js";
19
19
  import"./cli-f14fvzag.js";
20
- import"./cli-gzepjz54.js";
21
- import"./cli-fygaw191.js";
22
- import"./cli-8w95v19d.js";
20
+ import"./cli-v1syqkcb.js";
21
+ import"./cli-5pf0b84v.js";
22
+ import"./cli-p4cj4vhc.js";
23
+ import"./cli-3j01d33e.js";
23
24
  import {
24
25
  findEntryNodes,
25
26
  getSuccessors,
26
27
  handleScheduleTrigger,
27
28
  handleWebhookTrigger,
28
29
  startWorkflowExecution
29
- } from "./cli-rttgde5f.js";
30
+ } from "./cli-zghef0em.js";
30
31
  import"./cli-dh55d5fg.js";
31
- import"./cli-jt9d9fjw.js";
32
+ import"./cli-e7bwjntj.js";
32
33
  import {
33
34
  interpolate
34
- } from "./cli-fedn86nz.js";
35
+ } from "./cli-0jw6j755.js";
35
36
  import"./cli-z2zcxes1.js";
36
37
  import"./cli-q21d49ac.js";
37
38
  import"./cli-anrj584m.js";
38
- import"./cli-85pf4z38.js";
39
+ import"./cli-yjt8a36k.js";
39
40
  import"./cli-3pp1362w.js";
40
41
  import {
41
42
  workflowEventBus
@@ -2,14 +2,15 @@ import {
2
2
  extractArgsJsonSchema,
3
3
  extractScriptSignature,
4
4
  typecheckScript
5
- } from "./cli-krvxq8bc.js";
5
+ } from "./cli-t9v14cnd.js";
6
6
  import {
7
7
  getScript,
8
8
  upsertScriptByName,
9
9
  validateScriptImports
10
- } from "./cli-gzepjz54.js";
11
- import"./cli-fygaw191.js";
12
- import"./cli-8w95v19d.js";
10
+ } from "./cli-v1syqkcb.js";
11
+ import"./cli-5pf0b84v.js";
12
+ import"./cli-p4cj4vhc.js";
13
+ import"./cli-3j01d33e.js";
13
14
  import {
14
15
  computeContentHash,
15
16
  createSkill,
@@ -17,11 +18,11 @@ import {
17
18
  getSkillByName,
18
19
  init_db,
19
20
  updateSkill
20
- } from "./cli-fedn86nz.js";
21
+ } from "./cli-0jw6j755.js";
21
22
  import"./cli-z2zcxes1.js";
22
23
  import"./cli-q21d49ac.js";
23
24
  import"./cli-anrj584m.js";
24
- import"./cli-85pf4z38.js";
25
+ import"./cli-yjt8a36k.js";
25
26
  import"./cli-3pp1362w.js";
26
27
  import"./cli-p9swy5t3.js";
27
28
 
@@ -169,20 +170,32 @@ export default async function bootTriage(args: any, ctx: any) {
169
170
  .filter((row) => !BENIGN_FAILURE_RE.test(String(row.failureReason || "")))
170
171
  .map(summarizeTask);
171
172
 
172
- const stuckOfflineRows = await query(
173
+ // Catches in_progress tasks on offline agents OR tasks whose session is a
174
+ // pre-boot artifact (stale lastHeartbeatAt). The session check mirrors the
175
+ // heartbeat.ts runRebootSweep boot-epoch logic — a session that heartbeated
176
+ // after the stuckMinutes threshold is considered live.
177
+ const recentThreshold = new Date(nowMs - stuckMinutes * 60 * 1000).toISOString();
178
+ const stuckRows = await query(
173
179
  ctx,
174
180
  \`SELECT t.id, t.task, t.status, t.taskType, t.agentId, a.name as agentName,
175
181
  t.scheduleId, t.parentTaskId, t.failureReason, t.createdAt, t.lastUpdatedAt
176
182
  FROM agent_tasks t
177
183
  JOIN agents a ON a.id = t.agentId
178
184
  WHERE t.status = 'in_progress'
179
- AND a.status = 'offline'
180
185
  AND datetime(t.lastUpdatedAt) <= datetime(?, ?)
186
+ AND (
187
+ a.status = 'offline'
188
+ OR NOT EXISTS (
189
+ SELECT 1 FROM active_sessions s
190
+ WHERE s.taskId = t.id
191
+ AND datetime(s.lastHeartbeatAt) >= datetime(?)
192
+ )
193
+ )
181
194
  ORDER BY datetime(t.lastUpdatedAt) ASC
182
195
  LIMIT 50\`,
183
- [now.toISOString(), \`-\${stuckMinutes} minutes\`],
196
+ [now.toISOString(), \`-\${stuckMinutes} minutes\`, recentThreshold],
184
197
  );
185
- const stuckInProgressOnOfflineAgents = stuckOfflineRows
198
+ const stuckInProgressOnOfflineAgents = stuckRows
186
199
  .filter((row) => !row.unavailable)
187
200
  .map(summarizeTask);
188
201
 
@@ -3,14 +3,14 @@ import {
3
3
  runScheduleNow,
4
4
  startScheduler,
5
5
  stopScheduler
6
- } from "./cli-ns0r7mkr.js";
7
- import"./cli-rttgde5f.js";
8
- import"./cli-jt9d9fjw.js";
9
- import"./cli-fedn86nz.js";
6
+ } from "./cli-y9p3e94h.js";
7
+ import"./cli-zghef0em.js";
8
+ import"./cli-e7bwjntj.js";
9
+ import"./cli-0jw6j755.js";
10
10
  import"./cli-z2zcxes1.js";
11
11
  import"./cli-q21d49ac.js";
12
12
  import"./cli-anrj584m.js";
13
- import"./cli-85pf4z38.js";
13
+ import"./cli-yjt8a36k.js";
14
14
  import"./cli-3pp1362w.js";
15
15
  import"./cli-p9swy5t3.js";
16
16
  export {
@@ -1,23 +1,25 @@
1
1
  import {
2
+ getBootEpochMs,
2
3
  getRebootAffectedTasks,
3
4
  runRebootSweep,
4
5
  startHeartbeat,
5
6
  stopHeartbeat
6
- } from "./cli-fwxdt7kt.js";
7
- import"./cli-4fnp2tc3.js";
8
- import"./cli-8hyv6c2v.js";
7
+ } from "./cli-d4z1csms.js";
8
+ import"./cli-s42f54ja.js";
9
+ import"./cli-54h5daha.js";
9
10
  import"./cli-f14fvzag.js";
10
- import"./cli-gzepjz54.js";
11
- import"./cli-fygaw191.js";
12
- import"./cli-8w95v19d.js";
13
- import"./cli-rttgde5f.js";
11
+ import"./cli-v1syqkcb.js";
12
+ import"./cli-5pf0b84v.js";
13
+ import"./cli-p4cj4vhc.js";
14
+ import"./cli-3j01d33e.js";
15
+ import"./cli-zghef0em.js";
14
16
  import"./cli-dh55d5fg.js";
15
- import"./cli-jt9d9fjw.js";
16
- import"./cli-fedn86nz.js";
17
+ import"./cli-e7bwjntj.js";
18
+ import"./cli-0jw6j755.js";
17
19
  import"./cli-z2zcxes1.js";
18
20
  import"./cli-q21d49ac.js";
19
21
  import"./cli-anrj584m.js";
20
- import"./cli-85pf4z38.js";
22
+ import"./cli-yjt8a36k.js";
21
23
  import"./cli-3pp1362w.js";
22
24
  import"./cli-9aryf9tv.js";
23
25
  import"./cli-p9swy5t3.js";
@@ -25,5 +27,6 @@ export {
25
27
  stopHeartbeat,
26
28
  startHeartbeat,
27
29
  runRebootSweep,
28
- getRebootAffectedTasks
30
+ getRebootAffectedTasks,
31
+ getBootEpochMs
29
32
  };
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  ensureTokenOrThrow
3
- } from "./cli-v9283nma.js";
4
- import"./cli-fedn86nz.js";
3
+ } from "./cli-2g9jf9ek.js";
4
+ import"./cli-0jw6j755.js";
5
5
  import"./cli-z2zcxes1.js";
6
6
  import"./cli-q21d49ac.js";
7
7
  import"./cli-anrj584m.js";
8
- import"./cli-85pf4z38.js";
8
+ import"./cli-yjt8a36k.js";
9
9
  import"./cli-3pp1362w.js";
10
10
  import {
11
11
  __require
@@ -54,7 +54,7 @@ async function notifySlack(text) {
54
54
  return;
55
55
  }
56
56
  try {
57
- const { getSlackApp } = await import("./app-xm3xsdye.js");
57
+ const { getSlackApp } = await import("./app-dr8hwx7z.js");
58
58
  const app = getSlackApp();
59
59
  if (!app) {
60
60
  console.warn("[OAuth Keepalive] Slack not available, cannot send notification");
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  runAgent
3
- } from "./cli-yeemwevj.js";
4
- import"./cli-wjyyv518.js";
3
+ } from "./cli-23zk7xqy.js";
5
4
  import"./cli-khe4x17a.js";
6
5
  import"./cli-p03mawph.js";
7
6
  import"./cli-4wmnp8q3.js";
@@ -16,7 +15,7 @@ import"./cli-d6n0thxw.js";
16
15
  import"./cli-hx1dcevq.js";
17
16
  import {
18
17
  getEnabledCapabilities
19
- } from "./cli-2307phk1.js";
18
+ } from "./cli-qvzgncd8.js";
20
19
  import"./cli-09rxrad0.js";
21
20
  import"./cli-dcfyyh3t.js";
22
21
  import"./cli-gz9sbyk3.js";
@@ -25,31 +24,32 @@ import"./cli-psrqtw2m.js";
25
24
  import"./cli-tng3131n.js";
26
25
  import"./cli-zm7njwzd.js";
27
26
  import"./cli-0k9dc6ks.js";
28
- import"./cli-v9283nma.js";
29
- import"./cli-ksq38x4n.js";
30
- import"./cli-m8f6qzck.js";
31
- import"./cli-4fnp2tc3.js";
32
- import"./cli-8hyv6c2v.js";
27
+ import"./cli-2g9jf9ek.js";
28
+ import"./cli-w1nfskkg.js";
29
+ import"./cli-7v4y3hyd.js";
30
+ import"./cli-s42f54ja.js";
31
+ import"./cli-54h5daha.js";
33
32
  import"./cli-f14fvzag.js";
34
- import"./cli-gzepjz54.js";
35
- import"./cli-fygaw191.js";
36
- import"./cli-8w95v19d.js";
33
+ import"./cli-v1syqkcb.js";
34
+ import"./cli-5pf0b84v.js";
35
+ import"./cli-p4cj4vhc.js";
36
+ import"./cli-3j01d33e.js";
37
37
  import"./cli-fad8m16k.js";
38
- import"./cli-ns0r7mkr.js";
39
- import"./cli-rttgde5f.js";
40
- import"./cli-2deg0cen.js";
41
- import"./cli-kk51f3tf.js";
38
+ import"./cli-y9p3e94h.js";
39
+ import"./cli-zghef0em.js";
40
+ import"./cli-nzc0h54v.js";
41
+ import"./cli-zaxksbgj.js";
42
42
  import"./cli-fete3y1e.js";
43
43
  import"./cli-b0p7rfnd.js";
44
- import"./cli-yfwwjeft.js";
44
+ import"./cli-yvektv79.js";
45
45
  import"./cli-z92pkwzn.js";
46
46
  import"./cli-dh55d5fg.js";
47
- import"./cli-jt9d9fjw.js";
48
- import"./cli-fedn86nz.js";
47
+ import"./cli-e7bwjntj.js";
48
+ import"./cli-0jw6j755.js";
49
49
  import"./cli-z2zcxes1.js";
50
50
  import"./cli-q21d49ac.js";
51
51
  import"./cli-anrj584m.js";
52
- import"./cli-85pf4z38.js";
52
+ import"./cli-yjt8a36k.js";
53
53
  import"./cli-3pp1362w.js";
54
54
  import"./cli-e15jhafb.js";
55
55
  import"./cli-9aryf9tv.js";
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  reembedAllScripts
3
- } from "./cli-fygaw191.js";
4
- import"./cli-8w95v19d.js";
5
- import"./cli-fedn86nz.js";
3
+ } from "./cli-5pf0b84v.js";
4
+ import"./cli-p4cj4vhc.js";
5
+ import"./cli-3j01d33e.js";
6
+ import"./cli-0jw6j755.js";
6
7
  import"./cli-z2zcxes1.js";
7
8
  import"./cli-q21d49ac.js";
8
9
  import"./cli-anrj584m.js";
9
- import"./cli-85pf4z38.js";
10
+ import"./cli-yjt8a36k.js";
10
11
  import"./cli-3pp1362w.js";
11
12
  import"./cli-p9swy5t3.js";
12
13
 
@@ -3,7 +3,7 @@ import {
3
3
  createDefaultMcpJson,
4
4
  createDefaultSettingsLocal,
5
5
  createHooksConfig
6
- } from "./cli-xmtsan9k.js";
6
+ } from "./cli-q5tshxd6.js";
7
7
  import {
8
8
  require_jsx_dev_runtime
9
9
  } from "./cli-6n1nnzm7.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  init_package,
15
15
  package_default
16
- } from "./cli-85pf4z38.js";
16
+ } from "./cli-yjt8a36k.js";
17
17
  import {
18
18
  Box_default,
19
19
  Select,
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  init_package,
8
8
  package_default
9
- } from "./cli-85pf4z38.js";
9
+ } from "./cli-yjt8a36k.js";
10
10
  import {
11
11
  init_secret_scrubber,
12
12
  scrubSecrets
@@ -2,13 +2,13 @@ import {
2
2
  PRICING_REFRESH_INTERVAL_MS,
3
3
  refreshPricingFromModelsDev,
4
4
  startPricingRefreshLoop
5
- } from "./cli-ksq38x4n.js";
6
- import"./cli-m8f6qzck.js";
7
- import"./cli-fedn86nz.js";
5
+ } from "./cli-w1nfskkg.js";
6
+ import"./cli-7v4y3hyd.js";
7
+ import"./cli-0jw6j755.js";
8
8
  import"./cli-z2zcxes1.js";
9
9
  import"./cli-q21d49ac.js";
10
10
  import"./cli-anrj584m.js";
11
- import"./cli-85pf4z38.js";
11
+ import"./cli-yjt8a36k.js";
12
12
  import"./cli-3pp1362w.js";
13
13
  import"./cli-p9swy5t3.js";
14
14
  export {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  buildModelsDevSeedRows,
3
3
  seedPricingFromModelsDev
4
- } from "./cli-m8f6qzck.js";
5
- import"./cli-fedn86nz.js";
4
+ } from "./cli-7v4y3hyd.js";
5
+ import"./cli-0jw6j755.js";
6
6
  import"./cli-z2zcxes1.js";
7
7
  import"./cli-q21d49ac.js";
8
8
  import"./cli-anrj584m.js";
9
- import"./cli-85pf4z38.js";
9
+ import"./cli-yjt8a36k.js";
10
10
  import"./cli-3pp1362w.js";
11
11
  import"./cli-p9swy5t3.js";
12
12
  export {
@@ -4,14 +4,14 @@ import {
4
4
  createDefaultMcpJson,
5
5
  createDefaultSettingsLocal,
6
6
  createHooksConfig
7
- } from "./cli-xmtsan9k.js";
7
+ } from "./cli-q5tshxd6.js";
8
8
  import {
9
9
  require_jsx_dev_runtime
10
10
  } from "./cli-6n1nnzm7.js";
11
11
  import {
12
12
  getApiKey
13
13
  } from "./cli-f14fvzag.js";
14
- import"./cli-85pf4z38.js";
14
+ import"./cli-yjt8a36k.js";
15
15
  import {
16
16
  Box_default,
17
17
  Spinner,
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  runAgent
3
- } from "./cli-yeemwevj.js";
4
- import"./cli-wjyyv518.js";
3
+ } from "./cli-23zk7xqy.js";
5
4
  import"./cli-khe4x17a.js";
6
5
  import"./cli-p03mawph.js";
7
6
  import"./cli-4wmnp8q3.js";
@@ -16,7 +15,7 @@ import"./cli-d6n0thxw.js";
16
15
  import"./cli-hx1dcevq.js";
17
16
  import {
18
17
  getEnabledCapabilities
19
- } from "./cli-2307phk1.js";
18
+ } from "./cli-qvzgncd8.js";
20
19
  import"./cli-09rxrad0.js";
21
20
  import"./cli-dcfyyh3t.js";
22
21
  import"./cli-gz9sbyk3.js";
@@ -25,31 +24,32 @@ import"./cli-psrqtw2m.js";
25
24
  import"./cli-tng3131n.js";
26
25
  import"./cli-zm7njwzd.js";
27
26
  import"./cli-0k9dc6ks.js";
28
- import"./cli-v9283nma.js";
29
- import"./cli-ksq38x4n.js";
30
- import"./cli-m8f6qzck.js";
31
- import"./cli-4fnp2tc3.js";
32
- import"./cli-8hyv6c2v.js";
27
+ import"./cli-2g9jf9ek.js";
28
+ import"./cli-w1nfskkg.js";
29
+ import"./cli-7v4y3hyd.js";
30
+ import"./cli-s42f54ja.js";
31
+ import"./cli-54h5daha.js";
33
32
  import"./cli-f14fvzag.js";
34
- import"./cli-gzepjz54.js";
35
- import"./cli-fygaw191.js";
36
- import"./cli-8w95v19d.js";
33
+ import"./cli-v1syqkcb.js";
34
+ import"./cli-5pf0b84v.js";
35
+ import"./cli-p4cj4vhc.js";
36
+ import"./cli-3j01d33e.js";
37
37
  import"./cli-fad8m16k.js";
38
- import"./cli-ns0r7mkr.js";
39
- import"./cli-rttgde5f.js";
40
- import"./cli-2deg0cen.js";
41
- import"./cli-kk51f3tf.js";
38
+ import"./cli-y9p3e94h.js";
39
+ import"./cli-zghef0em.js";
40
+ import"./cli-nzc0h54v.js";
41
+ import"./cli-zaxksbgj.js";
42
42
  import"./cli-fete3y1e.js";
43
43
  import"./cli-b0p7rfnd.js";
44
- import"./cli-yfwwjeft.js";
44
+ import"./cli-yvektv79.js";
45
45
  import"./cli-z92pkwzn.js";
46
46
  import"./cli-dh55d5fg.js";
47
- import"./cli-jt9d9fjw.js";
48
- import"./cli-fedn86nz.js";
47
+ import"./cli-e7bwjntj.js";
48
+ import"./cli-0jw6j755.js";
49
49
  import"./cli-z2zcxes1.js";
50
50
  import"./cli-q21d49ac.js";
51
51
  import"./cli-anrj584m.js";
52
- import"./cli-85pf4z38.js";
52
+ import"./cli-yjt8a36k.js";
53
53
  import"./cli-3pp1362w.js";
54
54
  import"./cli-e15jhafb.js";
55
55
  import"./cli-9aryf9tv.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.103.0",
5
+ "version": "1.104.0",
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": [
@@ -2980,7 +2980,8 @@
2980
2980
  "system.boot",
2981
2981
  "system.migration",
2982
2982
  "system.error",
2983
- "script.global_upsert"
2983
+ "script.global_upsert",
2984
+ "schedule.deleted"
2984
2985
  ]
2985
2986
  },
2986
2987
  "status": {
@@ -3095,7 +3096,8 @@
3095
3096
  "system.boot",
3096
3097
  "system.migration",
3097
3098
  "system.error",
3098
- "script.global_upsert"
3099
+ "script.global_upsert",
3100
+ "schedule.deleted"
3099
3101
  ]
3100
3102
  },
3101
3103
  "required": false,
@@ -3246,7 +3248,8 @@
3246
3248
  "system.boot",
3247
3249
  "system.migration",
3248
3250
  "system.error",
3249
- "script.global_upsert"
3251
+ "script.global_upsert",
3252
+ "schedule.deleted"
3250
3253
  ]
3251
3254
  },
3252
3255
  "status": {
@@ -4341,6 +4344,89 @@
4341
4344
  }
4342
4345
  }
4343
4346
  },
4347
+ "/api/memory/edit": {
4348
+ "post": {
4349
+ "summary": "Edit a single memory in place while preserving its ID and usefulness posterior. Modes: 'replace' overwrites entire content; 'exact' performs surgical find-and-replace of oldString→newString (fails if missing or ambiguous)",
4350
+ "tags": [
4351
+ "Memory"
4352
+ ],
4353
+ "security": [
4354
+ {
4355
+ "bearerAuth": []
4356
+ }
4357
+ ],
4358
+ "requestBody": {
4359
+ "content": {
4360
+ "application/json": {
4361
+ "schema": {
4362
+ "type": "object",
4363
+ "properties": {
4364
+ "memoryId": {
4365
+ "type": "string",
4366
+ "format": "uuid"
4367
+ },
4368
+ "key": {
4369
+ "type": "string",
4370
+ "minLength": 1
4371
+ },
4372
+ "scope": {
4373
+ "type": "string",
4374
+ "enum": [
4375
+ "agent",
4376
+ "swarm"
4377
+ ]
4378
+ },
4379
+ "mode": {
4380
+ "type": "string",
4381
+ "enum": [
4382
+ "replace",
4383
+ "exact"
4384
+ ],
4385
+ "default": "replace"
4386
+ },
4387
+ "content": {
4388
+ "type": "string",
4389
+ "minLength": 1
4390
+ },
4391
+ "oldString": {
4392
+ "type": "string",
4393
+ "minLength": 1
4394
+ },
4395
+ "newString": {
4396
+ "type": "string"
4397
+ },
4398
+ "intent": {
4399
+ "type": "string",
4400
+ "minLength": 1
4401
+ },
4402
+ "expectedVersion": {
4403
+ "type": "integer",
4404
+ "minimum": 1
4405
+ }
4406
+ },
4407
+ "required": [
4408
+ "intent"
4409
+ ]
4410
+ }
4411
+ }
4412
+ }
4413
+ },
4414
+ "responses": {
4415
+ "200": {
4416
+ "description": "Memory edited"
4417
+ },
4418
+ "400": {
4419
+ "description": "Validation error"
4420
+ },
4421
+ "404": {
4422
+ "description": "Memory not found"
4423
+ },
4424
+ "409": {
4425
+ "description": "Version conflict"
4426
+ }
4427
+ }
4428
+ }
4429
+ },
4344
4430
  "/api/memory/re-embed": {
4345
4431
  "post": {
4346
4432
  "summary": "Re-embed all memories using the current embedding provider",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@desplega.ai/agent-swarm",
3
- "version": "1.103.0",
3
+ "version": "1.104.0",
4
4
  "description": "Multi-agent orchestration for Claude Code, Codex, Gemini CLI, and other AI coding assistants",
5
5
  "license": "MIT",
6
6
  "author": "desplega.sh <contact@desplega.sh>",
@@ -120,8 +120,8 @@
120
120
  "@inkjs/ui": "^2.0.0",
121
121
  "@linear/sdk": "^77.0.0",
122
122
  "@modelcontextprotocol/sdk": "^1.25.1",
123
- "@openai/codex-sdk": "^0.142.0",
124
- "@opencode-ai/sdk": "^1.17.9",
123
+ "@openai/codex-sdk": "^0.142.3",
124
+ "@opencode-ai/sdk": "^1.17.11",
125
125
  "@openfort/openfort-node": "^0.9.1",
126
126
  "@opentelemetry/api": "^1.9.1",
127
127
  "@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
@@ -59,6 +59,12 @@ export const ACCESS_BOOST_MAX_MULTIPLIER = numEnv("MEMORY_ACCESS_BOOST_MAX", 1.5
59
59
  export const ACCESS_BOOST_RECENCY_WINDOW_HOURS = numEnv("MEMORY_ACCESS_RECENCY_HOURS", 48);
60
60
  export const CANDIDATE_SET_MULTIPLIER = numEnv("MEMORY_CANDIDATE_MULTIPLIER", 3);
61
61
 
62
+ // Feature flag: enable hybrid (FTS+vec) search. Off by default; set MEMORY_HYBRID_SEARCH=1 to enable.
63
+ export function isHybridSearchEnabled(): boolean {
64
+ const val = process.env.MEMORY_HYBRID_SEARCH ?? "0";
65
+ return val === "1" || val.toLowerCase() === "true";
66
+ }
67
+
62
68
  // Embedding defaults
63
69
  export const EMBEDDING_DIMENSIONS = numEnv("EMBEDDING_DIMENSIONS", 512);
64
70
  export const DEFAULT_EMBEDDING_DIMENSIONS = EMBEDDING_DIMENSIONS;