@desplega.ai/agent-swarm 2.7.5 → 2.7.7
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/dist/{acp-adapter-g3ads55s.js → acp-adapter-7b4vk3h5.js} +5 -4
- package/dist/{actions-zwfykqqk.js → actions-3tt153af.js} +18 -17
- package/dist/{amp-adapter-z3s0ssdt.js → amp-adapter-njpts0yr.js} +1 -1
- package/dist/{anthropic-messages-x4q6rfq5.js → anthropic-messages-xey2skwx.js} +7 -7
- package/dist/{app-vmp4fgep.js → app-nky4378f.js} +3 -3
- package/dist/{assistant-vwde653f.js → assistant-jnb669pa.js} +24 -22
- package/dist/{azure-openai-responses-s1w5n70z.js → azure-openai-responses-26t7j9ra.js} +5 -5
- package/dist/{boot-reembed-375t7tbk.js → boot-reembed-9mgvaztt.js} +1 -1
- package/dist/{boot-reembed-gq9rcpnj.js → boot-reembed-qs2djdej.js} +1 -1
- package/dist/{boot-scrub-sweep-nd938kyf.js → boot-scrub-sweep-yjpdj7s1.js} +3 -3
- package/dist/{boot-seeds-aykx51v3.js → boot-seeds-5cm6ambd.js} +4 -4
- package/dist/{boxd-k1j26g3h.js → boxd-nv507va8.js} +5 -5
- package/dist/{claude-adapter-8j4hm099.js → claude-adapter-fn287zmm.js} +5 -4
- package/dist/{claude-managed-setup-0wyynpn1.js → claude-managed-setup-wtdz2mj2.js} +1 -1
- package/dist/{claude-sdk-session-q6wj5hmy.js → claude-sdk-session-x91kqyhm.js} +9677 -9514
- package/dist/{cli-j3jvnpe8.js → cli-08bmz9z9.js} +1 -1
- package/dist/{cli-gjr2y2xk.js → cli-0agcv1v5.js} +4 -1
- package/dist/{cli-y24sc29k.js → cli-1c6tzt8g.js} +30 -8
- package/dist/{cli-mjzynrse.js → cli-35rsp8ye.js} +1 -1
- package/dist/{cli-rpm2sgv0.js → cli-3fg0bdcv.js} +19 -2
- package/dist/{cli-nn4d8dne.js → cli-5b456bpf.js} +2 -2
- package/dist/{cli-bhjt02p8.js → cli-5jnhv72d.js} +1 -1
- package/dist/{cli-fqzx7gwa.js → cli-5zx699j9.js} +2 -2
- package/dist/{cli-hf6zt5m6.js → cli-69szn7w7.js} +17 -1
- package/dist/{cli-vqypxzh4.js → cli-6g0hb4cp.js} +8 -8
- package/dist/{cli-tqgg40ek.js → cli-6pfd54vx.js} +9 -8
- package/dist/{cli-bsn8nhrq.js → cli-6vcp76qk.js} +3 -3
- package/dist/{cli-zppwg9p9.js → cli-72v799xn.js} +1 -1
- package/dist/cli-82j36f2m.js +45 -0
- package/dist/{cli-hn9hxmz9.js → cli-8305gbq0.js} +29 -16
- package/dist/{cli-z8eh3ex8.js → cli-8sckt74b.js} +8 -8
- package/dist/{cli-bnz7a7qf.js → cli-95jzxcp3.js} +1 -1
- package/dist/{cli-0bxqnvq9.js → cli-adeegh7d.js} +29 -7
- package/dist/{cli-g61qxmge.js → cli-afkqkrtw.js} +3 -3
- package/dist/{cli-7a42nfy0.js → cli-ayayvfg4.js} +24 -4
- package/dist/{cli-bqt1mptt.js → cli-az48n0nr.js} +4 -4
- package/dist/{cli-z6jkx23q.js → cli-bfv7vdg6.js} +9 -9
- package/dist/{cli-pywf3eh5.js → cli-caj33vcq.js} +5 -5
- package/dist/{cli-5pag6rmn.js → cli-cb2a8pna.js} +1 -1
- package/dist/{cli-wvaawacd.js → cli-cppkf404.js} +5236 -72
- package/dist/{cli-mry0qzym.js → cli-ddaanqkd.js} +123 -10
- package/dist/{cli-0gey5fzy.js → cli-e0kmphd6.js} +2 -2
- package/dist/{cli-zh3fp8v2.js → cli-e46hg0xw.js} +1 -1
- package/dist/{cli-jm2vfpfd.js → cli-e5bzrn01.js} +1 -1
- package/dist/{cli-qxnf8z2z.js → cli-excnnjg2.js} +165 -153
- package/dist/{cli-71ptav7x.js → cli-ferkkrg9.js} +1 -1
- package/dist/{cli-vpf89f34.js → cli-fmjd0t1y.js} +3 -3
- package/dist/{cli-rm6hqj3z.js → cli-fyt2g4wd.js} +33 -139
- package/dist/cli-g08zdaec.js +55 -0
- package/dist/{cli-ehq736cn.js → cli-g7s47cc5.js} +4 -4
- package/dist/{cli-82ae98pz.js → cli-gz6q4eve.js} +3 -3
- package/dist/{cli-82jg7fp9.js → cli-he5nxaa8.js} +1 -1
- package/dist/{cli-rqkxrmgw.js → cli-je518txm.js} +39 -14
- package/dist/{cli-8hs41zy2.js → cli-jtjtabxe.js} +1 -1
- package/dist/{cli-611a1294.js → cli-k0wwfqbg.js} +18 -1
- package/dist/{cli-nzxr556s.js → cli-k1nje3v3.js} +38 -43
- package/dist/{cli-3h4nhjn8.js → cli-k8196sh2.js} +9 -7
- package/dist/{cli-afrrppsw.js → cli-k899ehvh.js} +2 -2
- package/dist/{cli-0731hvbw.js → cli-m0da8j35.js} +23 -9
- package/dist/cli-m2z8jagn.js +12078 -0
- package/dist/{cli-8veytvbh.js → cli-mkk9rnzz.js} +5 -5
- package/dist/{cli-7wspm5gm.js → cli-n6bv12jn.js} +528 -6
- package/dist/{cli-spknvxbq.js → cli-nmzhp1b5.js} +14 -12
- package/dist/{cli-p599f1qm.js → cli-p82cnnjq.js} +1 -1
- package/dist/{cli-xtjhfmpc.js → cli-pc6n7fre.js} +1 -1
- package/dist/{cli-vbyfwh92.js → cli-pjctyea3.js} +2 -2
- package/dist/{cli-nmbmy64z.js → cli-pq73h5mz.js} +3 -3
- package/dist/{cli-aa6yxc7m.js → cli-pz4rk021.js} +1 -1
- package/dist/{cli-7wcyk2s5.js → cli-q3tkegby.js} +1 -1
- package/dist/cli-qghe0h66.js +67 -0
- package/dist/{cli-6s7vdcta.js → cli-qh4d4tvk.js} +4 -4
- package/dist/{cli-mmwm7zbf.js → cli-rtt8g4v9.js} +1 -1
- package/dist/{cli-kg8hchyg.js → cli-sa02jsqt.js} +1 -1
- package/dist/{cli-1h3wcpbw.js → cli-snpj5zbj.js} +2 -2
- package/dist/{cli-a7v854rf.js → cli-tgrv9cjx.js} +263 -12
- package/dist/{cli-a47xy8eq.js → cli-vz22fyqv.js} +186 -54
- package/dist/{cli-1ayk1eas.js → cli-wk5yrfwd.js} +285 -42
- package/dist/{cli-1338796d.js → cli-ws19768n.js} +1755 -119
- package/dist/{cli-70r77n04.js → cli-xae4g51r.js} +1 -1
- package/dist/{cli-gf5hbmdr.js → cli-yjdgea32.js} +3 -3
- package/dist/{cli-xbkdm710.js → cli-yndmfxb3.js} +3 -3
- package/dist/{cli-rhw40jgb.js → cli-yyj3j5m4.js} +2 -2
- package/dist/cli.js +26 -25
- package/dist/{cloudflare-workers-ai-system-one-bm60fjm0.js → cloudflare-workers-ai-system-one-ef2a980q.js} +2 -2
- package/dist/{codex-adapter-q6k3gnyg.js → codex-adapter-cf2yxe9m.js} +3 -2
- package/dist/{codex-hook-9efm2x1m.js → codex-hook-a0c6g6t6.js} +1 -1
- package/dist/{codex-session-runner-3mwmk3d9.js → codex-session-runner-6vfzdgbd.js} +3 -2
- package/dist/{commands-evrenjn9.js → commands-t3mfy7vn.js} +9 -3
- package/dist/{controller-xjp8vswh.js → controller-q7xrbaz0.js} +8 -3
- package/dist/{controllers-connect-pp5jnxvc.js → controllers-connect-c6nm70kg.js} +20 -19
- package/dist/{cursor-adapter-yf47w4t0.js → cursor-adapter-ftd81ga8.js} +1 -1
- package/dist/{db-zxpw6aht.js → db-dk572x25.js} +3 -3
- package/dist/{db-rgfsh91f.js → db-vemtpmcc.js} +14 -4
- package/dist/{devtools-82fzqra8.js → devtools-qxfgbsqz.js} +1 -1
- package/dist/{dispatcher-smasgws7.js → dispatcher-kh7ecxh9.js} +17 -16
- package/dist/{docker-rrjhaqt9.js → docker-c1a3gqmf.js} +89 -22
- package/dist/{dsh-adapter-ftyy8dnp.js → dsh-adapter-v8628r89.js} +1 -1
- package/dist/{e2b-w1p0bnpm.js → e2b-fr12yccx.js} +5 -5
- package/dist/{e2b-qcaj675y.js → e2b-x6ywzak3.js} +3 -3
- package/dist/{easter-egg-3d-yyts7p16.js → easter-egg-3d-nenw4x63.js} +1 -1
- package/dist/{embedding-space-1z0mbg95.js → embedding-space-0jepb239.js} +6 -6
- package/dist/{embeddings-ygeg7tm7.js → embeddings-xxt49yxg.js} +1 -1
- package/dist/{execute-14qhqp4d.js → execute-1mhw6e4x.js} +1 -1
- package/dist/{external-channel-ttgrs3sx.js → external-channel-55v12e60.js} +2 -2
- package/dist/{fx-adapter-gt6pncj2.js → fx-adapter-bs8wqrk5.js} +6 -5
- package/dist/{google-generative-ai-yvmdxyxa.js → google-generative-ai-v94hr7h0.js} +5 -5
- package/dist/{google-vertex-jrtdh9gs.js → google-vertex-g7vr6cf8.js} +5 -5
- package/dist/{grok-adapter-sm4m5k4g.js → grok-adapter-gpjqmkcq.js} +6 -5
- package/dist/handlers-zxmp1ta4.js +32 -0
- package/dist/{heartbeat-qahz4p62.js → heartbeat-k42svnr0.js} +20 -19
- package/dist/{hook-4fd5wq5w.js → hook-114m7hap.js} +4 -3
- package/dist/{hook-kj3d398m.js → hook-6nphweh0.js} +24 -9
- package/dist/{http-1ted0j1k.js → http-r8cc4wz7.js} +1196 -211
- package/dist/index-a8phxqnk.js +37 -0
- package/dist/{index-q4b917zs.js → index-e3s8wmxy.js} +1 -1
- package/dist/{index-6rq3r5zb.js → index-fpk4bcd9.js} +1 -1
- package/dist/{index-5rk6rfzr.js → index-fvzke5kx.js} +1 -1
- package/dist/index-k6h00t4c.js +30 -0
- package/dist/{index-7v51awbn.js → index-nh3wyqdt.js} +1027 -577
- package/dist/{index-yqhz88yy.js → index-pxn30mse.js} +8 -8
- package/dist/index-xrz7te8h.js +33 -0
- package/dist/{keepalive-6cf311t5.js → keepalive-x060nt9p.js} +3 -3
- package/dist/lead-956sd2yc.js +71 -0
- package/dist/{maintenance-a4bm1bmt.js → maintenance-2xxfexhf.js} +1 -1
- package/dist/{mistral-conversations-4pmwj1c0.js → mistral-conversations-3gjpdb4b.js} +4 -4
- package/dist/{oauth-refresh-sweep-3h0dfw1k.js → oauth-refresh-sweep-fckc4ar5.js} +2 -2
- package/dist/{onboard-myn5hraa.js → onboard-zc48j237.js} +5 -5
- package/dist/{openai-codex-responses-44j573nm.js → openai-codex-responses-8pbxq9h5.js} +5 -5
- package/dist/{openai-completions-a4gee2a8.js → openai-completions-rm00s912.js} +4 -4
- package/dist/{openai-decisions-w4qkrcar.js → openai-decisions-8v957r2r.js} +1 -1
- package/dist/{openai-responses-rbp6h5kr.js → openai-responses-agxpf96k.js} +5 -5
- package/dist/{opencode-adapter-p2nkb5am.js → opencode-adapter-r690h1cr.js} +4 -3
- package/dist/{otel-impl-a1a0ef6b.js → otel-impl-r5xbh81q.js} +4 -4
- package/dist/{pi-mono-adapter-rzmpb72a.js → pi-mono-adapter-c7v8sdec.js} +7 -6
- package/dist/{pricing-refresh-83drrnxj.js → pricing-refresh-3pmre11v.js} +3 -3
- package/dist/{rbac-roles-s8y6ecb5.js → rbac-roles-3vbshwsb.js} +1 -1
- package/dist/{rbac-roles-0fb6e7pj.js → rbac-roles-910mmkgz.js} +2 -2
- package/dist/{render-v2-twmbgrz4.js → render-v2-pxykkbab.js} +3 -3
- package/dist/{resume-zfqc36xj.js → resume-adda0bwy.js} +6 -6
- package/dist/{runtime-qwggdpqr.js → runtime-fnbm7stk.js} +1 -1
- package/dist/{session-access-sc9pn9da.js → session-access-2fvamrdc.js} +4 -4
- package/dist/{session-source-backfill-qh07xr8g.js → session-source-backfill-08xvv0sm.js} +2 -2
- package/dist/{setup-4fr0m7a1.js → setup-1aqmvmh1.js} +3 -3
- package/dist/{typesafe-system-one-5mavm259.js → typesafe-system-one-0bmqcxfg.js} +2 -2
- package/dist/{virtual-modules-fh4ha15b.js → virtual-modules-d2pjk9j1.js} +5 -5
- package/dist/{work-objects-0wr8zxct.js → work-objects-9s0yrm5j.js} +20 -19
- package/dist/{worker-follow-up-ktyyazyp.js → worker-follow-up-3q78fqmr.js} +17 -16
- package/dist/worker-y15hy08h.js +71 -0
- package/openapi.json +289 -4
- package/package.json +9 -8
- package/src/apps/definition.ts +6 -5
- package/src/be/db/page-theme-tokens.ts +12 -0
- package/src/be/db/script-runs.ts +23 -0
- package/src/be/db/tasks/read.ts +131 -4
- package/src/be/db/tasks/write.ts +19 -0
- package/src/be/db-client.ts +114 -11
- package/src/be/db.ts +49 -6
- package/src/be/memory/providers/sqlite-store.ts +49 -12
- package/src/be/migrations/260_runtime_pool_cache.sql +20 -0
- package/src/be/migrations/262_session_visibility_indexes.sql +18 -0
- package/src/be/migrations/263_task_list_filter_index.sql +11 -0
- package/src/be/migrations/264_slack_thread_cover_index.sql +9 -0
- package/src/be/migrations/266_script_runs_source_task.sql +11 -0
- package/src/be/migrations/269_pages_design_system.sql +23 -0
- package/src/be/runtime-pools/cache-cleanup.ts +109 -0
- package/src/be/runtime-pools/db.ts +65 -6
- package/src/be/runtime-pools/remote-controller.ts +5 -0
- package/src/be/runtime-pools/supervisor.ts +33 -2
- package/src/be/scripts/typecheck.ts +22 -0
- package/src/be/seed/schedules-seeder.ts +0 -10
- package/src/be/seed-scripts/catalog/catalog-report.inline.ts +2 -0
- package/src/be/seed-scripts/catalog/catalog-report.ts +2 -0
- package/src/be/seed-scripts/catalog/memory-eval.ts +2 -0
- package/src/be/seed-scripts/catalog/swarm-update-check.ts +150 -0
- package/src/be/seed-scripts/catalog/task-failure-audit.ts +5 -1
- package/src/be/seed-scripts/index.ts +9 -0
- package/src/be/seed-skills/bundled-files.generated.json +3 -3
- package/src/be/swarm-config-guard.ts +32 -0
- package/src/be/task-auto-title-listener.ts +127 -0
- package/src/commands/controller.ts +4 -0
- package/src/commands/entrypoint-api-readiness.ts +74 -0
- package/src/commands/onboard/agent-fs-version.ts +1 -1
- package/src/commands/profile-sync.ts +151 -16
- package/src/commands/runner.ts +15 -7
- package/src/hooks/hook.ts +20 -9
- package/src/http/index.ts +4 -1
- package/src/http/list-total-cache.ts +14 -7
- package/src/http/memory.ts +38 -9
- package/src/http/pages-public.ts +93 -129
- package/src/http/pages.ts +94 -21
- package/src/http/script-runs.ts +174 -5
- package/src/http/status.ts +10 -2
- package/src/http/tasks.ts +4 -2
- package/src/pages/browser-sdk.ts +48 -21
- package/src/pages/color-literals.ts +115 -0
- package/src/pages/page-head.ts +766 -0
- package/src/pages/version.ts +3 -0
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/codex-adapter.ts +1 -0
- package/src/providers/codex-app-server.ts +27 -1
- package/src/providers/fx-adapter.ts +1 -1
- package/src/providers/pi-mono-extension.ts +30 -15
- package/src/runtime-providers/controller-protocol.ts +14 -1
- package/src/runtime-providers/controller.ts +5 -0
- package/src/runtime-providers/docker.ts +108 -23
- package/src/runtime-providers/types.ts +16 -0
- package/src/script-workflows/workflow-ctx.ts +8 -0
- package/src/scripts-runtime/types/stdlib.d.ts +22 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +22 -0
- package/src/server-user.ts +1 -0
- package/src/slack/commands.ts +5 -1
- package/src/slack/handlers.ts +37 -2
- package/src/slack/left-threads.ts +27 -4
- package/src/tasks/follow-up-gate.ts +318 -0
- package/src/tasks/follow-up-redelegation-guard.ts +155 -0
- package/src/tasks/worker-follow-up.ts +21 -1
- package/src/tests/claude-artifacts-read-script.test.ts +209 -0
- package/src/tests/codex-app-server.test.ts +59 -0
- package/src/tests/codex-gateway-route.test.ts +50 -1
- package/src/tests/create-page-tool.test.ts +501 -0
- package/src/tests/db-client-busy-retry.test.ts +81 -0
- package/src/tests/db-client.test.ts +21 -0
- package/src/tests/db-task-read-contract.test.ts +9 -2
- package/src/tests/db-task-write-contract.test.ts +7 -1
- package/src/tests/db-tasks-read.test.ts +21 -0
- package/src/tests/entrypoint-api-readiness.test.ts +416 -210
- package/src/tests/explicit-model-validation.test.ts +14 -8
- package/src/tests/fixtures/pages/head-v1.html +56 -0
- package/src/tests/follow-up-gate-shadow.test.ts +513 -0
- package/src/tests/follow-up-redelivery-guard.test.ts +432 -202
- package/src/tests/identity-field-budget.test.ts +1 -1
- package/src/tests/internal-ai/credentials.test.ts +62 -0
- package/src/tests/internal-ai/task-title.test.ts +283 -0
- package/src/tests/list-total-cache.test.ts +27 -2
- package/src/tests/memory-fts-populate.test.ts +11 -9
- package/src/tests/memory-retrieval-purge.test.ts +80 -0
- package/src/tests/merge-gate-detect-changes.test.ts +145 -0
- package/src/tests/migration-260-runtime-pool-cache.test.ts +118 -0
- package/src/tests/page-proxy.test.ts +1 -1
- package/src/tests/page-session-dev-cookie.test.ts +188 -0
- package/src/tests/pages-frame-ancestors.test.ts +28 -1
- package/src/tests/pages-head-v2.test.ts +534 -0
- package/src/tests/pages-http.test.ts +330 -0
- package/src/tests/pages-public-html.test.ts +43 -0
- package/src/tests/pages-storage.test.ts +182 -0
- package/src/tests/pages-versioning.test.ts +72 -0
- package/src/tests/profile-sync-stale-writeback.test.ts +334 -0
- package/src/tests/profile-sync.test.ts +11 -15
- package/src/tests/query-audit-plans.test.ts +27 -0
- package/src/tests/runtime-cache-cleanup.test.ts +367 -0
- package/src/tests/runtime-e2b-pools.test.ts +41 -0
- package/src/tests/runtime-pools-db.test.ts +98 -0
- package/src/tests/runtime-pools-http.test.ts +29 -0
- package/src/tests/runtime-providers-docker.test.ts +253 -0
- package/src/tests/runtime-remote-controller.test.ts +66 -2
- package/src/tests/runtime-supervisor.test.ts +66 -2
- package/src/tests/scheduled-task-required-params-migration.test.ts +3 -1
- package/src/tests/script-connections.test.ts +13 -0
- package/src/tests/script-runs-http.test.ts +684 -2
- package/src/tests/seed-registry.test.ts +28 -6
- package/src/tests/seed-schedules.test.ts +61 -8
- package/src/tests/seed-scripts.test.ts +168 -2
- package/src/tests/slack-leave-thread.test.ts +145 -5
- package/src/tests/slack-render-v2-query-plans.test.ts +24 -2
- package/src/tests/status.test.ts +11 -0
- package/src/tests/swarm-diff.test.ts +121 -2
- package/src/tests/task-auto-title-config-guard.test.ts +37 -0
- package/src/tests/task-auto-title-listener.test.ts +165 -0
- package/src/tests/tasks-readable-row.test.ts +155 -0
- package/src/tests/theme-import.test.ts +758 -0
- package/src/tests/themes-page-theme.test.ts +155 -0
- package/src/tests/themes-presets.test.ts +172 -0
- package/src/tests/workflow-script-principal.test.ts +2 -1
- package/src/themes/classics.ts +949 -0
- package/src/themes/import.ts +420 -0
- package/src/themes/page-fields.ts +40 -0
- package/src/themes/page-theme.ts +102 -0
- package/src/themes/presets.ts +561 -0
- package/src/themes/tokens.ts +218 -0
- package/src/tools/app-upsert.ts +1 -1
- package/src/tools/create-page.ts +118 -12
- package/src/tools/send-task.ts +35 -47
- package/src/tools/slack-leave-thread.ts +1 -1
- package/src/tools/task-dedup.ts +45 -21
- package/src/tools/utils.ts +33 -0
- package/src/types.ts +83 -3
- package/src/utils/constants.ts +19 -0
- package/src/utils/follow-up-gate-schedule-ids.ts +13 -0
- package/src/utils/internal-ai/credentials.ts +146 -93
- package/src/utils/internal-ai/index.ts +10 -0
- package/src/utils/internal-ai/models.ts +18 -0
- package/src/utils/internal-ai/task-title.ts +282 -0
- package/src/utils/page-session.ts +37 -0
- package/templates/schedules/daily-status-report/content.md +88 -2
- package/templates/schedules/daily-swarm-update-check/content.md +16 -40
- package/templates/skills/apps/SKILL.md +1 -1
- package/templates/skills/apps/content.md +1 -1
- package/templates/skills/composio-google-docs/content.md +10 -0
- package/templates/skills/heartbeat-runbook/content.md +1 -1
- package/templates/skills/pages/config.json +1 -1
- package/templates/skills/pages/content.md +539 -86
- package/templates/skills/pages/files/examples/annotated-pr.html +21 -12
- package/templates/skills/pages/files/examples/multiplayer-board.html +41 -41
- package/templates/skills/pages/files/examples/report-page.html +125 -124
- package/templates/skills/script-workflows/content.md +19 -1
- package/templates/skills/swarm-docs/content.md +1 -0
- package/templates/skills/swarm-scripts/SKILL.md +2 -0
- package/templates/skills/swarm-scripts/content.md +2 -0
- package/dist/cli-2pnswgh8.js +0 -189
- package/dist/cli-dznrgaep.js +0 -30
- package/dist/cli-w3hcrxht.js +0 -6985
- package/dist/handlers-vwmba1m2.js +0 -31
- package/dist/index-5r71rf98.js +0 -32
- package/dist/index-anmwxs87.js +0 -29
- package/dist/index-spp0ra5c.js +0 -36
- package/dist/lead-fjy418cw.js +0 -69
- package/dist/worker-0c5tyzqe.js +0 -69
- package/templates/schedules/daily-workflow-health-audit/config.json +0 -19
- package/templates/schedules/daily-workflow-health-audit/content.md +0 -191
|
@@ -4,32 +4,41 @@
|
|
|
4
4
|
|
|
5
5
|
No <script> import and no bundling: <swarm-diff>, <swarm-diff-jumps> and
|
|
6
6
|
window.swarmUi.renderDiff are injected into every HTML page automatically.
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
Each "text" is the code line WITHOUT its +, - or space marker: the
|
|
9
|
+
component draws the marker in its own column. old_lines counts the context
|
|
10
|
+
and deleted lines, and new_lines counts the context and added lines. Inside
|
|
11
|
+
the JSON, write < as \u003c and & as \u0026.
|
|
12
|
+
|
|
13
|
+
Each hunk gets id="swarm-diff-<slug>". The slug is <file>-<old_start> in
|
|
14
|
+
lowercase, with each run of characters other than a-z and 0-9 changed to
|
|
15
|
+
one "-". So src/foo.ts at old_start 10 gets id="swarm-diff-src-foo-ts-10".
|
|
16
|
+
<swarm-diff-jumps> builds its jump list from these ids, and external links
|
|
17
|
+
can deep-link a specific hunk.
|
|
9
18
|
-->
|
|
10
19
|
<html lang="en">
|
|
11
20
|
<head>
|
|
12
21
|
<meta charset="utf-8">
|
|
13
22
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
14
|
-
<title>PR #1234
|
|
23
|
+
<title>PR #1234: console.log cleanup</title>
|
|
15
24
|
</head>
|
|
16
25
|
<body>
|
|
17
|
-
<h1>PR #1234
|
|
26
|
+
<h1>PR #1234: cleanup raw <code>console.log</code> calls</h1>
|
|
18
27
|
<p>Replaces ad-hoc logging with the project logger.</p>
|
|
19
28
|
|
|
20
29
|
<swarm-diff-jumps></swarm-diff-jumps>
|
|
21
30
|
|
|
22
31
|
<swarm-diff file="src/foo.ts" base-sha="abc123" head-sha="def456">
|
|
23
32
|
{ "hunks": [
|
|
24
|
-
{ "old_start": 10, "old_lines":
|
|
33
|
+
{ "old_start": 10, "old_lines": 2, "new_start": 10, "new_lines": 3,
|
|
25
34
|
"lines": [
|
|
26
|
-
{ "type": "context", "text": "
|
|
27
|
-
{ "type": "del", "text": "
|
|
28
|
-
{ "type": "add", "text": "
|
|
29
|
-
{ "type": "add", "text": "
|
|
35
|
+
{ "type": "context", "text": "export function load(id) {" },
|
|
36
|
+
{ "type": "del", "text": " console.log(id);" },
|
|
37
|
+
{ "type": "add", "text": " logger.info({ id });" },
|
|
38
|
+
{ "type": "add", "text": " return cache.get(id);" }
|
|
30
39
|
],
|
|
31
40
|
"annotations": [
|
|
32
|
-
{ "line": 12, "severity": "warn", "text": "
|
|
41
|
+
{ "line": 12, "severity": "warn", "text": "Returns undefined on a cache miss" }
|
|
33
42
|
]
|
|
34
43
|
}
|
|
35
44
|
] }
|
|
@@ -39,8 +48,8 @@
|
|
|
39
48
|
{ "hunks": [
|
|
40
49
|
{ "old_start": 5, "old_lines": 1, "new_start": 5, "new_lines": 1,
|
|
41
50
|
"lines": [
|
|
42
|
-
{ "type": "del", "text": "
|
|
43
|
-
{ "type": "add", "text": "
|
|
51
|
+
{ "type": "del", "text": "console.error('boom');" },
|
|
52
|
+
{ "type": "add", "text": "logger.error('boom');" }
|
|
44
53
|
]
|
|
45
54
|
}
|
|
46
55
|
] }
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
<title>Shared board</title>
|
|
7
7
|
<style>
|
|
8
8
|
:root {
|
|
9
|
-
color:
|
|
10
|
-
background:
|
|
11
|
-
font-family:
|
|
9
|
+
color: var(--color-foreground);
|
|
10
|
+
background: var(--color-background);
|
|
11
|
+
font-family: var(--font-sans);
|
|
12
12
|
font-synthesis: none;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -18,24 +18,24 @@
|
|
|
18
18
|
margin: 0;
|
|
19
19
|
min-width: 320px;
|
|
20
20
|
padding: 0;
|
|
21
|
-
background:
|
|
22
|
-
color:
|
|
23
|
-
font-family:
|
|
21
|
+
background: var(--color-background);
|
|
22
|
+
color: var(--color-foreground);
|
|
23
|
+
font-family: var(--font-sans);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
button, input, textarea { font: inherit; }
|
|
27
27
|
|
|
28
28
|
button {
|
|
29
|
-
border: 1px solid
|
|
30
|
-
border-radius:
|
|
31
|
-
background:
|
|
32
|
-
color:
|
|
29
|
+
border: 1px solid var(--color-primary);
|
|
30
|
+
border-radius: var(--radius-md);
|
|
31
|
+
background: var(--color-primary);
|
|
32
|
+
color: var(--color-primary-foreground);
|
|
33
33
|
cursor: pointer;
|
|
34
34
|
padding: 10px 14px;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
button:hover { background:
|
|
38
|
-
button:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid
|
|
37
|
+
button:hover { background: color-mix(in oklab, var(--color-primary) 90%, transparent); }
|
|
38
|
+
button:focus-visible, input:focus-visible, textarea:focus-visible { outline: 3px solid var(--color-ring); outline-offset: 2px; }
|
|
39
39
|
button:disabled { cursor: not-allowed; opacity: .5; }
|
|
40
40
|
|
|
41
41
|
.page { max-width: 1120px; margin: 0 auto; padding: 32px 24px 56px; }
|
|
@@ -45,26 +45,26 @@
|
|
|
45
45
|
align-items: flex-start;
|
|
46
46
|
justify-content: space-between;
|
|
47
47
|
gap: 24px;
|
|
48
|
-
border-bottom: 1px solid
|
|
48
|
+
border-bottom: 1px solid var(--color-border);
|
|
49
49
|
padding-bottom: 24px;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
h1, h2, p { margin-top: 0; }
|
|
53
53
|
h1 { font-size: clamp(2rem, 5vw, 3rem); letter-spacing: -.04em; margin-bottom: 8px; }
|
|
54
54
|
h2 { font-size: 1.15rem; letter-spacing: -.02em; margin-bottom: 16px; }
|
|
55
|
-
.lede, .muted { color:
|
|
55
|
+
.lede, .muted { color: var(--color-muted-foreground); }
|
|
56
56
|
.lede { max-width: 46rem; margin-bottom: 0; }
|
|
57
57
|
|
|
58
58
|
.viewer {
|
|
59
59
|
min-width: 170px;
|
|
60
|
-
border: 1px solid
|
|
61
|
-
border-radius:
|
|
62
|
-
background:
|
|
60
|
+
border: 1px solid var(--color-border);
|
|
61
|
+
border-radius: var(--radius-md);
|
|
62
|
+
background: var(--color-card);
|
|
63
63
|
padding: 12px;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
.eyebrow {
|
|
67
|
-
color:
|
|
67
|
+
color: var(--color-muted-foreground);
|
|
68
68
|
display: block;
|
|
69
69
|
font-size: .72rem;
|
|
70
70
|
font-weight: 700;
|
|
@@ -76,28 +76,28 @@
|
|
|
76
76
|
.viewer-name { font-weight: 700; overflow-wrap: anywhere; }
|
|
77
77
|
|
|
78
78
|
.notice {
|
|
79
|
-
border: 1px solid
|
|
80
|
-
border-left: 4px solid
|
|
81
|
-
border-radius:
|
|
82
|
-
background:
|
|
79
|
+
border: 1px solid var(--color-border);
|
|
80
|
+
border-left: 4px solid var(--color-primary);
|
|
81
|
+
border-radius: var(--radius-md);
|
|
82
|
+
background: var(--color-card);
|
|
83
83
|
margin: 24px 0;
|
|
84
84
|
min-height: 47px;
|
|
85
85
|
padding: 12px 14px;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
.notice[data-tone="error"] { border-left-color:
|
|
89
|
-
.notice[data-tone="stale"] { border-left-color:
|
|
88
|
+
.notice[data-tone="error"] { border-left-color: var(--color-status-error); background: color-mix(in oklab, var(--color-status-error) 10%, var(--color-card)); }
|
|
89
|
+
.notice[data-tone="stale"] { border-left-color: var(--color-status-warning); background: color-mix(in oklab, var(--color-status-warning) 10%, var(--color-card)); }
|
|
90
90
|
.notice:empty { display: none; }
|
|
91
91
|
|
|
92
92
|
.grid { display: grid; gap: 24px; grid-template-columns: minmax(0, 1.65fr) minmax(260px, .85fr); }
|
|
93
|
-
.panel { border: 1px solid
|
|
93
|
+
.panel { border: 1px solid var(--color-border); border-radius: var(--radius-xl); background: var(--color-card); padding: 20px; }
|
|
94
94
|
.panel + .panel { margin-top: 24px; }
|
|
95
95
|
|
|
96
96
|
.add-row { display: grid; gap: 8px; grid-template-columns: minmax(0, 1fr) auto; margin-bottom: 16px; }
|
|
97
97
|
input, textarea {
|
|
98
|
-
border: 1px solid
|
|
99
|
-
border-radius:
|
|
100
|
-
background:
|
|
98
|
+
border: 1px solid var(--color-input);
|
|
99
|
+
border-radius: var(--radius-md);
|
|
100
|
+
background: var(--color-card);
|
|
101
101
|
color: inherit;
|
|
102
102
|
padding: 10px 12px;
|
|
103
103
|
width: 100%;
|
|
@@ -107,10 +107,10 @@
|
|
|
107
107
|
label { display: block; font-size: .88rem; font-weight: 650; margin-bottom: 8px; }
|
|
108
108
|
|
|
109
109
|
.cards, .peers { list-style: none; margin: 0; padding: 0; }
|
|
110
|
-
.cards { border-top: 1px solid
|
|
110
|
+
.cards { border-top: 1px solid var(--color-border-subtle); }
|
|
111
111
|
.card {
|
|
112
112
|
align-items: center;
|
|
113
|
-
border-bottom: 1px solid
|
|
113
|
+
border-bottom: 1px solid var(--color-border-subtle);
|
|
114
114
|
display: flex;
|
|
115
115
|
gap: 12px;
|
|
116
116
|
justify-content: space-between;
|
|
@@ -119,31 +119,31 @@
|
|
|
119
119
|
|
|
120
120
|
.card-title { font-weight: 650; overflow-wrap: anywhere; }
|
|
121
121
|
.card-status {
|
|
122
|
-
background:
|
|
123
|
-
border-color:
|
|
124
|
-
color:
|
|
122
|
+
background: var(--color-card);
|
|
123
|
+
border-color: var(--color-input);
|
|
124
|
+
color: var(--color-foreground);
|
|
125
125
|
flex: 0 0 auto;
|
|
126
126
|
font-size: .82rem;
|
|
127
127
|
padding: 7px 10px;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
.card-status[data-done="true"] { background:
|
|
131
|
-
.empty { color:
|
|
132
|
-
.agent-note { background:
|
|
133
|
-
.agent-note:empty::before { color:
|
|
130
|
+
.card-status[data-done="true"] { background: var(--color-status-success); border-color: var(--color-status-success-strong); color: var(--color-status-success-foreground); }
|
|
131
|
+
.empty { color: var(--color-muted-foreground); padding: 16px 0 4px; }
|
|
132
|
+
.agent-note { background: var(--color-muted); border-radius: var(--radius-md); min-height: 46px; padding: 12px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
133
|
+
.agent-note:empty::before { color: var(--color-muted-foreground); content: "No note yet. A server-side agent can write one here."; }
|
|
134
134
|
|
|
135
135
|
.peers { display: grid; gap: 8px; }
|
|
136
136
|
.peer {
|
|
137
|
-
border: 1px solid
|
|
138
|
-
border-radius:
|
|
137
|
+
border: 1px solid var(--color-border-subtle);
|
|
138
|
+
border-radius: var(--radius-md);
|
|
139
139
|
display: grid;
|
|
140
140
|
gap: 3px;
|
|
141
141
|
padding: 10px;
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
.peer-name { font-weight: 650; overflow-wrap: anywhere; }
|
|
145
|
-
.room-meta { color:
|
|
146
|
-
.save-state { color:
|
|
145
|
+
.room-meta { color: var(--color-muted-foreground); font-family: var(--font-mono); font-size: .75rem; margin: 0 0 16px; }
|
|
146
|
+
.save-state { color: var(--color-muted-foreground); font-size: .82rem; margin: 8px 0 0; min-height: 1.2em; }
|
|
147
147
|
|
|
148
148
|
@media (max-width: 720px) {
|
|
149
149
|
.page { padding: 24px 16px 40px; }
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<!--
|
|
3
|
-
Reference report page
|
|
3
|
+
Reference report page for the swarm design system (designVersion 2).
|
|
4
4
|
|
|
5
|
-
Copy this as the starting point for
|
|
6
|
-
replace the content.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
horizontal scroll on mobile, and no decorative gradients or nested cards.
|
|
5
|
+
Copy this as the starting point for a dense report or dashboard page, then
|
|
6
|
+
replace the content. It uses only the swarm-* primitives, the theme tokens,
|
|
7
|
+
and a few Tailwind layout utilities. It has zero color literals, so it
|
|
8
|
+
follows the viewer's theme and dark mode inside the dashboard.
|
|
10
9
|
|
|
11
10
|
Publish with:
|
|
12
11
|
create_page({
|
|
@@ -23,134 +22,95 @@
|
|
|
23
22
|
<meta charset="utf-8">
|
|
24
23
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
25
24
|
<title>Q2 SEO Performance</title>
|
|
26
|
-
<style>
|
|
27
|
-
:root {
|
|
28
|
-
color-scheme: light;
|
|
29
|
-
--bg: #f6f4f0;
|
|
30
|
-
--panel: #ffffff;
|
|
31
|
-
--ink: #18181b;
|
|
32
|
-
--muted: #62646a;
|
|
33
|
-
--line: #dedbd2;
|
|
34
|
-
--accent: #2563eb;
|
|
35
|
-
--danger: #b42318;
|
|
36
|
-
--warn: #b54708;
|
|
37
|
-
--ok: #067647;
|
|
38
|
-
--radius: 8px;
|
|
39
|
-
--shadow: 0 1px 2px rgba(24, 24, 27, 0.04);
|
|
40
|
-
}
|
|
41
|
-
* { box-sizing: border-box; }
|
|
42
|
-
body {
|
|
43
|
-
margin: 0;
|
|
44
|
-
background: var(--bg);
|
|
45
|
-
color: var(--ink);
|
|
46
|
-
font-family: "SF Pro Display", "Geist Sans", "Helvetica Neue", ui-sans-serif, system-ui, sans-serif;
|
|
47
|
-
font-size: 16px;
|
|
48
|
-
line-height: 1.55;
|
|
49
|
-
}
|
|
50
|
-
main {
|
|
51
|
-
width: min(1120px, calc(100% - 32px));
|
|
52
|
-
margin: 0 auto;
|
|
53
|
-
padding: 48px 0 72px;
|
|
54
|
-
}
|
|
55
|
-
header { margin-bottom: 32px; }
|
|
56
|
-
.eyebrow {
|
|
57
|
-
margin: 0 0 8px;
|
|
58
|
-
color: var(--muted);
|
|
59
|
-
font-size: 13px;
|
|
60
|
-
font-weight: 700;
|
|
61
|
-
letter-spacing: 0.08em;
|
|
62
|
-
text-transform: uppercase;
|
|
63
|
-
}
|
|
64
|
-
h1 {
|
|
65
|
-
margin: 0;
|
|
66
|
-
max-width: 780px;
|
|
67
|
-
font-size: clamp(2rem, 4vw, 3rem);
|
|
68
|
-
line-height: 1.05;
|
|
69
|
-
letter-spacing: 0;
|
|
70
|
-
}
|
|
71
|
-
.lede {
|
|
72
|
-
max-width: 760px;
|
|
73
|
-
margin: 16px 0 0;
|
|
74
|
-
color: var(--muted);
|
|
75
|
-
font-size: 18px;
|
|
76
|
-
}
|
|
77
|
-
.metrics {
|
|
78
|
-
display: grid;
|
|
79
|
-
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
80
|
-
gap: 12px;
|
|
81
|
-
margin: 32px 0;
|
|
82
|
-
}
|
|
83
|
-
.metric, .section {
|
|
84
|
-
background: var(--panel);
|
|
85
|
-
border: 1px solid var(--line);
|
|
86
|
-
border-radius: var(--radius);
|
|
87
|
-
box-shadow: var(--shadow);
|
|
88
|
-
}
|
|
89
|
-
.metric { padding: 18px; }
|
|
90
|
-
.metric strong {
|
|
91
|
-
display: block;
|
|
92
|
-
font-size: 32px;
|
|
93
|
-
line-height: 1;
|
|
94
|
-
font-variant-numeric: tabular-nums;
|
|
95
|
-
}
|
|
96
|
-
.metric span {
|
|
97
|
-
display: block;
|
|
98
|
-
margin-top: 8px;
|
|
99
|
-
color: var(--muted);
|
|
100
|
-
font-size: 13px;
|
|
101
|
-
font-weight: 650;
|
|
102
|
-
}
|
|
103
|
-
.section {
|
|
104
|
-
margin-top: 18px;
|
|
105
|
-
padding: 24px;
|
|
106
|
-
}
|
|
107
|
-
h2 { margin: 0 0 12px; font-size: 24px; line-height: 1.2; }
|
|
108
|
-
h3 { margin: 0 0 8px; font-size: 17px; line-height: 1.3; }
|
|
109
|
-
p { margin: 0 0 12px; }
|
|
110
|
-
.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); }
|
|
111
|
-
table { width: 100%; border-collapse: collapse; min-width: 640px; }
|
|
112
|
-
th, td { padding: 10px 12px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
|
|
113
|
-
th { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; }
|
|
114
|
-
td { font-size: 14px; font-variant-numeric: tabular-nums; }
|
|
115
|
-
code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
116
|
-
details { margin-top: 24px; }
|
|
117
|
-
summary { cursor: pointer; font-weight: 700; }
|
|
118
|
-
pre { overflow: auto; padding: 16px; background: #111827; color: #f9fafb; border-radius: var(--radius); }
|
|
119
|
-
@media (max-width: 760px) {
|
|
120
|
-
main { width: min(100% - 24px, 1120px); padding-top: 32px; }
|
|
121
|
-
.metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
122
|
-
.section { padding: 18px; }
|
|
123
|
-
}
|
|
124
|
-
@media (max-width: 520px) {
|
|
125
|
-
.metrics { grid-template-columns: 1fr; }
|
|
126
|
-
.lede { font-size: 16px; }
|
|
127
|
-
}
|
|
128
|
-
</style>
|
|
129
25
|
</head>
|
|
130
26
|
<body>
|
|
131
|
-
<main>
|
|
27
|
+
<main class="swarm-page">
|
|
132
28
|
<header>
|
|
133
|
-
<p class="eyebrow">Generated 2026-06-04</p>
|
|
29
|
+
<p class="swarm-eyebrow">Search Console · Generated 2026-06-04</p>
|
|
134
30
|
<h1>Q2 SEO Performance</h1>
|
|
135
|
-
<p class="lede">Organic
|
|
31
|
+
<p class="swarm-lede">Organic clicks grew 50% this quarter. The next gains depend on fixing thin page metadata and on three high-intent pillar pages.</p>
|
|
32
|
+
<span class="swarm-badge" data-tone="success" data-dot>On track</span>
|
|
136
33
|
</header>
|
|
137
34
|
|
|
138
|
-
<section class="metrics" aria-label="Key metrics">
|
|
139
|
-
<div class="metric"
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
35
|
+
<section class="swarm-metrics" aria-label="Key metrics">
|
|
36
|
+
<div class="swarm-metric">
|
|
37
|
+
<div class="swarm-metric-value">18.6k</div>
|
|
38
|
+
<div class="swarm-metric-label">Organic clicks</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="swarm-metric" data-tone="success">
|
|
41
|
+
<div class="swarm-metric-value">+50%</div>
|
|
42
|
+
<div class="swarm-metric-label">Quarter over quarter</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="swarm-metric" data-tone="warning">
|
|
45
|
+
<div class="swarm-metric-value">23</div>
|
|
46
|
+
<div class="swarm-metric-label">Metadata fixes</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="swarm-metric">
|
|
49
|
+
<div class="swarm-metric-value">3</div>
|
|
50
|
+
<div class="swarm-metric-label">Priority pages</div>
|
|
51
|
+
</div>
|
|
143
52
|
</section>
|
|
144
53
|
|
|
145
|
-
<section class="section">
|
|
146
|
-
<h2>
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
54
|
+
<section class="swarm-section" aria-labelledby="findings-heading">
|
|
55
|
+
<h2 id="findings-heading">Findings</h2>
|
|
56
|
+
<div class="swarm-callout" data-tone="warning">
|
|
57
|
+
<strong>Thin metadata caps growth.</strong> 23 ranking pages share a generic title and description. Fix them before new content ships.
|
|
58
|
+
</div>
|
|
59
|
+
<div class="swarm-callout">
|
|
60
|
+
<strong>One post drives the growth.</strong> The agent swarms post brought about a quarter of the new clicks.
|
|
61
|
+
</div>
|
|
62
|
+
</section>
|
|
63
|
+
|
|
64
|
+
<section class="swarm-section" aria-labelledby="pages-heading">
|
|
65
|
+
<h2 id="pages-heading">Top pages</h2>
|
|
66
|
+
<div class="swarm-toolbar">
|
|
67
|
+
<input class="swarm-input" id="page-filter" type="search" placeholder="Filter pages" aria-label="Filter pages">
|
|
68
|
+
<div class="swarm-segmented" role="group" aria-label="Status">
|
|
69
|
+
<button type="button" data-status-filter="all" aria-pressed="true">All</button>
|
|
70
|
+
<button type="button" data-status-filter="fix" aria-pressed="false">Needs fix</button>
|
|
71
|
+
</div>
|
|
72
|
+
<button class="swarm-button" id="filter-reset" type="button">Reset</button>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="swarm-table-wrap">
|
|
75
|
+
<table class="swarm-table" id="pages-table">
|
|
76
|
+
<thead>
|
|
77
|
+
<tr><th>Page</th><th>Status</th><th class="num">Q1 clicks</th><th class="num">Q2 clicks</th><th class="num">Change</th></tr>
|
|
78
|
+
</thead>
|
|
79
|
+
<tbody>
|
|
80
|
+
<tr data-status="ok"><td class="nowrap">/pricing</td><td><span class="swarm-badge" data-tone="success">Healthy</span></td><td class="num">4,100</td><td class="num">6,900</td><td class="num">+68%</td></tr>
|
|
81
|
+
<tr data-status="fix"><td class="nowrap">/docs/install</td><td><span class="swarm-badge" data-tone="warning">Thin title</span></td><td class="num">3,200</td><td class="num">3,350</td><td class="num">+5%</td></tr>
|
|
82
|
+
<tr data-status="ok"><td class="nowrap">/blog/agent-swarms</td><td><span class="swarm-badge" data-tone="success">Healthy</span></td><td class="num">1,500</td><td class="num">3,100</td><td class="num">+107%</td></tr>
|
|
83
|
+
<tr data-status="fix"><td class="nowrap">/integrations/slack</td><td><span class="swarm-badge" data-tone="error">No description</span></td><td class="num">1,900</td><td class="num">1,700</td><td class="num text-status-error-strong">-11%</td></tr>
|
|
84
|
+
<tr data-status="review"><td class="nowrap">/changelog</td><td><span class="swarm-badge">Not reviewed</span></td><td class="num">400</td><td class="num">1,150</td><td class="num">+188%</td></tr>
|
|
85
|
+
</tbody>
|
|
152
86
|
</table>
|
|
153
87
|
</div>
|
|
88
|
+
<p class="text-muted-foreground" id="filter-empty" hidden>No pages match the filter.</p>
|
|
89
|
+
</section>
|
|
90
|
+
|
|
91
|
+
<section class="swarm-section" aria-labelledby="actions-heading">
|
|
92
|
+
<h2 id="actions-heading">Next actions</h2>
|
|
93
|
+
<div class="grid gap-4 md:grid-cols-2">
|
|
94
|
+
<article class="swarm-panel">
|
|
95
|
+
<h3>Fix thin metadata</h3>
|
|
96
|
+
<dl class="swarm-kv">
|
|
97
|
+
<dt>Owner</dt><dd>Content team</dd>
|
|
98
|
+
<dt>Pages</dt><dd>23</dd>
|
|
99
|
+
<dt>Due</dt><dd>2026-07-15</dd>
|
|
100
|
+
</dl>
|
|
101
|
+
</article>
|
|
102
|
+
<article class="swarm-panel">
|
|
103
|
+
<h3>Publish three pillar pages</h3>
|
|
104
|
+
<dl class="swarm-kv">
|
|
105
|
+
<dt>Owner</dt><dd>Growth team</dd>
|
|
106
|
+
<dt>Topics</dt><dd>Agent orchestration, task routing, swarm costs</dd>
|
|
107
|
+
<dt>Due</dt><dd>2026-08-01</dd>
|
|
108
|
+
</dl>
|
|
109
|
+
</article>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="mt-4">
|
|
112
|
+
<a class="swarm-button" data-variant="primary" href="https://search.google.com/search-console">Open Search Console</a>
|
|
113
|
+
</div>
|
|
154
114
|
</section>
|
|
155
115
|
|
|
156
116
|
<details>
|
|
@@ -158,5 +118,46 @@
|
|
|
158
118
|
<pre>{ "source": "search-console", "range": "2026-04-01/2026-06-30" }</pre>
|
|
159
119
|
</details>
|
|
160
120
|
</main>
|
|
121
|
+
|
|
122
|
+
<script>
|
|
123
|
+
(() => {
|
|
124
|
+
const filter = document.getElementById("page-filter");
|
|
125
|
+
const reset = document.getElementById("filter-reset");
|
|
126
|
+
const empty = document.getElementById("filter-empty");
|
|
127
|
+
const statusButtons = document.querySelectorAll("[data-status-filter]");
|
|
128
|
+
const rows = document.querySelectorAll("#pages-table tbody tr");
|
|
129
|
+
let status = "all";
|
|
130
|
+
|
|
131
|
+
function applyFilter() {
|
|
132
|
+
const query = filter.value.trim().toLowerCase();
|
|
133
|
+
let shown = 0;
|
|
134
|
+
for (const row of rows) {
|
|
135
|
+
const visible =
|
|
136
|
+
row.textContent.toLowerCase().includes(query) &&
|
|
137
|
+
(status === "all" || row.dataset.status === status);
|
|
138
|
+
row.style.display = visible ? "" : "none";
|
|
139
|
+
if (visible) shown += 1;
|
|
140
|
+
}
|
|
141
|
+
empty.hidden = shown > 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function setStatus(next) {
|
|
145
|
+
status = next;
|
|
146
|
+
for (const button of statusButtons) {
|
|
147
|
+
button.setAttribute("aria-pressed", String(button.dataset.statusFilter === next));
|
|
148
|
+
}
|
|
149
|
+
applyFilter();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
for (const button of statusButtons) {
|
|
153
|
+
button.addEventListener("click", () => setStatus(button.dataset.statusFilter));
|
|
154
|
+
}
|
|
155
|
+
filter.addEventListener("input", applyFilter);
|
|
156
|
+
reset.addEventListener("click", () => {
|
|
157
|
+
filter.value = "";
|
|
158
|
+
setStatus("all");
|
|
159
|
+
});
|
|
160
|
+
})();
|
|
161
|
+
</script>
|
|
161
162
|
</body>
|
|
162
163
|
</html>
|
|
@@ -43,7 +43,25 @@ export default async function main(args, ctx) {
|
|
|
43
43
|
}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
`ctx.step.agentTask` blocks until the dispatched task reaches a terminal status (default `waitForCompletion: true`, default `timeoutMs` 2h) and journals its real output — a sequential `plan → implement → review` chain will not fan out. Pass `
|
|
46
|
+
`ctx.step.agentTask` blocks until the dispatched task reaches a terminal status (default `waitForCompletion: true`, default `timeoutMs` 2h) and journals its real output — a sequential `plan → implement → review` chain will not fan out. Pass `failOnTaskFailure: false` to receive `{taskId, status: "failed", error}` instead of a throw when the task fails/is cancelled.
|
|
47
|
+
|
|
48
|
+
A run launched from a `follow-up` task in a Slack thread passes the same re-delegation guard as `send-task`, decided once for the whole run at its first new step: a step that repeats completed thread work, or a run past the thread's dispatch cap (a run counts once), throws with the rule's message, and every later new step of that run throws too. Pass `allowRedelegation: true` on a step only for a deliberate re-run. Do not wrap a single dispatch in a durable run; use `send-task`.
|
|
49
|
+
|
|
50
|
+
`waitForCompletion: false` does not return right after dispatch. The first call still waits up to ~30s while the server polls the task, then returns one of three shapes:
|
|
51
|
+
|
|
52
|
+
- The task finished in that window: its output string or `null`, as on success.
|
|
53
|
+
- The task failed or was cancelled in that window: a throw, or `{taskId, status: "failed", error}` with `failOnTaskFailure: false`.
|
|
54
|
+
- The task is still running: `{taskId, status}`.
|
|
55
|
+
|
|
56
|
+
On success, `ctx.step.agentTask` resolves to the worker's output string (JSON text under `outputSchema`, so parse it yourself; `null` when the task stored none), not a task record. On a string, `step.taskId` and `step.status` are undefined, so a guard such as `step.status !== "completed"` or `step?.taskId ?? "unknown"` silently misfires. On `null`, `step.taskId` throws a TypeError. Only `failOnTaskFailure: false` with a failed or cancelled task returns `{taskId, status: "failed", error}`, and only `waitForCompletion: false` on a task still running returns `{taskId, status}`. To get a step's task id, query by its context key (the label is the step label you passed):
|
|
57
|
+
|
|
58
|
+
```sql
|
|
59
|
+
SELECT id, status, output FROM agent_tasks
|
|
60
|
+
WHERE contextKey = 'script-run:<runId>:<label>' AND taskType = 'script-run-step'
|
|
61
|
+
ORDER BY createdAt DESC, rowid DESC LIMIT 1
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Inside the run, `<runId>` is `ctx.run.id`.
|
|
47
65
|
|
|
48
66
|
## Label Rules
|
|
49
67
|
|
|
@@ -91,6 +91,7 @@ Fetch the page as markdown: `curl -fsSL https://docs.agent-swarm.dev/llms.mdx/do
|
|
|
91
91
|
- [One-off Script Workflow Runs](https://docs.agent-swarm.dev/docs/guides/script-workflow-runs). Reference.
|
|
92
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.
|
|
93
93
|
- [Claude Bridge](https://docs.agent-swarm.dev/docs/guides/claude-bridge-experimental). Reference.
|
|
94
|
+
- [Reading claude.ai Artifacts headless](https://docs.agent-swarm.dev/docs/guides/claude-artifacts-read). When: Someone wants an agent to read a claude.ai Artifact link, such as a design and its canvas.json, from a headless session.
|
|
94
95
|
- [Worker Credential Recovery](https://docs.agent-swarm.dev/docs/guides/worker-credential-recovery). Reference.
|
|
95
96
|
- [Model Gateways](https://docs.agent-swarm.dev/docs/guides/provider-auth/model-gateways). Reference.
|
|
96
97
|
- [Codex OAuth](https://docs.agent-swarm.dev/docs/guides/provider-auth/codex-oauth). Reference.
|
|
@@ -23,6 +23,8 @@ Named script only when the logic will run two or more times, by you, another age
|
|
|
23
23
|
|
|
24
24
|
Reference point: a workflow triage that took about 26 tool calls returns as one result of about 4k tokens in about 13 seconds.
|
|
25
25
|
|
|
26
|
+
Pick the run mode before you author. A short inline `script-run` is for small lookups only. A job that scans a whole population or may run past the inline cap of about 30 s starts as a durable `launch-script-run` from the start. A single `ctx.step.swarmScript` step has the same cap, so collect in bounded steps: each step takes a cursor, collects one slice in well under 30 s, and returns its rows plus the next cursor. Label each step with its slice (`collect-${page}`) so the journal checkpoints it, then compute from the collected slices in a final step. Restarting a long inline run throws away the work it already did.
|
|
27
|
+
|
|
26
28
|
## Loading the tools
|
|
27
29
|
|
|
28
30
|
The script tools are deferred. Load them with your harness tool search before the first call: `script-search`, `script-run`, `script-upsert`, `script-query-types`, `script-delete`, and for durable runs `launch-script-run`, `get-script-run`, `list-script-runs`.
|
|
@@ -18,6 +18,8 @@ Named script only when the logic will run two or more times, by you, another age
|
|
|
18
18
|
|
|
19
19
|
Reference point: a workflow triage that took about 26 tool calls returns as one result of about 4k tokens in about 13 seconds.
|
|
20
20
|
|
|
21
|
+
Pick the run mode before you author. A short inline `script-run` is for small lookups only. A job that scans a whole population or may run past the inline cap of about 30 s starts as a durable `launch-script-run` from the start. A single `ctx.step.swarmScript` step has the same cap, so collect in bounded steps: each step takes a cursor, collects one slice in well under 30 s, and returns its rows plus the next cursor. Label each step with its slice (`collect-${page}`) so the journal checkpoints it, then compute from the collected slices in a final step. Restarting a long inline run throws away the work it already did.
|
|
22
|
+
|
|
21
23
|
## Loading the tools
|
|
22
24
|
|
|
23
25
|
The script tools are deferred. Load them with your harness tool search before the first call: `script-search`, `script-run`, `script-upsert`, `script-query-types`, `script-delete`, and for durable runs `launch-script-run`, `get-script-run`, `list-script-runs`.
|