@desplega.ai/agent-swarm 2.7.2 → 2.7.3
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 +6 -0
- package/dist/{acp-adapter-624yge7a.js → acp-adapter-pdzw76ja.js} +1 -1
- package/dist/{actions-rd9xn281.js → actions-a90cfpca.js} +21 -21
- package/dist/{amp-adapter-k27hc00p.js → amp-adapter-4vtywcjk.js} +2 -2
- package/dist/{app-sjm3xc7g.js → app-8k68gygk.js} +3 -3
- package/dist/{assistant-6jbzs8wa.js → assistant-ck01q2yg.js} +32 -21
- package/dist/{boot-reembed-e2348eqc.js → boot-reembed-33spavpd.js} +1 -1
- package/dist/{boot-reembed-w53pd5xt.js → boot-reembed-xzge83a2.js} +1 -1
- package/dist/{boot-scrub-sweep-cpy4yg97.js → boot-scrub-sweep-mxvb8dr3.js} +3 -3
- package/dist/{boot-seeds-f6j4t6k6.js → boot-seeds-rpm8bb5r.js} +4 -4
- package/dist/{claude-adapter-v3ac8esd.js → claude-adapter-q12bcfj9.js} +3 -3
- package/dist/{claude-managed-setup-yyrkqvtm.js → claude-managed-setup-11vb6q89.js} +1 -1
- package/dist/{claude-sdk-session-85j69v6d.js → claude-sdk-session-gkv1107j.js} +10325 -10243
- package/dist/{cli-rs59z1qx.js → cli-07pcqwaj.js} +1 -1
- package/dist/{cli-6vq3ymqm.js → cli-0tkm519n.js} +1 -1
- package/dist/{cli-s7cm1927.js → cli-0xzbk52h.js} +4 -4
- package/dist/{cli-g0zc1b40.js → cli-0zae6bs6.js} +2 -2
- package/dist/{cli-p8yrsmfn.js → cli-10kjx0dm.js} +1 -1
- package/dist/{cli-7xsq63pe.js → cli-157ykn37.js} +10 -9
- package/dist/{cli-vjcj9k2p.js → cli-2h0rfmqk.js} +1 -1
- package/dist/{cli-9wasax9f.js → cli-35nzvqaf.js} +1 -1
- package/dist/{cli-e1p7dqe1.js → cli-4aydmmdy.js} +24 -3
- package/dist/{cli-942pp3bc.js → cli-54ax65rn.js} +3 -3
- package/dist/{cli-10cp92df.js → cli-5ke7gxwr.js} +6 -6
- package/dist/{cli-femw4q81.js → cli-6151a7dr.js} +2 -2
- package/dist/{cli-3cywb44q.js → cli-77eq8txs.js} +85 -3
- package/dist/{cli-atpfk4yd.js → cli-7cwrwb5x.js} +5 -5
- package/dist/{cli-bfbpvccx.js → cli-8a1k6mat.js} +61 -49
- package/dist/{cli-c18941tx.js → cli-8ch3b2r7.js} +3 -3
- package/dist/{cli-rs2s1t05.js → cli-9fk56y8c.js} +4 -4
- package/dist/{cli-0wx63vvw.js → cli-9km88w11.js} +1 -1
- package/dist/{cli-qy0z3mfj.js → cli-9vttw9nz.js} +56 -46
- package/dist/{cli-mzgppb7q.js → cli-a0w50zw9.js} +4 -4
- package/dist/{cli-z8a4mfz1.js → cli-aqp59jmv.js} +4 -4
- package/dist/{cli-5d8wd50e.js → cli-bs0fwb23.js} +1 -1
- package/dist/{cli-fa4kxxx3.js → cli-ct5920jb.js} +2 -2
- package/dist/{cli-0awbtmv2.js → cli-dek8hqjc.js} +10 -10
- package/dist/{cli-qp6adcmw.js → cli-e24w2mvk.js} +1 -1
- package/dist/{cli-t3npd8hm.js → cli-ghfhn1qc.js} +1 -1
- package/dist/{cli-jmcf8cnz.js → cli-ja369zab.js} +1 -1
- package/dist/{cli-wtjg6je3.js → cli-jhh7tbx6.js} +1 -1
- package/dist/{cli-e19bgatr.js → cli-jmk31131.js} +2 -2
- package/dist/{cli-2cj8fqv1.js → cli-kjcdzea8.js} +1 -1
- package/dist/{cli-1xpr5992.js → cli-kjha1q9k.js} +3 -3
- package/dist/{cli-9jfty8px.js → cli-ktcdczth.js} +538 -30
- package/dist/{cli-exd52qn4.js → cli-mcmpbpcc.js} +2 -2
- package/dist/{cli-2m2p3snc.js → cli-mmf43vcp.js} +6 -6
- package/dist/{cli-b2rhbaty.js → cli-pnm99spe.js} +10 -10
- package/dist/{cli-9jn9cj0q.js → cli-v9jk2k63.js} +1 -1
- package/dist/{cli-mt7bxjfd.js → cli-vhgcwppn.js} +1 -1
- package/dist/{cli-qa4hgda3.js → cli-vvz64zc5.js} +14 -13
- package/dist/{cli-txr0z97c.js → cli-wmhajw68.js} +171 -32
- package/dist/{cli-hzrmv8pg.js → cli-x38rmhap.js} +3 -3
- package/dist/{cli-hq9hd4hp.js → cli-xz6qjdqj.js} +1 -1
- package/dist/{cli-g9ypd5en.js → cli-z52gq55b.js} +4 -0
- package/dist/{cli-2qbmjfta.js → cli-z6219sd3.js} +4 -4
- package/dist/cli.js +19 -19
- package/dist/{codex-adapter-zm1bkdde.js → codex-adapter-46kbvvkx.js} +1 -1
- package/dist/{codex-hook-tkag7fxq.js → codex-hook-tm9ecrd5.js} +1 -1
- package/dist/{codex-session-runner-8k02mqw2.js → codex-session-runner-qy93hdrv.js} +1 -1
- package/dist/{commands-nw1dn4av.js → commands-hwdhacfx.js} +2 -2
- package/dist/{controller-3kkkmps0.js → controller-hjza5p1f.js} +3 -3
- package/dist/{controllers-connect-n2c4167r.js → controllers-connect-7m25cay2.js} +20 -20
- package/dist/{cursor-adapter-h5028emw.js → cursor-adapter-1qh7ps8w.js} +1 -1
- package/dist/{db-76y2msnf.js → db-w23k9301.js} +2 -2
- package/dist/{db-8rk0p8j1.js → db-wm8by383.js} +3 -3
- package/dist/{dispatcher-xp4wsx30.js → dispatcher-en25ebgc.js} +18 -18
- package/dist/{dsh-adapter-vyrr31bn.js → dsh-adapter-zkme32vd.js} +1 -1
- package/dist/{e2b-eesfj689.js → e2b-9z9mvt2p.js} +1 -1
- package/dist/{e2b-03nha1wz.js → e2b-yhvn70es.js} +1 -1
- package/dist/{embedding-space-ejefyep1.js → embedding-space-rgf4aypt.js} +6 -6
- package/dist/{embeddings-w297xaw0.js → embeddings-z9cmxhx1.js} +1 -1
- package/dist/{external-channel-mf9vp1fe.js → external-channel-g6vv85zv.js} +2 -2
- package/dist/{grok-adapter-mpzyyprz.js → grok-adapter-f6n1tpq3.js} +2 -2
- package/dist/handlers-ss5948rq.js +42 -0
- package/dist/{heartbeat-qnaycjzs.js → heartbeat-5xcdzz45.js} +21 -21
- package/dist/{hook-h6sqfzxr.js → hook-6423rme3.js} +2 -2
- package/dist/{hook-4zqdgea4.js → hook-8dk1csdd.js} +4 -4
- package/dist/{http-65ts210h.js → http-6mfh2ww9.js} +255 -60
- package/dist/{index-sqe7f6mj.js → index-0js6bgff.js} +1 -1
- package/dist/{index-farm1zsn.js → index-0ng1dd1t.js} +10937 -9527
- package/dist/{index-k3ewf1jg.js → index-5eyn1wc5.js} +18 -18
- package/dist/{index-vp4wa3qn.js → index-71gnebsn.js} +18 -18
- package/dist/{index-hdfad00b.js → index-q5gzpjdd.js} +12 -10
- package/dist/index-z3b1vfjx.js +44 -0
- package/dist/{keepalive-52k6skha.js → keepalive-cymckeg6.js} +3 -3
- package/dist/{lead-y9rj0gr1.js → lead-baknj2dh.js} +29 -29
- package/dist/{maintenance-f86wqfq6.js → maintenance-dfrnsx3n.js} +1 -1
- package/dist/{oauth-refresh-sweep-vddv9ky7.js → oauth-refresh-sweep-5dztk8x6.js} +2 -2
- package/dist/{onboard-8z2qk6gq.js → onboard-h36vja6y.js} +11 -6
- package/dist/{otel-impl-epet9j18.js → otel-impl-jerq8vz8.js} +1 -1
- package/dist/{pricing-refresh-6wm42a51.js → pricing-refresh-t3nx5krn.js} +3 -3
- package/dist/{rbac-roles-2kfcs1sc.js → rbac-roles-dw1awawd.js} +2 -2
- package/dist/{rbac-roles-13a0vj6d.js → rbac-roles-km0fc3e8.js} +1 -1
- package/dist/{registry-ajhexe44.js → registry-hzfh268v.js} +1 -1
- package/dist/{render-v2-cy8zsfsf.js → render-v2-65x4ayj8.js} +3 -3
- package/dist/{resume-c783qe6b.js → resume-61znk3hj.js} +6 -6
- package/dist/{session-access-s4tv0az8.js → session-access-4yc9htrg.js} +4 -4
- package/dist/{session-source-backfill-qzapz0ne.js → session-source-backfill-kr5bdjtp.js} +2 -2
- package/dist/{setup-st7htx1k.js → setup-9h61yr2p.js} +1 -1
- package/dist/{work-objects-ftj4zw70.js → work-objects-x7rb53qn.js} +27 -22
- package/dist/{worker-859fk25k.js → worker-7f3khgn0.js} +29 -29
- package/openapi.json +134 -3
- package/package.json +5 -5
- package/src/be/db/agents.ts +16 -1
- package/src/be/db/runtime.ts +25 -15
- package/src/be/db/session-summaries.ts +120 -0
- package/src/be/db/tasks/read.ts +7 -4
- package/src/be/db/tasks/search-index.ts +159 -0
- package/src/be/db/tasks/write.ts +3 -0
- package/src/be/db-queries/slack-inbound.ts +77 -0
- package/src/be/db.ts +27 -8
- package/src/be/mcp-overflow-sweep.ts +39 -0
- package/src/be/migrations/253_session_summaries.sql +300 -0
- package/src/be/migrations/254_query_audit_indexes.sql +25 -0
- package/src/be/migrations/256_agent_slack_icon.sql +2 -0
- package/src/be/migrations/257_agent_tasks_fts.sql +55 -0
- package/src/comb/config.ts +6 -2
- package/src/comb/requester.ts +69 -0
- package/src/comb/review-batch.ts +24 -2
- package/src/commands/onboard/agent-fs-version.ts +1 -1
- package/src/commands/onboard/compose-generator.ts +7 -2
- package/src/commands/onboard/env-generator.ts +8 -3
- package/src/commands/runner.ts +41 -24
- package/src/fs/agent-fs-provider.ts +9 -0
- package/src/heartbeat/heartbeat.ts +13 -6
- package/src/http/agents.ts +10 -2
- package/src/http/index.ts +15 -0
- package/src/http/integrations.ts +20 -0
- package/src/http/list-total-cache.ts +62 -0
- package/src/http/sessions.ts +9 -2
- package/src/http/slack-inbound.ts +1 -0
- package/src/http/status.ts +4 -1
- package/src/http/tasks.ts +12 -2
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/cursor-adapter.ts +1 -1
- package/src/providers/dsh-adapter.ts +1 -1
- package/src/queue-stall-alarm.ts +4 -1
- package/src/slack/actions.ts +2 -2
- package/src/slack/app-icon.ts +50 -0
- package/src/slack/app.ts +13 -1
- package/src/slack/assistant.ts +22 -1
- package/src/slack/event-dedup.test.ts +11 -0
- package/src/slack/event-dedup.ts +8 -4
- package/src/slack/inbound-dispatch.ts +58 -0
- package/src/slack/render-v2.ts +7 -8
- package/src/slack/responses.ts +21 -8
- package/src/slack/socket-ack.ts +237 -0
- package/src/slack/thread-buffer.ts +3 -5
- package/src/slack/watcher.ts +2 -2
- package/src/slack/work-objects.ts +5 -1
- package/src/tests/agent-fs-release-notes.test.ts +40 -0
- package/src/tests/agent-slack-icon.test.ts +85 -0
- package/src/tests/approval-cancellation-migration.test.ts +2 -0
- package/src/tests/asset-key-migration.test.ts +26 -0
- package/src/tests/comb-default.test.ts +159 -0
- package/src/tests/comb-review-batch.test.ts +192 -4
- package/src/tests/comb-status.test.ts +65 -2
- package/src/tests/db-agents.test.ts +13 -0
- package/src/tests/db-tasks-read.test.ts +10 -15
- package/src/tests/deploy-one-box.test.ts +161 -0
- package/src/tests/deploy-stubs.ts +68 -0
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/dsh-adapter.test.ts +1 -1
- package/src/tests/e2e-codex-auth-chain.test.ts +18 -1
- package/src/tests/fixtures/deploy-stubs/bun +3 -0
- package/src/tests/fixtures/deploy-stubs/bunx +27 -0
- package/src/tests/fixtures/deploy-stubs/curl +26 -0
- package/src/tests/fixtures/deploy-stubs/docker +122 -0
- package/src/tests/fixtures/onboard/content.compose.yml.txt +5 -5
- package/src/tests/fixtures/onboard/dev.compose.yml.txt +4 -4
- package/src/tests/fixtures/onboard/full-all.compose.yml.txt +12 -12
- package/src/tests/fixtures/onboard/full.compose.yml.txt +12 -12
- package/src/tests/fixtures/onboard/research.compose.yml.txt +4 -4
- package/src/tests/fixtures/onboard/solo.compose.yml.txt +2 -2
- package/src/tests/heartbeat-expiry.test.ts +151 -25
- package/src/tests/http-api-integration.test.ts +31 -0
- package/src/tests/human-free-reclassify.test.ts +6 -0
- package/src/tests/install-sh-bind.test.ts +242 -0
- package/src/tests/install-sh-tunnel.test.ts +89 -0
- package/src/tests/kv-storage.test.ts +28 -0
- package/src/tests/list-endpoint-slimming.test.ts +3 -0
- package/src/tests/list-total-cache.test.ts +63 -0
- package/src/tests/mcp-overflow-sweep.test.ts +84 -0
- package/src/tests/onboard-compose.test.ts +17 -3
- package/src/tests/onboard-env.test.ts +13 -0
- package/src/tests/onboarding.test.ts +1 -1
- package/src/tests/preload.ts +1 -0
- package/src/tests/query-audit-plans.test.ts +314 -0
- package/src/tests/script-connections.test.ts +6 -0
- package/src/tests/session-summaries.test.ts +384 -0
- package/src/tests/sessions-tree.test.ts +5 -1
- package/src/tests/slack-app-icon.test.ts +90 -0
- package/src/tests/slack-external-channel-egress.test.ts +1 -1
- package/src/tests/slack-inbound-receipts.test.ts +34 -0
- package/src/tests/slack-inline-output.test.ts +29 -2
- package/src/tests/slack-render-v2-query-plans.test.ts +3 -2
- package/src/tests/slack-render-v2.test.ts +35 -0
- package/src/tests/slack-socket-ack.test.ts +553 -0
- package/src/tests/task-lineage.test.ts +3 -0
- package/src/tests/task-search-filter.test.ts +4 -4
- package/src/tests/task-search-fts.test.ts +320 -0
- package/src/tests/update-profile-auth.test.ts +28 -0
- package/src/tools/get-swarm.ts +1 -0
- package/src/tools/get-tasks.ts +6 -1
- package/src/tools/join-swarm.ts +1 -0
- package/src/tools/my-agent-info.ts +1 -0
- package/src/tools/slack-post.ts +2 -2
- package/src/tools/slack-reply.ts +2 -2
- package/src/tools/slack-start-thread.ts +2 -2
- package/src/tools/slack-update.ts +1 -1
- package/src/tools/update-profile.ts +20 -4
- package/src/tools/utils.ts +3 -4
- package/src/types.ts +47 -0
- package/src/utils/constants.ts +127 -5
- package/templates/official/lead/HEARTBEAT.md +4 -2
- package/templates/official/lead/config.json +2 -2
- package/templates/skills/swarm-docs/content.md +2 -0
- package/dist/handlers-7x8sywgr.js +0 -42
- package/dist/index-mc30r1hs.js +0 -44
package/src/utils/constants.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared constants used across worker- and server-side code.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { isEnvFlagEnabled } from "./env-flag";
|
|
5
|
+
import { isEnvFlagEnabled, parseEnvFlag } from "./env-flag";
|
|
6
6
|
|
|
7
7
|
/** Maximum profile-file length in JavaScript characters (not UTF-8 bytes). */
|
|
8
8
|
export const MAX_PROFILE_FILE_LENGTH = 256 * 1024;
|
|
@@ -187,13 +187,135 @@ export function buildAgentFsLiveUrl(opts: AgentFsFileRef): string | null {
|
|
|
187
187
|
return route ? `${getAgentFsLiveUrl()}/file/~/${route}` : null;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
+
/** RFC 1918 private and 169.254/16 link-local IPv4 space, by its first two octets. */
|
|
191
|
+
function isPrivateIpv4(a: number, b: number): boolean {
|
|
192
|
+
return (
|
|
193
|
+
a === 10 ||
|
|
194
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
195
|
+
(a === 192 && b === 168) ||
|
|
196
|
+
(a === 169 && b === 254)
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
190
200
|
/**
|
|
191
|
-
*
|
|
192
|
-
*
|
|
201
|
+
* The eight 16-bit groups of an IPv6 literal (no brackets), or null when it is
|
|
202
|
+
* malformed. `new URL` already normalizes a host to compressed hex, so a
|
|
203
|
+
* dotted IPv4 tail never reaches here; one is rejected rather than parsed.
|
|
193
204
|
*/
|
|
194
|
-
|
|
205
|
+
function parseIpv6(addr: string): number[] | null {
|
|
206
|
+
if (addr.includes(".")) return null;
|
|
207
|
+
const halves = addr.split("::");
|
|
208
|
+
if (halves.length > 2) return null;
|
|
209
|
+
const toGroups = (part: string): number[] | null => {
|
|
210
|
+
if (!part) return [];
|
|
211
|
+
const groups = part
|
|
212
|
+
.split(":")
|
|
213
|
+
.map((g) => (/^[0-9a-f]{1,4}$/.test(g) ? Number.parseInt(g, 16) : Number.NaN));
|
|
214
|
+
return groups.some(Number.isNaN) ? null : groups;
|
|
215
|
+
};
|
|
216
|
+
const head = toGroups(halves[0] ?? "");
|
|
217
|
+
const tail = toGroups(halves[1] ?? "");
|
|
218
|
+
if (!head || !tail) return null;
|
|
219
|
+
if (halves.length === 1) return head.length === 8 ? head : null;
|
|
220
|
+
const missing = 8 - head.length - tail.length;
|
|
221
|
+
return missing < 1 ? null : [...head, ...new Array<number>(missing).fill(0), ...tail];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Whether a browser can plausibly open this URL. False for the addresses only
|
|
226
|
+
* the swarm's own network resolves: a single-label host (a docker or compose
|
|
227
|
+
* service such as `agent-fs`), `*.internal` (Railway, Fly, GCP),
|
|
228
|
+
* `*.svc` / `*.cluster.local` (Kubernetes), and private, link-local or
|
|
229
|
+
* unique-local IPs, including IPv4-mapped IPv6 (`::ffff:10.0.0.5`), `::` and
|
|
230
|
+
* multicast `ff00::/8`. Loopback counts as reachable: a localhost URL means the
|
|
231
|
+
* API and agent-fs share a host, which only works for a browser on that same
|
|
232
|
+
* machine (the local dev setup), and a remote operator can set `COMB_ENABLED`.
|
|
233
|
+
* An unparseable value is not reachable.
|
|
234
|
+
*/
|
|
235
|
+
export function isBrowserReachableUrl(value: string): boolean {
|
|
236
|
+
let host: string;
|
|
237
|
+
try {
|
|
238
|
+
host = new URL(value).hostname.toLowerCase().replace(/\.$/, "");
|
|
239
|
+
} catch {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
if (!host) return false;
|
|
243
|
+
if (host === "localhost" || host.endsWith(".localhost")) return true;
|
|
244
|
+
if (host.startsWith("[")) {
|
|
245
|
+
const parsed = parseIpv6(host.slice(1, -1));
|
|
246
|
+
if (!parsed) return false;
|
|
247
|
+
const g = (i: number) => parsed[i] ?? 0;
|
|
248
|
+
// Loopback is reachable (the local dev setup).
|
|
249
|
+
if (parsed.slice(0, 7).every((x) => x === 0) && g(7) === 1) return true;
|
|
250
|
+
// `::` and multicast `ff00::/8` are not addresses a browser can open.
|
|
251
|
+
if (parsed.every((x) => x === 0) || (g(0) & 0xff00) === 0xff00) return false;
|
|
252
|
+
// Unique-local `fc00::/7` and link-local `fe80::/10`.
|
|
253
|
+
if ((g(0) & 0xfe00) === 0xfc00 || (g(0) & 0xffc0) === 0xfe80) return false;
|
|
254
|
+
// IPv4-mapped `::ffff:a.b.c.d`: judge the embedded IPv4 address.
|
|
255
|
+
if (parsed.slice(0, 5).every((x) => x === 0) && g(5) === 0xffff) {
|
|
256
|
+
const a = g(6) >> 8;
|
|
257
|
+
return a === 127 || !isPrivateIpv4(a, g(6) & 0xff);
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
const octets = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
262
|
+
if (octets) {
|
|
263
|
+
const [a, b] = [Number(octets[1]), Number(octets[2])];
|
|
264
|
+
return a === 127 || !isPrivateIpv4(a, b);
|
|
265
|
+
}
|
|
266
|
+
if (!host.includes(".")) return false;
|
|
267
|
+
return !(host.endsWith(".internal") || host.endsWith(".svc") || host.endsWith(".cluster.local"));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export interface CombState {
|
|
271
|
+
enabled: boolean;
|
|
272
|
+
/** An explicit `COMB_ENABLED` decided it; otherwise the unset default did. */
|
|
273
|
+
explicit: boolean;
|
|
274
|
+
/** What is missing, for `/status` `agent_fs.comb.reason`. Null when Comb is on. */
|
|
275
|
+
reason: string | null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Comb (the agent-fs review space in the dashboard). An explicit
|
|
280
|
+
* `COMB_ENABLED` wins both ways, but still needs `AGENT_FS_API_URL`. Unset, it
|
|
281
|
+
* is on only when a browser can reach agent-fs: `AGENT_FS_PUBLIC_URL` is set,
|
|
282
|
+
* `AGENT_FS_PROXY` is on and the public API URL is {@link isBrowserReachableUrl}
|
|
283
|
+
* (the browser goes through the API), or, with no proxy, `AGENT_FS_API_URL` is
|
|
284
|
+
* itself reachable. Otherwise the browser would land on a private host.
|
|
285
|
+
* Reads `process.env` per call, so a config reload applies without a restart.
|
|
286
|
+
*/
|
|
287
|
+
export function getCombState(): CombState {
|
|
195
288
|
const apiUrl = process.env.AGENT_FS_API_URL?.trim().replace(/\/+$/, "");
|
|
196
|
-
|
|
289
|
+
const raw = process.env.COMB_ENABLED;
|
|
290
|
+
// The two parses agree only when the value is a recognized flag literal.
|
|
291
|
+
const explicit = parseEnvFlag(raw, true) === parseEnvFlag(raw, false);
|
|
292
|
+
if (explicit && !isEnvFlagEnabled("COMB_ENABLED", false)) {
|
|
293
|
+
return { enabled: false, explicit, reason: "COMB_ENABLED is false." };
|
|
294
|
+
}
|
|
295
|
+
if (!apiUrl) return { enabled: false, explicit, reason: "AGENT_FS_API_URL is not set." };
|
|
296
|
+
if (explicit) return { enabled: true, explicit, reason: null };
|
|
297
|
+
if (process.env.AGENT_FS_PUBLIC_URL?.trim()) return { enabled: true, explicit, reason: null };
|
|
298
|
+
// With the proxy on, the browser goes to `<public API URL>/agentfs`, so that
|
|
299
|
+
// is the address to check, not `AGENT_FS_API_URL`.
|
|
300
|
+
const proxy = isAgentFsProxyEnabled();
|
|
301
|
+
const browserUrl = proxy ? getPublicMcpBaseUrl() : apiUrl;
|
|
302
|
+
return isBrowserReachableUrl(browserUrl)
|
|
303
|
+
? { enabled: true, explicit, reason: null }
|
|
304
|
+
: {
|
|
305
|
+
enabled: false,
|
|
306
|
+
explicit,
|
|
307
|
+
reason: proxy
|
|
308
|
+
? `AGENT_FS_PROXY is on, but the API address ${browserUrl} is not reachable from a browser. Set PUBLIC_MCP_BASE_URL to the public API URL, or set COMB_ENABLED=true to force Files on.`
|
|
309
|
+
: `AGENT_FS_API_URL (${apiUrl}) is not reachable from a browser. Set AGENT_FS_PUBLIC_URL or AGENT_FS_PROXY=true, or set COMB_ENABLED=true to force Files on.`,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Comb is on: see {@link getCombState}. `getCombConfig()` (`src/comb/config.ts`)
|
|
315
|
+
* reports it.
|
|
316
|
+
*/
|
|
317
|
+
export function isCombEnabled(): boolean {
|
|
318
|
+
return getCombState().enabled;
|
|
197
319
|
}
|
|
198
320
|
|
|
199
321
|
/**
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
- Check for failed tasks — especially "worker session not found" failures which indicate interrupted work that may need re-creation
|
|
9
9
|
- Review reboot-retry tasks — verify they are progressing, cancel if work is no longer needed
|
|
10
10
|
|
|
11
|
-
## Tracked
|
|
11
|
+
## Tracked Item Rules
|
|
12
12
|
|
|
13
13
|
- Live items only: active blockers and watch items. Cap 10, 20 max during a surge; prune before you add.
|
|
14
|
-
- Each item states its lift trigger and
|
|
14
|
+
- Each item states its lift trigger and an expiry as `DELETE MM-DD` (or `DELETE on MM-DD`). A bare date or a full `YYYY-MM-DD` stamp does not arm the gate.
|
|
15
15
|
- An item closes: move its durable facts to memory, then delete the line. Never strike it through.
|
|
16
|
+
|
|
17
|
+
## Tracked Items
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"name": "lead",
|
|
3
3
|
"displayName": "Lead",
|
|
4
4
|
"description": "Orchestrator agent that coordinates workers, decomposes tasks, and builds institutional knowledge across sessions",
|
|
5
|
-
"version": "1.2.
|
|
5
|
+
"version": "1.2.1",
|
|
6
6
|
"category": "official",
|
|
7
7
|
"icon": "crown",
|
|
8
8
|
"author": "Agent Swarm <contact@agent-swarm.dev>",
|
|
9
9
|
"createdAt": "2026-03-09",
|
|
10
|
-
"lastUpdatedAt": "2026-10-
|
|
10
|
+
"lastUpdatedAt": "2026-10-28",
|
|
11
11
|
"agentDefaults": {
|
|
12
12
|
"role": "lead",
|
|
13
13
|
"capabilities": ["coordination", "planning", "communication"],
|
|
@@ -60,6 +60,7 @@ Fetch the page as markdown: `curl -fsSL https://docs.agent-swarm.dev/llms.mdx/do
|
|
|
60
60
|
## Guides
|
|
61
61
|
|
|
62
62
|
- [Deployment Guide](https://docs.agent-swarm.dev/docs/guides/deployment). When: Someone wants to run Agent Swarm on their own server with Docker Compose.
|
|
63
|
+
- [One-click deploy](https://docs.agent-swarm.dev/docs/guides/one-click-deploy). When: Someone has no server yet and wants Agent Swarm running in the cloud with HTTPS.
|
|
63
64
|
- [Kubernetes and Helm](https://docs.agent-swarm.dev/docs/guides/kubernetes). When: Someone wants to install Agent Swarm on Kubernetes.
|
|
64
65
|
- [Rootless Podman](https://docs.agent-swarm.dev/docs/guides/podman-rootless). When: Someone wants to run Agent Swarm under rootless Podman.
|
|
65
66
|
- [Published Artifacts](https://docs.agent-swarm.dev/docs/guides/published-artifacts). Reference.
|
|
@@ -88,6 +89,7 @@ Fetch the page as markdown: `curl -fsSL https://docs.agent-swarm.dev/llms.mdx/do
|
|
|
88
89
|
- [Scripts as external APIs](https://docs.agent-swarm.dev/docs/guides/scripts-external-apis). When: Someone wants a swarm script exposed as a public HTTP endpoint or webhook receiver.
|
|
89
90
|
- [Scripts credential broker](https://docs.agent-swarm.dev/docs/guides/scripts-credential-broker). Reference.
|
|
90
91
|
- [One-off Script Workflow Runs](https://docs.agent-swarm.dev/docs/guides/script-workflow-runs). Reference.
|
|
92
|
+
- [Dreaming](https://docs.agent-swarm.dev/docs/guides/dreaming). When: Someone asks what the nightly dreaming run changed, how to configure or turn it off, or how to undo one of its changes.
|
|
91
93
|
- [Claude Bridge](https://docs.agent-swarm.dev/docs/guides/claude-bridge-experimental). Reference.
|
|
92
94
|
- [Worker Credential Recovery](https://docs.agent-swarm.dev/docs/guides/worker-credential-recovery). Reference.
|
|
93
95
|
- [Model Gateways](https://docs.agent-swarm.dev/docs/guides/provider-auth/model-gateways). Reference.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isUserAllowed2,
|
|
3
|
-
registerMessageHandler2
|
|
4
|
-
} from "./cli-2m2p3snc.js";
|
|
5
|
-
import"./cli-7xsq63pe.js";
|
|
6
|
-
import"./cli-942pp3bc.js";
|
|
7
|
-
import"./cli-qy0z3mfj.js";
|
|
8
|
-
import"./cli-vpq0n13a.js";
|
|
9
|
-
import"./cli-qz93y3x5.js";
|
|
10
|
-
import"./cli-qp6adcmw.js";
|
|
11
|
-
import"./cli-3h26v7yj.js";
|
|
12
|
-
import"./cli-mzgppb7q.js";
|
|
13
|
-
import"./cli-e19bgatr.js";
|
|
14
|
-
import"./cli-p8yrsmfn.js";
|
|
15
|
-
import"./cli-10cp92df.js";
|
|
16
|
-
import"./cli-3ggwdtb0.js";
|
|
17
|
-
import"./cli-t3npd8hm.js";
|
|
18
|
-
import"./cli-g9ypd5en.js";
|
|
19
|
-
import"./cli-s7cm1927.js";
|
|
20
|
-
import"./cli-1xpr5992.js";
|
|
21
|
-
import"./cli-b2rhbaty.js";
|
|
22
|
-
import"./cli-n0ysjjtv.js";
|
|
23
|
-
import"./cli-jbgrwv4y.js";
|
|
24
|
-
import"./cli-e8xyjvfc.js";
|
|
25
|
-
import"./cli-13p25grh.js";
|
|
26
|
-
import"./cli-0adyhvq2.js";
|
|
27
|
-
import"./cli-9jfty8px.js";
|
|
28
|
-
import"./cli-6vq3ymqm.js";
|
|
29
|
-
import"./cli-2qbmjfta.js";
|
|
30
|
-
import"./cli-9jn9cj0q.js";
|
|
31
|
-
import"./cli-rycdaj0a.js";
|
|
32
|
-
import"./cli-2nf3b08t.js";
|
|
33
|
-
import"./cli-445c1vp7.js";
|
|
34
|
-
import"./cli-kvzgak7c.js";
|
|
35
|
-
import"./cli-jmcf8cnz.js";
|
|
36
|
-
import"./cli-eny54typ.js";
|
|
37
|
-
import"./cli-2cj8fqv1.js";
|
|
38
|
-
import"./cli-txr0z97c.js";
|
|
39
|
-
export {
|
|
40
|
-
isUserAllowed2 as isUserAllowed,
|
|
41
|
-
registerMessageHandler2 as registerMessageHandler
|
|
42
|
-
};
|
package/dist/index-mc30r1hs.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import"./cli-ns59dc6r.js";
|
|
2
|
-
import {
|
|
3
|
-
startHeartbeat2,
|
|
4
|
-
stopHeartbeat2
|
|
5
|
-
} from "./cli-qa4hgda3.js";
|
|
6
|
-
import"./cli-0awbtmv2.js";
|
|
7
|
-
import"./cli-5d8wd50e.js";
|
|
8
|
-
import"./cli-qy0z3mfj.js";
|
|
9
|
-
import"./cli-vpq0n13a.js";
|
|
10
|
-
import"./cli-qz93y3x5.js";
|
|
11
|
-
import"./cli-qp6adcmw.js";
|
|
12
|
-
import"./cli-3h26v7yj.js";
|
|
13
|
-
import"./cli-mzgppb7q.js";
|
|
14
|
-
import"./cli-e19bgatr.js";
|
|
15
|
-
import"./cli-p8yrsmfn.js";
|
|
16
|
-
import"./cli-10cp92df.js";
|
|
17
|
-
import"./cli-3ggwdtb0.js";
|
|
18
|
-
import"./cli-t3npd8hm.js";
|
|
19
|
-
import"./cli-g9ypd5en.js";
|
|
20
|
-
import"./cli-s7cm1927.js";
|
|
21
|
-
import"./cli-1xpr5992.js";
|
|
22
|
-
import"./cli-b2rhbaty.js";
|
|
23
|
-
import"./cli-n0ysjjtv.js";
|
|
24
|
-
import"./cli-jbgrwv4y.js";
|
|
25
|
-
import"./cli-e8xyjvfc.js";
|
|
26
|
-
import"./cli-13p25grh.js";
|
|
27
|
-
import"./cli-0adyhvq2.js";
|
|
28
|
-
import"./cli-9jfty8px.js";
|
|
29
|
-
import"./cli-6vq3ymqm.js";
|
|
30
|
-
import"./cli-2qbmjfta.js";
|
|
31
|
-
import"./cli-9jn9cj0q.js";
|
|
32
|
-
import"./cli-rycdaj0a.js";
|
|
33
|
-
import"./cli-2nf3b08t.js";
|
|
34
|
-
import"./cli-445c1vp7.js";
|
|
35
|
-
import"./cli-kvzgak7c.js";
|
|
36
|
-
import"./cli-b2mz5mjc.js";
|
|
37
|
-
import"./cli-jmcf8cnz.js";
|
|
38
|
-
import"./cli-eny54typ.js";
|
|
39
|
-
import"./cli-2cj8fqv1.js";
|
|
40
|
-
import"./cli-txr0z97c.js";
|
|
41
|
-
export {
|
|
42
|
-
startHeartbeat2 as startHeartbeat,
|
|
43
|
-
stopHeartbeat2 as stopHeartbeat
|
|
44
|
-
};
|