@desplega.ai/agent-swarm 2.2.0 → 2.3.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 (107) hide show
  1. package/dist/{acp-adapter-k0vwfyvn.js → acp-adapter-v85a2bqy.js} +1 -1
  2. package/dist/{actions-w4pnb8vz.js → actions-zgcxfspj.js} +15 -15
  3. package/dist/{amp-adapter-0cmxb2t5.js → amp-adapter-jw9xfz42.js} +2 -2
  4. package/dist/{app-zneem7g9.js → app-4e1s4675.js} +3 -3
  5. package/dist/{assistant-wbzd2rnr.js → assistant-v238n9dk.js} +16 -16
  6. package/dist/{boot-reembed-4kx69j3g.js → boot-reembed-p666cw5n.js} +1 -1
  7. package/dist/{boot-reembed-db0wwgy1.js → boot-reembed-w6pm64j4.js} +1 -1
  8. package/dist/{boot-scrub-sweep-tfv4d3mm.js → boot-scrub-sweep-jcyjagn3.js} +2 -2
  9. package/dist/{boot-seeds-w2hmkxn5.js → boot-seeds-gbedmamp.js} +4 -4
  10. package/dist/{claude-adapter-5qrc2paq.js → claude-adapter-q7wspzt8.js} +2 -2
  11. package/dist/{claude-managed-setup-7ra32em4.js → claude-managed-setup-wza784fb.js} +1 -1
  12. package/dist/{claude-sdk-session-cd02gc76.js → claude-sdk-session-yf400ptr.js} +2 -2
  13. package/dist/{cli-p46xdr1m.js → cli-0rh20bp3.js} +1 -1
  14. package/dist/{cli-e5y285rg.js → cli-1v8w782f.js} +1 -1
  15. package/dist/{cli-8c1m9mhy.js → cli-30m5q8mc.js} +5 -5
  16. package/dist/{cli-xnp2vkx7.js → cli-4hmaheb6.js} +6 -6
  17. package/dist/{cli-xhgtay7w.js → cli-4s1kqrqg.js} +1 -1
  18. package/dist/{cli-2jm992rm.js → cli-5d1m1qca.js} +2 -2
  19. package/dist/{cli-mvsfbbgq.js → cli-65q70v2v.js} +3 -3
  20. package/dist/{cli-th8krqbf.js → cli-6p7ddg72.js} +2 -2
  21. package/dist/{cli-6q7pyd3k.js → cli-6vcyw6v7.js} +1 -1
  22. package/dist/{cli-bddxamg7.js → cli-8qsx817b.js} +23 -22
  23. package/dist/{cli-ztcxv5nv.js → cli-9e9kjqsj.js} +1 -1
  24. package/dist/{cli-jrk8mj0t.js → cli-a17tzmn0.js} +1 -1
  25. package/dist/{cli-raejy0mp.js → cli-d43xqzbe.js} +1 -1
  26. package/dist/{cli-tba8fxf9.js → cli-dxwh4j32.js} +11 -11
  27. package/dist/{cli-c9vrwcpb.js → cli-ea7chd26.js} +19 -19
  28. package/dist/{cli-vmbakbq0.js → cli-fhvqt2fp.js} +1 -1
  29. package/dist/{cli-z3dk189k.js → cli-fp4xbw07.js} +6 -6
  30. package/dist/{cli-xx13gqf3.js → cli-g6p7c2my.js} +1 -1
  31. package/dist/{cli-c0dpzwnx.js → cli-hn3pftj2.js} +2 -2
  32. package/dist/{cli-h23mr2s6.js → cli-hz64bcnj.js} +2 -2
  33. package/dist/{cli-dw0njd9q.js → cli-jhmjwqcg.js} +5 -5
  34. package/dist/{cli-0k9rcwfy.js → cli-ka01m5rb.js} +28 -12
  35. package/dist/{cli-jhhb2v9n.js → cli-kqypty34.js} +2 -2
  36. package/dist/{cli-hwc4a9xm.js → cli-q1812jbw.js} +4 -4
  37. package/dist/{cli-8w65vwee.js → cli-qrwp40st.js} +1 -1
  38. package/dist/{cli-4c7k75rq.js → cli-re4wkbzx.js} +54 -41
  39. package/dist/{cli-z1hh99j0.js → cli-tr24eeny.js} +2 -2
  40. package/dist/{cli-q6gw45wj.js → cli-wtg6edvd.js} +1 -1
  41. package/dist/{cli-mnry16kh.js → cli-xgn4rwyv.js} +4 -4
  42. package/dist/{cli-5ks6x36q.js → cli-y3dvz6ge.js} +3 -3
  43. package/dist/{cli-ksrphveb.js → cli-yv0vgscc.js} +1 -0
  44. package/dist/{cli-ak4c12mh.js → cli-yv3n83x8.js} +1 -1
  45. package/dist/{cli-9ac0mkg5.js → cli-zes4tsbb.js} +1 -1
  46. package/dist/cli.js +14 -14
  47. package/dist/{codex-adapter-m0fx3v3s.js → codex-adapter-nhjj2veb.js} +1 -1
  48. package/dist/{codex-session-runner-j9m2gfyy.js → codex-session-runner-6hggrjbx.js} +1 -1
  49. package/dist/{commands-ktnqwrv4.js → commands-mrw1ph2w.js} +2 -2
  50. package/dist/{controller-nex2he8v.js → controller-pt1zam5w.js} +2 -2
  51. package/dist/{controllers-connect-6yhwqv9v.js → controllers-connect-ymw5541d.js} +16 -16
  52. package/dist/{cursor-adapter-02s5ekva.js → cursor-adapter-cf4zh5x0.js} +1 -1
  53. package/dist/{db-19tw9r5s.js → db-hhpy6m4x.js} +2 -2
  54. package/dist/{db-jvr86v7f.js → db-hy80219q.js} +1 -1
  55. package/dist/{dispatcher-d3mnsg2y.js → dispatcher-6pdjtkr1.js} +14 -14
  56. package/dist/{dsh-adapter-63rvej88.js → dsh-adapter-fbx06re2.js} +1 -1
  57. package/dist/{external-channel-44cwer32.js → external-channel-j6vb6ya1.js} +2 -2
  58. package/dist/{grok-adapter-ysp907f6.js → grok-adapter-1193sprp.js} +2 -2
  59. package/dist/{handlers-t5pbabwf.js → handlers-tb3xgjnm.js} +17 -17
  60. package/dist/{heartbeat-2etacsqq.js → heartbeat-h1w1ktce.js} +17 -17
  61. package/dist/{hook-3kvmax6d.js → hook-ejja4bpe.js} +1 -1
  62. package/dist/{hook-mzxxs5n2.js → hook-skrbja18.js} +1 -1
  63. package/dist/{http-fn978m0g.js → http-mzh41mfj.js} +108 -52
  64. package/dist/{index-039x2sag.js → index-6rmnn89d.js} +40 -12
  65. package/dist/{index-w2wr89xd.js → index-epr2gnbw.js} +1 -1
  66. package/dist/{index-qyjbb7br.js → index-nyfcdpky.js} +17 -17
  67. package/dist/{index-e4tsa1h7.js → index-vjn3wbzf.js} +14 -14
  68. package/dist/{index-1r8hw4vd.js → index-xmmkyx82.js} +14 -14
  69. package/dist/{keepalive-d4nzs76x.js → keepalive-4djvbm2j.js} +3 -3
  70. package/dist/{lead-8h5n9k5f.js → lead-61kqp604.js} +23 -23
  71. package/dist/{maintenance-ea6jfw42.js → maintenance-f3xhnjsm.js} +1 -1
  72. package/dist/{oauth-refresh-sweep-3f25djq3.js → oauth-refresh-sweep-fpd6x6rw.js} +2 -2
  73. package/dist/{onboard-pvk7hdb2.js → onboard-196tjgyn.js} +2 -2
  74. package/dist/{otel-impl-qb7nhgdp.js → otel-impl-g8fh4c21.js} +1 -1
  75. package/dist/{pricing-refresh-6ehwkcmp.js → pricing-refresh-sdcf5yaz.js} +3 -3
  76. package/dist/{rbac-roles-9648nh00.js → rbac-roles-2x4g1wb5.js} +2 -2
  77. package/dist/{rbac-roles-km0f9cmm.js → rbac-roles-bsp5657v.js} +1 -1
  78. package/dist/{render-v2-xkze1wef.js → render-v2-0pyb39bb.js} +3 -3
  79. package/dist/{resume-tq0bbvt5.js → resume-a86tkj6r.js} +5 -5
  80. package/dist/{setup-rnrazxvd.js → setup-ypbzcapd.js} +1 -1
  81. package/dist/{work-objects-e75q2rqs.js → work-objects-yjp8de12.js} +17 -17
  82. package/dist/{worker-4ww4hjef.js → worker-4ptnn1ge.js} +23 -23
  83. package/openapi.json +168 -6
  84. package/package.json +2 -2
  85. package/src/be/asset-key-audit.ts +4 -13
  86. package/src/be/db.ts +57 -33
  87. package/src/be/migrations/227_inbox_item_state_last_read_at.sql +1 -0
  88. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +22 -4
  89. package/src/heartbeat/heartbeat.ts +25 -7
  90. package/src/http/assets.ts +26 -4
  91. package/src/http/inbox-state.ts +58 -8
  92. package/src/kv-reserved-namespaces.ts +1 -0
  93. package/src/providers/amp-adapter.ts +1 -1
  94. package/src/tests/asset-key-api.test.ts +128 -0
  95. package/src/tests/asset-key-invariants.test.ts +179 -3
  96. package/src/tests/asset-key-migration.test.ts +35 -0
  97. package/src/tests/docs-index-footprint.test.js +2 -2
  98. package/src/tests/heartbeat-checklist.test.ts +88 -0
  99. package/src/tests/heartbeat-jev-gate.test.ts +394 -10
  100. package/src/tests/inbox-state.test.ts +167 -0
  101. package/src/tests/kv-tool.test.ts +15 -0
  102. package/src/tests/script-connections.test.ts +2 -0
  103. package/src/types.ts +2 -0
  104. package/templates/skills/code-quality/content.md +2 -2
  105. package/templates/skills/pages/content.md +4 -0
  106. package/templates/skills/swarm-scripts/SKILL.md +6 -0
  107. package/templates/skills/swarm-scripts/content.md +6 -0
@@ -22,7 +22,7 @@ import {
22
22
  VersionableFieldSchema,
23
23
  SessionCostModelBreakdownSchema,
24
24
  init_types
25
- } from "./cli-ksrphveb.js";
25
+ } from "./cli-yv0vgscc.js";
26
26
  import {
27
27
  generateDefaultClaudeMd2,
28
28
  generateDefaultSoulMd2,
@@ -101,7 +101,7 @@ import {
101
101
  import {
102
102
  init_package,
103
103
  package_default
104
- } from "./cli-2jm992rm.js";
104
+ } from "./cli-5d1m1qca.js";
105
105
  import {
106
106
  realtimeBus,
107
107
  init_bus
@@ -2625,9 +2625,7 @@ function auditAssetKeys(db) {
2625
2625
  }
2626
2626
  const attachmentMappings = db.prepare(`SELECT
2627
2627
  a.id AS attachment_id,
2628
- t."key" AS task_key,
2629
- m.id AS mapping_id,
2630
- m."key" AS mapping_key
2628
+ m.id AS mapping_id
2631
2629
  FROM task_attachments a
2632
2630
  JOIN agent_tasks t ON t.id = a.task_id
2633
2631
  LEFT JOIN asset_key_mappings m
@@ -2646,14 +2644,6 @@ function auditAssetKeys(db) {
2646
2644
  entityId: row.attachment_id,
2647
2645
  message: "Agent-fs attachment has no logical namespace mapping."
2648
2646
  });
2649
- } else if (row.mapping_key !== row.task_key) {
2650
- issues.push({
2651
- severity: "warning",
2652
- code: "provider-mapping-drift",
2653
- entityType: "file",
2654
- entityId: row.mapping_id,
2655
- message: "Provider mapping namespace differs from its parent task namespace."
2656
- });
2657
2647
  }
2658
2648
  }
2659
2649
  const sourcedMappings = db.prepare(`SELECT
@@ -4486,7 +4476,7 @@ var init_runtime = __esm(() => {
4486
4476
  // src/telemetry-identity.ts
4487
4477
  async function loadUserRole(userId) {
4488
4478
  try {
4489
- const { getUserGrant } = await import("./rbac-roles-9648nh00.js");
4479
+ const { getUserGrant } = await import("./rbac-roles-2x4g1wb5.js");
4490
4480
  const grant = await getUserGrant(userId);
4491
4481
  const role = grant.grantsAll ? "admin" : "member";
4492
4482
  if (roleCache.size >= ROLE_CACHE_LIMIT) {
@@ -18494,7 +18484,7 @@ async function loadSecretRegistry() {
18494
18484
  result.failed += 1;
18495
18485
  }
18496
18486
  try {
18497
- const { loadRuntimeControllerSecrets } = await import("./db-19tw9r5s.js");
18487
+ const { loadRuntimeControllerSecrets } = await import("./db-hhpy6m4x.js");
18498
18488
  const loaded = await loadRuntimeControllerSecrets();
18499
18489
  result.runtimeController = loaded.count;
18500
18490
  result.failed += loaded.failed;
@@ -20105,8 +20095,8 @@ async function moveAssetKey2(input) {
20105
20095
  const previousKey = await currentAssetKey(input.entityType, input.id);
20106
20096
  if (!previousKey)
20107
20097
  return false;
20108
- if (previousKey === key)
20109
- return true;
20098
+ if (previousKey === key && input.entityType !== "task")
20099
+ return {};
20110
20100
  if (input.entityType === "file") {
20111
20101
  const mapping = await getAssetKeyMapping2(input.id);
20112
20102
  if (mapping?.sourceEntityType === "task-attachment") {
@@ -20114,40 +20104,59 @@ async function moveAssetKey2(input) {
20114
20104
  }
20115
20105
  }
20116
20106
  const now = new Date().toISOString();
20117
- await getDbClient2().transaction(async (tx) => {
20107
+ return getDbClient2().transaction(async (tx) => {
20118
20108
  switch (input.entityType) {
20119
20109
  case "task": {
20120
- const mappedFiles = await tx.query(`SELECT DISTINCT m.id, m."key" AS key
20110
+ const root = await getTaskById2(input.id);
20111
+ if (!root)
20112
+ return false;
20113
+ const tasks = [root];
20114
+ for (const id of input.descendantTaskIds ?? []) {
20115
+ const task = id === root.id ? null : await getTaskById2(id);
20116
+ if (task)
20117
+ tasks.push(task);
20118
+ }
20119
+ const movedTaskIds = [];
20120
+ for (const task of tasks) {
20121
+ if (task.key === key)
20122
+ continue;
20123
+ const mappedFiles = await tx.query(`SELECT DISTINCT m.id, m."key" AS key
20121
20124
  FROM asset_key_mappings m
20122
20125
  JOIN task_attachments a
20123
20126
  ON m.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
20124
20127
  AND m.provider_org_id = COALESCE(a.agent_fs_org_id, '')
20125
20128
  AND m.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
20126
20129
  AND m.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
20127
- WHERE a.task_id = ?`, [input.id]);
20128
- await tx.run('UPDATE agent_tasks SET "key" = ?, lastUpdatedAt = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, input.id]);
20129
- await tx.run(`UPDATE asset_key_mappings
20130
- SET "key" = ?, updated_at = ?, updated_by = ?
20131
- WHERE EXISTS (
20132
- SELECT 1 FROM task_attachments a
20133
20130
  WHERE a.task_id = ?
20134
- AND asset_key_mappings.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
20135
- AND asset_key_mappings.provider_org_id = COALESCE(a.agent_fs_org_id, '')
20136
- AND asset_key_mappings.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
20137
- AND asset_key_mappings.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
20138
- )`, [key, now, input.changedBy ?? null, input.id]);
20139
- for (const mapping of mappedFiles) {
20140
- if (mapping.key === key)
20141
- continue;
20131
+ AND (m.source_entity_type IS NOT 'task-attachment'
20132
+ OR m.source_entity_id IN (SELECT id FROM task_attachments WHERE task_id = ?))`, [task.id, task.id]);
20133
+ await tx.run('UPDATE agent_tasks SET "key" = ?, updated_by = ? WHERE id = ?', [
20134
+ key,
20135
+ input.changedBy ?? null,
20136
+ task.id
20137
+ ]);
20138
+ for (const mapping of mappedFiles) {
20139
+ if (mapping.key === key)
20140
+ continue;
20141
+ await tx.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, mapping.id]);
20142
+ await insertAssetKeyHistory({
20143
+ entityType: "file",
20144
+ entityId: mapping.id,
20145
+ previousKey: mapping.key,
20146
+ newKey: key,
20147
+ changedBy: input.changedBy
20148
+ });
20149
+ }
20142
20150
  await insertAssetKeyHistory({
20143
- entityType: "file",
20144
- entityId: mapping.id,
20145
- previousKey: mapping.key,
20151
+ entityType: "task",
20152
+ entityId: task.id,
20153
+ previousKey: task.key,
20146
20154
  newKey: key,
20147
20155
  changedBy: input.changedBy
20148
20156
  });
20157
+ movedTaskIds.push(task.id);
20149
20158
  }
20150
- break;
20159
+ return { movedTaskIds };
20151
20160
  }
20152
20161
  case "workflow":
20153
20162
  await tx.run('UPDATE workflows SET "key" = ?, lastUpdatedAt = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, input.id]);
@@ -20189,8 +20198,8 @@ async function moveAssetKey2(input) {
20189
20198
  newKey: key,
20190
20199
  changedBy: input.changedBy
20191
20200
  });
20201
+ return {};
20192
20202
  });
20193
- return true;
20194
20203
  }
20195
20204
  async function deleteTaskAttachment2(id) {
20196
20205
  const result = await getDbClient2().run("DELETE FROM task_attachments WHERE id = ?", [id]);
@@ -25942,6 +25951,7 @@ function rowToInboxItemState(row) {
25942
25951
  dismissedAt: row.dismissedAt ?? undefined,
25943
25952
  doneAt: row.doneAt ?? undefined,
25944
25953
  readAt: row.readAt ?? undefined,
25954
+ lastReadAt: row.lastReadAt ?? undefined,
25945
25955
  createdAt: row.createdAt,
25946
25956
  lastUpdatedAt: row.lastUpdatedAt
25947
25957
  };
@@ -25967,14 +25977,15 @@ async function upsertInboxState2(opts) {
25967
25977
  const doneAt = opts.doneAt ?? (opts.status === "done" ? now : null);
25968
25978
  const snoozeUntil = opts.snoozeUntil ?? null;
25969
25979
  const readAt = opts.readAt ?? null;
25970
- const row = await getDbClient2().get(`INSERT INTO inbox_item_state (userId, itemType, itemId, status, snoozeUntil, dismissedAt, doneAt, readAt, createdAt, lastUpdatedAt)
25971
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25980
+ const row = await getDbClient2().get(`INSERT INTO inbox_item_state (userId, itemType, itemId, status, snoozeUntil, dismissedAt, doneAt, readAt, lastReadAt, createdAt, lastUpdatedAt)
25981
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25972
25982
  ON CONFLICT(userId, itemType, itemId) DO UPDATE SET
25973
25983
  status = excluded.status,
25974
25984
  snoozeUntil = excluded.snoozeUntil,
25975
25985
  dismissedAt = excluded.dismissedAt,
25976
25986
  doneAt = excluded.doneAt,
25977
25987
  readAt = COALESCE(inbox_item_state.readAt, excluded.readAt),
25988
+ lastReadAt = CASE WHEN ? THEN excluded.lastReadAt ELSE inbox_item_state.lastReadAt END,
25978
25989
  lastUpdatedAt = excluded.lastUpdatedAt
25979
25990
  RETURNING *`, [
25980
25991
  opts.userId,
@@ -25985,8 +25996,10 @@ async function upsertInboxState2(opts) {
25985
25996
  dismissedAt,
25986
25997
  doneAt,
25987
25998
  readAt,
25999
+ opts.lastReadAt ?? null,
25988
26000
  now,
25989
- now
26001
+ now,
26002
+ opts.lastReadAt !== undefined ? 1 : 0
25990
26003
  ]);
25991
26004
  if (!row)
25992
26005
  throw new Error("Failed to upsert inbox state");
@@ -52,7 +52,7 @@ import {
52
52
  import {
53
53
  DEFAULT_MODEL_TIER_MAP,
54
54
  init_types
55
- } from "./cli-ksrphveb.js";
55
+ } from "./cli-yv0vgscc.js";
56
56
  import {
57
57
  runtimeCatalogModel,
58
58
  init_runtime_model_catalog
@@ -60,7 +60,7 @@ import {
60
60
  import {
61
61
  init_package,
62
62
  package_default
63
- } from "./cli-2jm992rm.js";
63
+ } from "./cli-5d1m1qca.js";
64
64
  import {
65
65
  isEnvFlagEnabled,
66
66
  init_env_flag
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-2jm992rm.js";
4
+ } from "./cli-5d1m1qca.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
@@ -7,20 +7,20 @@ import {
7
7
  tierConfigKey,
8
8
  init_model_tier_keys,
9
9
  init_db3
10
- } from "./cli-4c7k75rq.js";
10
+ } from "./cli-re4wkbzx.js";
11
11
  import {
12
12
  ensureRbacSeedsSynced2,
13
13
  init_rbac_roles
14
- } from "./cli-6q7pyd3k.js";
14
+ } from "./cli-6vcyw6v7.js";
15
15
  import {
16
16
  seedPricingFromModelsDev
17
- } from "./cli-8w65vwee.js";
17
+ } from "./cli-qrwp40st.js";
18
18
  import {
19
19
  MODEL_TIERS,
20
20
  DEFAULT_MODEL_TIER_MAP,
21
21
  ProviderNameSchema,
22
22
  init_types
23
- } from "./cli-ksrphveb.js";
23
+ } from "./cli-yv0vgscc.js";
24
24
 
25
25
  // src/be/boot-seeds.ts
26
26
  init_db3();
@@ -2,17 +2,17 @@ import {
2
2
  getKv2,
3
3
  upsertKv2,
4
4
  init_db3
5
- } from "./cli-4c7k75rq.js";
5
+ } from "./cli-re4wkbzx.js";
6
6
  import {
7
7
  resolveIdentity,
8
8
  recordUnmappedIdentity
9
- } from "./cli-bddxamg7.js";
9
+ } from "./cli-8qsx817b.js";
10
10
  import {
11
11
  findUserByExternalId,
12
12
  findOrCreateUserByEmail,
13
13
  linkIdentity,
14
14
  init_users
15
- } from "./cli-h23mr2s6.js";
15
+ } from "./cli-hz64bcnj.js";
16
16
 
17
17
  // src/slack/enrich.ts
18
18
  init_db3();
@@ -2170,6 +2170,7 @@ var init_types = __esm(() => {
2170
2170
  dismissedAt: string2().optional(),
2171
2171
  doneAt: string2().optional(),
2172
2172
  readAt: string2().optional(),
2173
+ lastReadAt: string2().optional(),
2173
2174
  createdAt: string2(),
2174
2175
  lastUpdatedAt: string2()
2175
2176
  }).openapi("InboxItemState");
@@ -6,7 +6,7 @@ import {
6
6
  getResolvedConfig2,
7
7
  getAllUsers2,
8
8
  init_db3
9
- } from "./cli-4c7k75rq.js";
9
+ } from "./cli-re4wkbzx.js";
10
10
  import {
11
11
  scrubSecrets,
12
12
  init_secret_scrubber
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  DEFAULT_MODEL_TIER_MAP,
23
23
  init_types
24
- } from "./cli-ksrphveb.js";
24
+ } from "./cli-yv0vgscc.js";
25
25
  import {
26
26
  getOpenRouterBaseUrl,
27
27
  getOpenRouterAttributionHeaders,
package/dist/cli.js CHANGED
@@ -51,7 +51,7 @@ var import_react = __toESM(require_react(), 1);
51
51
  // package.json
52
52
  var package_default = {
53
53
  name: "@desplega.ai/agent-swarm",
54
- version: "2.2.0",
54
+ version: "2.3.0",
55
55
  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.",
56
56
  keywords: [
57
57
  "agent-swarm.dev",
@@ -260,7 +260,7 @@ var package_default = {
260
260
  "@chat-adapter/teams": "4.41.1",
261
261
  "@chat-adapter/telegram": "4.41.1",
262
262
  "@cursor/sdk": "1.0.38",
263
- "@desplega.ai/agent-fs-just-bash": "0.17.0",
263
+ "@desplega.ai/agent-fs-just-bash": "0.18.4",
264
264
  "@desplega.ai/business-use": "^0.4.2",
265
265
  "@earendil-works/pi-agent-core": "^1.3.0",
266
266
  "@earendil-works/pi-ai": "^1.3.0",
@@ -812,7 +812,7 @@ function McpServer({ port, apiKey, dbPath }) {
812
812
  if (dbPath) {
813
813
  process.env.DATABASE_PATH = dbPath;
814
814
  }
815
- import("./http-fn978m0g.js").then(() => {
815
+ import("./http-mzh41mfj.js").then(() => {
816
816
  setStatus("running");
817
817
  }).catch((err) => {
818
818
  setStatus("error");
@@ -899,7 +899,7 @@ function WorkerRunner({
899
899
  const { exit } = use_app_default();
900
900
  import_react.useEffect(() => {
901
901
  installConsoleScrub();
902
- import("./worker-4ww4hjef.js").then(({ runWorker }) => runWorker({
902
+ import("./worker-4ptnn1ge.js").then(({ runWorker }) => runWorker({
903
903
  prompt: prompt || undefined,
904
904
  yolo,
905
905
  systemPrompt: systemPrompt || undefined,
@@ -917,7 +917,7 @@ function LeadRunner({ prompt, yolo, systemPrompt, systemPromptFile, additionalAr
917
917
  const { exit } = use_app_default();
918
918
  import_react.useEffect(() => {
919
919
  installConsoleScrub();
920
- import("./lead-8h5n9k5f.js").then(({ runLead }) => runLead({
920
+ import("./lead-61kqp604.js").then(({ runLead }) => runLead({
921
921
  prompt: prompt || undefined,
922
922
  yolo,
923
923
  systemPrompt: systemPrompt || undefined,
@@ -957,8 +957,8 @@ function LazyComponent({
957
957
  }
958
958
  return import_react.createElement(Component, props);
959
959
  }
960
- var loadOnboard = () => import("./onboard-pvk7hdb2.js").then(({ Onboard }) => Onboard);
961
- var loadConnect = () => import("./setup-rnrazxvd.js").then(({ Setup }) => Setup);
960
+ var loadOnboard = () => import("./onboard-196tjgyn.js").then(({ Onboard }) => Onboard);
961
+ var loadConnect = () => import("./setup-ypbzcapd.js").then(({ Setup }) => Setup);
962
962
  function UnknownCommand({ command }) {
963
963
  const { exit } = use_app_default();
964
964
  import_react.useEffect(() => {
@@ -1088,14 +1088,14 @@ ${binName} docs \u2014 v${package_default.version}
1088
1088
  }
1089
1089
  process.exit(0);
1090
1090
  } else if (args.command === "hook") {
1091
- const { runHook } = await import("./hook-mzxxs5n2.js");
1091
+ const { runHook } = await import("./hook-skrbja18.js");
1092
1092
  await runHook();
1093
1093
  } else if (args.command === "codex-hook") {
1094
1094
  const { handleCodexHook } = await import("./codex-hook-x6tm6y5m.js");
1095
1095
  await handleCodexHook();
1096
1096
  process.exit(process.exitCode ?? 0);
1097
1097
  } else if (args.command === "session-summary-stdin") {
1098
- const { runSessionSummaryFromStdin } = await import("./hook-3kvmax6d.js");
1098
+ const { runSessionSummaryFromStdin } = await import("./hook-ejja4bpe.js");
1099
1099
  await runSessionSummaryFromStdin();
1100
1100
  process.exit(process.exitCode ?? 0);
1101
1101
  } else if (args.command === "x") {
@@ -1108,7 +1108,7 @@ ${binName} docs \u2014 v${package_default.version}
1108
1108
  printHelp("scripts");
1109
1109
  process.exit(scriptsArgs[0] === "reembed" || args.showHelp ? 0 : 1);
1110
1110
  }
1111
- const { runScriptsMaintenanceCommand } = await import("./maintenance-ea6jfw42.js");
1111
+ const { runScriptsMaintenanceCommand } = await import("./maintenance-f3xhnjsm.js");
1112
1112
  await runScriptsMaintenanceCommand(scriptsArgs);
1113
1113
  console.log("Scripts re-embedded.");
1114
1114
  } else if (args.command === "rbac") {
@@ -1118,17 +1118,17 @@ ${binName} docs \u2014 v${package_default.version}
1118
1118
  printHelp("rbac");
1119
1119
  process.exit(args.showHelp ? 0 : 1);
1120
1120
  }
1121
- const { runRbacCliCommand } = await import("./rbac-roles-km0f9cmm.js");
1121
+ const { runRbacCliCommand } = await import("./rbac-roles-bsp5657v.js");
1122
1122
  await runRbacCliCommand(rbacArgs);
1123
1123
  } else if (args.command === "codex-login") {
1124
1124
  const { runCodexLogin } = await import("./codex-login-35p4sk85.js");
1125
1125
  const codexLoginArgs = process.argv.slice(process.argv.indexOf("codex-login") + 1);
1126
1126
  await runCodexLogin(codexLoginArgs);
1127
1127
  } else if (args.command === "codex-session-runner") {
1128
- const { runCodexSessionRunner } = await import("./codex-session-runner-j9m2gfyy.js");
1128
+ const { runCodexSessionRunner } = await import("./codex-session-runner-6hggrjbx.js");
1129
1129
  await runCodexSessionRunner();
1130
1130
  } else if (args.command === "claude-managed-setup") {
1131
- const { runClaudeManagedSetup } = await import("./claude-managed-setup-7ra32em4.js");
1131
+ const { runClaudeManagedSetup } = await import("./claude-managed-setup-wza784fb.js");
1132
1132
  const setupArgs = process.argv.slice(process.argv.indexOf("claude-managed-setup") + 1);
1133
1133
  await runClaudeManagedSetup(setupArgs);
1134
1134
  } else if (args.command === "e2b") {
@@ -1136,7 +1136,7 @@ ${binName} docs \u2014 v${package_default.version}
1136
1136
  const e2bArgs = process.argv.slice(process.argv.indexOf("e2b") + 1);
1137
1137
  await runE2BCommand(e2bArgs);
1138
1138
  } else if (args.command === "controller") {
1139
- const { runController } = await import("./controller-nex2he8v.js");
1139
+ const { runController } = await import("./controller-pt1zam5w.js");
1140
1140
  await runController(process.argv.slice(process.argv.indexOf("controller") + 1));
1141
1141
  } else {
1142
1142
  render_default(/* @__PURE__ */ jsx_dev_runtime.jsxDEV(App, {
@@ -2,7 +2,7 @@ import {
2
2
  checkCodexCredentials2,
3
3
  createInProcessCodexSession2,
4
4
  CodexAdapter2
5
- } from "./cli-z1hh99j0.js";
5
+ } from "./cli-tr24eeny.js";
6
6
  import"./cli-4zsenjhy.js";
7
7
  import"./cli-kr5tjjtz.js";
8
8
  import"./cli-vbhgkw9h.js";
@@ -10,7 +10,7 @@ import"./cli-7a91w22y.js";
10
10
  import"./cli-3ggwdtb0.js";
11
11
  import {
12
12
  createInProcessCodexSession2
13
- } from "./cli-z1hh99j0.js";
13
+ } from "./cli-tr24eeny.js";
14
14
  import"./cli-jc1g9ndz.js";
15
15
  import"./cli-0726awxw.js";
16
16
  import"./cli-4bd1rck6.js";
@@ -2,11 +2,11 @@ import {
2
2
  getAllAgents2,
3
3
  getAllTasks2,
4
4
  init_db3
5
- } from "./cli-4c7k75rq.js";
5
+ } from "./cli-re4wkbzx.js";
6
6
  import {
7
7
  EXTERNAL_CHANNEL_BLOCKED_REPLY2,
8
8
  shouldBlockChannel2
9
- } from "./cli-ztcxv5nv.js";
9
+ } from "./cli-9e9kjqsj.js";
10
10
  import {
11
11
  isEnvFlagEnabled,
12
12
  init_env_flag
@@ -2,7 +2,7 @@ import {
2
2
  BuiltinController,
3
3
  CONTROLLER_PROTOCOL_VERSION,
4
4
  ControllerServerMessageSchema
5
- } from "./cli-raejy0mp.js";
5
+ } from "./cli-d43xqzbe.js";
6
6
  import {
7
7
  createRuntimeProvider,
8
8
  init_runtime_providers
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  RuntimeProviderKindSchema,
12
12
  init_types
13
- } from "./cli-ksrphveb.js";
13
+ } from "./cli-yv0vgscc.js";
14
14
  import {
15
15
  scrubSecrets,
16
16
  registerVolatileSecret,
@@ -6,23 +6,23 @@ import {
6
6
  isRuntimePoolsEnabled,
7
7
  init_runtime_pools_flag,
8
8
  init_db3
9
- } from "./cli-4c7k75rq.js";
9
+ } from "./cli-re4wkbzx.js";
10
10
  import {
11
11
  CONTROLLER_PROTOCOL_VERSION,
12
12
  CONTROLLER_PING_INTERVAL_MS,
13
13
  ControllerClientMessageSchema
14
- } from "./cli-raejy0mp.js";
14
+ } from "./cli-d43xqzbe.js";
15
15
  import"./cli-7a91w22y.js";
16
16
  import {
17
17
  route,
18
18
  resolveHttpRequestAuth
19
- } from "./cli-bddxamg7.js";
19
+ } from "./cli-8qsx817b.js";
20
20
  import {
21
21
  registerSessionTokenConnection,
22
22
  init_session_token_connections,
23
23
  getRuntimeController2,
24
24
  init_db
25
- } from "./cli-h23mr2s6.js";
25
+ } from "./cli-hz64bcnj.js";
26
26
  import {
27
27
  remoteControllerSession,
28
28
  installRemoteController,
@@ -31,25 +31,25 @@ import {
31
31
  ensureRuntimeOwnerId,
32
32
  reconcileRemoteProvisions,
33
33
  reconcileControllerOrphans
34
- } from "./cli-z3dk189k.js";
35
- import"./cli-dw0njd9q.js";
36
- import"./cli-mvsfbbgq.js";
37
- import"./cli-xx13gqf3.js";
34
+ } from "./cli-fp4xbw07.js";
35
+ import"./cli-jhmjwqcg.js";
36
+ import"./cli-65q70v2v.js";
37
+ import"./cli-g6p7c2my.js";
38
38
  import"./cli-3ggwdtb0.js";
39
- import"./cli-tba8fxf9.js";
40
- import"./cli-ztcxv5nv.js";
41
- import"./cli-hwc4a9xm.js";
39
+ import"./cli-dxwh4j32.js";
40
+ import"./cli-9e9kjqsj.js";
41
+ import"./cli-q1812jbw.js";
42
42
  import"./cli-8cvvytad.js";
43
43
  import"./cli-kvzgak7c.js";
44
44
  import"./cli-445c1vp7.js";
45
45
  import"./cli-vjfpshn3.js";
46
46
  import"./cli-ptkpaqfy.js";
47
- import"./cli-vmbakbq0.js";
48
- import"./cli-8w65vwee.js";
49
- import"./cli-jhhb2v9n.js";
47
+ import"./cli-fhvqt2fp.js";
48
+ import"./cli-qrwp40st.js";
49
+ import"./cli-kqypty34.js";
50
50
  import"./cli-qz93y3x5.js";
51
- import"./cli-6q7pyd3k.js";
52
- import"./cli-mnry16kh.js";
51
+ import"./cli-6vcyw6v7.js";
52
+ import"./cli-xgn4rwyv.js";
53
53
  import"./cli-qje9k2nh.js";
54
54
  import"./cli-3h26v7yj.js";
55
55
  import"./cli-rdr166ht.js";
@@ -2,7 +2,7 @@ import {
2
2
  checkCursorCredentials2,
3
3
  liveTestCursorKey2,
4
4
  CursorAdapter2
5
- } from "./cli-xhgtay7w.js";
5
+ } from "./cli-4s1kqrqg.js";
6
6
  import"./cli-jc1g9ndz.js";
7
7
  import"./cli-jhp7w1fy.js";
8
8
  import"./cli-p22zdvnt.js";
@@ -19,8 +19,8 @@ import {
19
19
  createPoolAgent2,
20
20
  loadRuntimeControllerSecrets2,
21
21
  init_db
22
- } from "./cli-h23mr2s6.js";
23
- import"./cli-4c7k75rq.js";
22
+ } from "./cli-hz64bcnj.js";
23
+ import"./cli-re4wkbzx.js";
24
24
  init_db();
25
25
 
26
26
  export {
@@ -501,7 +501,7 @@ import {
501
501
  countScriptRunJournalSteps2,
502
502
  countScriptRunJournalAgentTaskSteps2,
503
503
  init_db3
504
- } from "./cli-4c7k75rq.js";
504
+ } from "./cli-re4wkbzx.js";
505
505
  import {
506
506
  generateDefaultClaudeMd2,
507
507
  generateDefaultSoulMd2,
@@ -11,32 +11,32 @@ import {
11
11
  listRegistered2,
12
12
  dispatchPre2,
13
13
  dispatchPost2
14
- } from "./cli-bddxamg7.js";
14
+ } from "./cli-8qsx817b.js";
15
15
  import"./cli-rdr166ht.js";
16
- import"./cli-vmbakbq0.js";
16
+ import"./cli-fhvqt2fp.js";
17
17
  import"./cli-qz93y3x5.js";
18
- import"./cli-mvsfbbgq.js";
18
+ import"./cli-65q70v2v.js";
19
19
  import"./cli-3h26v7yj.js";
20
20
  import"./cli-7a91w22y.js";
21
21
  import"./cli-3ggwdtb0.js";
22
- import"./cli-xx13gqf3.js";
23
- import"./cli-mnry16kh.js";
24
- import"./cli-jhhb2v9n.js";
25
- import"./cli-8w65vwee.js";
22
+ import"./cli-g6p7c2my.js";
23
+ import"./cli-xgn4rwyv.js";
24
+ import"./cli-kqypty34.js";
25
+ import"./cli-qrwp40st.js";
26
26
  import"./cli-qje9k2nh.js";
27
- import"./cli-dw0njd9q.js";
28
- import"./cli-hwc4a9xm.js";
27
+ import"./cli-jhmjwqcg.js";
28
+ import"./cli-q1812jbw.js";
29
29
  import"./cli-8cvvytad.js";
30
30
  import"./cli-vjfpshn3.js";
31
31
  import"./cli-13p25grh.js";
32
32
  import"./cli-0adyhvq2.js";
33
- import"./cli-tba8fxf9.js";
34
- import"./cli-ztcxv5nv.js";
35
- import"./cli-h23mr2s6.js";
33
+ import"./cli-dxwh4j32.js";
34
+ import"./cli-9e9kjqsj.js";
35
+ import"./cli-hz64bcnj.js";
36
36
  import"./cli-445c1vp7.js";
37
37
  import"./cli-kvzgak7c.js";
38
- import"./cli-6q7pyd3k.js";
39
- import"./cli-4c7k75rq.js";
38
+ import"./cli-6vcyw6v7.js";
39
+ import"./cli-re4wkbzx.js";
40
40
  import"./cli-ptkpaqfy.js";
41
41
  export {
42
42
  ExtensionAbortedError2 as ExtensionAbortedError,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  checkDshCredentials2,
3
3
  DshAdapter2
4
- } from "./cli-9ac0mkg5.js";
4
+ } from "./cli-zes4tsbb.js";
5
5
  import"./cli-jc1g9ndz.js";
6
6
  import"./cli-jhp7w1fy.js";
7
7
  import"./cli-p22zdvnt.js";
@@ -8,8 +8,8 @@ import {
8
8
  shouldBlockChannel2,
9
9
  leaveExternalChannel2,
10
10
  scanExternalChannelsOnBoot2
11
- } from "./cli-ztcxv5nv.js";
12
- import"./cli-4c7k75rq.js";
11
+ } from "./cli-9e9kjqsj.js";
12
+ import"./cli-re4wkbzx.js";
13
13
  export {
14
14
  EXTERNAL_CHANNEL_BLOCKED_REPLY2 as EXTERNAL_CHANNEL_BLOCKED_REPLY,
15
15
  externalChannelToolError2 as externalChannelToolError,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  checkGrokCredentials2,
3
3
  GrokAdapter2
4
- } from "./cli-p46xdr1m.js";
5
- import"./cli-jrk8mj0t.js";
4
+ } from "./cli-0rh20bp3.js";
5
+ import"./cli-a17tzmn0.js";
6
6
  import"./cli-rc3r0bnh.js";
7
7
  import"./cli-9td5ss65.js";
8
8
  import"./cli-a49vpbf3.js";