@desplega.ai/agent-swarm 1.145.0 → 1.147.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 (221) hide show
  1. package/README.md +2 -1
  2. package/dist/{acp-adapter-580t41c0.js → acp-adapter-9n319wqc.js} +61 -6
  3. package/dist/{actions-m662tjng.js → actions-2vxqvpr9.js} +9 -8
  4. package/dist/{app-zb3rndm8.js → app-w066xfy0.js} +6 -5
  5. package/dist/assistant-kt31dj2h.js +236 -0
  6. package/dist/{boot-reembed-072x00vn.js → boot-reembed-az5rassp.js} +7 -6
  7. package/dist/{boot-reembed-65zz2smt.js → boot-reembed-j3mm3rfz.js} +8 -7
  8. package/dist/{boot-scrub-logs-yz0ams04.js → boot-scrub-logs-b6h54817.js} +4 -4
  9. package/dist/{claude-adapter-paj270y2.js → claude-adapter-w1z04ann.js} +8 -6
  10. package/dist/{claude-managed-setup-w619jncn.js → claude-managed-setup-f5pmsyrp.js} +24 -3
  11. package/dist/{claude-sdk-session-swt80j9z.js → claude-sdk-session-f0cc1kec.js} +8 -6
  12. package/dist/{cli-dt553ktb.js → cli-0b6y7kxm.js} +1 -1
  13. package/dist/{cli-bxdhw615.js → cli-12fz972k.js} +4 -4
  14. package/dist/{cli-s2f20r5w.js → cli-1th1728g.js} +2 -2
  15. package/dist/{cli-rs6ec3b9.js → cli-3tgwnf43.js} +3 -3
  16. package/dist/{cli-gxnzc6wh.js → cli-4nr988h6.js} +1 -1
  17. package/dist/{cli-axs8e6d4.js → cli-53s590z8.js} +1 -1
  18. package/dist/{cli-ygbjp3z8.js → cli-54wwve05.js} +5 -4
  19. package/dist/{cli-v0asr5yv.js → cli-719k9j2c.js} +2 -2
  20. package/dist/{cli-anktweqr.js → cli-89xfd7f9.js} +21 -47
  21. package/dist/{cli-q34a0e10.js → cli-8v0g1yc8.js} +1 -1
  22. package/dist/cli-9d8ntetj.js +42 -0
  23. package/dist/{cli-z9fprcrf.js → cli-atcve9y8.js} +881 -738
  24. package/dist/{cli-jmb7g47h.js → cli-b5bq9crk.js} +14 -31
  25. package/dist/cli-d8brzxjb.js +190 -0
  26. package/dist/{cli-gzky0gkr.js → cli-de14znh8.js} +2 -2
  27. package/dist/{cli-xytwff7f.js → cli-dttph1bw.js} +2 -2
  28. package/dist/cli-ep19k3mb.js +19 -0
  29. package/dist/{cli-m1xa8be7.js → cli-f146mn5s.js} +7 -50
  30. package/dist/{cli-1fj0chdk.js → cli-f7dsy61y.js} +5 -3
  31. package/dist/{cli-f567d5c1.js → cli-ftht3zzj.js} +2782 -2589
  32. package/dist/{cli-a0g1gbt5.js → cli-hbv0kq6w.js} +2 -2
  33. package/dist/{cli-fhsz3twr.js → cli-jsp14b6c.js} +171 -1
  34. package/dist/{cli-7fnkj1hj.js → cli-kpv03zhj.js} +21 -17
  35. package/dist/{cli-m4j6trn4.js → cli-m8yrsg97.js} +2 -2
  36. package/dist/cli-m9sxbkhm.js +779 -0
  37. package/dist/cli-mmemxxdc.js +823 -0
  38. package/dist/{cli-tqtvj5pt.js → cli-n8508nre.js} +1 -1
  39. package/dist/{cli-z96t0thj.js → cli-p1d5b073.js} +37 -2
  40. package/dist/{cli-gh8y8f36.js → cli-rw51bq3j.js} +13 -10
  41. package/dist/{cli-59ej1c07.js → cli-smby5m17.js} +7 -6
  42. package/dist/{cli-65vqzz3v.js → cli-tzvk9haz.js} +94 -372
  43. package/dist/{cli-dc9k2ba9.js → cli-w9kb3bk1.js} +1 -1
  44. package/dist/{cli-kpev657q.js → cli-y6b6fb76.js} +25 -3
  45. package/dist/{cli-123q2get.js → cli-yz3djrm0.js} +9 -9
  46. package/dist/{cli-wvp6bvy4.js → cli-zhjmqxzh.js} +1 -1
  47. package/dist/cli.js +13 -13
  48. package/dist/{codex-adapter-k98vaw2r.js → codex-adapter-zw4dwsx7.js} +2 -2
  49. package/dist/{codex-hook-9pf19cks.js → codex-hook-bw8p5nh4.js} +2 -2
  50. package/dist/{codex-session-runner-tngtphx7.js → codex-session-runner-k981s65v.js} +2 -2
  51. package/dist/{commands-y8nbr3fv.js → commands-sykrxx7e.js} +4 -4
  52. package/dist/{db-30p4h2t1.js → db-sfbsc8wt.js} +6 -4
  53. package/dist/handlers-0aspcejm.js +603 -0
  54. package/dist/{hook-dcw4jfbj.js → hook-4nvqj2sb.js} +7 -5
  55. package/dist/{hook-21jexvfx.js → hook-hxccs7m5.js} +24 -49
  56. package/dist/{http-r4kq5g8d.js → http-y06z517d.js} +230 -94
  57. package/dist/{index-q3qja6ta.js → index-hssww7kj.js} +15 -14
  58. package/dist/{index-gay66b9w.js → index-k8znfx0z.js} +13 -12
  59. package/dist/{index-53zyht4z.js → index-tce1rss4.js} +371 -110
  60. package/dist/{index-nqvf26za.js → index-x5j894zf.js} +14 -13
  61. package/dist/{keepalive-xs8fa55y.js → keepalive-w733ax66.js} +6 -6
  62. package/dist/{lead-d9m2t4s0.js → lead-75bjqa9d.js} +29 -27
  63. package/dist/{maintenance-3zh82g6z.js → maintenance-w4f1zjck.js} +8 -7
  64. package/dist/{oauth-refresh-sweep-03snsye5.js → oauth-refresh-sweep-wdetky26.js} +5 -5
  65. package/dist/{onboard-0cg1925x.js → onboard-bb5net8s.js} +2 -2
  66. package/dist/{otel-impl-0ab95z27.js → otel-impl-0w7c14ap.js} +1 -1
  67. package/dist/{pi-mono-adapter-dtkz4e7j.js → pi-mono-adapter-2has4gnp.js} +12 -2
  68. package/dist/{pricing-refresh-e5jhzz4j.js → pricing-refresh-9nzsrgcq.js} +6 -6
  69. package/dist/{rbac-roles-p1mf40z3.js → rbac-roles-r3hqjp09.js} +5 -5
  70. package/dist/{rbac-roles-2w3cmrkc.js → rbac-roles-z1jrffbt.js} +4 -4
  71. package/dist/{registry-9kdck5ye.js → registry-v5wytg0s.js} +1 -2
  72. package/dist/{render-v2-xhawry3k.js → render-v2-vbr89fnb.js} +6 -5
  73. package/dist/{seed-pricing-t223sw91.js → seed-pricing-g62hy1pk.js} +7 -5
  74. package/dist/{setup-zcs0rce7.js → setup-gnfqnptp.js} +2 -2
  75. package/dist/{worker-qnp2ka62.js → worker-kznxp4qm.js} +29 -27
  76. package/openapi.json +263 -12
  77. package/package.json +1 -1
  78. package/plugin/commands/start-worker.md +4 -9
  79. package/plugin/pi-skills/start-worker/SKILL.md +4 -9
  80. package/src/be/db/agents.ts +556 -0
  81. package/src/be/db/context-versions.ts +117 -0
  82. package/src/be/db/runtime.ts +406 -0
  83. package/src/be/db/tasks/read.ts +1167 -0
  84. package/src/be/db/tasks/write.ts +953 -0
  85. package/src/be/db.ts +584 -3429
  86. package/src/be/migrations/147_scheduled_tasks_parent_task.sql +7 -0
  87. package/src/be/migrations/148_pages_svg.sql +123 -0
  88. package/src/be/migrations/149_session_tokens.sql +24 -0
  89. package/src/be/scripts/typecheck.ts +1 -0
  90. package/src/be/seed-pricing.ts +13 -8
  91. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  92. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  93. package/src/be/seed-scripts/catalog/star-history-refresh.ts +101 -0
  94. package/src/be/seed-scripts/catalog/star-history-renderer.ts +119 -0
  95. package/src/be/seed-scripts/index.ts +17 -0
  96. package/src/be/seed-skills/index.ts +14 -0
  97. package/src/be/swarm-config-guard.ts +5 -2
  98. package/src/be/task-attachment-store.ts +70 -0
  99. package/src/be/users.ts +77 -0
  100. package/src/commands/attachments-section.ts +37 -0
  101. package/src/commands/claude-managed-setup.ts +45 -3
  102. package/src/commands/claude-md-session.ts +408 -0
  103. package/src/commands/context-preamble.ts +15 -3
  104. package/src/commands/profile-sync.ts +205 -5
  105. package/src/commands/provider-credentials.ts +60 -27
  106. package/src/commands/runner.ts +63 -58
  107. package/src/commands/templates.ts +25 -2
  108. package/src/hooks/hook.ts +26 -67
  109. package/src/http/agents.ts +40 -1
  110. package/src/http/auth.ts +13 -1
  111. package/src/http/fs.ts +21 -51
  112. package/src/http/index.ts +2 -0
  113. package/src/http/mcp.ts +32 -0
  114. package/src/http/pages-public.ts +20 -4
  115. package/src/http/pages.ts +11 -3
  116. package/src/http/poll.ts +4 -0
  117. package/src/http/repos.ts +3 -3
  118. package/src/http/sessions.ts +82 -0
  119. package/src/http/tasks.ts +10 -2
  120. package/src/http/utils.ts +79 -1
  121. package/src/prompts/session-templates.ts +12 -8
  122. package/src/providers/acp-adapter.ts +62 -8
  123. package/src/providers/pi-mono-adapter.ts +23 -6
  124. package/src/providers/pricing-sources.md +11 -0
  125. package/src/scheduler/scheduler.test.ts +49 -2
  126. package/src/scheduler/scheduler.ts +4 -0
  127. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  128. package/src/scripts-runtime/types/stdlib.d.ts +8 -0
  129. package/src/scripts-runtime/types/swarm-sdk.d.ts +8 -0
  130. package/src/server.ts +2 -0
  131. package/src/slack/assistant.ts +87 -46
  132. package/src/slack/handlers.test.ts +1 -3
  133. package/src/slack/handlers.ts +102 -87
  134. package/src/slack/inbound-files.ts +466 -0
  135. package/src/slack/templates.ts +14 -0
  136. package/src/tasks/task-terminal-effects.ts +158 -0
  137. package/src/tests/acp-adapter.test.ts +369 -117
  138. package/src/tests/budget-claim-gate.test.ts +1 -0
  139. package/src/tests/build-pi-skills.test.ts +5 -7
  140. package/src/tests/claude-managed-setup.test.ts +52 -4
  141. package/src/tests/claude-md-session.test.ts +603 -0
  142. package/src/tests/codex-skill-resolver.test.ts +19 -0
  143. package/src/tests/context-versioning.test.ts +107 -0
  144. package/src/tests/cors-allowlist.test.ts +309 -0
  145. package/src/tests/credential-check.test.ts +157 -14
  146. package/src/tests/db-agents.test.ts +91 -0
  147. package/src/tests/db-context-versions.test.ts +37 -0
  148. package/src/tests/db-extraction-contract.test.ts +45 -0
  149. package/src/tests/db-runtime.test.ts +70 -0
  150. package/src/tests/db-task-read-contract.test.ts +624 -0
  151. package/src/tests/db-task-write-contract.test.ts +653 -0
  152. package/src/tests/db-tasks-read.test.ts +183 -0
  153. package/src/tests/db-tasks-write.test.ts +230 -0
  154. package/src/tests/defer-task.test.ts +389 -0
  155. package/src/tests/docs-index-footprint.test.js +2 -2
  156. package/src/tests/e2e-visuals-stage.test.ts +151 -0
  157. package/src/tests/file-lock.test.ts +144 -0
  158. package/src/tests/fixtures/file-lock-holder.ts +13 -0
  159. package/src/tests/fixtures/hold-file-lock.ts +25 -0
  160. package/src/tests/heartbeat-expiry.test.ts +188 -0
  161. package/src/tests/http-api-integration.test.ts +78 -1
  162. package/src/tests/pages-public-html.test.ts +43 -0
  163. package/src/tests/pages-svg-migration.test.ts +42 -0
  164. package/src/tests/preload.ts +4 -1
  165. package/src/tests/profile-sync-warning.test.ts +16 -0
  166. package/src/tests/profile-sync.test.ts +126 -0
  167. package/src/tests/prompt-template-session.test.ts +20 -4
  168. package/src/tests/provider-registration.test.ts +93 -0
  169. package/src/tests/rbac-e2e-helpers.test.ts +53 -0
  170. package/src/tests/rbac-e2e-helpers.ts +19 -2
  171. package/src/tests/reload-config.test.ts +26 -0
  172. package/src/tests/routing-affinity-inventory.test.ts +1 -1
  173. package/src/tests/runner-attachments-section.test.ts +22 -2
  174. package/src/tests/runner-context-preamble.test.ts +30 -0
  175. package/src/tests/runner-deployment-resume.test.ts +107 -0
  176. package/src/tests/runner-repo-autostash.test.ts +12 -0
  177. package/src/tests/script-connections.test.ts +4 -0
  178. package/src/tests/seed-scripts.test.ts +2 -2
  179. package/src/tests/session-tokens.test.ts +279 -0
  180. package/src/tests/slack-file-tools-attachments.test.ts +408 -0
  181. package/src/tests/slack-inbound-files.test.ts +847 -0
  182. package/src/tests/star-history-refresh.test.ts +102 -0
  183. package/src/tests/swarm-config-reserved-keys.test.ts +21 -0
  184. package/src/tests/swarm-repos.test.ts +20 -0
  185. package/src/tests/tool-annotations.test.ts +4 -3
  186. package/src/tests/ui-logs-parser.test.ts +176 -0
  187. package/src/tools/create-page.ts +4 -2
  188. package/src/tools/defer-task.ts +239 -0
  189. package/src/tools/repos/update-repo.ts +2 -2
  190. package/src/tools/schedules/create-schedule.ts +1 -0
  191. package/src/tools/schedules/list-schedules.ts +1 -0
  192. package/src/tools/schedules/patch-schedule.ts +1 -0
  193. package/src/tools/schedules/update-schedule.ts +1 -0
  194. package/src/tools/slack-download-file.ts +60 -29
  195. package/src/tools/slack-read.ts +73 -32
  196. package/src/tools/store-progress.ts +16 -146
  197. package/src/tools/tool-config.ts +1 -0
  198. package/src/tools/utils.ts +21 -0
  199. package/src/types.ts +37 -4
  200. package/src/utils/acp-session-token.ts +56 -0
  201. package/src/utils/file-lock.ts +111 -0
  202. package/src/utils/heartbeat-expiry.ts +78 -0
  203. package/src/utils/request-auth-context.ts +2 -0
  204. package/src/utils/task-attachment-links.ts +22 -0
  205. package/templates/skills/code-quality/content.md +8 -5
  206. package/templates/skills/download-task-attachment/content.md +2 -1
  207. package/{plugin/pi-skills → templates/skills}/review-offered-task/SKILL.md +5 -5
  208. package/templates/skills/review-offered-task/config.json +14 -0
  209. package/{plugin/commands/review-offered-task.md → templates/skills/review-offered-task/content.md} +3 -8
  210. package/templates/skills/scheduling/content.md +4 -0
  211. package/templates/skills/slack-interaction/content.md +2 -2
  212. package/templates/skills/work-on-task/SKILL.md +16 -0
  213. package/templates/skills/work-on-task/config.json +14 -0
  214. package/templates/skills/work-on-task/content.md +11 -0
  215. package/dist/assistant-0qt42nzg.js +0 -212
  216. package/dist/cli-fs1kkqgr.js +0 -317
  217. package/dist/cli-jnf5zghe.js +0 -269
  218. package/dist/cli-n1q8q14d.js +0 -177
  219. package/dist/handlers-yfp1qn81.js +0 -592
  220. package/plugin/commands/work-on-task.md +0 -39
  221. package/plugin/pi-skills/work-on-task/SKILL.md +0 -39
@@ -0,0 +1,653 @@
1
+ import { expect, test } from "bun:test";
2
+ import ts from "typescript";
3
+ import * as db from "../be/db";
4
+ import * as write from "../be/db/tasks/write";
5
+ import { CHILD_PROCESS_TEST_BUDGET_MS, expectChildOk, runChild } from "./test-proc";
6
+
7
+ function manifest(source: string): string[] {
8
+ const file = ts.createSourceFile("module.ts", source, ts.ScriptTarget.Latest, true);
9
+ const names = new Set<string>();
10
+ for (const node of file.statements) {
11
+ if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause)) {
12
+ for (const binding of node.exportClause.elements) {
13
+ names.add(
14
+ `${node.isTypeOnly || binding.isTypeOnly ? "type" : "value"}:${binding.name.text}`,
15
+ );
16
+ }
17
+ } else if (
18
+ ts.canHaveModifiers(node) &&
19
+ ts.getModifiers(node)?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)
20
+ ) {
21
+ if (ts.isVariableStatement(node)) {
22
+ for (const declaration of node.declarationList.declarations)
23
+ names.add(`value:${declaration.name.getText(file)}`);
24
+ } else if (
25
+ (ts.isFunctionDeclaration(node) ||
26
+ ts.isClassDeclaration(node) ||
27
+ ts.isTypeAliasDeclaration(node) ||
28
+ ts.isInterfaceDeclaration(node)) &&
29
+ node.name
30
+ ) {
31
+ names.add(
32
+ `${ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node) ? "type" : "value"}:${node.name.text}`,
33
+ );
34
+ }
35
+ }
36
+ }
37
+ return [...names].sort();
38
+ }
39
+
40
+ // Complete public facade and selected range manifests captured from merged base 8ac7b4a7.
41
+ const baseFacade = `type:AgentMailInboxMapping
42
+ type:ApiKeyStatus
43
+ type:AppVersion
44
+ type:ApprovalRequest
45
+ type:AssetSummaryFilters
46
+ type:AttributionByPersonRow
47
+ type:CascadeFailResult
48
+ type:ChannelActivityCursor
49
+ type:ConcurrentContext
50
+ type:ContextSummary
51
+ type:CreateContextSnapshotInput
52
+ type:CreateInboxMessageOptions
53
+ type:CreateScheduledTaskData
54
+ type:CreateServiceOptions
55
+ type:CreateSessionCostInput
56
+ type:CreateSteeringMessageArgs
57
+ type:CreateTaskOptions
58
+ type:CreateWaitStateInput
59
+ type:DashboardCostSummary
60
+ type:DeleteMcpServerResult
61
+ type:ExistingTrackerContextWork
62
+ type:ExistingTrackerContextWorkReason
63
+ type:InboxSummary
64
+ type:InsertPricingRowInput
65
+ type:InsertTaskAttachmentInput
66
+ type:KeyCostSummary
67
+ type:McpServerFilters
68
+ type:McpServerInsert
69
+ type:MentionPreview
70
+ type:PageListOptions
71
+ type:RecordBudgetRefusalNotificationInput
72
+ type:ScheduledTaskFilters
73
+ type:ScriptRunPatch
74
+ type:ServiceFilters
75
+ type:SessionCostByAgentRow
76
+ type:SessionCostByUserRow
77
+ type:SessionCostDailyRow
78
+ type:SessionCostSummaryTotals
79
+ type:SessionListItem
80
+ type:SessionListItemSummary
81
+ type:SkillFileInput
82
+ type:SkillFileManifestEntry
83
+ type:SkillFilters
84
+ type:SkillInsert
85
+ type:SlackConclusionKind
86
+ type:SlackMessageKind
87
+ type:SlackMessageRecord
88
+ type:StuckApprovalRun
89
+ type:StuckWaitRun
90
+ type:StuckWorkflowRun
91
+ type:SwarmMetrics
92
+ type:TaskFilters
93
+ type:UpdateScheduledTaskData
94
+ type:UpsertAssetKeyMappingInput
95
+ type:WorkflowFilters
96
+ type:WorkflowRunListOptions
97
+ type:WorkflowRunPage
98
+ value:KvTypeCollisionError
99
+ value:MAX_EMPTY_POLLS
100
+ value:SKILL_FILE_LIMITS
101
+ value:UNATTRIBUTED_USER_ID
102
+ value:__resetSqliteVecExtensionPathCacheForTests
103
+ value:acceptTask
104
+ value:assignUnassignedTaskPending
105
+ value:autoEncryptLegacyPlaintextSecrets
106
+ value:backfillSupersedeTaskResumeTaskId
107
+ value:bindSlackMessageTimestamp
108
+ value:buildRoutingAffinityFromAgent
109
+ value:cancelPendingApprovalRequestsForRun
110
+ value:cancelPendingSteeringForTask
111
+ value:cancelTask
112
+ value:cascadeFailDependents
113
+ value:checkDependencies
114
+ value:checkoutPromptTemplate
115
+ value:claimApprovalCancellationNotification
116
+ value:claimInboxMessages
117
+ value:claimKv
118
+ value:claimMentions
119
+ value:claimOfferedTask
120
+ value:claimTask
121
+ value:cleanupAgentSessions
122
+ value:cleanupStaleSessions
123
+ value:clearKeyRateLimit
124
+ value:closeDb
125
+ value:completeApprovalCancellationNotificationClaim
126
+ value:completeTask
127
+ value:computeContentHash
128
+ value:countActiveScriptRuns
129
+ value:countAllMetrics
130
+ value:countAllPages
131
+ value:countKv
132
+ value:countMetricsByAgent
133
+ value:countPagesByAgent
134
+ value:countScriptRunJournalAgentTaskSteps
135
+ value:countScriptRunJournalSteps
136
+ value:countScriptRuns
137
+ value:countSessions
138
+ value:countWorkflowRuns
139
+ value:createAgent
140
+ value:createAgentMailInboxMapping
141
+ value:createAppVersion
142
+ value:createApprovalRequest
143
+ value:createChannel
144
+ value:createContextSnapshot
145
+ value:createContextVersion
146
+ value:createInboxMessage
147
+ value:createLogEntry
148
+ value:createMcpServer
149
+ value:createMetric
150
+ value:createMetricVersion
151
+ value:createPage
152
+ value:createPageVersion
153
+ value:createScheduledTask
154
+ value:createScriptRun
155
+ value:createService
156
+ value:createSessionCost
157
+ value:createSessionLogs
158
+ value:createSkill
159
+ value:createSteeringMessage
160
+ value:createSwarmRepo
161
+ value:createTask
162
+ value:createTaskExtended
163
+ value:createUser
164
+ value:createWaitState
165
+ value:createWorkflow
166
+ value:createWorkflowRun
167
+ value:createWorkflowRunStep
168
+ value:createWorkflowVersion
169
+ value:deleteActiveSession
170
+ value:deleteActiveSessionById
171
+ value:deleteAgent
172
+ value:deleteAgentMailInboxMapping
173
+ value:deleteBudget
174
+ value:deleteChannel
175
+ value:deleteKv
176
+ value:deleteMcpServer
177
+ value:deleteMetric
178
+ value:deletePage
179
+ value:deletePricingRow
180
+ value:deletePromptTemplate
181
+ value:deleteScheduledTask
182
+ value:deleteService
183
+ value:deleteServicesByAgentId
184
+ value:deleteSkill
185
+ value:deleteSkillFile
186
+ value:deleteSlackMessageRecord
187
+ value:deleteSwarmConfig
188
+ value:deleteSwarmConfigByKey
189
+ value:deleteSwarmRepo
190
+ value:deleteTask
191
+ value:deleteTaskAttachment
192
+ value:deleteUser
193
+ value:deleteWorkflow
194
+ value:detachTaskFromWorkflowRunStep
195
+ value:emitBuiltInIntegrationConnectedOnce
196
+ value:emitMcpServerConnectedTelemetry
197
+ value:ensureSlackDelegationActivation
198
+ value:ensureSlackRenderV2Activation
199
+ value:failPendingResumeIfUnclaimed
200
+ value:failTask
201
+ value:findCompletedTaskInThread
202
+ value:findExistingLinearTrackerContextWork
203
+ value:findRecentCancelledTaskInThread
204
+ value:findRecentSimilarTasks
205
+ value:findTaskByAgentMailThread
206
+ value:findTaskByGitHub
207
+ value:findTaskByVcs
208
+ value:generateDefaultClaudeMd
209
+ value:generateDefaultIdentityMd
210
+ value:generateDefaultSoulMd
211
+ value:generateDefaultToolsMd
212
+ value:getActivePricingRow
213
+ value:getActiveSessionForTask
214
+ value:getActiveSessions
215
+ value:getActiveTaskCount
216
+ value:getAgentById
217
+ value:getAgentCurrentTask
218
+ value:getAgentHarnessProviders
219
+ value:getAgentMailInboxMapping
220
+ value:getAgentMailInboxMappingsByAgent
221
+ value:getAgentMcpServers
222
+ value:getAgentSkills
223
+ value:getAgentWithTasks
224
+ value:getAgentWorkingOnThread
225
+ value:getAllAgentMailInboxMappings
226
+ value:getAllAgents
227
+ value:getAllAgentsWithTasks
228
+ value:getAllChannelActivityCursors
229
+ value:getAllChannels
230
+ value:getAllLogs
231
+ value:getAllPricingRows
232
+ value:getAllServices
233
+ value:getAllSessionCosts
234
+ value:getAllTasks
235
+ value:getAllUsers
236
+ value:getAppVersion
237
+ value:getAppVersions
238
+ value:getApprovalRequestById
239
+ value:getApprovalRequestByStepId
240
+ value:getAssetKeyMapping
241
+ value:getAssetKeyMappingByProvider
242
+ value:getAttributionByPerson
243
+ value:getAvailableKeyIndices
244
+ value:getBudget
245
+ value:getBudgetRefusalNotification
246
+ value:getBudgets
247
+ value:getChannelActivityCursor
248
+ value:getChannelById
249
+ value:getChannelByName
250
+ value:getChannelMessages
251
+ value:getChildTasks
252
+ value:getCompletedSlackTasks
253
+ value:getCompletedStepNodeIds
254
+ value:getConcurrentContext
255
+ value:getContextSnapshotsBySessionId
256
+ value:getContextSnapshotsByTaskId
257
+ value:getContextSummaryByTaskId
258
+ value:getContextVersion
259
+ value:getContextVersionHistory
260
+ value:getDailySpendForAgent
261
+ value:getDailySpendForUser
262
+ value:getDailySpendGlobal
263
+ value:getDashboardCostSummary
264
+ value:getDb
265
+ value:getDbClient
266
+ value:getDependentTasks
267
+ value:getDueScheduledTasks
268
+ value:getDueWaitStates
269
+ value:getExpiredPendingApprovals
270
+ value:getFavoriteItemIdSet
271
+ value:getIdleWorkersWithCapacity
272
+ value:getInProgressSlackTasks
273
+ value:getInProgressTasksByContextKey
274
+ value:getInboxMessageById
275
+ value:getInboxSummary
276
+ value:getInjectableGlobalConfigs
277
+ value:getInstanceActivity
278
+ value:getKeyCostSummary
279
+ value:getKeyStatuses
280
+ value:getKv
281
+ value:getLastReadAt
282
+ value:getLastRunStart
283
+ value:getLastSuccessfulRun
284
+ value:getLatestActiveTaskInThread
285
+ value:getLatestContextVersion
286
+ value:getLatestLeadTaskInThread
287
+ value:getLatestPageBySlug
288
+ value:getLatestScriptRunStepTaskByContextKey
289
+ value:getLatestStepForNode
290
+ value:getLatestTaskByContextKey
291
+ value:getLeadAgent
292
+ value:getLiveAgentCounts
293
+ value:getLogsByAgentId
294
+ value:getLogsByEventType
295
+ value:getLogsByTaskId
296
+ value:getLogsByTaskIdChronological
297
+ value:getMcpServerById
298
+ value:getMcpServerByName
299
+ value:getMentionsForAgent
300
+ value:getMessageById
301
+ value:getMetric
302
+ value:getMetricBySlug
303
+ value:getMetricVersion
304
+ value:getMetricVersions
305
+ value:getMostRecentTaskInThread
306
+ value:getOfferedTasksForAgent
307
+ value:getOrphanedInProgressTasksForAgent
308
+ value:getPage
309
+ value:getPageBySlug
310
+ value:getPageVersion
311
+ value:getPageVersions
312
+ value:getPausedTasksForAgent
313
+ value:getPendingEventWaitNames
314
+ value:getPendingSlackRelayTasks
315
+ value:getPendingSteeringForAgent
316
+ value:getPendingSteeringForTask
317
+ value:getPendingTaskForAgent
318
+ value:getPendingWaitsByEvent
319
+ value:getPricingRows
320
+ value:getPromptTemplateById
321
+ value:getPromptTemplateHistory
322
+ value:getPromptTemplates
323
+ value:getRecentBudgetRefusalNotifications
324
+ value:getRecentCompletedCount
325
+ value:getRecentFailedCount
326
+ value:getRecentFailedTasks
327
+ value:getRecentlyCancelledTasksForAgent
328
+ value:getRecentlyFinishedWorkerTasks
329
+ value:getRemainingCapacity
330
+ value:getResolvedConfig
331
+ value:getRetryableSteps
332
+ value:getRootTaskChain
333
+ value:getRunningScriptRuns
334
+ value:getScheduledTaskById
335
+ value:getScheduledTaskByName
336
+ value:getScheduledTasks
337
+ value:getScriptRun
338
+ value:getScriptRunByIdempotencyKey
339
+ value:getScriptRunJournalStep
340
+ value:getServiceByAgentAndName
341
+ value:getServiceById
342
+ value:getServicesByAgentId
343
+ value:getSessionCostSummary
344
+ value:getSessionCostsByAgentId
345
+ value:getSessionCostsByTaskId
346
+ value:getSessionCostsFiltered
347
+ value:getSessionLogsBySession
348
+ value:getSessionLogsByTaskId
349
+ value:getSkillById
350
+ value:getSkillByName
351
+ value:getSkillFile
352
+ value:getSkillFiles
353
+ value:getSlackDelegationActivatedAt
354
+ value:getSlackMessageByChannelTs
355
+ value:getSlackOutcomeMessage
356
+ value:getSlackRenderV2ActivatedAt
357
+ value:getSlackTasksInThread
358
+ value:getSlackTasksMissingTree
359
+ value:getSlackTreeMessage
360
+ value:getSlackTreeMessageByThread
361
+ value:getSlackTreeMessages
362
+ value:getStalePinnedResumes
363
+ value:getStaleUnassignedAffinityTasks
364
+ value:getStalledInProgressTasks
365
+ value:getSteeringMessageById
366
+ value:getSteeringMessagesForTask
367
+ value:getStepByIdempotencyKey
368
+ value:getStepCountForNode
369
+ value:getStuckApprovalRuns
370
+ value:getStuckWaitRuns
371
+ value:getStuckWorkflowRuns
372
+ value:getSwarmConfigById
373
+ value:getSwarmConfigLookupById
374
+ value:getSwarmConfigs
375
+ value:getSwarmMetrics
376
+ value:getSwarmRepoById
377
+ value:getSwarmRepoByName
378
+ value:getSwarmRepoByUrl
379
+ value:getSwarmRepos
380
+ value:getSystemDefaultSkills
381
+ value:getTaskAttachments
382
+ value:getTaskById
383
+ value:getTaskByWorkflowRunStepId
384
+ value:getTaskStats
385
+ value:getTasksByAgentId
386
+ value:getTasksByStatus
387
+ value:getTasksCount
388
+ value:getUnassignedPoolTasks
389
+ value:getUnassignedTaskIds
390
+ value:getUnassignedTaskIdsForAgent
391
+ value:getUnassignedTasksCount
392
+ value:getUnreadInboxMessages
393
+ value:getUnreadMessages
394
+ value:getUserById
395
+ value:getWaitStateById
396
+ value:getWaitStateByStepId
397
+ value:getWorkflow
398
+ value:getWorkflowRun
399
+ value:getWorkflowRunStep
400
+ value:getWorkflowRunStepsByRunId
401
+ value:getWorkflowVersion
402
+ value:getWorkflowVersions
403
+ value:getWorkflowsByScheduleId
404
+ value:hasBudgetRefusalNotificationToday
405
+ value:hasCapacity
406
+ value:hasFirstCompletedTask
407
+ value:hasNonTerminalRerouteDecisionChild
408
+ value:hasNonTerminalResumeChild
409
+ value:hasPendingSteering
410
+ value:heartbeatActiveSession
411
+ value:incrKv
412
+ value:incrementEmptyPollCount
413
+ value:incrementPageViewCount
414
+ value:initDb
415
+ value:insertActiveSession
416
+ value:insertPricingRow
417
+ value:insertTaskAttachment
418
+ value:installMcpServer
419
+ value:installSkill
420
+ value:installSystemDefaultSkillsForAgent
421
+ value:isAgentEligibleForTask
422
+ value:isPendingSlackMessage
423
+ value:isPoolAffinityEnforcementEnabled
424
+ value:isSqliteVecAvailable
425
+ value:listAgentsWithCredStatusByProvider
426
+ value:listAllMetrics
427
+ value:listAllPages
428
+ value:listApprovalRequests
429
+ value:listAssetSummaries
430
+ value:listCancelledApprovalRequestsForRun
431
+ value:listCancelledApprovalRequestsForStep
432
+ value:listFavorites
433
+ value:listInboxState
434
+ value:listKv
435
+ value:listMcpServers
436
+ value:listMetricsByAgent
437
+ value:listPagesByAgent
438
+ value:listRecentSessions
439
+ value:listScriptRunJournalSteps
440
+ value:listScriptRuns
441
+ value:listSkillFileManifest
442
+ value:listSkills
443
+ value:listTaskTemplates
444
+ value:listUserFavorites
445
+ value:listWorkflowRuns
446
+ value:listWorkflowRunsPage
447
+ value:listWorkflows
448
+ value:markFinalizedSlackRelaysDelivered
449
+ value:markInboxMessageDelegated
450
+ value:markInboxMessageRead
451
+ value:markInboxMessageResponded
452
+ value:markKeyRateLimited
453
+ value:markSlackRelayAttempted
454
+ value:markSlackRelayDelivered
455
+ value:markSlackTreeRendered
456
+ value:markSteeringDelivered
457
+ value:markSteeringHandled
458
+ value:markSteeringPromoted
459
+ value:markTaskSlackReplySent
460
+ value:markTasksNotified
461
+ value:maskSecrets
462
+ value:moveAssetKey
463
+ value:moveTaskFromBacklog
464
+ value:moveTaskToBacklog
465
+ value:normalizeSkillFilePath
466
+ value:overwriteTerminalTaskResultText
467
+ value:pauseTask
468
+ value:postMessage
469
+ value:promoteAbandonedDraftTasks
470
+ value:promoteDraftTask
471
+ value:reassociateSessionLogs
472
+ value:recordBudgetRefusalNotification
473
+ value:recordInlineScriptRun
474
+ value:recordKeyRateLimitWindows
475
+ value:recordKeyUsage
476
+ value:recordSlackMessage
477
+ value:recordTaskPullRequestAttachments
478
+ value:refreshDraftTaskLease
479
+ value:rejectTask
480
+ value:releaseApprovalCancellationNotificationClaim
481
+ value:releaseMentionProcessing
482
+ value:releaseStaleMentionProcessing
483
+ value:releaseStaleOfferedTasksForOfflineAgents
484
+ value:releaseStaleProcessingInbox
485
+ value:releaseStaleReviewingTasks
486
+ value:releaseTask
487
+ value:replaceTaskAttachment
488
+ value:reserveSlackMessage
489
+ value:resetEmptyPollCount
490
+ value:resetOrphanedInProgressTasksForAgent
491
+ value:resetPromptTemplateToDefault
492
+ value:resetTasksNotified
493
+ value:resolveApprovalRequest
494
+ value:resolvePromptTemplate
495
+ value:resolveSqliteVecExtensionPath
496
+ value:resolveWaitState
497
+ value:resumeTask
498
+ value:searchSkills
499
+ value:setAgentHarnessProvider
500
+ value:setApiKeyName
501
+ value:setBudgetRefusalFollowUpTaskId
502
+ value:setFavorite
503
+ value:setSlackMessageTracking
504
+ value:setUserFavorite
505
+ value:shouldBlockPolling
506
+ value:startTask
507
+ value:supersedeTask
508
+ value:sweepExpiredKv
509
+ value:sweepExpiredKvPrefix
510
+ value:toggleAgentSkill
511
+ value:uninstallMcpServer
512
+ value:uninstallSkill
513
+ value:updateActiveSessionProviderSessionId
514
+ value:updateAgentActivity
515
+ value:updateAgentCredStatus
516
+ value:updateAgentCredentialMissing
517
+ value:updateAgentCredentialState
518
+ value:updateAgentMaxTasks
519
+ value:updateAgentName
520
+ value:updateAgentProfile
521
+ value:updateAgentProvider
522
+ value:updateAgentStatus
523
+ value:updateAgentStatusFromCapacity
524
+ value:updateApprovalRequestNotifications
525
+ value:updateMcpServer
526
+ value:updateMetric
527
+ value:updatePage
528
+ value:updateReadState
529
+ value:updateScheduledTask
530
+ value:updateScriptRun
531
+ value:updateScriptRunIfNotTerminal
532
+ value:updateScriptRunIfRunning
533
+ value:updateServiceStatus
534
+ value:updateSkill
535
+ value:updateSlackMessageRecord
536
+ value:updateSwarmRepo
537
+ value:updateTaskClaudeSessionId
538
+ value:updateTaskProgress
539
+ value:updateTaskTitle
540
+ value:updateTaskVcs
541
+ value:updateUser
542
+ value:updateWorkflow
543
+ value:updateWorkflowRun
544
+ value:updateWorkflowRunStep
545
+ value:upsertAssetKeyMapping
546
+ value:upsertBudget
547
+ value:upsertChannelActivityCursor
548
+ value:upsertInboxState
549
+ value:upsertKv
550
+ value:upsertPromptTemplate
551
+ value:upsertScriptRunJournalStep
552
+ value:upsertService
553
+ value:upsertSkillFile
554
+ value:upsertSkillFiles
555
+ value:upsertSwarmConfig
556
+ value:withFavoriteFlags`.split("\n");
557
+ const selected = `value:assignUnassignedTaskPending
558
+ value:backfillSupersedeTaskResumeTaskId
559
+ value:cancelTask
560
+ value:completeTask
561
+ value:createTask
562
+ value:deleteTask
563
+ value:failTask
564
+ value:getOrphanedInProgressTasksForAgent
565
+ value:getPausedTasksForAgent
566
+ value:getPendingTaskForAgent
567
+ value:getRecentlyCancelledTasksForAgent
568
+ value:overwriteTerminalTaskResultText
569
+ value:pauseTask
570
+ value:resetOrphanedInProgressTasksForAgent
571
+ value:resumeTask
572
+ value:startTask
573
+ value:supersedeTask
574
+ value:updateTaskClaudeSessionId
575
+ value:updateTaskProgress
576
+ value:updateTaskTitle`.split("\n");
577
+ const internal = ["value:configureTaskWriteDependencies"];
578
+
579
+ test("complete facade, selected public bindings and internal-only manifest remain exact", async () => {
580
+ const facade = await Bun.file(new URL("../be/db.ts", import.meta.url)).text();
581
+ const target = await Bun.file(new URL("../be/db/tasks/write.ts", import.meta.url)).text();
582
+ expect(manifest(facade)).toEqual(baseFacade);
583
+ expect(manifest(target).filter((name) => !internal.includes(name))).toEqual(selected);
584
+ expect(manifest(target).filter((name) => internal.includes(name))).toEqual(internal);
585
+ for (const binding of selected) {
586
+ const [kind, name] = binding.split(":") as [string, string];
587
+ if (kind === "value")
588
+ expect((db as Record<string, unknown>)[name]).toBe((write as Record<string, unknown>)[name]);
589
+ }
590
+ for (const binding of internal) expect(binding.split(":")[1]! in db).toBe(false);
591
+ const parsed = ts.createSourceFile("facade.ts", facade, ts.ScriptTarget.Latest, true);
592
+ for (const node of parsed.statements) {
593
+ if (
594
+ (ts.isFunctionDeclaration(node) ||
595
+ ts.isTypeAliasDeclaration(node) ||
596
+ ts.isInterfaceDeclaration(node)) &&
597
+ node.name
598
+ ) {
599
+ expect(selected.some((name) => name.endsWith(`:${node.name?.text}`))).toBe(false);
600
+ }
601
+ }
602
+ expect(target).not.toMatch(/from ["'][^"']*(?:be\/db|\.\.\/\.\.\/db)["']/);
603
+ expect(target).not.toContain("bun:sqlite");
604
+ expect(facade.split("\n").length).toBeLessThanOrEqual(14133);
605
+ });
606
+
607
+ test(
608
+ "fresh facade import registers deferred task-write dependencies and preserves their effects",
609
+ async () => {
610
+ const source = `
611
+ import { expect } from "bun:test";
612
+ import * as db from "./src/be/db";
613
+ import { telemetry } from "./src/telemetry";
614
+ const events = [];
615
+ telemetry.taskEvent = (event, props) => events.push({ event, props });
616
+ db.initDb(":memory:");
617
+ const agentId = "bbbb0000-0000-4000-8000-000000000004";
618
+ await db.createAgent({ id: agentId, name: "Fresh process", isLead: false, status: "idle" });
619
+ const parent = await db.createTask(agentId, "parent");
620
+ const child = await db.createTaskExtended("dependent", { agentId, dependsOn: [parent.id] });
621
+ await db.getDbClient().run("UPDATE agent_tasks SET priority = 100 WHERE id = ?", [child.id]);
622
+ expect((await db.getPendingTaskForAgent(agentId)).id).toBe(parent.id);
623
+ await db.updateTaskClaudeSessionId(parent.id, "fresh-session", "codex", {}, undefined, "codex", { version: 3 });
624
+ const steer = await db.createSteeringMessage({ taskId: parent.id, body: "continue afterwards", mode: "queue", source: "mcp", createdByKind: "agent", createdByAgentId: agentId });
625
+ await db.completeTask(parent.id, "https://github.com/desplega-ai/agent-swarm/pull/1455");
626
+ expect((await db.getTaskAttachments(parent.id)).some(a => a.url === "https://github.com/desplega-ai/agent-swarm/pull/1455")).toBe(true);
627
+ expect((await db.getSteeringMessageById(steer.id)).promotedTaskId).toBeTruthy();
628
+ expect((await db.getLogsByTaskId(parent.id)).some(l => l.newValue === "completed")).toBe(true);
629
+ const failed = await db.createTask(agentId, "will fail");
630
+ const blocked = await db.createTaskExtended("cascade", { agentId, dependsOn: [failed.id] });
631
+ await db.failTask(failed.id, "failure");
632
+ expect((await db.getTaskById(blocked.id)).status).toBe("failed");
633
+ for (let i = 0; i < 5; i++) await Bun.sleep(0);
634
+ const completedEvents = events.filter(e => e.event === "completed" && e.props.taskId === parent.id);
635
+ expect(completedEvents).toHaveLength(1);
636
+ expect(completedEvents[0].props.provider).toBe("codex");
637
+ expect(completedEvents[0].props.harnessVersion).toBe("3");
638
+ db.closeDb();
639
+ console.log("task-write-initialization-ok");
640
+ `;
641
+ const child = await runChild([process.execPath, "--eval", source], {
642
+ cwd: new URL("../../", import.meta.url).pathname,
643
+ env: {
644
+ ...process.env,
645
+ SECRETS_ENCRYPTION_KEY: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
646
+ AGENT_SWARM_TELEMETRY_DISABLED: "1",
647
+ },
648
+ });
649
+ expectChildOk(child, "fresh task-write facade initialization");
650
+ expect(child.stdout).toContain("task-write-initialization-ok");
651
+ },
652
+ CHILD_PROCESS_TEST_BUDGET_MS,
653
+ );