@desplega.ai/agent-swarm 1.151.0 → 1.152.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/{acp-adapter-ex8hzjfc.js → acp-adapter-4s7q25ft.js} +1 -1
- package/dist/{actions-2bgpyhww.js → actions-cs6rhmvc.js} +13 -13
- package/dist/{app-1706zhr1.js → app-j54aq0dj.js} +3 -3
- package/dist/{assistant-bavke5p7.js → assistant-w1pgn7vf.js} +14 -14
- package/dist/{boot-reembed-3cmrrmpa.js → boot-reembed-42vgkrrj.js} +4 -4
- package/dist/{boot-reembed-nafcmmmc.js → boot-reembed-smy30z32.js} +3 -3
- package/dist/{boot-scrub-logs-cd6a2sq0.js → boot-scrub-logs-b6s72fsw.js} +2 -2
- package/dist/{claude-adapter-wfp2gzvz.js → claude-adapter-fh7rmcj9.js} +3 -3
- package/dist/{claude-sdk-session-bht9jjak.js → claude-sdk-session-xhynatn9.js} +3 -3
- package/dist/{cli-f1wky6zp.js → cli-3g61md6v.js} +1 -1
- package/dist/{cli-a1z3h107.js → cli-3pft2z6r.js} +4 -4
- package/dist/{cli-5tpgq60f.js → cli-72tgtzr1.js} +152 -23
- package/dist/{cli-0qb1z6s2.js → cli-7bwaerjt.js} +1 -1
- package/dist/{cli-czjtgfys.js → cli-b4dyetqt.js} +2 -2
- package/dist/{cli-s14agm5s.js → cli-bdt7w021.js} +12 -3
- package/dist/{cli-sjaae6ff.js → cli-dsyg66vt.js} +3 -3
- package/dist/{cli-2tbvf1z1.js → cli-ftdjz1mk.js} +8 -8
- package/dist/{cli-zkxymas5.js → cli-gfez0qmk.js} +1 -1
- package/dist/{cli-q88st9aj.js → cli-gxf2ebyz.js} +2 -2
- package/dist/{cli-ppm4975n.js → cli-jtvs5m8q.js} +1 -1
- package/dist/{cli-7tgcstn2.js → cli-jytf5mw9.js} +2 -2
- package/dist/{cli-g69fdc9g.js → cli-kf8qp2vf.js} +2 -2
- package/dist/{cli-5jd2z7av.js → cli-ks8a1cgq.js} +6 -2
- package/dist/{cli-gjyvhmmh.js → cli-ng4q6a9t.js} +5 -5
- package/dist/{cli-3v9xhjcn.js → cli-sakxd2rg.js} +2 -2
- package/dist/{cli-frcta2w4.js → cli-sqmh7jj1.js} +1 -1
- package/dist/{cli-vwm416m6.js → cli-v9sk4dzw.js} +1 -1
- package/dist/{cli-j9xczhaq.js → cli-vbk025fm.js} +1 -1
- package/dist/{cli-r2q6pevn.js → cli-wfve107r.js} +43 -21
- package/dist/{cli-9004vfdf.js → cli-y8tayczk.js} +2 -2
- package/dist/{cli-gbfwcd3k.js → cli-zfzznn7c.js} +7 -6
- package/dist/cli.js +11 -11
- package/dist/{codex-adapter-jjjk8w4m.js → codex-adapter-k6yq95sn.js} +2 -2
- package/dist/{codex-session-runner-nd6ayxkx.js → codex-session-runner-3rp84pk8.js} +2 -2
- package/dist/{commands-9v4psyq1.js → commands-pbr5jzy5.js} +2 -2
- package/dist/{db-wnt58tpe.js → db-z0xaa59a.js} +2 -2
- package/dist/{dispatcher-05jh1aqk.js → dispatcher-pwpgsj0x.js} +12 -12
- package/dist/{handlers-tw90pkh5.js → handlers-5mzk4mbg.js} +15 -15
- package/dist/{hook-sxe3r349.js → hook-8bz33zee.js} +1 -1
- package/dist/{hook-123e2scb.js → hook-kbh84zb1.js} +2 -2
- package/dist/{http-ecsar8ez.js → http-pppxg5vr.js} +100 -36
- package/dist/{index-hw26vj40.js → index-68bd9b5f.js} +12 -12
- package/dist/{index-16js521z.js → index-k1hq1qt6.js} +8 -8
- package/dist/{index-zj518gf9.js → index-mjpxsr6k.js} +13 -13
- package/dist/{index-ymn7em0p.js → index-y0te09pn.js} +3 -3
- package/dist/{index-nnrbpcjp.js → index-z0zwjtkn.js} +12 -12
- package/dist/{keepalive-asqtcm4y.js → keepalive-xvmwnh1d.js} +4 -4
- package/dist/{lead-xbfr7fvt.js → lead-pf8nvxt8.js} +16 -16
- package/dist/{maintenance-qma55qvw.js → maintenance-jk4q0wgg.js} +4 -4
- package/dist/{oauth-refresh-sweep-3s04c6qw.js → oauth-refresh-sweep-6207x9sj.js} +3 -3
- package/dist/{onboard-drskd386.js → onboard-b0csgm0q.js} +2 -2
- package/dist/{otel-impl-943c96er.js → otel-impl-b6rfehth.js} +1 -1
- package/dist/{pricing-refresh-mx51az05.js → pricing-refresh-4e201wtd.js} +4 -4
- package/dist/{rbac-roles-wcmrg6sv.js → rbac-roles-mkc5n5qa.js} +4 -4
- package/dist/{rbac-roles-78baecqd.js → rbac-roles-zp6e4geh.js} +3 -3
- package/dist/{render-v2-8zjntgf5.js → render-v2-4fazz9tf.js} +3 -3
- package/dist/{seed-pricing-jqjs6cws.js → seed-pricing-thxpn9vn.js} +3 -3
- package/dist/{setup-4pks0vfk.js → setup-wb0z8cat.js} +2 -2
- package/dist/{work-objects-wangt792.js → work-objects-h3498kwe.js} +18 -17
- package/dist/{worker-p2mr422x.js → worker-2m2tzxp3.js} +16 -16
- package/openapi.json +5 -5
- package/package.json +1 -1
- package/src/agentmail/inbound-archive.ts +71 -0
- package/src/agentmail/types.ts +2 -0
- package/src/be/db.ts +1 -1
- package/src/be/scripts/typecheck.ts +4 -0
- package/src/be/swarm-config-guard.ts +7 -1
- package/src/extensions/lifecycle.ts +26 -4
- package/src/http/extensions.ts +8 -3
- package/src/http/webhooks.ts +13 -5
- package/src/rbac/legacy-policy.ts +13 -1
- package/src/scripts-runtime/sdk-allowlist.ts +4 -0
- package/src/scripts-runtime/types/stdlib.d.ts +4 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +4 -0
- package/src/server.ts +12 -0
- package/src/slack/render-v2.ts +10 -4
- package/src/slack/responses.ts +7 -4
- package/src/slack/task-output.ts +21 -0
- package/src/slack/watcher.ts +3 -2
- package/src/slack/work-objects.ts +2 -1
- package/src/tests/agentmail-inbound-archive.test.ts +418 -0
- package/src/tests/extensions-example-mcp-install.test.ts +2 -2
- package/src/tests/extensions-http.test.ts +84 -3
- package/src/tests/extensions-lead-equivalence.test.ts +21 -0
- package/src/tests/extensions-mcp-tools.test.ts +111 -3
- package/src/tests/fixtures/store-progress-malformed-output.json +4 -0
- package/src/tests/rbac-admission-e2e.test.ts +35 -4
- package/src/tests/rbac-e2e-helpers.ts +18 -0
- package/src/tests/rbac-engine.test.ts +2 -2
- package/src/tests/rbac-mcp-admission-e2e.test.ts +22 -4
- package/src/tests/reload-config.test.ts +17 -0
- package/src/tests/scripts-only-gating.test.ts +4 -0
- package/src/tests/slack-render-v2.test.ts +24 -2
- package/src/tests/slack-task-output.test.ts +36 -0
- package/src/tests/store-progress-attachments-handler.test.ts +100 -1
- package/src/tests/swarm-config-reserved-keys.test.ts +6 -1
- package/src/tests/tool-annotations.test.ts +1 -1
- package/src/tools/extension-activate-version.ts +38 -0
- package/src/tools/extension-common.ts +2 -1
- package/src/tools/extension-delete.ts +29 -0
- package/src/tools/extension-disable.ts +36 -0
- package/src/tools/extension-enable.ts +36 -0
- package/src/tools/extension-install.ts +2 -2
- package/src/tools/store-progress.ts +30 -0
- package/src/tools/tool-config.ts +5 -1
- package/templates/skills/agent-browser/SKILL.md +84 -0
- package/templates/skills/agent-browser/content.md +21 -0
|
@@ -18,18 +18,18 @@ import {
|
|
|
18
18
|
} from "./cli-3dpj7atn.js";
|
|
19
19
|
import {
|
|
20
20
|
startPricingRefreshLoop
|
|
21
|
-
} from "./cli-
|
|
21
|
+
} from "./cli-kf8qp2vf.js";
|
|
22
22
|
import {
|
|
23
23
|
ensureRbacSeedsSynced,
|
|
24
24
|
getUserGrant
|
|
25
|
-
} from "./cli-
|
|
25
|
+
} from "./cli-jytf5mw9.js";
|
|
26
26
|
import {
|
|
27
27
|
can,
|
|
28
28
|
decideAdmission,
|
|
29
29
|
grantLeadEquivalence,
|
|
30
30
|
isRbacEnabled,
|
|
31
31
|
revokeLeadEquivalence
|
|
32
|
-
} from "./cli-
|
|
32
|
+
} from "./cli-zfzznn7c.js";
|
|
33
33
|
import {
|
|
34
34
|
AppDefinitionSchema,
|
|
35
35
|
AppElementsSchema,
|
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
upsertScriptConnection,
|
|
94
94
|
validateDefinition,
|
|
95
95
|
writeBareImportShim
|
|
96
|
-
} from "./cli-
|
|
96
|
+
} from "./cli-dsyg66vt.js";
|
|
97
97
|
import {
|
|
98
98
|
detachedProcessGroup,
|
|
99
99
|
registerProcessGroup,
|
|
@@ -120,10 +120,10 @@ import {
|
|
|
120
120
|
listAuthorizationsForApp,
|
|
121
121
|
onAuthorizationRefreshed,
|
|
122
122
|
upsertOAuthApp
|
|
123
|
-
} from "./cli-
|
|
123
|
+
} from "./cli-vbk025fm.js";
|
|
124
124
|
import {
|
|
125
125
|
seedPricingFromModelsDev
|
|
126
|
-
} from "./cli-
|
|
126
|
+
} from "./cli-7bwaerjt.js";
|
|
127
127
|
import {
|
|
128
128
|
require_dist
|
|
129
129
|
} from "./cli-51tf7ac3.js";
|
|
@@ -137,7 +137,7 @@ import {
|
|
|
137
137
|
startSlackApp,
|
|
138
138
|
stopSlackApp,
|
|
139
139
|
withSpan
|
|
140
|
-
} from "./cli-
|
|
140
|
+
} from "./cli-wfve107r.js";
|
|
141
141
|
import {
|
|
142
142
|
CANDIDATE_SET_MULTIPLIER,
|
|
143
143
|
computeScore,
|
|
@@ -149,7 +149,7 @@ import {
|
|
|
149
149
|
isGraphExpansionEnabled,
|
|
150
150
|
rerank,
|
|
151
151
|
rowToCandidate
|
|
152
|
-
} from "./cli-
|
|
152
|
+
} from "./cli-jtvs5m8q.js";
|
|
153
153
|
import {
|
|
154
154
|
init_task_attachment_links,
|
|
155
155
|
taskAttachmentDisplayUrl,
|
|
@@ -463,7 +463,7 @@ import {
|
|
|
463
463
|
upsertSwarmConfig,
|
|
464
464
|
validateConfigValue,
|
|
465
465
|
workflowContextKey
|
|
466
|
-
} from "./cli-
|
|
466
|
+
} from "./cli-bdt7w021.js";
|
|
467
467
|
import {
|
|
468
468
|
generateDefaultClaudeMd,
|
|
469
469
|
generateDefaultIdentityMd,
|
|
@@ -541,7 +541,7 @@ import {
|
|
|
541
541
|
import {
|
|
542
542
|
init_package,
|
|
543
543
|
package_default
|
|
544
|
-
} from "./cli-
|
|
544
|
+
} from "./cli-gfez0qmk.js";
|
|
545
545
|
import {
|
|
546
546
|
init_secret_scrubber,
|
|
547
547
|
isSensitiveKey,
|
|
@@ -23685,7 +23685,7 @@ async function notifySlack(text) {
|
|
|
23685
23685
|
return;
|
|
23686
23686
|
}
|
|
23687
23687
|
try {
|
|
23688
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
23688
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-j54aq0dj.js");
|
|
23689
23689
|
const app = getSlackApp2();
|
|
23690
23690
|
if (!app) {
|
|
23691
23691
|
console.warn("[Jira webhook keepalive] Slack not available, cannot send notification");
|
|
@@ -23756,7 +23756,7 @@ async function deleteJiraWebhook(webhookId) {
|
|
|
23756
23756
|
console.log(`[Jira webhook keepalive] Deleted webhook id=${webhookId}`);
|
|
23757
23757
|
}
|
|
23758
23758
|
async function overwriteWebhookIds(next) {
|
|
23759
|
-
const { getDbClient: getDbClient2 } = await import("./db-
|
|
23759
|
+
const { getDbClient: getDbClient2 } = await import("./db-z0xaa59a.js");
|
|
23760
23760
|
await getDbClient2().transaction(async (tx) => {
|
|
23761
23761
|
const row = await tx.get("SELECT metadata FROM oauth_apps WHERE provider = 'jira'");
|
|
23762
23762
|
if (!row) {
|
|
@@ -97476,7 +97476,7 @@ async function reloadGlobalConfigsAndIntegrations() {
|
|
|
97476
97476
|
return runWithoutRequestAuth(() => reloadGlobalConfigsAndIntegrationsInner());
|
|
97477
97477
|
}
|
|
97478
97478
|
async function reloadGlobalConfigsAndIntegrationsInner() {
|
|
97479
|
-
const { getEmbeddingProvider: getEmbeddingProvider2, resetEmbeddingProvider } = await import("./index-
|
|
97479
|
+
const { getEmbeddingProvider: getEmbeddingProvider2, resetEmbeddingProvider } = await import("./index-y0te09pn.js");
|
|
97480
97480
|
const wasEmbeddingsConfigured = getEmbeddingProvider2().isConfigured();
|
|
97481
97481
|
const updated = await loadGlobalConfigsIntoEnv(true);
|
|
97482
97482
|
const { resetFileStorageProvider } = await import("./registry-v5wytg0s.js");
|
|
@@ -97488,10 +97488,10 @@ async function reloadGlobalConfigsAndIntegrationsInner() {
|
|
|
97488
97488
|
integrations.push("embeddings");
|
|
97489
97489
|
}
|
|
97490
97490
|
if (!wasEmbeddingsConfigured && isEmbeddingsConfigured) {
|
|
97491
|
-
import("./boot-reembed-
|
|
97491
|
+
import("./boot-reembed-smy30z32.js").then(({ runBootReembed }) => runBootReembed()).catch((err) => {
|
|
97492
97492
|
console.error("[config-reload] memory backfill failed (non-fatal):", err);
|
|
97493
97493
|
});
|
|
97494
|
-
import("./boot-reembed-
|
|
97494
|
+
import("./boot-reembed-42vgkrrj.js").then(({ runBootReembedScripts }) => runBootReembedScripts()).catch((err) => {
|
|
97495
97495
|
console.error("[config-reload] script backfill failed (non-fatal):", err);
|
|
97496
97496
|
});
|
|
97497
97497
|
}
|
|
@@ -98304,7 +98304,7 @@ function setPreloadedTools(server, names) {
|
|
|
98304
98304
|
async function applyPreToolCall(name, args, requestInfo, inputSchema) {
|
|
98305
98305
|
if (requestInfo.callOrigin !== "mcp")
|
|
98306
98306
|
return { args };
|
|
98307
|
-
const dispatcher = await import("./dispatcher-
|
|
98307
|
+
const dispatcher = await import("./dispatcher-pwpgsj0x.js");
|
|
98308
98308
|
const result = await dispatcher.dispatchPre("pre.tool.call", { tool: name, args, requestInfo }, inputSchema ? {
|
|
98309
98309
|
validateModify: async (data) => {
|
|
98310
98310
|
const schema = normalizeObjectSchema(inputSchema) ?? inputSchema;
|
|
@@ -105897,9 +105897,8 @@ var registerDeletePageTool = (server) => {
|
|
|
105897
105897
|
});
|
|
105898
105898
|
};
|
|
105899
105899
|
|
|
105900
|
-
// src/tools/extension-
|
|
105900
|
+
// src/tools/extension-activate-version.ts
|
|
105901
105901
|
init_zod();
|
|
105902
|
-
init_types();
|
|
105903
105902
|
|
|
105904
105903
|
// src/tools/extension-common.ts
|
|
105905
105904
|
init_zod();
|
|
@@ -106074,6 +106073,7 @@ var extensionToolOutputSchema = swarmToolOutputSchema({
|
|
|
106074
106073
|
priority: number().optional(),
|
|
106075
106074
|
consecutiveFailures: number().optional(),
|
|
106076
106075
|
contentDeduped: boolean().optional(),
|
|
106076
|
+
deleted: boolean().optional(),
|
|
106077
106077
|
extensions: array(extensionListItemSchema).optional()
|
|
106078
106078
|
});
|
|
106079
106079
|
function isRecord2(value) {
|
|
@@ -106121,15 +106121,100 @@ async function proxyExtensionsApi(args) {
|
|
|
106121
106121
|
});
|
|
106122
106122
|
}
|
|
106123
106123
|
|
|
106124
|
+
// src/tools/extension-activate-version.ts
|
|
106125
|
+
var registerExtensionActivateVersionTool = (server) => {
|
|
106126
|
+
createToolRegistrar(server)("extension-activate-version", {
|
|
106127
|
+
title: "Extension Activate Version",
|
|
106128
|
+
description: "Activate a stored extension version, reloading it if enabled. Requires a lead, operator, or dashboard user.",
|
|
106129
|
+
annotations: { openWorldHint: false },
|
|
106130
|
+
inputSchema: object({
|
|
106131
|
+
id: string().uuid().describe("Installed extension ID from extension-list."),
|
|
106132
|
+
version: number().int().min(1).describe("Stored version number to activate.")
|
|
106133
|
+
}).strict(),
|
|
106134
|
+
outputSchema: extensionToolOutputSchema
|
|
106135
|
+
}, async (args, requestInfo) => proxyExtensionsApi({
|
|
106136
|
+
method: "POST",
|
|
106137
|
+
path: `/api/extensions/${args.id}/activate-version`,
|
|
106138
|
+
body: { version: args.version },
|
|
106139
|
+
requestInfo,
|
|
106140
|
+
success: (data) => toolOk("Extension activated.", {
|
|
106141
|
+
data: coerceExtensionSummary(data.extension)
|
|
106142
|
+
})
|
|
106143
|
+
}));
|
|
106144
|
+
};
|
|
106145
|
+
|
|
106146
|
+
// src/tools/extension-delete.ts
|
|
106147
|
+
init_zod();
|
|
106148
|
+
var registerExtensionDeleteTool = (server) => {
|
|
106149
|
+
createToolRegistrar(server)("extension-delete", {
|
|
106150
|
+
title: "Extension Delete",
|
|
106151
|
+
description: "Uninstall a disabled extension and delete its stored history. Disable it first with extension-disable. Requires a lead, operator, or dashboard user.",
|
|
106152
|
+
annotations: { openWorldHint: false, destructiveHint: true },
|
|
106153
|
+
inputSchema: object({
|
|
106154
|
+
id: string().uuid().describe("Installed extension ID from extension-list.")
|
|
106155
|
+
}).strict(),
|
|
106156
|
+
outputSchema: extensionToolOutputSchema
|
|
106157
|
+
}, async (args, requestInfo) => proxyExtensionsApi({
|
|
106158
|
+
method: "DELETE",
|
|
106159
|
+
path: `/api/extensions/${args.id}`,
|
|
106160
|
+
requestInfo,
|
|
106161
|
+
success: () => toolOk("Extension deleted.", { data: { id: args.id, deleted: true } })
|
|
106162
|
+
}));
|
|
106163
|
+
};
|
|
106164
|
+
|
|
106165
|
+
// src/tools/extension-disable.ts
|
|
106166
|
+
init_zod();
|
|
106167
|
+
var registerExtensionDisableTool = (server) => {
|
|
106168
|
+
createToolRegistrar(server)("extension-disable", {
|
|
106169
|
+
title: "Extension Disable",
|
|
106170
|
+
description: "Unload and disable an installed extension. Requires a lead, operator, or dashboard user.",
|
|
106171
|
+
annotations: { openWorldHint: false },
|
|
106172
|
+
inputSchema: object({
|
|
106173
|
+
id: string().uuid().describe("Installed extension ID from extension-list.")
|
|
106174
|
+
}).strict(),
|
|
106175
|
+
outputSchema: extensionToolOutputSchema
|
|
106176
|
+
}, async (args, requestInfo) => proxyExtensionsApi({
|
|
106177
|
+
method: "POST",
|
|
106178
|
+
path: `/api/extensions/${args.id}/disable`,
|
|
106179
|
+
requestInfo,
|
|
106180
|
+
success: (data) => toolOk("Extension disabled.", {
|
|
106181
|
+
data: coerceExtensionSummary(data.extension)
|
|
106182
|
+
})
|
|
106183
|
+
}));
|
|
106184
|
+
};
|
|
106185
|
+
|
|
106186
|
+
// src/tools/extension-enable.ts
|
|
106187
|
+
init_zod();
|
|
106188
|
+
var registerExtensionEnableTool = (server) => {
|
|
106189
|
+
createToolRegistrar(server)("extension-enable", {
|
|
106190
|
+
title: "Extension Enable",
|
|
106191
|
+
description: "Load and enable an installed extension. Requires a lead, operator, or dashboard user.",
|
|
106192
|
+
annotations: { openWorldHint: false },
|
|
106193
|
+
inputSchema: object({
|
|
106194
|
+
id: string().uuid().describe("Installed extension ID from extension-list.")
|
|
106195
|
+
}).strict(),
|
|
106196
|
+
outputSchema: extensionToolOutputSchema
|
|
106197
|
+
}, async (args, requestInfo) => proxyExtensionsApi({
|
|
106198
|
+
method: "POST",
|
|
106199
|
+
path: `/api/extensions/${args.id}/enable`,
|
|
106200
|
+
requestInfo,
|
|
106201
|
+
success: (data) => toolOk("Extension enabled.", {
|
|
106202
|
+
data: coerceExtensionSummary(data.extension)
|
|
106203
|
+
})
|
|
106204
|
+
}));
|
|
106205
|
+
};
|
|
106206
|
+
|
|
106124
106207
|
// src/tools/extension-install.ts
|
|
106125
|
-
|
|
106208
|
+
init_zod();
|
|
106209
|
+
init_types();
|
|
106210
|
+
var EXTENSION_INSTALL_DESCRIPTION = "Validate and store a TypeScript extension bundle (manifest plus a files map with one hooks.ts). Fetch the hook contract first: GET /api/extensions/type-defs returns swarm-extension.d.ts with every event and modify shape. The extension remains disabled until a lead, operator, or dashboard user enables it with extension-enable.";
|
|
106126
106211
|
function extensionInstallResult(data, fallbackName) {
|
|
106127
106212
|
const body = data;
|
|
106128
106213
|
const extension = coerceExtensionSummary(body.extension);
|
|
106129
106214
|
const name = extension.name ?? fallbackName;
|
|
106130
106215
|
const version = typeof extension.version === "number" ? ` v${extension.version}` : "";
|
|
106131
106216
|
const deduped = body.contentDeduped === true ? " Content was unchanged." : "";
|
|
106132
|
-
const enableInstruction = "
|
|
106217
|
+
const enableInstruction = "A lead, operator, or dashboard user can enable it with `extension-enable` or `POST /api/extensions/{id}/enable`.";
|
|
106133
106218
|
return toolOk(`Extension \`${name}\`${version} installed.${deduped} ${enableInstruction}`, {
|
|
106134
106219
|
data: {
|
|
106135
106220
|
...extension,
|
|
@@ -116947,7 +117032,7 @@ async function notifyAutomationPreflightFailure(preflight) {
|
|
|
116947
117032
|
return;
|
|
116948
117033
|
}
|
|
116949
117034
|
try {
|
|
116950
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
117035
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-j54aq0dj.js");
|
|
116951
117036
|
const app = getSlackApp2();
|
|
116952
117037
|
if (!app) {
|
|
116953
117038
|
console.warn("[Automation Preflight] Slack not available, cannot send notification");
|
|
@@ -120092,7 +120177,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
|
|
|
120092
120177
|
}
|
|
120093
120178
|
if (notification.channel === "slack") {
|
|
120094
120179
|
try {
|
|
120095
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
120180
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-j54aq0dj.js");
|
|
120096
120181
|
const slackApp = getSlackApp2();
|
|
120097
120182
|
if (!slackApp) {
|
|
120098
120183
|
console.warn("[HITL] Slack not initialized — cannot send notification");
|
|
@@ -120212,7 +120297,7 @@ class NotifyExecutor extends BaseExecutor {
|
|
|
120212
120297
|
}
|
|
120213
120298
|
}
|
|
120214
120299
|
case "slack": {
|
|
120215
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
120300
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-j54aq0dj.js");
|
|
120216
120301
|
const app = getSlackApp2();
|
|
120217
120302
|
if (!app) {
|
|
120218
120303
|
return {
|
|
@@ -126427,6 +126512,23 @@ var registerStoreProgressTool = (server) => {
|
|
|
126427
126512
|
}
|
|
126428
126513
|
}
|
|
126429
126514
|
const status = requestedStatus === "completed" || requestedStatus === "failed" ? requestedStatus : undefined;
|
|
126515
|
+
const leakedParameter = output?.match(/(?:<\/(?:output|parameter)>\s*)?<parameter name="([a-zA-Z_]+)">\s*([\s\S]*)$/);
|
|
126516
|
+
if (leakedParameter) {
|
|
126517
|
+
output = output?.slice(0, leakedParameter.index);
|
|
126518
|
+
let recovered = false;
|
|
126519
|
+
if (leakedParameter[1] === "attachments") {
|
|
126520
|
+
try {
|
|
126521
|
+
const parsed = array(AttachmentInputSchema).max(20).safeParse(JSON.parse(leakedParameter[2].replace(/\s*<\/parameter>\s*$/, "")));
|
|
126522
|
+
if (parsed.success && (attachments?.length ?? 0) + parsed.data.length <= 20) {
|
|
126523
|
+
attachments = [...attachments ?? [], ...parsed.data];
|
|
126524
|
+
recovered = true;
|
|
126525
|
+
}
|
|
126526
|
+
} catch {}
|
|
126527
|
+
}
|
|
126528
|
+
if (!recovered) {
|
|
126529
|
+
console.warn(`[store-progress] Stripped malformed output tail for task ${taskId}; parameter ${leakedParameter[1]} was not recovered.`);
|
|
126530
|
+
}
|
|
126531
|
+
}
|
|
126430
126532
|
const agentFsScopes = new Map;
|
|
126431
126533
|
const agentFsAttachments = attachments?.filter((a) => a.kind === "agent-fs") ?? [];
|
|
126432
126534
|
if (agentFsAttachments.length > 0) {
|
|
@@ -129038,6 +129140,10 @@ async function createServer(opts = {}) {
|
|
|
129038
129140
|
registerScriptSearchTool(server);
|
|
129039
129141
|
registerScriptRunTool(server);
|
|
129040
129142
|
registerScriptUpsertTool(server);
|
|
129143
|
+
registerExtensionDeleteTool(server);
|
|
129144
|
+
registerExtensionEnableTool(server);
|
|
129145
|
+
registerExtensionDisableTool(server);
|
|
129146
|
+
registerExtensionActivateVersionTool(server);
|
|
129041
129147
|
registerExtensionInstallTool(server);
|
|
129042
129148
|
registerExtensionListTool(server);
|
|
129043
129149
|
registerScriptDeleteTool(server);
|
|
@@ -129081,6 +129187,10 @@ async function createServer(opts = {}) {
|
|
|
129081
129187
|
registerScriptApisTool(server);
|
|
129082
129188
|
registerScriptRunTool(server);
|
|
129083
129189
|
registerScriptUpsertTool(server);
|
|
129190
|
+
registerExtensionDeleteTool(server);
|
|
129191
|
+
registerExtensionEnableTool(server);
|
|
129192
|
+
registerExtensionDisableTool(server);
|
|
129193
|
+
registerExtensionActivateVersionTool(server);
|
|
129084
129194
|
registerExtensionInstallTool(server);
|
|
129085
129195
|
registerExtensionListTool(server);
|
|
129086
129196
|
registerScriptDeleteTool(server);
|
|
@@ -129280,6 +129390,10 @@ var SDK_TOOL_NAME_MAP = {
|
|
|
129280
129390
|
script_launchRun: "launch-script-run",
|
|
129281
129391
|
script_getRun: "get-script-run",
|
|
129282
129392
|
script_listRuns: "list-script-runs",
|
|
129393
|
+
extension_delete: "extension-delete",
|
|
129394
|
+
extension_enable: "extension-enable",
|
|
129395
|
+
extension_disable: "extension-disable",
|
|
129396
|
+
extension_activate_version: "extension-activate-version",
|
|
129283
129397
|
extension_install: "extension-install",
|
|
129284
129398
|
extension_list: "extension-list",
|
|
129285
129399
|
swarm_get: "get-swarm",
|
|
@@ -130452,11 +130566,24 @@ async function removeRegistered(id2) {
|
|
|
130452
130566
|
if (previous)
|
|
130453
130567
|
await previous.dispose();
|
|
130454
130568
|
}
|
|
130569
|
+
async function recordLifecycleRequest(record3, operation, agentId, version = record3.activeVersion) {
|
|
130570
|
+
if (!agentId)
|
|
130571
|
+
return;
|
|
130572
|
+
await insertExtensionRun({
|
|
130573
|
+
extensionId: record3.id,
|
|
130574
|
+
version,
|
|
130575
|
+
event: `lifecycle.${operation}.requested`,
|
|
130576
|
+
action: "continue",
|
|
130577
|
+
agentId,
|
|
130578
|
+
subject: record3.name
|
|
130579
|
+
});
|
|
130580
|
+
}
|
|
130455
130581
|
async function enableExtension(id2, opts = {}) {
|
|
130456
130582
|
initExtensionPostBridge();
|
|
130457
130583
|
let record3 = await getExtensionById(id2);
|
|
130458
130584
|
if (!record3)
|
|
130459
130585
|
throw new ExtensionLifecycleError("Extension not found", 404);
|
|
130586
|
+
await recordLifecycleRequest(record3, "enable", opts.agentId);
|
|
130460
130587
|
const agentId = await ensureExtensionAgent(record3.name);
|
|
130461
130588
|
const identified = await setExtensionState(id2, { agentId, updatedBy: opts.by });
|
|
130462
130589
|
if (!identified)
|
|
@@ -130489,6 +130616,7 @@ async function disableExtension(id2, opts = {}) {
|
|
|
130489
130616
|
const record3 = await getExtensionById(id2);
|
|
130490
130617
|
if (!record3)
|
|
130491
130618
|
throw new ExtensionLifecycleError("Extension not found", 404);
|
|
130619
|
+
await recordLifecycleRequest(record3, "disable", opts.agentId);
|
|
130492
130620
|
await removeRegistered(id2);
|
|
130493
130621
|
attemptedFingerprints.delete(id2);
|
|
130494
130622
|
await deactivateExtensionAgent(record3.name);
|
|
@@ -130508,6 +130636,7 @@ async function activateVersion(id2, version, opts = {}) {
|
|
|
130508
130636
|
if (!await getExtensionVersion(id2, version)) {
|
|
130509
130637
|
throw new ExtensionLifecycleError(`Extension version ${version} was not found`, 404);
|
|
130510
130638
|
}
|
|
130639
|
+
await recordLifecycleRequest(current, "activate-version", opts.agentId, version);
|
|
130511
130640
|
const wasEnabled = current.enabled;
|
|
130512
130641
|
if (wasEnabled)
|
|
130513
130642
|
await disableExtension(id2, opts);
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
linkIdentity,
|
|
5
5
|
recordUnmappedIdentity,
|
|
6
6
|
resolveIdentity
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-72tgtzr1.js";
|
|
8
8
|
import {
|
|
9
9
|
getKv,
|
|
10
10
|
init_db,
|
|
11
11
|
upsertKv
|
|
12
|
-
} from "./cli-
|
|
12
|
+
} from "./cli-bdt7w021.js";
|
|
13
13
|
|
|
14
14
|
// src/slack/enrich.ts
|
|
15
15
|
init_db();
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
import {
|
|
50
50
|
init_package,
|
|
51
51
|
package_default
|
|
52
|
-
} from "./cli-
|
|
52
|
+
} from "./cli-gfez0qmk.js";
|
|
53
53
|
import {
|
|
54
54
|
init_secret_scrubber,
|
|
55
55
|
registerVolatileSecret,
|
|
@@ -7544,6 +7544,10 @@ var init_tool_config = __esm(() => {
|
|
|
7544
7544
|
"launch-script-run",
|
|
7545
7545
|
"get-script-run",
|
|
7546
7546
|
"list-script-runs",
|
|
7547
|
+
"extension-delete",
|
|
7548
|
+
"extension-enable",
|
|
7549
|
+
"extension-disable",
|
|
7550
|
+
"extension-activate-version",
|
|
7547
7551
|
"extension-install",
|
|
7548
7552
|
"extension-list",
|
|
7549
7553
|
"swarm_x",
|
|
@@ -7657,7 +7661,12 @@ var init_swarm_config_guard = __esm(() => {
|
|
|
7657
7661
|
init_reaction_shortcode();
|
|
7658
7662
|
init_types();
|
|
7659
7663
|
init_task_tool_manifest();
|
|
7660
|
-
RESERVED_KEYS = new Set([
|
|
7664
|
+
RESERVED_KEYS = new Set([
|
|
7665
|
+
"API_KEY",
|
|
7666
|
+
"SECRETS_ENCRYPTION_KEY",
|
|
7667
|
+
"CORS_ALLOW_ANY_ORIGIN",
|
|
7668
|
+
"EXTENSION_ALLOW_LEAD_ACTIVATION"
|
|
7669
|
+
]);
|
|
7661
7670
|
BOOLEAN_LITERALS = ["true", "false", "1", "0"];
|
|
7662
7671
|
DB_RETENTION_TUNING_BOUNDS = {
|
|
7663
7672
|
DB_RETENTION_TICK_BUDGET_MS: { min: 1000, max: 300000 },
|
|
@@ -11599,7 +11608,7 @@ async function getSwarmConfigs(filters) {
|
|
|
11599
11608
|
async function getInjectableGlobalConfigs() {
|
|
11600
11609
|
const rows = await getDbClient().query(`SELECT * FROM swarm_config
|
|
11601
11610
|
WHERE scope = 'global'
|
|
11602
|
-
AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN')
|
|
11611
|
+
AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN', 'EXTENSION_ALLOW_LEAD_ACTIVATION')
|
|
11603
11612
|
ORDER BY key ASC`);
|
|
11604
11613
|
return rows.map(rowToSwarmConfig);
|
|
11605
11614
|
}
|
|
@@ -20,10 +20,10 @@ import {
|
|
|
20
20
|
oauthAppRowToProviderConfig,
|
|
21
21
|
updateAuthorizationTokens,
|
|
22
22
|
upsertAuthorization
|
|
23
|
-
} from "./cli-
|
|
23
|
+
} from "./cli-vbk025fm.js";
|
|
24
24
|
import {
|
|
25
25
|
embedScript
|
|
26
|
-
} from "./cli-
|
|
26
|
+
} from "./cli-gxf2ebyz.js";
|
|
27
27
|
import {
|
|
28
28
|
CredentialBroker,
|
|
29
29
|
DEFAULT_CREDENTIAL_BINDINGS,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
normalizeDateRequired,
|
|
46
46
|
placeholderForConfigKey,
|
|
47
47
|
upsertSwarmConfig
|
|
48
|
-
} from "./cli-
|
|
48
|
+
} from "./cli-bdt7w021.js";
|
|
49
49
|
import {
|
|
50
50
|
init_env_flag,
|
|
51
51
|
isEnvFlagEnabled
|
|
@@ -12,11 +12,11 @@ import {
|
|
|
12
12
|
} from "./cli-d3p82erb.js";
|
|
13
13
|
import {
|
|
14
14
|
checkClaudeCredentials
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-sakxd2rg.js";
|
|
16
16
|
import {
|
|
17
17
|
checkCodexCredentials,
|
|
18
18
|
codexUserHome
|
|
19
|
-
} from "./cli-
|
|
19
|
+
} from "./cli-v9sk4dzw.js";
|
|
20
20
|
import {
|
|
21
21
|
MAX_RATE_LIMIT_RESET_MS,
|
|
22
22
|
isCodexCreditsExhaustedMessage,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
import {
|
|
35
35
|
resolveScriptsOnlyMode,
|
|
36
36
|
validateJsonSchema
|
|
37
|
-
} from "./cli-
|
|
37
|
+
} from "./cli-72tgtzr1.js";
|
|
38
38
|
import {
|
|
39
39
|
authJsonToCredentialSelection,
|
|
40
40
|
credentialsToAuthJson,
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
startSpan,
|
|
59
59
|
withSpan,
|
|
60
60
|
withSpanContext
|
|
61
|
-
} from "./cli-
|
|
61
|
+
} from "./cli-wfve107r.js";
|
|
62
62
|
import {
|
|
63
63
|
buildContextPreamble,
|
|
64
64
|
buildResumeContextPreamble,
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
init_types,
|
|
84
84
|
resolveTaskModelSelection,
|
|
85
85
|
telemetry
|
|
86
|
-
} from "./cli-
|
|
86
|
+
} from "./cli-bdt7w021.js";
|
|
87
87
|
import {
|
|
88
88
|
generateDefaultClaudeMd,
|
|
89
89
|
generateDefaultIdentityMd,
|
|
@@ -151,7 +151,7 @@ async function materializeCodexAuthJson(_slot, creds, deps = {}) {
|
|
|
151
151
|
async function createProviderAdapter(provider) {
|
|
152
152
|
switch (provider) {
|
|
153
153
|
case "claude": {
|
|
154
|
-
const { ClaudeAdapter } = await import("./claude-adapter-
|
|
154
|
+
const { ClaudeAdapter } = await import("./claude-adapter-fh7rmcj9.js");
|
|
155
155
|
return new ClaudeAdapter;
|
|
156
156
|
}
|
|
157
157
|
case "pi": {
|
|
@@ -159,7 +159,7 @@ async function createProviderAdapter(provider) {
|
|
|
159
159
|
return new PiMonoAdapter;
|
|
160
160
|
}
|
|
161
161
|
case "codex": {
|
|
162
|
-
const { CodexAdapter } = await import("./codex-adapter-
|
|
162
|
+
const { CodexAdapter } = await import("./codex-adapter-k6yq95sn.js");
|
|
163
163
|
return new CodexAdapter;
|
|
164
164
|
}
|
|
165
165
|
case "claude-managed": {
|
|
@@ -175,7 +175,7 @@ async function createProviderAdapter(provider) {
|
|
|
175
175
|
return new OpencodeAdapter;
|
|
176
176
|
}
|
|
177
177
|
case "acp": {
|
|
178
|
-
const { ACPAdapter } = await import("./acp-adapter-
|
|
178
|
+
const { ACPAdapter } = await import("./acp-adapter-4s7q25ft.js");
|
|
179
179
|
return new ACPAdapter;
|
|
180
180
|
}
|
|
181
181
|
default:
|
|
@@ -7,7 +7,7 @@ var package_default;
|
|
|
7
7
|
var init_package = __esm(() => {
|
|
8
8
|
package_default = {
|
|
9
9
|
name: "@desplega.ai/agent-swarm",
|
|
10
|
-
version: "1.
|
|
10
|
+
version: "1.152.1",
|
|
11
11
|
description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
|
|
12
12
|
keywords: [
|
|
13
13
|
"agent-swarm.dev",
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
getEmbeddingProvider,
|
|
5
5
|
init_embedding,
|
|
6
6
|
serializeEmbedding
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-jtvs5m8q.js";
|
|
8
8
|
import {
|
|
9
9
|
getDbClient,
|
|
10
10
|
init_db
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-bdt7w021.js";
|
|
12
12
|
import {
|
|
13
13
|
init_secret_scrubber,
|
|
14
14
|
scrubSecrets
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildModelsDevSeedRows,
|
|
3
3
|
loadModelsDevCache
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-7bwaerjt.js";
|
|
5
5
|
import {
|
|
6
6
|
createLogEntry,
|
|
7
7
|
getActivePricingRow,
|
|
8
8
|
getDbClient,
|
|
9
9
|
init_db,
|
|
10
10
|
insertPricingRow
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-bdt7w021.js";
|
|
12
12
|
import {
|
|
13
13
|
init_secret_scrubber,
|
|
14
14
|
scrubSecrets
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getScriptMcpTypes,
|
|
5
5
|
listAppRecords,
|
|
6
6
|
require_typescript
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-dsyg66vt.js";
|
|
8
8
|
import {
|
|
9
9
|
deleteSwarmConfigByKey,
|
|
10
10
|
getAgentById,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
getSwarmConfigs,
|
|
14
14
|
init_db,
|
|
15
15
|
upsertSwarmConfig
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-bdt7w021.js";
|
|
17
17
|
import {
|
|
18
18
|
init_secret_scrubber,
|
|
19
19
|
scrubSecrets
|
|
@@ -867,6 +867,10 @@ export interface SwarmSdk {
|
|
|
867
867
|
// --- write: extensions ---
|
|
868
868
|
extension_install(args: { manifest: Record<string, unknown>; files: Record<string, string>; priority?: number; config?: Record<string, unknown> }): Promise<unknown>;
|
|
869
869
|
extension_list(args?: { enabledOnly?: boolean }): Promise<unknown>;
|
|
870
|
+
extension_delete(args: { id: string }): Promise<unknown>;
|
|
871
|
+
extension_enable(args: { id: string }): Promise<unknown>;
|
|
872
|
+
extension_disable(args: { id: string }): Promise<unknown>;
|
|
873
|
+
extension_activate_version(args: { id: string; version: number }): Promise<unknown>;
|
|
870
874
|
|
|
871
875
|
// --- write: repos ---
|
|
872
876
|
repo_update(args: Record<string, unknown>): Promise<unknown>;
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
instantFlush,
|
|
6
6
|
requestSlackThreadSteering,
|
|
7
7
|
wasEventSeen
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-3pft2z6r.js";
|
|
9
9
|
import {
|
|
10
10
|
enrichSlackUserEmail,
|
|
11
11
|
resolveSlackUserId,
|
|
12
12
|
rewriteSlackMentions
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-b4dyetqt.js";
|
|
14
14
|
import {
|
|
15
15
|
TaskCreationBlockedError,
|
|
16
16
|
broadcastMatches,
|
|
@@ -23,14 +23,14 @@ import {
|
|
|
23
23
|
hasOtherUserMention,
|
|
24
24
|
notifySlackFileFailures,
|
|
25
25
|
routeMessage
|
|
26
|
-
} from "./cli-
|
|
26
|
+
} from "./cli-72tgtzr1.js";
|
|
27
27
|
import {
|
|
28
28
|
ackSlackMessage,
|
|
29
29
|
buildTreeBlocks,
|
|
30
30
|
ensureSlackThreadTree,
|
|
31
31
|
isSlackRenderV2Enabled,
|
|
32
32
|
registerTreeMessage
|
|
33
|
-
} from "./cli-
|
|
33
|
+
} from "./cli-wfve107r.js";
|
|
34
34
|
import {
|
|
35
35
|
getAgentById,
|
|
36
36
|
getAgentWorkingOnThread,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
init_db,
|
|
43
43
|
reactionName,
|
|
44
44
|
slackContextKey
|
|
45
|
-
} from "./cli-
|
|
45
|
+
} from "./cli-bdt7w021.js";
|
|
46
46
|
import {
|
|
47
47
|
init_resolver,
|
|
48
48
|
resolveTemplate
|