@desplega.ai/agent-swarm 1.153.0 → 1.154.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 (143) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ahmjxhek.js → acp-adapter-eb2aj8xy.js} +1 -1
  3. package/dist/{actions-jzrfpkmn.js → actions-kpnwp1kz.js} +18 -18
  4. package/dist/{app-03na2vwb.js → app-zk1apkf6.js} +6 -6
  5. package/dist/{assistant-hfkxvhgt.js → assistant-kwq4y50q.js} +19 -19
  6. package/dist/{boot-reembed-c98xrad3.js → boot-reembed-22hd3jjn.js} +7 -7
  7. package/dist/{boot-reembed-zt3qm9xn.js → boot-reembed-qe168424.js} +8 -8
  8. package/dist/{boot-scrub-logs-jcqd8ksj.js → boot-scrub-logs-pkdpsrjd.js} +5 -5
  9. package/dist/{claude-adapter-mgryg8g3.js → claude-adapter-3fx90nww.js} +10 -10
  10. package/dist/{claude-sdk-session-jjf4zss1.js → claude-sdk-session-z7fahf1k.js} +10 -10
  11. package/dist/{cli-1hwnb4hc.js → cli-09y3tjxz.js} +1 -1
  12. package/dist/{cli-b2g6mzjc.js → cli-0e31nm4n.js} +1 -1
  13. package/dist/{cli-5mbmvxnn.js → cli-1jpjafw4.js} +5 -5
  14. package/dist/{cli-bw0dfwkr.js → cli-243tzws8.js} +1 -1
  15. package/dist/{cli-rj7de4b2.js → cli-24k806sc.js} +1 -1
  16. package/dist/{cli-7g9s78jf.js → cli-3bkz2p7j.js} +7 -6
  17. package/dist/{cli-zcsyfw2z.js → cli-4k7jazkq.js} +4 -0
  18. package/dist/{cli-s5s1f2yn.js → cli-5vs0nh43.js} +25 -20
  19. package/dist/{cli-qrqhc31j.js → cli-6r3cgpk2.js} +94 -52
  20. package/dist/{cli-pgj4a5fb.js → cli-71cj99hx.js} +4 -3
  21. package/dist/{cli-d6hk10xx.js → cli-8sea27q4.js} +2 -2
  22. package/dist/{cli-a9scg8sv.js → cli-913yakhv.js} +22 -7
  23. package/dist/{cli-pf9q3696.js → cli-927erqqt.js} +5 -2
  24. package/dist/{cli-zy5w9gpt.js → cli-95jnpnqg.js} +1 -1
  25. package/dist/{cli-cdq08v3r.js → cli-abp3g4ax.js} +15 -2
  26. package/dist/{cli-nq0kgyxe.js → cli-acy6bfhr.js} +10 -7
  27. package/dist/{cli-n0q9b7j4.js → cli-c1v10xb2.js} +157 -52
  28. package/dist/{cli-tdh4hjr2.js → cli-e0pg4zeh.js} +1 -1
  29. package/dist/{cli-83wkg402.js → cli-e31ehqwy.js} +1 -1
  30. package/dist/{cli-m04pt18h.js → cli-e3229na9.js} +3 -3
  31. package/dist/{cli-ysc1kbet.js → cli-e3cyf59d.js} +2 -2
  32. package/dist/{cli-mzgyhxbe.js → cli-fdzg6jhf.js} +2 -2
  33. package/dist/{cli-0d9nbqxf.js → cli-g2h29qar.js} +2 -2
  34. package/dist/{cli-djvxhnc4.js → cli-ge67p080.js} +124 -26
  35. package/dist/{cli-7pnz2v6s.js → cli-hws0vn86.js} +2 -2
  36. package/dist/{cli-3bcmp015.js → cli-kp3qs53m.js} +2 -2
  37. package/dist/{cli-ybpp1srm.js → cli-myaxtgh8.js} +2 -1
  38. package/dist/{cli-r8tdds6s.js → cli-n62atwh9.js} +1 -1
  39. package/dist/{cli-6ks9xf1n.js → cli-pf1v8xhb.js} +4 -4
  40. package/dist/{cli-5taqtpze.js → cli-q85qhckh.js} +6 -6
  41. package/dist/{cli-eazstkad.js → cli-r1d3dzt6.js} +2 -2
  42. package/dist/{cli-ja7mrygn.js → cli-rxkqvngf.js} +2 -2
  43. package/dist/{cli-vw03hg5t.js → cli-stwsmd6k.js} +2 -2
  44. package/dist/{cli-z61ykvam.js → cli-wg04s9kr.js} +4 -3
  45. package/dist/cli.js +13 -12
  46. package/dist/{codex-adapter-8548daap.js → codex-adapter-ttdm995v.js} +5 -5
  47. package/dist/{codex-hook-8jexc34x.js → codex-hook-8gx7bcz0.js} +3 -3
  48. package/dist/{codex-session-runner-2dad8p4x.js → codex-session-runner-3v8nh4c8.js} +5 -5
  49. package/dist/{commands-355dbpa8.js → commands-1cxwbhhq.js} +5 -5
  50. package/dist/{db-4jjvwz1s.js → db-y9zwsr79.js} +23 -5
  51. package/dist/{dispatcher-ca590nkz.js → dispatcher-9m9zss36.js} +17 -17
  52. package/dist/{dsh-adapter-rgvj6ykp.js → dsh-adapter-gsb2qqf9.js} +2 -2
  53. package/dist/{google-generative-ai-xtw7tggr.js → google-generative-ai-gwwrnzqn.js} +1 -1
  54. package/dist/{google-vertex-zdqpms6n.js → google-vertex-5wfawpwz.js} +1 -1
  55. package/dist/{handlers-2y6dqpvf.js → handlers-36fm1bwn.js} +20 -20
  56. package/dist/{hook-0s8knepr.js → hook-pntw4r8h.js} +8 -8
  57. package/dist/{hook-k0gec254.js → hook-vwq8y26p.js} +9 -9
  58. package/dist/{http-jp2nb4zw.js → http-20jesakk.js} +89 -56
  59. package/dist/{index-42s7eezq.js → index-6artrehg.js} +17 -17
  60. package/dist/{index-3mq6ce93.js → index-9n5z2492.js} +17 -17
  61. package/dist/{index-0wzg3sp3.js → index-j5wrf1yw.js} +11 -11
  62. package/dist/{index-s37dbevy.js → index-m2xqpz5r.js} +18 -18
  63. package/dist/{index-b56xkbc7.js → index-m9ks8a7t.js} +7 -7
  64. package/dist/{keepalive-9pfw7t02.js → keepalive-pwxvxd2c.js} +7 -7
  65. package/dist/{lead-7vcmcdq4.js → lead-m789wqa3.js} +26 -26
  66. package/dist/{maintenance-x277jbpd.js → maintenance-bvg6w7e2.js} +8 -8
  67. package/dist/{oauth-refresh-sweep-5fwa7th2.js → oauth-refresh-sweep-6v4bd737.js} +6 -6
  68. package/dist/{onboard-17sv0f51.js → onboard-snckpcj1.js} +14 -2
  69. package/dist/{otel-impl-srjy4be4.js → otel-impl-e0ytens5.js} +1 -1
  70. package/dist/{pi-mono-adapter-946a0sdd.js → pi-mono-adapter-c4ggemhz.js} +6 -6
  71. package/dist/{pricing-refresh-vetcm563.js → pricing-refresh-52g2ywrw.js} +7 -7
  72. package/dist/{rbac-roles-cmxaddmy.js → rbac-roles-5455kfdn.js} +5 -5
  73. package/dist/{rbac-roles-cfzgr6r1.js → rbac-roles-hbf0xa52.js} +6 -6
  74. package/dist/{render-v2-f9hzff72.js → render-v2-npm8xdzh.js} +12 -8
  75. package/dist/{seed-pricing-jggk6rsy.js → seed-pricing-650wbr1n.js} +6 -6
  76. package/dist/{setup-8mfceb9t.js → setup-k1mew5rf.js} +2 -2
  77. package/dist/{virtual-modules-ax661xp0.js → virtual-modules-2q5b2pk4.js} +2 -2
  78. package/dist/{work-objects-vdsdcczj.js → work-objects-2ea3kvwg.js} +20 -20
  79. package/dist/{worker-cd0nhyv1.js → worker-ec6hvc4m.js} +26 -26
  80. package/openapi.json +74 -3
  81. package/package.json +2 -1
  82. package/plugin/opencode-plugins/lib/memory-raters.ts +7 -0
  83. package/src/be/db/agents.ts +75 -2
  84. package/src/be/db/tasks/read.ts +2 -0
  85. package/src/be/db/tasks/write.ts +7 -1
  86. package/src/be/db.ts +140 -18
  87. package/src/be/memory/raters/llm.ts +2 -6
  88. package/src/be/memory/raters/noop.ts +2 -3
  89. package/src/be/memory/raters/registry.ts +4 -10
  90. package/src/be/migrations/157_defer_provenance_and_marker.sql +27 -0
  91. package/src/be/seed/agent-fs-provision.ts +23 -0
  92. package/src/commands/onboard/compose-generator.ts +10 -0
  93. package/src/commands/onboard/env-generator.ts +8 -0
  94. package/src/commands/runner.ts +18 -2
  95. package/src/extensions/identity.ts +15 -7
  96. package/src/hooks/codex-hook.ts +7 -1
  97. package/src/http/agents.ts +10 -2
  98. package/src/http/poll.ts +7 -0
  99. package/src/http/schedules.ts +10 -0
  100. package/src/http/script-runs.ts +35 -26
  101. package/src/http/status.ts +2 -1
  102. package/src/http/tasks.ts +6 -1
  103. package/src/prompts/memories.ts +5 -7
  104. package/src/prompts/session-templates.ts +3 -2
  105. package/src/prompts/steering-delivery.ts +2 -0
  106. package/src/providers/codex-adapter.ts +3 -6
  107. package/src/providers/pi-mono-extension.ts +2 -5
  108. package/src/slack/ack.ts +43 -8
  109. package/src/slack/handlers.ts +7 -1
  110. package/src/slack/render-v2.ts +186 -17
  111. package/src/slack/responses.ts +1 -3
  112. package/src/slack/task-output.ts +66 -8
  113. package/src/slack/thread-buffer.ts +27 -3
  114. package/src/tests/agent-fs-provision-seeder.test.ts +56 -2
  115. package/src/tests/codex-steering-hook.test.ts +2 -2
  116. package/src/tests/db-task-read-contract.test.ts +9 -0
  117. package/src/tests/db-task-write-contract.test.ts +9 -0
  118. package/src/tests/defer-task.test.ts +115 -16
  119. package/src/tests/extension-agent-visibility.test.ts +474 -0
  120. package/src/tests/extensions-lifecycle.test.ts +3 -1
  121. package/src/tests/fetch-resolved-env.test.ts +43 -0
  122. package/src/tests/memory-rate-tool.test.ts +7 -10
  123. package/src/tests/memory-rater-defaults.test.ts +23 -0
  124. package/src/tests/memory-rater-e2e.test.ts +2 -3
  125. package/src/tests/script-connections.test.ts +3 -0
  126. package/src/tests/slack-render-v2.test.ts +446 -16
  127. package/src/tests/slack-steering.test.ts +69 -1
  128. package/src/tests/slack-task-output.test.ts +33 -12
  129. package/src/tests/steering-core.test.ts +35 -0
  130. package/src/tests/steering-delivery.test.ts +39 -0
  131. package/src/tests/steering-transport.test.ts +2 -2
  132. package/src/tests/workflow-live-recovery.test.ts +126 -0
  133. package/src/tools/defer-task.ts +64 -26
  134. package/src/tools/join-swarm.ts +1 -1
  135. package/src/tools/schedules/create-schedule.ts +11 -1
  136. package/src/tools/schedules/patch-schedule.ts +5 -0
  137. package/src/tools/schedules/update-schedule.ts +5 -0
  138. package/src/tools/send-task.ts +6 -0
  139. package/src/tools/utils.ts +1 -1
  140. package/src/types.ts +13 -0
  141. package/src/utils/memory-raters.ts +3 -0
  142. package/src/workflows/engine.ts +28 -0
  143. package/src/workflows/recovery.ts +7 -4
@@ -15,7 +15,7 @@ import {
15
15
  recoverIncompleteRuns,
16
16
  repointTrackerSyncBySwarmId,
17
17
  resolveLeadOnlyRecoveryAssignment
18
- } from "./cli-qrqhc31j.js";
18
+ } from "./cli-6r3cgpk2.js";
19
19
  import {
20
20
  isMultiRuntimeEnabled
21
21
  } from "./cli-re8z5p8p.js";
@@ -61,13 +61,13 @@ import {
61
61
  releaseStaleReviewingTasks,
62
62
  supersedeTask,
63
63
  updateAgentStatus
64
- } from "./cli-djvxhnc4.js";
64
+ } from "./cli-ge67p080.js";
65
65
  import {
66
66
  init_registry,
67
67
  init_resolver,
68
68
  registerTemplate,
69
69
  resolveTemplate
70
- } from "./cli-z61ykvam.js";
70
+ } from "./cli-wg04s9kr.js";
71
71
  import {
72
72
  init_secret_scrubber,
73
73
  scrubSecrets
@@ -4,11 +4,11 @@ import {
4
4
  getEmbeddingProvider,
5
5
  init_embedding,
6
6
  serializeEmbedding
7
- } from "./cli-7pnz2v6s.js";
7
+ } from "./cli-hws0vn86.js";
8
8
  import {
9
9
  getDbClient,
10
10
  init_db
11
- } from "./cli-djvxhnc4.js";
11
+ } from "./cli-ge67p080.js";
12
12
  import {
13
13
  init_secret_scrubber,
14
14
  scrubSecrets
@@ -4,7 +4,7 @@ import {
4
4
  buildSummaryWithRatingsPrompt,
5
5
  parseModelStr,
6
6
  resolveCredential
7
- } from "./cli-7g9s78jf.js";
7
+ } from "./cli-3bkz2p7j.js";
8
8
  import {
9
9
  DEFAULT_OPENROUTER_BASE_URL,
10
10
  getOpenRouterBaseUrl
@@ -13,7 +13,7 @@ import {
13
13
  complete,
14
14
  exports_typebox,
15
15
  getBuiltinModel
16
- } from "./cli-d6hk10xx.js";
16
+ } from "./cli-8sea27q4.js";
17
17
  import {
18
18
  init_zod
19
19
  } from "./cli-sd0mxa3c.js";
@@ -6,13 +6,13 @@ import {
6
6
  IDENTITY_FIELD_BUDGETS,
7
7
  init_identity_field_budget,
8
8
  init_templates
9
- } from "./cli-b2g6mzjc.js";
9
+ } from "./cli-0e31nm4n.js";
10
10
  import {
11
11
  init_resolver,
12
12
  init_steering_enabled,
13
13
  isSteeringEnabled,
14
14
  resolveTemplateAsync
15
- } from "./cli-z61ykvam.js";
15
+ } from "./cli-wg04s9kr.js";
16
16
  import {
17
17
  MAX_PROFILE_FILE_LENGTH,
18
18
  init_constants
@@ -17,7 +17,7 @@ import {
17
17
  normalizeAssetKey,
18
18
  parseAssetKey,
19
19
  parseModelTier
20
- } from "./cli-zcsyfw2z.js";
20
+ } from "./cli-4k7jazkq.js";
21
21
  import {
22
22
  IdentityFieldBudgetError,
23
23
  checkIdentityFieldBudget,
@@ -30,7 +30,7 @@ import {
30
30
  init_templates,
31
31
  matchesDefaultClaudeMd,
32
32
  matchesDefaultIdentityMd
33
- } from "./cli-b2g6mzjc.js";
33
+ } from "./cli-0e31nm4n.js";
34
34
  import {
35
35
  configureDbResolver,
36
36
  getAllTemplateDefinitions,
@@ -40,7 +40,7 @@ import {
40
40
  init_steering_enabled,
41
41
  isSteeringEnabled,
42
42
  registerTemplate
43
- } from "./cli-z61ykvam.js";
43
+ } from "./cli-wg04s9kr.js";
44
44
  import {
45
45
  deriveProviderFromKeyType,
46
46
  init_credentials
@@ -68,7 +68,7 @@ import {
68
68
  import {
69
69
  init_package,
70
70
  package_default
71
- } from "./cli-ybpp1srm.js";
71
+ } from "./cli-myaxtgh8.js";
72
72
  import {
73
73
  init_secret_scrubber,
74
74
  registerVolatileSecret,
@@ -2423,8 +2423,25 @@ async function getAgentById(id) {
2423
2423
  const row = await getDbClient().get("SELECT * FROM agents WHERE id = ?", [id]);
2424
2424
  return row ? rowToAgent(row) : null;
2425
2425
  }
2426
+ function isExtensionAgent(agent) {
2427
+ return agent?.role === EXTENSION_AGENT_ROLE;
2428
+ }
2429
+ function extensionAgentAssignmentError(agent) {
2430
+ return `Agent "${agent.name}" (${agent.id}) is an extension identity and cannot be assigned, offered, or scheduled tasks. Target a worker or lead agent instead.`;
2431
+ }
2432
+ function reservedRoleViolation(currentRole, nextRole, opts) {
2433
+ if (nextRole === undefined || nextRole === currentRole)
2434
+ return null;
2435
+ if (currentRole === EXTENSION_AGENT_ROLE) {
2436
+ return `Extension identities keep the "${EXTENSION_AGENT_ROLE}" role; it cannot be changed.`;
2437
+ }
2438
+ if (nextRole === EXTENSION_AGENT_ROLE && !opts?.allowExtensionRole) {
2439
+ return `Role "${EXTENSION_AGENT_ROLE}" is reserved for extension identities.`;
2440
+ }
2441
+ return null;
2442
+ }
2426
2443
  async function getAllAgents(opts) {
2427
- const rows = await getDbClient().query("SELECT * FROM agents ORDER BY name");
2444
+ const rows = await getDbClient().query(opts?.includeExtensions ? "SELECT * FROM agents ORDER BY name" : `SELECT * FROM agents WHERE ${NOT_EXTENSION_AGENT_SQL} ORDER BY name`);
2428
2445
  return rows.map((row) => rowToAgent(row, opts?.slim ?? false));
2429
2446
  }
2430
2447
  async function getLeadAgent() {
@@ -2561,6 +2578,8 @@ async function buildRoutingAffinityFromAgent(agentId) {
2561
2578
  };
2562
2579
  }
2563
2580
  function isAgentEligibleForTask(agent, task) {
2581
+ if (isExtensionAgent(agent))
2582
+ return false;
2564
2583
  const affinity = task.routingAffinity;
2565
2584
  if (task.routingAffinityInvalid)
2566
2585
  return false;
@@ -2583,11 +2602,24 @@ function isAgentEligibleForTask(agent, task) {
2583
2602
  return false;
2584
2603
  return hasRequiredCapabilities();
2585
2604
  }
2586
- var dependencies, MAX_EMPTY_POLLS = 2;
2605
+ var dependencies, EXTENSION_AGENT_ROLE = "extension", NOT_EXTENSION_AGENT_SQL, ReservedAgentRoleError, ExtensionAgentAssignmentError, MAX_EMPTY_POLLS = 2;
2587
2606
  var init_agents = __esm(() => {
2588
2607
  init_types();
2589
2608
  init_env_flag();
2590
2609
  init_runtime();
2610
+ NOT_EXTENSION_AGENT_SQL = `COALESCE(role, '') != '${EXTENSION_AGENT_ROLE}'`;
2611
+ ReservedAgentRoleError = class ReservedAgentRoleError extends Error {
2612
+ constructor(message) {
2613
+ super(message);
2614
+ this.name = "ReservedAgentRoleError";
2615
+ }
2616
+ };
2617
+ ExtensionAgentAssignmentError = class ExtensionAgentAssignmentError extends Error {
2618
+ constructor(agent) {
2619
+ super(extensionAgentAssignmentError(agent));
2620
+ this.name = "ExtensionAgentAssignmentError";
2621
+ }
2622
+ };
2591
2623
  });
2592
2624
 
2593
2625
  // src/be/db/context-versions.ts
@@ -2761,6 +2793,7 @@ function rowToAgentTask(row) {
2761
2793
  output: row.output ?? undefined,
2762
2794
  progress: row.progress ?? undefined,
2763
2795
  wasPaused: !!row.was_paused,
2796
+ deferredAt: row.deferredAt ?? undefined,
2764
2797
  credentialKeySuffix: row.credentialKeySuffix ?? undefined,
2765
2798
  credentialKeyType: row.credentialKeyType ?? undefined,
2766
2799
  requestedByUserId: row.requestedByUserId ?? undefined,
@@ -3527,6 +3560,9 @@ async function completeTask(id, output, options) {
3527
3560
  const nextTags = Array.from(new Set([...existingTags, ...options.addTags]));
3528
3561
  completed = await getDbClient().get("UPDATE agent_tasks SET tags = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *", [JSON.stringify(nextTags), id]);
3529
3562
  }
3563
+ if (completed && options?.deferredAt) {
3564
+ completed = await getDbClient().get("UPDATE agent_tasks SET deferredAt = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *", [options.deferredAt, id]);
3565
+ }
3530
3566
  if (completed) {
3531
3567
  await dependencies3.reconcileTaskPullRequestAttachments(id, completed.agentId, [
3532
3568
  completed.output,
@@ -4536,8 +4572,12 @@ var init_swarm_config_guard = __esm(() => {
4536
4572
  // src/be/db.ts
4537
4573
  var exports_db = {};
4538
4574
  __export(exports_db, {
4575
+ EXTENSION_AGENT_ROLE: () => EXTENSION_AGENT_ROLE,
4576
+ ExtensionAgentAssignmentError: () => ExtensionAgentAssignmentError,
4539
4577
  KvTypeCollisionError: () => KvTypeCollisionError,
4540
4578
  MAX_EMPTY_POLLS: () => MAX_EMPTY_POLLS,
4579
+ NOT_EXTENSION_AGENT_SQL: () => NOT_EXTENSION_AGENT_SQL,
4580
+ ReservedAgentRoleError: () => ReservedAgentRoleError,
4541
4581
  SKILL_FILE_LIMITS: () => SKILL_FILE_LIMITS,
4542
4582
  UNATTRIBUTED_USER_ID: () => UNATTRIBUTED_USER_ID,
4543
4583
  __resetSqliteVecExtensionPathCacheForTests: () => __resetSqliteVecExtensionPathCacheForTests,
@@ -4637,6 +4677,7 @@ __export(exports_db, {
4637
4677
  emitMcpServerConnectedTelemetry: () => emitMcpServerConnectedTelemetry,
4638
4678
  ensureSlackDelegationActivation: () => ensureSlackDelegationActivation,
4639
4679
  ensureSlackRenderV2Activation: () => ensureSlackRenderV2Activation,
4680
+ extensionAgentAssignmentError: () => extensionAgentAssignmentError,
4640
4681
  failPendingResumeIfUnclaimed: () => failPendingResumeIfUnclaimed,
4641
4682
  failTask: () => failTask,
4642
4683
  findCompletedTaskInThread: () => findCompletedTaskInThread,
@@ -4768,6 +4809,7 @@ __export(exports_db, {
4768
4809
  getRecentlyCancelledTasksForAgent: () => getRecentlyCancelledTasksForAgent,
4769
4810
  getRecentlyFinishedWorkerTasks: () => getRecentlyFinishedWorkerTasks,
4770
4811
  getRemainingCapacity: () => getRemainingCapacity,
4812
+ getResolvableDeferralOutcomes: () => getResolvableDeferralOutcomes,
4771
4813
  getResolvedConfig: () => getResolvedConfig,
4772
4814
  getRetryableSteps: () => getRetryableSteps,
4773
4815
  getRootTaskChain: () => getRootTaskChain,
@@ -4860,6 +4902,7 @@ __export(exports_db, {
4860
4902
  installSkill: () => installSkill,
4861
4903
  installSystemDefaultSkillsForAgent: () => installSystemDefaultSkillsForAgent,
4862
4904
  isAgentEligibleForTask: () => isAgentEligibleForTask,
4905
+ isExtensionAgent: () => isExtensionAgent,
4863
4906
  isPendingSlackMessage: () => isPendingSlackMessage,
4864
4907
  isPoolAffinityEnforcementEnabled: () => isPoolAffinityEnforcementEnabled,
4865
4908
  isSqliteVecAvailable: () => isSqliteVecAvailable,
@@ -4891,6 +4934,7 @@ __export(exports_db, {
4891
4934
  markInboxMessageRead: () => markInboxMessageRead,
4892
4935
  markInboxMessageResponded: () => markInboxMessageResponded,
4893
4936
  markKeyRateLimited: () => markKeyRateLimited,
4937
+ markSlackDeferralResolved: () => markSlackDeferralResolved,
4894
4938
  markSlackRelayAttempted: () => markSlackRelayAttempted,
4895
4939
  markSlackRelayDelivered: () => markSlackRelayDelivered,
4896
4940
  markSlackTreeRendered: () => markSlackTreeRendered,
@@ -4927,6 +4971,7 @@ __export(exports_db, {
4927
4971
  releaseTask: () => releaseTask,
4928
4972
  replaceTaskAttachment: () => replaceTaskAttachment,
4929
4973
  reserveSlackMessage: () => reserveSlackMessage,
4974
+ reservedRoleViolation: () => reservedRoleViolation,
4930
4975
  resetEmptyPollCount: () => resetEmptyPollCount,
4931
4976
  resetOrphanedInProgressTasksForAgent: () => resetOrphanedInProgressTasksForAgent,
4932
4977
  resetPromptTemplateToDefault: () => resetPromptTemplateToDefault,
@@ -5070,6 +5115,8 @@ function rowToSlackMessage(row) {
5070
5115
  finalizedAt: row.finalized_at ?? undefined,
5071
5116
  streamChunksAppended: row.stream_chunks_appended,
5072
5117
  conclusionKind: row.conclusion_kind ?? undefined,
5118
+ deferralResolvedAt: row.deferral_resolved_at ?? undefined,
5119
+ deferralAbandonedAt: row.deferral_abandoned_at ?? undefined,
5073
5120
  createdAt: row.created_at,
5074
5121
  updatedAt: row.updated_at
5075
5122
  };
@@ -5204,6 +5251,29 @@ async function getSlackOutcomeMessage(taskId) {
5204
5251
  const row = await getDbClient().get(`SELECT * FROM slack_messages WHERE task_id = ? AND kind = 'outcome' LIMIT 1`, [taskId]);
5205
5252
  return row ? rowToSlackMessage(row) : null;
5206
5253
  }
5254
+ async function getResolvableDeferralOutcomes(limit = 50) {
5255
+ const rows = await getDbClient().query(`SELECT card.*, wake.id AS wake_task_id
5256
+ FROM slack_messages card
5257
+ JOIN agent_tasks deferred ON deferred.id = card.task_id
5258
+ JOIN agent_tasks wake ON wake.parentTaskId = deferred.id AND wake.taskType = 'deferred'
5259
+ WHERE card.kind = 'outcome'
5260
+ AND card.finalized_at IS NOT NULL
5261
+ AND card.deferral_resolved_at IS NULL
5262
+ AND card.ts NOT LIKE 'pending:%'
5263
+ AND deferred.deferredAt IS NOT NULL
5264
+ AND wake.status IN ('completed', 'failed', 'cancelled')
5265
+ ORDER BY wake.finishedAt ASC
5266
+ LIMIT ?`, [limit]);
5267
+ return rows.map((row) => ({
5268
+ card: rowToSlackMessage(row),
5269
+ deferredTaskId: row.task_id,
5270
+ wakeTaskId: row.wake_task_id
5271
+ }));
5272
+ }
5273
+ async function markSlackDeferralResolved(id, options = {}) {
5274
+ const now = new Date().toISOString();
5275
+ await getDbClient().run("UPDATE slack_messages SET deferral_resolved_at = ?, deferral_abandoned_at = ? WHERE id = ?", [now, options.abandoned ? now : null, id]);
5276
+ }
5207
5277
  async function getSlackTreeMessages() {
5208
5278
  const rows = await getDbClient().query(`SELECT tree.*
5209
5279
  FROM slack_messages tree
@@ -5841,6 +5911,8 @@ async function getTaskAttachments(taskId) {
5841
5911
  return rows.map(rowToTaskAttachment);
5842
5912
  }
5843
5913
  function rowToSteeringMessage(row) {
5914
+ const senderId = row.created_by_kind === "user" ? row.created_by_user_id : row.created_by_agent_id;
5915
+ const senderLabel = row.created_by_kind === "system" ? "system" : `${row.sender_name?.trim() || senderId || "Unknown"} (${row.created_by_kind})`;
5844
5916
  return {
5845
5917
  id: row.id,
5846
5918
  taskId: row.task_id,
@@ -5849,6 +5921,7 @@ function rowToSteeringMessage(row) {
5849
5921
  status: row.status,
5850
5922
  deliveredMode: row.delivered_mode ?? undefined,
5851
5923
  source: row.source,
5924
+ senderLabel,
5852
5925
  createdByKind: row.created_by_kind,
5853
5926
  createdByUserId: row.created_by_user_id ?? undefined,
5854
5927
  createdByAgentId: row.created_by_agent_id ?? undefined,
@@ -5890,27 +5963,26 @@ async function createSteeringMessage(args) {
5890
5963
  }
5891
5964
  });
5892
5965
  } catch {}
5893
- return rowToSteeringMessage(row);
5966
+ return await getSteeringMessageById(id);
5894
5967
  }
5895
5968
  async function getSteeringMessagesForTask(taskId, opts) {
5896
- const rows = opts?.status ? await getDbClient().query(`SELECT * FROM task_steering_messages
5897
- WHERE task_id = ? AND status = ?
5898
- ORDER BY created_at ASC, rowid ASC`, [taskId, opts.status]) : await getDbClient().query(`SELECT * FROM task_steering_messages
5899
- WHERE task_id = ?
5900
- ORDER BY created_at ASC, rowid ASC`, [taskId]);
5969
+ const rows = opts?.status ? await getDbClient().query(`${STEERING_MESSAGE_SELECT}
5970
+ WHERE m.task_id = ? AND m.status = ?
5971
+ ORDER BY m.created_at ASC, m.rowid ASC`, [taskId, opts.status]) : await getDbClient().query(`${STEERING_MESSAGE_SELECT}
5972
+ WHERE m.task_id = ?
5973
+ ORDER BY m.created_at ASC, m.rowid ASC`, [taskId]);
5901
5974
  return rows.map(rowToSteeringMessage);
5902
5975
  }
5903
5976
  async function getSteeringMessageById(id) {
5904
- const row = await getDbClient().get(`SELECT * FROM task_steering_messages
5905
- WHERE id = ?`, [id]);
5977
+ const row = await getDbClient().get(`${STEERING_MESSAGE_SELECT}
5978
+ WHERE m.id = ?`, [id]);
5906
5979
  return row ? rowToSteeringMessage(row) : null;
5907
5980
  }
5908
5981
  async function getPendingSteeringForTask(taskId) {
5909
5982
  return await getSteeringMessagesForTask(taskId, { status: "pending" });
5910
5983
  }
5911
5984
  async function getPendingSteeringForAgent(agentId) {
5912
- const rows = await getDbClient().query(`SELECT m.*
5913
- FROM task_steering_messages m
5985
+ const rows = await getDbClient().query(`${STEERING_MESSAGE_SELECT}
5914
5986
  JOIN agent_tasks t ON t.id = m.task_id
5915
5987
  WHERE t.agentId = ? AND m.status = 'pending'
5916
5988
  ORDER BY m.created_at ASC, m.rowid ASC`, [agentId]);
@@ -5937,7 +6009,7 @@ async function markSteeringDelivered(id, deliveredMode) {
5937
6009
  });
5938
6010
  } catch {}
5939
6011
  }
5940
- return row ? rowToSteeringMessage(row) : null;
6012
+ return row ? await getSteeringMessageById(id) : null;
5941
6013
  }
5942
6014
  async function markSteeringHandled(id, note) {
5943
6015
  const row = await getDbClient().get(`UPDATE task_steering_messages
@@ -5946,7 +6018,7 @@ async function markSteeringHandled(id, note) {
5946
6018
  handled_note = ?
5947
6019
  WHERE id = ? AND status = 'delivered'
5948
6020
  RETURNING *`, [note ?? null, id]);
5949
- return row ? rowToSteeringMessage(row) : null;
6021
+ return row ? await getSteeringMessageById(id) : null;
5950
6022
  }
5951
6023
  async function markSteeringPromoted(id, promotedTaskId) {
5952
6024
  const row = await getDbClient().get(`UPDATE task_steering_messages
@@ -5954,7 +6026,7 @@ async function markSteeringPromoted(id, promotedTaskId) {
5954
6026
  promoted_task_id = ?
5955
6027
  WHERE id = ? AND status = 'pending'
5956
6028
  RETURNING *`, [promotedTaskId, id]);
5957
- return row ? rowToSteeringMessage(row) : null;
6029
+ return row ? await getSteeringMessageById(id) : null;
5958
6030
  }
5959
6031
  async function cancelPendingSteeringForTask(taskId) {
5960
6032
  const result = await getDbClient().run(`UPDATE task_steering_messages
@@ -6252,6 +6324,14 @@ async function createTaskExtended(task, options) {
6252
6324
  }
6253
6325
  }
6254
6326
  const targetAgentId = options.agentId ?? options.offeredTo;
6327
+ for (const id2 of new Set([options.agentId, options.offeredTo])) {
6328
+ if (!id2)
6329
+ continue;
6330
+ const target = await getAgentById(id2);
6331
+ if (target && isExtensionAgent(target)) {
6332
+ throw new ExtensionAgentAssignmentError(target);
6333
+ }
6334
+ }
6255
6335
  if (options.routingAffinity && targetAgentId && !routingAffinityIsInheritedProvenance) {
6256
6336
  const target = await getAgentById(targetAgentId);
6257
6337
  if (!target || !isAgentEligibleForTask(target, { routingAffinity: options.routingAffinity })) {
@@ -6476,6 +6556,8 @@ async function acceptTask(taskId, agentId) {
6476
6556
  if (!task)
6477
6557
  return null;
6478
6558
  const agent = await getAgentById(agentId);
6559
+ if (isExtensionAgent(agent))
6560
+ return null;
6479
6561
  if ((task.routingAffinity?.leadOnly || task.routingAffinityInvalid) && (!agent || !isAgentEligibleForTask(agent, task))) {
6480
6562
  try {
6481
6563
  await createLogEntry({
@@ -6645,6 +6727,8 @@ async function claimOfferedTask(taskId, agentId) {
6645
6727
  if (task.status !== "offered" || task.offeredTo !== agentId)
6646
6728
  return null;
6647
6729
  const agent = await getAgentById(agentId);
6730
+ if (isExtensionAgent(agent))
6731
+ return null;
6648
6732
  if ((task.routingAffinity?.leadOnly || task.routingAffinityInvalid) && (!agent || !isAgentEligibleForTask(agent, task))) {
6649
6733
  try {
6650
6734
  await createLogEntry({
@@ -6760,6 +6844,11 @@ async function updateAgentProfile(id, updates, meta, guard) {
6760
6844
  const current = await tx.get("SELECT * FROM agents WHERE id = ?", [id]);
6761
6845
  if (!current)
6762
6846
  return null;
6847
+ const roleViolation = reservedRoleViolation(current.role, updates.role, {
6848
+ allowExtensionRole: guard?.allowExtensionRole
6849
+ });
6850
+ if (roleViolation)
6851
+ throw new ReservedAgentRoleError(roleViolation);
6763
6852
  const previous = rowToAgent(current);
6764
6853
  const next = {
6765
6854
  name: updates.name ?? previous.name,
@@ -7912,6 +8001,8 @@ function rowToScheduledTask(row) {
7912
8001
  nextRunAt: normalizeDate(row.nextRunAt) ?? undefined,
7913
8002
  createdByAgentId: row.createdByAgentId ?? undefined,
7914
8003
  parentTaskId: row.parentTaskId ?? undefined,
8004
+ requestedDelayMs: row.requestedDelayMs ?? undefined,
8005
+ requestedRunAt: normalizeDate(row.requestedRunAt) ?? undefined,
7915
8006
  timezone: row.timezone,
7916
8007
  consecutiveErrors: row.consecutiveErrors ?? 0,
7917
8008
  lastErrorAt: normalizeDate(row.lastErrorAt) ?? undefined,
@@ -8003,11 +8094,12 @@ async function createScheduledTask(data) {
8003
8094
  const row = await getDbClient().get(`INSERT INTO scheduled_tasks (
8004
8095
  id, "key", name, description, cronExpression, intervalMs, taskTemplate,
8005
8096
  taskType, tags, priority, targetAgentId, enabled, nextRunAt,
8006
- createdByAgentId, parentTaskId, timezone, model, modelTier, scheduleType,
8097
+ createdByAgentId, parentTaskId, requestedDelayMs, requestedRunAt,
8098
+ timezone, model, modelTier, scheduleType,
8007
8099
  targetType, workflowId, scriptName, scriptArgs, params, requiredParams, requires,
8008
8100
  createdAt, lastUpdatedAt,
8009
8101
  created_by, updated_by
8010
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
8102
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
8011
8103
  id,
8012
8104
  normalizeAssetKey(data.key ?? defaultAssetKey("schedule", id)),
8013
8105
  data.name,
@@ -8023,6 +8115,8 @@ async function createScheduledTask(data) {
8023
8115
  data.nextRunAt ?? null,
8024
8116
  data.createdByAgentId ?? null,
8025
8117
  data.parentTaskId ?? null,
8118
+ data.requestedDelayMs ?? null,
8119
+ data.requestedRunAt ?? null,
8026
8120
  data.timezone ?? "UTC",
8027
8121
  data.model ?? null,
8028
8122
  data.modelTier ?? null,
@@ -11674,8 +11768,8 @@ async function getInstanceActivity() {
11674
11768
  }
11675
11769
  async function getSwarmMetrics() {
11676
11770
  const client = getDbClient();
11677
- const groupCounts = async (table) => {
11678
- const rows = await client.query(`SELECT status, COUNT(*) AS count FROM ${table} GROUP BY status`);
11771
+ const groupCounts = async (table, where) => {
11772
+ const rows = await client.query(`SELECT status, COUNT(*) AS count FROM ${table}${where ? ` WHERE ${where}` : ""} GROUP BY status`);
11679
11773
  const by_status = {};
11680
11774
  let total = 0;
11681
11775
  for (const r of rows) {
@@ -11690,7 +11784,7 @@ async function getSwarmMetrics() {
11690
11784
  const skillsRow = await client.get("SELECT COUNT(*) AS count FROM skills");
11691
11785
  return {
11692
11786
  tasks: await groupCounts("agent_tasks"),
11693
- agents: await groupCounts("agents"),
11787
+ agents: await groupCounts("agents", NOT_EXTENSION_AGENT_SQL),
11694
11788
  workflows: { total: workflowRow?.total ?? 0, enabled: workflowRow?.enabled ?? 0 },
11695
11789
  pages: { total: pagesRow?.count ?? 0 },
11696
11790
  sessions: { active: sessionsRow?.count ?? 0 },
@@ -12150,7 +12244,11 @@ async function countScriptRunJournalAgentTaskSteps(runId) {
12150
12244
  const row = await getDbClient().get("SELECT COUNT(*) AS count FROM script_run_journal WHERE runId = ? AND stepType = 'agent-task'", [runId]);
12151
12245
  return row?.count ?? 0;
12152
12246
  }
12153
- var VERSIONABLE_FIELDS2, BUDGETED_IDENTITY_FIELDS, PENDING_SLACK_MESSAGE_TS_PREFIX = "pending:", GENERATED_PULL_REQUEST_PROVIDER_ID = "github", GENERATED_PULL_REQUEST_INTENT = "task-deliverable", GENERATED_PULL_REQUEST_DESCRIPTION = "Pull request shipped by this task", GENERATED_PULL_REQUEST_SOURCE = "task-pull-request-recorder", ROUTING_HOLDER_SQL = `CASE
12247
+ var VERSIONABLE_FIELDS2, BUDGETED_IDENTITY_FIELDS, PENDING_SLACK_MESSAGE_TS_PREFIX = "pending:", GENERATED_PULL_REQUEST_PROVIDER_ID = "github", GENERATED_PULL_REQUEST_INTENT = "task-deliverable", GENERATED_PULL_REQUEST_DESCRIPTION = "Pull request shipped by this task", GENERATED_PULL_REQUEST_SOURCE = "task-pull-request-recorder", STEERING_MESSAGE_SELECT = `SELECT m.*,
12248
+ CASE m.created_by_kind WHEN 'user' THEN u.name WHEN 'agent' THEN a.name END AS sender_name
12249
+ FROM task_steering_messages m
12250
+ LEFT JOIN users u ON m.created_by_kind = 'user' AND u.id = m.created_by_user_id
12251
+ LEFT JOIN agents a ON m.created_by_kind = 'agent' AND a.id = m.created_by_agent_id`, ROUTING_HOLDER_SQL = `CASE
12154
12252
  WHEN status IN ('draft', 'offered', 'reviewing') AND offeredTo IS NOT NULL THEN offeredTo
12155
12253
  ELSE COALESCE(agentId, offeredTo)
12156
12254
  END`, ELIGIBILITY_SCAN_BATCH_SIZE, ELIGIBILITY_SCAN_CAP, UNATTRIBUTED_USER_ID = "unattributed", HUMAN_FREE_TASKS_CTE = `human_free_tasks(id) AS (
@@ -12281,4 +12379,4 @@ var init_db = __esm(() => {
12281
12379
  };
12282
12380
  });
12283
12381
 
12284
- export { slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, telemetry, emitIntegrationConnected, init_telemetry, HeartbeatExpiryError, init_heartbeat_expiry, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, isInTransaction, init_db_client, getPromptTemplateDefaultDrift, init_default_drift, init_templates2 as init_templates, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, getAllAgents, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, getTaskById, getChildTasks, hasNonTerminalResumeChild, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, onTaskStarted, init_task_lifecycle_events, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, init_reaction_shortcode, parseTaskToolManifest, selectTaskTools, init_task_tool_manifest, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, validateConfigValue, init_swarm_config_guard, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, markKeyRateLimited, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };
12382
+ export { slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, telemetry, emitIntegrationConnected, init_telemetry, HeartbeatExpiryError, init_heartbeat_expiry, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, isInTransaction, init_db_client, getPromptTemplateDefaultDrift, init_default_drift, init_templates2 as init_templates, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, EXTENSION_AGENT_ROLE, NOT_EXTENSION_AGENT_SQL, isExtensionAgent, extensionAgentAssignmentError, ReservedAgentRoleError, reservedRoleViolation, ExtensionAgentAssignmentError, getAllAgents, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, getTaskById, getChildTasks, hasNonTerminalResumeChild, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, onTaskStarted, init_task_lifecycle_events, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, init_reaction_shortcode, parseTaskToolManifest, selectTaskTools, init_task_tool_manifest, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, validateConfigValue, init_swarm_config_guard, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getResolvableDeferralOutcomes, markSlackDeferralResolved, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, markKeyRateLimited, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  contentSha256,
3
3
  init_profile_sync
4
- } from "./cli-0d9nbqxf.js";
4
+ } from "./cli-g2h29qar.js";
5
5
  import {
6
6
  OpenAI,
7
7
  init_openai
@@ -11,7 +11,7 @@ import {
11
11
  getDbClient,
12
12
  init_db,
13
13
  isSqliteVecAvailable
14
- } from "./cli-djvxhnc4.js";
14
+ } from "./cli-ge67p080.js";
15
15
  import {
16
16
  __esm,
17
17
  __export,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runStopHookSessionSummarySubprocess
3
- } from "./cli-5mbmvxnn.js";
3
+ } from "./cli-1jpjafw4.js";
4
4
  import {
5
5
  fetchInstalledMcpServers
6
6
  } from "./cli-tng3131n.js";
@@ -819,7 +819,7 @@ class ClaudeAdapter {
819
819
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
820
820
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
821
821
  }
822
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-jjf4zss1.js") : undefined;
822
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-z7fahf1k.js") : undefined;
823
823
  claudeSdk?.validateClaudeSdkAdditionalArgs([
824
824
  ...claudeBinaryArgv.slice(1),
825
825
  ...config.additionalArgs ?? []
@@ -7,7 +7,7 @@ var package_default;
7
7
  var init_package = __esm(() => {
8
8
  package_default = {
9
9
  name: "@desplega.ai/agent-swarm",
10
- version: "1.153.0",
10
+ version: "1.154.0",
11
11
  description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
12
12
  keywords: [
13
13
  "agent-swarm.dev",
@@ -48,6 +48,7 @@ var init_package = __esm(() => {
48
48
  "plugin/commands/",
49
49
  "plugin/agents/",
50
50
  "plugin/pi-skills/",
51
+ "plugin/opencode-plugins/lib/memory-raters.ts",
51
52
  "templates/",
52
53
  "vendored-openapi/",
53
54
  "openapi.json"
@@ -7,7 +7,7 @@ import {
7
7
  init_date_utils,
8
8
  init_db,
9
9
  normalizeDateRequired
10
- } from "./cli-djvxhnc4.js";
10
+ } from "./cli-ge67p080.js";
11
11
  import {
12
12
  init_secret_scrubber,
13
13
  registerVolatileSecret,
@@ -20,10 +20,10 @@ import {
20
20
  oauthAppRowToProviderConfig,
21
21
  updateAuthorizationTokens,
22
22
  upsertAuthorization
23
- } from "./cli-r8tdds6s.js";
23
+ } from "./cli-n62atwh9.js";
24
24
  import {
25
25
  embedScript
26
- } from "./cli-ysc1kbet.js";
26
+ } from "./cli-e3cyf59d.js";
27
27
  import {
28
28
  CredentialBroker,
29
29
  DEFAULT_CREDENTIAL_BINDINGS,
@@ -43,11 +43,11 @@ import {
43
43
  normalizeDateRequired,
44
44
  placeholderForConfigKey,
45
45
  upsertSwarmConfig
46
- } from "./cli-djvxhnc4.js";
46
+ } from "./cli-ge67p080.js";
47
47
  import {
48
48
  defaultAssetKey,
49
49
  init_key
50
- } from "./cli-zcsyfw2z.js";
50
+ } from "./cli-4k7jazkq.js";
51
51
  import {
52
52
  init_env_flag,
53
53
  isEnvFlagEnabled
@@ -21,15 +21,16 @@ import {
21
21
  } from "./cli-e781c6f9.js";
22
22
  import {
23
23
  summarizeSession
24
- } from "./cli-mzgyhxbe.js";
24
+ } from "./cli-fdzg6jhf.js";
25
25
  import {
26
26
  applyReasoningEffort
27
27
  } from "./cli-avkd6mqv.js";
28
28
  import {
29
29
  buildRatingsFromLlm,
30
30
  fetchRetrievalsForTask,
31
+ getMemoryRaterNames,
31
32
  postRatings
32
- } from "./cli-7g9s78jf.js";
33
+ } from "./cli-3bkz2p7j.js";
33
34
  import {
34
35
  CodexOAuthRefreshError,
35
36
  credentialsToAuthJson,
@@ -49,7 +50,7 @@ import {
49
50
  import {
50
51
  init_package,
51
52
  package_default
52
- } from "./cli-ybpp1srm.js";
53
+ } from "./cli-myaxtgh8.js";
53
54
  import {
54
55
  init_secret_scrubber,
55
56
  scrubSecrets
@@ -333209,8 +333210,7 @@ class CodexSession {
333209
333210
  const _fetchRetrievals = this.summarizeDeps.fetchRetrievalsForTask ?? fetchRetrievalsForTask;
333210
333211
  const _postRatings = this.summarizeDeps.postRatings ?? postRatings;
333211
333212
  const _buildRatings = this.summarizeDeps.buildRatingsFromLlm ?? buildRatingsFromLlm;
333212
- const memoryRaters = (process.env.MEMORY_RATERS ?? "").split(",").map((s) => s.trim()).filter(Boolean);
333213
- const wantRatings = memoryRaters.includes("llm");
333213
+ const wantRatings = getMemoryRaterNames().includes("llm");
333214
333214
  const retrievals = wantRatings ? await _fetchRetrievals({ apiUrl, apiKey, agentId, taskId }).catch(() => []) : [];
333215
333215
  const result = await _runSummarize({
333216
333216
  harness: "codex",
@@ -333390,7 +333390,7 @@ class CodexSubprocessSession {
333390
333390
  ...process.env.CODEX_SKILLS_DIR ? { CODEX_SKILLS_DIR: process.env.CODEX_SKILLS_DIR } : {},
333391
333391
  CONTEXT_MODE_EXTERNAL_MCP_NUDGE_EVERY: CTX_MODE_NUDGE_EVERY,
333392
333392
  ...process.env.SKIP_SESSION_SUMMARY ? { SKIP_SESSION_SUMMARY: process.env.SKIP_SESSION_SUMMARY } : {},
333393
- ...process.env.MEMORY_RATERS ? { MEMORY_RATERS: process.env.MEMORY_RATERS } : {}
333393
+ MEMORY_RATERS: getMemoryRaterNames().join(",")
333394
333394
  },
333395
333395
  stdin: "pipe",
333396
333396
  stdout: "pipe",