@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.
- package/README.md +2 -1
- package/dist/{acp-adapter-580t41c0.js → acp-adapter-9n319wqc.js} +61 -6
- package/dist/{actions-m662tjng.js → actions-2vxqvpr9.js} +9 -8
- package/dist/{app-zb3rndm8.js → app-w066xfy0.js} +6 -5
- package/dist/assistant-kt31dj2h.js +236 -0
- package/dist/{boot-reembed-072x00vn.js → boot-reembed-az5rassp.js} +7 -6
- package/dist/{boot-reembed-65zz2smt.js → boot-reembed-j3mm3rfz.js} +8 -7
- package/dist/{boot-scrub-logs-yz0ams04.js → boot-scrub-logs-b6h54817.js} +4 -4
- package/dist/{claude-adapter-paj270y2.js → claude-adapter-w1z04ann.js} +8 -6
- package/dist/{claude-managed-setup-w619jncn.js → claude-managed-setup-f5pmsyrp.js} +24 -3
- package/dist/{claude-sdk-session-swt80j9z.js → claude-sdk-session-f0cc1kec.js} +8 -6
- package/dist/{cli-dt553ktb.js → cli-0b6y7kxm.js} +1 -1
- package/dist/{cli-bxdhw615.js → cli-12fz972k.js} +4 -4
- package/dist/{cli-s2f20r5w.js → cli-1th1728g.js} +2 -2
- package/dist/{cli-rs6ec3b9.js → cli-3tgwnf43.js} +3 -3
- package/dist/{cli-gxnzc6wh.js → cli-4nr988h6.js} +1 -1
- package/dist/{cli-axs8e6d4.js → cli-53s590z8.js} +1 -1
- package/dist/{cli-ygbjp3z8.js → cli-54wwve05.js} +5 -4
- package/dist/{cli-v0asr5yv.js → cli-719k9j2c.js} +2 -2
- package/dist/{cli-anktweqr.js → cli-89xfd7f9.js} +21 -47
- package/dist/{cli-q34a0e10.js → cli-8v0g1yc8.js} +1 -1
- package/dist/cli-9d8ntetj.js +42 -0
- package/dist/{cli-z9fprcrf.js → cli-atcve9y8.js} +881 -738
- package/dist/{cli-jmb7g47h.js → cli-b5bq9crk.js} +14 -31
- package/dist/cli-d8brzxjb.js +190 -0
- package/dist/{cli-gzky0gkr.js → cli-de14znh8.js} +2 -2
- package/dist/{cli-xytwff7f.js → cli-dttph1bw.js} +2 -2
- package/dist/cli-ep19k3mb.js +19 -0
- package/dist/{cli-m1xa8be7.js → cli-f146mn5s.js} +7 -50
- package/dist/{cli-1fj0chdk.js → cli-f7dsy61y.js} +5 -3
- package/dist/{cli-f567d5c1.js → cli-ftht3zzj.js} +2782 -2589
- package/dist/{cli-a0g1gbt5.js → cli-hbv0kq6w.js} +2 -2
- package/dist/{cli-fhsz3twr.js → cli-jsp14b6c.js} +171 -1
- package/dist/{cli-7fnkj1hj.js → cli-kpv03zhj.js} +21 -17
- package/dist/{cli-m4j6trn4.js → cli-m8yrsg97.js} +2 -2
- package/dist/cli-m9sxbkhm.js +779 -0
- package/dist/cli-mmemxxdc.js +823 -0
- package/dist/{cli-tqtvj5pt.js → cli-n8508nre.js} +1 -1
- package/dist/{cli-z96t0thj.js → cli-p1d5b073.js} +37 -2
- package/dist/{cli-gh8y8f36.js → cli-rw51bq3j.js} +13 -10
- package/dist/{cli-59ej1c07.js → cli-smby5m17.js} +7 -6
- package/dist/{cli-65vqzz3v.js → cli-tzvk9haz.js} +94 -372
- package/dist/{cli-dc9k2ba9.js → cli-w9kb3bk1.js} +1 -1
- package/dist/{cli-kpev657q.js → cli-y6b6fb76.js} +25 -3
- package/dist/{cli-123q2get.js → cli-yz3djrm0.js} +9 -9
- package/dist/{cli-wvp6bvy4.js → cli-zhjmqxzh.js} +1 -1
- package/dist/cli.js +13 -13
- package/dist/{codex-adapter-k98vaw2r.js → codex-adapter-zw4dwsx7.js} +2 -2
- package/dist/{codex-hook-9pf19cks.js → codex-hook-bw8p5nh4.js} +2 -2
- package/dist/{codex-session-runner-tngtphx7.js → codex-session-runner-k981s65v.js} +2 -2
- package/dist/{commands-y8nbr3fv.js → commands-sykrxx7e.js} +4 -4
- package/dist/{db-30p4h2t1.js → db-sfbsc8wt.js} +6 -4
- package/dist/handlers-0aspcejm.js +603 -0
- package/dist/{hook-dcw4jfbj.js → hook-4nvqj2sb.js} +7 -5
- package/dist/{hook-21jexvfx.js → hook-hxccs7m5.js} +24 -49
- package/dist/{http-r4kq5g8d.js → http-y06z517d.js} +230 -94
- package/dist/{index-q3qja6ta.js → index-hssww7kj.js} +15 -14
- package/dist/{index-gay66b9w.js → index-k8znfx0z.js} +13 -12
- package/dist/{index-53zyht4z.js → index-tce1rss4.js} +371 -110
- package/dist/{index-nqvf26za.js → index-x5j894zf.js} +14 -13
- package/dist/{keepalive-xs8fa55y.js → keepalive-w733ax66.js} +6 -6
- package/dist/{lead-d9m2t4s0.js → lead-75bjqa9d.js} +29 -27
- package/dist/{maintenance-3zh82g6z.js → maintenance-w4f1zjck.js} +8 -7
- package/dist/{oauth-refresh-sweep-03snsye5.js → oauth-refresh-sweep-wdetky26.js} +5 -5
- package/dist/{onboard-0cg1925x.js → onboard-bb5net8s.js} +2 -2
- package/dist/{otel-impl-0ab95z27.js → otel-impl-0w7c14ap.js} +1 -1
- package/dist/{pi-mono-adapter-dtkz4e7j.js → pi-mono-adapter-2has4gnp.js} +12 -2
- package/dist/{pricing-refresh-e5jhzz4j.js → pricing-refresh-9nzsrgcq.js} +6 -6
- package/dist/{rbac-roles-p1mf40z3.js → rbac-roles-r3hqjp09.js} +5 -5
- package/dist/{rbac-roles-2w3cmrkc.js → rbac-roles-z1jrffbt.js} +4 -4
- package/dist/{registry-9kdck5ye.js → registry-v5wytg0s.js} +1 -2
- package/dist/{render-v2-xhawry3k.js → render-v2-vbr89fnb.js} +6 -5
- package/dist/{seed-pricing-t223sw91.js → seed-pricing-g62hy1pk.js} +7 -5
- package/dist/{setup-zcs0rce7.js → setup-gnfqnptp.js} +2 -2
- package/dist/{worker-qnp2ka62.js → worker-kznxp4qm.js} +29 -27
- package/openapi.json +263 -12
- package/package.json +1 -1
- package/plugin/commands/start-worker.md +4 -9
- package/plugin/pi-skills/start-worker/SKILL.md +4 -9
- package/src/be/db/agents.ts +556 -0
- package/src/be/db/context-versions.ts +117 -0
- package/src/be/db/runtime.ts +406 -0
- package/src/be/db/tasks/read.ts +1167 -0
- package/src/be/db/tasks/write.ts +953 -0
- package/src/be/db.ts +584 -3429
- package/src/be/migrations/147_scheduled_tasks_parent_task.sql +7 -0
- package/src/be/migrations/148_pages_svg.sql +123 -0
- package/src/be/migrations/149_session_tokens.sql +24 -0
- package/src/be/scripts/typecheck.ts +1 -0
- package/src/be/seed-pricing.ts +13 -8
- package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
- package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
- package/src/be/seed-scripts/catalog/star-history-refresh.ts +101 -0
- package/src/be/seed-scripts/catalog/star-history-renderer.ts +119 -0
- package/src/be/seed-scripts/index.ts +17 -0
- package/src/be/seed-skills/index.ts +14 -0
- package/src/be/swarm-config-guard.ts +5 -2
- package/src/be/task-attachment-store.ts +70 -0
- package/src/be/users.ts +77 -0
- package/src/commands/attachments-section.ts +37 -0
- package/src/commands/claude-managed-setup.ts +45 -3
- package/src/commands/claude-md-session.ts +408 -0
- package/src/commands/context-preamble.ts +15 -3
- package/src/commands/profile-sync.ts +205 -5
- package/src/commands/provider-credentials.ts +60 -27
- package/src/commands/runner.ts +63 -58
- package/src/commands/templates.ts +25 -2
- package/src/hooks/hook.ts +26 -67
- package/src/http/agents.ts +40 -1
- package/src/http/auth.ts +13 -1
- package/src/http/fs.ts +21 -51
- package/src/http/index.ts +2 -0
- package/src/http/mcp.ts +32 -0
- package/src/http/pages-public.ts +20 -4
- package/src/http/pages.ts +11 -3
- package/src/http/poll.ts +4 -0
- package/src/http/repos.ts +3 -3
- package/src/http/sessions.ts +82 -0
- package/src/http/tasks.ts +10 -2
- package/src/http/utils.ts +79 -1
- package/src/prompts/session-templates.ts +12 -8
- package/src/providers/acp-adapter.ts +62 -8
- package/src/providers/pi-mono-adapter.ts +23 -6
- package/src/providers/pricing-sources.md +11 -0
- package/src/scheduler/scheduler.test.ts +49 -2
- package/src/scheduler/scheduler.ts +4 -0
- package/src/scripts-runtime/sdk-allowlist.ts +1 -0
- package/src/scripts-runtime/types/stdlib.d.ts +8 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +8 -0
- package/src/server.ts +2 -0
- package/src/slack/assistant.ts +87 -46
- package/src/slack/handlers.test.ts +1 -3
- package/src/slack/handlers.ts +102 -87
- package/src/slack/inbound-files.ts +466 -0
- package/src/slack/templates.ts +14 -0
- package/src/tasks/task-terminal-effects.ts +158 -0
- package/src/tests/acp-adapter.test.ts +369 -117
- package/src/tests/budget-claim-gate.test.ts +1 -0
- package/src/tests/build-pi-skills.test.ts +5 -7
- package/src/tests/claude-managed-setup.test.ts +52 -4
- package/src/tests/claude-md-session.test.ts +603 -0
- package/src/tests/codex-skill-resolver.test.ts +19 -0
- package/src/tests/context-versioning.test.ts +107 -0
- package/src/tests/cors-allowlist.test.ts +309 -0
- package/src/tests/credential-check.test.ts +157 -14
- package/src/tests/db-agents.test.ts +91 -0
- package/src/tests/db-context-versions.test.ts +37 -0
- package/src/tests/db-extraction-contract.test.ts +45 -0
- package/src/tests/db-runtime.test.ts +70 -0
- package/src/tests/db-task-read-contract.test.ts +624 -0
- package/src/tests/db-task-write-contract.test.ts +653 -0
- package/src/tests/db-tasks-read.test.ts +183 -0
- package/src/tests/db-tasks-write.test.ts +230 -0
- package/src/tests/defer-task.test.ts +389 -0
- package/src/tests/docs-index-footprint.test.js +2 -2
- package/src/tests/e2e-visuals-stage.test.ts +151 -0
- package/src/tests/file-lock.test.ts +144 -0
- package/src/tests/fixtures/file-lock-holder.ts +13 -0
- package/src/tests/fixtures/hold-file-lock.ts +25 -0
- package/src/tests/heartbeat-expiry.test.ts +188 -0
- package/src/tests/http-api-integration.test.ts +78 -1
- package/src/tests/pages-public-html.test.ts +43 -0
- package/src/tests/pages-svg-migration.test.ts +42 -0
- package/src/tests/preload.ts +4 -1
- package/src/tests/profile-sync-warning.test.ts +16 -0
- package/src/tests/profile-sync.test.ts +126 -0
- package/src/tests/prompt-template-session.test.ts +20 -4
- package/src/tests/provider-registration.test.ts +93 -0
- package/src/tests/rbac-e2e-helpers.test.ts +53 -0
- package/src/tests/rbac-e2e-helpers.ts +19 -2
- package/src/tests/reload-config.test.ts +26 -0
- package/src/tests/routing-affinity-inventory.test.ts +1 -1
- package/src/tests/runner-attachments-section.test.ts +22 -2
- package/src/tests/runner-context-preamble.test.ts +30 -0
- package/src/tests/runner-deployment-resume.test.ts +107 -0
- package/src/tests/runner-repo-autostash.test.ts +12 -0
- package/src/tests/script-connections.test.ts +4 -0
- package/src/tests/seed-scripts.test.ts +2 -2
- package/src/tests/session-tokens.test.ts +279 -0
- package/src/tests/slack-file-tools-attachments.test.ts +408 -0
- package/src/tests/slack-inbound-files.test.ts +847 -0
- package/src/tests/star-history-refresh.test.ts +102 -0
- package/src/tests/swarm-config-reserved-keys.test.ts +21 -0
- package/src/tests/swarm-repos.test.ts +20 -0
- package/src/tests/tool-annotations.test.ts +4 -3
- package/src/tests/ui-logs-parser.test.ts +176 -0
- package/src/tools/create-page.ts +4 -2
- package/src/tools/defer-task.ts +239 -0
- package/src/tools/repos/update-repo.ts +2 -2
- package/src/tools/schedules/create-schedule.ts +1 -0
- package/src/tools/schedules/list-schedules.ts +1 -0
- package/src/tools/schedules/patch-schedule.ts +1 -0
- package/src/tools/schedules/update-schedule.ts +1 -0
- package/src/tools/slack-download-file.ts +60 -29
- package/src/tools/slack-read.ts +73 -32
- package/src/tools/store-progress.ts +16 -146
- package/src/tools/tool-config.ts +1 -0
- package/src/tools/utils.ts +21 -0
- package/src/types.ts +37 -4
- package/src/utils/acp-session-token.ts +56 -0
- package/src/utils/file-lock.ts +111 -0
- package/src/utils/heartbeat-expiry.ts +78 -0
- package/src/utils/request-auth-context.ts +2 -0
- package/src/utils/task-attachment-links.ts +22 -0
- package/templates/skills/code-quality/content.md +8 -5
- package/templates/skills/download-task-attachment/content.md +2 -1
- package/{plugin/pi-skills → templates/skills}/review-offered-task/SKILL.md +5 -5
- package/templates/skills/review-offered-task/config.json +14 -0
- package/{plugin/commands/review-offered-task.md → templates/skills/review-offered-task/content.md} +3 -8
- package/templates/skills/scheduling/content.md +4 -0
- package/templates/skills/slack-interaction/content.md +2 -2
- package/templates/skills/work-on-task/SKILL.md +16 -0
- package/templates/skills/work-on-task/config.json +14 -0
- package/templates/skills/work-on-task/content.md +11 -0
- package/dist/assistant-0qt42nzg.js +0 -212
- package/dist/cli-fs1kkqgr.js +0 -317
- package/dist/cli-jnf5zghe.js +0 -269
- package/dist/cli-n1q8q14d.js +0 -177
- package/dist/handlers-yfp1qn81.js +0 -592
- package/plugin/commands/work-on-task.md +0 -39
- 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
|
+
);
|