@desplega.ai/agent-swarm 1.147.0 → 1.148.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 (73) hide show
  1. package/README.md +11 -0
  2. package/dist/{acp-adapter-9n319wqc.js → acp-adapter-grez7xhd.js} +1 -1
  3. package/dist/{actions-2vxqvpr9.js → actions-kweznh5a.js} +6 -6
  4. package/dist/{app-w066xfy0.js → app-5fvvjv9m.js} +3 -3
  5. package/dist/{assistant-kt31dj2h.js → assistant-40m4w50s.js} +8 -8
  6. package/dist/{boot-reembed-j3mm3rfz.js → boot-reembed-9rxmb26n.js} +4 -4
  7. package/dist/{boot-reembed-az5rassp.js → boot-reembed-cn357y5n.js} +3 -3
  8. package/dist/{boot-scrub-logs-b6h54817.js → boot-scrub-logs-5tpp0x3y.js} +2 -2
  9. package/dist/{claude-adapter-w1z04ann.js → claude-adapter-9pz5q2pb.js} +3 -3
  10. package/dist/{claude-sdk-session-f0cc1kec.js → claude-sdk-session-v8w0s7qm.js} +3 -3
  11. package/dist/{cli-rw51bq3j.js → cli-0amc6myn.js} +1 -1
  12. package/dist/{cli-3tgwnf43.js → cli-0er5m69z.js} +3 -3
  13. package/dist/{cli-f7dsy61y.js → cli-3n7cbfjn.js} +1 -1
  14. package/dist/{cli-smby5m17.js → cli-56y3hch2.js} +5 -5
  15. package/dist/{cli-1th1728g.js → cli-5khqvvnq.js} +1 -1
  16. package/dist/{cli-ftht3zzj.js → cli-6s2y152y.js} +1 -1
  17. package/dist/{cli-53s590z8.js → cli-7gn7c2af.js} +1 -1
  18. package/dist/{cli-tzvk9haz.js → cli-9216xm24.js} +9 -9
  19. package/dist/{cli-w9kb3bk1.js → cli-anedxf1w.js} +3 -1
  20. package/dist/{cli-89xfd7f9.js → cli-brxyat7h.js} +1 -1
  21. package/dist/{cli-12fz972k.js → cli-cdjezzc7.js} +3 -3
  22. package/dist/{cli-zhjmqxzh.js → cli-dcem3pr1.js} +1 -1
  23. package/dist/{cli-b5bq9crk.js → cli-dk3me3qs.js} +7 -7
  24. package/dist/{cli-yz3djrm0.js → cli-f8j56xv2.js} +7 -7
  25. package/dist/{cli-m8yrsg97.js → cli-hp2est46.js} +2 -2
  26. package/dist/{cli-mmemxxdc.js → cli-hz8xhefy.js} +2 -2
  27. package/dist/{cli-8v0g1yc8.js → cli-hzhhrt7b.js} +1 -1
  28. package/dist/{cli-hbv0kq6w.js → cli-kzvhgvk3.js} +2 -2
  29. package/dist/{cli-719k9j2c.js → cli-m1p5cysp.js} +2 -2
  30. package/dist/{cli-dttph1bw.js → cli-n2cwscdd.js} +2 -2
  31. package/dist/{cli-54wwve05.js → cli-n9grk3yd.js} +3 -3
  32. package/dist/{cli-atcve9y8.js → cli-p73drk6p.js} +78 -37
  33. package/dist/{cli-f146mn5s.js → cli-qy6h009w.js} +5 -5
  34. package/dist/{cli-de14znh8.js → cli-tebsjpk7.js} +2 -2
  35. package/dist/{cli-4nr988h6.js → cli-v3e51x7w.js} +1 -1
  36. package/dist/{cli-p1d5b073.js → cli-xqcpg1st.js} +1 -1
  37. package/dist/{cli-n8508nre.js → cli-ztn0ga15.js} +1 -1
  38. package/dist/cli.js +13 -11
  39. package/dist/{codex-adapter-zw4dwsx7.js → codex-adapter-ehhj2qwc.js} +2 -2
  40. package/dist/{codex-session-runner-k981s65v.js → codex-session-runner-5hne566k.js} +2 -2
  41. package/dist/{commands-sykrxx7e.js → commands-xnvh951h.js} +2 -2
  42. package/dist/{db-sfbsc8wt.js → db-ycr5zfr4.js} +2 -2
  43. package/dist/{handlers-0aspcejm.js → handlers-1vt77kgq.js} +8 -8
  44. package/dist/{hook-hxccs7m5.js → hook-91ntpmff.js} +1 -1
  45. package/dist/{hook-4nvqj2sb.js → hook-qfwjydvn.js} +2 -2
  46. package/dist/{http-y06z517d.js → http-h6g7bv5b.js} +34 -34
  47. package/dist/{index-hssww7kj.js → index-0ez2aack.js} +11 -11
  48. package/dist/{index-tce1rss4.js → index-47ghesbn.js} +8 -8
  49. package/dist/{index-x5j894zf.js → index-antf9t4p.js} +10 -10
  50. package/dist/{index-k8znfx0z.js → index-d2mytx95.js} +9 -9
  51. package/dist/{keepalive-w733ax66.js → keepalive-c4sp7yvd.js} +4 -4
  52. package/dist/{lead-75bjqa9d.js → lead-4r7z9e8v.js} +22 -22
  53. package/dist/{maintenance-w4f1zjck.js → maintenance-yqjfdjas.js} +4 -4
  54. package/dist/{oauth-refresh-sweep-wdetky26.js → oauth-refresh-sweep-wtqgnh3c.js} +3 -3
  55. package/dist/{onboard-bb5net8s.js → onboard-a4krmh46.js} +2 -2
  56. package/dist/{otel-impl-0w7c14ap.js → otel-impl-725kq0vp.js} +1 -1
  57. package/dist/{pricing-refresh-9nzsrgcq.js → pricing-refresh-kqxd7w9h.js} +4 -4
  58. package/dist/{rbac-roles-z1jrffbt.js → rbac-roles-gws5xej6.js} +2 -2
  59. package/dist/{rbac-roles-r3hqjp09.js → rbac-roles-t3wygpth.js} +3 -3
  60. package/dist/{render-v2-vbr89fnb.js → render-v2-x1wxvn51.js} +3 -3
  61. package/dist/{seed-pricing-g62hy1pk.js → seed-pricing-t6y8d0vf.js} +3 -3
  62. package/dist/{setup-gnfqnptp.js → setup-x50py6xg.js} +2 -2
  63. package/dist/{worker-kznxp4qm.js → worker-zsz0qfxk.js} +22 -22
  64. package/openapi.json +1 -1
  65. package/package.json +3 -1
  66. package/src/tests/mcp-input-ergonomics.test.ts +386 -0
  67. package/src/tools/accept-steer.ts +0 -1
  68. package/src/tools/memory-get.ts +10 -3
  69. package/src/tools/memory-rate.ts +19 -7
  70. package/src/tools/memory-search.ts +2 -1
  71. package/src/tools/memory-store.ts +25 -5
  72. package/src/tools/send-task.ts +9 -2
  73. package/src/tools/store-progress.ts +35 -4
@@ -4,11 +4,11 @@ import {
4
4
  getEmbeddingProvider,
5
5
  init_embedding,
6
6
  serializeEmbedding
7
- } from "./cli-1th1728g.js";
7
+ } from "./cli-5khqvvnq.js";
8
8
  import {
9
9
  getDbClient,
10
10
  init_db
11
- } from "./cli-ftht3zzj.js";
11
+ } from "./cli-6s2y152y.js";
12
12
  import {
13
13
  init_secret_scrubber,
14
14
  scrubSecrets
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runStopHookSessionSummarySubprocess
3
- } from "./cli-89xfd7f9.js";
3
+ } from "./cli-brxyat7h.js";
4
4
  import {
5
5
  SessionErrorTracker,
6
6
  buildOtelTraceparentEnv,
@@ -817,7 +817,7 @@ class ClaudeAdapter {
817
817
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
818
818
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
819
819
  }
820
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-f0cc1kec.js") : undefined;
820
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-v8w0s7qm.js") : undefined;
821
821
  claudeSdk?.validateClaudeSdkAdditionalArgs([
822
822
  ...claudeBinaryArgv.slice(1),
823
823
  ...config.additionalArgs ?? []
@@ -4,12 +4,12 @@ import {
4
4
  linkIdentity,
5
5
  recordUnmappedIdentity,
6
6
  resolveIdentity
7
- } from "./cli-p1d5b073.js";
7
+ } from "./cli-xqcpg1st.js";
8
8
  import {
9
9
  getKv,
10
10
  init_db,
11
11
  upsertKv
12
- } from "./cli-ftht3zzj.js";
12
+ } from "./cli-6s2y152y.js";
13
13
 
14
14
  // src/slack/enrich.ts
15
15
  init_db();
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  SYSTEM_COLUMN_KINDS,
3
3
  listAppRecords
4
- } from "./cli-de14znh8.js";
4
+ } from "./cli-tebsjpk7.js";
5
5
  import {
6
6
  getScriptApiTypes,
7
7
  getScriptMcpTypes,
8
8
  require_typescript
9
- } from "./cli-3tgwnf43.js";
9
+ } from "./cli-0er5m69z.js";
10
10
  import {
11
11
  deleteSwarmConfigByKey,
12
12
  getAgentById,
@@ -15,7 +15,7 @@ import {
15
15
  getSwarmConfigs,
16
16
  init_db,
17
17
  upsertSwarmConfig
18
- } from "./cli-ftht3zzj.js";
18
+ } from "./cli-6s2y152y.js";
19
19
  import {
20
20
  init_secret_scrubber,
21
21
  scrubSecrets
@@ -11,17 +11,17 @@ import {
11
11
  import {
12
12
  calculateNextRun,
13
13
  runScheduleNow
14
- } from "./cli-smby5m17.js";
14
+ } from "./cli-56y3hch2.js";
15
15
  import {
16
16
  startPricingRefreshLoop
17
- } from "./cli-m8yrsg97.js";
17
+ } from "./cli-hp2est46.js";
18
18
  import {
19
19
  seedPricingFromModelsDev
20
- } from "./cli-rw51bq3j.js";
20
+ } from "./cli-0amc6myn.js";
21
21
  import {
22
22
  ensureRbacSeedsSynced,
23
23
  getUserGrant
24
- } from "./cli-8v0g1yc8.js";
24
+ } from "./cli-hzhhrt7b.js";
25
25
  import {
26
26
  can,
27
27
  decideAdmission,
@@ -48,7 +48,7 @@ import {
48
48
  runSavedScriptAsAgent,
49
49
  updateApp,
50
50
  upgradeAppDefinition
51
- } from "./cli-de14znh8.js";
51
+ } from "./cli-tebsjpk7.js";
52
52
  import {
53
53
  require_dist as require_dist2
54
54
  } from "./cli-qgm2pfpq.js";
@@ -72,7 +72,7 @@ import {
72
72
  updateTrackerSync,
73
73
  updateTrackerSyncSwarmId,
74
74
  upsertSwarmConfigWithPolicyMirror
75
- } from "./cli-f7dsy61y.js";
75
+ } from "./cli-3n7cbfjn.js";
76
76
  import {
77
77
  isMultiRuntimeEnabled
78
78
  } from "./cli-07jd68a1.js";
@@ -86,7 +86,7 @@ import {
86
86
  snapshotWorkflow,
87
87
  startWorkflowExecution,
88
88
  validateJsonSchema
89
- } from "./cli-yz3djrm0.js";
89
+ } from "./cli-f8j56xv2.js";
90
90
  import {
91
91
  ConnectionAuthInputSchema,
92
92
  SCRIPT_LONG_TIMEOUT_HINT_MS,
@@ -109,7 +109,7 @@ import {
109
109
  upsertCredentialBinding,
110
110
  upsertScriptConnection,
111
111
  validateDefinition
112
- } from "./cli-3tgwnf43.js";
112
+ } from "./cli-0er5m69z.js";
113
113
  import {
114
114
  CANDIDATE_SET_MULTIPLIER,
115
115
  computeScore,
@@ -121,7 +121,7 @@ import {
121
121
  isGraphExpansionEnabled,
122
122
  rerank,
123
123
  rowToCandidate
124
- } from "./cli-1th1728g.js";
124
+ } from "./cli-5khqvvnq.js";
125
125
  import {
126
126
  getApiKey
127
127
  } from "./cli-f14fvzag.js";
@@ -139,7 +139,7 @@ import {
139
139
  listAuthorizationsForApp,
140
140
  onAuthorizationRefreshed,
141
141
  upsertOAuthApp
142
- } from "./cli-zhjmqxzh.js";
142
+ } from "./cli-dcem3pr1.js";
143
143
  import {
144
144
  ZodFirstPartyTypeKind,
145
145
  objectType
@@ -158,7 +158,7 @@ import {
158
158
  getFileInfo,
159
159
  parseSlackTs,
160
160
  uploadFile
161
- } from "./cli-mmemxxdc.js";
161
+ } from "./cli-hz8xhefy.js";
162
162
  import {
163
163
  AgentFsProvider
164
164
  } from "./cli-jsp14b6c.js";
@@ -178,10 +178,10 @@ import {
178
178
  resolveIdentityByEmail,
179
179
  resolveUserByToken,
180
180
  unlinkIdentity
181
- } from "./cli-p1d5b073.js";
181
+ } from "./cli-xqcpg1st.js";
182
182
  import {
183
183
  createTaskWithSiblingAwareness
184
- } from "./cli-53s590z8.js";
184
+ } from "./cli-7gn7c2af.js";
185
185
  import {
186
186
  ensure,
187
187
  getAgentDisplayName,
@@ -192,7 +192,7 @@ import {
192
192
  startSlackApp,
193
193
  stopSlackApp,
194
194
  withSpan
195
- } from "./cli-b5bq9crk.js";
195
+ } from "./cli-dk3me3qs.js";
196
196
  import {
197
197
  $OpenAPIRegistry,
198
198
  $OpenApiGeneratorV31,
@@ -439,7 +439,7 @@ import {
439
439
  upsertPromptTemplate,
440
440
  upsertService,
441
441
  validateConfigValue
442
- } from "./cli-ftht3zzj.js";
442
+ } from "./cli-6s2y152y.js";
443
443
  import {
444
444
  generateDefaultClaudeMd,
445
445
  generateDefaultIdentityMd,
@@ -515,7 +515,7 @@ import {
515
515
  import {
516
516
  init_package,
517
517
  package_default
518
- } from "./cli-w9kb3bk1.js";
518
+ } from "./cli-anedxf1w.js";
519
519
  import {
520
520
  init_secret_scrubber,
521
521
  refreshSecretScrubberCache,
@@ -22303,7 +22303,7 @@ async function notifySlack(text) {
22303
22303
  return;
22304
22304
  }
22305
22305
  try {
22306
- const { getSlackApp: getSlackApp2 } = await import("./app-w066xfy0.js");
22306
+ const { getSlackApp: getSlackApp2 } = await import("./app-5fvvjv9m.js");
22307
22307
  const app = getSlackApp2();
22308
22308
  if (!app) {
22309
22309
  console.warn("[Jira webhook keepalive] Slack not available, cannot send notification");
@@ -22374,7 +22374,7 @@ async function deleteJiraWebhook(webhookId) {
22374
22374
  console.log(`[Jira webhook keepalive] Deleted webhook id=${webhookId}`);
22375
22375
  }
22376
22376
  async function overwriteWebhookIds(next) {
22377
- const { getDbClient: getDbClient2 } = await import("./db-sfbsc8wt.js");
22377
+ const { getDbClient: getDbClient2 } = await import("./db-ycr5zfr4.js");
22378
22378
  await getDbClient2().transaction(async (tx) => {
22379
22379
  const row = await tx.get("SELECT metadata FROM oauth_apps WHERE provider = 'jira'");
22380
22380
  if (!row) {
@@ -96722,7 +96722,7 @@ function assertOwnsTask(ctx, task, verb = "task.read.own") {
96722
96722
  init_secret_scrubber();
96723
96723
  var acceptSteerInputSchema = object({
96724
96724
  steeringMessageId: uuid().describe("The steering message ID to acknowledge."),
96725
- note: string().max(500).optional().describe("Optional short note describing how the steering was incorporated.")
96725
+ note: string().optional().describe("Optional short note describing how the steering was incorporated.")
96726
96726
  });
96727
96727
  var looseSteeringMessageSchema = looseObject({
96728
96728
  id: string().optional(),
@@ -105505,8 +105505,9 @@ var registerMemoryGetTool = (server) => {
105505
105505
  description: "Retrieve the full content of a specific memory by its ID. Use memory-search to find memory IDs first.",
105506
105506
  annotations: { readOnlyHint: true },
105507
105507
  inputSchema: object({
105508
- memoryId: uuid().describe("The ID of the memory to retrieve."),
105509
- intent: string().min(1).describe("Why you are retrieving this memory. Required. E.g. 'need full details of the auth fix pattern'.")
105508
+ memoryId: uuid().optional().describe("The ID of the memory to retrieve (or use id)."),
105509
+ id: uuid().optional().describe("Alias for memoryId, matching memory-search results."),
105510
+ intent: string().min(1).optional().describe("Optional reason for retrieving this memory. E.g. 'need full details of the auth fix pattern'.")
105510
105511
  }),
105511
105512
  outputSchema: swarmToolOutputSchema({
105512
105513
  yourAgentId: string().optional(),
@@ -105515,7 +105516,13 @@ var registerMemoryGetTool = (server) => {
105515
105516
  backlinks: array(MemoryBacklinkSchema).optional().describe("Other memories whose content links to this one (ACL-filtered)."),
105516
105517
  rateHint: string().optional()
105517
105518
  })
105518
- }, async ({ memoryId, intent }, requestInfo, _meta) => {
105519
+ }, async ({ memoryId: requestedMemoryId, id, intent }, requestInfo, _meta) => {
105520
+ if (requestedMemoryId && id && requestedMemoryId !== id) {
105521
+ return toolErr("memoryId and id must identify the same memory; supply only one.");
105522
+ }
105523
+ const memoryId = requestedMemoryId ?? id;
105524
+ if (!memoryId)
105525
+ return toolErr("Supply memoryId (or its alias id) from memory-search.");
105519
105526
  const store = getMemoryStore();
105520
105527
  const memoryForAuth = await store.peek(memoryId);
105521
105528
  if (!memoryForAuth) {
@@ -105573,13 +105580,20 @@ var registerMemoryRateTool = (server) => {
105573
105580
  description: "Rate a memory you used in the current task. Call this when a " + "retrieved memory was clearly useful (or actively misleading) so " + "the swarm learns to surface better memories next time.",
105574
105581
  annotations: { destructiveHint: false },
105575
105582
  inputSchema: object({
105576
- id: string().describe("Memory ID returned by memory_search."),
105583
+ id: string().min(1).optional().describe("Memory ID returned by memory-search (or use memoryId)."),
105584
+ memoryId: string().min(1).optional().describe("Alias for id, matching memory-get."),
105577
105585
  useful: boolean().describe("true = this memory helped solve the task; false = misled or wasted time."),
105578
- note: string().max(280).optional().describe("Short reason. Captured for telemetry; not surfaced to other agents."),
105586
+ note: string().optional().describe("Reason, stored up to 500 characters for telemetry; not surfaced to other agents."),
105579
105587
  referencesSource: string().min(1).max(REFERENCES_SOURCE_MAX_LENGTH).optional().describe(REFERENCES_SOURCE_DESCRIPTION)
105580
105588
  }),
105581
105589
  outputSchema: swarmToolOutputSchema()
105582
- }, async ({ id, useful, note, referencesSource }, requestInfo, _meta) => {
105590
+ }, async ({ id, memoryId, useful, note, referencesSource }, requestInfo, _meta) => {
105591
+ if (id && memoryId && id !== memoryId) {
105592
+ return toolErr("id and memoryId must identify the same memory; supply only one.");
105593
+ }
105594
+ const resolvedMemoryId = id ?? memoryId;
105595
+ if (!resolvedMemoryId)
105596
+ return toolErr("Supply id (or its alias memoryId) from memory-search.");
105583
105597
  if (!requestInfo.agentId) {
105584
105598
  return toolErr("Agent ID required. Are you registered in the swarm?");
105585
105599
  }
@@ -105597,11 +105611,11 @@ var registerMemoryRateTool = (server) => {
105597
105611
  const apiUrl = getMcpBaseUrl();
105598
105612
  const apiKey = getApiKey();
105599
105613
  const event = {
105600
- memoryId: id,
105614
+ memoryId: resolvedMemoryId,
105601
105615
  signal: useful ? 1 : -1,
105602
105616
  weight: 1,
105603
105617
  source: "explicit-self",
105604
- reasoning: note ?? "",
105618
+ reasoning: (note ?? "").slice(0, 500),
105605
105619
  taskId: requestInfo.sourceTaskId,
105606
105620
  ...cleanedReferencesSource !== undefined ? { referencesSource: cleanedReferencesSource } : {}
105607
105621
  };
@@ -105630,7 +105644,7 @@ var registerMemoryRateTool = (server) => {
105630
105644
  if (!response.ok) {
105631
105645
  return toolErr(`Memory rating failed (HTTP ${response.status}).`);
105632
105646
  }
105633
- return toolOk(`Memory ${id} rated as ${useful ? "useful" : "not useful"}.`);
105647
+ return toolOk(`Memory ${resolvedMemoryId} rated as ${useful ? "useful" : "not useful"}.`);
105634
105648
  } catch (err) {
105635
105649
  return toolErr(`Memory rating failed: ${err.message}`);
105636
105650
  }
@@ -105777,7 +105791,7 @@ var registerMemorySearchTool = (server) => {
105777
105791
  annotations: { readOnlyHint: false },
105778
105792
  inputSchema: object({
105779
105793
  query: string().min(1).describe("Natural language search query."),
105780
- intent: string().min(1).describe("Why you are searching for this memory. Required. E.g. 'looking for auth pattern to fix login bug'."),
105794
+ intent: string().min(1).optional().describe("Optional reason for searching for this memory. E.g. 'looking for auth pattern to fix login bug'."),
105781
105795
  scope: _enum(["all", "agent", "swarm"]).default("all").describe("Search scope: 'all' (own + swarm), 'agent' (own only), 'swarm' (shared only)."),
105782
105796
  limit: number().int().min(1).max(50).default(10).describe("Max results to return."),
105783
105797
  source: AgentMemorySourceSchema.optional().describe("Filter by memory source type.")
@@ -106116,9 +106130,9 @@ var registerMemoryStoreTool = (server) => {
106116
106130
  annotations: { destructiveHint: false },
106117
106131
  inputSchema: object({
106118
106132
  content: string().min(1).describe("The memory body. Markdown is fine. State the fact, the context it applies to, and the evidence."),
106119
- name: string().min(1).max(200).describe("Short title, one line, used in search results and the UI."),
106133
+ name: string().min(1).max(200).optional().describe("Short title used in search results and the UI. Defaults to the first non-empty content line (up to 200 characters)."),
106120
106134
  scope: AgentMemoryScopeSchema.default("agent").describe("'agent' (default): only you can recall it. 'swarm': every agent can recall it."),
106121
- tags: array(string()).optional().describe("Free-form tags, for example a repo name or a topic."),
106135
+ tags: union([array(string()), string()]).optional().describe("Free-form tags as an array or a comma-separated string, for example a repo name or a topic."),
106122
106136
  taskId: uuid().optional().describe("The task this learning came from, when there is one."),
106123
106137
  intent: string().min(1).optional().describe("Why this is worth remembering. Kept in the audit trail.")
106124
106138
  }),
@@ -106128,7 +106142,9 @@ var registerMemoryStoreTool = (server) => {
106128
106142
  chunks: number().int().optional(),
106129
106143
  queued: boolean().optional()
106130
106144
  })
106131
- }, async ({ content, name, scope, tags, taskId, intent }, requestInfo, _meta) => {
106145
+ }, async ({ content, name: requestedName, scope, tags, taskId, intent }, requestInfo, _meta) => {
106146
+ const name = requestedName ?? content.split(/\r?\n/).find((line) => line.trim())?.trim().slice(0, 200) ?? "Untitled memory";
106147
+ const normalizedTags = typeof tags === "string" ? tags.split(",").map((tag) => tag.trim()).filter(Boolean) : tags;
106132
106148
  if (!requestInfo.agentId) {
106133
106149
  return toolErr("Agent ID required. Are you registered in the swarm?");
106134
106150
  }
@@ -106140,7 +106156,7 @@ var registerMemoryStoreTool = (server) => {
106140
106156
  scope,
106141
106157
  source: "manual",
106142
106158
  sourceTaskId: taskId ?? null,
106143
- tags,
106159
+ tags: normalizedTags,
106144
106160
  intent
106145
106161
  });
106146
106162
  return toolOk(`Memory "${name}" stored as ${result.chunks} chunk(s) in ${scope} scope. Embedding runs in the background.`, {
@@ -116190,7 +116206,7 @@ var sendTaskInputSchema = object({
116190
116206
  slackThreadTs: string().optional().describe("Slack thread timestamp. Required with slackChannelId for thread-level updates."),
116191
116207
  slackUserId: string().optional().describe("Slack user ID of the original requester."),
116192
116208
  overrideSlackContext: boolean().default(false).describe("Explicitly route this task's Slack updates to a different channel/thread than its parent/contextKey. Requires slackChannelId AND slackThreadTs. Use only for deliberate cross-channel dispatch (e.g. escalation to another human's DM); logged for audit. Without this flag, a slackChannelId/slackThreadTs that disagrees with the parent task or inherited contextKey is rejected — omit the three Slack fields to inherit them from the parent as a unit instead."),
116193
- requestedByUserId: string().uuid().optional().describe("ID of the human user who originally requested this task chain. When omitted, inherited from the caller's current task so the attribution flows through multi-hop delegation automatically."),
116209
+ requestedByUserId: string().regex(/^[a-f0-9]{32}$/, "Expected a registry user ID (32 lowercase hexadecimal characters).").optional().describe("Registered requester ID (32 lowercase hexadecimal characters). When omitted, inherited from the caller's current task so the attribution flows through multi-hop delegation automatically."),
116194
116210
  followUpConfig: FollowUpConfigSchema.optional().describe("Control the lead follow-up created when this task finishes. When to use `followUpConfig`: set `disabled: true` when you'll wait for this task to complete inline and no follow-up is needed; set `onCompleted` / `onFailed` with specific instructions when you need to follow up effectively on a particular outcome of a long-running flow; for normal one-shot tasks, leave it unset because defaults are fine. It is most valuable for long-running / complex flows."),
116195
116211
  outputSchema: record(string(), unknown()).optional().describe("Optional JSON Schema the assignee's final output must satisfy. store-progress rejects a completion that does not match. Supported keywords: type, required, properties, enum, const, items.")
116196
116212
  }).superRefine((data, ctx) => {
@@ -116260,6 +116276,11 @@ async function sendTaskHandler(ctx, {
116260
116276
  const creatorAgentId = ctx.kind === "owner" ? ctx.agentId : undefined;
116261
116277
  const sourceTaskId = ctx.kind === "owner" ? ctx.sourceTaskId : undefined;
116262
116278
  const requestedByUserId = ctx.kind === "user" ? ctx.userId : inputRequestedByUserId ?? undefined;
116279
+ if (ctx.kind === "owner" && requestedByUserId && !await getUserById(requestedByUserId)) {
116280
+ return toolErr("requestedByUserId must identify an existing registered user.", {
116281
+ data: { yourAgentId: creatorAgentId }
116282
+ });
116283
+ }
116263
116284
  if (ctx.kind === "owner" && agentId === ctx.agentId) {
116264
116285
  return toolErr("Cannot send a task to yourself, are you drunk?", {
116265
116286
  data: { yourAgentId: ctx.agentId }
@@ -118777,9 +118798,9 @@ var registerStoreProgressTool = (server) => {
118777
118798
  description: "Stores the progress of a specific task. Can also mark task as completed or failed, which will set the agent back to idle.",
118778
118799
  annotations: { idempotentHint: true },
118779
118800
  inputSchema: object({
118780
- taskId: uuid().describe("The ID of the task to update progress for."),
118801
+ taskId: uuid().optional().describe("Full task UUID. Defaults to the caller-owned task in X-Source-Task-Id; required outside task context."),
118781
118802
  progress: string().optional().describe("The progress update to store."),
118782
- status: _enum(["completed", "failed"]).optional().describe("Set to 'completed' or 'failed' to finish the task."),
118803
+ status: _enum(["completed", "failed", "in_progress", "pending"]).optional().describe("Set to 'completed' or 'failed' to finish the task. 'in_progress' and 'pending' store progress only and do not change task status."),
118783
118804
  output: string().optional().describe("The task result (used when completing). For Slack-originated tasks, this is published verbatim in the thread's outcome card: provide a concrete summary scaled to what was asked, including only the outcome and any links or IDs the human needs—not process narration, a transcript, or a restatement of the brief."),
118784
118805
  failureReason: string().optional().describe("The reason for failure (used when failing)."),
118785
118806
  attachments: array(AttachmentInputSchema).max(20).optional().describe("Pointer-based artifacts produced by this step — agent-fs path, URL, shared-fs path, or swarm Page. No inline file data; upload to agent-fs first and attach by path. Agent-fs pointers are verified before task state changes, using the explicit org/drive pair or the registering agent's configured defaults. May be sent on any call (progress or completion) and accumulates across calls; duplicates are de-duped by sha256 (when present) or by (kind, pointer, name)."),
@@ -118787,10 +118808,30 @@ var registerStoreProgressTool = (server) => {
118787
118808
  force: boolean().optional().describe("On an already-terminal task, overwrite explicitly provided output and/or failureReason text while preserving status and finishedAt and without replaying events, memory writes, follow-up creation, business-use ensure, or capacity updates. Differing terminal text is otherwise discarded and reported as a failure.")
118788
118809
  }),
118789
118810
  outputSchema: storeProgressOutputSchema
118790
- }, async ({ taskId, progress, status, output, failureReason, attachments, persistMemory, force }, requestInfo, _meta) => {
118811
+ }, async ({
118812
+ taskId: requestedTaskId,
118813
+ progress,
118814
+ status: requestedStatus,
118815
+ output,
118816
+ failureReason,
118817
+ attachments,
118818
+ persistMemory,
118819
+ force
118820
+ }, requestInfo, _meta) => {
118791
118821
  if (!requestInfo.agentId) {
118792
118822
  return toolErr('Agent ID not found. The MCP client should define the "X-Agent-ID" header.');
118793
118823
  }
118824
+ const taskId = requestedTaskId ?? requestInfo.sourceTaskId;
118825
+ if (!taskId || !uuid().safeParse(taskId).success) {
118826
+ return toolErr("Supply taskId as the full task UUID; no valid task context is available.");
118827
+ }
118828
+ if (!requestedTaskId) {
118829
+ const contextTask = await getTaskById(taskId);
118830
+ if (!contextTask || contextTask.agentId !== requestInfo.agentId) {
118831
+ return toolErr("Omitted taskId requires a source task assigned to the calling agent.");
118832
+ }
118833
+ }
118834
+ const status = requestedStatus === "completed" || requestedStatus === "failed" ? requestedStatus : undefined;
118794
118835
  const agentFsScopes = new Map;
118795
118836
  const agentFsAttachments = attachments?.filter((a) => a.kind === "agent-fs") ?? [];
118796
118837
  if (agentFsAttachments.length > 0) {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createAdditiveBuffer,
3
3
  extractSlackMessageText
4
- } from "./cli-mmemxxdc.js";
4
+ } from "./cli-hz8xhefy.js";
5
5
  import {
6
6
  rewriteSlackMentions
7
- } from "./cli-dttph1bw.js";
7
+ } from "./cli-n2cwscdd.js";
8
8
  import {
9
9
  createTaskWithSiblingAwareness
10
- } from "./cli-53s590z8.js";
10
+ } from "./cli-7gn7c2af.js";
11
11
  import {
12
12
  buildBufferFlushBlocks,
13
13
  ensureSlackThreadTree,
@@ -16,7 +16,7 @@ import {
16
16
  getSlackApp,
17
17
  isSlackRenderV2Enabled,
18
18
  registerTreeMessage
19
- } from "./cli-b5bq9crk.js";
19
+ } from "./cli-dk3me3qs.js";
20
20
  import {
21
21
  createLogEntry,
22
22
  getAgentById,
@@ -29,7 +29,7 @@ import {
29
29
  init_steering,
30
30
  requestSteering,
31
31
  slackContextKey
32
- } from "./cli-ftht3zzj.js";
32
+ } from "./cli-6s2y152y.js";
33
33
  import {
34
34
  init_steering_enabled,
35
35
  isSteeringEnabled
@@ -7,14 +7,14 @@ import {
7
7
  restoreScratchScriptLastUsedIfUnchanged,
8
8
  runScript,
9
9
  touchScratchScriptLastUsed
10
- } from "./cli-3tgwnf43.js";
10
+ } from "./cli-0er5m69z.js";
11
11
  import {
12
12
  defaultAssetKey,
13
13
  getDbClient,
14
14
  getLeadAgent,
15
15
  init_db,
16
16
  init_key
17
- } from "./cli-ftht3zzj.js";
17
+ } from "./cli-6s2y152y.js";
18
18
  import {
19
19
  init_zod
20
20
  } from "./cli-sd0mxa3c.js";
@@ -49,7 +49,7 @@ import {
49
49
  import {
50
50
  init_package,
51
51
  package_default
52
- } from "./cli-w9kb3bk1.js";
52
+ } from "./cli-anedxf1w.js";
53
53
  import {
54
54
  init_secret_scrubber,
55
55
  scrubSecrets
@@ -4,7 +4,7 @@ import {
4
4
  incrKv,
5
5
  init_db,
6
6
  upsertKv
7
- } from "./cli-ftht3zzj.js";
7
+ } from "./cli-6s2y152y.js";
8
8
 
9
9
  // src/be/users.ts
10
10
  init_db();
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-w9kb3bk1.js";
4
+ } from "./cli-anedxf1w.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
package/dist/cli.js CHANGED
@@ -65,7 +65,7 @@ var import_react = __toESM(require_react(), 1);
65
65
  // package.json
66
66
  var package_default = {
67
67
  name: "@desplega.ai/agent-swarm",
68
- version: "1.147.0",
68
+ version: "1.148.0",
69
69
  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.",
70
70
  keywords: [
71
71
  "agent-swarm.dev",
@@ -176,6 +176,8 @@ var package_default = {
176
176
  "prepare-release": "bun scripts/prepare-release.ts",
177
177
  "refresh:vendored-openapi": "bun scripts/refresh-vendored-openapi.ts",
178
178
  "sync-chart-version": "bun scripts/sync-chart-version.ts",
179
+ "sync-plugin-versions": "bun scripts/sync-plugin-versions.ts",
180
+ "check:plugin-versions": "bun scripts/sync-plugin-versions.ts --check",
179
181
  "bump:agent-fs": "bun scripts/bump-agent-fs.ts",
180
182
  "check-chart-version": "bun scripts/sync-chart-version.ts --check-if-package-version-changed",
181
183
  cli: "bun src/cli.tsx",
@@ -739,7 +741,7 @@ function McpServer({ port, apiKey, dbPath }) {
739
741
  if (dbPath) {
740
742
  process.env.DATABASE_PATH = dbPath;
741
743
  }
742
- import("./http-y06z517d.js").then(() => {
744
+ import("./http-h6g7bv5b.js").then(() => {
743
745
  setStatus("running");
744
746
  }).catch((err) => {
745
747
  setStatus("error");
@@ -825,7 +827,7 @@ function WorkerRunner({
825
827
  }) {
826
828
  const { exit } = use_app_default();
827
829
  import_react.useEffect(() => {
828
- import("./worker-kznxp4qm.js").then(({ runWorker }) => runWorker({
830
+ import("./worker-zsz0qfxk.js").then(({ runWorker }) => runWorker({
829
831
  prompt: prompt || undefined,
830
832
  yolo,
831
833
  systemPrompt: systemPrompt || undefined,
@@ -842,7 +844,7 @@ function WorkerRunner({
842
844
  function LeadRunner({ prompt, yolo, systemPrompt, systemPromptFile, additionalArgs }) {
843
845
  const { exit } = use_app_default();
844
846
  import_react.useEffect(() => {
845
- import("./lead-75bjqa9d.js").then(({ runLead }) => runLead({
847
+ import("./lead-4r7z9e8v.js").then(({ runLead }) => runLead({
846
848
  prompt: prompt || undefined,
847
849
  yolo,
848
850
  systemPrompt: systemPrompt || undefined,
@@ -882,8 +884,8 @@ function LazyComponent({
882
884
  }
883
885
  return import_react.createElement(Component, props);
884
886
  }
885
- var loadOnboard = () => import("./onboard-bb5net8s.js").then(({ Onboard }) => Onboard);
886
- var loadConnect = () => import("./setup-gnfqnptp.js").then(({ Setup }) => Setup);
887
+ var loadOnboard = () => import("./onboard-a4krmh46.js").then(({ Onboard }) => Onboard);
888
+ var loadConnect = () => import("./setup-x50py6xg.js").then(({ Setup }) => Setup);
887
889
  function UnknownCommand({ command }) {
888
890
  const { exit } = use_app_default();
889
891
  import_react.useEffect(() => {
@@ -1004,14 +1006,14 @@ ${binName} docs \u2014 v${package_default.version}
1004
1006
  }
1005
1007
  process.exit(0);
1006
1008
  } else if (args.command === "hook") {
1007
- const { runHook } = await import("./hook-4nvqj2sb.js");
1009
+ const { runHook } = await import("./hook-qfwjydvn.js");
1008
1010
  await runHook();
1009
1011
  } else if (args.command === "codex-hook") {
1010
1012
  const { handleCodexHook } = await import("./codex-hook-bw8p5nh4.js");
1011
1013
  await handleCodexHook();
1012
1014
  process.exit(0);
1013
1015
  } else if (args.command === "session-summary-stdin") {
1014
- const { runSessionSummaryFromStdin } = await import("./hook-hxccs7m5.js");
1016
+ const { runSessionSummaryFromStdin } = await import("./hook-91ntpmff.js");
1015
1017
  await runSessionSummaryFromStdin();
1016
1018
  process.exit(process.exitCode ?? 0);
1017
1019
  } else if (args.command === "artifact") {
@@ -1032,7 +1034,7 @@ ${binName} docs \u2014 v${package_default.version}
1032
1034
  printHelp("scripts");
1033
1035
  process.exit(scriptsArgs[0] === "reembed" || args.showHelp ? 0 : 1);
1034
1036
  }
1035
- const { runScriptsMaintenanceCommand } = await import("./maintenance-w4f1zjck.js");
1037
+ const { runScriptsMaintenanceCommand } = await import("./maintenance-yqjfdjas.js");
1036
1038
  await runScriptsMaintenanceCommand(scriptsArgs);
1037
1039
  console.log("Scripts re-embedded.");
1038
1040
  } else if (args.command === "rbac") {
@@ -1042,14 +1044,14 @@ ${binName} docs \u2014 v${package_default.version}
1042
1044
  printHelp("rbac");
1043
1045
  process.exit(args.showHelp ? 0 : 1);
1044
1046
  }
1045
- const { runRbacCliCommand } = await import("./rbac-roles-z1jrffbt.js");
1047
+ const { runRbacCliCommand } = await import("./rbac-roles-gws5xej6.js");
1046
1048
  await runRbacCliCommand(rbacArgs);
1047
1049
  } else if (args.command === "codex-login") {
1048
1050
  const { runCodexLogin } = await import("./codex-login-vx7ghkzj.js");
1049
1051
  const codexLoginArgs = process.argv.slice(process.argv.indexOf("codex-login") + 1);
1050
1052
  await runCodexLogin(codexLoginArgs);
1051
1053
  } else if (args.command === "codex-session-runner") {
1052
- const { runCodexSessionRunner } = await import("./codex-session-runner-k981s65v.js");
1054
+ const { runCodexSessionRunner } = await import("./codex-session-runner-5hne566k.js");
1053
1055
  await runCodexSessionRunner();
1054
1056
  } else if (args.command === "claude-managed-setup") {
1055
1057
  const { runClaudeManagedSetup } = await import("./claude-managed-setup-f5pmsyrp.js");
@@ -6,7 +6,7 @@ import {
6
6
  createInProcessCodexSession,
7
7
  resolveCodexAuthMode,
8
8
  resolveCodexRunnerArgv
9
- } from "./cli-4nr988h6.js";
9
+ } from "./cli-v3e51x7w.js";
10
10
  import"./cli-hsxj0yar.js";
11
11
  import"./cli-r94z9p1z.js";
12
12
  import"./cli-2djtr51b.js";
@@ -27,7 +27,7 @@ import"./cli-bsakbbkm.js";
27
27
  import"./cli-ej6gbxfb.js";
28
28
  import"./cli-sd0mxa3c.js";
29
29
  import"./cli-w5e1d1vv.js";
30
- import"./cli-w9kb3bk1.js";
30
+ import"./cli-anedxf1w.js";
31
31
  import"./cli-xqcq9y5e.js";
32
32
  import"./cli-knd276ed.js";
33
33
  import"./cli-c4eeb5q2.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createInProcessCodexSession
3
- } from "./cli-4nr988h6.js";
3
+ } from "./cli-v3e51x7w.js";
4
4
  import"./cli-hsxj0yar.js";
5
5
  import"./cli-r94z9p1z.js";
6
6
  import"./cli-2djtr51b.js";
@@ -21,7 +21,7 @@ import"./cli-bsakbbkm.js";
21
21
  import"./cli-ej6gbxfb.js";
22
22
  import"./cli-sd0mxa3c.js";
23
23
  import"./cli-w5e1d1vv.js";
24
- import"./cli-w9kb3bk1.js";
24
+ import"./cli-anedxf1w.js";
25
25
  import {
26
26
  init_secret_scrubber,
27
27
  scrubSecrets
@@ -2,7 +2,7 @@ import {
2
2
  getAllAgents,
3
3
  getAllTasks,
4
4
  init_db
5
- } from "./cli-ftht3zzj.js";
5
+ } from "./cli-6s2y152y.js";
6
6
  import"./cli-y6b6fb76.js";
7
7
  import"./cli-kpv03zhj.js";
8
8
  import"./cli-e29gmdmw.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./cli-ej6gbxfb.js";
14
14
  import"./cli-sd0mxa3c.js";
15
15
  import"./cli-w5e1d1vv.js";
16
- import"./cli-w9kb3bk1.js";
16
+ import"./cli-anedxf1w.js";
17
17
  import"./cli-xqcq9y5e.js";
18
18
  import"./cli-zf8jjwex.js";
19
19
  import"./cli-bc05qbss.js";
@@ -455,7 +455,7 @@ import {
455
455
  upsertSkillFiles,
456
456
  upsertSwarmConfig,
457
457
  withFavoriteFlags
458
- } from "./cli-ftht3zzj.js";
458
+ } from "./cli-6s2y152y.js";
459
459
  import {
460
460
  generateDefaultClaudeMd,
461
461
  generateDefaultIdentityMd,
@@ -468,7 +468,7 @@ import"./cli-c2mk1kgf.js";
468
468
  import"./cli-ej6gbxfb.js";
469
469
  import"./cli-sd0mxa3c.js";
470
470
  import"./cli-w5e1d1vv.js";
471
- import"./cli-w9kb3bk1.js";
471
+ import"./cli-anedxf1w.js";
472
472
  import"./cli-xqcq9y5e.js";
473
473
  import"./cli-zf8jjwex.js";
474
474
  import"./cli-bc05qbss.js";