@desplega.ai/agent-swarm 2.4.0 → 2.4.2
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 +1 -1
- package/dist/{acp-adapter-kedstxx6.js → acp-adapter-dv7hmx4r.js} +9 -9
- package/dist/{actions-vget6r1k.js → actions-51nc1gny.js} +21 -21
- package/dist/{amp-adapter-xeb5mktv.js → amp-adapter-abp5tdx8.js} +4 -4
- package/dist/{app-mqap8t8m.js → app-9h14qvr6.js} +3 -3
- package/dist/{assistant-h0gv97mv.js → assistant-wv1gz3mt.js} +22 -22
- package/dist/{boot-reembed-qr8a894z.js → boot-reembed-6yn53ms9.js} +1 -1
- package/dist/{boot-reembed-rj85jjhw.js → boot-reembed-7fcka4z5.js} +1 -1
- package/dist/{boot-scrub-sweep-eyfvn6v9.js → boot-scrub-sweep-pm1580ax.js} +4 -4
- package/dist/{boot-seeds-xs9a8dx1.js → boot-seeds-g5hfc1x8.js} +4 -4
- package/dist/{claude-adapter-bm23cye7.js → claude-adapter-gf3kxhf0.js} +9 -9
- package/dist/{claude-managed-adapter-1mwrsm9d.js → claude-managed-adapter-h2y889ge.js} +2 -2
- package/dist/{claude-managed-setup-gkfgks4j.js → claude-managed-setup-h00hsgtz.js} +2 -2
- package/dist/{claude-sdk-session-apb4ypz3.js → claude-sdk-session-s2k1qd8y.js} +13 -13
- package/dist/{cli-tj4j2ts4.js → cli-02qm7src.js} +8 -8
- package/dist/{cli-1cevz46c.js → cli-0qvtffe9.js} +6 -6
- package/dist/{cli-avmqhatn.js → cli-10hhg0km.js} +8 -8
- package/dist/{cli-7gh7020n.js → cli-1dmcq2eh.js} +1 -1
- package/dist/{cli-kz116kvw.js → cli-239yjk27.js} +7 -7
- package/dist/{cli-7ayprxp7.js → cli-2dfbv8qr.js} +8 -0
- package/dist/{cli-a49vpbf3.js → cli-5kqnemen.js} +1 -1
- package/dist/{cli-x719j3vs.js → cli-5rk36sjf.js} +442 -205
- package/dist/{cli-fb6t92v8.js → cli-6x9ma5w5.js} +1 -1
- package/dist/{cli-c8fwpgqb.js → cli-7225gwj7.js} +2 -2
- package/dist/{cli-5s5hx57y.js → cli-7awf1fp8.js} +1 -1
- package/dist/{cli-bn26xbcs.js → cli-8nyhf7za.js} +1 -1
- package/dist/{cli-ywyrffff.js → cli-8sxqsbbq.js} +1 -1
- package/dist/{cli-rsd7ga7v.js → cli-8zwe9mpk.js} +11 -11
- package/dist/{cli-y83zk5sb.js → cli-a0kcty51.js} +4 -4
- package/dist/{cli-8b9wvjps.js → cli-a4gvwttf.js} +4 -4
- package/dist/{cli-jhp7w1fy.js → cli-a5ebc95n.js} +2 -2
- package/dist/{cli-mvg2hf8p.js → cli-ahtpy9kf.js} +14 -7
- package/dist/{cli-x1p5dhq2.js → cli-bcj753sq.js} +3 -3
- package/dist/{cli-p22zdvnt.js → cli-bn0rewsy.js} +3 -3
- package/dist/{cli-p1m2b6gc.js → cli-d2mb5s8a.js} +7 -7
- package/dist/{cli-rg7ntypm.js → cli-d3qqdy4c.js} +456 -94
- package/dist/{cli-c5sbmw1v.js → cli-d82btycs.js} +94 -15
- package/dist/{cli-02vhhssk.js → cli-efaqv1c7.js} +5 -5
- package/dist/{cli-vjfpshn3.js → cli-ejs3m1sx.js} +1 -1
- package/dist/{cli-kk2r80n5.js → cli-faypxz7q.js} +4 -4
- package/dist/{cli-a1esmmee.js → cli-fpmsqq59.js} +7 -2
- package/dist/{cli-wrv09v7q.js → cli-ftyypbg5.js} +1 -1
- package/dist/{cli-zvze9rbm.js → cli-fyzjmseb.js} +3 -3
- package/dist/{cli-8rwvksbc.js → cli-g0hgtz4p.js} +5 -5
- package/dist/{cli-nrrg0fvy.js → cli-h38rjv87.js} +133 -12
- package/dist/{cli-tg9ksbn8.js → cli-h93c9vb3.js} +2 -2
- package/dist/{cli-eqgfs202.js → cli-hqhzg1qq.js} +2 -2
- package/dist/{cli-bhwa8rzc.js → cli-hyfw2j1e.js} +13 -12
- package/dist/{cli-3wjs22x3.js → cli-j4rqdf2n.js} +2 -2
- package/dist/{cli-6ftrrwm1.js → cli-n85dqg6d.js} +5 -5
- package/dist/{cli-8cxkw1f5.js → cli-nmqdc2t3.js} +2 -2
- package/dist/{cli-4fhyq711.js → cli-nn47d7e8.js} +13 -13
- package/dist/{cli-x3en6ct3.js → cli-nwyw3zhg.js} +1 -1
- package/dist/{cli-3avfh5az.js → cli-pemywhfq.js} +2 -2
- package/dist/{cli-xfe63zx3.js → cli-pkht5hap.js} +2 -2
- package/dist/{cli-sppc0cmw.js → cli-pnp2j5zg.js} +2 -2
- package/dist/{cli-wk8ccrz6.js → cli-pw7v69vp.js} +2 -2
- package/dist/{cli-tgvpmnwz.js → cli-r99kc9yq.js} +5 -5
- package/dist/{cli-bfc3k1x5.js → cli-rdyw3mct.js} +9 -9
- package/dist/{cli-b80a1100.js → cli-s6vr7r2d.js} +2 -2
- package/dist/{cli-zv4vy2b0.js → cli-s95dknxh.js} +1 -1
- package/dist/{cli-ttaz6c7m.js → cli-saw9a6f6.js} +6 -5
- package/dist/{cli-mz1ezzzh.js → cli-shvfedvm.js} +3 -3
- package/dist/{cli-rdr166ht.js → cli-smvcw9z5.js} +1 -1
- package/dist/{cli-2rwet3r7.js → cli-sv5gb0yb.js} +1 -1
- package/dist/{cli-5ff2sjyt.js → cli-t30yj95q.js} +2 -2
- package/dist/{cli-ptkpaqfy.js → cli-wt645v7q.js} +1 -1
- package/dist/{cli-f3nx1h8z.js → cli-wxbn3yfx.js} +2 -2
- package/dist/{cli-wyrr38xm.js → cli-x5mq1fyq.js} +1 -1
- package/dist/{cli-ccn0eybf.js → cli-xbzvet96.js} +6 -6
- package/dist/{cli-4mkvwgzr.js → cli-xf234ws8.js} +1 -1
- package/dist/{cli-nme7wery.js → cli-y2x52gs2.js} +46 -13
- package/dist/{cli-ffbrkh1r.js → cli-y8n5k515.js} +46 -38
- package/dist/{cli-ecshf504.js → cli-z4wd2ftv.js} +7 -7
- package/dist/{cli-dsgj3e7a.js → cli-zfg9enh9.js} +2 -2
- package/dist/{cli-yxqag76b.js → cli-zw88zjba.js} +1 -1
- package/dist/cli.js +20 -20
- package/dist/{codex-adapter-pp2gq8gr.js → codex-adapter-ttygw382.js} +6 -6
- package/dist/{codex-hook-qwzccd64.js → codex-hook-x7nejyrr.js} +7 -4
- package/dist/{codex-login-35p4sk85.js → codex-login-m819c41r.js} +1 -1
- package/dist/{codex-session-runner-0vzn09t8.js → codex-session-runner-60b58vv3.js} +7 -7
- package/dist/{commands-psqhkttb.js → commands-edmdwa4x.js} +2 -2
- package/dist/{controller-t20vz2k8.js → controller-m263fg43.js} +4 -4
- package/dist/{controllers-connect-gkxmqw9d.js → controllers-connect-5fym8sw1.js} +23 -23
- package/dist/{cursor-adapter-3v542qe5.js → cursor-adapter-cz6nm6mj.js} +3 -3
- package/dist/{db-nc1rd869.js → db-2y0mgstc.js} +3 -3
- package/dist/{db-2xbyenjr.js → db-nn0hcmx5.js} +6 -2
- package/dist/{devin-adapter-7egzmt0k.js → devin-adapter-zgqadvnm.js} +1 -1
- package/dist/{dispatcher-ewceb8ts.js → dispatcher-0a9wwjcx.js} +20 -20
- package/dist/{docker-njavd3fb.js → docker-fkgtr75t.js} +2 -2
- package/dist/{dsh-adapter-75xwh78t.js → dsh-adapter-3n3net33.js} +3 -3
- package/dist/{e2b-5r6a5jeb.js → e2b-7am6tmq6.js} +2 -2
- package/dist/{e2b-pw1nvtmh.js → e2b-thdcxtjd.js} +2 -2
- package/dist/{easter-egg-3d-xsc47jwf.js → easter-egg-3d-5cgynaja.js} +1 -1
- package/dist/{event-bus-101fenkh.js → event-bus-9vpk8gmq.js} +1 -1
- package/dist/{execute-gzmw1mnw.js → execute-t4e6m3rw.js} +1 -1
- package/dist/{external-channel-a5dsmxn4.js → external-channel-zhvt95n3.js} +2 -2
- package/dist/{grok-adapter-vj88xr23.js → grok-adapter-qnr1hp2y.js} +10 -10
- package/dist/handlers-dkcarkd0.js +39 -0
- package/dist/{heartbeat-t2m9r3wa.js → heartbeat-gz97r7ac.js} +23 -23
- package/dist/{hook-xa677f8r.js → hook-1mmdgjqs.js} +16 -9
- package/dist/{hook-8femx1bg.js → hook-x8rthca4.js} +6 -6
- package/dist/{http-xpmmq028.js → http-r8f85xr9.js} +274 -160
- package/dist/index-5jecgp3n.js +41 -0
- package/dist/index-aex0eba9.js +40 -0
- package/dist/{index-syztqdt6.js → index-g6tbb6ve.js} +1 -1
- package/dist/{index-cdzyfrsp.js → index-smxyk04s.js} +1 -1
- package/dist/{index-dg2tmj99.js → index-vzvfqzfj.js} +20 -20
- package/dist/{index-s7ckdajq.js → index-y7rbcrc1.js} +10 -10
- package/dist/{keepalive-3nr4st3r.js → keepalive-64c0f34c.js} +4 -4
- package/dist/lead-b1da0f97.js +78 -0
- package/dist/{maintenance-verwpe2c.js → maintenance-mnxpar12.js} +1 -1
- package/dist/{oauth-refresh-sweep-9q2t0y3q.js → oauth-refresh-sweep-36hs2v4h.js} +3 -3
- package/dist/{onboard-aytqedmq.js → onboard-xes8de61.js} +3 -3
- package/dist/{opencode-adapter-f4hryjny.js → opencode-adapter-3s7ax02e.js} +7 -7
- package/dist/{otel-impl-hckw4wt1.js → otel-impl-fzc57kcq.js} +2 -2
- package/dist/{pi-mono-adapter-hxby0ce1.js → pi-mono-adapter-ytp7gz8b.js} +22 -11
- package/dist/{pricing-refresh-5nvme3sm.js → pricing-refresh-1nek2w7b.js} +3 -3
- package/dist/{rbac-roles-vbpy21mg.js → rbac-roles-sqefb5hw.js} +2 -2
- package/dist/{rbac-roles-pd8c26m1.js → rbac-roles-ttyfaep2.js} +1 -1
- package/dist/{render-v2-7nqgvk2q.js → render-v2-vb527jwn.js} +3 -3
- package/dist/{resume-b6djcj3c.js → resume-jcdzg1bn.js} +10 -8
- package/dist/{runtime-txrxc9za.js → runtime-xe3aqy4x.js} +1 -1
- package/dist/{session-access-fc3f9y12.js → session-access-zsp4wsp0.js} +4 -4
- package/dist/{setup-n39szm6b.js → setup-1nb2zqd3.js} +1 -1
- package/dist/{virtual-modules-wyp2k6z3.js → virtual-modules-4r3zkc20.js} +2 -2
- package/dist/{work-objects-jem2fre0.js → work-objects-61w08fwr.js} +23 -23
- package/dist/worker-c1e68hpa.js +78 -0
- package/dist/{x-8ewt8gxn.js → x-y45mthwn.js} +2 -2
- package/openapi.json +491 -52
- package/package.json +3 -3
- package/src/apps/action-runner.ts +146 -0
- package/src/apps/catalog.generated.json +3 -2
- package/src/apps/definition.ts +152 -4
- package/src/apps/row-store.ts +23 -9
- package/src/apps/schema-migrate.ts +14 -6
- package/src/apps/script-types.ts +2 -1
- package/src/apps/sync.ts +20 -19
- package/src/be/db/tasks/read.ts +112 -0
- package/src/be/db.ts +16 -4
- package/src/be/fleet-benchmark-stats.ts +10 -5
- package/src/be/models-catalog.ts +4 -0
- package/src/be/onboarding.ts +6 -0
- package/src/be/scripts/typecheck.ts +13 -0
- package/src/be/swarm-config-guard.ts +25 -1
- package/src/be/telemetry-enable.ts +1 -1
- package/src/commands/provider-credentials.ts +12 -2
- package/src/commands/runner.ts +3 -0
- package/src/heartbeat/heartbeat.ts +2 -2
- package/src/hooks/codex-hook.ts +6 -2
- package/src/hooks/hook.ts +7 -0
- package/src/hooks/pr-body-guard.ts +38 -11
- package/src/hooks/pr-room-guard.ts +88 -0
- package/src/http/agents.ts +1 -0
- package/src/http/apps.ts +99 -183
- package/src/http/fleet-benchmark.ts +79 -30
- package/src/http/global-config.ts +7 -0
- package/src/http/ranking.ts +24 -40
- package/src/http/status.ts +49 -43
- package/src/http/tasks.ts +49 -1
- package/src/http/telemetry-ui.ts +1 -1
- package/src/http/used-by.ts +55 -19
- package/src/http/users.ts +2 -2
- package/src/providers/acp-targets.ts +1 -1
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/pi-mono-adapter.ts +15 -0
- package/src/providers/reasoning-effort.ts +2 -1
- package/src/providers/types.ts +2 -0
- package/src/ranking/telemetry-ranking.ts +5 -33
- package/src/scripts-runtime/sdk-allowlist.ts +7 -0
- package/src/scripts-runtime/types/stdlib.d.ts +31 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +31 -0
- package/src/server.ts +4 -0
- package/src/telemetry-context.ts +19 -1
- package/src/telemetry-contract/EVENTS.md +42 -8
- package/src/telemetry-contract/SOURCE.json +6 -5
- package/src/telemetry-contract/catalog.json +225 -5
- package/src/telemetry-contract/ranking/fixtures/valid/no-claim.json +10 -0
- package/src/telemetry-contract/ranking/listing.v1.schema.json +2 -2
- package/src/telemetry-contract/types.gen.ts +225 -27
- package/src/telemetry-identity.ts +47 -9
- package/src/telemetry-snapshot.ts +9 -1
- package/src/telemetry-ui-events.ts +9 -2
- package/src/telemetry.ts +29 -6
- package/src/tests/app-action-run-tool.test.ts +178 -0
- package/src/tests/app-row-tools.test.ts +385 -0
- package/src/tests/apps-json-column.test.ts +611 -0
- package/src/tests/apps-script-types.test.ts +2 -0
- package/src/tests/apps-sync-engine.test.ts +42 -0
- package/src/tests/check-pr-body.test.ts +0 -23
- package/src/tests/credential-check.test.ts +38 -0
- package/src/tests/db-task-read-contract.test.ts +4 -0
- package/src/tests/db-task-write-contract.test.ts +2 -0
- package/src/tests/docs-index-footprint.test.js +2 -2
- package/src/tests/fleet-benchmark.test.ts +122 -2
- package/src/tests/http-users.test.ts +62 -1
- package/src/tests/model-catalog-table.test.ts +63 -0
- package/src/tests/model-profiles-api.test.ts +19 -7
- package/src/tests/models-catalog.test.ts +50 -0
- package/src/tests/onboarding.test.ts +21 -0
- package/src/tests/org-website.test.ts +62 -0
- package/src/tests/pi-mono-adapter.test.ts +23 -0
- package/src/tests/pr-body-leaks.test.ts +4 -0
- package/src/tests/pr-room-guard.test.ts +242 -0
- package/src/tests/ranking-listing.test.ts +8 -23
- package/src/tests/ranking-route.test.ts +49 -47
- package/src/tests/reasoning-effort.test.ts +39 -3
- package/src/tests/runner-harness-telemetry-env.test.ts +62 -1
- package/src/tests/status.test.ts +158 -9
- package/src/tests/swarm-tool-result-gate.test.ts +2 -4
- package/src/tests/task-lineage.test.ts +180 -0
- package/src/tests/telemetry-context.test.ts +128 -2
- package/src/tests/telemetry-init.test.ts +62 -5
- package/src/tests/telemetry-ui-route.test.ts +123 -0
- package/src/tests/tool-annotations.test.ts +3 -2
- package/src/tests/used-by-route.test.ts +144 -10
- package/src/tests/user-token-rest-auth.test.ts +38 -0
- package/src/tests/workflow-agent-task-retry.test.ts +130 -4
- package/src/tests/workflow-wait-recovery.test.ts +116 -4
- package/src/tools/app-action-run.ts +63 -0
- package/src/tools/app-rows.ts +239 -0
- package/src/tools/model-catalog/index.ts +1 -1
- package/src/tools/tool-config.ts +8 -0
- package/src/tools/utils.ts +1 -1
- package/src/tools/workflows/retry-workflow-run.ts +1 -1
- package/src/types.ts +17 -0
- package/src/utils/company-profile.ts +24 -0
- package/src/utils/org-website.ts +58 -21
- package/src/workflows/recovery.ts +10 -22
- package/src/workflows/resume.ts +16 -0
- package/src/workflows/task-step-routing.ts +47 -7
- package/templates/skills/apps/SKILL.md +44 -4
- package/templates/skills/apps/content.md +44 -4
- package/dist/handlers-zbs90bny.js +0 -39
- package/dist/index-8pwc1jc8.js +0 -40
- package/dist/index-nxa6me0q.js +0 -41
- package/dist/lead-td8h2sfn.js +0 -78
- package/dist/worker-wr6xgfr2.js +0 -78
- package/src/tests/check-ranking-entry.test.ts +0 -146
|
@@ -115,6 +115,7 @@ function modelToCredKeys(modelStr: string | undefined): string[] | null {
|
|
|
115
115
|
if (provider === "openrouter") return ["OPENROUTER_API_KEY"];
|
|
116
116
|
if (provider === "openai") return ["OPENAI_API_KEY"];
|
|
117
117
|
if (provider === "google") return ["GOOGLE_API_KEY", "GEMINI_API_KEY"];
|
|
118
|
+
if (provider === "opencode-go") return ["OPENCODE_API_KEY"];
|
|
118
119
|
// models.json custom providers (`writeSessionModelsJson`). The
|
|
119
120
|
// runner normalizes key aliases (HELMCODE_API_NAN → NAN_API_KEY), but a
|
|
120
121
|
// worker without that step (or a boot-time check) may only see the alias.
|
|
@@ -145,6 +146,19 @@ function getHarnessDrivableBedrockModels(): Array<{ id: string; name: string }>
|
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
|
|
149
|
+
/**
|
|
150
|
+
* The `opencode-go` model ids this pi-ai build resolves. models.dev can list
|
|
151
|
+
* ids pi-ai does not know yet, and pi runs its default model for those, so the
|
|
152
|
+
* worker reports this list and the picker offers only these ids.
|
|
153
|
+
*/
|
|
154
|
+
export function listPiOpencodeGoModelIds(): string[] {
|
|
155
|
+
try {
|
|
156
|
+
return getModels("opencode-go").map((m) => m.id);
|
|
157
|
+
} catch {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
148
162
|
/**
|
|
149
163
|
* Enumerate the Bedrock models that are both invocable by this AWS account and
|
|
150
164
|
* drivable by the pi-ai Converse harness, and verify the credential chain in
|
|
@@ -480,6 +494,7 @@ const PI_RUNTIME_API_KEYS: readonly (readonly [envKey: string, provider: string]
|
|
|
480
494
|
["OPENAI_API_KEY", "openai"],
|
|
481
495
|
["GEMINI_API_KEY", "google"],
|
|
482
496
|
["GOOGLE_API_KEY", "google"],
|
|
497
|
+
["OPENCODE_API_KEY", "opencode-go"],
|
|
483
498
|
// models.json custom providers (the registry). A runtime key beats the
|
|
484
499
|
// file's `apiKey: "$NAN_API_KEY"`, which pi would otherwise read from the
|
|
485
500
|
// shared process.env, where a credential pool is still the raw comma list.
|
|
@@ -168,7 +168,8 @@ function buildOpencodeReasoningOptions(
|
|
|
168
168
|
// qualitative level — translate internally (see "What We're NOT Doing" in
|
|
169
169
|
// the plan: no numeric budget surface for operators, only this
|
|
170
170
|
// adapter-internal transport detail).
|
|
171
|
-
|
|
171
|
+
// Its Anthropic transport reads `effort` into `output_config.effort`.
|
|
172
|
+
if (level === "max") return { effort: level };
|
|
172
173
|
return { thinking: { type: "enabled", budgetTokens: ANTHROPIC_BUDGET_TOKENS_BY_LEVEL[level] } };
|
|
173
174
|
}
|
|
174
175
|
if (providerId === "openrouter") {
|
package/src/providers/types.ts
CHANGED
|
@@ -320,6 +320,8 @@ export interface CredStatus {
|
|
|
320
320
|
* string signals Bedrock mode with `AWS_REGION` unset (no region fabricated).
|
|
321
321
|
*/
|
|
322
322
|
bedrockRegion?: string;
|
|
323
|
+
/** Pi-mono only: the `opencode-go` model ids pi-ai resolves. Undefined for other harnesses. */
|
|
324
|
+
opencodeGoModels?: string[];
|
|
323
325
|
}
|
|
324
326
|
|
|
325
327
|
/**
|
|
@@ -23,8 +23,6 @@ export const RANKING_CATEGORIES = Object.keys(RANKING_TAXONOMY) as [
|
|
|
23
23
|
keyof typeof RANKING_TAXONOMY,
|
|
24
24
|
...(keyof typeof RANKING_TAXONOMY)[],
|
|
25
25
|
];
|
|
26
|
-
export const RANKING_CLAIM_PATTERN = /^rk_[0-9a-f]{32}$/;
|
|
27
|
-
|
|
28
26
|
const hostname = z.string().refine((v) => normalizeOrgWebsite(v) === v, "bare hostname");
|
|
29
27
|
const nullableText = (max: number) => z.string().trim().min(1).max(max).nullable();
|
|
30
28
|
|
|
@@ -37,7 +35,11 @@ function inCategory(category: string, subcategory: string | null): boolean {
|
|
|
37
35
|
export const telemetryRankingV1 = z
|
|
38
36
|
.strictObject({
|
|
39
37
|
v: z.literal(1),
|
|
40
|
-
|
|
38
|
+
/** Minted by v2.4.0 for the retired ranking PR. Still parsed, never written; the proxy ignores it. */
|
|
39
|
+
claim: z
|
|
40
|
+
.string()
|
|
41
|
+
.regex(/^rk_[0-9a-f]{32}$/)
|
|
42
|
+
.optional(),
|
|
41
43
|
name: z.string().trim().min(1).max(60),
|
|
42
44
|
domain: hostname,
|
|
43
45
|
category: z.enum(RANKING_CATEGORIES),
|
|
@@ -88,12 +90,6 @@ export const rankingFormSchema = z.object({
|
|
|
88
90
|
});
|
|
89
91
|
export type RankingForm = z.infer<typeof rankingFormSchema>;
|
|
90
92
|
|
|
91
|
-
/** `rk_` + 32 lowercase hex characters from the platform CSPRNG. */
|
|
92
|
-
export function mintRankingClaim(): string {
|
|
93
|
-
const bytes = crypto.getRandomValues(new Uint8Array(16));
|
|
94
|
-
return `rk_${Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
93
|
const blankToNull = (value: string | null | undefined) => value?.trim() || null;
|
|
98
94
|
|
|
99
95
|
/**
|
|
@@ -104,7 +100,6 @@ const blankToNull = (value: string | null | undefined) => value?.trim() || null;
|
|
|
104
100
|
export function buildListing(
|
|
105
101
|
identity: OrgIdentityStatus,
|
|
106
102
|
form: RankingForm,
|
|
107
|
-
claim: string,
|
|
108
103
|
now: Date = new Date(),
|
|
109
104
|
): TelemetryRanking {
|
|
110
105
|
if (!identity.ok || !identity.name || !identity.website) {
|
|
@@ -112,7 +107,6 @@ export function buildListing(
|
|
|
112
107
|
}
|
|
113
108
|
const listing = {
|
|
114
109
|
v: 1 as const,
|
|
115
|
-
claim,
|
|
116
110
|
name: identity.name,
|
|
117
111
|
domain: identity.website,
|
|
118
112
|
category: form.category,
|
|
@@ -123,25 +117,3 @@ export function buildListing(
|
|
|
123
117
|
};
|
|
124
118
|
return parseTelemetryRanking(JSON.stringify(listing));
|
|
125
119
|
}
|
|
126
|
-
|
|
127
|
-
/** The `community/ranking/<domain>.json` file that approves this install. */
|
|
128
|
-
export function rankingEntryFile(listing: Pick<TelemetryRanking, "domain" | "claim">): string {
|
|
129
|
-
return `${JSON.stringify({ $schema: "./schema.json", domain: listing.domain, claim: listing.claim }, null, 2)}\n`;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export const RANKING_REPO = "desplega-ai/agent-swarm";
|
|
133
|
-
|
|
134
|
-
/** GitHub's "new file" page, prefilled with the entry, as a PR from the admin's fork. */
|
|
135
|
-
export function rankingPrUrl(listing: Pick<TelemetryRanking, "domain" | "claim">): string {
|
|
136
|
-
const params = new URLSearchParams({
|
|
137
|
-
filename: `community/ranking/${listing.domain}.json`,
|
|
138
|
-
value: rankingEntryFile(listing),
|
|
139
|
-
message: `chore(ranking): add ${listing.domain}`,
|
|
140
|
-
});
|
|
141
|
-
return `https://github.com/${RANKING_REPO}/new/main?${params.toString()}`;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/** GitHub's delete page for an entry, to leave the ranking for good. */
|
|
145
|
-
export function rankingLeaveUrl(domain: string): string {
|
|
146
|
-
return `https://github.com/${RANKING_REPO}/delete/main/community/ranking/${domain}.json`;
|
|
147
|
-
}
|
|
@@ -180,6 +180,13 @@ export const SDK_TOOL_NAME_MAP = {
|
|
|
180
180
|
app_list: "app-list",
|
|
181
181
|
app_patch: "app-patch",
|
|
182
182
|
app_query: "app-query",
|
|
183
|
+
app_rows_list: "app-rows-list",
|
|
184
|
+
app_row_get: "app-row-get",
|
|
185
|
+
app_row_create: "app-row-create",
|
|
186
|
+
app_rows_create: "app-rows-create",
|
|
187
|
+
app_row_patch: "app-row-patch",
|
|
188
|
+
app_row_delete: "app-row-delete",
|
|
189
|
+
app_rows_delete: "app-rows-delete",
|
|
183
190
|
app_rollback: "app-rollback",
|
|
184
191
|
app_sync: "app-sync",
|
|
185
192
|
app_upsert: "app-upsert",
|
|
@@ -658,6 +658,37 @@ declare module "swarm-sdk" {
|
|
|
658
658
|
query: string;
|
|
659
659
|
params?: Record<string, string | number | boolean>;
|
|
660
660
|
}): Promise<unknown>;
|
|
661
|
+
app_rows_list(args: {
|
|
662
|
+
appId: string;
|
|
663
|
+
model: string;
|
|
664
|
+
equals?: Record<string, string | number | boolean>;
|
|
665
|
+
sort?: `${string}:asc` | `${string}:desc`;
|
|
666
|
+
limit?: number;
|
|
667
|
+
}): Promise<unknown>;
|
|
668
|
+
app_row_get(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
|
|
669
|
+
app_row_create(args: {
|
|
670
|
+
appId: string;
|
|
671
|
+
model: string;
|
|
672
|
+
values: Record<string, unknown>;
|
|
673
|
+
}): Promise<unknown>;
|
|
674
|
+
app_rows_create(args: {
|
|
675
|
+
appId: string;
|
|
676
|
+
model: string;
|
|
677
|
+
rows: Record<string, unknown>[];
|
|
678
|
+
}): Promise<unknown>;
|
|
679
|
+
app_row_patch(args: {
|
|
680
|
+
appId: string;
|
|
681
|
+
model: string;
|
|
682
|
+
rowId: string;
|
|
683
|
+
values: Record<string, unknown>;
|
|
684
|
+
}): Promise<unknown>;
|
|
685
|
+
app_row_delete(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
|
|
686
|
+
app_rows_delete(args: {
|
|
687
|
+
appId: string;
|
|
688
|
+
model: string;
|
|
689
|
+
equals: Record<string, string | number | boolean>;
|
|
690
|
+
limit?: number;
|
|
691
|
+
}): Promise<unknown>;
|
|
661
692
|
app_rollback(args: {
|
|
662
693
|
appId: string;
|
|
663
694
|
version: number;
|
|
@@ -640,6 +640,37 @@ declare module "swarm-sdk" {
|
|
|
640
640
|
query: string;
|
|
641
641
|
params?: Record<string, string | number | boolean>;
|
|
642
642
|
}): Promise<unknown>;
|
|
643
|
+
app_rows_list(args: {
|
|
644
|
+
appId: string;
|
|
645
|
+
model: string;
|
|
646
|
+
equals?: Record<string, string | number | boolean>;
|
|
647
|
+
sort?: `${string}:asc` | `${string}:desc`;
|
|
648
|
+
limit?: number;
|
|
649
|
+
}): Promise<unknown>;
|
|
650
|
+
app_row_get(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
|
|
651
|
+
app_row_create(args: {
|
|
652
|
+
appId: string;
|
|
653
|
+
model: string;
|
|
654
|
+
values: Record<string, unknown>;
|
|
655
|
+
}): Promise<unknown>;
|
|
656
|
+
app_rows_create(args: {
|
|
657
|
+
appId: string;
|
|
658
|
+
model: string;
|
|
659
|
+
rows: Record<string, unknown>[];
|
|
660
|
+
}): Promise<unknown>;
|
|
661
|
+
app_row_patch(args: {
|
|
662
|
+
appId: string;
|
|
663
|
+
model: string;
|
|
664
|
+
rowId: string;
|
|
665
|
+
values: Record<string, unknown>;
|
|
666
|
+
}): Promise<unknown>;
|
|
667
|
+
app_row_delete(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
|
|
668
|
+
app_rows_delete(args: {
|
|
669
|
+
appId: string;
|
|
670
|
+
model: string;
|
|
671
|
+
equals: Record<string, string | number | boolean>;
|
|
672
|
+
limit?: number;
|
|
673
|
+
}): Promise<unknown>;
|
|
643
674
|
app_rollback(args: {
|
|
644
675
|
appId: string;
|
|
645
676
|
version: number;
|
package/src/server.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { resolveTemplate } from "./prompts/resolver";
|
|
|
11
11
|
import { isRbacEnabled } from "./rbac";
|
|
12
12
|
import { getSlackConfiguration } from "./slack/config";
|
|
13
13
|
import { registerAcceptSteerTool } from "./tools/accept-steer";
|
|
14
|
+
import { registerAppActionRunTool } from "./tools/app-action-run";
|
|
14
15
|
import { registerAppDiffTool } from "./tools/app-diff";
|
|
15
16
|
import { registerAppGetTool } from "./tools/app-get";
|
|
16
17
|
import { registerAppHistoryTool } from "./tools/app-history";
|
|
@@ -18,6 +19,7 @@ import { registerAppListTool } from "./tools/app-list";
|
|
|
18
19
|
import { registerAppPatchTool } from "./tools/app-patch";
|
|
19
20
|
import { registerAppQueryTool } from "./tools/app-query";
|
|
20
21
|
import { registerAppRollbackTool } from "./tools/app-rollback";
|
|
22
|
+
import { registerAppRowTools } from "./tools/app-rows";
|
|
21
23
|
import { registerAppSyncTool } from "./tools/app-sync";
|
|
22
24
|
import { registerAppUpsertTool } from "./tools/app-upsert";
|
|
23
25
|
import { registerCancelApprovalRequestTool } from "./tools/cancel-approval-request";
|
|
@@ -643,6 +645,8 @@ export async function createServer(
|
|
|
643
645
|
// Pages capability - DB-backed lightweight artifacts (HTML / JSON specs).
|
|
644
646
|
if (hasCapability("pages")) {
|
|
645
647
|
registerAppGetTool(server);
|
|
648
|
+
registerAppRowTools(server);
|
|
649
|
+
registerAppActionRunTool(server);
|
|
646
650
|
registerAppHistoryTool(server);
|
|
647
651
|
registerAppDiffTool(server);
|
|
648
652
|
registerAppListTool(server);
|
package/src/telemetry-context.ts
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
import { createHash, randomBytes } from "node:crypto";
|
|
10
10
|
import { type EventContext, TRIGGER_SURFACES, type TriggerSurface } from "./telemetry-contract";
|
|
11
11
|
import catalog from "./telemetry-contract/catalog.json";
|
|
12
|
+
import {
|
|
13
|
+
COMPANY_ACQUISITION_SOURCES,
|
|
14
|
+
COMPANY_TEAM_SIZES,
|
|
15
|
+
COMPANY_USE_CASES,
|
|
16
|
+
USER_FUNCTIONS,
|
|
17
|
+
} from "./utils/company-profile";
|
|
12
18
|
|
|
13
19
|
/** `org_` + 16 lowercase hex (self-host, minted here) or 27 alphanumerics (cloud). Same pattern the proxy enforces. */
|
|
14
20
|
const ORG_ID_PATTERN = /^org_([0-9a-f]{16}|[A-Za-z0-9]{27})$/;
|
|
@@ -97,6 +103,9 @@ export interface ContextInput {
|
|
|
97
103
|
installMethod?: string | null;
|
|
98
104
|
installPreset?: string | null;
|
|
99
105
|
acquisitionSource?: string | null;
|
|
106
|
+
teamSize?: string | null;
|
|
107
|
+
useCase?: string | null;
|
|
108
|
+
userFunction?: string | null;
|
|
100
109
|
}
|
|
101
110
|
|
|
102
111
|
/** Build the top-level `context` object of a schema_version 2 event. */
|
|
@@ -105,6 +114,11 @@ export function buildContext(input: ContextInput): EventContext {
|
|
|
105
114
|
const orgName = input.orgName?.trim();
|
|
106
115
|
const orgDomain = validOrgDomain(input.orgDomain);
|
|
107
116
|
const orgWebsite = validOrgDomain(input.orgWebsite);
|
|
117
|
+
const teamSize = COMPANY_TEAM_SIZES.find((value) => value === input.teamSize);
|
|
118
|
+
const useCase = COMPANY_USE_CASES.find((value) => value === input.useCase);
|
|
119
|
+
const userFunction = userId
|
|
120
|
+
? USER_FUNCTIONS.find((value) => value === input.userFunction)
|
|
121
|
+
: undefined;
|
|
108
122
|
return {
|
|
109
123
|
org_id: input.orgId,
|
|
110
124
|
org_name: orgName ? orgName : null,
|
|
@@ -116,10 +130,14 @@ export function buildContext(input: ContextInput): EventContext {
|
|
|
116
130
|
swarm_version: input.swarmVersion,
|
|
117
131
|
install_method: input.installMethod ?? null,
|
|
118
132
|
install_preset: input.installPreset ?? null,
|
|
119
|
-
acquisition_source:
|
|
133
|
+
acquisition_source:
|
|
134
|
+
COMPANY_ACQUISITION_SOURCES.find((value) => value === input.acquisitionSource) ?? null,
|
|
120
135
|
// Optional in the catalog: left out, not null, when unset, so an ingest
|
|
121
136
|
// that predates the field keeps accepting events from installs without one.
|
|
122
137
|
...(orgWebsite ? { org_website: orgWebsite } : {}),
|
|
138
|
+
...(teamSize ? { team_size: teamSize } : {}),
|
|
139
|
+
...(useCase ? { use_case: useCase } : {}),
|
|
140
|
+
...(userFunction ? { user_function: userFunction } : {}),
|
|
123
141
|
};
|
|
124
142
|
}
|
|
125
143
|
|
|
@@ -4,18 +4,48 @@
|
|
|
4
4
|
|
|
5
5
|
Every event the ingest accepts with `schema_version: 2`. A v2 event that is not listed here, or that sends a property not listed for it, is rejected with a typed 400. `Emitter` is the envelope `source`.
|
|
6
6
|
|
|
7
|
+
## `acquisition_source`
|
|
8
|
+
|
|
9
|
+
How the organization found Agent Swarm.
|
|
10
|
+
|
|
11
|
+
Values: `search`, `github`, `social`, `colleague`, `newsletter`, `event`, `ai_assistant`, `hacker_news`, `other`.
|
|
12
|
+
|
|
13
|
+
## `notification_moment`
|
|
14
|
+
|
|
15
|
+
Moment that made the Slack Connect invite relevant.
|
|
16
|
+
|
|
17
|
+
Values: `task_failed`, `first_workflow`, `default`.
|
|
18
|
+
|
|
7
19
|
## `popup`
|
|
8
20
|
|
|
9
21
|
Dashboard pop-up that a popup.* event is about.
|
|
10
22
|
|
|
11
23
|
Values: `feedback`, `org_name`, `used_by`.
|
|
12
24
|
|
|
25
|
+
## `team_size`
|
|
26
|
+
|
|
27
|
+
Size of the organization team.
|
|
28
|
+
|
|
29
|
+
Values: `1`, `2-10`, `11-50`, `51+`.
|
|
30
|
+
|
|
13
31
|
## `trigger_surface`
|
|
14
32
|
|
|
15
33
|
Surface that started a chain of work: agent-swarm's AgentTaskSourceSchema values plus other.
|
|
16
34
|
|
|
17
35
|
Values: `slack`, `ui`, `api`, `mcp`, `github`, `gitlab`, `linear`, `jira`, `agentmail`, `schedule`, `workflow`, `system`, `other`.
|
|
18
36
|
|
|
37
|
+
## `use_case`
|
|
38
|
+
|
|
39
|
+
Primary use of the swarm.
|
|
40
|
+
|
|
41
|
+
Values: `features`, `bugs`, `review`, `ops`, `docs`, `data`.
|
|
42
|
+
|
|
43
|
+
## `user_function`
|
|
44
|
+
|
|
45
|
+
Job function of a user, separate from the RBAC user_role.
|
|
46
|
+
|
|
47
|
+
Values: `engineer`, `eng_lead`, `founder`, `product`, `ops`, `other`.
|
|
48
|
+
|
|
19
49
|
## `agent-fs`
|
|
20
50
|
|
|
21
51
|
| Event | Emitter | Since | Description | Properties |
|
|
@@ -44,12 +74,15 @@ Common properties, allowed on every event of this product:
|
|
|
44
74
|
| `agent.registered` | api-server | 2026-09-30 | An agent registered or reconnected. | `capabilities` (array, required)<br>`isReconnect` (boolean, required)<br>`role` (string) |
|
|
45
75
|
| `compaction.triggered` | worker | 2026-09-30 | The harness compacted a session context. | `compactTrigger` (string, required)<br>`contextTotalTokens` (integer, required)<br>`preCompactTokens` (integer, required) |
|
|
46
76
|
| `feature.used` | ui | 2026-09-30 | A dashboard feature was used. | `feature` (string, required) |
|
|
47
|
-
| `fleet_benchmark.
|
|
77
|
+
| `fleet_benchmark.unlocked` | ui | 2026-10-18 | An admin supplied the company profile fields for the full benchmark. | `fields` (array of website \| team_size \| use_case, required) |
|
|
78
|
+
| `fleet_benchmark.viewed` | ui | 2026-10-12 | The fleet benchmark card was shown. | `has_org_name` (boolean, required)<br>`level` (basic \| full) |
|
|
79
|
+
| `identity.lookup` | ui | 2026-10-18 | A dashboard identity lookup matched an existing user or found no match. | `matched` (boolean, required) |
|
|
80
|
+
| `identity.user_created` | ui | 2026-10-18 | A user created a dashboard identity. Email and personal names stay out of telemetry. | `email_kind` (work \| personal, required)<br>`has_company` (boolean, required)<br>`has_function` (boolean, required)<br>`surface` (identity_modal \| setup, required) |
|
|
48
81
|
| `integration.connected` | api-server | 2026-09-30 | An integration was connected. | `first_of_type` (boolean, required)<br>`provider` (string)<br>`type` (string, required) |
|
|
49
82
|
| `lead.captured` | api-server | 2026-09-30 | A consented lead (Teams waitlist or private-beta sign-up). The email stays in feedback_submissions. | `channel` (string, required)<br>`consent` (boolean, required)<br>`submission_id` (string, required) |
|
|
50
|
-
| `notification.dismissed` | ui | 2026-09-30 | A notification-centre item was dismissed. | `key` (string, required) |
|
|
51
|
-
| `notification.submitted` | ui | 2026-09-30 | A notification-centre item was submitted. | `email_domain` (string)<br>`key` (string, required) |
|
|
52
|
-
| `notification.viewed` | ui | 2026-09-30 | A notification-centre item was shown. | `key` (string, required) |
|
|
83
|
+
| `notification.dismissed` | ui | 2026-09-30 | A notification-centre item was dismissed. | `key` (string, required)<br>`moment` (task_failed \| first_workflow \| default) |
|
|
84
|
+
| `notification.submitted` | ui | 2026-09-30 | A notification-centre item was submitted. | `email_domain` (string)<br>`key` (string, required)<br>`moment` (task_failed \| first_workflow \| default)<br>`user_function` (engineer \| eng_lead \| founder \| product \| ops \| other) |
|
|
85
|
+
| `notification.viewed` | ui | 2026-09-30 | A notification-centre item was shown. | `key` (string, required)<br>`moment` (task_failed \| first_workflow \| default) |
|
|
53
86
|
| `onboarding.completed` | api-server | 2026-09-30 | Onboarding was completed. | `seconds_since_install` (integer)<br>`seconds_since_start` (integer, required) |
|
|
54
87
|
| `onboarding.dismissed` | api-server | 2026-09-30 | Onboarding was dismissed. | `seconds_since_install` (integer)<br>`seconds_since_start` (integer, required) |
|
|
55
88
|
| `onboarding.first_task_completed` | api-server | 2026-09-30 | The first task after onboarding completed. | `method` (string)<br>`seconds_since_install` (integer)<br>`seconds_since_start` (integer, required) |
|
|
@@ -58,12 +91,12 @@ Common properties, allowed on every event of this product:
|
|
|
58
91
|
| `onboarding.step_failed` | api-server | 2026-09-30 | An onboarding step failed. | `error_class` (string, required)<br>`seconds_since_install` (integer)<br>`seconds_since_start` (integer, required)<br>`step` (string, required) |
|
|
59
92
|
| `onboarding.step_skipped` | api-server | 2026-09-30 | An onboarding step was skipped. | `seconds_since_install` (integer)<br>`seconds_since_start` (integer, required)<br>`step` (string, required) |
|
|
60
93
|
| `onboarding.step_viewed` | api-server | 2026-09-30 | An onboarding step was shown. | `seconds_since_install` (integer)<br>`seconds_since_start` (integer, required)<br>`step` (string, required) |
|
|
61
|
-
| `org.profile_updated` | ui | 2026-10-12 | An admin changed the org profile. Lists which fields changed, never their values. | `fields` (array, required)<br>`surface` (
|
|
94
|
+
| `org.profile_updated` | ui | 2026-10-12 | An admin changed the org profile. Lists which fields changed, never their values. | `fields` (array of name \| website \| team_size \| use_case \| acquisition_source, required)<br>`surface` (enum, required) |
|
|
62
95
|
| `org.snapshot` | api-server | 2026-09-30 | Daily per-install user and agent counts. Counts only: no names, emails or IDs. | `agents_total` (integer ≥0, required)<br>`users_active_7d` (integer ≥0, required)<br>`users_admin` (integer ≥0, required)<br>`users_linked_github` (integer ≥0, required)<br>`users_linked_gitlab` (integer ≥0, required)<br>`users_linked_jira` (integer ≥0, required)<br>`users_linked_linear` (integer ≥0, required)<br>`users_linked_other` (integer ≥0, required)<br>`users_linked_slack` (integer ≥0, required)<br>`users_suspended` (integer ≥0, required)<br>`users_total` (integer ≥0, required)<br>`users_with_login` (integer ≥0, required) |
|
|
63
96
|
| `page.viewed` | ui | 2026-09-30 | A dashboard page was viewed. | `route_template` (string, required) |
|
|
64
97
|
| `popup.dismissed` | ui | 2026-10-12 | A dashboard pop-up was closed without submitting. | `method` (later \| close \| escape, required)<br>`popup` (feedback \| org_name \| used_by, required) |
|
|
65
98
|
| `popup.shown` | ui | 2026-10-12 | A dashboard pop-up was shown. Telemetry-gated: never sent while telemetry is off. | `popup` (feedback \| org_name \| used_by, required)<br>`trigger` (task_failed \| tasks_completed \| workflow_completed \| quarterly \| missing_org_name, required) |
|
|
66
|
-
| `popup.submitted` | ui | 2026-10-12 | A dashboard pop-up was submitted. Content stays out of telemetry: only flags for what was filled. | `has_contact` (boolean, required)<br>`has_message` (boolean, required)<br>`popup` (feedback \| org_name \| used_by, required)<br>`score` (integer ≥0) |
|
|
99
|
+
| `popup.submitted` | ui | 2026-10-12 | A dashboard pop-up was submitted. Content stays out of telemetry: only flags for what was filled. | `answered` (integer ≥0)<br>`has_contact` (boolean, required)<br>`has_message` (boolean, required)<br>`perks` (array of used_by \| slack_connect)<br>`popup` (feedback \| org_name \| used_by, required)<br>`score` (integer ≥0) |
|
|
67
100
|
| `ranking.opted_in` | api-server | 2026-10-18 | An admin opted the install into the public ranking, or the API rebuilt its listing after an org identity change. | `listing` (string, required) |
|
|
68
101
|
| `ranking.opted_out` | api-server | 2026-10-18 | The install left the public ranking: the admin turned it off, or the org name or website was cleared or changed. | `domain` (string, required) |
|
|
69
102
|
| `ranking.usage` | worker | 2026-10-18 | Token usage of one session on an install opted into the public ranking. Sent next to session.cost. | `cacheReadTokens` (integer ≥0)<br>`cacheWriteTokens` (integer ≥0)<br>`inputTokens` (integer ≥0, required)<br>`model` (string)<br>`outputTokens` (integer ≥0, required)<br>`provider` (string)<br>`totalTokens` (integer ≥0, required) |
|
|
@@ -77,6 +110,7 @@ Common properties, allowed on every event of this product:
|
|
|
77
110
|
| `session.failure` | worker | 2026-09-30 | A session failed. | `agentId` (string, required)<br>`durationMs` (integer, required)<br>`errorCategory` (string, required)<br>`model` (string, required)<br>`provider` (string, required)<br>`taskId` (string, nullable, required)<br>`trigger_surface` (enum, nullable, required)<br>`wasRateLimited` (boolean, required) |
|
|
78
111
|
| `session.started` | worker | 2026-09-30 | A worker or lead session started. | `agentId` (string, required)<br>`harnessProvider` (string, required)<br>`model` (string)<br>`role` (string, required)<br>`taskId` (string, nullable, required)<br>`trigger_surface` (enum, nullable, required) |
|
|
79
112
|
| `session.steered` | api-server | 2026-09-30 | A running session received a steering message. | `by_kind` (string, required)<br>`trigger_surface` (enum, nullable, required) |
|
|
113
|
+
| `setup.worker_command_copied` | ui | 2026-10-18 | An admin copied a worker command from the setup health popover. | `harness` (enum, required)<br>`target` (compose \| docker \| kubernetes, required) |
|
|
80
114
|
| `skill.invoked` | worker | 2026-09-30 | A skill was invoked in a session. | `skill_name` (string, required)<br>`skill_source` (string, required)<br>`trigger_surface` (enum, nullable, required) |
|
|
81
115
|
| `task.cancelled` | api-server | 2026-09-30 | A task was cancelled. | `agentId` (string)<br>`durationMs` (integer)<br>`previousStatus` (string, required)<br>`taskId` (string, required)<br>`task_source` (enum, required)<br>`trigger_surface` (enum, required) |
|
|
82
116
|
| `task.claimed` | api-server | 2026-09-30 | An agent claimed a task. | `agentId` (string, required)<br>`taskId` (string, required)<br>`task_source` (enum, required)<br>`trigger_surface` (enum, required) |
|
|
@@ -86,9 +120,9 @@ Common properties, allowed on every event of this product:
|
|
|
86
120
|
| `task.session_completed` | worker | 2026-09-30 | A worker session for a task finished. | `agentId` (string, required)<br>`durationMs` (integer, required)<br>`exitCode` (integer, required)<br>`harnessVariant` (string)<br>`harnessVersion` (string)<br>`isError` (boolean, required)<br>`model` (string, required)<br>`provider` (string, required)<br>`taskId` (string, nullable, required)<br>`trigger_surface` (enum, nullable, required) |
|
|
87
121
|
| `task.started` | api-server | 2026-09-30 | A task started running. | `agentId` (string, required)<br>`taskId` (string, required)<br>`task_source` (enum, required)<br>`trigger_surface` (enum, required) |
|
|
88
122
|
| `task.superseded` | api-server | 2026-09-30 | A task was superseded by another task. | `agentId` (string)<br>`durationMs` (integer)<br>`harnessVariant` (string)<br>`harnessVersion` (string)<br>`provider` (string)<br>`reason` (string, required)<br>`taskId` (string, required)<br>`task_source` (enum, required)<br>`trigger_surface` (enum, required) |
|
|
89
|
-
| `telemetry.enabled` | api-server | 2026-10-12 | Telemetry was turned on. Sent once, on the first boot or re-init after opting in. | `via` (banner \| settings \| env, required) |
|
|
123
|
+
| `telemetry.enabled` | api-server | 2026-10-12 | Telemetry was turned on. Sent once, on the first boot or re-init after opting in. | `via` (banner \| settings \| env \| benchmark, required) |
|
|
90
124
|
| `ui.session_started` | ui | 2026-09-30 | A dashboard session started. | none |
|
|
91
|
-
| `used_by.consent_changed` | ui | 2026-10-12 | An admin granted or revoked the "used by" logo consent. The request itself goes to /v1/used-by. | `granted` (boolean, required) |
|
|
125
|
+
| `used_by.consent_changed` | ui | 2026-10-12 | An admin granted or revoked the "used by" logo consent. The request itself goes to /v1/used-by. | `granted` (boolean, required)<br>`has_function` (boolean)<br>`has_quote` (boolean) |
|
|
92
126
|
| `workflow.completed` | api-server | 2026-09-30 | A workflow run completed. | `durationMs` (integer)<br>`stepsCompleted` (integer, required)<br>`stepsFailed` (integer, required)<br>`workflowId` (string, required) |
|
|
93
127
|
| `workflow.created` | api-server | 2026-09-30 | A workflow was created. | `nodeCount` (integer, required)<br>`via` (api \| mcp)<br>`workflowId` (string, required) |
|
|
94
128
|
| `workflow.deleted` | api-server | 2026-09-30 | A workflow was deleted. | `via` (api \| mcp)<br>`workflowId` (string, required) |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"repo": "desplega-ai/proxy",
|
|
3
|
-
"commit": "
|
|
3
|
+
"commit": "cc593585467a920dcb8731993d092639372dc7af",
|
|
4
4
|
"files": {
|
|
5
|
-
"types.gen.ts": "
|
|
6
|
-
"catalog.json": "
|
|
7
|
-
"EVENTS.md": "
|
|
5
|
+
"types.gen.ts": "aa8a682f1d875515d63cf5bd3fa667dcb06cd851f8b2b798482a4c71cd775444",
|
|
6
|
+
"catalog.json": "595654f288ae2a7cbb265b6b2a72392acc33f5acde365d72829101912525a891",
|
|
7
|
+
"EVENTS.md": "51ee5491c633d684b163d727a369a08b5c1d3f4ba453277d840526449a0bad0c",
|
|
8
8
|
"ranking/fixtures/expected.json": "6d506546f48d99a089666bed2a4c08752ebb63a029392c76ffd057e9520adc70",
|
|
9
9
|
"ranking/fixtures/invalid/bad-category.json": "a4c36da6079c36d15e5e8c8e6322fc97b172de015a80a26cee8cab699f666236",
|
|
10
10
|
"ranking/fixtures/invalid/bad-claim.json": "cee14d465545d057cfb61922301a5119187ba17d70efabb16528a5e305d7b065",
|
|
@@ -34,9 +34,10 @@
|
|
|
34
34
|
"ranking/fixtures/valid/category-without-subcategory.json": "45c5b872aec232bdcba791e6ba1a7aba698c825f389e194a38e96ad141f56e5a",
|
|
35
35
|
"ranking/fixtures/valid/full.json": "d6d93c4a6159e814c3f089c69083df700fb19359f127ccd2b71529a058dfe5e9",
|
|
36
36
|
"ranking/fixtures/valid/minimal.json": "de6629d6ee2c4b67598abfc5ec7f6470a93dd9893b07e6e7c93d018cf5445593",
|
|
37
|
+
"ranking/fixtures/valid/no-claim.json": "fa5c08ec50c1b602f404cf36ce8b1c03d131111379d914699378dd448431cb84",
|
|
37
38
|
"ranking/fixtures/valid/padded-text.json": "db71248bf83bb1ffb639208ec467a0228e5c37f604299d09838ab25dc61986a3",
|
|
38
39
|
"ranking/fixtures/valid/unicode-name.json": "01a9d2cc8c5fec128af3eef35bf16696286f28636dac21b9dec107b28fddf743",
|
|
39
|
-
"ranking/listing.v1.schema.json": "
|
|
40
|
+
"ranking/listing.v1.schema.json": "f839b669abadb25e031515a5cc2abd3aa2024e85e6117cae83133fc9dfbb769d",
|
|
40
41
|
"ranking/taxonomy.json": "c6abe7e437635c9a3c1a82a3477a8757ba6c0cb7cbeae86c8c3d175fb37f402c"
|
|
41
42
|
}
|
|
42
43
|
}
|