@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, expect, mock, test } from "bun:test";
|
|
2
|
+
import { join } from "node:path";
|
|
2
3
|
|
|
3
4
|
import {
|
|
4
5
|
resolveClaudeManagedSetupConfig,
|
|
@@ -42,10 +43,21 @@ const baseConfig = {
|
|
|
42
43
|
};
|
|
43
44
|
|
|
44
45
|
const fakeSkillFiles = [
|
|
45
|
-
{ slug: "
|
|
46
|
+
{ slug: "start-worker", absPath: "/x/start-worker.md", content: "# start-worker\n" },
|
|
46
47
|
{ slug: "create-pr", absPath: "/x/create-pr.md", content: "# create-pr\n" },
|
|
47
48
|
];
|
|
48
49
|
|
|
50
|
+
// The turn-prompt skills live in templates/skills/, not plugin/commands/.
|
|
51
|
+
// Managed agents get no entrypoint skill sync, so they must be uploaded too.
|
|
52
|
+
const fakeSeededSkillFiles = [
|
|
53
|
+
{ slug: "work-on-task", absPath: "/t/work-on-task", content: "# work-on-task\n" },
|
|
54
|
+
{
|
|
55
|
+
slug: "review-offered-task",
|
|
56
|
+
absPath: "/t/review-offered-task",
|
|
57
|
+
content: "# review-offered-task\n",
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
|
|
49
61
|
// ─── Tests ───────────────────────────────────────────────────────────────────
|
|
50
62
|
|
|
51
63
|
describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
@@ -55,6 +67,7 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
55
67
|
const fetchConfig = mock(async () => null);
|
|
56
68
|
const upsert = mock(async () => undefined);
|
|
57
69
|
const loadSkills = mock(async () => fakeSkillFiles);
|
|
70
|
+
const loadSeededSkills = mock(async () => fakeSeededSkillFiles);
|
|
58
71
|
const uploadOne = mock(async (_c: unknown, slug: string) => `skill_${slug}`);
|
|
59
72
|
const log = mock((_msg: string) => undefined);
|
|
60
73
|
|
|
@@ -63,6 +76,7 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
63
76
|
fetchConfig,
|
|
64
77
|
upsert,
|
|
65
78
|
loadSkills,
|
|
79
|
+
loadSeededSkills,
|
|
66
80
|
uploadOne,
|
|
67
81
|
log,
|
|
68
82
|
});
|
|
@@ -70,7 +84,12 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
70
84
|
expect(result.alreadyConfigured).toBe(false);
|
|
71
85
|
expect(result.agentId).toBe("agent_test_xyz");
|
|
72
86
|
expect(result.environmentId).toBe("env_test_123");
|
|
73
|
-
expect(result.skillIds).toEqual([
|
|
87
|
+
expect(result.skillIds).toEqual([
|
|
88
|
+
"skill_start-worker",
|
|
89
|
+
"skill_create-pr",
|
|
90
|
+
"skill_work-on-task",
|
|
91
|
+
"skill_review-offered-task",
|
|
92
|
+
]);
|
|
74
93
|
|
|
75
94
|
expect(environmentsCreate).toHaveBeenCalledTimes(1);
|
|
76
95
|
const envCallArgs = environmentsCreate.mock.calls[0]?.[0] as {
|
|
@@ -81,7 +100,7 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
81
100
|
expect(envCallArgs.config.type).toBe("cloud");
|
|
82
101
|
expect(envCallArgs.config.networking.type).toBe("unrestricted");
|
|
83
102
|
|
|
84
|
-
expect(uploadOne).toHaveBeenCalledTimes(fakeSkillFiles.length);
|
|
103
|
+
expect(uploadOne).toHaveBeenCalledTimes(fakeSkillFiles.length + fakeSeededSkillFiles.length);
|
|
85
104
|
|
|
86
105
|
expect(agentsCreate).toHaveBeenCalledTimes(1);
|
|
87
106
|
const agentCallArgs = agentsCreate.mock.calls[0]?.[0] as {
|
|
@@ -104,8 +123,10 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
104
123
|
expect(tool.default_config?.permission_policy?.type).toBe("always_allow");
|
|
105
124
|
}
|
|
106
125
|
expect(agentCallArgs.skills.map((s) => s.skill_id)).toEqual([
|
|
107
|
-
"
|
|
126
|
+
"skill_start-worker",
|
|
108
127
|
"skill_create-pr",
|
|
128
|
+
"skill_work-on-task",
|
|
129
|
+
"skill_review-offered-task",
|
|
109
130
|
]);
|
|
110
131
|
expect(agentCallArgs.mcp_servers[0]?.url).toBe("https://swarm.example.com/mcp");
|
|
111
132
|
|
|
@@ -135,6 +156,7 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
135
156
|
fetchConfig: mock(async () => null),
|
|
136
157
|
upsert: mock(async () => undefined),
|
|
137
158
|
loadSkills: mock(async () => []),
|
|
159
|
+
loadSeededSkills: mock(async () => []),
|
|
138
160
|
uploadOne: mock(async () => null),
|
|
139
161
|
log: mock(() => undefined),
|
|
140
162
|
},
|
|
@@ -144,6 +166,31 @@ describe("runClaudeManagedSetupFlow — happy path", () => {
|
|
|
144
166
|
};
|
|
145
167
|
expect(agentCallArgs.mcp_servers[0]?.url).toBe("https://swarm.example.com/mcp");
|
|
146
168
|
});
|
|
169
|
+
|
|
170
|
+
test("uploads the real turn-prompt skills from templates/skills with frontmatter", async () => {
|
|
171
|
+
const { client } = makeMockClient();
|
|
172
|
+
const uploaded: Array<{ slug: string; content: string }> = [];
|
|
173
|
+
|
|
174
|
+
await runClaudeManagedSetupFlow(baseConfig, {
|
|
175
|
+
client: client as any,
|
|
176
|
+
fetchConfig: mock(async () => null),
|
|
177
|
+
upsert: mock(async () => undefined),
|
|
178
|
+
loadSkills: mock(async () => []),
|
|
179
|
+
seededSkillsDir: join(import.meta.dir, "../../templates/skills"),
|
|
180
|
+
uploadOne: mock(async (_c: unknown, slug: string, content: string) => {
|
|
181
|
+
uploaded.push({ slug, content });
|
|
182
|
+
return `skill_${slug}`;
|
|
183
|
+
}),
|
|
184
|
+
log: mock(() => undefined),
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
expect(uploaded.map((u) => u.slug)).toEqual(["work-on-task", "review-offered-task"]);
|
|
188
|
+
for (const { slug, content } of uploaded) {
|
|
189
|
+
expect(content).toStartWith("---\n");
|
|
190
|
+
expect(content).toContain(`name: ${slug}`);
|
|
191
|
+
expect(content).toContain("description: ");
|
|
192
|
+
}
|
|
193
|
+
});
|
|
147
194
|
});
|
|
148
195
|
|
|
149
196
|
describe("runClaudeManagedSetupFlow — idempotent re-run", () => {
|
|
@@ -209,6 +256,7 @@ describe("runClaudeManagedSetupFlow — idempotent re-run", () => {
|
|
|
209
256
|
fetchConfig,
|
|
210
257
|
upsert,
|
|
211
258
|
loadSkills: mock(async () => []),
|
|
259
|
+
loadSeededSkills: mock(async () => []),
|
|
212
260
|
uploadOne: mock(async () => null),
|
|
213
261
|
log: mock(() => undefined),
|
|
214
262
|
},
|