@desplega.ai/agent-swarm 1.121.1 → 1.122.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +3 -3
  2. package/dist/{actions-99h2dh5e.js → actions-rd8p2zqb.js} +6 -6
  3. package/dist/{app-9gfdk9me.js → app-v839gywt.js} +4 -4
  4. package/dist/{assistant-mabq9kz7.js → assistant-qjp128zg.js} +9 -9
  5. package/dist/{boot-reembed-3vr2amzp.js → boot-reembed-3fjfyz1h.js} +4 -4
  6. package/dist/{boot-reembed-ya33nge3.js → boot-reembed-e4b9xsa1.js} +3 -3
  7. package/dist/{boot-scrub-logs-2nmz7fzw.js → boot-scrub-logs-x3vrw472.js} +2 -2
  8. package/dist/{claude-adapter-vxvcym3r.js → claude-adapter-zvzp4x76.js} +1 -1
  9. package/dist/{claude-managed-adapter-g807894s.js → claude-managed-adapter-g92bcm1a.js} +1 -1
  10. package/dist/{cli-dwqakg2b.js → cli-2rcegy4e.js} +11 -6
  11. package/dist/{cli-gahmct71.js → cli-2y473tja.js} +2 -2
  12. package/dist/{cli-2846g99z.js → cli-31163xvp.js} +398 -26
  13. package/dist/{cli-x4apc9t3.js → cli-36dctyg8.js} +139 -23
  14. package/dist/{cli-qfh6pmvm.js → cli-3m3ysn1f.js} +1 -1
  15. package/dist/{cli-wwsaj97q.js → cli-4pcxkk69.js} +10 -0
  16. package/dist/{cli-ma04faw5.js → cli-5arfywtm.js} +2 -0
  17. package/dist/{cli-02m8v96c.js → cli-9pv05nba.js} +3 -2
  18. package/dist/{cli-p8qcm631.js → cli-ctzr9apr.js} +1 -1
  19. package/dist/{cli-e0zbndab.js → cli-ea6b2m9a.js} +3 -3
  20. package/dist/{cli-zweca3q3.js → cli-exfs8aym.js} +1 -1
  21. package/dist/{cli-zm78xp1y.js → cli-fdbt8m8y.js} +26 -4
  22. package/dist/{cli-kx7vsvg0.js → cli-g279mtbs.js} +1 -1
  23. package/dist/{cli-7bk7s2sx.js → cli-h4kjb2qy.js} +1 -1
  24. package/dist/{cli-5jd04m23.js → cli-h7209ted.js} +1 -1
  25. package/dist/{cli-ng0gr9rz.js → cli-jc23g2g2.js} +2 -2
  26. package/dist/{cli-5c4327dx.js → cli-jj1arm18.js} +15 -1
  27. package/dist/{cli-rjn06qph.js → cli-jjcd495f.js} +1 -1
  28. package/dist/{cli-avxs2rp9.js → cli-mwp9asnz.js} +8 -8
  29. package/dist/{cli-yyqpn0gc.js → cli-ndv6ftj4.js} +2 -2
  30. package/dist/{cli-3t4nvx1x.js → cli-nqxvcvnv.js} +4 -4
  31. package/dist/{cli-16dv125e.js → cli-peaqed7c.js} +20 -3
  32. package/dist/{cli-yhwn2vjm.js → cli-pw04m0wb.js} +362 -140
  33. package/dist/{cli-msyrqt1f.js → cli-spsg6mqp.js} +148 -20
  34. package/dist/{cli-yy9sm7c1.js → cli-th8jh1rm.js} +85 -7
  35. package/dist/{cli-kwjx3f1v.js → cli-v2e8jdb6.js} +2 -2
  36. package/dist/{cli-tyfxrrdd.js → cli-w5r4wfm5.js} +11 -1
  37. package/dist/{cli-dn5ycmtw.js → cli-xdv1vntm.js} +1 -1
  38. package/dist/{cli-w4crd8gx.js → cli-xpveay6y.js} +1 -1
  39. package/dist/{cli-fxdhzkqx.js → cli-ydcfdmcz.js} +1 -1
  40. package/dist/{cli-9hewdgzb.js → cli-zrc5k1rd.js} +1 -1
  41. package/dist/cli.js +10 -10
  42. package/dist/{codex-adapter-0kv2meed.js → codex-adapter-vcseqpwf.js} +1 -1
  43. package/dist/{codex-session-runner-m1e1v4r0.js → codex-session-runner-jec9e9t1.js} +1 -1
  44. package/dist/{commands-hty4156r.js → commands-jfmtpvvy.js} +2 -2
  45. package/dist/{db-kyeq3t7h.js → db-vn5met8v.js} +24 -2
  46. package/dist/{devin-adapter-pe1cgpd4.js → devin-adapter-8nmsgff3.js} +1 -1
  47. package/dist/{handlers-fxvqnp6s.js → handlers-0s7dn9ma.js} +36 -10
  48. package/dist/{hook-j4ksm2fy.js → hook-b2293dx1.js} +1 -1
  49. package/dist/{http-m7fq6kbc.js → http-4hmtrrpx.js} +418 -47
  50. package/dist/{index-rqxt0515.js → index-4bcr1r09.js} +11 -11
  51. package/dist/{index-62g7ym5y.js → index-cmee5q4s.js} +7 -7
  52. package/dist/{index-mbaa4yn7.js → index-gxj7sbzx.js} +10 -10
  53. package/dist/{index-r2tmg4ts.js → index-zy9smn2h.js} +9 -9
  54. package/dist/{keepalive-acgfgbk8.js → keepalive-2htbn1j9.js} +5 -5
  55. package/dist/{lead-r3pnbky3.js → lead-p9s142mj.js} +26 -26
  56. package/dist/{maintenance-4tqr6va0.js → maintenance-x8jgt9fd.js} +4 -4
  57. package/dist/{oauth-refresh-sweep-5714hq77.js → oauth-refresh-sweep-9m7qmm1m.js} +4 -4
  58. package/dist/{onboard-s5x8zjqd.js → onboard-jsy93b12.js} +2 -2
  59. package/dist/{opencode-adapter-s3nhtp9m.js → opencode-adapter-44z93505.js} +1 -1
  60. package/dist/{otel-impl-8g0741yr.js → otel-impl-z2w4phcp.js} +1 -1
  61. package/dist/{pi-mono-adapter-k3z6e5fn.js → pi-mono-adapter-2syx1x4d.js} +21 -1
  62. package/dist/{pricing-refresh-09ty42xr.js → pricing-refresh-cjjd6ayt.js} +4 -4
  63. package/dist/{rbac-roles-q38w8rne.js → rbac-roles-166rf7ba.js} +3 -3
  64. package/dist/{rbac-roles-2hjvj3q0.js → rbac-roles-v3xrhv48.js} +4 -4
  65. package/dist/{seed-pricing-wzx03625.js → seed-pricing-f4xrjref.js} +3 -3
  66. package/dist/{setup-4hmnc9fz.js → setup-58jmv2vm.js} +2 -2
  67. package/dist/{worker-efef96pc.js → worker-95x5vnx4.js} +26 -26
  68. package/openapi.json +311 -16
  69. package/package.json +1 -1
  70. package/src/be/db.ts +286 -1
  71. package/src/be/migrations/121_task_steering_messages.sql +24 -0
  72. package/src/be/migrations/122_steering_handled_note.sql +4 -0
  73. package/src/be/scripts/typecheck.ts +1 -0
  74. package/src/be/steering.ts +251 -0
  75. package/src/commands/context-preamble.ts +68 -8
  76. package/src/commands/provider-credentials.ts +2 -2
  77. package/src/commands/runner.ts +134 -1
  78. package/src/heartbeat/heartbeat.ts +36 -2
  79. package/src/http/active-sessions.ts +1 -1
  80. package/src/http/core.ts +3 -0
  81. package/src/http/memory.ts +2 -2
  82. package/src/http/schedules.ts +2 -2
  83. package/src/http/script-runs.ts +1 -1
  84. package/src/http/sessions.ts +5 -1
  85. package/src/http/stats.ts +5 -1
  86. package/src/http/tasks.ts +407 -13
  87. package/src/prompts/base-prompt.ts +15 -0
  88. package/src/prompts/session-templates.ts +31 -0
  89. package/src/providers/claude-adapter.ts +208 -26
  90. package/src/providers/claude-managed-adapter.ts +20 -1
  91. package/src/providers/codex-adapter.ts +2 -1
  92. package/src/providers/devin-adapter.ts +18 -1
  93. package/src/providers/opencode-adapter.ts +32 -0
  94. package/src/providers/pi-mono-adapter.ts +33 -1
  95. package/src/providers/types.ts +11 -1
  96. package/src/rbac/legacy-policy.ts +2 -0
  97. package/src/rbac/permissions.ts +8 -0
  98. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  99. package/src/scripts-runtime/types/stdlib.d.ts +6 -0
  100. package/src/scripts-runtime/types/swarm-sdk.d.ts +6 -0
  101. package/src/server-user.ts +22 -0
  102. package/src/server.ts +11 -0
  103. package/src/slack/HEURISTICS.md +7 -0
  104. package/src/slack/blocks.ts +2 -0
  105. package/src/slack/handlers.ts +33 -1
  106. package/src/slack/steering.ts +67 -0
  107. package/src/slack/thread-buffer.ts +39 -0
  108. package/src/slack/watcher.ts +5 -0
  109. package/src/tests/claude-adapter-binary.test.ts +5 -0
  110. package/src/tests/claude-managed-adapter.test.ts +61 -0
  111. package/src/tests/devin-adapter.test.ts +41 -0
  112. package/src/tests/mcp-user-route.test.ts +14 -2
  113. package/src/tests/opencode-adapter.test.ts +176 -1
  114. package/src/tests/pi-mono-adapter.test.ts +80 -0
  115. package/src/tests/prompt-template-session.test.ts +5 -4
  116. package/src/tests/provider-steering-capabilities.test.ts +44 -0
  117. package/src/tests/rbac-engine.test.ts +2 -1
  118. package/src/tests/sdk-allowlist.test.ts +7 -0
  119. package/src/tests/slack-steering.test.ts +227 -0
  120. package/src/tests/status.test.ts +20 -0
  121. package/src/tests/steer-task-tool.test.ts +200 -0
  122. package/src/tests/steering-core.test.ts +601 -0
  123. package/src/tests/steering-enabled.test.ts +343 -0
  124. package/src/tests/steering-promotion.test.ts +205 -0
  125. package/src/tests/steering-transport.test.ts +338 -0
  126. package/src/tests/tool-output-agent-id.test.ts +182 -0
  127. package/src/tests/user-token-rest-auth.test.ts +31 -30
  128. package/src/tools/accept-steer.ts +148 -0
  129. package/src/tools/cancel-task.ts +1 -1
  130. package/src/tools/context-diff.ts +1 -1
  131. package/src/tools/context-history.ts +2 -3
  132. package/src/tools/create-channel.ts +2 -2
  133. package/src/tools/credential-bindings/tool.ts +1 -1
  134. package/src/tools/delete-channel.ts +1 -1
  135. package/src/tools/get-swarm.ts +1 -1
  136. package/src/tools/get-task-details.ts +4 -1
  137. package/src/tools/get-tasks.ts +4 -1
  138. package/src/tools/inject-learning.ts +1 -1
  139. package/src/tools/join-swarm.ts +1 -1
  140. package/src/tools/kv/kv-delete.ts +1 -1
  141. package/src/tools/kv/kv-get.ts +1 -1
  142. package/src/tools/kv/kv-incr.ts +1 -1
  143. package/src/tools/kv/kv-list.ts +1 -1
  144. package/src/tools/kv/kv-set.ts +1 -1
  145. package/src/tools/list-channels.ts +1 -1
  146. package/src/tools/list-services.ts +2 -2
  147. package/src/tools/mcp-servers/mcp-server-create.ts +1 -1
  148. package/src/tools/mcp-servers/mcp-server-delete.ts +1 -1
  149. package/src/tools/mcp-servers/mcp-server-get.ts +1 -1
  150. package/src/tools/mcp-servers/mcp-server-install.ts +1 -1
  151. package/src/tools/mcp-servers/mcp-server-list.ts +1 -1
  152. package/src/tools/mcp-servers/mcp-server-uninstall.ts +1 -1
  153. package/src/tools/mcp-servers/mcp-server-update.ts +1 -1
  154. package/src/tools/memory-delete.ts +1 -1
  155. package/src/tools/memory-edit.ts +1 -1
  156. package/src/tools/memory-get.ts +1 -1
  157. package/src/tools/memory-search.ts +27 -22
  158. package/src/tools/my-agent-info.ts +1 -1
  159. package/src/tools/poll-task.ts +1 -1
  160. package/src/tools/post-message.ts +2 -2
  161. package/src/tools/prompt-templates/delete.ts +1 -1
  162. package/src/tools/prompt-templates/get.ts +1 -1
  163. package/src/tools/prompt-templates/list.ts +1 -1
  164. package/src/tools/prompt-templates/preview.ts +1 -1
  165. package/src/tools/prompt-templates/set.ts +1 -1
  166. package/src/tools/read-messages.ts +1 -1
  167. package/src/tools/register-agentmail-inbox.ts +1 -1
  168. package/src/tools/register-kapso-number.ts +2 -3
  169. package/src/tools/register-service.ts +1 -1
  170. package/src/tools/request-human-input.ts +1 -1
  171. package/src/tools/schedules/create-schedule.ts +2 -6
  172. package/src/tools/schedules/delete-schedule.ts +1 -1
  173. package/src/tools/schedules/list-schedules.ts +1 -1
  174. package/src/tools/schedules/patch-schedule.ts +2 -2
  175. package/src/tools/schedules/run-schedule-now.ts +1 -1
  176. package/src/tools/schedules/update-schedule.ts +2 -2
  177. package/src/tools/script-connections/tool.ts +1 -1
  178. package/src/tools/send-task.ts +4 -2
  179. package/src/tools/skills/skill-create.ts +1 -1
  180. package/src/tools/skills/skill-delete.ts +1 -1
  181. package/src/tools/skills/skill-get-file.ts +1 -1
  182. package/src/tools/skills/skill-get.ts +1 -1
  183. package/src/tools/skills/skill-install-remote.ts +1 -1
  184. package/src/tools/skills/skill-install.ts +1 -1
  185. package/src/tools/skills/skill-list.ts +1 -1
  186. package/src/tools/skills/skill-publish.ts +1 -1
  187. package/src/tools/skills/skill-search.ts +1 -1
  188. package/src/tools/skills/skill-sync-remote.ts +1 -1
  189. package/src/tools/skills/skill-uninstall.ts +1 -1
  190. package/src/tools/skills/skill-update.ts +1 -1
  191. package/src/tools/steer-task.ts +149 -0
  192. package/src/tools/store-progress.ts +17 -12
  193. package/src/tools/swarm-config/delete-config.ts +1 -1
  194. package/src/tools/swarm-config/get-config.ts +1 -2
  195. package/src/tools/swarm-config/list-config.ts +2 -2
  196. package/src/tools/swarm-config/set-config.ts +1 -2
  197. package/src/tools/task-action.ts +1 -1
  198. package/src/tools/tool-config.ts +3 -1
  199. package/src/tools/unregister-service.ts +1 -1
  200. package/src/tools/update-profile.ts +1 -2
  201. package/src/tools/update-service-status.ts +1 -1
  202. package/src/tools/whatsapp-message.ts +1 -1
  203. package/src/types.ts +106 -22
  204. package/src/utils/steering-enabled.ts +11 -0
  205. package/src/workflows/executors/agent-task.ts +3 -1
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  init_package,
7
7
  package_default
8
- } from "./cli-dn5ycmtw.js";
8
+ } from "./cli-xdv1vntm.js";
9
9
  import {
10
10
  init_secret_scrubber,
11
11
  scrubSecrets
@@ -803,7 +803,7 @@ function resolveTaskModelSelection(opts) {
803
803
  function isTerminalTaskStatus(status) {
804
804
  return TERMINAL_TASK_STATUSES.includes(status);
805
805
  }
806
- var AssetKeySchema, AssetEntityTypeSchema, AssetProviderRefSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, LEGACY_MODEL_TO_TIER, DEFAULT_MODEL_TIER_MAP, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, InboxMessageStatusSchema, InboxMessageSchema, AgentTaskSourceSchema, ProviderNameSchema, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, TaskAttachmentKindSchema, attachmentCommonFields, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, IdentityEventTypeSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentCredStatusLiveTestSchema, AgentLatestModelSchema, AgentBedrockStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, ChangeSourceSchema, VersionableFieldSchema, ContextVersionSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, AgentLogEventTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostSourceSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, RetryPolicySchema, ExecutorMetaSchema, ValidationResultSchema, StepValidationConfigSchema, SwarmScriptNodeConfigSchema, WorkflowNodeSchema, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, WebhookVerificationSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowTemplateSchema, WorkflowSnapshotSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSnapshotSchema, PageSchema, PageVersionSchema, MetricParamSchema, MetricVariableTypeSchema, MetricFormatSchema, MetricVisualizationSchema, MetricQuerySchema, MetricVariableSchema, MetricVizConfigSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSnapshotSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunKindSchema, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepStatusSchema, WorkflowRunStepSchema, WaitModeSchema, WaitStateStatusSchema, WaitStateRowSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillTypeSchema, SkillScopeSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpServerTransportSchema, McpServerScopeSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KV_NAME_REGEX, KvNamespaceSchema, KvKeySchema, KvEntrySchema;
806
+ var AssetKeySchema, AssetEntityTypeSchema, AssetProviderRefSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, LEGACY_MODEL_TO_TIER, DEFAULT_MODEL_TIER_MAP, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, InboxMessageStatusSchema, InboxMessageSchema, AgentTaskSourceSchema, ProviderNameSchema, SteerModeSchema, SteeringStatusSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, SteerResultSchema, PROVIDER_STEER_CAPABILITIES, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, TaskAttachmentKindSchema, attachmentCommonFields, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, IdentityEventTypeSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentCredStatusLiveTestSchema, AgentLatestModelSchema, AgentBedrockStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, ChangeSourceSchema, VersionableFieldSchema, ContextVersionSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, AgentLogEventTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostSourceSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, RetryPolicySchema, ExecutorMetaSchema, ValidationResultSchema, StepValidationConfigSchema, SwarmScriptNodeConfigSchema, WorkflowNodeSchema, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, WebhookVerificationSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowTemplateSchema, WorkflowSnapshotSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSnapshotSchema, PageSchema, PageVersionSchema, MetricParamSchema, MetricVariableTypeSchema, MetricFormatSchema, MetricVisualizationSchema, MetricQuerySchema, MetricVariableSchema, MetricVizConfigSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSnapshotSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunKindSchema, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepStatusSchema, WorkflowRunStepSchema, WaitModeSchema, WaitStateStatusSchema, WaitStateRowSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillTypeSchema, SkillScopeSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpServerTransportSchema, McpServerScopeSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KV_NAME_REGEX, KvNamespaceSchema, KvKeySchema, KvEntrySchema;
807
807
  var init_types = __esm(() => {
808
808
  init_zod();
809
809
  init_key();
@@ -916,7 +916,7 @@ var init_types = __esm(() => {
916
916
  ]);
917
917
  InboxMessageSchema = object({
918
918
  id: uuid(),
919
- agentId: uuid(),
919
+ agentId: string(),
920
920
  content: string().min(1),
921
921
  source: _enum(["slack", "agentmail"]).default("slack"),
922
922
  status: InboxMessageStatusSchema.default("unread"),
@@ -951,13 +951,56 @@ var init_types = __esm(() => {
951
951
  "claude-managed",
952
952
  "opencode"
953
953
  ]);
954
+ SteerModeSchema = _enum(["steer", "queue"]);
955
+ SteeringStatusSchema = _enum([
956
+ "pending",
957
+ "delivered",
958
+ "handled",
959
+ "promoted",
960
+ "cancelled"
961
+ ]);
962
+ SteeringSourceSchema = _enum(["ui", "mcp", "script", "slack", "api"]);
963
+ SteeringMessageSchema = object({
964
+ id: uuid(),
965
+ taskId: uuid(),
966
+ body: string().min(1),
967
+ mode: SteerModeSchema,
968
+ status: SteeringStatusSchema,
969
+ deliveredMode: SteerModeSchema.optional(),
970
+ source: SteeringSourceSchema,
971
+ createdByKind: _enum(["user", "agent", "system"]),
972
+ createdByUserId: string().optional(),
973
+ createdByAgentId: string().optional(),
974
+ promotedTaskId: uuid().optional(),
975
+ createdAt: exports_iso.datetime(),
976
+ deliveredAt: exports_iso.datetime().optional(),
977
+ handledAt: exports_iso.datetime().optional(),
978
+ handledNote: string().optional()
979
+ });
980
+ SteerOutcomeSchema = _enum(["steered", "queued", "promoted"]);
981
+ OnUnsupportedSchema = _enum(["degrade", "fail"]).default("degrade");
982
+ SteerResultSchema = object({
983
+ outcome: SteerOutcomeSchema,
984
+ steeringMessageId: uuid().optional(),
985
+ promotedTaskId: uuid().optional(),
986
+ effectiveMode: SteerModeSchema,
987
+ degradedFrom: SteerModeSchema.optional()
988
+ });
989
+ PROVIDER_STEER_CAPABILITIES = {
990
+ pi: ["steer", "queue"],
991
+ "claude-managed": ["steer", "queue"],
992
+ devin: ["queue"],
993
+ opencode: ["queue"],
994
+ claude: ["queue"],
995
+ codex: []
996
+ };
954
997
  FollowUpConfigSchema = object({
955
998
  disabled: boolean().optional(),
956
999
  onCompleted: string().max(4000).optional(),
957
1000
  onFailed: string().max(4000).optional()
958
1001
  });
959
1002
  RoutingAffinitySchema = object({
960
- sourceAgentId: uuid().optional(),
1003
+ sourceAgentId: string().optional(),
961
1004
  role: string().max(100).optional(),
962
1005
  harnessProvider: ProviderNameSchema.optional(),
963
1006
  capabilities: array(string()).default([])
@@ -965,8 +1008,8 @@ var init_types = __esm(() => {
965
1008
  AgentTaskSchema = object({
966
1009
  id: uuid(),
967
1010
  key: AssetKeySchema,
968
- agentId: uuid().nullable(),
969
- creatorAgentId: uuid().optional(),
1011
+ agentId: string().nullable(),
1012
+ creatorAgentId: string().optional(),
970
1013
  task: string().min(1),
971
1014
  title: string().optional(),
972
1015
  status: AgentTaskStatusSchema,
@@ -975,7 +1018,7 @@ var init_types = __esm(() => {
975
1018
  tags: array(string()).default([]),
976
1019
  priority: number().int().min(0).max(100).default(50),
977
1020
  dependsOn: array(uuid()).default([]),
978
- offeredTo: uuid().optional(),
1021
+ offeredTo: string().optional(),
979
1022
  offeredAt: exports_iso.datetime().optional(),
980
1023
  acceptedAt: exports_iso.datetime().optional(),
981
1024
  rejectionReason: string().optional(),
@@ -1074,7 +1117,7 @@ var init_types = __esm(() => {
1074
1117
  TaskAttachmentSchema = object({
1075
1118
  id: uuid(),
1076
1119
  taskId: uuid(),
1077
- agentId: uuid().nullable(),
1120
+ agentId: string().nullable(),
1078
1121
  name: string(),
1079
1122
  kind: TaskAttachmentKindSchema,
1080
1123
  url: string().optional(),
@@ -1175,7 +1218,7 @@ var init_types = __esm(() => {
1175
1218
  })
1176
1219
  ]);
1177
1220
  AgentSchema = object({
1178
- id: uuid(),
1221
+ id: string(),
1179
1222
  name: string().min(1),
1180
1223
  isLead: boolean().default(false),
1181
1224
  status: AgentStatusSchema,
@@ -1251,12 +1294,12 @@ var init_types = __esm(() => {
1251
1294
  ]);
1252
1295
  ContextVersionSchema = object({
1253
1296
  id: uuid(),
1254
- agentId: uuid(),
1297
+ agentId: string(),
1255
1298
  field: VersionableFieldSchema,
1256
1299
  content: string(),
1257
1300
  version: number().int().min(1),
1258
1301
  changeSource: ChangeSourceSchema,
1259
- changedByAgentId: uuid().nullable(),
1302
+ changedByAgentId: string().nullable(),
1260
1303
  changeReason: string().nullable(),
1261
1304
  contentHash: string(),
1262
1305
  previousVersionId: uuid().nullable(),
@@ -1268,24 +1311,24 @@ var init_types = __esm(() => {
1268
1311
  name: string().min(1).max(100),
1269
1312
  description: string().max(500).optional(),
1270
1313
  type: ChannelTypeSchema.default("public"),
1271
- createdBy: uuid().optional(),
1272
- participants: array(uuid()).default([]),
1314
+ createdBy: string().optional(),
1315
+ participants: array(string()).default([]),
1273
1316
  createdAt: exports_iso.datetime()
1274
1317
  });
1275
1318
  ChannelMessageSchema = object({
1276
1319
  id: uuid(),
1277
1320
  channelId: uuid(),
1278
- agentId: uuid().nullable(),
1321
+ agentId: string().nullable(),
1279
1322
  agentName: string().optional(),
1280
1323
  content: string().min(1).max(4000),
1281
1324
  replyToId: uuid().optional(),
1282
- mentions: array(uuid()).default([]),
1325
+ mentions: array(string()).default([]),
1283
1326
  createdAt: exports_iso.datetime()
1284
1327
  });
1285
1328
  ServiceStatusSchema = _enum(["starting", "healthy", "unhealthy", "stopped"]);
1286
1329
  ServiceSchema = object({
1287
1330
  id: uuid(),
1288
- agentId: uuid(),
1331
+ agentId: string(),
1289
1332
  name: string().min(1).max(50),
1290
1333
  port: number().int().min(1).max(65535).default(3000),
1291
1334
  description: string().optional(),
@@ -1308,6 +1351,7 @@ var init_types = __esm(() => {
1308
1351
  "task_created",
1309
1352
  "task_status_change",
1310
1353
  "task_progress",
1354
+ "task_steering",
1311
1355
  "task_offered",
1312
1356
  "task_accepted",
1313
1357
  "task_rejected",
@@ -1357,7 +1401,7 @@ var init_types = __esm(() => {
1357
1401
  id: uuid(),
1358
1402
  sessionId: string(),
1359
1403
  taskId: uuid().optional(),
1360
- agentId: uuid(),
1404
+ agentId: string(),
1361
1405
  totalCostUsd: number().min(0),
1362
1406
  inputTokens: number().int().min(0).default(0),
1363
1407
  outputTokens: number().int().min(0).default(0),
@@ -1434,11 +1478,11 @@ var init_types = __esm(() => {
1434
1478
  taskType: string().max(50).optional(),
1435
1479
  tags: array(string()).default([]),
1436
1480
  priority: number().int().min(0).max(100).default(50),
1437
- targetAgentId: uuid().optional(),
1481
+ targetAgentId: string().optional(),
1438
1482
  enabled: boolean().default(true),
1439
1483
  lastRunAt: exports_iso.datetime().optional(),
1440
1484
  nextRunAt: exports_iso.datetime().optional(),
1441
- createdByAgentId: uuid().optional(),
1485
+ createdByAgentId: string().optional(),
1442
1486
  timezone: string().default("UTC"),
1443
1487
  consecutiveErrors: number().int().min(0).default(0),
1444
1488
  lastErrorAt: exports_iso.datetime().optional(),
@@ -1519,7 +1563,7 @@ var init_types = __esm(() => {
1519
1563
  ]);
1520
1564
  AgentMemorySchema = object({
1521
1565
  id: string().uuid(),
1522
- agentId: string().uuid().nullable(),
1566
+ agentId: string().nullable(),
1523
1567
  scope: AgentMemoryScopeSchema,
1524
1568
  key: string().nullable().optional(),
1525
1569
  name: string().min(1).max(500),
@@ -1542,7 +1586,7 @@ var init_types = __esm(() => {
1542
1586
  });
1543
1587
  ActiveSessionSchema = object({
1544
1588
  id: uuid(),
1545
- agentId: uuid(),
1589
+ agentId: string(),
1546
1590
  taskId: string().nullable(),
1547
1591
  triggerType: string(),
1548
1592
  inboxMessageId: string().nullable(),
@@ -1705,7 +1749,7 @@ var init_types = __esm(() => {
1705
1749
  triggerSchema: record(string(), unknown()).optional(),
1706
1750
  dir: string().min(1).startsWith("/").optional(),
1707
1751
  vcsRepo: string().min(1).optional(),
1708
- createdByAgentId: string().uuid().optional(),
1752
+ createdByAgentId: string().optional(),
1709
1753
  createdAt: string(),
1710
1754
  lastUpdatedAt: string(),
1711
1755
  createdBy: string().optional(),
@@ -1717,7 +1761,7 @@ var init_types = __esm(() => {
1717
1761
  workflowId: string().uuid(),
1718
1762
  version: number().int().min(1),
1719
1763
  snapshot: WorkflowSnapshotSchema,
1720
- changedByAgentId: string().uuid().optional(),
1764
+ changedByAgentId: string().optional(),
1721
1765
  createdAt: string()
1722
1766
  });
1723
1767
  PageContentTypeSchema = _enum(["text/html", "application/json"]);
@@ -2130,7 +2174,7 @@ var init_types = __esm(() => {
2130
2174
  ContextSnapshotSchema = object({
2131
2175
  id: uuid(),
2132
2176
  taskId: uuid(),
2133
- agentId: uuid(),
2177
+ agentId: string(),
2134
2178
  sessionId: string(),
2135
2179
  contextUsedTokens: number().int().min(0).optional(),
2136
2180
  contextTotalTokens: number().int().min(0).optional(),
@@ -3132,6 +3176,29 @@ The same applies to \`store-progress\` output — never include raw secret value
3132
3176
  variables: [],
3133
3177
  category: "system"
3134
3178
  });
3179
+ registerTemplate({
3180
+ eventType: "system.agent.steering",
3181
+ header: "",
3182
+ defaultBody: `
3183
+ #### Live Task Steering
3184
+
3185
+ You may receive steering messages while this task is running. Each one arrives wrapped in a \`[steering <id>]\` marker that carries its steering message ID. Incorporate the message into your current work, then call \`accept-steer\` with that ID. Do not acknowledge a message before acting on it.
3186
+ `,
3187
+ variables: [],
3188
+ category: "system"
3189
+ });
3190
+ registerTemplate({
3191
+ eventType: "system.agent.steering.delivery",
3192
+ header: "",
3193
+ defaultBody: `[steering {{steeringMessageId}}] {{body}}
3194
+
3195
+ (Once you have acted on this, call \`accept-steer\` with steeringMessageId "{{steeringMessageId}}".)`,
3196
+ variables: [
3197
+ { name: "steeringMessageId", description: "ID of the steering message being delivered" },
3198
+ { name: "body", description: "The steering message text as the sender wrote it" }
3199
+ ],
3200
+ category: "system"
3201
+ });
3135
3202
  registerTemplate({
3136
3203
  eventType: "system.agent.worker.slack",
3137
3204
  header: "",
@@ -4128,6 +4195,155 @@ var init_seed_prompt_templates = __esm(() => {
4128
4195
  init_templates2();
4129
4196
  });
4130
4197
 
4198
+ // src/utils/steering-enabled.ts
4199
+ function isSteeringEnabled(env = process.env) {
4200
+ const enabled = env.STEERING_ENABLED;
4201
+ return enabled === "true" || enabled === "1";
4202
+ }
4203
+ var init_steering_enabled = () => {};
4204
+
4205
+ // src/be/steering.ts
4206
+ function isSteeringEnabled2() {
4207
+ return isSteeringEnabled();
4208
+ }
4209
+ function providerForTask(task) {
4210
+ const agent = task.agentId ? getAgentById(task.agentId) : null;
4211
+ return agent?.harnessProvider ?? agent?.provider ?? task.provider ?? "claude";
4212
+ }
4213
+ function getTaskSteeringFields(task) {
4214
+ const agent = task.agentId ? getAgentById(task.agentId) : null;
4215
+ const provider = agent?.harnessProvider ?? agent?.provider ?? task.provider;
4216
+ return {
4217
+ isLeadTask: agent?.isLead ?? false,
4218
+ supportedSteerModes: provider ? PROVIDER_STEER_CAPABILITIES[provider] : []
4219
+ };
4220
+ }
4221
+ function promoteSteeringToTask(task, message) {
4222
+ return createTaskExtended(message.body, {
4223
+ agentId: task.agentId,
4224
+ creatorAgentId: message.createdByAgentId,
4225
+ source: message.source === "script" ? "api" : message.source,
4226
+ taskType: "follow-up",
4227
+ parentTaskId: task.id,
4228
+ requestedByUserId: message.createdByUserId ?? task.requestedByUserId,
4229
+ bypassTrackerContextDedup: true
4230
+ });
4231
+ }
4232
+ function promotePendingSteeringForTask(taskId, reason) {
4233
+ if (!reason.trim()) {
4234
+ throw new SteeringRequestError("Promotion reason must not be empty", 400);
4235
+ }
4236
+ const results = [];
4237
+ for (const message of getPendingSteeringForTask(taskId)) {
4238
+ try {
4239
+ results.push(markSteeringUndeliverable(message.id, reason));
4240
+ } catch (error) {
4241
+ console.error(`[steering] Failed to promote pending message ${message.id} for task ${taskId}:`, scrubSecrets(error instanceof Error ? error.message : String(error)));
4242
+ }
4243
+ }
4244
+ return results;
4245
+ }
4246
+ function markSteeringUndeliverable(id, reason) {
4247
+ if (!reason.trim()) {
4248
+ throw new SteeringRequestError("Undeliverable reason must not be empty", 400);
4249
+ }
4250
+ return getDb().transaction(() => {
4251
+ const message = getSteeringMessageById(id);
4252
+ if (!message) {
4253
+ throw new SteeringRequestError("Steering message not found", 404);
4254
+ }
4255
+ if (message.status !== "pending") {
4256
+ return {
4257
+ message,
4258
+ promotedTaskId: message.promotedTaskId
4259
+ };
4260
+ }
4261
+ const task = getTaskById(message.taskId);
4262
+ if (!task) {
4263
+ throw new SteeringRequestError("Task not found", 404);
4264
+ }
4265
+ const promotedTask = promoteSteeringToTask(task, message);
4266
+ const promotedMessage = markSteeringPromoted(message.id, promotedTask.id);
4267
+ if (!promotedMessage) {
4268
+ throw new SteeringRequestError("Failed to promote steering message", 500);
4269
+ }
4270
+ return {
4271
+ message: promotedMessage,
4272
+ promotedTaskId: promotedTask.id
4273
+ };
4274
+ })();
4275
+ }
4276
+ function requestSteering(args) {
4277
+ if (!isSteeringEnabled2()) {
4278
+ throw new SteeringRequestError("Steering is disabled on this server (set STEERING_ENABLED=true to enable)", 403);
4279
+ }
4280
+ const task = getTaskById(args.taskId);
4281
+ if (!task) {
4282
+ throw new SteeringRequestError("Task not found", 404);
4283
+ }
4284
+ if (!args.message.trim()) {
4285
+ throw new SteeringRequestError("Steering message must not be empty", 400);
4286
+ }
4287
+ const requestedMode = args.mode ?? "queue";
4288
+ const onUnsupported = args.onUnsupported ?? "degrade";
4289
+ const provider = providerForTask(task);
4290
+ const supportedModes = PROVIDER_STEER_CAPABILITIES[provider];
4291
+ if (onUnsupported === "fail" && !supportedModes.includes(requestedMode)) {
4292
+ const supported = supportedModes.length > 0 ? supportedModes.join(", ") : "none";
4293
+ throw new SteeringRequestError(`Harness provider '${provider}' does not support steering mode '${requestedMode}' (supported modes: ${supported})`, 422);
4294
+ }
4295
+ const activeTask = task.status === "paused" ? resumeTask(task.id) : task;
4296
+ if (!activeTask) {
4297
+ throw new SteeringRequestError("Failed to resume paused task", 500);
4298
+ }
4299
+ const body = scrubSecrets(args.message);
4300
+ const preStart = activeTask.status === "unassigned" || activeTask.status === "offered" || activeTask.status === "pending";
4301
+ const degradedFrom = requestedMode === "steer" && supportedModes.length > 0 && (!supportedModes.includes("steer") || preStart) ? requestedMode : undefined;
4302
+ const effectiveMode = degradedFrom ? "queue" : requestedMode;
4303
+ const steeringMessage = createSteeringMessage({
4304
+ taskId: activeTask.id,
4305
+ body,
4306
+ mode: requestedMode,
4307
+ source: args.source ?? "api",
4308
+ createdByKind: args.createdByKind ?? "system",
4309
+ createdByUserId: args.createdByUserId,
4310
+ createdByAgentId: args.createdByAgentId
4311
+ });
4312
+ const canReachLiveSession = supportedModes.length > 0 && (activeTask.status === "in_progress" || preStart);
4313
+ if (!canReachLiveSession) {
4314
+ const promotedTask = promoteSteeringToTask(activeTask, steeringMessage);
4315
+ markSteeringPromoted(steeringMessage.id, promotedTask.id);
4316
+ return {
4317
+ outcome: "promoted",
4318
+ steeringMessageId: steeringMessage.id,
4319
+ promotedTaskId: promotedTask.id,
4320
+ effectiveMode,
4321
+ degradedFrom
4322
+ };
4323
+ }
4324
+ return {
4325
+ outcome: effectiveMode === "steer" ? "steered" : "queued",
4326
+ steeringMessageId: steeringMessage.id,
4327
+ effectiveMode,
4328
+ degradedFrom
4329
+ };
4330
+ }
4331
+ var SteeringRequestError;
4332
+ var init_steering = __esm(() => {
4333
+ init_types();
4334
+ init_secret_scrubber();
4335
+ init_steering_enabled();
4336
+ init_db();
4337
+ SteeringRequestError = class SteeringRequestError extends Error {
4338
+ statusCode;
4339
+ constructor(message, statusCode) {
4340
+ super(message);
4341
+ this.statusCode = statusCode;
4342
+ this.name = "SteeringRequestError";
4343
+ }
4344
+ };
4345
+ });
4346
+
4131
4347
  // src/be/swarm-config-guard.ts
4132
4348
  function isReservedConfigKey(key) {
4133
4349
  return RESERVED_KEYS.has(key.toUpperCase());
@@ -4504,6 +4720,9 @@ __export(exports_db, {
4504
4720
  maskSecrets: () => maskSecrets,
4505
4721
  markTasksNotified: () => markTasksNotified,
4506
4722
  markTaskSlackReplySent: () => markTaskSlackReplySent,
4723
+ markSteeringPromoted: () => markSteeringPromoted,
4724
+ markSteeringHandled: () => markSteeringHandled,
4725
+ markSteeringDelivered: () => markSteeringDelivered,
4507
4726
  markKeyRateLimited: () => markKeyRateLimited,
4508
4727
  markInboxMessageResponded: () => markInboxMessageResponded,
4509
4728
  markInboxMessageRead: () => markInboxMessageRead,
@@ -4543,6 +4762,7 @@ __export(exports_db, {
4543
4762
  incrementEmptyPollCount: () => incrementEmptyPollCount,
4544
4763
  incrKv: () => incrKv,
4545
4764
  heartbeatActiveSession: () => heartbeatActiveSession,
4765
+ hasPendingSteering: () => hasPendingSteering,
4546
4766
  hasNonTerminalResumeChild: () => hasNonTerminalResumeChild,
4547
4767
  hasNonTerminalRerouteDecisionChild: () => hasNonTerminalRerouteDecisionChild,
4548
4768
  hasFirstCompletedTask: () => hasFirstCompletedTask,
@@ -4585,6 +4805,8 @@ __export(exports_db, {
4585
4805
  getStuckApprovalRuns: () => getStuckApprovalRuns,
4586
4806
  getStepCountForNode: () => getStepCountForNode,
4587
4807
  getStepByIdempotencyKey: () => getStepByIdempotencyKey,
4808
+ getSteeringMessagesForTask: () => getSteeringMessagesForTask,
4809
+ getSteeringMessageById: () => getSteeringMessageById,
4588
4810
  getStalledInProgressTasks: () => getStalledInProgressTasks,
4589
4811
  getStaleUnassignedAffinityTasks: () => getStaleUnassignedAffinityTasks,
4590
4812
  getStalePinnedResumes: () => getStalePinnedResumes,
@@ -4624,6 +4846,8 @@ __export(exports_db, {
4624
4846
  getPricingRows: () => getPricingRows,
4625
4847
  getPendingWaitsByEvent: () => getPendingWaitsByEvent,
4626
4848
  getPendingTaskForAgent: () => getPendingTaskForAgent,
4849
+ getPendingSteeringForTask: () => getPendingSteeringForTask,
4850
+ getPendingSteeringForAgent: () => getPendingSteeringForAgent,
4627
4851
  getPendingEventWaitNames: () => getPendingEventWaitNames,
4628
4852
  getPausedTasksForAgent: () => getPausedTasksForAgent,
4629
4853
  getPageVersions: () => getPageVersions,
@@ -4650,6 +4874,7 @@ __export(exports_db, {
4650
4874
  getLatestTaskByContextKey: () => getLatestTaskByContextKey,
4651
4875
  getLatestStepForNode: () => getLatestStepForNode,
4652
4876
  getLatestPageBySlug: () => getLatestPageBySlug,
4877
+ getLatestLeadTaskInThread: () => getLatestLeadTaskInThread,
4653
4878
  getLatestContextVersion: () => getLatestContextVersion,
4654
4879
  getLatestActiveTaskInThread: () => getLatestActiveTaskInThread,
4655
4880
  getLastSuccessfulRun: () => getLastSuccessfulRun,
@@ -4766,6 +4991,7 @@ __export(exports_db, {
4766
4991
  createTaskExtended: () => createTaskExtended,
4767
4992
  createTask: () => createTask,
4768
4993
  createSwarmRepo: () => createSwarmRepo,
4994
+ createSteeringMessage: () => createSteeringMessage,
4769
4995
  createSkill: () => createSkill,
4770
4996
  createSessionLogs: () => createSessionLogs,
4771
4997
  createSessionCost: () => createSessionCost,
@@ -4809,6 +5035,7 @@ __export(exports_db, {
4809
5035
  checkDependencies: () => checkDependencies,
4810
5036
  cascadeFailDependents: () => cascadeFailDependents,
4811
5037
  cancelTask: () => cancelTask,
5038
+ cancelPendingSteeringForTask: () => cancelPendingSteeringForTask,
4812
5039
  buildRoutingAffinityFromAgent: () => buildRoutingAffinityFromAgent,
4813
5040
  backfillSupersedeTaskResumeTaskId: () => backfillSupersedeTaskResumeTaskId,
4814
5041
  autoEncryptLegacyPlaintextSecrets: () => autoEncryptLegacyPlaintextSecrets,
@@ -5914,6 +6141,18 @@ function getLatestActiveTaskInThread(channelId, threadTs) {
5914
6141
  LIMIT 1`).get(channelId, threadTs);
5915
6142
  return row ? rowToAgentTask(row) : null;
5916
6143
  }
6144
+ function getLatestLeadTaskInThread(channelId, threadTs) {
6145
+ const row = getDb().prepare(`SELECT t.*
6146
+ FROM agent_tasks t
6147
+ JOIN agents a ON a.id = t.agentId
6148
+ WHERE t.source = 'slack'
6149
+ AND t.slackChannelId = ?
6150
+ AND t.slackThreadTs = ?
6151
+ AND a.isLead = 1
6152
+ ORDER BY t.createdAt DESC, t.rowid DESC
6153
+ LIMIT 1`).get(channelId, threadTs);
6154
+ return row ? rowToAgentTask(row) : null;
6155
+ }
5917
6156
  function getMostRecentTaskInThread(channelId, threadTs) {
5918
6157
  const row = getDb().prepare(`SELECT * FROM agent_tasks
5919
6158
  WHERE slackChannelId = ?
@@ -5997,6 +6236,11 @@ function completeTask(id, output) {
5997
6236
  });
5998
6237
  });
5999
6238
  } catch {}
6239
+ try {
6240
+ promotePendingSteeringForTask(id, "Task completed before steering was delivered");
6241
+ } catch (error) {
6242
+ console.error("[completeTask] pending steering promotion error:", scrubSecrets(error instanceof Error ? error.message : String(error)));
6243
+ }
6000
6244
  }
6001
6245
  return row ? rowToAgentTask(row) : null;
6002
6246
  }
@@ -6039,6 +6283,11 @@ function failTask(id, reason) {
6039
6283
  });
6040
6284
  });
6041
6285
  } catch {}
6286
+ try {
6287
+ promotePendingSteeringForTask(id, "Task failed before steering was delivered");
6288
+ } catch (error) {
6289
+ console.error("[failTask] pending steering promotion error:", scrubSecrets(error instanceof Error ? error.message : String(error)));
6290
+ }
6042
6291
  try {
6043
6292
  cascadeFailDependents(id, "failed");
6044
6293
  } catch (err) {
@@ -6085,6 +6334,11 @@ function cancelTask(id, reason) {
6085
6334
  });
6086
6335
  });
6087
6336
  } catch {}
6337
+ try {
6338
+ promotePendingSteeringForTask(id, "Task was cancelled before steering was delivered");
6339
+ } catch (error) {
6340
+ console.error("[cancelTask] pending steering promotion error:", scrubSecrets(error instanceof Error ? error.message : String(error)));
6341
+ }
6088
6342
  try {
6089
6343
  cascadeFailDependents(id, "cancelled");
6090
6344
  } catch (err) {
@@ -6684,6 +6938,123 @@ function replaceTaskAttachment(id, input) {
6684
6938
  function getTaskAttachments(taskId) {
6685
6939
  return getDb().prepare("SELECT * FROM task_attachments WHERE task_id = ? ORDER BY created_at ASC, rowid ASC").all(taskId).map(rowToTaskAttachment);
6686
6940
  }
6941
+ function rowToSteeringMessage(row) {
6942
+ return {
6943
+ id: row.id,
6944
+ taskId: row.task_id,
6945
+ body: row.body,
6946
+ mode: row.mode,
6947
+ status: row.status,
6948
+ deliveredMode: row.delivered_mode ?? undefined,
6949
+ source: row.source,
6950
+ createdByKind: row.created_by_kind,
6951
+ createdByUserId: row.created_by_user_id ?? undefined,
6952
+ createdByAgentId: row.created_by_agent_id ?? undefined,
6953
+ promotedTaskId: row.promoted_task_id ?? undefined,
6954
+ createdAt: row.created_at,
6955
+ deliveredAt: row.delivered_at ?? undefined,
6956
+ handledAt: row.handled_at ?? undefined,
6957
+ handledNote: row.handled_note ?? undefined
6958
+ };
6959
+ }
6960
+ function createSteeringMessage(args) {
6961
+ const id = crypto.randomUUID();
6962
+ const row = getDb().prepare(`INSERT INTO task_steering_messages
6963
+ (id, task_id, body, mode, source, created_by_kind,
6964
+ created_by_user_id, created_by_agent_id)
6965
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
6966
+ RETURNING *`).get(id, args.taskId, args.body, args.mode, args.source, args.createdByKind, args.createdByUserId ?? null, args.createdByAgentId ?? null);
6967
+ if (!row)
6968
+ throw new Error("Failed to create steering message");
6969
+ try {
6970
+ createLogEntry({
6971
+ eventType: "task_steering",
6972
+ taskId: args.taskId,
6973
+ agentId: args.createdByAgentId,
6974
+ newValue: "pending",
6975
+ metadata: {
6976
+ steeringMessageId: id,
6977
+ mode: args.mode,
6978
+ source: args.source
6979
+ }
6980
+ });
6981
+ } catch {}
6982
+ return rowToSteeringMessage(row);
6983
+ }
6984
+ function getSteeringMessagesForTask(taskId, opts) {
6985
+ const rows = opts?.status ? getDb().prepare(`SELECT * FROM task_steering_messages
6986
+ WHERE task_id = ? AND status = ?
6987
+ ORDER BY created_at ASC, rowid ASC`).all(taskId, opts.status) : getDb().prepare(`SELECT * FROM task_steering_messages
6988
+ WHERE task_id = ?
6989
+ ORDER BY created_at ASC, rowid ASC`).all(taskId);
6990
+ return rows.map(rowToSteeringMessage);
6991
+ }
6992
+ function getSteeringMessageById(id) {
6993
+ const row = getDb().prepare(`SELECT * FROM task_steering_messages
6994
+ WHERE id = ?`).get(id);
6995
+ return row ? rowToSteeringMessage(row) : null;
6996
+ }
6997
+ function getPendingSteeringForTask(taskId) {
6998
+ return getSteeringMessagesForTask(taskId, { status: "pending" });
6999
+ }
7000
+ function getPendingSteeringForAgent(agentId) {
7001
+ return getDb().prepare(`SELECT m.*
7002
+ FROM task_steering_messages m
7003
+ JOIN agent_tasks t ON t.id = m.task_id
7004
+ WHERE t.agentId = ? AND m.status = 'pending'
7005
+ ORDER BY m.created_at ASC, m.rowid ASC`).all(agentId).map(rowToSteeringMessage);
7006
+ }
7007
+ function markSteeringDelivered(id, deliveredMode) {
7008
+ const row = getDb().prepare(`UPDATE task_steering_messages
7009
+ SET status = 'delivered',
7010
+ delivered_mode = ?,
7011
+ delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
7012
+ WHERE id = ? AND status = 'pending'
7013
+ RETURNING *`).get(deliveredMode, id);
7014
+ if (row) {
7015
+ try {
7016
+ createLogEntry({
7017
+ eventType: "task_steering",
7018
+ taskId: row.task_id,
7019
+ newValue: "delivered",
7020
+ metadata: {
7021
+ steeringMessageId: id,
7022
+ requestedMode: row.mode,
7023
+ deliveredMode
7024
+ }
7025
+ });
7026
+ } catch {}
7027
+ }
7028
+ return row ? rowToSteeringMessage(row) : null;
7029
+ }
7030
+ function markSteeringHandled(id, note) {
7031
+ const row = getDb().prepare(`UPDATE task_steering_messages
7032
+ SET status = 'handled',
7033
+ handled_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
7034
+ handled_note = ?
7035
+ WHERE id = ? AND status = 'delivered'
7036
+ RETURNING *`).get(note ?? null, id);
7037
+ return row ? rowToSteeringMessage(row) : null;
7038
+ }
7039
+ function markSteeringPromoted(id, promotedTaskId) {
7040
+ const row = getDb().prepare(`UPDATE task_steering_messages
7041
+ SET status = 'promoted',
7042
+ promoted_task_id = ?
7043
+ WHERE id = ? AND status = 'pending'
7044
+ RETURNING *`).get(promotedTaskId, id);
7045
+ return row ? rowToSteeringMessage(row) : null;
7046
+ }
7047
+ function cancelPendingSteeringForTask(taskId) {
7048
+ return getDb().run(`UPDATE task_steering_messages
7049
+ SET status = 'cancelled'
7050
+ WHERE task_id = ? AND status = 'pending'`, [taskId]).changes;
7051
+ }
7052
+ function hasPendingSteering(taskId) {
7053
+ return getDb().prepare(`SELECT 1 AS present
7054
+ FROM task_steering_messages
7055
+ WHERE task_id = ? AND status = 'pending'
7056
+ LIMIT 1`).get(taskId) !== null;
7057
+ }
6687
7058
  function getAgentWithTasks(id) {
6688
7059
  const txn = getDb().transaction(() => {
6689
7060
  const agent = getAgentById(id);
@@ -6841,7 +7212,7 @@ function createTaskExtended(task, options) {
6841
7212
  }
6842
7213
  }
6843
7214
  }
6844
- const existingTrackerWork = findExistingLinearTrackerContextWork(options?.contextKey);
7215
+ const existingTrackerWork = options?.bypassTrackerContextDedup ? null : findExistingLinearTrackerContextWork(options?.contextKey);
6845
7216
  if (existingTrackerWork) {
6846
7217
  console.log(`[task-dedup] Skipping Linear tracker task creation for ${options?.contextKey}: ${existingTrackerWork.reason} ${existingTrackerWork.task.id.slice(0, 8)} already exists`);
6847
7218
  return existingTrackerWork.task;
@@ -11465,6 +11836,7 @@ var init_db = __esm(() => {
11465
11836
  init_runner();
11466
11837
  init_oauth_encryption_backfill();
11467
11838
  init_seed_prompt_templates();
11839
+ init_steering();
11468
11840
  init_swarm_config_guard();
11469
11841
  init_task_lifecycle_events();
11470
11842
  init_defaults();
@@ -11561,4 +11933,4 @@ var init_db = __esm(() => {
11561
11933
  };
11562
11934
  });
11563
11935
 
11564
- export { normalizeAssetKey, parseAssetKey, canWriteAssetKey, init_key, interpolate, deepInterpolate, init_template, registerTemplate, getTemplateDefinition, getAllTemplateDefinitions, init_registry, configureHttpResolver, resolveTemplate, resolveTemplateAsync, init_resolver, slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, initTelemetry, telemetry, init_telemetry, AssetKeySchema, AssetEntityTypeSchema, ModelTierSchema, ReasoningEffortSchema, splitLegacyModelAlias, resolveTaskModelSelection, AgentTaskStatusSchema, isTerminalTaskStatus, AgentTaskSourceSchema, ProviderNameSchema, FollowUpConfigSchema, AgentTaskSchema, AttachmentInputSchema, TaskAttachmentSchema, InboxItemTypeSchema, InboxItemStatusSchema, FavoriteItemTypeSchema, TaskTemplateKindSchema, AgentAvatarSchema, AgentSchema, AgentLatestModelSchema, AgentCredStatusSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, ResumeReasonSchema, AgentLogSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, ScheduledTaskTargetTypeSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, PageContentTypeSchema, PageAuthModeSchema, MetricDefinitionSchema, MetricVersionSchema, WorkflowRunStatusSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptApiAuthModeSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, KvValueTypeSchema, KvNamespaceSchema, KvKeySchema, KvEntrySchema, init_types, setRequestAuth, getRequestAuth, getCurrentRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, init_session_templates, init_templates, init_templates2 as init_templates1, isReservedConfigKey, reservedKeyError, validateConfigValue, init_swarm_config_guard, onTaskStarted, init_task_lifecycle_events, generateDefaultClaudeMd, generateDefaultSoulMd, generateDefaultIdentityMd, generateDefaultToolsMd, init_defaults, isSqliteVecAvailable, initDb, getDb, closeDb, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, agentQueries, updateAgentCredentialState, 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, taskQueries, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, getTaskById, markTaskSlackReplySent, setSlackMessageTracking, getChildTasks, hasNonTerminalResumeChild, hasNonTerminalRerouteDecisionChild, updateTaskClaudeSessionId, updateTaskTitle, updateTaskVcs, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, completeTask, failTask, cancelTask, supersedeTask, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, insertTaskAttachment, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, getAgentWithTasks, getAllAgentsWithTasks, logQueries, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, releaseStaleReviewingTasks, 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, sessionLogQueries, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, getSessionCostSummary, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, 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, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, 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, 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, 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, upsertKv, deleteKv, KvTypeCollisionError, incrKv, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };
11936
+ export { normalizeAssetKey, parseAssetKey, canWriteAssetKey, init_key, interpolate, deepInterpolate, init_template, registerTemplate, getTemplateDefinition, getAllTemplateDefinitions, init_registry, configureHttpResolver, resolveTemplate, resolveTemplateAsync, init_resolver, slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, initTelemetry, telemetry, init_telemetry, AssetKeySchema, AssetEntityTypeSchema, ModelTierSchema, ReasoningEffortSchema, splitLegacyModelAlias, resolveTaskModelSelection, AgentTaskStatusSchema, isTerminalTaskStatus, AgentTaskSourceSchema, ProviderNameSchema, SteerModeSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, FollowUpConfigSchema, AgentTaskSchema, AttachmentInputSchema, TaskAttachmentSchema, InboxItemTypeSchema, InboxItemStatusSchema, FavoriteItemTypeSchema, TaskTemplateKindSchema, AgentAvatarSchema, AgentSchema, AgentLatestModelSchema, AgentCredStatusSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, ResumeReasonSchema, AgentLogSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, ScheduledTaskTargetTypeSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, PageContentTypeSchema, PageAuthModeSchema, MetricDefinitionSchema, MetricVersionSchema, WorkflowRunStatusSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptApiAuthModeSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, KvValueTypeSchema, KvNamespaceSchema, KvKeySchema, KvEntrySchema, init_types, setRequestAuth, getRequestAuth, getCurrentRequestAuth, init_request_auth_context, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, normalizeDate, normalizeDateRequired, init_date_utils, init_session_templates, init_templates, init_templates2 as init_templates1, isSteeringEnabled, init_steering_enabled, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled1, getTaskSteeringFields, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, isReservedConfigKey, reservedKeyError, validateConfigValue, init_swarm_config_guard, onTaskStarted, init_task_lifecycle_events, generateDefaultClaudeMd, generateDefaultSoulMd, generateDefaultIdentityMd, generateDefaultToolsMd, init_defaults, isSqliteVecAvailable, initDb, getDb, closeDb, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, agentQueries, updateAgentCredentialState, 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, taskQueries, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, getTaskById, markTaskSlackReplySent, setSlackMessageTracking, getChildTasks, hasNonTerminalResumeChild, hasNonTerminalRerouteDecisionChild, updateTaskClaudeSessionId, updateTaskTitle, updateTaskVcs, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getInProgressTasksByContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, completeTask, failTask, cancelTask, supersedeTask, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, insertTaskAttachment, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, logQueries, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, releaseStaleReviewingTasks, 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, sessionLogQueries, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, getSessionCostSummary, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, 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, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, 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, 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, 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, upsertKv, deleteKv, KvTypeCollisionError, incrKv, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db };