Compare commits

..

40 Commits

Author SHA1 Message Date
Aiden Cline 50d5ead203 refactor(codemode): expose OpenAPI from package root 2026-07-04 00:09:46 -05:00
Aiden Cline e8ecb5e265 fix(codemode): skip SSE OpenAPI operations 2026-07-03 23:51:26 -05:00
Aiden Cline 6dd9a8158a fix(codemode): resolve OpenAPI tool conflicts 2026-07-03 23:46:57 -05:00
Aiden Cline 2316f5e5b3 fix(codemode): flatten OpenAPI tool inputs 2026-07-03 22:46:41 -05:00
Aiden Cline adca41c50c fix(codemode): preserve constrained OpenAPI types 2026-07-03 17:32:18 -05:00
Aiden Cline 5a3520aa63 test(codemode): refresh OpenAPI fixture from v2 API 2026-07-03 17:18:51 -05:00
Aiden Cline e213a08b08 feat(codemode): preserve OpenAPI operation namespaces 2026-07-03 17:05:17 -05:00
Aiden Cline 7213242c99 revert weird change 2026-07-03 16:57:00 -05:00
Aiden Cline 88ac234fa5 test(codemode): name OpenAPI fixture for v2 2026-07-03 16:53:50 -05:00
Aiden Cline 79a3a1210a test(codemode): assert OpenAPI fixture tool shapes 2026-07-03 16:50:06 -05:00
Aiden Cline 3bf6636cbe test(codemode): use fixed OpenAPI fixture 2026-07-03 16:42:12 -05:00
Aiden Cline f2e43da451 test(codemode): cover OpenAPI adapter with opencode spec 2026-07-03 16:37:10 -05:00
Aiden Cline 701bf1854f refactor(codemode): inline trivial runtime helpers 2026-07-03 16:25:10 -05:00
Aiden Cline 04c4e90e61 refactor(codemode): inline OpenAPI error summary 2026-07-03 16:22:48 -05:00
Aiden Cline d8e3b692c0 refactor(codemode): inline private token estimate 2026-07-03 15:49:08 -05:00
Aiden Cline 34c65b71e6 refactor(codemode): simplify OpenAPI adapter split 2026-07-03 15:29:02 -05:00
Aiden Cline afb42e1ee9 refactor(codemode): split OpenAPI adapter modules 2026-07-03 15:22:33 -05:00
Aiden Cline d9e870ad5a refactor(codemode): expose OpenAPI only as adapter 2026-07-03 15:19:04 -05:00
Aiden Cline 813fb9d115 refactor(codemode): move OpenAPI adapter 2026-07-03 15:01:22 -05:00
Aiden Cline e4e27c4b46 test(opencode): stabilize websocket idle pruning 2026-07-03 13:53:15 -05:00
Aiden Cline 49ef91f5e7 fix(codemode): harden OpenAPI tool names and required params 2026-07-03 13:39:37 -05:00
Aiden Cline bf1e20a9e7 fix(codemode): harden OpenAPI path and record handling, cover naming and headers 2026-07-03 13:31:25 -05:00
Aiden Cline 6efdae2890 refactor(codemode): trim OpenAPI adapter to basic converter scope 2026-07-03 13:13:45 -05:00
Aiden Cline a63800ce9e refactor(codemode): align OpenAPI adapter with style guide 2026-07-03 12:47:04 -05:00
Aiden Cline 264b7c0e47 fix(codemode): refine OpenAPI response selection and header validation 2026-07-03 12:40:21 -05:00
Aiden Cline 5f785cf405 refactor(codemode): validate OpenAPI calls locally before auth and simplify helpers 2026-07-03 12:28:19 -05:00
Aiden Cline b8d4006261 fix(codemode): correct OpenAPI response fallthrough and cookie handling 2026-07-03 12:19:03 -05:00
Aiden Cline 6c40e9a564 fix(codemode): handle 2XX wildcards and required bodies in OpenAPI adapter 2026-07-03 12:10:00 -05:00
Aiden Cline 9793d9f141 fix(codemode): address OpenAPI adapter review feedback 2026-07-03 12:03:32 -05:00
Aiden Cline 2cca149c1d feat(codemode): add OpenAPI tool adapter 2026-07-03 11:50:27 -05:00
Aiden Cline 27e8e2e22b refactor(opencode): fail the execute tool on program failure (#35180) 2026-07-03 11:27:36 -05:00
Aiden Cline 39c6dd1c32 feat(tui): render code-mode execute tool with child calls (#35113)
deploy / deploy (push) Has been cancelled
2026-07-03 11:17:21 -05:00
opencode-agent[bot] a09447bc9b chore: generate 2026-07-03 15:40:10 +00:00
Adam 16815473a4 chore: artifacts 2026-07-03 10:38:49 -05:00
Adam 1f47bbfce2 fix(stats): link market share labs 2026-07-03 10:34:13 -05:00
James Long 33ed95f09c fix(core): rewrite replacements while hoisting layers (#35175) 2026-07-03 11:26:49 -04:00
opencode-agent[bot] 2152624f37 chore: generate 2026-07-03 15:16:03 +00:00
Adam 7d84cb05ef feat(stats): add model momentum section 2026-07-03 10:13:56 -05:00
James Long eba0bd0397 chore: upgrade turbo (#35173) 2026-07-03 10:41:17 -04:00
Kit Langton 9aab24e95e fix(opencode): provide Observability beneath all route service graphs (#35171) 2026-07-03 10:00:30 -04:00
47 changed files with 30976 additions and 338 deletions
+1 -3
View File
@@ -17,6 +17,4 @@ if (process.versions.bun !== expectedBunVersion) {
console.warn(`Warning: Bun version ${process.versions.bun} differs from expected ${expectedBunVersion}`);
}
'
# Only typecheck packages affected since the merge base with origin/dev,
# plus their dependents. Override the base with TURBO_SCM_BASE if needed.
TURBO_SCM_BASE="${TURBO_SCM_BASE:-origin/dev}" bun turbo typecheck --affected
bun typecheck
+3
View File
@@ -0,0 +1,3 @@
node_modules
.remotion
out/frame-*.png
+483
View File
@@ -0,0 +1,483 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "glm52-rise-video",
"dependencies": {
"@remotion/cli": "^4.0.384",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"remotion": "^4.0.384",
},
"devDependencies": {
"@types/react": "^19.2.8",
"@types/react-dom": "^19.2.3",
"typescript": "^5.8.2",
},
},
},
"packages": {
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="],
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="],
"@babel/parser": ["@babel/parser@7.24.1", "", { "bin": "./bin/babel-parser.js" }, "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg=="],
"@babel/types": ["@babel/types@7.24.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w=="],
"@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="],
"@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="],
"@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="],
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="],
"@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="],
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="],
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="],
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="],
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="],
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="],
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="],
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="],
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="],
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="],
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="],
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="],
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="],
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="],
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="],
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="],
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="],
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="],
"@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="],
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="],
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="],
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="],
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="],
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
"@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
"@mediabunny/aac-encoder": ["@mediabunny/aac-encoder@1.47.0", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-JNzgdJoHMFFnv5imi1+dmjZMudsJ1zNCUCEkKjBh90cqGhAFg8xu4V2gsyxE2i6oq/YpWx23P+OvoANLSMcDzA=="],
"@mediabunny/flac-encoder": ["@mediabunny/flac-encoder@1.47.0", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-VpKmJO0xlYcFCRD6JvJlMbNQ6d/6YMHdO1gFIqWlZABHjSSL6BquNNEgWSCv5vdF8ELDBwIYBVZEslakIB/7GA=="],
"@mediabunny/mp3-encoder": ["@mediabunny/mp3-encoder@1.47.0", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-JyzZyGeGRm2HVUQaGJ/VZT9OG+kG00mA8SLP/f3CO7+qWAmBncKc16WYXWHbZEo8Jn/ZGA6De32S5R2bTQbDqA=="],
"@module-federation/error-codes": ["@module-federation/error-codes@0.22.0", "", {}, "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug=="],
"@module-federation/runtime": ["@module-federation/runtime@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/runtime-core": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA=="],
"@module-federation/runtime-core": ["@module-federation/runtime-core@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA=="],
"@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA=="],
"@module-federation/sdk": ["@module-federation/sdk@0.22.0", "", {}, "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g=="],
"@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA=="],
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="],
"@remotion/bundler": ["@remotion/bundler@4.0.483", "", { "dependencies": { "@remotion/media-parser": "4.0.483", "@remotion/studio": "4.0.483", "@remotion/studio-shared": "4.0.483", "@remotion/timeline-utils": "4.0.483", "@rspack/core": "1.7.11", "@rspack/plugin-react-refresh": "1.6.1", "css-loader": "7.1.4", "esbuild": "0.28.1", "react-refresh": "0.18.0", "remotion": "4.0.483", "style-loader": "4.0.0", "webpack": "5.105.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-5fQRMYgr2sxZPBOThnIVuFwHBq/FhusJ+Ke6xopga8io8ecK/mj9GaRXC3tgfMa+YWuu8ZSXZ0U9EsMZjjP5YQ=="],
"@remotion/canvas-capture": ["@remotion/canvas-capture@4.0.483", "", { "dependencies": { "mediabunny": "1.47.0", "remotion": "4.0.483" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-JABgbfvXwjFp1E61tlDN9gVAH8OoeF4kUUELNwG9kcNOE4ex8+vCYEO6VKIaXZ4l8A1PEAQ5EK//NheTJ80gfw=="],
"@remotion/cli": ["@remotion/cli@4.0.483", "", { "dependencies": { "@remotion/bundler": "4.0.483", "@remotion/media-utils": "4.0.483", "@remotion/player": "4.0.483", "@remotion/renderer": "4.0.483", "@remotion/studio": "4.0.483", "@remotion/studio-server": "4.0.483", "@remotion/studio-shared": "4.0.483", "dotenv": "17.3.1", "minimist": "1.2.6", "prompts": "2.4.2", "remotion": "4.0.483" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" }, "bin": { "remotion": "remotion-cli.js", "remotionb": "remotionb-cli.js", "remotiond": "remotiond-cli.js" } }, "sha512-z4TQcgTfQbSIV4GQpCvIihDL77M+leQelbxv962PmfSKTT7z3XnNN732PcZ4sei2+Xg+d2SD95K4tI5XBYs5Gw=="],
"@remotion/compositor-darwin-arm64": ["@remotion/compositor-darwin-arm64@4.0.483", "", { "os": "darwin", "cpu": "arm64" }, "sha512-CkEJXouGEoCs5PX3KOufkXrlT/Kgn0ZF7SEQ4meCYGYMZD+QPVtsmS1MXH8pQ4RHlFO6Tk7g0CIHMT3Y4yzpuA=="],
"@remotion/compositor-darwin-x64": ["@remotion/compositor-darwin-x64@4.0.483", "", { "os": "darwin", "cpu": "x64" }, "sha512-vDZK5U8FYbHGMjFC2lUgJRBz8KXwbwFSvEQi8FATD0roNg75SoaEJWrqAOIVv8v5eBjPvo18znDc36NLRYn1Eg=="],
"@remotion/compositor-linux-arm64-gnu": ["@remotion/compositor-linux-arm64-gnu@4.0.483", "", { "os": "linux", "cpu": "arm64" }, "sha512-1LzfYDY/DQxy3MIc9pCbTn1ObcBDcyI6MzODOwe1bTZl8TZxdUUt1M3hDrQ60AB6iHwruBAnzT9dnogiMIdSew=="],
"@remotion/compositor-linux-arm64-musl": ["@remotion/compositor-linux-arm64-musl@4.0.483", "", { "os": "linux", "cpu": "arm64" }, "sha512-nG1btxg0HXuLzulIqAg9NnxWyewZNrA0iLe82HdniaJjeWLORreGo4cEEJz1SjbDpQuPEY562XGkTO2DLKK5mA=="],
"@remotion/compositor-linux-x64-gnu": ["@remotion/compositor-linux-x64-gnu@4.0.483", "", { "os": "linux", "cpu": "x64" }, "sha512-CV4h6r2rNYh4P8utUzP6RM2vW2vq43nA3IvVOwRSuh9LwJh/7rwG53Oco4HanY/sstaNuymGpT57wdXwONU5CQ=="],
"@remotion/compositor-linux-x64-musl": ["@remotion/compositor-linux-x64-musl@4.0.483", "", { "os": "linux", "cpu": "x64" }, "sha512-moKvavbkoz5nteJZA4K6LMgTTlewhwIbtO7DYARZ3LK3ClGUKnYfFcmaPS15hMun02JPTOMIWbrlaszdR75mxA=="],
"@remotion/compositor-win32-x64-msvc": ["@remotion/compositor-win32-x64-msvc@4.0.483", "", { "os": "win32", "cpu": "x64" }, "sha512-eDpWe6Vy7ySHugwxlgaeohqdBwR1etxiymXzT13cgbPw2+p6d55z1tJ7VPTXyfu0o+UdyRTauWqD4msoxN0wow=="],
"@remotion/licensing": ["@remotion/licensing@4.0.483", "", {}, "sha512-GRtjykrxMmB5Cjpq1oVqeYIRXI95vid6afX0LTLfp1shD6MR4lTZRoRuopxrrZp1E4XFGXoY64b6dlIudgTyBQ=="],
"@remotion/media-parser": ["@remotion/media-parser@4.0.483", "", {}, "sha512-iva9Eof7QQX+3hGxH/N8pGi80wgdGuzOr825Zn7IuEe7IWdtRYWlFpCEghmyfhrwgaWa7RY51wg77ycR3c3nRg=="],
"@remotion/media-utils": ["@remotion/media-utils@4.0.483", "", { "dependencies": { "mediabunny": "1.47.0", "remotion": "4.0.483" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4T4WQh/U95kCBzgmz/EL/HL8Zeox/AKAL5ufsehrZFgwlcvH1EsKNJH/RWaAtNPRLF+pskEOgFzPYaczHeI8hg=="],
"@remotion/player": ["@remotion/player@4.0.483", "", { "dependencies": { "remotion": "4.0.483" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yyIQ9vinUqqS0fQeL52bPCWQIr8qDXCqQ4iys8P7dSZncdu8V29p4W2a0/4eKV8bv5+mjnJQ/U6nl9NxBF1hdA=="],
"@remotion/renderer": ["@remotion/renderer@4.0.483", "", { "dependencies": { "@remotion/licensing": "4.0.483", "@remotion/streaming": "4.0.483", "execa": "5.1.1", "remotion": "4.0.483", "source-map": "0.8.0-beta.0", "ws": "8.21.0" }, "optionalDependencies": { "@remotion/compositor-darwin-arm64": "4.0.483", "@remotion/compositor-darwin-x64": "4.0.483", "@remotion/compositor-linux-arm64-gnu": "4.0.483", "@remotion/compositor-linux-arm64-musl": "4.0.483", "@remotion/compositor-linux-x64-gnu": "4.0.483", "@remotion/compositor-linux-x64-musl": "4.0.483", "@remotion/compositor-win32-x64-msvc": "4.0.483" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-eSKdQqm8rcl+GNyOhFsBgcPYWMcxTJWHL5xaNrd037piCaL3sdJ57OEO/AbfEvvOO14zwUvlsONKjlkLlEVyKg=="],
"@remotion/streaming": ["@remotion/streaming@4.0.483", "", {}, "sha512-96rqrk+l5AfriHOqmqxMn8rI6UJfFY7r5UMDZoSKqXWzTOwj+0VWHTRl9ilZQMXhYACaMSA/5yrL9jgQEK8Yuw=="],
"@remotion/studio": ["@remotion/studio@4.0.483", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.31", "@remotion/canvas-capture": "4.0.483", "@remotion/media-utils": "4.0.483", "@remotion/player": "4.0.483", "@remotion/renderer": "4.0.483", "@remotion/studio-shared": "4.0.483", "@remotion/timeline-utils": "4.0.483", "@remotion/web-renderer": "4.0.483", "@remotion/zod-types": "4.0.483", "mediabunny": "1.47.0", "memfs": "3.4.3", "open": "8.4.2", "remotion": "4.0.483", "semver": "7.5.3", "zod": "4.3.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-gNa1Lw8NmHl0jwFb5fk7rzA+WFTJQpGDT/49A38t9jpEwoF+h1mKTgY8gA202apzjBHrEECdFE450npnBOUpUw=="],
"@remotion/studio-server": ["@remotion/studio-server@4.0.483", "", { "dependencies": { "@babel/parser": "7.24.1", "@babel/types": "7.24.0", "@remotion/bundler": "4.0.483", "@remotion/renderer": "4.0.483", "@remotion/studio-shared": "4.0.483", "memfs": "3.4.3", "open": "8.4.2", "prettier": "3.8.1", "recast": "0.23.11", "remotion": "4.0.483", "semver": "7.5.3" } }, "sha512-2FSLbVN5N8bgtQPX+RQRbis557tJJnVTOZuEBZndfC9NOoPdARlSgEnwVer9tBNczUlc6B3KrPxyPSlS3UjL+Q=="],
"@remotion/studio-shared": ["@remotion/studio-shared@4.0.483", "", { "dependencies": { "remotion": "4.0.483" } }, "sha512-aXxBYUgsWgphHVq7T7bz+ICMGzfii7pcX1IxS5hbLMLJHqlDtk9g+qcxm4kJ2Fjj/Gb5gERKiNzYym8WZTIM2Q=="],
"@remotion/timeline-utils": ["@remotion/timeline-utils@4.0.483", "", { "dependencies": { "mediabunny": "1.47.0" } }, "sha512-KTTMdpNA5uRLX+iisAITO+V9cJBk17F8EWvuUnAEVmAFOQTbGIyPI9HNw5pZmL7SlzOJdFjAtksTjipeYGkEug=="],
"@remotion/web-renderer": ["@remotion/web-renderer@4.0.483", "", { "dependencies": { "@mediabunny/aac-encoder": "1.47.0", "@mediabunny/flac-encoder": "1.47.0", "@mediabunny/mp3-encoder": "1.47.0", "@remotion/licensing": "4.0.483", "mediabunny": "1.47.0", "remotion": "4.0.483" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-14iURfVWA/hcF/rJvkid1ZR5nmnVhkTIf071FabCFi6kdViOSVBugSglJ8tUPvWVbWmxlXGDGQD9CSU18IATww=="],
"@remotion/zod-types": ["@remotion/zod-types@4.0.483", "", { "dependencies": { "remotion": "4.0.483" }, "peerDependencies": { "zod": "4.3.6" } }, "sha512-KIVYIzFpZBDB0wxGGQu5tDBr4XOYRzvrPXjmo6O/FI5Xx7O8hgvJmBs9VDkEwonAOft86sg79hI19F1DTX1p4w=="],
"@rspack/binding": ["@rspack/binding@1.7.11", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.7.11", "@rspack/binding-darwin-x64": "1.7.11", "@rspack/binding-linux-arm64-gnu": "1.7.11", "@rspack/binding-linux-arm64-musl": "1.7.11", "@rspack/binding-linux-x64-gnu": "1.7.11", "@rspack/binding-linux-x64-musl": "1.7.11", "@rspack/binding-wasm32-wasi": "1.7.11", "@rspack/binding-win32-arm64-msvc": "1.7.11", "@rspack/binding-win32-ia32-msvc": "1.7.11", "@rspack/binding-win32-x64-msvc": "1.7.11" } }, "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q=="],
"@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.7.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig=="],
"@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.7.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA=="],
"@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.7.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA=="],
"@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.7.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw=="],
"@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.7.11", "", { "os": "linux", "cpu": "x64" }, "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ=="],
"@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.7.11", "", { "os": "linux", "cpu": "x64" }, "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg=="],
"@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.7.11", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ=="],
"@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.7.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA=="],
"@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.7.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw=="],
"@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.7.11", "", { "os": "win32", "cpu": "x64" }, "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q=="],
"@rspack/core": ["@rspack/core@1.7.11", "", { "dependencies": { "@module-federation/runtime-tools": "0.22.0", "@rspack/binding": "1.7.11", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew=="],
"@rspack/lite-tapable": ["@rspack/lite-tapable@1.1.0", "", {}, "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw=="],
"@rspack/plugin-react-refresh": ["@rspack/plugin-react-refresh@1.6.1", "", { "dependencies": { "error-stack-parser": "^2.1.4", "html-entities": "^2.6.0" }, "peerDependencies": { "react-refresh": ">=0.10.0 <1.0.0", "webpack-hot-middleware": "2.x" }, "optionalPeers": ["webpack-hot-middleware"] }, "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw=="],
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="],
"@types/dom-mediacapture-transform": ["@types/dom-mediacapture-transform@0.1.11", "", { "dependencies": { "@types/dom-webcodecs": "*" } }, "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ=="],
"@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="],
"@types/eslint": ["@types/eslint@9.6.1", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag=="],
"@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="],
"@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
"@types/node": ["@types/node@26.0.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw=="],
"@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="],
"@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
"@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="],
"@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="],
"@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.13.2", "", {}, "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ=="],
"@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.14.1", "", {}, "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA=="],
"@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.13.2", "", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA=="],
"@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.13.2", "", {}, "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA=="],
"@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/wasm-gen": "1.14.1" } }, "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw=="],
"@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.13.2", "", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw=="],
"@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.13.2", "", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw=="],
"@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.13.2", "", {}, "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ=="],
"@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/helper-wasm-section": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-opt": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1", "@webassemblyjs/wast-printer": "1.14.1" } }, "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ=="],
"@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg=="],
"@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1" } }, "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw=="],
"@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ=="],
"@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw=="],
"@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="],
"@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="],
"acorn": ["acorn@8.17.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="],
"acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="],
"ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="],
"ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="],
"ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="],
"ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="],
"baseline-browser-mapping": ["baseline-browser-mapping@2.10.40", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw=="],
"browserslist": ["browserslist@4.28.4", "", { "dependencies": { "baseline-browser-mapping": "^2.10.38", "caniuse-lite": "^1.0.30001799", "electron-to-chromium": "^1.5.376", "node-releases": "^2.0.48", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw=="],
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
"caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="],
"chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="],
"commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
"css-loader": ["css-loader@7.1.4", "", { "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.40", "postcss-modules-extract-imports": "^3.1.0", "postcss-modules-local-by-default": "^4.0.5", "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.6.3" }, "peerDependencies": { "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "webpack": "^5.27.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw=="],
"cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
"define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="],
"dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="],
"electron-to-chromium": ["electron-to-chromium@1.5.379", "", {}, "sha512-v/qV5aV5EUA2pGilzUCq5/eyOloZAqDZBu9UMBIzgPpLlprjSR6zswsWBTv0KpqxLGUAZEwhO95ZCt7srymNVA=="],
"enhanced-resolve": ["enhanced-resolve@5.24.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw=="],
"error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="],
"es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="],
"esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="],
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
"eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="],
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
"esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
"estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="],
"events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="],
"execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="],
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
"fast-uri": ["fast-uri@3.1.2", "", {}, "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="],
"fs-monkey": ["fs-monkey@1.0.3", "", {}, "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q=="],
"get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
"glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="],
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
"html-entities": ["html-entities@2.6.0", "", {}, "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ=="],
"human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="],
"icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="],
"is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="],
"is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
"is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="],
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="],
"json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
"json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
"kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
"loader-runner": ["loader-runner@4.3.2", "", {}, "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w=="],
"lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="],
"lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="],
"mediabunny": ["mediabunny@1.47.0", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-XQMZAcaKPkJ7hQ/Q2fvBdl3ZazQl2WVxDysUbJWh4PuAnLoerdsQBdPTDWdUdK6hh26LQ8Ue94MLLnmpWvlUYg=="],
"memfs": ["memfs@3.4.3", "", { "dependencies": { "fs-monkey": "1.0.3" } }, "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg=="],
"merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
"mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
"mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
"mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
"minimist": ["minimist@1.2.6", "", {}, "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="],
"nanoid": ["nanoid@3.3.15", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA=="],
"neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
"node-releases": ["node-releases@2.0.50", "", {}, "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg=="],
"npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="],
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
"open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="],
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="],
"postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="],
"postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="],
"postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="],
"postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="],
"postcss-selector-parser": ["postcss-selector-parser@7.1.4", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg=="],
"postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
"prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="],
"prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
"react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="],
"react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="],
"react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="],
"recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="],
"remotion": ["remotion@4.0.483", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-lf4xq4Twn75TQeTavFLrTE4zdck7EKBSx07ZrPv4om40Sist+3G0kq7NNzSjMeJ6G2Wx6vI+0oICD/vv4sGWtg=="],
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
"schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="],
"semver": ["semver@7.5.3", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ=="],
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
"sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
"source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
"source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
"stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="],
"strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
"style-loader": ["style-loader@4.0.0", "", { "peerDependencies": { "webpack": "^5.27.0" } }, "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA=="],
"supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
"tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
"terser": ["terser@5.48.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q=="],
"terser-webpack-plugin": ["terser-webpack-plugin@5.6.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ=="],
"tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="],
"to-fast-properties": ["to-fast-properties@2.0.0", "", {}, "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="],
"tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
"update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
"watchpack": ["watchpack@2.5.2", "", { "dependencies": { "graceful-fs": "^4.1.2" } }, "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg=="],
"webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="],
"webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="],
"webpack-sources": ["webpack-sources@3.5.0", "", {}, "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ=="],
"whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="],
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="],
"yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
"zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
"css-loader/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
"esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
"recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
"source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
{
"name": "glm52-rise-video",
"private": true,
"type": "module",
"scripts": {
"render": "remotion render src/index.tsx GLM52Rise out/glm-52-broke-out.mp4 --codec h264 --pixel-format yuv420p",
"render:sheep": "remotion render src/index.tsx NZSheep out/nz-sheep.mp4 --codec h264 --pixel-format yuv420p",
"render:novel": "remotion render src/index.tsx NovelTokens out/novel-1984.mp4 --codec h264 --pixel-format yuv420p",
"render:flash": "remotion render src/index.tsx FlashShare out/flash-share.mp4 --codec h264 --pixel-format yuv420p",
"render:minimax": "remotion render src/index.tsx MiniMaxClimb out/minimax-climb.mp4 --codec h264 --pixel-format yuv420p",
"still:june": "remotion still src/index.tsx JuneTotals out/june-totals.png --frame=0"
},
"dependencies": {
"@remotion/cli": "^4.0.384",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"remotion": "^4.0.384"
},
"devDependencies": {
"@types/react": "^19.2.8",
"@types/react-dom": "^19.2.3",
"typescript": "^5.8.2"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

+156
View File
@@ -0,0 +1,156 @@
// Verified against the production opencode-stats PlanetScale DB.
// Scope: tier='Go' (OpenCode Go), dataset='zen', client='all', source='all', grain='day'.
// metric = total_tokens. Daily token volume per model; GLM-5.2 (zhipu) launched Jun 17.
// Segments per day (tokens): glm-5.2, deepseek-v4-flash, deepseek-v4-pro, minimax-m3, all others.
export type Day = {
date: string
total: number
glm: number
dsf: number
dsp: number
mm: number
others: number
}
export const days: Day[] = [
{
date: "Jun 12",
total: 2_283_799_449_383,
glm: 0,
dsf: 1_176_701_653_509,
dsp: 569_527_034_307,
mm: 159_016_250_684,
others: 378_554_510_883,
},
{
date: "Jun 13",
total: 2_008_462_388_420,
glm: 0,
dsf: 995_338_131_997,
dsp: 445_817_536_548,
mm: 211_743_241_967,
others: 355_563_477_908,
},
{
date: "Jun 14",
total: 2_007_785_405_251,
glm: 0,
dsf: 983_954_176_228,
dsp: 428_151_999_341,
mm: 262_476_527_930,
others: 333_202_701_752,
},
{
date: "Jun 15",
total: 2_694_736_103_062,
glm: 0,
dsf: 1_255_893_953_859,
dsp: 632_223_338_376,
mm: 352_507_442_991,
others: 454_111_367_836,
},
{
date: "Jun 16",
total: 2_838_153_758_908,
glm: 0,
dsf: 1_336_625_283_800,
dsp: 676_480_415_730,
mm: 305_268_829_013,
others: 519_779_230_365,
},
{
date: "Jun 17",
total: 2_778_964_711_109,
glm: 70_095_977_043,
dsf: 1_339_831_523_555,
dsp: 660_414_395_220,
mm: 251_302_096_157,
others: 457_320_719_134,
},
{
date: "Jun 18",
total: 2_806_992_430_656,
glm: 201_130_231_172,
dsf: 1_295_599_996_869,
dsp: 595_665_008_776,
mm: 322_205_104_324,
others: 392_392_089_515,
},
{
date: "Jun 19",
total: 2_419_611_630_232,
glm: 199_086_413_910,
dsf: 1_115_750_468_802,
dsp: 475_965_869_304,
mm: 303_586_698_735,
others: 325_222_179_481,
},
{
date: "Jun 20",
total: 2_188_278_916_865,
glm: 193_931_516_396,
dsf: 1_050_194_681_012,
dsp: 395_303_435_278,
mm: 281_998_000_337,
others: 266_851_283_842,
},
{
date: "Jun 21",
total: 2_042_309_961_344,
glm: 181_894_043_118,
dsf: 985_164_570_580,
dsp: 368_194_079_542,
mm: 259_812_551_324,
others: 247_244_716_780,
},
{
date: "Jun 22",
total: 2_893_934_325_663,
glm: 301_759_048_475,
dsf: 1_298_124_282_989,
dsp: 581_012_596_194,
mm: 371_581_117_839,
others: 341_457_280_166,
},
{
date: "Jun 23",
total: 3_109_009_321_480,
glm: 282_277_235_158,
dsf: 1_423_571_678_821,
dsp: 627_374_654_587,
mm: 429_416_300_508,
others: 346_369_452_406,
},
{
date: "Jun 24",
total: 2_939_149_971_595,
glm: 256_497_442_533,
dsf: 1_373_583_023_234,
dsp: 601_270_997_775,
mm: 391_586_493_231,
others: 316_212_014_822,
},
{
date: "Jun 25",
total: 3_029_641_552_948,
glm: 256_279_657_734,
dsf: 1_481_084_002_776,
dsp: 602_077_167_287,
mm: 375_985_302_874,
others: 314_215_422_277,
},
]
export const launchIndex = 5 // Jun 17, first day of GLM-5.2 usage
// GLM-5.2 weekly token volume, Jun 19-25 (sum of glm): 1,671,725,357,324 = 1.67T
export const glmWeekTokensT = 1.672
// stacked segments, bottom -> top. GLM-5.2 is the hero (blue); the rest are the field it cut into.
export const segments = [
{ key: "glm", label: "GLM-5.2", color: "#3b5cf6", hero: true },
{ key: "dsf", label: "deepseek-v4-flash", color: "#9ca3ad" },
{ key: "dsp", label: "deepseek-v4-pro", color: "#b3b9c1" },
{ key: "mm", label: "minimax-m3", color: "#c8cdd3" },
{ key: "others", label: "other models", color: "#dde0e4" },
] as const
+185
View File
@@ -0,0 +1,185 @@
import React from "react"
import { AbsoluteFill, Easing, interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion"
// stats.opencode.ai design tokens (light theme)
const c = {
bg: "#ffffff",
ink: "#161616",
muted: "#5c5c5c",
faint: "#808080",
line: "#e6e6e6",
dot: "#e4e4e4",
gray: "#aab0b8",
accent: "#3b5cf6",
accentHi: "#5b78ff",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
const DOT_MASK =
"url(\"data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E\")"
// verified: OpenCode Go, week of Jun 22-28, 2026 (2026-W26). share = % of 19.64T total Go tokens.
const bars = [
{ label: "deepseek-v4-flash", share: 48.3, hero: true },
{ label: "deepseek-v4-pro", share: 19.4 },
{ label: "minimax-m3", share: 13.0 },
{ label: "glm-5.2", share: 8.3 },
{ label: "mimo-v2.5", share: 4.3 },
{ label: "kimi-k2.7-code", share: 2.6 },
{ label: "other models", share: 4.1 },
]
function DataWordmark({ height = 30 }: { height?: number }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color: c.ink }}>
<path opacity="0.2" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
export function FlashShare() {
const frame = useCurrentFrame()
const { fps } = useVideoConfig()
const grow = (i: number) =>
Math.min(
1,
Math.max(0, spring({ frame: frame - 18 - i * 7, fps, config: { damping: 18, stiffness: 120, mass: 0.6 } })),
)
return (
<AbsoluteFill style={{ background: c.bg, color: c.ink, fontFamily: MONO, padding: 72, boxSizing: "border-box" }}>
<div style={{ height: "100%", display: "flex", flexDirection: "column" }}>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.faint, letterSpacing: 1 }}>JUN 2228, 2026</div>
</div>
{/* headline (static) */}
<div style={{ marginTop: 50 }}>
<div style={{ fontSize: 23, fontWeight: 600, color: c.muted, letterSpacing: 2 }}>
OPENCODE GO · SHARE OF TOKENS
</div>
<div
style={{ display: "flex", justifyContent: "space-between", alignItems: "baseline", gap: 24, marginTop: 14 }}
>
<div style={{ fontSize: 62, fontWeight: 600, letterSpacing: -2, lineHeight: 1 }}>DeepSeek V4 Flash</div>
<div
style={{
fontSize: 88,
fontWeight: 600,
letterSpacing: -2,
lineHeight: 1,
color: c.accent,
fontVariantNumeric: "tabular-nums",
}}
>
48%
</div>
</div>
</div>
{/* bar chart */}
<div style={{ flex: 1, display: "flex", flexDirection: "column", justifyContent: "center", gap: 16 }}>
{bars.map((b, i) => {
const g = grow(i)
const pct = b.share * g
return (
<div key={b.label} style={{ display: "flex", alignItems: "center", gap: 18 }}>
<div
style={{
width: 268,
fontSize: 23,
fontWeight: b.hero ? 600 : 500,
color: b.hero ? c.ink : c.muted,
textAlign: "right",
whiteSpace: "nowrap",
}}
>
{b.label}
</div>
<div style={{ position: "relative", flex: 1, height: 48 }}>
{/* dotted 100% track — height is a multiple of the 12px tile, anchored bottom, so dots never clip */}
<div
style={{
position: "absolute",
inset: 0,
background: c.dot,
WebkitMaskImage: DOT_MASK,
maskImage: DOT_MASK,
WebkitMaskSize: "12px 12px",
maskSize: "12px 12px",
WebkitMaskRepeat: "repeat",
maskRepeat: "repeat",
WebkitMaskPosition: "left bottom",
maskPosition: "left bottom",
}}
/>
{/* fill */}
<div
style={{
position: "absolute",
left: 0,
top: 0,
bottom: 0,
width: `${pct}%`,
background: b.hero ? c.accent : c.gray,
borderRight: b.hero ? `2px solid ${c.accentHi}` : "none",
}}
/>
</div>
<div
style={{
width: 84,
fontSize: 24,
fontWeight: b.hero ? 600 : 500,
color: b.hero ? c.accent : c.muted,
textAlign: "right",
fontVariantNumeric: "tabular-nums",
}}
>
{Math.round(pct)}%
</div>
</div>
)
})}
</div>
{/* footer */}
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
marginTop: 24,
paddingTop: 22,
borderTop: `1px solid ${c.line}`,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ display: "inline-flex", alignItems: "center", gap: 9, color: c.muted }}>
<span style={{ width: 13, height: 13, background: c.accent, display: "inline-block" }} />
DeepSeek V4 Flash · 9.48T tokens · 83.6M requests
</div>
<div style={{ color: c.ink }}>opencode.ai/data</div>
</div>
</div>
</AbsoluteFill>
)
}
+36
View File
@@ -0,0 +1,36 @@
import { Composition, registerRoot } from "remotion"
import { GLM52Rise } from "./video"
import { NZSheep } from "./sheep"
import { NovelTokens } from "./novel"
import { FlashShare } from "./flash"
import { MiniMaxClimb } from "./minimax"
import { JuneTotals } from "./june"
function Root() {
return (
<>
<Composition id="GLM52Rise" component={GLM52Rise} durationInFrames={240} fps={30} width={1080} height={1080} />
<Composition id="NZSheep" component={NZSheep} durationInFrames={150} fps={30} width={1080} height={1080} />
<Composition
id="NovelTokens"
component={NovelTokens}
durationInFrames={150}
fps={30}
width={1080}
height={1080}
/>
<Composition id="FlashShare" component={FlashShare} durationInFrames={165} fps={30} width={1080} height={1080} />
<Composition
id="MiniMaxClimb"
component={MiniMaxClimb}
durationInFrames={165}
fps={30}
width={1080}
height={1080}
/>
<Composition id="JuneTotals" component={JuneTotals} durationInFrames={1} fps={30} width={1080} height={1080} />
</>
)
}
registerRoot(Root)
+144
View File
@@ -0,0 +1,144 @@
import React from "react"
import { AbsoluteFill } from "remotion"
const c = {
bg: "#ffffff",
ink: "#161616",
muted: "#5c5c5c",
faint: "#808080",
line: "#e6e6e6",
dot: "#dcdcdc",
accent: "#3b5cf6",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
const DOT_MASK =
"url(\"data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E\")"
// verified: OpenCode Go (tier=Go, dataset=zen), June 1-30, 2026.
// 72.78T tokens · 651.4M requests · 11.42M sessions -> rounded headline figures.
function DataWordmark({ height = 30 }: { height?: number }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color: c.ink }}>
<path opacity="0.2" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
function DotBand() {
return (
<div
style={{
height: 12,
background: c.dot,
WebkitMaskImage: DOT_MASK,
maskImage: DOT_MASK,
WebkitMaskSize: "12px 12px",
maskSize: "12px 12px",
WebkitMaskRepeat: "repeat",
maskRepeat: "repeat",
WebkitMaskPosition: "left top",
maskPosition: "left top",
}}
/>
)
}
function Metric({ value, label }: { value: string; label: string }) {
return (
<div>
<div
style={{
fontSize: 92,
fontWeight: 600,
letterSpacing: -3,
lineHeight: 1,
fontVariantNumeric: "tabular-nums",
marginLeft: -8, // align the glyph's visual left edge to the column
}}
>
{value}
</div>
<div style={{ marginTop: 16, fontSize: 24, fontWeight: 500, color: c.muted, letterSpacing: 1 }}>{label}</div>
</div>
)
}
export function JuneTotals() {
return (
<AbsoluteFill style={{ background: c.bg, color: c.ink, fontFamily: MONO, padding: 72, boxSizing: "border-box" }}>
<div style={{ height: "100%", display: "flex", flexDirection: "column" }}>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 22 }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.faint, letterSpacing: 1 }}>MONTHLY RECAP</div>
</div>
<DotBand />
{/* hero */}
<div style={{ flex: 1, display: "flex", flexDirection: "column", justifyContent: "center" }}>
<div style={{ fontSize: 25, fontWeight: 600, color: c.muted, letterSpacing: 3 }}>OPENCODE GO · JUNE 2026</div>
<div style={{ marginTop: 14 }}>
<div
style={{
fontSize: 300,
fontWeight: 600,
letterSpacing: -10,
lineHeight: 0.82,
color: c.accent,
marginLeft: -22,
}}
>
73T
</div>
<div style={{ fontSize: 50, fontWeight: 600, color: c.ink, marginTop: 10 }}>tokens processed</div>
</div>
{/* supporting metrics */}
<div
style={{
display: "grid",
gridTemplateColumns: "1fr 1fr",
marginTop: 60,
paddingTop: 40,
borderTop: `1px solid ${c.line}`,
}}
>
<Metric value="650M" label="requests" />
<Metric value="11M" label="sessions" />
</div>
</div>
{/* footer */}
<DotBand />
<div
style={{
display: "flex",
justifyContent: "flex-end",
alignItems: "center",
marginTop: 22,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ color: c.ink }}>opencode.ai/data</div>
</div>
</div>
</AbsoluteFill>
)
}
+201
View File
@@ -0,0 +1,201 @@
import React from "react"
import { AbsoluteFill, interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion"
const c = {
bg: "#ffffff",
ink: "#161616",
muted: "#5c5c5c",
faint: "#808080",
line: "#e6e6e6",
dot: "#e4e4e4",
accent: "#3b5cf6",
accentHi: "#5b78ff",
accentDim: "#aebcf3",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
const DOT_MASK =
"url(\"data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E\")"
// verified: minimax-m3, OpenCode Go (tier=Go, dataset=zen), weekly total_tokens.
// W26 2.559T is +23.2% / +482.3B vs W25 2.077T.
const weeks = [
{ label: "May 25", t: 0.008 },
{ label: "Jun 1", t: 0.429 },
{ label: "Jun 8", t: 1.192 },
{ label: "Jun 15", t: 2.077 },
{ label: "Jun 22", t: 2.559, latest: true },
]
const AXIS_MAX = 3.0
function DataWordmark({ height = 30 }: { height?: number }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color: c.ink }}>
<path opacity="0.2" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
const CHART_H = 420 // multiple of 12 so the dotted tracks never clip
export function MiniMaxClimb() {
const frame = useCurrentFrame()
const { fps } = useVideoConfig()
const grow = (i: number) =>
Math.min(
1,
Math.max(0, spring({ frame: frame - 22 - i * 9, fps, config: { damping: 18, stiffness: 110, mass: 0.6 } })),
)
return (
<AbsoluteFill style={{ background: c.bg, color: c.ink, fontFamily: MONO, padding: 72, boxSizing: "border-box" }}>
<div style={{ height: "100%", display: "flex", flexDirection: "column" }}>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.faint, letterSpacing: 1 }}>JUN 2228, 2026</div>
</div>
{/* headline (static) */}
<div style={{ marginTop: 50 }}>
<div style={{ fontSize: 23, fontWeight: 600, color: c.muted, letterSpacing: 2 }}>
OPENCODE GO · WEEKLY TOKENS
</div>
<div
style={{ display: "flex", justifyContent: "space-between", alignItems: "baseline", gap: 24, marginTop: 14 }}
>
<div style={{ fontSize: 62, fontWeight: 600, letterSpacing: -2, lineHeight: 1 }}>MiniMax M3</div>
<div style={{ textAlign: "right", flexShrink: 0 }}>
<div
style={{
fontSize: 84,
fontWeight: 600,
letterSpacing: -2,
lineHeight: 1,
color: c.accent,
fontVariantNumeric: "tabular-nums",
}}
>
+23.2%
</div>
<div style={{ fontSize: 19, fontWeight: 500, color: c.muted, letterSpacing: 1, marginTop: 6 }}>
WEEK OVER WEEK
</div>
</div>
</div>
</div>
{/* column chart */}
<div style={{ flex: 1, display: "flex", alignItems: "flex-end", marginTop: 30 }}>
<div style={{ width: "100%", display: "flex", alignItems: "flex-end", gap: 30 }}>
{weeks.map((w, i) => {
const g = grow(i)
const h = Math.round((w.t / AXIS_MAX) * CHART_H * g)
return (
<div key={w.label} style={{ flex: 1, display: "flex", flexDirection: "column", alignItems: "center" }}>
{/* value + bar */}
<div style={{ position: "relative", width: "100%", height: CHART_H }}>
{/* dotted track */}
<div
style={{
position: "absolute",
inset: 0,
background: c.dot,
WebkitMaskImage: DOT_MASK,
maskImage: DOT_MASK,
WebkitMaskSize: "12px 12px",
maskSize: "12px 12px",
WebkitMaskRepeat: "repeat",
maskRepeat: "repeat",
WebkitMaskPosition: "left bottom",
maskPosition: "left bottom",
}}
/>
{/* fill */}
<div
style={{
position: "absolute",
left: 0,
right: 0,
bottom: 0,
height: h,
background: w.latest ? c.accent : c.accentDim,
borderTop: w.latest ? `3px solid ${c.accentHi}` : "none",
}}
/>
{/* value label */}
<div
style={{
position: "absolute",
left: 0,
right: 0,
bottom: h + 10,
textAlign: "center",
fontSize: 26,
fontWeight: w.latest ? 600 : 500,
color: w.latest ? c.accent : c.muted,
fontVariantNumeric: "tabular-nums",
opacity: interpolate(g, [0.5, 1], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
}),
}}
>
{w.t.toFixed(2)}T
</div>
</div>
{/* week label */}
<div
style={{
marginTop: 14,
fontSize: 18,
fontWeight: 500,
color: w.latest ? c.ink : c.faint,
}}
>
{w.label}
</div>
</div>
)
})}
</div>
</div>
{/* footer */}
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
marginTop: 22,
paddingTop: 22,
borderTop: `1px solid ${c.line}`,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ display: "inline-flex", alignItems: "center", gap: 9, color: c.muted }}>
<span style={{ width: 13, height: 13, background: c.accent, display: "inline-block" }} />
2.56T tokens last week · +482.3B added
</div>
<div style={{ color: c.ink }}>opencode.ai/data</div>
</div>
</div>
</AbsoluteFill>
)
}
+135
View File
@@ -0,0 +1,135 @@
import React from "react"
import { AbsoluteFill, Easing, Img, interpolate, staticFile, useCurrentFrame } from "remotion"
const c = {
white: "#ffffff",
dim: "rgba(255,255,255,0.74)",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
// verified: OpenCode Go, week of Jun 22-28, 2026 (2026-W26)
// 19,642,742,937,105 tokens / 173,651,197 requests = 113,116 tokens/request
const AVG = 113116
const K = Math.round(AVG / 1000) // 113
const nf = new Intl.NumberFormat("en-US")
function DataWordmark({ height = 30 }: { height?: number }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color: c.white }}>
<path opacity="0.35" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
export function NovelTokens() {
const frame = useCurrentFrame()
const k = Math.round(
K *
interpolate(frame, [18, 92], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
easing: Easing.out(Easing.cubic),
}),
)
const zoom = interpolate(frame, [0, 150], [1.06, 1.12], {
extrapolateRight: "clamp",
easing: Easing.inOut(Easing.quad),
})
return (
<AbsoluteFill style={{ background: "#0c0c0c", overflow: "hidden" }}>
<Img
src={staticFile("book.jpg")}
style={{
position: "absolute",
width: "100%",
height: "100%",
objectFit: "cover",
objectPosition: "center 34%",
transform: `scale(${zoom})`,
transformOrigin: "center 30%",
}}
/>
{/* legibility scrims */}
<div
style={{
position: "absolute",
inset: 0,
background:
"linear-gradient(to bottom, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0) 20%, rgba(0,0,0,0.1) 44%, rgba(0,0,0,0.86) 100%)",
}}
/>
<div
style={{
position: "absolute",
inset: 0,
boxSizing: "border-box",
padding: 64,
color: c.white,
fontFamily: MONO,
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.dim, letterSpacing: 1 }}>JUN 2228, 2026</div>
</div>
{/* bottom block */}
<div>
<div style={{ fontSize: 23, fontWeight: 600, color: c.dim, letterSpacing: 2, marginBottom: 8 }}>
OPENCODE GO · LAST WEEK
</div>
<div
style={{
fontSize: 168,
fontWeight: 600,
lineHeight: 0.92,
letterSpacing: -5,
fontVariantNumeric: "tabular-nums",
}}
>
{k}K
</div>
<div style={{ fontSize: 50, fontWeight: 600, letterSpacing: -1, marginTop: 4 }}>tokens per request</div>
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
marginTop: 30,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ color: c.dim }}>{nf.format(AVG)} tokens / request · last week</div>
<div style={{ color: c.white }}>opencode.ai/data</div>
</div>
</div>
</div>
</AbsoluteFill>
)
}
+139
View File
@@ -0,0 +1,139 @@
import React from "react"
import { AbsoluteFill, Easing, Img, interpolate, staticFile, useCurrentFrame } from "remotion"
const c = {
white: "#ffffff",
dim: "rgba(255,255,255,0.72)",
faint: "rgba(255,255,255,0.55)",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
// verified: NZ OpenCode Go, week of Jun 22-28, 2026 (2026-W26)
const TOKENS = 40_915_594_381 // 40.9B
const SHEEP = 23_600_000 // 23.6M
const PER_SHEEP = Math.round(TOKENS / SHEEP) // 1,734
const nf = new Intl.NumberFormat("en-US")
// the correct opencode "DATA" wordmark (white, over photo)
function DataWordmark({ height = 30 }: { height?: number }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color: c.white }}>
<path opacity="0.35" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
export function NZSheep() {
const frame = useCurrentFrame()
const count = Math.round(
PER_SHEEP *
interpolate(frame, [18, 90], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
easing: Easing.out(Easing.cubic),
}),
)
// slow Ken Burns push-in (scale up only — never reveals an edge)
const zoom = interpolate(frame, [0, 150], [1.06, 1.12], {
extrapolateRight: "clamp",
easing: Easing.inOut(Easing.quad),
})
return (
<AbsoluteFill style={{ background: "#0c0c0c", overflow: "hidden" }}>
{/* the sheep, staring */}
<Img
src={staticFile("sheep.jpg")}
style={{
position: "absolute",
width: "100%",
height: "100%",
objectFit: "cover",
objectPosition: "center 38%",
transform: `scale(${zoom})`,
transformOrigin: "center 35%",
}}
/>
{/* legibility scrims */}
<div
style={{
position: "absolute",
inset: 0,
background:
"linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 22%, rgba(0,0,0,0) 48%, rgba(0,0,0,0.78) 100%)",
}}
/>
{/* content */}
<div
style={{
position: "absolute",
inset: 0,
boxSizing: "border-box",
padding: 64,
color: c.white,
fontFamily: MONO,
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.dim, letterSpacing: 1 }}>JUN 2228, 2026</div>
</div>
{/* bottom block */}
<div>
<div style={{ fontSize: 23, fontWeight: 600, color: c.dim, letterSpacing: 2, marginBottom: 8 }}>
OPENCODE GO · NEW ZEALAND
</div>
<div
style={{
fontSize: 168,
fontWeight: 600,
lineHeight: 0.92,
letterSpacing: -5,
fontVariantNumeric: "tabular-nums",
}}
>
{nf.format(count)}
</div>
<div style={{ fontSize: 50, fontWeight: 600, letterSpacing: -1, marginTop: 4 }}>tokens per sheep</div>
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
marginTop: 34,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ color: c.dim }}>40.9B tokens ÷ 23.6M sheep · last week</div>
<div style={{ color: c.white }}>opencode.ai/data</div>
</div>
</div>
</div>
</AbsoluteFill>
)
}
+254
View File
@@ -0,0 +1,254 @@
import React from "react"
import { AbsoluteFill, Easing, interpolate, useCurrentFrame, useVideoConfig } from "remotion"
import { days, launchIndex, glmWeekTokensT, segments } from "./data"
// stats.opencode.ai design tokens (light theme)
const c = {
bg: "#ffffff",
ink: "#161616",
muted: "#5c5c5c",
faint: "#808080",
line: "#e6e6e6",
dot: "#ededed",
accent: "#3b5cf6",
accentHi: "#5b78ff",
}
const MONO = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace'
const W = 1080
const DOT_MASK =
"url(\"data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E\")"
const field = segments.filter((s) => !s.hero)
const glmColor = segments.find((s) => s.hero)!.color
const clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v))
// the correct opencode "DATA" wordmark (from stats.opencode.ai header)
function DataWordmark({ height = 30, color = c.ink }: { height?: number; color?: string }) {
return (
<svg width={(height * 66) / 20} height={height} viewBox="0 0 66 20" fill="none" style={{ color }}>
<path opacity="0.2" d="M12 16H4V8H12V16Z" fill="currentColor" />
<path d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="currentColor" />
<path
d="M63.3543 16L62.5119 12.8711H58.6437L57.8013 16H55.7383L59.2454 4H61.9618L65.4689 16H63.3543ZM61.0678 7.851L60.6896 5.94269H60.4489L60.0707 7.851L59.1595 11.1347H61.9962L61.0678 7.851Z"
fill="currentColor"
/>
<path d="M52.5951 5.87392V16H50.4461V5.87392H47.4375V4H55.6209V5.87392H52.5951Z" fill="currentColor" />
<path
d="M45.2059 16L44.3635 12.8711H40.4953L39.6529 16H37.5898L41.097 4H43.8133L47.3205 16H45.2059ZM42.9194 7.851L42.5411 5.94269H42.3004L41.9222 7.851L41.011 11.1347H43.8477L42.9194 7.851Z"
fill="currentColor"
/>
<path
d="M28 4H32.0917C32.8138 4 33.4556 4.11461 34.0172 4.34384C34.5903 4.5616 35.0716 4.9169 35.4613 5.40974C35.8625 5.89112 36.1662 6.51003 36.3725 7.26648C36.5788 8.02292 36.6819 8.9341 36.6819 10C36.6819 11.0659 36.5788 11.9771 36.3725 12.7335C36.1662 13.49 35.8625 14.1146 35.4613 14.6075C35.0716 15.0888 34.5903 15.4441 34.0172 15.6734C33.4556 15.8911 32.8138 16 32.0917 16H28V4ZM32.0917 14.1261C32.8252 14.1261 33.3926 13.9026 33.7937 13.4556C34.1948 12.9971 34.3954 12.3152 34.3954 11.4097V8.59026C34.3954 7.68481 34.1948 7.0086 33.7937 6.5616C33.3926 6.10315 32.8252 5.87392 32.0917 5.87392H30.149V14.1261H32.0917Z"
fill="currentColor"
/>
</svg>
)
}
export function GLM52Rise() {
const frame = useCurrentFrame()
const { fps } = useVideoConfig()
// ---------- virtual camera ----------
// open zoomed-in on the field, pan right while the blue fills, then pull back to reveal.
const K = [0, 32, 150, 206, 240]
const ease = Easing.inOut(Easing.cubic)
const opt = { extrapolateLeft: "clamp" as const, extrapolateRight: "clamp" as const, easing: ease }
const s = interpolate(frame, K, [1.82, 1.72, 1.72, 1.0, 1.0], opt)
let fx = interpolate(frame, K, [420, 438, 760, 540, 540], opt)
let fy = interpolate(frame, K, [664, 664, 664, 540, 540], opt)
// keep the framing inside the 1080 canvas so edges never reveal black
fx = clamp(fx, 540 / s, W - 540 / s)
fy = clamp(fy, 540 / s, W - 540 / s)
const camera = `translate(${540 - fx * s}px, ${540 - fy * s}px) scale(${s})`
// ---------- blue sweep (synced to the pan) ----------
const p = interpolate(frame, [32, 150], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: ease })
const revealAmount = p * (days.length - launchIndex) + 0.35
const fillOf = (i: number) => clamp(revealAmount - (i - launchIndex), 0, 1)
// token number climbs as the camera pulls back and the headline re-enters frame
const tokensT =
glmWeekTokensT *
interpolate(frame, [150, 202], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
easing: Easing.out(Easing.cubic),
})
// chart geometry
const chartH = 440
const chartW = 936
const gap = 14
const EXAGGERATE = 2.876 // broken y-axis: GLM-5.2 magnified ~2.9x for emphasis
return (
<AbsoluteFill style={{ background: c.bg, overflow: "hidden" }}>
<div
style={{
position: "absolute",
width: W,
height: W,
background: c.bg,
transformOrigin: "0 0",
transform: camera,
}}
>
<div
style={{
width: W,
height: W,
boxSizing: "border-box",
padding: 72,
color: c.ink,
fontFamily: MONO,
display: "flex",
flexDirection: "column",
}}
>
{/* header */}
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<DataWordmark height={30} />
<div style={{ fontSize: 20, fontWeight: 500, color: c.faint, letterSpacing: 1 }}>JUN 1225, 2026</div>
</div>
{/* headline (static) */}
<div style={{ marginTop: 52 }}>
<div style={{ fontSize: 92, fontWeight: 600, lineHeight: 0.98, letterSpacing: -2 }}>
GLM-5.2 <span style={{ color: c.accent }}>broke out</span>
</div>
<div style={{ marginTop: 22, fontSize: 30, fontWeight: 500, color: c.muted }}>
From 0 to <span style={{ color: c.ink }}>{tokensT.toFixed(2)}T tokens</span> in a week.
</div>
</div>
{/* stacked chart */}
<div style={{ flex: 1, display: "flex", alignItems: "flex-end", marginTop: 40 }}>
<div
style={{
position: "relative",
width: chartW,
height: chartH,
margin: "0 auto",
borderBottom: `2px solid ${c.ink}`,
boxSizing: "border-box",
}}
>
{/* faint dotted backdrop */}
<div
style={{
position: "absolute",
left: -8,
right: -8,
top: -8,
bottom: 0,
background: c.dot,
WebkitMaskImage: DOT_MASK,
maskImage: DOT_MASK,
WebkitMaskSize: "12px 12px",
maskSize: "12px 12px",
WebkitMaskRepeat: "repeat",
maskRepeat: "repeat",
}}
/>
{/* columns */}
<div style={{ position: "absolute", inset: 0, display: "flex", gap, alignItems: "flex-end" }}>
{days.map((d, i) => {
const glmShare = d.glm / d.total
const blueH = Math.round(glmShare * EXAGGERATE * chartH)
const filled = Math.round(blueH * fillOf(i))
const slotGap = filled > 2 ? 5 : 0
const fieldH = chartH - filled - slotGap
const fieldTotal = d.dsf + d.dsp + d.mm + d.others
return (
<div key={i} style={{ position: "relative", flex: 1, height: chartH }}>
{/* gray field of other models (already in place) */}
<div
style={{
position: "absolute",
top: 0,
left: 0,
right: 0,
height: fieldH,
display: "flex",
flexDirection: "column-reverse",
}}
>
{field.map((seg) => (
<div
key={seg.key}
style={{
height: Math.round(((d[seg.key as keyof typeof d] as number) / fieldTotal) * fieldH),
background: seg.color,
borderTop: `2px solid ${c.bg}`,
}}
/>
))}
</div>
{/* GLM-5.2, animates in */}
{filled > 2 && (
<div
style={{
position: "absolute",
left: 0,
right: 0,
bottom: 0,
height: filled,
background: glmColor,
borderTop: `2px solid ${c.accentHi}`,
}}
/>
)}
</div>
)
})}
</div>
</div>
</div>
{/* day axis */}
<div style={{ display: "flex", gap, width: chartW, margin: "14px auto 0" }}>
{days.map((d, i) => (
<div
key={i}
style={{
flex: 1,
textAlign: "center",
fontSize: 15,
fontWeight: 500,
color: i === days.length - 1 ? c.ink : c.faint,
}}
>
{i === 0 || i === launchIndex || i === days.length - 1 ? d.date : ""}
</div>
))}
</div>
{/* footer */}
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
marginTop: 28,
paddingTop: 22,
borderTop: `1px solid ${c.line}`,
fontSize: 20,
fontWeight: 500,
}}
>
<div style={{ display: "inline-flex", alignItems: "center", gap: 9, color: c.muted }}>
<span style={{ width: 13, height: 13, background: c.accent, display: "inline-block" }} />
GLM-5.2
</div>
<div style={{ color: c.ink }}>opencode.ai/data</div>
</div>
</div>
</div>
</AbsoluteFill>
)
}
+14 -14
View File
@@ -24,7 +24,7 @@
"prettier": "3.6.2",
"semver": "^7.6.0",
"sst": "catalog:",
"turbo": "2.8.13",
"turbo": "2.10.2",
},
},
"packages/app": {
@@ -2791,6 +2791,18 @@
"@tufjs/models": ["@tufjs/models@4.1.0", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" } }, "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww=="],
"@turbo/darwin-64": ["@turbo/darwin-64@2.10.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-wBM3ObqOWnKUDmg7QfUFDkDHPFUAJmrYlYqmEM8jMPAPA/I6wRJIbWimeQUqhOiQ8xPKhzyWM+xaiUP0wz8FEQ=="],
"@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.10.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/Cq0joWnuMjDPfhjbFP4sv+C/7gkQ415zlaO4XUzD5EZxbtrKgXKvuuydMvogG8GeUnN1aDltW71RlmEfpjbyw=="],
"@turbo/linux-64": ["@turbo/linux-64@2.10.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mMsf5IIhiKuceEXNstd25IbadjBXZ0amxzFOqliEzJX6HyeeHdBQPVSY583PWqYDyqM/FB8d5ZjkthfBSeuH3Q=="],
"@turbo/linux-arm64": ["@turbo/linux-arm64@2.10.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Wcng1i2kaKmXutmwxT9MUoYZvdaIekXAdlGr4+0TpgbhGLw7nDuEcRBFrxb5BbRoX1d1q8SpdRxLc45TvDZIdQ=="],
"@turbo/windows-64": ["@turbo/windows-64@2.10.2", "", { "os": "win32", "cpu": "x64" }, "sha512-SsNhM7Ho7EpAdwtrJKBOic9Hso23vu6Dp0gAfLOvUFjPzurr/sGQlXZEvr6z89ne4RDOypTwz5CBDrixpMKtXw=="],
"@turbo/windows-arm64": ["@turbo/windows-arm64@2.10.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gf+S7ICAdimT/n02bOuVWKvhHnct/HYjZg3oBNIz5hZ9ZyWHbQim9J3P5Qip8WpX0ksxF7eaBVziJCuLnjhqDg=="],
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="],
"@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="],
@@ -5321,19 +5333,7 @@
"tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="],
"turbo": ["turbo@2.8.13", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.13", "turbo-darwin-arm64": "2.8.13", "turbo-linux-64": "2.8.13", "turbo-linux-arm64": "2.8.13", "turbo-windows-64": "2.8.13", "turbo-windows-arm64": "2.8.13" }, "bin": { "turbo": "bin/turbo" } }, "sha512-nyM99hwFB9/DHaFyKEqatdayGjsMNYsQ/XBNO6MITc7roncZetKb97MpHxWf3uiU+LB9c9HUlU3Jp2Ixei2k1A=="],
"turbo-darwin-64": ["turbo-darwin-64@2.8.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-PmOvodQNiOj77+Zwoqku70vwVjKzL34RTNxxoARjp5RU5FOj/CGiC6vcDQhNtFPUOWSAaogHF5qIka9TBhX4XA=="],
"turbo-darwin-arm64": ["turbo-darwin-arm64@2.8.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kI+anKcLIM4L8h+NsM7mtAUpElkCOxv5LgiQVQR8BASyDFfc8Efj5kCk3cqxuxOvIqx0sLfCX7atrHQ2kwuNJQ=="],
"turbo-linux-64": ["turbo-linux-64@2.8.13", "", { "os": "linux", "cpu": "x64" }, "sha512-j29KnQhHyzdzgCykBFeBqUPS4Wj7lWMnZ8CHqytlYDap4Jy70l4RNG46pOL9+lGu6DepK2s1rE86zQfo0IOdPw=="],
"turbo-linux-arm64": ["turbo-linux-arm64@2.8.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-OEl1YocXGZDRDh28doOUn49QwNe82kXljO1HXApjU0LapkDiGpfl3jkAlPKxEkGDSYWc8MH5Ll8S16Rf5tEBYg=="],
"turbo-windows-64": ["turbo-windows-64@2.8.13", "", { "os": "win32", "cpu": "x64" }, "sha512-717bVk1+Pn2Jody7OmWludhEirEe0okoj1NpRbSm5kVZz/yNN/jfjbxWC6ilimXMz7xoMT3IDfQFJsFR3PMANA=="],
"turbo-windows-arm64": ["turbo-windows-arm64@2.8.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-R819HShLIT0Wj6zWVnIsYvSNtRNj1q9VIyaUz0P24SMcLCbQZIm1sV09F4SDbg+KCCumqD2lcaR2UViQ8SnUJA=="],
"turbo": ["turbo@2.10.2", "", { "optionalDependencies": { "@turbo/darwin-64": "2.10.2", "@turbo/darwin-arm64": "2.10.2", "@turbo/linux-64": "2.10.2", "@turbo/linux-arm64": "2.10.2", "@turbo/windows-64": "2.10.2", "@turbo/windows-arm64": "2.10.2" }, "bin": { "turbo": "bin/turbo" } }, "sha512-wTExrNrRjB8qzIcg+ZLm0A3GFNLDsWNwdS/RBXB0FPrBDyzk3i96Yx+TxWZC7a0k1SIreFB8ciUbxjmEqTH8IQ=="],
"turndown": ["turndown@7.2.0", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A=="],
+1 -1
View File
@@ -104,7 +104,7 @@
"prettier": "3.6.2",
"semver": "^7.6.0",
"sst": "catalog:",
"turbo": "2.8.13"
"turbo": "2.10.2"
},
"dependencies": {
"@aws-sdk/client-s3": "3.933.0",
+27
View File
@@ -152,6 +152,33 @@ interface ExecuteFailure {
`onToolCallEnd` receives `{ index, name, input, durationMs, outcome, message? }` when an admitted call settles. `outcome` is `"success"` or `"failure"`; `message` is the model-safe failure message and is present only on failure. Interrupted calls (for example when the execution timeout fires) do not produce an end event. Both hooks are Effect-returning and must not fail.
### OpenAPI tools
`OpenAPI.fromSpec` turns an OpenAPI 3.x document into a tool subtree - one tool per operation. Tool names use `operationId` when present, otherwise a method/path fallback; names are sanitized and deduplicated. The host places the subtree under a key in its `tools` tree; that key is the model-visible namespace.
```ts
import { CodeMode, OpenAPI } from "@opencode-ai/codemode"
import { Effect } from "effect"
import { FetchHttpClient } from "effect/unstable/http"
const api = OpenAPI.fromSpec({
spec: await Bun.file("openapi.json").json(), // parsed document (no YAML)
auth: {
resolve: ({ schemeName, scopes, operation }) =>
schemeName === "BearerAuth"
? Effect.succeed({ type: "bearer", token })
: Effect.succeed(undefined),
},
})
const runtime = CodeMode.make({ tools: { opencode: api.tools } })
const result = await Effect.runPromise(runtime.execute(code).pipe(Effect.provide(FetchHttpClient.layer)))
```
`fromSpec` is synchronous and returns `{ tools, skipped }`; operations it cannot represent (non-JSON request bodies, non-absolute server URLs) land in `skipped` with a reason instead of producing broken tools. Tool inputs flatten path, query, header, and closed object-body fields into one model-facing object while retaining their HTTP locations internally. Cross-location name collisions receive a location prefix such as `path_id` and `query_id`; composed, nullable, dictionary, conditionally-required, and non-object JSON bodies remain under `body` so the adapter does not discard valid payloads. Auth is never model-visible. Non-2xx responses become safe tool failures carrying the status and a size-capped body summary, so programs can `catch` and read them.
Auth follows OpenAPI `security` semantics and is resolved host-side via `auth.resolve` - credential storage, OAuth flows, and token refresh never enter the compiler. See the option docstrings in `src/openapi/types.ts` for the full semantics. Generated tools require `HttpClient.HttpClient` (from `effect/unstable/http`) in the Effect environment - provide `FetchHttpClient.layer` or a custom/test client layer at execution.
## Discovery
The agent-tool instructions use a budgeted catalog. Every tool namespace is always listed with its tool count regardless of budget, and as many complete tool signatures (each with a one-line description) as fit an estimated-token budget are inlined. Selection is round-robin across namespaces for fairness: in each round (namespaces alphabetical), every namespace still holding un-inlined tools attempts to place its next-cheapest signature line against the shared budget, and a namespace whose next line does not fit drops out while the others keep going - so every namespace gets some representation before any namespace gets everything. The instructions state exactly how comprehensive the list is, both overall (`COMPLETE list` vs `PARTIAL - N of M shown`) and per namespace (`(3 tools)`, `(3 tools, 1 shown)`, `(3 tools, none shown)`).
+1
View File
@@ -1,5 +1,6 @@
export { ToolError, CodeMode, ExecuteInputSchema, ExecuteResultSchema, toolError } from "./codemode.js"
export { Tool } from "./tool.js"
export { OpenAPI } from "./openapi/index.js"
export type { Definition as ToolDefinition, JsonSchema, ToolSchema } from "./tool.js"
export type { ToolCallEnded, ToolCallHooks } from "./tool-runtime.js"
export type {
+125
View File
@@ -0,0 +1,125 @@
import { HttpClient } from "effect/unstable/http"
import { Tool, type Definition } from "../tool.js"
import { invoke } from "./runtime.js"
import {
componentDefinitions,
inputSchema,
isRecord,
methods,
nonEmptyString,
operationInput,
operationPath,
outputSchema,
securityRequirements,
securitySchemes,
specServerUrl,
unsupportedOperationReason,
} from "./spec.js"
import type { Operation, Options, Result, Skipped, Tools } from "./types.js"
export type {
AuthResolver,
Credential,
Document,
Operation,
Options,
Result,
SecurityScheme,
Skipped,
Tools,
} from "./types.js"
/**
* Builds a CodeMode tool subtree from an OpenAPI 3.x document, one tool per
* operation. Auth is resolved host-side via `auth.resolve` and never
* model-visible. Tools require `HttpClient.HttpClient`; unrepresentable
* operations land in `skipped`.
*/
export const fromSpec = (options: Options): Result => {
const document = options.spec
const schemes = securitySchemes(document)
const defaultSecurity = securityRequirements(document.security)
const definitions = componentDefinitions(document)
const paths = isRecord(document.paths) ? document.paths : {}
const base = options.baseUrl ?? specServerUrl(document)
const used = new Set<string>()
const namespaces = new Set<string>()
const skipped: Array<Skipped> = []
const tools = Object.create(null) as Tools
for (const [path, pathValue] of Object.entries(paths)) {
if (!isRecord(pathValue)) continue
for (const [method, operationValue] of Object.entries(pathValue)) {
if (!methods.has(method) || !isRecord(operationValue)) continue
const segments = operationPath(method, path, operationValue, used, namespaces)
const operation: Operation = {
id: segments.join("."),
method: method.toUpperCase(),
path,
summary: nonEmptyString(operationValue.summary),
description: nonEmptyString(operationValue.description),
}
if (options.operations !== undefined && !options.operations(operation)) continue
// TODO: Represent streaming transports as explicit host capabilities before
// exposing them as callable CodeMode tools.
const unsupported = unsupportedOperationReason(document, operationValue)
if (unsupported !== undefined) {
skipped.push({ method: operation.method, path, reason: unsupported })
continue
}
if (typeof base !== "string") {
skipped.push({ method: operation.method, path, reason: base.reason })
continue
}
const input = operationInput(document, pathValue, operationValue)
if ("reason" in input) {
skipped.push({ method: operation.method, path, reason: input.reason })
continue
}
const security =
operationValue.security === undefined ? defaultSecurity : securityRequirements(operationValue.security)
const plan = {
operation,
url: `${base.replace(/\/+$/, "")}${path}`,
fields: input.fields,
body: input.body,
security,
schemes,
auth: options.auth,
headers: options.headers ?? {},
}
used.add(operation.id)
for (const index of segments.slice(0, -1).keys()) namespaces.add(segments.slice(0, index + 1).join("."))
setTool(
tools,
segments,
Tool.make({
description: operation.description ?? operation.summary ?? `${operation.method} ${path}`,
input: inputSchema(input.fields, definitions),
output: outputSchema(document, operationValue, definitions),
run: (input) => invoke(plan, input),
}),
)
}
}
return { tools, skipped }
}
const setTool = (tools: Tools, path: ReadonlyArray<string>, definition: Definition<HttpClient.HttpClient>): void => {
const [head, ...rest] = path
if (head === undefined) return
if (rest.length === 0) {
tools[head] = definition
return
}
const child = tools[head]
if (child === undefined || !isRecord(child) || child._tag === "CodeModeTool") {
tools[head] = Object.create(null) as Tools
}
setTool(tools[head] as Tools, rest, definition)
}
export const OpenAPI = { fromSpec }
+189
View File
@@ -0,0 +1,189 @@
import { Effect, Option, Schema } from "effect"
import { HttpClient, HttpClientRequest, type HttpMethod } from "effect/unstable/http"
import { ToolError, toolError } from "../tool-error.js"
import { isRecord, maxErrorBodyChars, own } from "./spec.js"
import type { AppliedAuth, Credential, Plan, SecurityScheme } from "./types.js"
const decodeJson = Schema.decodeUnknownOption(Schema.UnknownFromJsonString)
export const invoke = (plan: Plan, input: unknown): Effect.Effect<unknown, unknown, HttpClient.HttpClient> =>
Effect.gen(function* () {
const value = isRecord(input) ? input : {}
// Local validation before auth resolution, which may refresh tokens.
const url = buildUrl(plan, value)
if (url instanceof ToolError) return yield* Effect.fail(url)
for (const field of plan.fields) {
if (!field.required || field.location === "path") continue
const item = own(value, field.inputName)
if (item === undefined || (field.location !== "body" && item === null)) {
const label = field.location === "body" ? "body field" : `${field.location} parameter`
return yield* Effect.fail(toolError(`Missing required ${label} '${field.inputName}'.`))
}
}
const auth = yield* resolveAuth(plan)
let request = HttpClientRequest.make(plan.operation.method as HttpMethod.HttpMethod)(url)
for (const field of plan.fields) {
if (field.location !== "query") continue
const item = own(value, field.inputName)
if (item === undefined || item === null) continue
const rendered = Array.isArray(item) ? item.map(renderPrimitive) : [renderPrimitive(item)]
for (const one of rendered) {
request = HttpClientRequest.appendUrlParam(request, field.name, one)
}
}
for (const [name, item] of Object.entries(auth.query)) {
request = HttpClientRequest.setUrlParam(request, name, item)
}
// Host headers first, then declared header params, then auth - auth must win.
request = HttpClientRequest.setHeaders(request, plan.headers)
for (const field of plan.fields) {
if (field.location !== "header") continue
const item = own(value, field.inputName)
if (item === undefined || item === null) continue
request = HttpClientRequest.setHeader(request, field.name, renderPrimitive(item))
}
const cookiePairs = Object.entries(auth.cookies).map(([name, item]) => `${name}=${item}`)
if (cookiePairs.length > 0) request = HttpClientRequest.setHeader(request, "cookie", cookiePairs.join("; "))
request = HttpClientRequest.setHeaders(request, auth.headers)
if (plan.body?.mode === "value") {
const field = plan.fields.find((field) => field.location === "body")
const body = field === undefined ? undefined : own(value, field.inputName)
if (body !== undefined) request = HttpClientRequest.bodyJsonUnsafe(request, body)
}
if (plan.body?.mode === "object") {
const entries = plan.fields.flatMap((field) => {
if (field.location !== "body") return []
const item = own(value, field.inputName)
return item === undefined ? [] : [[field.name, item] as const]
})
if (plan.body.required || entries.length > 0) {
request = HttpClientRequest.bodyJsonUnsafe(request, Object.fromEntries(entries))
}
}
const client = yield* HttpClient.HttpClient
const response = yield* client
.execute(request)
.pipe(
Effect.catch((cause) =>
Effect.fail(toolError(`${plan.operation.method} ${plan.operation.path} failed: transport error`, cause)),
),
)
// Best effort: an unreadable body degrades to the status-only error/null result.
const text = yield* response.text.pipe(Effect.catch(() => Effect.succeed("")))
const parsed = text === "" ? null : Option.getOrElse(decodeJson(text), () => text)
if (response.status < 200 || response.status >= 300) {
const rendered = typeof parsed === "string" ? parsed : (JSON.stringify(parsed) ?? "")
const summary =
rendered === "" || rendered === "null"
? "no response body"
: rendered.length > maxErrorBodyChars
? `${rendered.slice(0, maxErrorBodyChars)}...`
: rendered
return yield* Effect.fail(
toolError(`${plan.operation.method} ${plan.operation.path} failed with HTTP ${response.status}: ${summary}`),
)
}
return parsed
})
const resolveAuth = (plan: Plan): Effect.Effect<AppliedAuth, unknown> =>
Effect.gen(function* () {
const none: AppliedAuth = { headers: {}, query: {}, cookies: {} }
if (plan.security.length === 0) return none
const unavailable: Array<string> = []
alternatives: for (const requirement of plan.security) {
const names = Object.keys(requirement)
if (names.length === 0) return none
const credentials: Array<readonly [SecurityScheme, Credential]> = []
for (const name of names) {
const scheme = own(plan.schemes, name)
if (scheme === undefined || plan.auth === undefined) {
unavailable.push(name)
continue alternatives
}
const credential = yield* plan.auth.resolve({
schemeName: name,
scheme,
scopes: requirement[name] ?? [],
operation: plan.operation,
})
if (credential === undefined) {
unavailable.push(name)
continue alternatives
}
credentials.push([scheme, credential])
}
const applied = applyCredentials(credentials)
return applied instanceof ToolError ? yield* Effect.fail(applied) : applied
}
return yield* Effect.fail(
toolError(
`${plan.operation.method} ${plan.operation.path} requires authentication; no credential available for: ${[...new Set(unavailable)].join(", ")}.`,
),
)
})
const applyCredentials = (
credentials: ReadonlyArray<readonly [SecurityScheme, Credential]>,
): AppliedAuth | ToolError => {
const headers: Record<string, string> = {}
const query: Record<string, string> = {}
const cookies: Record<string, string> = {}
for (const [scheme, credential] of credentials) {
if (credential.type === "bearer") {
headers["authorization"] = `Bearer ${credential.token}`
continue
}
if (credential.type === "basic") {
// Buffer instead of btoa: btoa throws on non-Latin-1 credentials.
headers["authorization"] =
`Basic ${Buffer.from(`${credential.username}:${credential.password}`, "utf8").toString("base64")}`
continue
}
if (credential.type === "header") {
headers[credential.name.toLowerCase()] = credential.value
continue
}
// apiKey: the carrier comes from the scheme declaration.
const name = scheme.parameterName
if (scheme.type !== "apiKey" || name === undefined || scheme.in === undefined) {
return toolError(
`Security scheme '${scheme.name}' is not an apiKey scheme; resolve a bearer, basic, or header credential for it.`,
)
}
if (scheme.in === "header") headers[name.toLowerCase()] = credential.value
if (scheme.in === "query") query[name] = credential.value
if (scheme.in === "cookie") cookies[name] = credential.value
}
return { headers, query, cookies }
}
const renderPrimitive = (value: unknown): string =>
typeof value === "object" && value !== null ? JSON.stringify(value) : String(value)
const buildUrl = (plan: Plan, input: Readonly<Record<string, unknown>>): string | ToolError => {
let url = plan.url
for (const field of plan.fields) {
if (field.location !== "path") continue
const item = own(input, field.inputName)
if (item === undefined || item === null) {
return toolError(`Missing required path parameter '${field.inputName}'.`)
}
const rendered = encodeURIComponent(renderPrimitive(item))
// '.'/'..' survive encoding and URL normalization collapses them, letting a
// model-supplied value retarget the request to a different endpoint.
if (rendered === "" || rendered === "." || rendered === "..") {
return toolError(`Invalid path parameter '${field.inputName}'.`)
}
url = url.replaceAll(`{${field.name}}`, rendered)
}
const unresolved = url.match(/\{[^{}]+\}/)
if (unresolved !== null) return toolError(`Unresolved path parameter ${unresolved[0]}.`)
return url
}
+388
View File
@@ -0,0 +1,388 @@
import type { JsonSchema } from "../tool.js"
import type {
Body,
Document,
InputField,
InputLocation,
OperationInput,
SecurityRequirement,
SecurityScheme,
Skip,
} from "./types.js"
export const methods = new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"])
const parameterLocations = ["path", "query", "header"] as const
const parameterLocationSet = new Set<string>(parameterLocations)
const ignoredHeaderParameters = new Set(["accept", "content-type", "authorization"])
const schemeTypes = new Set(["apiKey", "http", "oauth2", "openIdConnect"])
const blockedOperationNames = new Set(["__proto__", "constructor", "prototype"])
const schemaShapeKeys = new Set([
"$ref",
"type",
"enum",
"const",
"anyOf",
"oneOf",
"allOf",
"properties",
"items",
"additionalProperties",
])
export const maxErrorBodyChars = 1_024
export const isRecord = (value: unknown): value is Record<string, unknown> =>
typeof value === "object" && value !== null && !Array.isArray(value)
const asArray = (value: unknown): ReadonlyArray<unknown> => (Array.isArray(value) ? value : [])
export const nonEmptyString = (value: unknown): string | undefined =>
typeof value === "string" && value !== "" ? value : undefined
// Guards record lookups keyed by spec- or model-controlled names against
// prototype-inherited values (e.g. a parameter named `toString`).
export const own = <T>(record: Readonly<Record<string, T>>, key: string): T | undefined =>
Object.hasOwn(record, key) ? record[key] : undefined
export const resolve = (document: Document, value: unknown): unknown => {
if (!isRecord(value)) return value
const ref = nonEmptyString(value.$ref)
if (ref === undefined || !ref.startsWith("#/")) return value
const target = ref
.slice(2)
.split("/")
.map((segment) => segment.replaceAll("~1", "/").replaceAll("~0", "~"))
.reduce<unknown>((current, segment) => (isRecord(current) ? current[segment] : undefined), document)
return target ?? value
}
const projectSchema = (value: unknown, depth = 0): JsonSchema => {
if (depth > 24 || !isRecord(value)) return {}
const ref = nonEmptyString(value.$ref)
if (ref !== undefined) {
// `#/components/schemas/X` becomes `#/$defs/X`, the only ref form the
// signature renderer resolves. `~` is unescaped to match the `$defs` key;
// `/` must stay escaped because the renderer takes the last `/` segment.
const name = ref.match(/^#\/components\/schemas\/(.+)$/)?.[1]
return { $ref: name === undefined ? ref : `#/$defs/${name.replaceAll("~0", "~")}` }
}
const type = Array.isArray(value.type)
? value.type.filter((item): item is string => typeof item === "string")
: nonEmptyString(value.type)
const description = nonEmptyString(value.description)
const format = nonEmptyString(value.format)
const allOf = Array.isArray(value.allOf)
? value.allOf
.map((item) => projectSchema(item, depth + 1))
.filter((item) => Object.keys(item).some((key) => schemaShapeKeys.has(key)))
: []
const projected: JsonSchema = {
...(type === undefined ? {} : { type }),
...(Array.isArray(value.enum) ? { enum: value.enum } : {}),
...(value.const === undefined ? {} : { const: value.const }),
...(Array.isArray(value.anyOf) ? { anyOf: value.anyOf.map((item) => projectSchema(item, depth + 1)) } : {}),
...(Array.isArray(value.oneOf) ? { oneOf: value.oneOf.map((item) => projectSchema(item, depth + 1)) } : {}),
...(allOf.length === 0 ? {} : { allOf }),
...(isRecord(value.properties)
? {
properties: Object.fromEntries(
Object.entries(value.properties).map(([key, item]) => [key, projectSchema(item, depth + 1)]),
),
}
: {}),
...(Array.isArray(value.required)
? { required: value.required.filter((item): item is string => typeof item === "string") }
: {}),
...(isRecord(value.items) ? { items: projectSchema(value.items, depth + 1) } : {}),
...(typeof value.additionalProperties === "boolean"
? { additionalProperties: value.additionalProperties }
: isRecord(value.additionalProperties)
? { additionalProperties: projectSchema(value.additionalProperties, depth + 1) }
: {}),
...(description === undefined ? {} : { description }),
...(value.default === undefined ? {} : { default: value.default }),
...(format === undefined ? {} : { format }),
...(value.deprecated === true ? { deprecated: true } : {}),
...(typeof value.minItems === "number" ? { minItems: value.minItems } : {}),
...(typeof value.maxItems === "number" ? { maxItems: value.maxItems } : {}),
}
// OpenAPI 3.0 nullable -> union with null, matching what 3.1 expresses via type arrays.
if (value.nullable !== true) return projected
if (Array.isArray(projected.type)) return { ...projected, type: [...projected.type, "null"] }
if (typeof projected.type === "string") return { ...projected, type: [projected.type, "null"] }
return { anyOf: [projected, { type: "null" }] }
}
export const componentDefinitions = (document: Document): Readonly<Record<string, JsonSchema>> => {
const components = isRecord(document.components) ? document.components : {}
const schemas = isRecord(components.schemas) ? components.schemas : {}
return Object.fromEntries(Object.entries(schemas).map(([name, value]) => [name, projectSchema(value)]))
}
const withDefinitions = (schema: JsonSchema, definitions: Readonly<Record<string, JsonSchema>>): JsonSchema =>
Object.keys(definitions).length === 0 ? schema : { ...schema, $defs: definitions }
const isJsonMediaType = (mediaType: string): boolean => {
const normalized = mediaType.split(";")[0]?.trim().toLowerCase() ?? ""
return normalized === "application/json" || normalized.endsWith("+json")
}
const jsonContentSchema = (content: Record<string, unknown>): unknown => {
const entry = Object.entries(content).find(([mediaType]) => isJsonMediaType(mediaType))
return entry !== undefined && isRecord(entry[1]) ? entry[1].schema : undefined
}
const isFlattenableObjectBody = (
schema: unknown,
requestRequired: boolean,
): schema is Record<string, unknown> & { readonly properties: Record<string, unknown> } =>
isRecord(schema) &&
requestRequired &&
schema.type === "object" &&
isRecord(schema.properties) &&
schema.additionalProperties === false &&
schema.nullable !== true &&
schema.allOf === undefined &&
schema.anyOf === undefined &&
schema.oneOf === undefined
export const operationInput = (
document: Document,
pathItem: Record<string, unknown>,
operation: Record<string, unknown>,
): OperationInput | Skip => {
// Operation-level parameters override path-level ones sharing (location, name).
const merged = new Map<string, Omit<InputField, "inputName">>()
for (const raw of [...asArray(pathItem.parameters), ...asArray(operation.parameters)]) {
const resolved = resolve(document, raw)
if (!isRecord(resolved)) continue
const name = nonEmptyString(resolved.name)
const location = nonEmptyString(resolved.in)
if (name === undefined || location === undefined || !parameterLocationSet.has(location)) continue
if (location === "header" && ignoredHeaderParameters.has(name.toLowerCase())) continue
const base = projectSchema(resolved.schema)
const description = nonEmptyString(resolved.description)
merged.set(`${location}:${name}`, {
name,
location: location as InputLocation,
required: resolved.required === true || location === "path",
schema: {
...base,
...(base.description === undefined && description !== undefined ? { description } : {}),
},
})
}
const fields: Array<Omit<InputField, "inputName">> = parameterLocations.flatMap((location) =>
[...merged.values()].filter((field) => field.location === location),
)
const resolved = resolve(document, operation.requestBody)
const body: Body | Skip | undefined = (() => {
if (!isRecord(resolved)) return undefined
const content = isRecord(resolved.content) ? resolved.content : {}
if (!Object.keys(content).some(isJsonMediaType))
return { reason: `request body has no JSON content (declared: ${Object.keys(content).join(", ") || "none"})` }
const source = jsonContentSchema(content)
const schema = resolve(document, source)
const required = resolved.required === true
if (!isFlattenableObjectBody(schema, required)) {
fields.push({ name: "body", location: "body", required, schema: projectSchema(source) })
return { required, mode: "value" } as const
}
const requiredProperties = new Set(
Array.isArray(schema.required) ? schema.required.filter((item): item is string => typeof item === "string") : [],
)
fields.push(
...Object.entries(schema.properties).map(([name, value]) => ({
name,
location: "body" as const,
required: required && requiredProperties.has(name),
schema: projectSchema(value),
})),
)
return { required, mode: "object" } as const
})()
if (body !== undefined && "reason" in body) return body
const conflicts = new Set(
[...Map.groupBy(fields, (field) => field.name)]
.filter(([, matches]) => new Set(matches.map((field) => field.location)).size > 1)
.map(([name]) => name),
)
const used = new Set<string>()
return {
fields: fields.map((field) => {
const base = conflicts.has(field.name) ? `${field.location}_${field.name}` : field.name
const next = (index: number): string => {
const candidate = index === 1 ? base : `${base}_${index}`
return used.has(candidate) ? next(index + 1) : candidate
}
const inputName = next(1)
used.add(inputName)
return { ...field, inputName }
}),
body,
}
}
export const inputSchema = (
fields: ReadonlyArray<InputField>,
definitions: Readonly<Record<string, JsonSchema>>,
): JsonSchema => {
const required = fields.filter((field) => field.required).map((field) => field.inputName)
return withDefinitions(
{
type: "object",
properties: Object.fromEntries(fields.map((field) => [field.inputName, field.schema])),
...(required.length === 0 ? {} : { required }),
},
definitions,
)
}
const successResponses = (
document: Document,
operation: Record<string, unknown>,
): ReadonlyArray<Record<string, unknown>> => {
if (!isRecord(operation.responses)) return []
const entries = Object.entries(operation.responses)
return [
...entries.filter(([status]) => /^2\d\d$/.test(status)).sort(([a], [b]) => a.localeCompare(b)),
...entries.filter(([status]) => status.toUpperCase() === "2XX"),
]
.map(([, ref]) => resolve(document, ref))
.filter(isRecord)
}
export const unsupportedOperationReason = (
document: Document,
operation: Record<string, unknown>,
): string | undefined => {
if (operation["x-websocket"] === true) return "WebSocket operations are not supported"
const streams = successResponses(document, operation).some(
(response) =>
isRecord(response.content) &&
Object.keys(response.content).some(
(mediaType) => mediaType.split(";")[0]?.trim().toLowerCase() === "text/event-stream",
),
)
return streams ? "SSE operations are not supported" : undefined
}
export const outputSchema = (
document: Document,
operation: Record<string, unknown>,
definitions: Readonly<Record<string, JsonSchema>>,
): JsonSchema | undefined => {
const successes = successResponses(document, operation)
for (const response of successes) {
const schema = jsonContentSchema(isRecord(response.content) ? response.content : {})
if (schema !== undefined) return withDefinitions(projectSchema(schema), definitions)
}
// Declared non-JSON content (e.g. text/plain) returns the raw body -> unknown.
const declaresContent = successes.some(
(response) => isRecord(response.content) && Object.keys(response.content).length > 0,
)
if (declaresContent) return undefined
// No-content success (e.g. 204) -> null.
return successes.length > 0 ? { type: "null" } : undefined
}
const sanitizeOperationSegment = (raw: string): string => {
const base =
raw
.replaceAll(/[^A-Za-z0-9_$]+/g, "_")
.replace(/^_+|_+$/g, "")
.replace(/^([0-9])/, "_$1") || "operation"
return blockedOperationNames.has(base) ? `${base}_2` : base
}
export const operationPath = (
method: string,
path: string,
operation: Record<string, unknown>,
used: ReadonlySet<string>,
namespaces: ReadonlySet<string>,
): ReadonlyArray<string> => {
const raw = nonEmptyString(operation.operationId)
const base = (raw === undefined ? [`${method}_${path.replaceAll(/[{}]/g, "")}`] : raw.split("."))
.map(sanitizeOperationSegment)
.filter((segment) => segment !== "")
const segments = base.length === 0 ? ["operation"] : base
if (isOperationPathAvailable(segments, used, namespaces)) return segments
const conflict = segments.slice(0, -1).findIndex((_, index) => used.has(segments.slice(0, index + 1).join(".")))
if (conflict >= 0 && conflict + 1 < segments.length) {
const collapsed = segments.flatMap((segment, index) => {
if (index === conflict) {
const next = segments[index + 1] ?? ""
return [`${segment}${next.charAt(0).toUpperCase()}${next.slice(1)}`]
}
return index === conflict + 1 ? [] : [segment]
})
if (isOperationPathAvailable(collapsed, used, namespaces)) return collapsed
}
const fallback = [segments.join("_")]
const next = (index: number): string => {
const candidate = `${fallback[0]}_${index}`
return isOperationPathAvailable([candidate], used, namespaces) ? candidate : next(index + 1)
}
return [next(2)]
}
const isOperationPathAvailable = (
segments: ReadonlyArray<string>,
used: ReadonlySet<string>,
namespaces: ReadonlySet<string>,
): boolean => {
const key = segments.join(".")
if (used.has(key) || namespaces.has(key)) return false
return segments.slice(0, -1).every((_, index) => !used.has(segments.slice(0, index + 1).join(".")))
}
export const specServerUrl = (document: Document): string | Skip => {
const server = asArray(document.servers).find(isRecord)
const url = server === undefined ? undefined : nonEmptyString(server.url)
if (url === undefined) return { reason: "spec declares no servers; pass baseUrl" }
// Templated or relative server URLs cannot be resolved by the adapter.
if (!/^[a-z][a-z0-9+.-]*:\/\//i.test(url) || /\{[^{}]+\}/.test(url)) {
return { reason: `server URL '${url}' is not an absolute URL; pass baseUrl` }
}
return url
}
export const securityRequirements = (value: unknown): ReadonlyArray<SecurityRequirement> =>
asArray(value)
.filter(isRecord)
.map((requirement) =>
Object.fromEntries(
Object.entries(requirement).map(([name, scopes]) => [
name,
asArray(scopes).filter((scope): scope is string => typeof scope === "string"),
]),
),
)
export const securitySchemes = (document: Document): Readonly<Record<string, SecurityScheme>> => {
const components = isRecord(document.components) ? document.components : {}
const declared = isRecord(components.securitySchemes) ? components.securitySchemes : {}
return Object.fromEntries(
Object.entries(declared).flatMap(([name, value]) => {
const resolved = resolve(document, value)
if (!isRecord(resolved)) return []
const type = nonEmptyString(resolved.type)
if (type === undefined || !schemeTypes.has(type)) return []
const carrier = nonEmptyString(resolved.in)
return [
[
name,
{
name,
type: type as SecurityScheme["type"],
in: carrier === "header" || carrier === "query" || carrier === "cookie" ? carrier : undefined,
parameterName: nonEmptyString(resolved.name),
scheme: nonEmptyString(resolved.scheme)?.toLowerCase(),
},
] as const,
]
}),
)
}
+118
View File
@@ -0,0 +1,118 @@
import { Effect } from "effect"
import { HttpClient } from "effect/unstable/http"
import type { Definition, JsonSchema } from "../tool.js"
/** A parsed OpenAPI 3.x document. YAML must be parsed by the host. */
export type Document = Record<string, unknown>
/** The operation identity handed to auth resolution and errors. */
export type Operation = {
readonly id: string
readonly method: string
readonly path: string
readonly summary: string | undefined
readonly description: string | undefined
}
/** A resolved OpenAPI security scheme from `components.securitySchemes`. */
export type SecurityScheme = {
readonly name: string
readonly type: "apiKey" | "http" | "oauth2" | "openIdConnect"
/** apiKey carrier declared by the spec. */
readonly in: "header" | "query" | "cookie" | undefined
/** apiKey parameter name declared by the spec. */
readonly parameterName: string | undefined
/** `http` scheme (`bearer`, `basic`, ...). */
readonly scheme: string | undefined
}
/**
* Credential material returned by a host auth resolver. The carrier for `apiKey`
* comes from the scheme definition, not the credential. `header` is the escape
* hatch for nonstandard schemes.
*/
export type Credential =
| { readonly type: "bearer"; readonly token: string }
| { readonly type: "basic"; readonly username: string; readonly password: string }
| { readonly type: "apiKey"; readonly value: string }
| { readonly type: "header"; readonly name: string; readonly value: string }
/**
* Resolves credential material for one named security scheme at call time.
* `undefined` means unavailable, try the next OR alternative; a failure aborts
* the call rather than falling through.
*/
export type AuthResolver = (context: {
readonly schemeName: string
readonly scheme: SecurityScheme
readonly scopes: ReadonlyArray<string>
readonly operation: Operation
}) => Effect.Effect<Credential | undefined, unknown>
export type Options = {
readonly spec: Document
/** Overrides the spec's `servers` (only the first entry is used). Required when the spec has no absolute server URL. */
readonly baseUrl?: string | undefined
/** Host credential resolution, keyed by security scheme name. */
readonly auth?: { readonly resolve: AuthResolver } | undefined
/** Static headers on every request. Not model-visible; declared header params may override them, auth always wins. */
readonly headers?: Readonly<Record<string, string>> | undefined
/** Curate which operations become tools. Defaults to all. */
readonly operations?: ((operation: Operation) => boolean) | undefined
}
/** An operation that could not be represented as a tool, and why. */
export type Skipped = {
readonly method: string
readonly path: string
readonly reason: string
}
export type Tools = { [name: string]: Definition<HttpClient.HttpClient> | Tools }
export type Result = {
/** Tool subtree; the host places it under a key in its `tools` tree. */
readonly tools: Tools
readonly skipped: ReadonlyArray<Skipped>
}
export type Skip = { readonly reason: string }
export type InputLocation = "path" | "query" | "header" | "body"
export type InputField = {
/** Model-visible field name after cross-location collision handling. */
readonly inputName: string
/** Original parameter or body-property name used on the wire. */
readonly name: string
readonly location: InputLocation
readonly required: boolean
readonly schema: JsonSchema
}
export type Body = { readonly required: boolean; readonly mode: "object" | "value" }
export type OperationInput = {
readonly fields: ReadonlyArray<InputField>
readonly body: Body | undefined
}
/** One OR alternative: scheme name -> required scopes. Empty object = unauthenticated is acceptable. */
export type SecurityRequirement = Readonly<Record<string, ReadonlyArray<string>>>
export type Plan = {
readonly operation: Operation
readonly url: string
readonly fields: ReadonlyArray<InputField>
readonly body: Body | undefined
readonly security: ReadonlyArray<SecurityRequirement>
readonly schemes: Readonly<Record<string, SecurityScheme>>
readonly auth: { readonly resolve: AuthResolver } | undefined
readonly headers: Readonly<Record<string, string>>
}
export type AppliedAuth = {
readonly headers: Readonly<Record<string, string>>
readonly query: Readonly<Record<string, string>>
readonly cookies: Readonly<Record<string, string>>
}
-10
View File
@@ -1,10 +0,0 @@
/**
* Token estimation for budgeting model-facing text. Copied from
* `@opencode-ai/core/util/token` (chars / 4) so this package stays
* dependency-free; keep the two in sync if the heuristic ever changes.
*/
export * as Token from "./token.js"
const CHARS_PER_TOKEN = 4
export const estimate = (input: string) => Math.max(0, Math.round(input.length / CHARS_PER_TOKEN))
+41 -39
View File
@@ -10,27 +10,32 @@ import {
outputTypeScript,
type Definition,
} from "./tool.js"
import { estimate } from "./token.js"
import { SandboxDate, SandboxMap, SandboxPromise, SandboxRegExp, SandboxSet } from "./values.js"
const estimateTokens = (input: string) => Math.max(0, Math.round(input.length / 4))
export type HostTool<R = never> = (...args: Array<unknown>) => Effect.Effect<unknown, unknown, R>
export type HostTools<R = never> = {
[name: string]: HostTool<R> | Definition<R> | HostTools<R>
}
export type Services<Tools> = Tools extends (...args: Array<unknown>) => Effect.Effect<unknown, unknown, infer R>
? R
: Tools extends {
readonly _tag: "CodeModeTool"
readonly run: (input: unknown) => Effect.Effect<unknown, unknown, infer R>
}
export type Services<Tools> = ServicesOf<Tools, []>
type ServicesOf<Tools, Depth extends ReadonlyArray<unknown>> = Depth["length"] extends 8
? never
: Tools extends (...args: Array<unknown>) => Effect.Effect<unknown, unknown, infer R>
? R
: Tools extends object
? string extends keyof Tools
? never
: Services<Tools[keyof Tools]>
: never
: Tools extends {
readonly _tag: "CodeModeTool"
readonly run: (input: unknown) => Effect.Effect<unknown, unknown, infer R>
}
? R
: Tools extends object
? string extends keyof Tools
? ServicesOf<Tools[string], [...Depth, unknown]>
: ServicesOf<Tools[keyof Tools], [...Depth, unknown]>
: never
/** Minimal audit record retained for each admitted tool call. */
export type ToolCall = {
@@ -290,17 +295,16 @@ const definitions = <R>(
return entries
}
const describeDefinition = <R>(path: string, definition: Definition<R>): ToolDescription => ({
path,
description: definition.description,
signature: `${toolExpression(path)}(input: ${inputTypeScript(definition)}): Promise<${outputTypeScript(definition)}>`,
})
const visibleDefinitions = <R>(tools: HostTools<R>) =>
definitions(tools).flatMap(({ path, definition }) => {
const description = describeDefinition(path, definition)
return [{ path, definition, description }]
})
definitions(tools).map(({ path, definition }) => ({
path,
definition,
description: {
path,
description: definition.description,
signature: `${toolExpression(path)}(input: ${inputTypeScript(definition)}): Promise<${outputTypeScript(definition)}>`,
},
}))
export const catalog = <R>(tools: HostTools<R>): ReadonlyArray<ToolDescription> =>
visibleDefinitions(tools).map(({ description }) => description)
@@ -351,16 +355,10 @@ const termForms = (term: string): Array<string> => {
return forms
}
const firstLine = (text: string) => text.split("\n", 1)[0]!.trim()
/** One-line description used on inline catalog lines; the full text stays in search results. */
const brief = (text: string, max = 120) => {
const line = firstLine(text)
return line.length > max ? line.slice(0, max - 1) + "..." : line
}
const catalogLine = (tool: ToolDescription) => {
const description = brief(tool.description)
// Inline catalog lines use only a compact first line; full text stays in search results.
const line = tool.description.split("\n", 1)[0]!.trim()
const description = line.length > 120 ? line.slice(0, 119) + "..." : line
return description === "" ? ` - ${tool.signature}` : ` - ${tool.signature} // ${description}`
}
@@ -430,7 +428,7 @@ export const discoveryPlan = <R>(
picked: new Set<ToolDescription>(),
queue: [...group].sort(
(left, right) =>
estimate(catalogLine(left)) - estimate(catalogLine(right)) || left.path.localeCompare(right.path),
estimateTokens(catalogLine(left)) - estimateTokens(catalogLine(right)) || left.path.localeCompare(right.path),
),
}))
let used = 0
@@ -439,7 +437,7 @@ export const discoveryPlan = <R>(
const stillActive: typeof active = []
for (const selection of active) {
const tool = selection.queue[0]!
const cost = estimate(catalogLine(tool))
const cost = estimateTokens(catalogLine(tool))
if (used + cost > maxInlineCatalogTokens) continue
selection.queue.shift()
selection.picked.add(tool)
@@ -635,9 +633,6 @@ export type ToolRuntime<R = never> = {
readonly keys: (path: ReadonlyArray<string>) => ReadonlyArray<string>
}
const failureMessage = (error: unknown): string =>
error instanceof ToolError || error instanceof ToolRuntimeError ? error.message : "Tool execution failed"
export const make = <R>(
tools: HostTools<R>,
/** Undefined means unlimited tool calls. */
@@ -656,9 +651,16 @@ export const make = <R>(
const startedAt = Date.now()
return effect.pipe(
Effect.tap(() => onEnd({ ...call, durationMs: Date.now() - startedAt, outcome: "success" })),
Effect.tapError((error) =>
onEnd({ ...call, durationMs: Date.now() - startedAt, outcome: "failure", message: failureMessage(error) }),
),
Effect.tapError((error) => {
const message =
error instanceof ToolError || error instanceof ToolRuntimeError ? error.message : "Tool execution failed"
return onEnd({
...call,
durationMs: Date.now() - startedAt,
outcome: "failure",
message,
})
}),
)
}
+8
View File
@@ -13,6 +13,7 @@ export type JsonSchema = {
readonly const?: unknown
readonly anyOf?: ReadonlyArray<JsonSchema>
readonly oneOf?: ReadonlyArray<JsonSchema>
readonly allOf?: ReadonlyArray<JsonSchema>
readonly properties?: Readonly<Record<string, JsonSchema>>
readonly required?: ReadonlyArray<string>
readonly items?: JsonSchema
@@ -168,6 +169,13 @@ const renderSchema = (
}
return alternatives.map((item) => renderSchema(item, ctx, depth + 1, seen)).join(" | ")
}
if (schema.allOf) {
// Parenthesize union members so `A & (B | null)` does not render as `A & B | null`.
return schema.allOf
.map((item) => renderSchema(item, ctx, depth + 1, seen))
.map((rendered) => (rendered.includes(" | ") ? `(${rendered})` : rendered))
.join(" & ")
}
if (Array.isArray(schema.type)) {
return schema.type.map((item) => renderSchema({ type: item }, ctx, depth + 1, seen)).join(" | ")
}
+26962
View File
@@ -0,0 +1,26962 @@
{
"openapi": "3.1.0",
"info": {
"title": "opencode HttpApi",
"version": "0.0.1",
"description": "Experimental HttpApi surface for selected instance routes."
},
"paths": {
"/api/health": {
"get": {
"tags": [
"server.health"
],
"operationId": "v2.health.get",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"healthy": {
"type": "boolean",
"enum": [
true
]
}
},
"required": [
"healthy"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Check whether the API server is ready to accept requests.",
"summary": "Check server health"
}
},
"/api/location": {
"get": {
"tags": [
"server.location"
],
"operationId": "v2.location.get",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Location.Info",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Location.Info"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Resolve the requested location or the server default location.",
"summary": "Get location"
}
},
"/api/agent": {
"get": {
"tags": [
"server.agent"
],
"operationId": "v2.agent.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AgentV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered agents.",
"summary": "List agents"
}
},
"/api/plugin": {
"get": {
"tags": [
"plugins"
],
"operationId": "v2.plugin.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Plugin.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently loaded plugins.",
"summary": "List plugins"
}
},
"/api/session": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.list",
"parameters": [
{
"name": "workspace",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Maximum number of sessions to return. Defaults to the newest 50 sessions."
},
"required": false
},
{
"name": "order",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"asc",
"desc"
]
},
{
"type": "null"
}
],
"description": "Session order for the first page. Use desc for newest first or asc for oldest first."
},
"required": false
},
{
"name": "search",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "parentID",
"in": "query",
"schema": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "string",
"enum": [
"null"
]
}
],
"description": "Filter by parent session. Use null to return only root sessions."
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "directory",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "project",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "subpath",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "cursor",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"description": "Opaque pagination cursor returned as cursor.previous or cursor.next in the previous response."
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "SessionsResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionsResponse"
}
}
}
},
"400": {
"description": "InvalidCursorError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidCursorError"
},
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve sessions in the requested order. Items keep that order across pages; use cursor.next or cursor.previous to move through the ordered list.",
"summary": "List sessions"
},
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.create",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Create a session at the requested location.",
"summary": "Create session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "null"
}
]
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"$ref": "#/components/schemas/Location.Ref"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/active": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.active",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"patternProperties": {
"^ses": {
"$ref": "#/components/schemas/SessionActive"
}
}
},
"watermarks": {
"$ref": "#/components/schemas/SessionWatermarks"
}
},
"required": [
"data",
"watermarks"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve foreground Session drains currently owned by this OpenCode process. Sessions absent from the result are inactive. Watermarks are the durable log positions read alongside the activity snapshot; activity itself is process state, so the pairing is advisory rather than transactional.",
"summary": "List active sessions"
}
},
"/api/session/{sessionID}": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a session by ID.",
"summary": "Get session"
}
},
"/api/session/{sessionID}/fork": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.fork",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | MessageNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Create a child session by copying projected history from the parent. When messageID is supplied, copy messages before that boundary.",
"summary": "Fork session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"messageID": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/agent": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.switchAgent",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Switch the agent used by subsequent provider turns.",
"summary": "Switch session agent",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"agent": {
"type": "string"
}
},
"required": [
"agent"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/model": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.switchModel",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Switch the model used by subsequent provider turns.",
"summary": "Switch session model",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"model"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/rename": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.rename",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Update the session title.",
"summary": "Rename session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string"
}
},
"required": [
"title"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/prompt": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.prompt",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionInput.Admitted"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
}
},
"description": "Durably admit one session input and schedule agent-loop execution unless resume is false.",
"summary": "Send message",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"prompt": {
"$ref": "#/components/schemas/PromptInput"
},
"delivery": {
"anyOf": [
{
"type": "string",
"enum": [
"steer",
"queue"
]
},
{
"type": "null"
}
]
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/command": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.command",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionInput.Admitted"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | CommandNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/CommandNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
},
"500": {
"description": "CommandEvaluationError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommandEvaluationError"
}
}
}
}
},
"description": "Resolve a slash command into prompt input, admit it durably, and schedule execution unless resume is false.",
"summary": "Run command",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"command": {
"type": "string"
},
"arguments": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PromptInput.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
},
"delivery": {
"anyOf": [
{
"type": "string",
"enum": [
"steer",
"queue"
]
},
{
"type": "null"
}
]
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"command"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/skill": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.skill",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | SkillNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SkillNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Activate a skill for a session by appending a skill message and resuming execution.",
"summary": "Activate skill",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"skill": {
"type": "string"
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"skill"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/synthetic": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.synthetic",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Append a synthetic message to a session and resume execution.",
"summary": "Add synthetic message",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"type": "object"
}
},
"required": [
"text"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/compact": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.compact",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Compact a session conversation.",
"summary": "Compact session"
}
},
"/api/session/{sessionID}/wait": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.wait",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Wait for a session agent loop to become idle.",
"summary": "Wait for session"
}
},
"/api/session/{sessionID}/revert/stage": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.stage",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "MessageNotFoundError | SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Stage or move a reversible session boundary and optionally apply its file changes.",
"summary": "Stage session revert",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"files": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"messageID"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/revert/clear": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.clear",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"summary": "Clear staged revert"
}
},
"/api/session/{sessionID}/revert/commit": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.commit",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
}
},
"summary": "Commit staged revert"
}
},
"/api/session/{sessionID}/context": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.context",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Session.Message"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Retrieve the active context messages for a session (all messages after the last compaction).",
"summary": "Get session context"
}
},
"/api/session/{sessionID}/context-entry": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SessionContextEntry.Info"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "List API-managed context entries attached to the session's system context.",
"summary": "List context entries"
}
},
"/api/session/{sessionID}/context-entry/{key}": {
"put": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.put",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "key",
"in": "path",
"schema": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Attach or replace one durable context entry. The value is rendered into the session's system context; changes announce as updates at the next turn boundary.",
"summary": "Put context entry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"value": {}
},
"required": [
"value"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.remove",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "key",
"in": "path",
"schema": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Remove one context entry; the removal is announced to the model at the next turn boundary.",
"summary": "Remove context entry"
}
},
"/api/session/{sessionID}/log": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.log",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "after",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "follow",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"true",
"false"
]
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SessionLogItemStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Durable, ordered, gap-free read of public session events after an exclusive aggregate sequence. Emits a synced marker once replay reaches the captured watermark, then completes; with follow=true it continues with live events instead. The only event API that promises reliability: attach after a snapshot watermark to compose fetch and stream without a race window.",
"summary": "Read the session log"
}
},
"/api/session/{sessionID}/interrupt": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.interrupt",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Interrupt active execution owned by this OpenCode process. Idle interruption is a no-op.",
"summary": "Interrupt session execution"
}
},
"/api/session/{sessionID}/background": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.background",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Move active foreground backgroundable tools for this session into background observation. Idle requests are a no-op.",
"summary": "Background blocking session tools"
}
},
"/api/session/{sessionID}/message/{messageID}": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.message",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "messageID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Session.Message"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | MessageNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve one projected message owned by the Session.",
"summary": "Get session message"
}
},
"/api/session/{sessionID}/message": {
"get": {
"tags": [
"messages"
],
"operationId": "v2.session.messages",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Maximum number of messages to return. When omitted, the endpoint returns its default page size."
},
"required": false
},
{
"name": "order",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"asc",
"desc"
]
},
{
"type": "null"
}
],
"description": "Message order for the first page. Use desc for newest first or asc for oldest first."
},
"required": false
},
{
"name": "cursor",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"description": "Opaque pagination cursor returned as cursor.previous or cursor.next in the previous response. Do not combine with order."
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "SessionMessagesResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionMessagesResponse"
}
}
}
},
"400": {
"description": "InvalidCursorError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidCursorError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.",
"summary": "Get session messages"
}
},
"/api/model": {
"get": {
"tags": [
"models"
],
"operationId": "v2.model.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ModelV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve available models ordered by release date.",
"summary": "List models"
}
},
"/api/model/default": {
"get": {
"tags": [
"models"
],
"operationId": "v2.model.default",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/ModelV2.Info"
},
{
"type": "null"
}
]
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve the model used when a session has no explicit model selection.",
"summary": "Get default model"
}
},
"/api/generate": {
"post": {
"tags": [
"generate"
],
"operationId": "v2.generate.text",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "GenerateTextResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateTextResponse"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Run one stateless model generation at the requested location and return the assistant text. Uses the location's default model when none is specified.",
"summary": "Generate text",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/provider": {
"get": {
"tags": [
"providers"
],
"operationId": "v2.provider.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProviderV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve active AI providers so clients can show provider availability and configuration.",
"summary": "List providers"
}
},
"/api/provider/{providerID}": {
"get": {
"tags": [
"providers"
],
"operationId": "v2.provider.get",
"parameters": [
{
"name": "providerID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/ProviderV2.Info"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ProviderNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProviderNotFoundError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve a single AI provider so clients can inspect its availability and endpoint settings.",
"summary": "Get provider"
}
},
"/api/integration": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Integration.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve available integrations and their authentication methods.",
"summary": "List integrations"
}
},
"/api/integration/{integrationID}": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.get",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.Info"
},
{
"type": "null"
}
]
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve one integration and its authentication methods.",
"summary": "Get integration"
}
},
"/api/integration/{integrationID}/connect/key": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.connect.key",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Run a key authentication method and store the resulting credential.",
"summary": "Connect with key",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"key"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/integration/{integrationID}/connect/oauth": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.connect.oauth",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Integration.Attempt"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Start an OAuth attempt and return the authorization details.",
"summary": "Begin OAuth connection",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"methodID": {
"type": "string"
},
"inputs": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"methodID",
"inputs"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/integration/attempt/{attemptID}": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.status",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Integration.AttemptStatus"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Poll the current status of an OAuth attempt.",
"summary": "Get OAuth attempt status"
},
"delete": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.cancel",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Cancel an OAuth attempt and release its resources.",
"summary": "Cancel OAuth connection"
}
},
"/api/integration/attempt/{attemptID}/complete": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.complete",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Complete a code-based OAuth attempt and store the resulting credential.",
"summary": "Complete OAuth connection",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/mcp": {
"get": {
"tags": [
"mcp"
],
"operationId": "v2.mcp.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Mcp.Server"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve configured MCP servers and their connection status.",
"summary": "List MCP servers"
}
},
"/api/credential/{credentialID}": {
"patch": {
"tags": [
"server.credential"
],
"operationId": "v2.credential.update",
"parameters": [
{
"name": "credentialID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Update a stored credential label.",
"summary": "Update credential",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"label": {
"type": "string"
}
},
"required": [
"label"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"server.credential"
],
"operationId": "v2.credential.remove",
"parameters": [
{
"name": "credentialID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Remove a stored integration credential.",
"summary": "Remove credential"
}
},
"/api/project/current": {
"get": {
"tags": [
"projects"
],
"operationId": "v2.project.current",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Project.Current",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project.Current"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Resolve the project for the requested location.",
"summary": "Get current project"
}
},
"/api/project/{projectID}/directories": {
"get": {
"tags": [
"projects"
],
"operationId": "v2.project.directories",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Project.Directories",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project.Directories"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List known local absolute directories for a project.",
"summary": "List project directories"
}
},
"/api/form/request": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.form.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending forms for a location.",
"summary": "List pending form requests"
}
},
"/api/session/{sessionID}/form": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending forms for a session.",
"summary": "List session forms"
},
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.create",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
}
},
"description": "Create a form for a session.",
"summary": "Create session form",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Form.CreatePayload"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/form/{formID}": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a form for a session.",
"summary": "Get session form"
}
},
"/api/session/{sessionID}/form/{formID}/state": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.state",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Form.State"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve the current state for a form.",
"summary": "Get form state"
}
},
"/api/session/{sessionID}/form/{formID}/reply": {
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "FormInvalidAnswerError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormInvalidAnswerError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "FormAlreadySettledError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormAlreadySettledError"
}
}
}
}
},
"description": "Submit an answer to a pending form.",
"summary": "Reply to form",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Form.Reply"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/form/{formID}/cancel": {
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.cancel",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "FormAlreadySettledError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormAlreadySettledError"
}
}
}
}
},
"description": "Cancel a pending form.",
"summary": "Cancel form"
}
},
"/api/permission/request": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.permission.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending permission requests for a location.",
"summary": "List pending permission requests"
}
},
"/api/permission/saved": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.permission.saved.list",
"parameters": [
{
"name": "projectID",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionSaved.Info"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve saved permissions, optionally filtered by project.",
"summary": "List saved permissions"
}
},
"/api/permission/saved/{id}": {
"delete": {
"tags": [
"permissions"
],
"operationId": "v2.permission.saved.remove",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Remove a saved permission by ID.",
"summary": "Remove saved permission"
}
},
"/api/session/{sessionID}/permission": {
"post": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.create",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"effect": {
"$ref": "#/components/schemas/PermissionV2.Effect"
}
},
"required": [
"id",
"effect"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Evaluate and, when approval is required, create a permission request for a session.",
"summary": "Create permission request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
{
"type": "null"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"action",
"resources"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"get": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending permission requests owned by a session.",
"summary": "List session permission requests"
}
},
"/api/session/{sessionID}/permission/{requestID}": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | PermissionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PermissionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a pending permission request owned by a session.",
"summary": "Get permission request"
}
},
"/api/session/{sessionID}/permission/{requestID}/reply": {
"post": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | PermissionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PermissionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Respond to a pending permission request owned by a session.",
"summary": "Reply to pending permission request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"reply": {
"$ref": "#/components/schemas/PermissionV2.Reply"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"reply"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/fs/read/*": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.read",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Serve one file relative to the requested location.",
"summary": "Read file"
}
},
"/api/fs/list": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "path",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FileSystem.Entry"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List direct children of one directory relative to the requested location.",
"summary": "List directory"
}
},
"/api/fs/find": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.find",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "query",
"in": "query",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "type",
"in": "query",
"schema": {
"type": "string",
"enum": [
"file",
"directory"
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FileSystem.Entry"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Find recursively ranked filesystem entries relative to the requested location.",
"summary": "Find files"
}
},
"/api/command": {
"get": {
"tags": [
"commands"
],
"operationId": "v2.command.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CommandV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered commands.",
"summary": "List commands"
}
},
"/api/skill": {
"get": {
"tags": [
"skills"
],
"operationId": "v2.skill.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SkillV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered skills.",
"summary": "List skills"
}
},
"/api/event": {
"get": {
"tags": [
"events"
],
"operationId": "v2.event.subscribe",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/V2EventStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Subscribe to native event payloads for the server. Volatile by contract: a slow consumer overflows and fails the stream, and events during disconnection are missed. Consumers that need reliability should combine the changes feed with durable session log reads.",
"summary": "Subscribe to events"
}
},
"/api/event/changes": {
"get": {
"tags": [
"events"
],
"operationId": "v2.event.changes",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/EventLog.ChangeStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Payload-free hint channel: after an event commits, a subscriber eventually receives a hint for that aggregate with seq at or beyond the event, or a sweep-required marker. Hints coalesce to the latest seq per aggregate under backpressure and the stream never fails from overflow. No consumer may derive correctness from receiving a hint; correctness always comes from durable log reads plus the consumer's own checkpoint. A sweep-required marker is emitted first on every (re)subscribe and whenever hint retention is exceeded: treat every aggregate as potentially dirty and recover via bounded sweep plus log reads.",
"summary": "Subscribe to change hints"
}
},
"/api/pty": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Pty"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List PTY sessions for a location, including exited sessions retained until removal.",
"summary": "List PTY sessions"
},
"post": {
"tags": [
"pty"
],
"operationId": "v2.pty.create",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Create a pseudo-terminal session for a location.",
"summary": "Create PTY session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"command": {
"type": "string"
},
"args": {
"type": "array",
"items": {
"type": "string"
}
},
"cwd": {
"type": "string"
},
"title": {
"type": "string"
},
"env": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/pty/{ptyID}": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.get",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Get one PTY session, including its exit code once exited.",
"summary": "Get PTY session"
},
"put": {
"tags": [
"pty"
],
"operationId": "v2.pty.update",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Update the title or viewport size of one PTY session.",
"summary": "Update PTY session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"size": {
"type": "object",
"properties": {
"rows": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
"cols": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
}
},
"required": [
"rows",
"cols"
],
"additionalProperties": false
}
},
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"pty"
],
"operationId": "v2.pty.remove",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Terminate and remove one PTY session.",
"summary": "Remove PTY session"
}
},
"/api/pty/{ptyID}/connect-token": {
"post": {
"tags": [
"pty"
],
"operationId": "v2.pty.connectToken",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/PtyTicket.ConnectToken"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"403": {
"description": "ForbiddenError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ForbiddenError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Create a short-lived single-use ticket for opening a PTY WebSocket connection.",
"summary": "Create PTY WebSocket token"
}
},
"/api/pty/{ptyID}/connect": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.connect",
"x-websocket": true,
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"in": "query",
"name": "location[directory]",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "location[workspace]",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "cursor",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "ticket",
"schema": {
"type": "string"
}
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "boolean"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"403": {
"description": "ForbiddenError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ForbiddenError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Establish a WebSocket connection streaming PTY output and accepting terminal input.",
"summary": "Connect to PTY session"
}
},
"/api/shell": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Shell1"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List currently running shell commands for a location. Exited commands are not included.",
"summary": "List running shell commands"
},
"post": {
"tags": [
"shell"
],
"operationId": "v2.shell.create",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Shell1"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Spawn one non-interactive shell command for a location. Combined stdout/stderr is captured to a file pageable via output.",
"summary": "Run shell command",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"timeout": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"metadata": {
"type": "object"
}
},
"required": [
"command"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/shell/{id}": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.get",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Shell1"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Get one shell command, including its status and exit code once exited.",
"summary": "Get shell command"
},
"delete": {
"tags": [
"shell"
],
"operationId": "v2.shell.remove",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Terminate and remove one shell command and its retained output.",
"summary": "Remove shell command"
}
},
"/api/shell/{id}/output": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.output",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "cursor",
"in": "query",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?$"
}
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?$"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "object",
"properties": {
"output": {
"type": "string"
},
"cursor": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"size": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"truncated": {
"type": "boolean"
}
},
"required": [
"output",
"cursor",
"size",
"truncated"
],
"additionalProperties": false
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Page through captured combined output by absolute byte cursor.",
"summary": "Read shell output"
}
},
"/api/question/request": {
"get": {
"tags": [
"session questions"
],
"operationId": "v2.question.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Request"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending question requests for a location.",
"summary": "List pending question requests"
}
},
"/api/session/{sessionID}/question": {
"get": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Request"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending question requests owned by a session.",
"summary": "List session question requests"
}
},
"/api/session/{sessionID}/question/{requestID}/reply": {
"post": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | QuestionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Answer a pending question request owned by a session.",
"summary": "Reply to pending question request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/QuestionV2.Reply"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/question/{requestID}/reject": {
"post": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.reject",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | QuestionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Reject a pending question request owned by a session.",
"summary": "Reject pending question request"
}
},
"/api/reference": {
"get": {
"tags": [
"reference"
],
"operationId": "v2.reference.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Reference.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List references available in the requested location.",
"summary": "List references"
}
},
"/experimental/project/{projectID}/copy": {
"post": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.create",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "ProjectCopy.Copy",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectCopy.Copy"
}
}
}
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"strategy": {
"type": "string"
},
"directory": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"strategy",
"directory"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.remove",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"force": {
"type": "boolean"
}
},
"required": [
"directory",
"force"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/experimental/project/{projectID}/copy/refresh": {
"post": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.refresh",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
}
}
},
"/api/vcs/status": {
"get": {
"tags": [
"vcs"
],
"operationId": "v2.vcs.status",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Vcs.FileStatus"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List uncommitted working-copy changes relative to the requested location.",
"summary": "VCS status"
}
},
"/api/vcs/diff": {
"get": {
"tags": [
"vcs"
],
"operationId": "v2.vcs.diff",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "mode",
"in": "query",
"schema": {
"$ref": "#/components/schemas/Vcs.Mode"
},
"required": true
},
{
"name": "context",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Diff the working copy against HEAD (mode git) or the default-branch merge base (mode branch) for the requested location.",
"summary": "VCS diff"
}
}
},
"components": {
"schemas": {
"UnauthorizedError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"UnauthorizedError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"InvalidRequestError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidRequestError"
]
},
"message": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Location.Info": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
"project": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"directory": {
"type": "string"
}
},
"required": [
"id",
"directory"
],
"additionalProperties": false
}
},
"required": [
"directory",
"project"
],
"additionalProperties": false
},
"Model.Ref": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"variant": {
"type": "string"
}
},
"required": [
"id",
"providerID"
],
"additionalProperties": false
},
"Provider.Settings": {
"type": "object"
},
"Provider.Request": {
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
}
},
"required": [
"settings",
"headers",
"body"
],
"additionalProperties": false
},
"Agent.Color": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^#[0-9a-fA-F]{6}$"
}
]
},
{
"type": "string",
"enum": [
"primary",
"secondary",
"accent",
"success",
"warning",
"error",
"info"
]
}
]
},
"PermissionV2.Effect": {
"type": "string",
"enum": [
"allow",
"deny",
"ask"
]
},
"PermissionV2.Rule": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"resource": {
"type": "string"
},
"effect": {
"$ref": "#/components/schemas/PermissionV2.Effect"
}
},
"required": [
"action",
"resource",
"effect"
],
"additionalProperties": false
},
"PermissionV2.Ruleset": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Rule"
}
},
"AgentV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"request": {
"$ref": "#/components/schemas/Provider.Request"
},
"system": {
"type": "string"
},
"description": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"subagent",
"primary",
"all"
]
},
"hidden": {
"type": "boolean"
},
"color": {
"$ref": "#/components/schemas/Agent.Color"
},
"steps": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
"permissions": {
"$ref": "#/components/schemas/PermissionV2.Ruleset"
}
},
"required": [
"id",
"request",
"mode",
"hidden",
"permissions"
],
"additionalProperties": false
},
"Plugin.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
},
"Location.Ref": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"File.Diff": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"added",
"modified",
"deleted"
]
},
"additions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"deletions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"patch": {
"type": "string"
}
},
"required": [
"path",
"status",
"additions",
"deletions",
"patch"
],
"additionalProperties": false
},
"Revert.State": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"partID": {
"type": "string"
},
"snapshot": {
"type": "string"
},
"diff": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/File.Diff"
}
}
},
"required": [
"messageID"
],
"additionalProperties": false
},
"SessionV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"projectID": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"updated": {
"type": "number"
},
"archived": {
"type": "number"
}
},
"required": [
"created",
"updated"
],
"additionalProperties": false
},
"title": {
"type": "string"
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"subpath": {
"type": "string"
},
"revert": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"id",
"projectID",
"cost",
"tokens",
"time",
"title",
"location"
],
"additionalProperties": false
},
"SessionWatermarks": {
"type": "object",
"patternProperties": {
"^ses": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"description": "Durable log seq each session's snapshot was computed at. Attach a live log read after the watermark to compose fetch and stream gap-free; apply a snapshot only where its watermark is at or beyond already-applied events. Sessions without durable events are absent."
},
"SessionsResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"watermarks": {
"$ref": "#/components/schemas/SessionWatermarks"
},
"cursor": {
"type": "object",
"properties": {
"previous": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"next": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"data",
"watermarks",
"cursor"
],
"additionalProperties": false
},
"InvalidCursorError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidCursorError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"InvalidRequestError1": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidRequestError"
]
},
"message": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"SessionActive": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"running"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
"SessionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SessionNotFoundError"
]
},
"sessionID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"message"
],
"additionalProperties": false
},
"MessageNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"MessageNotFoundError"
]
},
"sessionID": {
"type": "string"
},
"messageID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"messageID",
"message"
],
"additionalProperties": false
},
"Prompt.Source": {
"type": "object",
"properties": {
"start": {
"type": "number"
},
"end": {
"type": "number"
},
"text": {
"type": "string"
}
},
"required": [
"start",
"end",
"text"
],
"additionalProperties": false
},
"PromptInput.FileAttachment": {
"type": "object",
"properties": {
"uri": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"uri"
],
"additionalProperties": false
},
"Prompt.AgentAttachment": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"PromptInput": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PromptInput.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
}
},
"required": [
"text"
],
"additionalProperties": false
},
"Prompt.FileAttachment": {
"type": "object",
"properties": {
"uri": {
"type": "string"
},
"mime": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"uri",
"mime"
],
"additionalProperties": false
},
"Prompt": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
}
},
"required": [
"text"
],
"additionalProperties": false
},
"SessionInput.Admitted": {
"type": "object",
"properties": {
"admittedSeq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
},
"timeCreated": {
"type": "number"
},
"promotedSeq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"admittedSeq",
"id",
"sessionID",
"prompt",
"delivery",
"timeCreated"
],
"additionalProperties": false
},
"ConflictError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ConflictError"
]
},
"message": {
"type": "string"
},
"resource": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"CommandNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"CommandNotFoundError"
]
},
"command": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"command",
"message"
],
"additionalProperties": false
},
"CommandEvaluationError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"CommandEvaluationError"
]
},
"command": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"command",
"message"
],
"additionalProperties": false
},
"SkillNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SkillNotFoundError"
]
},
"skill": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"skill",
"message"
],
"additionalProperties": false
},
"SessionBusyError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SessionBusyError"
]
},
"sessionID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"message"
],
"additionalProperties": false
},
"ServiceUnavailableError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ServiceUnavailableError"
]
},
"message": {
"type": "string"
},
"service": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"UnknownError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"UnknownError"
]
},
"message": {
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Session.Message.AgentSwitched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"agent-switched"
]
},
"agent": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"agent"
],
"additionalProperties": false
},
"Session.Message.ModelSwitched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"model-switched"
]
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"id",
"time",
"type",
"model"
],
"additionalProperties": false
},
"Session.Message.User": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
},
"type": {
"type": "string",
"enum": [
"user"
]
}
},
"required": [
"id",
"time",
"text",
"type"
],
"additionalProperties": false
},
"Session.Message.Synthetic": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"text": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"synthetic"
]
}
},
"required": [
"id",
"time",
"sessionID",
"text",
"type"
],
"additionalProperties": false
},
"Session.Message.System": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"system"
]
},
"text": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"text"
],
"additionalProperties": false
},
"Session.Message.Skill": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"skill"
]
},
"name": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"name",
"text"
],
"additionalProperties": false
},
"Session.Message.Shell": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"shell"
]
},
"callID": {
"type": "string"
},
"command": {
"type": "string"
},
"output": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"callID",
"command",
"output"
],
"additionalProperties": false
},
"Session.Message.Assistant.Text": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"id": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"type",
"id",
"text"
],
"additionalProperties": false
},
"LLM.ProviderMetadata": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"Session.Message.Assistant.Reasoning": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"reasoning"
]
},
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"text"
],
"additionalProperties": false
},
"Session.Message.ToolState.Pending": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"input": {
"type": "string"
}
},
"required": [
"status",
"input"
],
"additionalProperties": false
},
"Tool.TextContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"text": {
"type": "string"
}
},
"required": [
"type",
"text"
],
"additionalProperties": false
},
"Tool.FileContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"file"
]
},
"uri": {
"type": "string"
},
"mime": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"type",
"uri",
"mime"
],
"additionalProperties": false
},
"LLM.ToolContent": {
"anyOf": [
{
"$ref": "#/components/schemas/Tool.TextContent"
},
{
"$ref": "#/components/schemas/Tool.FileContent"
}
]
},
"Session.Message.ToolState.Running": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"running"
]
},
"input": {
"type": "object"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
}
},
"required": [
"status",
"input",
"structured",
"content"
],
"additionalProperties": false
},
"Session.Message.ToolState.Completed": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"completed"
]
},
"input": {
"type": "object"
},
"attachments": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"outputPaths": {
"type": "array",
"items": {
"type": "string"
}
},
"structured": {
"type": "object"
},
"result": {}
},
"required": [
"status",
"input",
"content",
"structured"
],
"additionalProperties": false
},
"Session.Error.Unknown": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown"
]
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
],
"additionalProperties": false
},
"Session.Message.ToolState.Error": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"error"
]
},
"input": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"structured": {
"type": "object"
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
},
"result": {}
},
"required": [
"status",
"input",
"content",
"structured",
"error"
],
"additionalProperties": false
},
"Session.Message.Assistant.Tool": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"tool"
]
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
},
"resultMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
}
},
"required": [
"executed"
],
"additionalProperties": false
},
"state": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.ToolState.Pending"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Running"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Completed"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Error"
}
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"ran": {
"type": "number"
},
"completed": {
"type": "number"
},
"pruned": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"name",
"state",
"time"
],
"additionalProperties": false
},
"Session.Message.Assistant": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"assistant"
]
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"content": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.Assistant.Text"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant.Reasoning"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant.Tool"
}
]
}
},
"snapshot": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"finish": {
"type": "string"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"id",
"time",
"type",
"agent",
"model",
"content"
],
"additionalProperties": false
},
"Session.Message.Compaction": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"compaction"
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
},
"summary": {
"type": "string"
},
"recent": {
"type": "string"
},
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"reason",
"summary",
"recent",
"id",
"time"
],
"additionalProperties": false
},
"Session.Message": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.AgentSwitched"
},
{
"$ref": "#/components/schemas/Session.Message.ModelSwitched"
},
{
"$ref": "#/components/schemas/Session.Message.User"
},
{
"$ref": "#/components/schemas/Session.Message.Synthetic"
},
{
"$ref": "#/components/schemas/Session.Message.System"
},
{
"$ref": "#/components/schemas/Session.Message.Skill"
},
{
"$ref": "#/components/schemas/Session.Message.Shell"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant"
},
{
"$ref": "#/components/schemas/Session.Message.Compaction"
}
]
},
"SessionContextEntry.Key": {
"type": "string",
"allOf": [
{
"pattern": "^[a-z0-9][a-z0-9._-]*$",
"description": "Context entry key (lowercase alphanumerics plus . _ -)"
}
]
},
"SessionContextEntry.Info": {
"type": "object",
"properties": {
"key": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"value": {}
},
"required": [
"key",
"value"
],
"additionalProperties": false
},
"session.next.agent.switched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.agent.switched"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"agent": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"agent"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.model.switched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.model.switched"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"model"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.moved": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.moved"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"subdirectory": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"location"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.renamed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.renamed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"title": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"title"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.forked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.forked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
}
},
"required": [
"timestamp",
"sessionID",
"parentID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.prompted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.prompted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"prompt",
"delivery"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.prompt.admitted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.prompt.admitted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"prompt",
"delivery"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.context.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.context.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.synthetic": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.synthetic"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
},
"description": {
"type": "string"
},
"metadata": {
"type": "object"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.skill.activated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.skill.activated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"name": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"name",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.shell.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.shell.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"command": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"callID",
"command"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.shell.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.shell.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"callID": {
"type": "string"
},
"output": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"callID",
"output"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"snapshot": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"agent",
"model"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"finish": {
"type": "string"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"snapshot": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"finish",
"cost",
"tokens"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.failed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.failed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"error"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"name"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata3": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.called": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.called"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"tool": {
"type": "string"
},
"input": {
"type": "object"
},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata3"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"tool",
"input",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.progress": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.progress"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"structured",
"content"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata4": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.success": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.success"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"outputPaths": {
"type": "array",
"items": {
"type": "string"
}
},
"result": {},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata4"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"structured",
"content",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata5": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.failed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.failed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
},
"result": {},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata5"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"error",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata6": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.reasoning.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata6"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata7": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.reasoning.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"text": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata7"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.retry_error": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"statusCode": {
"type": "number"
},
"isRetryable": {
"type": "boolean"
},
"responseHeaders": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"responseBody": {
"type": "string"
},
"metadata": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"message",
"isRetryable"
],
"additionalProperties": false
},
"session.next.retried": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.retried"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"attempt": {
"type": "number"
},
"error": {
"$ref": "#/components/schemas/session.next.retry_error"
}
},
"required": [
"timestamp",
"sessionID",
"attempt",
"error"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"reason"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
},
"text": {
"type": "string"
},
"recent": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"reason",
"text",
"recent"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.staged": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.staged"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"revert": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"timestamp",
"sessionID",
"revert"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.cleared": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.cleared"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
}
},
"required": [
"timestamp",
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.committed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.committed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SessionDurableEvent": {
"oneOf": [
{
"$ref": "#/components/schemas/session.next.agent.switched"
},
{
"$ref": "#/components/schemas/session.next.model.switched"
},
{
"$ref": "#/components/schemas/session.next.moved"
},
{
"$ref": "#/components/schemas/session.next.renamed"
},
{
"$ref": "#/components/schemas/session.next.forked"
},
{
"$ref": "#/components/schemas/session.next.prompted"
},
{
"$ref": "#/components/schemas/session.next.prompt.admitted"
},
{
"$ref": "#/components/schemas/session.next.context.updated"
},
{
"$ref": "#/components/schemas/session.next.synthetic"
},
{
"$ref": "#/components/schemas/session.next.skill.activated"
},
{
"$ref": "#/components/schemas/session.next.shell.started"
},
{
"$ref": "#/components/schemas/session.next.shell.ended"
},
{
"$ref": "#/components/schemas/session.next.step.started"
},
{
"$ref": "#/components/schemas/session.next.step.ended"
},
{
"$ref": "#/components/schemas/session.next.step.failed"
},
{
"$ref": "#/components/schemas/session.next.text.started"
},
{
"$ref": "#/components/schemas/session.next.text.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.input.started"
},
{
"$ref": "#/components/schemas/session.next.tool.input.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.called"
},
{
"$ref": "#/components/schemas/session.next.tool.progress"
},
{
"$ref": "#/components/schemas/session.next.tool.success"
},
{
"$ref": "#/components/schemas/session.next.tool.failed"
},
{
"$ref": "#/components/schemas/session.next.reasoning.started"
},
{
"$ref": "#/components/schemas/session.next.reasoning.ended"
},
{
"$ref": "#/components/schemas/session.next.retried"
},
{
"$ref": "#/components/schemas/session.next.compaction.started"
},
{
"$ref": "#/components/schemas/session.next.compaction.ended"
},
{
"$ref": "#/components/schemas/session.next.revert.staged"
},
{
"$ref": "#/components/schemas/session.next.revert.cleared"
},
{
"$ref": "#/components/schemas/session.next.revert.committed"
}
]
},
"EventLog.Synced": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.synced"
]
},
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"aggregateID"
],
"additionalProperties": false,
"description": "Marker emitted once when a log read reaches its captured watermark. The reader holds every event committed at or below seq."
},
"SessionLogItem": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionDurableEvent"
},
{
"$ref": "#/components/schemas/EventLog.Synced"
}
]
},
"SessionLogItemStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/SessionLogItem"
},
"contentMediaType": "application/json"
},
"SessionMessagesResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Session.Message"
}
},
"watermark": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"cursor": {
"type": "object",
"properties": {
"previous": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"next": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"data",
"cursor"
],
"additionalProperties": false
},
"Model.Api": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"aisdk"
]
},
"package": {
"type": "string"
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"id",
"type",
"package"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"native"
]
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"id",
"type",
"settings"
],
"additionalProperties": false
}
]
},
"Model.Capabilities": {
"type": "object",
"properties": {
"tools": {
"type": "boolean"
},
"input": {
"type": "array",
"items": {
"type": "string"
}
},
"output": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"tools",
"input",
"output"
],
"additionalProperties": false
},
"Model.Cost": {
"type": "object",
"properties": {
"tier": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"context"
]
},
"size": {
"type": "integer"
}
},
"required": [
"type",
"size"
],
"additionalProperties": false
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"cache"
],
"additionalProperties": false
},
"ModelV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"family": {
"type": "string"
},
"name": {
"type": "string"
},
"api": {
"$ref": "#/components/schemas/Model.Api"
},
"capabilities": {
"$ref": "#/components/schemas/Model.Capabilities"
},
"request": {
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
},
"variant": {
"type": "string"
}
},
"required": [
"settings",
"headers",
"body"
],
"additionalProperties": false
},
"variants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
}
},
"required": [
"id",
"settings",
"headers",
"body"
],
"additionalProperties": false
}
},
"time": {
"type": "object",
"properties": {
"released": {
"type": "number"
}
},
"required": [
"released"
],
"additionalProperties": false
},
"cost": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Model.Cost"
}
},
"status": {
"type": "string",
"enum": [
"alpha",
"beta",
"deprecated",
"active"
]
},
"enabled": {
"type": "boolean"
},
"limit": {
"type": "object",
"properties": {
"context": {
"type": "integer"
},
"input": {
"type": "integer"
},
"output": {
"type": "integer"
}
},
"required": [
"context",
"output"
],
"additionalProperties": false
}
},
"required": [
"id",
"providerID",
"name",
"api",
"capabilities",
"request",
"variants",
"time",
"cost",
"status",
"enabled",
"limit"
],
"additionalProperties": false
},
"GenerateTextResponse": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
},
"Provider.AISDK": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"aisdk"
]
},
"package": {
"type": "string"
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"type",
"package"
],
"additionalProperties": false
},
"Provider.Native": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"native"
]
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"type",
"settings"
],
"additionalProperties": false
},
"Provider.Api": {
"anyOf": [
{
"$ref": "#/components/schemas/Provider.AISDK"
},
{
"$ref": "#/components/schemas/Provider.Native"
}
]
},
"ProviderV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"integrationID": {
"type": "string"
},
"name": {
"type": "string"
},
"disabled": {
"type": "boolean"
},
"api": {
"$ref": "#/components/schemas/Provider.Api"
},
"request": {
"$ref": "#/components/schemas/Provider.Request"
}
},
"required": [
"id",
"name",
"api",
"request"
],
"additionalProperties": false
},
"ProviderNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ProviderNotFoundError"
]
},
"providerID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"providerID",
"message"
],
"additionalProperties": false
},
"Integration.When": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"type": "string"
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Integration.TextPrompt": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"key": {
"type": "string"
},
"message": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"when": {
"$ref": "#/components/schemas/Integration.When"
}
},
"required": [
"type",
"key",
"message"
],
"additionalProperties": false
},
"Integration.SelectPrompt": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"select"
]
},
"key": {
"type": "string"
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"hint": {
"type": "string"
}
},
"required": [
"label",
"value"
],
"additionalProperties": false
}
},
"when": {
"$ref": "#/components/schemas/Integration.When"
}
},
"required": [
"type",
"key",
"message",
"options"
],
"additionalProperties": false
},
"Integration.OAuthMethod": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"oauth"
]
},
"label": {
"type": "string"
},
"prompts": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.TextPrompt"
},
{
"$ref": "#/components/schemas/Integration.SelectPrompt"
}
]
}
}
},
"required": [
"id",
"type",
"label"
],
"additionalProperties": false
},
"Integration.KeyMethod": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"key"
]
},
"label": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false
},
"Integration.EnvMethod": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"env"
]
},
"names": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"type",
"names"
],
"additionalProperties": false
},
"Integration.Method": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.OAuthMethod"
},
{
"$ref": "#/components/schemas/Integration.KeyMethod"
},
{
"$ref": "#/components/schemas/Integration.EnvMethod"
}
]
},
"Connection.CredentialInfo": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"credential"
]
},
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"type",
"id",
"label"
],
"additionalProperties": false
},
"Connection.EnvInfo": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"env"
]
},
"name": {
"type": "string"
}
},
"required": [
"type",
"name"
],
"additionalProperties": false
},
"Connection.Info": {
"anyOf": [
{
"$ref": "#/components/schemas/Connection.CredentialInfo"
},
{
"$ref": "#/components/schemas/Connection.EnvInfo"
}
]
},
"Integration.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"methods": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Integration.Method"
}
},
"connections": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Connection.Info"
}
}
},
"required": [
"id",
"name",
"methods",
"connections"
],
"additionalProperties": false
},
"Integration.Attempt": {
"type": "object",
"properties": {
"attemptID": {
"type": "string"
},
"url": {
"type": "string"
},
"instructions": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"auto",
"code"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"attemptID",
"url",
"instructions",
"mode",
"time"
],
"additionalProperties": false
},
"Integration.AttemptStatus": {
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"complete"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"failed"
]
},
"message": {
"type": "string"
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"message",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"expired"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
}
]
},
"Mcp.Status.Connected": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"connected"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Disconnected": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"disconnected"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Disabled": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"disabled"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Failed": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"failed"
]
},
"error": {
"type": "string"
}
},
"required": [
"status",
"error"
],
"additionalProperties": false
},
"Mcp.Status.NeedsAuth": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"needs_auth"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.NeedsClientRegistration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"needs_client_registration"
]
},
"error": {
"type": "string"
}
},
"required": [
"status",
"error"
],
"additionalProperties": false
},
"Mcp.Server": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/Mcp.Status.Connected"
},
{
"$ref": "#/components/schemas/Mcp.Status.Disconnected"
},
{
"$ref": "#/components/schemas/Mcp.Status.Disabled"
},
{
"$ref": "#/components/schemas/Mcp.Status.Failed"
},
{
"$ref": "#/components/schemas/Mcp.Status.NeedsAuth"
},
{
"$ref": "#/components/schemas/Mcp.Status.NeedsClientRegistration"
}
]
},
"integrationID": {
"type": "string"
}
},
"required": [
"name",
"status"
],
"additionalProperties": false
},
"Project.Current": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"directory": {
"type": "string"
}
},
"required": [
"id",
"directory"
],
"additionalProperties": false
},
"Project.Directory": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"strategy": {
"type": "string"
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"Project.Directories": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project.Directory"
}
},
"Form.Metadata": {
"type": "object"
},
"Form.When": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
{
"type": "boolean"
}
]
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Form.Option": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"value",
"label"
],
"additionalProperties": false
},
"Form.StringField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"string"
]
},
"format": {
"type": "string",
"enum": [
"email",
"uri",
"date",
"date-time"
]
},
"minLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"pattern": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"default": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"custom": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.NumberField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"number"
]
},
"minimum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"maximum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"default": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.IntegerField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"integer"
]
},
"minimum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"maximum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"default": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.BooleanField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"boolean"
]
},
"default": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.MultiselectField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"multiselect"
]
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"minItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"custom": {
"type": "boolean"
},
"default": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"type",
"options"
],
"additionalProperties": false
},
"Form.FormInfo": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"form"
]
},
"fields": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField"
},
{
"$ref": "#/components/schemas/Form.NumberField"
},
{
"$ref": "#/components/schemas/Form.IntegerField"
},
{
"$ref": "#/components/schemas/Form.BooleanField"
},
{
"$ref": "#/components/schemas/Form.MultiselectField"
}
]
}
}
},
"required": [
"id",
"sessionID",
"mode",
"fields"
],
"additionalProperties": false
},
"Form.UrlInfo": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"url"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"mode",
"url"
],
"additionalProperties": false
},
"Form.CreatePayload": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"form",
"url"
]
},
"fields": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField"
},
{
"$ref": "#/components/schemas/Form.NumberField"
},
{
"$ref": "#/components/schemas/Form.IntegerField"
},
{
"$ref": "#/components/schemas/Form.BooleanField"
},
{
"$ref": "#/components/schemas/Form.MultiselectField"
}
]
}
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"mode"
],
"additionalProperties": false
},
"FormNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormNotFoundError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"Form.Value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"Form.Answer": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Form.Value"
}
},
"Form.State": {
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"answered"
]
},
"answer": {
"$ref": "#/components/schemas/Form.Answer"
}
},
"required": [
"status",
"answer"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"cancelled"
]
}
},
"required": [
"status"
],
"additionalProperties": false
}
]
},
"Form.Reply": {
"type": "object",
"properties": {
"answer": {
"$ref": "#/components/schemas/Form.Answer"
}
},
"required": [
"answer"
],
"additionalProperties": false
},
"FormAlreadySettledError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormAlreadySettledError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"FormInvalidAnswerError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormInvalidAnswerError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"PermissionV2.Source": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"tool"
]
},
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"type",
"messageID",
"callID"
],
"additionalProperties": false
}
]
},
"PermissionV2.Request": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
}
},
"required": [
"id",
"sessionID",
"action",
"resources"
],
"additionalProperties": false
},
"PermissionSaved.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"projectID": {
"type": "string"
},
"action": {
"type": "string"
},
"resource": {
"type": "string"
}
},
"required": [
"id",
"projectID",
"action",
"resource"
],
"additionalProperties": false
},
"PermissionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"PermissionNotFoundError"
]
},
"requestID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"requestID",
"message"
],
"additionalProperties": false
},
"PermissionV2.Reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
},
"FileSystem.Entry": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"file",
"directory"
]
}
},
"required": [
"path",
"type"
],
"additionalProperties": false
},
"CommandV2.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"template": {
"type": "string"
},
"description": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"subtask": {
"type": "boolean"
}
},
"required": [
"name",
"template"
],
"additionalProperties": false
},
"SkillV2.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"slash": {
"type": "boolean"
},
"autoinvoke": {
"type": "boolean"
},
"location": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"name",
"location",
"content"
],
"additionalProperties": false
},
"models-dev.refreshed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"models-dev.refreshed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"integration.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"integration.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"integration.connection.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"integration.connection.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"integrationID": {
"type": "string"
}
},
"required": [
"integrationID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"catalog.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"catalog.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"agent.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"agent.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SnapshotFileDiff": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"patch": {
"type": "string"
},
"additions": {
"type": "number"
},
"deletions": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
}
},
"required": [
"additions",
"deletions"
],
"additionalProperties": false
},
"PermissionAction": {
"type": "string",
"enum": [
"allow",
"deny",
"ask"
]
},
"PermissionRule": {
"type": "object",
"properties": {
"permission": {
"type": "string"
},
"pattern": {
"type": "string"
},
"action": {
"$ref": "#/components/schemas/PermissionAction"
}
},
"required": [
"permission",
"pattern",
"action"
],
"additionalProperties": false
},
"PermissionRuleset": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionRule"
}
},
"Session": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"slug": {
"type": "string"
},
"projectID": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
"directory": {
"type": "string"
},
"path": {
"type": "string"
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"summary": {
"type": "object",
"properties": {
"additions": {
"type": "number"
},
"deletions": {
"type": "number"
},
"files": {
"type": "number"
},
"diffs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"additions",
"deletions",
"files"
],
"additionalProperties": false
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"share": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"additionalProperties": false
},
"title": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"variant": {
"type": "string"
}
},
"required": [
"id",
"providerID"
],
"additionalProperties": false
},
"version": {
"type": "string"
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"updated": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"compacting": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"archived": {
"type": "number"
}
},
"required": [
"created",
"updated"
],
"additionalProperties": false
},
"permission": {
"$ref": "#/components/schemas/PermissionRuleset"
},
"revert": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"partID": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"snapshot": {
"type": "string"
},
"diff": {
"type": "string"
}
},
"required": [
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"slug",
"projectID",
"directory",
"title",
"version",
"time"
],
"additionalProperties": false
},
"session.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"JSONSchema": {
"type": "object"
},
"OutputFormat": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"json_schema"
]
},
"schema": {
"$ref": "#/components/schemas/JSONSchema"
},
"retryCount": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"type",
"schema"
],
"additionalProperties": false
}
]
},
"UserMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"role": {
"type": "string",
"enum": [
"user"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
},
"format": {
"anyOf": [
{
"$ref": "#/components/schemas/OutputFormat"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "object",
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"diffs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"diffs"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"agent": {
"type": "string"
},
"model": {
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"modelID": {
"type": "string"
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"providerID",
"modelID"
],
"additionalProperties": false
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tools": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"role",
"time",
"agent",
"model"
],
"additionalProperties": false
},
"ProviderAuthError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ProviderAuthError"
]
},
"data": {
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"providerID",
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"UnknownError1": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"UnknownError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"MessageOutputLengthError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"MessageOutputLengthError"
]
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"MessageAbortedError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"MessageAbortedError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"StructuredOutputError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"StructuredOutputError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"retries": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"message",
"retries"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"ContextOverflowError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ContextOverflowError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"responseBody": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"ContentFilterError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ContentFilterError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"APIError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"APIError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"statusCode": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
},
"isRetryable": {
"type": "boolean"
},
"responseHeaders": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"responseBody": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
]
}
},
"required": [
"message",
"isRetryable"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"AssistantMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"role": {
"type": "string",
"enum": [
"assistant"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"completed": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
},
"error": {
"anyOf": [
{
"anyOf": [
{
"$ref": "#/components/schemas/ProviderAuthError"
},
{
"$ref": "#/components/schemas/UnknownError1"
},
{
"$ref": "#/components/schemas/MessageOutputLengthError"
},
{
"$ref": "#/components/schemas/MessageAbortedError"
},
{
"$ref": "#/components/schemas/StructuredOutputError"
},
{
"$ref": "#/components/schemas/ContextOverflowError"
},
{
"$ref": "#/components/schemas/ContentFilterError"
},
{
"$ref": "#/components/schemas/APIError"
}
]
},
{
"type": "null"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"modelID": {
"type": "string"
},
"providerID": {
"type": "string"
},
"mode": {
"type": "string"
},
"agent": {
"type": "string"
},
"path": {
"type": "object",
"properties": {
"cwd": {
"type": "string"
},
"root": {
"type": "string"
}
},
"required": [
"cwd",
"root"
],
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"total": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"structured": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"finish": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"role",
"time",
"parentID",
"modelID",
"providerID",
"mode",
"agent",
"path",
"cost",
"tokens"
],
"additionalProperties": false
},
"Message": {
"anyOf": [
{
"$ref": "#/components/schemas/UserMessage"
},
{
"$ref": "#/components/schemas/AssistantMessage"
}
]
},
"message.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Message"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"message.removed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.removed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
}
},
"required": [
"sessionID",
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"TextPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"text"
]
},
"text": {
"type": "string"
},
"synthetic": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"ignored": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"time": {
"anyOf": [
{
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text"
],
"additionalProperties": false
},
"SubtaskPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"subtask"
]
},
"prompt": {
"type": "string"
},
"description": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"modelID": {
"type": "string"
}
},
"required": [
"providerID",
"modelID"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"command": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"prompt",
"description",
"agent"
],
"additionalProperties": false
},
"ReasoningPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"reasoning"
]
},
"text": {
"type": "string"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text",
"time"
],
"additionalProperties": false
},
"FilePartSourceText": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"start": {
"type": "number"
},
"end": {
"type": "number"
}
},
"required": [
"value",
"start",
"end"
],
"additionalProperties": false
},
"FileSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"file"
]
},
"path": {
"type": "string"
}
},
"required": [
"text",
"type",
"path"
],
"additionalProperties": false
},
"Range": {
"type": "object",
"properties": {
"start": {
"type": "object",
"properties": {
"line": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"character": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"line",
"character"
],
"additionalProperties": false
},
"end": {
"type": "object",
"properties": {
"line": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"character": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"line",
"character"
],
"additionalProperties": false
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"SymbolSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"symbol"
]
},
"path": {
"type": "string"
},
"range": {
"$ref": "#/components/schemas/Range"
},
"name": {
"type": "string"
},
"kind": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"text",
"type",
"path",
"range",
"name",
"kind"
],
"additionalProperties": false
},
"ResourceSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"resource"
]
},
"clientName": {
"type": "string"
},
"uri": {
"type": "string"
}
},
"required": [
"text",
"type",
"clientName",
"uri"
],
"additionalProperties": false
},
"FilePartSource": {
"anyOf": [
{
"$ref": "#/components/schemas/FileSource"
},
{
"$ref": "#/components/schemas/SymbolSource"
},
{
"$ref": "#/components/schemas/ResourceSource"
}
]
},
"FilePart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"file"
]
},
"mime": {
"type": "string"
},
"filename": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
},
"source": {
"anyOf": [
{
"$ref": "#/components/schemas/FilePartSource"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"mime",
"url"
],
"additionalProperties": false
},
"ToolStatePending": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"input": {
"type": "object"
},
"raw": {
"type": "string"
}
},
"required": [
"status",
"input",
"raw"
],
"additionalProperties": false
},
"ToolStateRunning": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"running"
]
},
"input": {
"type": "object"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
}
},
"required": [
"status",
"input",
"time"
],
"additionalProperties": false
},
"ToolStateCompleted": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"completed"
]
},
"input": {
"type": "object"
},
"output": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"compacted": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"attachments": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/components/schemas/FilePart"
}
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"input",
"output",
"title",
"metadata",
"time"
],
"additionalProperties": false
},
"ToolStateError": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"error"
]
},
"input": {
"type": "object"
},
"error": {
"type": "string"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
}
},
"required": [
"status",
"input",
"error",
"time"
],
"additionalProperties": false
},
"ToolState": {
"anyOf": [
{
"$ref": "#/components/schemas/ToolStatePending"
},
{
"$ref": "#/components/schemas/ToolStateRunning"
},
{
"$ref": "#/components/schemas/ToolStateCompleted"
},
{
"$ref": "#/components/schemas/ToolStateError"
}
]
},
"ToolPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"tool"
]
},
"callID": {
"type": "string"
},
"tool": {
"type": "string"
},
"state": {
"$ref": "#/components/schemas/ToolState"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"callID",
"tool",
"state"
],
"additionalProperties": false
},
"StepStartPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"step-start"
]
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type"
],
"additionalProperties": false
},
"StepFinishPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"step-finish"
]
},
"reason": {
"type": "string"
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"total": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"reason",
"cost",
"tokens"
],
"additionalProperties": false
},
"SnapshotPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"snapshot"
]
},
"snapshot": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"snapshot"
],
"additionalProperties": false
},
"PatchPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"patch"
]
},
"hash": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"hash",
"files"
],
"additionalProperties": false
},
"AgentPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"agent"
]
},
"name": {
"type": "string"
},
"source": {
"anyOf": [
{
"type": "object",
"properties": {
"value": {
"type": "string"
},
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"value",
"start",
"end"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"name"
],
"additionalProperties": false
},
"RetryPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"retry"
]
},
"attempt": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"error": {
"$ref": "#/components/schemas/APIError"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"attempt",
"error",
"time"
],
"additionalProperties": false
},
"CompactionPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"compaction"
]
},
"auto": {
"type": "boolean"
},
"overflow": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"tail_start_id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"auto"
],
"additionalProperties": false
},
"Part": {
"anyOf": [
{
"$ref": "#/components/schemas/TextPart"
},
{
"$ref": "#/components/schemas/SubtaskPart"
},
{
"$ref": "#/components/schemas/ReasoningPart"
},
{
"$ref": "#/components/schemas/FilePart"
},
{
"$ref": "#/components/schemas/ToolPart"
},
{
"$ref": "#/components/schemas/StepStartPart"
},
{
"$ref": "#/components/schemas/StepFinishPart"
},
{
"$ref": "#/components/schemas/SnapshotPart"
},
{
"$ref": "#/components/schemas/PatchPart"
},
{
"$ref": "#/components/schemas/AgentPart"
},
{
"$ref": "#/components/schemas/RetryPart"
},
{
"$ref": "#/components/schemas/CompactionPart"
}
]
},
"message.part.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.part.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"part": {
"$ref": "#/components/schemas/Part"
},
"time": {
"type": "number"
}
},
"required": [
"sessionID",
"part",
"time"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"message.part.removed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.part.removed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"partID": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
}
},
"required": [
"sessionID",
"messageID",
"partID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.execution.settled": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.execution.settled"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"outcome": {
"type": "string",
"enum": [
"success",
"failure",
"interrupted"
]
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"timestamp",
"sessionID",
"outcome"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.reasoning.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"file.edited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"file.edited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"file": {
"type": "string"
}
},
"required": [
"file"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"reference.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"reference.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.v2.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.v2.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
}
},
"required": [
"id",
"sessionID",
"action",
"resources"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.v2.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.v2.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"reply": {
"$ref": "#/components/schemas/PermissionV2.Reply"
}
},
"required": [
"sessionID",
"requestID",
"reply"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"plugin.added": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"plugin.added"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"project.directories.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"project.directories.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"projectID": {
"type": "string"
}
},
"required": [
"projectID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"command.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"command.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"skill.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"skill.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"file.watcher.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"file.watcher.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"event": {
"type": "string",
"enum": [
"add",
"change",
"unlink"
]
}
},
"required": [
"file",
"event"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Pty": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"title": {
"type": "string"
},
"command": {
"type": "string"
},
"args": {
"type": "array",
"items": {
"type": "string"
}
},
"cwd": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"running",
"exited"
]
},
"pid": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exitCode": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"id",
"title",
"command",
"args",
"cwd",
"status",
"pid"
],
"additionalProperties": false
},
"pty.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.exited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.exited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"exitCode": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"id",
"exitCode"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Shell": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
},
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"shell": {
"type": "string"
},
"file": {
"type": "string"
},
"pid": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exit": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"started": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"completed": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"started"
],
"additionalProperties": false
}
},
"required": [
"id",
"status",
"command",
"cwd",
"shell",
"file",
"metadata",
"time"
],
"additionalProperties": false
},
"shell.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Shell"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"shell.exited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.exited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"exit": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
}
},
"required": [
"id",
"status"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"shell.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionV2.Option": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Display text (1-5 words, concise)"
},
"description": {
"type": "string",
"description": "Explanation of choice"
}
},
"required": [
"label",
"description"
],
"additionalProperties": false
},
"QuestionV2.Info": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Complete question"
},
"header": {
"type": "string",
"description": "Very short label (max 30 chars)"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Option"
},
"description": "Available choices"
},
"multiple": {
"type": "boolean"
},
"custom": {
"type": "boolean"
}
},
"required": [
"question",
"header",
"options"
],
"additionalProperties": false
},
"QuestionV2.Tool": {
"type": "object",
"properties": {
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
"question.v2.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Info"
},
"description": "Questions to ask"
},
"tool": {
"$ref": "#/components/schemas/QuestionV2.Tool"
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionV2.Answer": {
"type": "array",
"items": {
"type": "string"
}
},
"question.v2.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Answer"
}
}
},
"required": [
"sessionID",
"requestID",
"answers"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"question.v2.rejected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.rejected"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
}
},
"required": [
"sessionID",
"requestID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Form.Metadata1": {
"type": "object"
},
"Form.When1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "boolean"
}
]
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Form.StringField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"string"
]
},
"format": {
"type": "string",
"enum": [
"email",
"uri",
"date",
"date-time"
]
},
"minLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"pattern": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"default": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"custom": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.NumberField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"number"
]
},
"minimum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"maximum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"default": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.IntegerField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"integer"
]
},
"minimum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"maximum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"default": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.BooleanField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"boolean"
]
},
"default": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.MultiselectField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"multiselect"
]
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"minItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"custom": {
"type": "boolean"
},
"default": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"type",
"options"
],
"additionalProperties": false
},
"Form.FormInfo1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata1"
},
"mode": {
"type": "string",
"enum": [
"form"
]
},
"fields": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField1"
},
{
"$ref": "#/components/schemas/Form.NumberField1"
},
{
"$ref": "#/components/schemas/Form.IntegerField1"
},
{
"$ref": "#/components/schemas/Form.BooleanField1"
},
{
"$ref": "#/components/schemas/Form.MultiselectField1"
}
]
}
}
},
"required": [
"id",
"sessionID",
"mode",
"fields"
],
"additionalProperties": false
},
"Form.UrlInfo1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata1"
},
"mode": {
"type": "string",
"enum": [
"url"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"mode",
"url"
],
"additionalProperties": false
},
"form.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"form": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo1"
},
{
"$ref": "#/components/schemas/Form.UrlInfo1"
}
]
}
},
"required": [
"form"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Form.Value1": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"Form.Answer1": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Form.Value1"
}
},
"form.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"answer": {
"$ref": "#/components/schemas/Form.Answer1"
}
},
"required": [
"id",
"sessionID",
"answer"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"form.cancelled": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.cancelled"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
}
},
"required": [
"id",
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Todo": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Brief description of the task"
},
"status": {
"type": "string",
"description": "Current status of the task: pending, in_progress, completed, cancelled"
},
"priority": {
"type": "string",
"description": "Priority level of the task: high, medium, low"
}
},
"required": [
"content",
"status",
"priority"
],
"additionalProperties": false
},
"todo.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"todo.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"todos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Todo"
}
}
},
"required": [
"sessionID",
"todos"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SessionStatus": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"idle"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"retry"
]
},
"attempt": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"message": {
"type": "string"
},
"action": {
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"provider": {
"type": "string"
},
"title": {
"type": "string"
},
"message": {
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"type": "string"
}
},
"required": [
"reason",
"provider",
"title",
"message",
"label"
],
"additionalProperties": false
},
"next": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"attempt",
"message",
"next"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"busy"
]
}
},
"required": [
"type"
],
"additionalProperties": false
}
]
},
"session.status": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.status"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"status": {
"$ref": "#/components/schemas/SessionStatus"
}
},
"required": [
"sessionID",
"status"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.idle": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.idle"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
}
},
"required": [
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.prompt.append": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.prompt.append"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.command.execute": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.command.execute"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"command": {
"anyOf": [
{
"type": "string",
"enum": [
"session.list",
"session.new",
"session.share",
"session.interrupt",
"session.background",
"session.compact",
"session.page.up",
"session.page.down",
"session.line.up",
"session.line.down",
"session.half.page.up",
"session.half.page.down",
"session.first",
"session.last",
"prompt.clear",
"prompt.submit",
"agent.cycle"
]
},
{
"type": "string"
}
]
}
},
"required": [
"command"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.toast.show": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.toast.show"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"message": {
"type": "string"
},
"variant": {
"type": "string",
"enum": [
"info",
"success",
"warning",
"error"
]
},
"duration": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"message",
"variant"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.session.select": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.session.select"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses",
"description": "Session ID to navigate to"
}
]
}
},
"required": [
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"installation.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"installation.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"version": {
"type": "string"
}
},
"required": [
"version"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"installation.update-available": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"installation.update-available"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"version": {
"type": "string"
}
},
"required": [
"version"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"vcs.branch.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"vcs.branch.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"branch": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"mcp.status.changed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"mcp.status.changed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"server": {
"type": "string"
}
},
"required": [
"server"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"permission": {
"type": "string"
},
"patterns": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"always": {
"type": "array",
"items": {
"type": "string"
}
},
"tool": {
"anyOf": [
{
"type": "object",
"properties": {
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"permission",
"patterns",
"metadata",
"always"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
}
},
"required": [
"sessionID",
"requestID",
"reply"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionOption": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Display text (1-5 words, concise)"
},
"description": {
"type": "string",
"description": "Explanation of choice"
}
},
"required": [
"label",
"description"
],
"additionalProperties": false
},
"QuestionInfo": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Complete question"
},
"header": {
"type": "string",
"description": "Very short label (max 30 chars)"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionOption"
},
"description": "Available choices"
},
"multiple": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Allow selecting multiple choices"
},
"custom": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Allow typing a custom answer (default: true)"
}
},
"required": [
"question",
"header",
"options"
],
"additionalProperties": false
},
"QuestionTool": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
"question.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionInfo"
},
"description": "Questions to ask"
},
"tool": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionTool"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionAnswer": {
"type": "array",
"items": {
"type": "string"
}
},
"question.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionAnswer"
}
}
},
"required": [
"sessionID",
"requestID",
"answers"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"question.rejected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.rejected"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
}
},
"required": [
"sessionID",
"requestID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.error"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"anyOf": [
{
"$ref": "#/components/schemas/ProviderAuthError"
},
{
"$ref": "#/components/schemas/UnknownError1"
},
{
"$ref": "#/components/schemas/MessageOutputLengthError"
},
{
"$ref": "#/components/schemas/MessageAbortedError"
},
{
"$ref": "#/components/schemas/StructuredOutputError"
},
{
"$ref": "#/components/schemas/ContextOverflowError"
},
{
"$ref": "#/components/schemas/ContentFilterError"
},
{
"$ref": "#/components/schemas/APIError"
}
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"V2Event.server.connected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"durable": {
"anyOf": [
{
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"$ref": "#/components/schemas/Location.Ref"
},
{
"type": "null"
}
]
},
"type": {
"type": "string",
"enum": [
"server.connected"
]
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"V2Event": {
"anyOf": [
{
"$ref": "#/components/schemas/models-dev.refreshed"
},
{
"$ref": "#/components/schemas/integration.updated"
},
{
"$ref": "#/components/schemas/integration.connection.updated"
},
{
"$ref": "#/components/schemas/catalog.updated"
},
{
"$ref": "#/components/schemas/agent.updated"
},
{
"$ref": "#/components/schemas/session.created"
},
{
"$ref": "#/components/schemas/session.updated"
},
{
"$ref": "#/components/schemas/session.deleted"
},
{
"$ref": "#/components/schemas/message.updated"
},
{
"$ref": "#/components/schemas/message.removed"
},
{
"$ref": "#/components/schemas/message.part.updated"
},
{
"$ref": "#/components/schemas/message.part.removed"
},
{
"$ref": "#/components/schemas/session.next.agent.switched"
},
{
"$ref": "#/components/schemas/session.next.model.switched"
},
{
"$ref": "#/components/schemas/session.next.moved"
},
{
"$ref": "#/components/schemas/session.next.renamed"
},
{
"$ref": "#/components/schemas/session.next.forked"
},
{
"$ref": "#/components/schemas/session.next.prompted"
},
{
"$ref": "#/components/schemas/session.next.prompt.admitted"
},
{
"$ref": "#/components/schemas/session.next.execution.settled"
},
{
"$ref": "#/components/schemas/session.next.context.updated"
},
{
"$ref": "#/components/schemas/session.next.synthetic"
},
{
"$ref": "#/components/schemas/session.next.skill.activated"
},
{
"$ref": "#/components/schemas/session.next.shell.started"
},
{
"$ref": "#/components/schemas/session.next.shell.ended"
},
{
"$ref": "#/components/schemas/session.next.step.started"
},
{
"$ref": "#/components/schemas/session.next.step.ended"
},
{
"$ref": "#/components/schemas/session.next.step.failed"
},
{
"$ref": "#/components/schemas/session.next.text.started"
},
{
"$ref": "#/components/schemas/session.next.text.delta"
},
{
"$ref": "#/components/schemas/session.next.text.ended"
},
{
"$ref": "#/components/schemas/session.next.reasoning.started"
},
{
"$ref": "#/components/schemas/session.next.reasoning.delta"
},
{
"$ref": "#/components/schemas/session.next.reasoning.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.input.started"
},
{
"$ref": "#/components/schemas/session.next.tool.input.delta"
},
{
"$ref": "#/components/schemas/session.next.tool.input.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.called"
},
{
"$ref": "#/components/schemas/session.next.tool.progress"
},
{
"$ref": "#/components/schemas/session.next.tool.success"
},
{
"$ref": "#/components/schemas/session.next.tool.failed"
},
{
"$ref": "#/components/schemas/session.next.retried"
},
{
"$ref": "#/components/schemas/session.next.compaction.started"
},
{
"$ref": "#/components/schemas/session.next.compaction.delta"
},
{
"$ref": "#/components/schemas/session.next.compaction.ended"
},
{
"$ref": "#/components/schemas/session.next.revert.staged"
},
{
"$ref": "#/components/schemas/session.next.revert.cleared"
},
{
"$ref": "#/components/schemas/session.next.revert.committed"
},
{
"$ref": "#/components/schemas/file.edited"
},
{
"$ref": "#/components/schemas/reference.updated"
},
{
"$ref": "#/components/schemas/permission.v2.asked"
},
{
"$ref": "#/components/schemas/permission.v2.replied"
},
{
"$ref": "#/components/schemas/plugin.added"
},
{
"$ref": "#/components/schemas/project.directories.updated"
},
{
"$ref": "#/components/schemas/command.updated"
},
{
"$ref": "#/components/schemas/skill.updated"
},
{
"$ref": "#/components/schemas/file.watcher.updated"
},
{
"$ref": "#/components/schemas/pty.created"
},
{
"$ref": "#/components/schemas/pty.updated"
},
{
"$ref": "#/components/schemas/pty.exited"
},
{
"$ref": "#/components/schemas/pty.deleted"
},
{
"$ref": "#/components/schemas/shell.created"
},
{
"$ref": "#/components/schemas/shell.exited"
},
{
"$ref": "#/components/schemas/shell.deleted"
},
{
"$ref": "#/components/schemas/question.v2.asked"
},
{
"$ref": "#/components/schemas/question.v2.replied"
},
{
"$ref": "#/components/schemas/question.v2.rejected"
},
{
"$ref": "#/components/schemas/form.created"
},
{
"$ref": "#/components/schemas/form.replied"
},
{
"$ref": "#/components/schemas/form.cancelled"
},
{
"$ref": "#/components/schemas/todo.updated"
},
{
"$ref": "#/components/schemas/session.status"
},
{
"$ref": "#/components/schemas/session.idle"
},
{
"$ref": "#/components/schemas/tui.prompt.append"
},
{
"$ref": "#/components/schemas/tui.command.execute"
},
{
"$ref": "#/components/schemas/tui.toast.show"
},
{
"$ref": "#/components/schemas/tui.session.select"
},
{
"$ref": "#/components/schemas/installation.updated"
},
{
"$ref": "#/components/schemas/installation.update-available"
},
{
"$ref": "#/components/schemas/vcs.branch.updated"
},
{
"$ref": "#/components/schemas/mcp.status.changed"
},
{
"$ref": "#/components/schemas/permission.asked"
},
{
"$ref": "#/components/schemas/permission.replied"
},
{
"$ref": "#/components/schemas/question.asked"
},
{
"$ref": "#/components/schemas/question.replied"
},
{
"$ref": "#/components/schemas/question.rejected"
},
{
"$ref": "#/components/schemas/session.error"
},
{
"$ref": "#/components/schemas/V2Event.server.connected"
}
]
},
"V2EventStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/V2Event"
},
"contentMediaType": "application/json"
},
"EventLog.Hint": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.hint"
]
},
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"aggregateID",
"seq"
],
"additionalProperties": false,
"description": "Payload-free change hint: the aggregate's durable log advanced to at least seq. Hints coalesce under backpressure (latest per aggregate) and are never a delivery guarantee."
},
"EventLog.SweepRequired": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.sweep_required"
]
}
},
"required": [
"type"
],
"additionalProperties": false,
"description": "Hints may have been lost; treat every aggregate as potentially dirty and recover via bounded sweep plus durable log reads. Emitted first on every (re)subscribe."
},
"EventLog.Change": {
"anyOf": [
{
"$ref": "#/components/schemas/EventLog.Hint"
},
{
"$ref": "#/components/schemas/EventLog.SweepRequired"
}
]
},
"EventLog.ChangeStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/EventLog.Change"
},
"contentMediaType": "application/json"
},
"PtyNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"PtyNotFoundError"
]
},
"ptyID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"ptyID",
"message"
],
"additionalProperties": false
},
"PtyTicket.ConnectToken": {
"type": "object",
"properties": {
"ticket": {
"type": "string"
},
"expires_in": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
}
},
"required": [
"ticket",
"expires_in"
],
"additionalProperties": false
},
"ForbiddenError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ForbiddenError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Shell1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
},
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"shell": {
"type": "string"
},
"file": {
"type": "string"
},
"pid": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exit": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"started": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"completed": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"started"
],
"additionalProperties": false
}
},
"required": [
"id",
"status",
"command",
"cwd",
"shell",
"file",
"metadata",
"time"
],
"additionalProperties": false
},
"ShellNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ShellNotFoundError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"QuestionV2.Request": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Info"
},
"description": "Questions to ask"
},
"tool": {
"$ref": "#/components/schemas/QuestionV2.Tool"
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
},
"QuestionV2.Reply": {
"type": "object",
"properties": {
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Answer"
},
"description": "User answers in order of questions (each answer is an array of selected labels)"
}
},
"required": [
"answers"
],
"additionalProperties": false
},
"QuestionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"QuestionNotFoundError"
]
},
"requestID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"requestID",
"message"
],
"additionalProperties": false
},
"Reference.LocalSource": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"local"
]
},
"path": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"type",
"path"
],
"additionalProperties": false
},
"Reference.GitSource": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"git"
]
},
"repository": {
"type": "string"
},
"branch": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"type",
"repository"
],
"additionalProperties": false
},
"Reference.Source": {
"anyOf": [
{
"$ref": "#/components/schemas/Reference.LocalSource"
},
{
"$ref": "#/components/schemas/Reference.GitSource"
}
]
},
"Reference.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"path": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
},
"source": {
"$ref": "#/components/schemas/Reference.Source"
}
},
"required": [
"name",
"path",
"source"
],
"additionalProperties": false
},
"ProjectCopy.Copy": {
"type": "object",
"properties": {
"directory": {
"type": "string"
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"ProjectCopyError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ProjectCopyError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"forceRequired": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"Vcs.FileStatus": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"additions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"deletions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
}
},
"required": [
"file",
"additions",
"deletions",
"status"
],
"additionalProperties": false
},
"Vcs.Mode": {
"type": "string",
"enum": [
"working",
"branch"
]
}
},
"securitySchemes": {}
},
"security": [],
"tags": [
{
"name": "server.health"
},
{
"name": "server.location"
},
{
"name": "server.agent"
},
{
"name": "plugins",
"description": "Experimental plugin routes."
},
{
"name": "sessions",
"description": "Experimental session routes."
},
{
"name": "messages",
"description": "Experimental message routes."
},
{
"name": "models",
"description": "Experimental model routes."
},
{
"name": "generate",
"description": "Experimental one-shot generation routes."
},
{
"name": "providers",
"description": "Experimental provider routes."
},
{
"name": "integrations",
"description": "Integration discovery and authentication routes."
},
{
"name": "mcp",
"description": "MCP server status routes."
},
{
"name": "server.credential"
},
{
"name": "projects",
"description": "Location-scoped project routes."
},
{
"name": "forms",
"description": "Session form routes."
},
{
"name": "permissions",
"description": "Experimental permission routes."
},
{
"name": "filesystem",
"description": "Experimental location-scoped filesystem routes."
},
{
"name": "commands",
"description": "Experimental command routes."
},
{
"name": "skills",
"description": "Experimental skill routes."
},
{
"name": "events",
"description": "Experimental event stream routes."
},
{
"name": "pty",
"description": "Experimental location-scoped PTY routes."
},
{
"name": "shell",
"description": "Experimental location-scoped shell command routes."
},
{
"name": "session questions",
"description": "Experimental session question routes."
},
{
"name": "reference",
"description": "Location-scoped project references."
},
{
"name": "projectCopy",
"description": "Project copy management routes."
},
{
"name": "vcs",
"description": "Location-scoped version control routes."
}
]
}
+443
View File
@@ -0,0 +1,443 @@
import { describe, expect, test } from "bun:test"
import { Effect, Layer, Option } from "effect"
import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
import { CodeMode, OpenAPI } from "../src/index.js"
import type { Document } from "../src/openapi/types.js"
import { inputTypeScript, outputTypeScript, Tool } from "../src/tool.js"
const baseUrl = "http://localhost:4096"
const methods = new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"])
type Recorded = {
readonly method: string
readonly url: string
readonly headers: Record<string, string>
readonly body: unknown
}
const opencodeSpec = async (): Promise<Document> => {
return Bun.file(new URL("./fixtures/opencode-v2-openapi.json", import.meta.url)).json() as Promise<Document>
}
const isRecord = (value: unknown): value is Record<string, unknown> =>
typeof value === "object" && value !== null && !Array.isArray(value)
const operations = (spec: Document) =>
Object.entries(isRecord(spec.paths) ? spec.paths : {}).flatMap(([path, pathValue]) =>
isRecord(pathValue)
? Object.entries(pathValue).flatMap(([method, operation]) =>
methods.has(method) && isRecord(operation) ? [{ path, method, operation }] : [],
)
: [],
)
const nonEmptyString = (value: unknown): string | undefined =>
typeof value === "string" && value !== "" ? value : undefined
const toolPathEntries = (spec: Document) => {
const used = new Set<string>()
const namespaces = new Set<string>()
return operations(spec)
.filter((item) => {
if (item.operation["x-websocket"] === true) return false
const responses = isRecord(item.operation.responses) ? item.operation.responses : {}
return !Object.entries(responses).some(
([status, response]) =>
(/^2\d\d$/.test(status) || status.toUpperCase() === "2XX") &&
isRecord(response) &&
isRecord(response.content) &&
Object.keys(response.content).some(
(mediaType) => mediaType.split(";")[0]?.trim().toLowerCase() === "text/event-stream",
),
)
})
.map((item) => {
const { path, method, operation } = item
const raw = nonEmptyString(operation.operationId)
const segments = (raw === undefined ? [`${method}_${path.replaceAll(/[{}]/g, "")}`] : raw.split("."))
.map(
(segment) =>
segment
.replaceAll(/[^A-Za-z0-9_$]+/g, "_")
.replace(/^_+|_+$/g, "")
.replace(/^([0-9])/, "_$1") || "operation",
)
.map((segment) => (["__proto__", "constructor", "prototype"].includes(segment) ? `${segment}_2` : segment))
const key = segments.join(".")
const prefixUsed = segments.slice(0, -1).some((_, index) => used.has(segments.slice(0, index + 1).join(".")))
const conflict = segments.slice(0, -1).findIndex((_, index) => used.has(segments.slice(0, index + 1).join(".")))
const collapsed =
conflict >= 0 && conflict + 1 < segments.length
? segments.flatMap((segment, index) => {
if (index === conflict) {
const next = segments[index + 1] ?? ""
return [`${segment}${next.charAt(0).toUpperCase()}${next.slice(1)}`]
}
return index === conflict + 1 ? [] : [segment]
})
: undefined
const collapsedKey = collapsed?.join(".")
const name =
collapsedKey !== undefined && !used.has(collapsedKey) && !namespaces.has(collapsedKey)
? collapsedKey
: used.has(key) || namespaces.has(key) || prefixUsed
? `${segments.join("_")}_2`
: key
used.add(name)
for (const index of name.split(".").slice(0, -1).keys())
namespaces.add(
name
.split(".")
.slice(0, index + 1)
.join("."),
)
return { ...item, name }
})
}
const toolAt = (tools: unknown, name: string) =>
name.split(".").reduce<unknown>((current, segment) => (isRecord(current) ? current[segment] : undefined), tools)
const jsonContentSchema = (content: unknown) =>
isRecord(content)
? Object.entries(content).find(([mediaType]) => {
const normalized = mediaType.split(";")[0]?.trim().toLowerCase() ?? ""
return normalized === "application/json" || normalized.endsWith("+json")
})?.[1]
: undefined
const recordingClient = (respond: (request: HttpClientRequest.HttpClientRequest) => Response) => {
const requests: Array<Recorded> = []
const layer = Layer.succeed(HttpClient.HttpClient)(
HttpClient.make((request) =>
Effect.gen(function* () {
const body =
request.body._tag === "Uint8Array" ? JSON.parse(new TextDecoder().decode(request.body.body)) : undefined
const url = Option.map(HttpClientRequest.toUrl(request), (resolved) => resolved.toString())
requests.push({
method: request.method,
url: Option.getOrElse(url, () => request.url),
headers: { ...request.headers },
body,
})
return HttpClientResponse.fromWeb(request, respond(request))
}),
),
)
return { requests, layer }
}
const json = (value: unknown, status = 200) =>
new Response(JSON.stringify(value), { status, headers: { "content-type": "application/json" } })
describe("OpenAPI.fromSpec", () => {
test("converts every opencode operation into the expected tool shape", async () => {
const spec = await opencodeSpec()
const result = OpenAPI.fromSpec({ spec, baseUrl })
const entries = toolPathEntries(spec)
expect(entries.every((entry) => toolAt(result.tools, entry.name) !== undefined)).toBe(true)
expect(result.skipped).toContainEqual({
method: "GET",
path: "/api/pty/{ptyID}/connect",
reason: "WebSocket operations are not supported",
})
expect(result.skipped.filter((item) => item.reason === "SSE operations are not supported")).toHaveLength(3)
expect(toolAt(result.tools, "v2.health.get")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.session.get")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.session.create")).not.toBeUndefined()
const sessionGet = toolAt(result.tools, "v2.session.get")
expect(Tool.isDefinition(sessionGet)).toBe(true)
if (!Tool.isDefinition(sessionGet)) throw new Error("v2.session.get was not generated")
expect(inputTypeScript(sessionGet)).toBe("{ sessionID: string }")
expect(outputTypeScript(sessionGet)).toContain("id: string")
expect(outputTypeScript(sessionGet)).toContain("additions: number")
const switchAgent = toolAt(result.tools, "v2.session.switchAgent")
expect(Tool.isDefinition(switchAgent)).toBe(true)
if (!Tool.isDefinition(switchAgent)) throw new Error("v2.session.switchAgent was not generated")
expect(inputTypeScript(switchAgent)).toBe("{ sessionID: string; agent: string }")
const contextEntryPut = toolAt(result.tools, "v2.session.contextEntry.put")
expect(Tool.isDefinition(contextEntryPut)).toBe(true)
if (!Tool.isDefinition(contextEntryPut)) throw new Error("v2.session.contextEntry.put was not generated")
expect(inputTypeScript(contextEntryPut)).toBe("{ sessionID: string; key: string; value: unknown }")
expect(toolAt(result.tools, "v2_session_context_entry_put_2")).toBeUndefined()
expect(toolAt(result.tools, "v2.pty.connect")).toBeUndefined()
expect(toolAt(result.tools, "v2.session.log")).toBeUndefined()
expect(toolAt(result.tools, "v2.event.subscribe")).toBeUndefined()
expect(toolAt(result.tools, "v2.event.changes")).toBeUndefined()
expect(toolAt(result.tools, "v2.fs.read")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.pty.connectToken")).not.toBeUndefined()
for (const item of entries) {
const tool = toolAt(result.tools, item.name)
expect(tool).toMatchObject({
_tag: "CodeModeTool",
description:
nonEmptyString(item.operation.description) ??
nonEmptyString(item.operation.summary) ??
`${item.method.toUpperCase()} ${item.path}`,
})
const toolRecord = isRecord(tool) ? tool : {}
const input = isRecord(toolRecord.input) ? toolRecord.input : {}
expect(input.type).toBe("object")
const properties = isRecord(input.properties) ? input.properties : {}
const parameters = Array.isArray(item.operation.parameters) ? item.operation.parameters.filter(isRecord) : []
for (const name of parameters
.map((parameter) => parameter.name)
.filter((name): name is string => typeof name === "string")) {
expect(Object.hasOwn(properties, name)).toBe(true)
}
const requestBody = isRecord(item.operation.requestBody) ? item.operation.requestBody : undefined
const media = requestBody === undefined ? undefined : jsonContentSchema(requestBody.content)
const bodySchema = isRecord(media) && isRecord(media.schema) ? media.schema : undefined
if (bodySchema !== undefined && isRecord(bodySchema.properties)) {
for (const name of Object.keys(bodySchema.properties)) expect(Object.hasOwn(properties, name)).toBe(true)
}
const successes = Object.entries(isRecord(item.operation.responses) ? item.operation.responses : {})
.filter(([status]) => /^2\d\d$/.test(status) || status.toUpperCase() === "2XX")
.map(([, response]) => (isRecord(response) ? response : {}))
if (successes.some((response) => jsonContentSchema(response.content) !== undefined)) {
expect(toolRecord.output).not.toBeUndefined()
}
}
})
test("documents that the opencode fixture is unauthenticated", async () => {
const spec = await opencodeSpec()
const components = isRecord(spec.components) ? spec.components : {}
const result = OpenAPI.fromSpec({ spec, baseUrl })
expect(spec.security).toStrictEqual([])
expect(isRecord(components.securitySchemes) ? Object.keys(components.securitySchemes) : []).toStrictEqual([])
const health = toolAt(result.tools, "v2.health.get")
const healthInput = isRecord(health) ? health.input : undefined
expect(healthInput).toMatchObject({ type: "object", properties: {} })
const input = isRecord(healthInput) ? healthInput : {}
expect(Object.keys(isRecord(input.properties) ? input.properties : {})).toStrictEqual([])
})
test("exposes real opencode operations through CodeMode discovery", async () => {
const { layer } = recordingClient(() => json({}))
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime
.execute(
`
return await tools.$codemode.search({ query: "global health", namespace: "opencode", limit: 1 })
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
if (!result.ok) return
expect(result.value).toMatchObject({
items: [
{
path: "tools.opencode.v2.health.get",
description: "Check whether the API server is ready to accept requests.",
},
],
})
expect(JSON.stringify(result.value)).toContain("healthy: true")
})
test("invokes real opencode path parameters and JSON request bodies", async () => {
const { requests, layer } = recordingClient((request) => {
if (request.method === "GET") return json({ id: "ses_123" })
return json({ id: "ses_456" })
})
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime
.execute(
`
const existing = await tools.opencode.v2.session.get({ sessionID: "ses_123" })
const created = await tools.opencode.v2.session.create({ id: "ses_456" })
return { existing, created }
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
expect(requests).toHaveLength(2)
expect(requests[0]).toMatchObject({ method: "GET", body: undefined })
expect(new URL(requests[0]!.url).pathname).toBe("/api/session/ses_123")
expect(requests[1]).toMatchObject({
method: "POST",
url: "http://localhost:4096/api/session",
body: { id: "ses_456" },
})
})
test("fails missing required parameters before auth and network", async () => {
const { requests, layer } = recordingClient(() => json({}))
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime.execute("return await tools.opencode.v2.session.get({})").pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: false })
expect(JSON.stringify(result)).toContain("Missing required path parameter 'sessionID'")
expect(requests).toHaveLength(0)
})
test("prefixes cross-location collisions and reconstructs the HTTP request", async () => {
const spec = {
openapi: "3.1.0",
info: { title: "collision", version: "1.0.0" },
paths: {
"/echo": {
post: {
operationId: "echo",
requestBody: {
required: true,
content: { "application/json": { schema: { type: "string" } } },
},
responses: { "204": { description: "Echoed" } },
},
},
"/things/{id}": {
post: {
operationId: "things.update",
parameters: [
{ name: "id", in: "path", required: true, schema: { type: "string" } },
{ name: "id", in: "query", required: true, schema: { type: "string" } },
{ name: "path_id", in: "query", schema: { type: "string" } },
{ name: "id", in: "header", required: true, schema: { type: "string" } },
],
requestBody: {
required: true,
content: {
"application/json": {
schema: {
type: "object",
properties: { id: { type: "string" } },
required: ["id"],
additionalProperties: false,
},
},
},
},
responses: { "204": { description: "Updated" } },
},
},
},
} satisfies Document
const { requests, layer } = recordingClient(() => new Response(null, { status: 204 }))
const tools = OpenAPI.fromSpec({ spec, baseUrl }).tools
const update = toolAt(tools, "things.update")
const echo = toolAt(tools, "echo")
expect(Tool.isDefinition(update)).toBe(true)
if (!Tool.isDefinition(update)) throw new Error("things.update was not generated")
expect(inputTypeScript(update)).toBe(
"{ path_id: string; query_id: string; path_id_2?: string; header_id: string; body_id: string }",
)
expect(Tool.isDefinition(echo)).toBe(true)
if (!Tool.isDefinition(echo)) throw new Error("echo was not generated")
expect(inputTypeScript(echo)).toBe("{ body: string }")
const runtime = CodeMode.make({ tools })
const result = await Effect.runPromise(
runtime
.execute(
`
const updated = await tools.things.update({ path_id: "path", query_id: "query", path_id_2: "literal", header_id: "header", body_id: "body" })
const echoed = await tools.echo({ body: "hello" })
return { updated, echoed }
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
expect(requests).toHaveLength(2)
expect(new URL(requests[0]!.url).pathname).toBe("/things/path")
expect(new URL(requests[0]!.url).searchParams.get("id")).toBe("query")
expect(new URL(requests[0]!.url).searchParams.get("path_id")).toBe("literal")
expect(requests[0]!.headers.id).toBe("header")
expect(requests[0]!.body).toStrictEqual({ id: "body" })
expect(requests[1]!.body).toBe("hello")
})
test("keeps bodies nested when flattening would lose schema semantics", () => {
const body = (schema: Record<string, unknown>, required = true) => ({
required,
content: { "application/json": { schema } },
})
const spec = {
openapi: "3.1.0",
info: { title: "bodies", version: "1.0.0" },
paths: Object.fromEntries(
[
[
"optional",
body(
{
type: "object",
properties: { name: { type: "string" } },
required: ["name"],
additionalProperties: false,
},
false,
),
],
["dictionary", body({ type: "object", additionalProperties: { type: "string" } })],
[
"composed",
body({
type: "object",
allOf: [{ type: "object", properties: { name: { type: "string" } }, required: ["name"] }],
additionalProperties: false,
}),
],
[
"nullable",
body({
type: ["object", "null"],
properties: { name: { type: "string" } },
additionalProperties: false,
}),
],
].map(([name, requestBody]) => [
`/body/${name}`,
{
post: {
operationId: `body.${name}`,
requestBody,
responses: { "204": { description: "Accepted" } },
},
},
]),
),
} satisfies Document
const tools = OpenAPI.fromSpec({ spec, baseUrl }).tools
for (const name of ["optional", "dictionary", "composed", "nullable"]) {
const tool = toolAt(tools, `body.${name}`)
expect(Tool.isDefinition(tool)).toBe(true)
if (!Tool.isDefinition(tool)) throw new Error(`body.${name} was not generated`)
const input = isRecord(tool.input) ? tool.input : {}
expect(Object.keys(isRecord(input.properties) ? input.properties : {})).toStrictEqual(["body"])
}
const optional = toolAt(tools, "body.optional")
if (!Tool.isDefinition(optional)) throw new Error("body.optional was not generated")
expect(inputTypeScript(optional)).toBe("{ body?: { name: string } }")
})
})
+10
View File
@@ -268,6 +268,16 @@ describe("union schemas render every alternative", () => {
expect(inputTypeScript(tool)).toBe("{ value?: string | number }")
expect(outputTypeScript(tool)).toBe("number | boolean")
})
test("allOf renders intersections with parenthesized union members", () => {
const schema = {
allOf: [
{ type: "object", properties: { id: { type: "string" } } },
{ type: ["string", "null"] },
],
} as const
expect(jsonSchemaToTypeScript(schema)).toBe("{ id?: string } & (string | null)")
})
})
describe("pretty signatures in search results", () => {
+1 -1
View File
@@ -230,7 +230,7 @@ export function hoist<A, E, T extends Tag, const Items extends Replacements = re
if (existing && existing !== node) {
throw new Error(`Tag ${tag} has conflicting implementations for ${node.name}`)
}
hoisted.set(node.name, node)
hoisted.set(node.name, rewriteReplacementDependencies(node, replacementMap))
return group([])
}
if (node.kind === "unbound") {
+4
View File
@@ -89,6 +89,10 @@ export function buildLocationServiceMap(
LayerMap.make(
(ref: Location.Ref) => {
const allReplacements = replacements.concat([[Location.node, Location.boundNode(ref)]])
// Apply replacements during hoist, not afterward: replacements can
// introduce new tagged dependencies (Location.boundNode depends on
// Project), and the hoist walk is the only pass that can still slice
// those back out.
const location = LayerNode.hoist(locationServices, Node.tags.values.global, allReplacements)
return LayerNode.compile(location.node).pipe(
@@ -292,8 +292,6 @@ export function createRoutes(
HttpServer.layerServices,
]),
Layer.provide(Layer.succeed(CorsConfig)(corsOptions)),
Layer.provideMerge(Observability.layer),
Layer.provide(sessionLocationLayer),
Layer.provide(locationLayer),
Layer.provide(PtyEnvironment.layer),
@@ -306,6 +304,11 @@ export function createRoutes(
Layer.provide(locationServiceMapV2),
Layer.provide(AppNodeBuilderV1.build(app)),
// Must stay last: layers provided later in this pipe build beneath earlier ones,
// so Observability must come after every service graph. Otherwise eagerly forked
// fibers (e.g. the ModelsDev background refresh) capture Effect's default stdout
// logger and corrupt the TUI (#34730).
Layer.provideMerge(Observability.layer),
)
}
@@ -192,6 +192,8 @@ const layer = Layer.effect(
status: "error",
input: match.part.state.input,
error: errorMessage(error),
// Keep metadata streamed while running so failures retain progress detail (e.g. execute's child calls).
metadata: match.part.state.metadata,
time: { start: match.part.state.time.start, end: Date.now() },
},
})
+26 -24
View File
@@ -287,35 +287,37 @@ export const CodeModeTool = Tool.define(
const result = yield* Effect.raceFirst(runtime.execute(params.code), abort.pipe(Effect.map(cancelled)))
const logs = result.logs ?? []
const attached = attachments.length > 0 ? { attachments } : {}
const hints = result.ok
? []
: (result.error.suggestions ?? []).filter((hint) => !result.error.message.includes(hint))
const metadata: Metadata = result.ok ? { toolCalls: calls } : { toolCalls: calls, error: true }
let output: string
if (result.ok) {
if (typeof result.value === "string") output = result.value
else if (result.value === undefined) output = "undefined"
else {
try {
output = JSON.stringify(result.value, null, 2) ?? String(result.value)
} catch {
output = String(result.value)
}
}
} else {
output = [result.error.message, ...hints].join("\n")
const withLogs = (text: string) => {
if (logs.length === 0) return text
return text.length > 0 ? `${text}\n\nLogs:\n${logs.join("\n")}` : `Logs:\n${logs.join("\n")}`
}
if (logs.length > 0)
output = output.length > 0 ? `${output}\n\nLogs:\n${logs.join("\n")}` : `Logs:\n${logs.join("\n")}`
if (!result.ok) {
if (ctx.abort.aborted) {
return {
title: CODE_MODE_TOOL,
metadata: { toolCalls: calls, error: true },
output: "Execution cancelled.",
} satisfies Tool.ExecuteResult<Metadata>
}
const hints = (result.error.suggestions ?? []).filter((hint) => !result.error.message.includes(hint))
return yield* Effect.fail(new Error(withLogs([result.error.message, ...hints].join("\n"))))
}
// The interpreter validates returned values as plain JSON, so stringify cannot throw;
// it yields undefined only for a program that returns undefined.
const output =
typeof result.value === "string"
? result.value
: (JSON.stringify(result.value, null, 2) ?? String(result.value))
return {
title: CODE_MODE_TOOL,
metadata,
output,
...attached,
metadata: { toolCalls: calls },
output: withLogs(output),
...(attachments.length > 0 ? { attachments } : {}),
} satisfies Tool.ExecuteResult<Metadata>
}),
}, Effect.orDie),
}
return init
}),
@@ -17,7 +17,7 @@ import {
ListToolsRequestSchema,
type Tool as MCPToolDef,
} from "@modelcontextprotocol/sdk/types.js"
import { Effect, Layer } from "effect"
import { Cause, Effect, Exit, Layer } from "effect"
const PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
@@ -160,6 +160,12 @@ async function buildTool() {
}
const run = (code: string) => Effect.runPromise(tool.execute({ code }, ctx))
// Program failures die at the tool boundary; recover the defect for message assertions.
const runFailed = async (code: string) => {
const exit = await Effect.runPromise(tool.execute({ code }, ctx).pipe(Effect.exit))
if (Exit.isSuccess(exit)) throw new Error("expected the tool to fail")
return Cause.squash(exit.cause) as Error
}
beforeAll(async () => {
const built = await buildTool()
@@ -248,9 +254,8 @@ describe("code mode integration (real MCP server)", () => {
})
test("an uncaught MCP error surfaces as a failed execution", async () => {
const out = await run("await tools.fixtures.boom({}); return 'unreachable'")
expect(out.metadata.error).toBe(true)
expect(out.output).toContain("kaboom")
const error = await runFailed("await tools.fixtures.boom({}); return 'unreachable'")
expect(error.message).toContain("kaboom")
})
test("console output is captured and appended as a Logs section after the result", async () => {
@@ -265,14 +270,13 @@ describe("code mode integration (real MCP server)", () => {
})
test("console output is preserved on the error path", async () => {
const out = await run(`
const error = await runFailed(`
console.log("before the throw")
await tools.fixtures.boom({})
return "unreachable"
`)
expect(out.metadata.error).toBe(true)
expect(out.output).toContain("kaboom")
expect(out.output).toContain("Logs:\nbefore the throw")
expect(error.message).toContain("kaboom")
expect(error.message).toContain("Logs:\nbefore the throw")
})
test("a program that logs nothing gets no Logs section", async () => {
+21 -22
View File
@@ -10,7 +10,7 @@ import { Session } from "@/session/session"
import { Tool } from "@/tool/tool"
import * as Truncate from "@/tool/truncate"
import { MessageID, SessionID } from "@/session/schema"
import { Effect, Layer, Schema } from "effect"
import { Cause, Effect, Exit, Layer, Schema } from "effect"
const ctx: Tool.Context = {
sessionID: SessionID.make("ses_code-mode"),
@@ -86,6 +86,13 @@ function describeFor(mcpTools: Record<string, MCP.McpTool>, servers?: string[],
return describeCatalog(Permission.visibleTools(mcpTools, permission), serverNames(mcpTools, servers))
}
// Program failures die at the tool boundary; recover the defect for message assertions.
async function failure(effect: Effect.Effect<unknown>) {
const exit = await Effect.runPromise(effect.pipe(Effect.exit))
if (Exit.isSuccess(exit)) throw new Error("expected the tool to fail")
return Cause.squash(exit.cause) as Error
}
describe("code mode execute", () => {
test("defines execute input with an Effect schema", async () => {
const decode = Schema.decodeUnknownEffect(Parameters)
@@ -313,18 +320,16 @@ describe("code mode execute", () => {
expect(output.metadata.toolCalls.every((c) => c.status === "completed")).toBe(true)
})
test("returns a readable error when the program throws", async () => {
test("a program failure fails the tool with a readable error", async () => {
const tool = await build({})
const output = await Effect.runPromise(tool.execute({ code: "throw new Error('boom')" }, ctx))
expect(output.output).toBe("Uncaught: boom")
expect(output.metadata.error).toBe(true)
const error = await failure(tool.execute({ code: "throw new Error('boom')" }, ctx))
expect(error.message).toBe("Uncaught: boom")
})
test("reports an unknown tool as a failed execution", async () => {
const tool = await build({ known_tool: mcpTool("tool", () => "ok") })
const output = await Effect.runPromise(tool.execute({ code: "return await tools.known.missing({})" }, ctx))
expect(output.metadata.error).toBe(true)
expect(output.output).toContain("Unknown tool 'known.missing'")
const error = await failure(tool.execute({ code: "return await tools.known.missing({})" }, ctx))
expect(error.message).toContain("Unknown tool 'known.missing'")
})
test("propagates an MCP tool error into the program as a catchable failure", async () => {
@@ -576,8 +581,8 @@ describe("code mode execute", () => {
test("isolates the sandbox from host globals", async () => {
const tool = await build({})
const output = await Effect.runPromise(tool.execute({ code: "return process.env" }, ctx))
expect(output.metadata.error).toBe(true)
const error = await failure(tool.execute({ code: "return process.env" }, ctx))
expect(error.message).toContain("process")
})
test("cancelling via ctx.abort interrupts the running program", async () => {
@@ -627,12 +632,9 @@ describe("code mode execute", () => {
)
expect(ok.output).toBe("done\n\nLogs:\nstep one\n[warn] careful")
const err = await Effect.runPromise(
tool.execute({ code: "console.log('before the throw'); throw new Error('boom')" }, ctx),
)
expect(err.metadata.error).toBe(true)
expect(err.output).toContain("Uncaught: boom")
expect(err.output).toContain("Logs:\nbefore the throw")
const error = await failure(tool.execute({ code: "console.log('before the throw'); throw new Error('boom')" }, ctx))
expect(error.message).toContain("Uncaught: boom")
expect(error.message).toContain("Logs:\nbefore the throw")
})
})
@@ -677,12 +679,9 @@ describe("code mode permission visibility", () => {
[deny("github_create_issue")],
)
const denied = await Effect.runPromise(
tool.execute({ code: "return await tools.github.create_issue({ title: 'x' })" }, ctx),
)
expect(denied.metadata.error).toBe(true)
expect(denied.output).toContain("Unknown tool 'github.create_issue'")
expect(denied.output).not.toContain("permission")
const denied = await failure(tool.execute({ code: "return await tools.github.create_issue({ title: 'x' })" }, ctx))
expect(denied.message).toContain("Unknown tool 'github.create_issue'")
expect(denied.message).not.toContain("permission")
expect(called).toEqual([])
const allowed = await Effect.runPromise(tool.execute({ code: "return await tools.github.list_issues({})" }, ctx))
+1
View File
@@ -127,6 +127,7 @@ export const PtyGroup = HttpApiGroup.make("server.pty")
description: "Establish a WebSocket connection streaming PTY output and accepting terminal input.",
transform: (operation) => ({
...operation,
"x-websocket": true,
parameters: [
...(operation.parameters ?? []),
...["location[directory]", "location[workspace]", "cursor", PTY_CONNECT_TICKET_QUERY].map((name) => ({
+1 -1
View File
@@ -198,7 +198,7 @@ const en = {
"model.knowledge": "Knowledge",
"model.release": "Release",
"model.inputs": "Inputs",
"model.overviewDescription": "Recent OpenCode Go tokens, unique users, and market position.",
"model.overviewDescription": "Recent tokens, unique users, and market position.",
"model.noSummaryTitle": "No usage summary",
"model.noSummaryDescription": "This model has no OpenCode Go usage rows yet.",
"model.tokens": "Tokens",
+240 -189
View File
@@ -48,6 +48,7 @@ import {
const statsUnfurlPath = "banner.png"
const geoMapWidth = 960
const geoMapHeight = 430
const shortMonths = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"] as const
type IsoCountryCode = readonly [string, string, string]
type WorldCountryProperties = GeoJsonProperties & { name?: string }
@@ -119,8 +120,7 @@ export default function StatsModel() {
const statsUnfurlUrl = new URL(statsUnfurlPath, localizedUrl("en", "/data/")).toString()
const modelHeaderLinks = createMemo<readonly HeaderLink[]>(() => [
{ href: "#overview", label: i18n.t("nav.overview") },
{ href: "#usage", label: i18n.t("nav.usage") },
{ href: "#users", label: i18n.t("nav.users") },
{ href: "#momentum", label: i18n.t("model.momentum") },
{ href: "#efficiency", label: i18n.t("nav.efficiency") },
{ href: "#geo-breakdown", label: i18n.t("nav.geoBreakdown") },
{ href: "#peers", label: i18n.t("nav.peers") },
@@ -181,9 +181,8 @@ export default function StatsModel() {
catalogData={catalog() ?? null}
labName={labName()}
/>
<ModelOverview data={stats() ?? null} />
<ModelUsageSection data={stats()?.usage ?? []} />
<ModelUsersSection data={stats()?.usage ?? []} />
<ModelOverview catalog={catalogEntry() ?? null} />
<ModelMomentumSection data={stats() ?? null} />
<ModelEfficiencySection data={stats() ?? null} catalog={catalogEntry() ?? null} />
<ModelGeoBreakdownSection data={stats()?.country ?? emptyCountryRecord()} />
<ModelPeersSection data={stats() ?? null} />
@@ -423,15 +422,59 @@ function ChevronDownIcon() {
)
}
function ModelOverview(props: { data: StatsModelData | null }) {
function ModelOverview(props: { catalog: ModelCatalogEntry | null }) {
const i18n = useI18n()
const language = useLanguage()
const specs = createMemo(() => [
{
label: i18n.t("model.context"),
value: formatCatalogLimit(props.catalog?.limit?.context, i18n.t("home.unknown")),
},
{
label: i18n.t("model.output"),
value: formatCatalogLimit(props.catalog?.limit?.output, i18n.t("home.unknown")),
},
{
label: i18n.t("model.knowledge"),
value: formatCatalogMonth(props.catalog?.knowledge, language.tag(language.locale()), i18n.t("home.unknown")),
},
{
label: i18n.t("model.release"),
value: formatCatalogMonth(props.catalog?.releaseDate, language.tag(language.locale()), i18n.t("home.unknown")),
},
{
label: i18n.t("model.inputs"),
value: formatCatalogModalities(
props.catalog?.modalities.input ?? [],
language.tag(language.locale()),
i18n.t("home.unknown"),
),
},
])
return (
<section id="model-overview" data-section="model-panel">
<SectionTitle
href="#model-overview"
title={i18n.t("nav.overview")}
description={i18n.t("model.overviewDescription")}
/>
<section id="model-overview" data-section="model-specs" aria-label={i18n.t("nav.overview")}>
<For each={specs()}>
{(spec) => (
<div data-component="model-spec">
<span>{spec.label}</span>
<strong>{spec.value}</strong>
</div>
)}
</For>
</section>
)
}
function ModelMomentumSection(props: { data: StatsModelData | null }) {
const i18n = useI18n()
const language = useLanguage()
return (
<section id="momentum" data-section="model-momentum">
<h2 data-slot="model-momentum-title">
<a href="#momentum">{i18n.t("model.momentum")}.</a>
<span>{i18n.t("model.overviewDescription")}</span>
</h2>
<div data-slot="model-momentum-pattern" aria-hidden="true" />
<Show
when={props.data}
fallback={
@@ -439,189 +482,83 @@ function ModelOverview(props: { data: StatsModelData | null }) {
}
>
{(data) => (
<div data-component="model-metric-grid">
<MetricCard
label={i18n.t("model.tokens")}
value={formatTokens(data().totals.tokens)}
detail={i18n.t("model.lastTwoMonths")}
/>
<MetricCard
label={i18n.t("model.uniqueUsers")}
value={formatUsers(data().totals.uniqueUsers)}
detail={i18n.t("model.lastTwoMonths")}
/>
<MetricCard
label={i18n.t("model.sessions")}
value={formatInteger(data().totals.sessions)}
detail={i18n.t("model.completedSessions")}
/>
<MetricCard
label={i18n.t("model.tokenShare")}
value={formatPercent(data().tokenShare)}
detail={i18n.t("model.totalModels", { count: data().totalModels })}
/>
<MetricCard
label={i18n.t("model.momentum")}
value={formatChange(data().tokenChange)}
detail={i18n.t("model.vsPreviousWindow")}
state={data().tokenChange < 0 ? "negative" : "positive"}
/>
</div>
<>
<MomentumChart data={data()} locale={language.tag(language.locale())} />
<div data-slot="model-momentum-metrics">
<MomentumMetric label={i18n.t("model.uniqueUsers")} value={formatUsers(data().totals.uniqueUsers)} />
<MomentumMetric
label={capitalizeLabel(i18n.t("model.completedSessions"))}
value={formatInteger(data().totals.sessions)}
/>
<MomentumMetric label={i18n.t("model.tokenShare")} value={formatPercent(data().tokenShare)} />
<MomentumMetric
label="Rank"
value={formatRankLabel(data().rank)}
watermark={formatRankLabel(data().rank)}
/>
</div>
</>
)}
</Show>
</section>
)
}
function ModelUsageSection(props: { data: ModelUsagePoint[] }) {
const i18n = useI18n()
function MomentumChart(props: { data: StatsModelData; locale: string }) {
const chart = createMemo(() => momentumChart(props.data.usage, props.data.updatedAt))
const changeState = createMemo(() => (props.data.tokenChange < 0 ? "negative" : "positive"))
return (
<section id="usage" data-section="model-panel">
<SectionTitle href="#usage" title={i18n.t("nav.usage")} description={i18n.t("model.usageDescription")} />
<Show
when={props.data.some((item) => item.tokens > 0)}
fallback={
<ModelEmptyState title={i18n.t("model.noUsageTitle")} description={i18n.t("model.noUsageDescription")} />
}
>
<ModelColumnChart data={props.data} metric="tokens" ariaLabel={i18n.t("model.dailyTokenChart")} />
</Show>
</section>
)
}
function ModelUsersSection(props: { data: ModelUsagePoint[] }) {
const i18n = useI18n()
return (
<section id="users" data-section="model-panel">
<SectionTitle href="#users" title={i18n.t("model.uniqueUsers")} description={i18n.t("model.usersDescription")} />
<Show
when={props.data.some((item) => item.users > 0)}
fallback={
<ModelEmptyState title={i18n.t("model.noUsersTitle")} description={i18n.t("model.noUsersDescription")} />
}
>
<ModelColumnChart data={props.data} metric="users" ariaLabel={i18n.t("model.dailyUserChart")} />
</Show>
</section>
)
}
function ModelColumnChart(props: { data: ModelUsagePoint[]; metric: "tokens" | "users"; ariaLabel: string }) {
const i18n = useI18n()
const [activeIndex, setActiveIndex] = createSignal<number>()
const max = createMemo(() => Math.max(0, ...props.data.map((item) => modelUsageMetricValue(item, props.metric))) || 1)
const activePoint = createMemo(() => {
const index = activeIndex()
if (index === undefined) return undefined
return props.data[index]
})
return (
<div
data-component="model-usage-chart"
data-metric={props.metric}
data-dense-labels={isModelUsageDense(props.data.length) ? "true" : undefined}
role="img"
aria-label={props.ariaLabel}
style={{ "--model-usage-count": props.data.length } as JSX.CSSProperties}
onPointerLeave={(event) => {
if (event.pointerType === "touch") return
setActiveIndex(undefined)
}}
>
<div data-slot="model-usage-axis" aria-hidden="true">
<For each={props.data}>
{(point, index) => (
<div
data-active={activeIndex() === index() ? "true" : undefined}
data-label-hidden={isModelUsageLabelHidden(index(), props.data.length) ? "true" : undefined}
>
<span data-slot="model-usage-label">
<span data-slot="model-usage-total">{formatModelUsageValue(point, props.metric)}</span>
<span data-slot="model-usage-date">{point.date}</span>
</span>
</div>
)}
</For>
<div data-component="model-momentum-chart" role="img" aria-label="Recent model token momentum">
<div data-slot="model-momentum-summary">
<div data-slot="model-momentum-total">
<strong>{formatTokens(props.data.totals.tokens)} tokens</strong>
<span data-state={changeState()}>{formatChange(props.data.tokenChange)}</span>
</div>
<p>
<span>{formatMomentumDate(chart().startDate, props.locale, props.data.updatedAt)}</span>
<span aria-hidden="true"></span>
<span>{formatMomentumDate(chart().endDate, props.locale, props.data.updatedAt)}</span>
</p>
</div>
<div data-slot="model-usage-bars">
<For each={props.data}>
{(point, index) => (
<div
data-slot="model-usage-column"
role="button"
tabIndex={0}
aria-label={`${point.date} ${formatModelUsageValue(point, props.metric)} ${modelUsageLabel(props.metric, i18n)}`}
data-active={activeIndex() === index() ? "true" : undefined}
data-muted={activeIndex() !== undefined && activeIndex() !== index() ? "true" : undefined}
onPointerDown={(event) => {
if (event.pointerType !== "touch") return
setActiveIndex(index())
}}
onPointerEnter={() => setActiveIndex(index())}
onPointerMove={(event) => {
if (event.pointerType === "touch") return
setActiveIndex(index())
}}
onClick={() => setActiveIndex(index())}
onFocus={() => setActiveIndex(index())}
onBlur={() => setActiveIndex(undefined)}
onKeyDown={(event) => {
if (event.key !== "Enter" && event.key !== " ") return
event.preventDefault()
setActiveIndex(index())
}}
>
<div
data-slot="model-usage-bar"
style={
{
"--model-usage-fill": `${modelUsageHeight(modelUsageMetricValue(point, props.metric), max())}%`,
} as JSX.CSSProperties
}
<div data-slot="model-momentum-plot">
<svg viewBox="0 0 1200 370" preserveAspectRatio="none" aria-hidden="true">
<path data-slot="model-momentum-line-muted" d={chart().previousPath} />
<path data-slot="model-momentum-line-active" d={chart().currentPath} />
<For each={chart().markers}>
{(marker) => (
<rect
data-slot="model-momentum-marker"
data-active={marker.active ? "true" : undefined}
x={marker.x - 3}
y={marker.y - 3}
width="6"
height="6"
/>
<Show when={activeIndex() === index() && activePoint()}>
{(active) => (
<div
data-component="chart-tooltip"
data-placement={index() > props.data.length * 0.62 ? "left" : "right"}
>
<strong>{active().date}</strong>
<span>
{formatModelUsageValue(active(), props.metric)} {modelUsageLabel(props.metric, i18n)}
</span>
<div data-slot="tooltip-divider" />
<p>
<span data-slot="tooltip-label">
<i /> {i18n.t("chart.daily")} {modelUsageLabel(props.metric, i18n)}
</span>
<b>{formatModelUsageValue(active(), props.metric)}</b>
</p>
</div>
)}
</Show>
</div>
)}
)}
</For>
</svg>
<span data-slot="model-momentum-end" data-state={changeState()} style={chart().endStyle}>
<i />
{formatChange(props.data.tokenChange)}
</span>
</div>
<div data-slot="model-momentum-months" aria-hidden="true">
<For each={momentumMonthLabels(chart().startDate, props.locale, props.data.updatedAt)}>
{(month) => <span style={{ left: `${month.x}%` }}>{month.label}</span>}
</For>
</div>
</div>
)
}
function modelUsageMetricValue(point: ModelUsagePoint, metric: "tokens" | "users") {
if (metric === "users") return point.users
return point.tokens
}
function formatModelUsageValue(point: ModelUsagePoint, metric: "tokens" | "users") {
if (metric === "users") return formatUsers(point.users)
return formatTokens(point.tokens)
}
function modelUsageLabel(metric: "tokens" | "users", i18n: ReturnType<typeof useI18n>) {
if (metric === "users") return i18n.t("format.users")
return i18n.t("format.tokens")
function MomentumMetric(props: { label: string; value: string; watermark?: string }) {
return (
<div data-component="model-momentum-metric">
<Show when={props.watermark}>{(watermark) => <em aria-hidden="true">{watermark()}</em>}</Show>
<span>{props.label}</span>
<strong>{props.value}</strong>
</div>
)
}
function ModelEfficiencySection(props: { data: StatsModelData | null; catalog: ModelCatalogEntry | null }) {
@@ -979,19 +916,111 @@ function formatGeoShare(value: number) {
return `${value.toFixed(value > 0 && value < 1 ? 1 : 0)}%`
}
function modelUsageHeight(tokens: number, max: number) {
if (tokens <= 0) return 0
return Math.max(2, Math.min(100, (tokens / max) * 100))
function momentumChart(data: ModelUsagePoint[], updatedAt: string | null) {
const fallbackDate = updatedAt ? formatMomentumDateLabel(updatedAt) : "JAN 1"
const points =
data.length > 1 ? data : [data[0] ?? emptyUsagePoint(fallbackDate), data[0] ?? emptyUsagePoint(fallbackDate)]
const max = Math.max(1, ...points.map((point) => point.tokens))
const split = Math.max(1, Math.floor((points.length - 1) / 2))
const coordinates = points.map((point, index) => ({
date: point.date,
tokens: point.tokens,
x: (index / Math.max(1, points.length - 1)) * 1200,
y: 364 - (point.tokens / max) * 364,
}))
const end = coordinates[coordinates.length - 1]
return {
startDate: coordinates[0].date,
endDate: end.date,
previousPath: smoothLinePath(coordinates.slice(0, split + 1)),
currentPath: smoothLinePath(coordinates.slice(split)),
markers: [
{ ...coordinates[0], active: false },
{ ...coordinates[split], active: true },
{ ...end, active: true },
],
endStyle: {
"--momentum-end-x": `${Math.min(94, Math.max(0, ((end.x + 8) / 1200) * 100))}%`,
"--momentum-end-y": `${Math.min(96, Math.max(0, ((end.y - 7) / 370) * 100))}%`,
} as JSX.CSSProperties,
}
}
function isModelUsageDense(count: number) {
return count > 20
function emptyUsagePoint(date: string): ModelUsagePoint {
return { date, tokens: 0, users: 0, sessions: 0, cost: 0 }
}
function isModelUsageLabelHidden(index: number, count: number) {
if (count <= 16) return false
const interval = Math.ceil(count / 8)
return index !== count - 1 && index % interval !== 0
function smoothLinePath(points: { x: number; y: number }[]) {
if (points.length === 0) return ""
if (points.length === 1) return `M${formatSparklinePoint(points[0].x)} ${formatSparklinePoint(points[0].y)}`
return points
.map((point, index) => {
if (index === 0) return `M${formatSparklinePoint(point.x)} ${formatSparklinePoint(point.y)}`
const previous = points[index - 1]
const next = points[index + 1] ?? point
const beforePrevious = points[index - 2] ?? previous
const controlStart = {
x: previous.x + (point.x - beforePrevious.x) / 6,
y: previous.y + (point.y - beforePrevious.y) / 6,
}
const controlEnd = {
x: point.x - (next.x - previous.x) / 6,
y: point.y - (next.y - previous.y) / 6,
}
return `C${formatSparklinePoint(controlStart.x)} ${formatSparklinePoint(controlStart.y)} ${formatSparklinePoint(controlEnd.x)} ${formatSparklinePoint(controlEnd.y)} ${formatSparklinePoint(point.x)} ${formatSparklinePoint(point.y)}`
})
.join(" ")
}
function momentumMonthLabels(startDate: string, locale: string, updatedAt: string | null) {
const start = parseMomentumDate(startDate, updatedAt)
const first = new Date(Date.UTC(start.getUTCFullYear(), start.getUTCMonth() - 1, 1))
return Array.from({ length: 5 }, (_, index) => {
const date = new Date(Date.UTC(first.getUTCFullYear(), first.getUTCMonth() + index, 1))
return {
label: new Intl.DateTimeFormat(locale, { month: "short", timeZone: "UTC" }).format(date).toUpperCase(),
x: index === 4 ? 98 : index * 24.5,
}
})
}
function formatMomentumDate(date: string, locale: string, updatedAt: string | null) {
return new Intl.DateTimeFormat(locale, {
month: "short",
day: "numeric",
year: "numeric",
timeZone: "UTC",
})
.format(parseMomentumDate(date, updatedAt))
.toUpperCase()
}
function parseMomentumDate(date: string, updatedAt: string | null): Date {
const iso = /^(\d{4})-(\d{2})-(\d{2})/.exec(date)
if (iso) return new Date(Date.UTC(Number(iso[1]), Number(iso[2]) - 1, Number(iso[3])))
const label = /^([A-Za-z]{3})\s+(\d{1,2})$/.exec(date.trim())
const month = label ? shortMonths.findIndex((item) => item.toLowerCase() === label[1].toLowerCase()) : -1
if (!label || month < 0) return new Date(Date.UTC(1970, 0, 1))
const anchor = updatedAt ? parseMomentumDate(updatedAt, null) : new Date(Date.UTC(1970, 0, 1))
const year = month > anchor.getUTCMonth() + 1 ? anchor.getUTCFullYear() - 1 : anchor.getUTCFullYear()
return new Date(Date.UTC(year, month, Number(label[2])))
}
function formatMomentumDateLabel(date: string) {
const parsed = parseMomentumDate(date, null)
if (parsed.getUTCFullYear() === 1970) return "JAN 1"
return `${shortMonths[parsed.getUTCMonth()]} ${parsed.getUTCDate()}`
}
function formatRankLabel(rank: number | null) {
if (rank === null) return "--"
return `#${String(rank).padStart(2, "0")}`
}
function capitalizeLabel(value: string) {
return value.charAt(0).toUpperCase() + value.slice(1)
}
function formatRankMove(change: number) {
@@ -1050,6 +1079,28 @@ function formatTokens(value: number) {
return String(Math.round(value))
}
function formatCatalogLimit(value: number | undefined, unknown: string) {
return value === undefined ? unknown : formatTokens(value)
}
function formatCatalogMonth(value: string | undefined, locale: string, unknown: string) {
if (!value) return unknown
const match = /^(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?$/.exec(value)
if (!match) return value
return new Intl.DateTimeFormat(locale, {
month: match[2] ? "short" : undefined,
year: "numeric",
timeZone: "UTC",
}).format(new Date(Date.UTC(Number(match[1]), match[2] ? Number(match[2]) - 1 : 0, 1)))
}
function formatCatalogModalities(values: string[], locale: string, unknown: string) {
if (values.length === 0) return unknown
const labels = values.map((value) => value.replace(/[-_]/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase()))
if (labels.length === 1) return labels[0] ?? unknown
return new Intl.ListFormat(locale, { style: "long", type: "conjunction" }).format(labels)
}
function formatInteger(value: number) {
return new Intl.NumberFormat("en").format(value)
}
+458 -3
View File
@@ -2129,27 +2129,40 @@
}
[data-page="stats"] [data-component="market-share-list"] li {
min-width: 0;
}
[data-page="stats"] [data-component="market-share-list"] li > a,
[data-page="stats"] [data-component="market-share-list"] li > button {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
min-width: 0;
height: 28px;
box-sizing: border-box;
padding: 0 8px;
background: var(--stats-layer);
border: 1px solid var(--stats-line);
background: var(--stats-layer);
color: inherit;
font: inherit;
font-size: 11px;
line-height: 1;
cursor: pointer;
outline: none;
text-decoration: none;
transition:
border-color 120ms ease,
box-shadow 120ms ease,
background 120ms ease;
}
[data-page="stats"] [data-component="market-share-list"] li[data-active="true"],
[data-page="stats"] [data-component="market-share-list"] li:focus-visible {
[data-page="stats"] [data-component="market-share-list"] li > button {
appearance: none;
}
[data-page="stats"] [data-component="market-share-list"] li[data-active="true"] > :is(a, button),
[data-page="stats"] [data-component="market-share-list"] li > :is(a, button):focus-visible {
border-color: var(--stats-text);
background: var(--stats-layer);
box-shadow:
@@ -3335,6 +3348,320 @@
height: 24px;
}
[data-page="stats"] [data-section="model-specs"] {
position: relative;
box-sizing: border-box;
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
min-height: 144px;
color: var(--stats-text);
box-shadow:
inset 0 1px var(--stats-line),
inset 0 -1px var(--stats-line),
inset 1px 0 var(--stats-line),
inset -1px 0 var(--stats-line);
}
[data-page="stats"] [data-component="model-spec"] {
display: grid;
align-content: start;
gap: 8px;
min-width: 0;
min-height: 144px;
box-sizing: border-box;
padding: 40px;
border-left: 1px solid var(--stats-line);
}
[data-page="stats"] [data-component="model-spec"]:first-child {
border-left: 0;
}
[data-page="stats"] [data-component="model-spec"] span {
color: var(--stats-muted);
font-size: 13px;
font-weight: 500;
line-height: 1.1;
}
[data-page="stats"] [data-component="model-spec"] strong {
min-width: 0;
overflow: hidden;
color: var(--stats-text);
font-size: 28px;
font-weight: 500;
line-height: 1.5;
letter-spacing: 0;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-page="stats"] [data-section="model-momentum"] {
position: relative;
box-sizing: border-box;
display: grid;
gap: 40px;
min-height: 938px;
padding: 80px 40px;
color: var(--stats-text);
box-shadow:
inset 1px 0 var(--stats-line),
inset -1px 0 var(--stats-line);
}
[data-page="stats"] [data-slot="model-momentum-title"] {
min-width: 0;
height: 42px;
margin: 0;
overflow: hidden;
color: var(--stats-muted);
font-size: 28px;
font-weight: 400;
line-height: 42px;
letter-spacing: 0;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-page="stats"] [data-slot="model-momentum-title"] a {
color: var(--stats-text);
font-weight: 700;
text-decoration: none;
}
[data-page="stats"] [data-slot="model-momentum-title"] a:hover,
[data-page="stats"] [data-slot="model-momentum-title"] a:focus-visible {
color: var(--stats-text);
outline: none;
text-decoration: none;
}
[data-page="stats"] [data-slot="model-momentum-title"] span {
margin-left: 12px;
}
[data-page="stats"] [data-slot="model-momentum-pattern"] {
width: 100%;
height: 16px;
overflow: hidden;
background: var(--stats-line);
mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E");
mask-position: center top;
mask-repeat: repeat;
mask-size: 6px 6px;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0H2V2H0V0Z' fill='black'/%3E%3C/svg%3E");
-webkit-mask-position: center top;
-webkit-mask-repeat: repeat;
-webkit-mask-size: 6px 6px;
}
[data-page="stats"] [data-component="model-momentum-chart"] {
position: relative;
display: grid;
grid-template-rows: 64px 370px 14px;
gap: 16px;
height: 480px;
min-width: 0;
}
[data-page="stats"] [data-slot="model-momentum-summary"] {
display: grid;
align-content: start;
gap: 8px;
width: fit-content;
min-width: 0;
}
[data-page="stats"] [data-slot="model-momentum-total"] {
display: flex;
align-items: center;
gap: 16px;
min-width: 0;
height: 42px;
}
[data-page="stats"] [data-slot="model-momentum-total"] strong {
min-width: 0;
overflow: hidden;
color: var(--stats-text);
font-size: 28px;
font-weight: 700;
line-height: 42px;
letter-spacing: 0;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-page="stats"] [data-slot="model-momentum-total"] span,
[data-page="stats"] [data-slot="model-momentum-end"] {
display: inline-flex;
align-items: center;
justify-content: center;
height: 24px;
box-sizing: border-box;
padding: 0 8px;
background: #198b4324;
color: #198b43;
font-size: 13px;
font-weight: 700;
line-height: 14px;
white-space: nowrap;
}
[data-page="stats"] [data-slot="model-momentum-total"] span[data-state="negative"],
[data-page="stats"] [data-slot="model-momentum-end"][data-state="negative"] {
background: #b82d3524;
color: #b82d35;
}
[data-page="stats"] [data-slot="model-momentum-summary"] p {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
margin: 0;
color: var(--stats-muted);
font-size: 13px;
font-weight: 500;
line-height: 14px;
white-space: nowrap;
}
[data-page="stats"] [data-slot="model-momentum-plot"] {
position: relative;
min-width: 0;
height: 370px;
}
[data-page="stats"] [data-slot="model-momentum-plot"] svg {
display: block;
width: 100%;
height: 100%;
overflow: visible;
}
[data-page="stats"] [data-slot="model-momentum-line-muted"],
[data-page="stats"] [data-slot="model-momentum-line-active"] {
fill: none;
stroke-width: 1.5;
vector-effect: non-scaling-stroke;
}
[data-page="stats"] [data-slot="model-momentum-line-muted"] {
stroke: var(--stats-bar-idle);
}
[data-page="stats"] [data-slot="model-momentum-line-active"] {
stroke: #198b43;
}
[data-page="stats"] [data-slot="model-momentum-marker"] {
fill: var(--stats-bar-idle);
}
[data-page="stats"] [data-slot="model-momentum-marker"][data-active="true"] {
fill: #198b43;
}
[data-page="stats"] [data-slot="model-momentum-end"] {
position: absolute;
top: var(--momentum-end-y);
left: var(--momentum-end-x);
gap: 8px;
height: 14px;
padding: 0;
background: transparent;
transform: translateY(-50%);
}
[data-page="stats"] [data-slot="model-momentum-end"] i {
display: block;
width: 6px;
height: 6px;
background: currentColor;
}
[data-page="stats"] [data-slot="model-momentum-months"] {
position: relative;
height: 14px;
color: var(--stats-muted);
font-size: 13px;
font-weight: 500;
line-height: 14px;
}
[data-page="stats"] [data-slot="model-momentum-months"] span {
position: absolute;
top: 0;
transform: translateX(-50%);
}
[data-page="stats"] [data-slot="model-momentum-months"] span:first-child {
transform: none;
}
[data-page="stats"] [data-slot="model-momentum-months"] span:last-child {
transform: translateX(-100%);
}
[data-page="stats"] [data-slot="model-momentum-metrics"] {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
min-width: 0;
}
[data-page="stats"] [data-component="model-momentum-metric"] {
position: relative;
display: grid;
align-content: space-between;
min-width: 0;
min-height: 120px;
box-sizing: border-box;
padding: 16px;
overflow: hidden;
border: 1px solid var(--stats-line);
background:
linear-gradient(180deg, color-mix(in srgb, var(--stats-bg) 76%, transparent), transparent), var(--stats-layer);
}
[data-page="stats"] [data-component="model-momentum-metric"] span {
position: relative;
z-index: 1;
color: var(--stats-muted);
font-size: 13px;
font-weight: 500;
line-height: 14px;
}
[data-page="stats"] [data-component="model-momentum-metric"] strong {
position: relative;
z-index: 1;
min-width: 0;
overflow: hidden;
color: var(--stats-text);
font-size: 28px;
font-weight: 500;
line-height: 42px;
letter-spacing: 0;
text-overflow: ellipsis;
white-space: nowrap;
}
[data-page="stats"] [data-component="model-momentum-metric"] em {
position: absolute;
top: -90px;
left: -69px;
color: var(--stats-text);
font-size: 200px;
font-style: normal;
font-weight: 700;
line-height: 300px;
opacity: 0.04;
pointer-events: none;
white-space: nowrap;
}
[data-page="stats"] [data-section="lab-overview"] {
position: relative;
box-sizing: border-box;
@@ -4966,6 +5293,7 @@
[data-page="stats"] [data-section="session-cost"],
[data-page="stats"] [data-section="model-hero"],
[data-page="stats"] [data-section="lab-hero"],
[data-page="stats"] [data-section="model-momentum"],
[data-page="stats"] [data-section="model-panel"] {
padding: 64px 32px;
}
@@ -5056,6 +5384,48 @@
min-height: 0;
}
[data-page="stats"] [data-section="model-specs"] {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
[data-page="stats"] [data-component="model-spec"] {
min-height: 132px;
padding: 32px;
}
[data-page="stats"] [data-component="model-spec"]:nth-child(3n + 1) {
border-left: 0;
}
[data-page="stats"] [data-component="model-spec"]:nth-child(n + 4) {
border-top: 1px solid var(--stats-line);
}
[data-page="stats"] [data-section="model-momentum"] {
min-height: auto;
}
[data-page="stats"] [data-slot="model-momentum-title"] {
height: auto;
overflow: visible;
line-height: 1.5;
text-overflow: clip;
white-space: normal;
}
[data-page="stats"] [data-component="model-momentum-chart"] {
grid-template-rows: auto 320px 14px;
height: 434px;
}
[data-page="stats"] [data-slot="model-momentum-plot"] {
height: 320px;
}
[data-page="stats"] [data-slot="model-momentum-metrics"] {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
[data-page="stats"] [data-component="model-metric-grid"],
[data-page="stats"] [data-component="model-metric-grid"][data-variant="dense"],
[data-page="stats"] [data-component="lab-model-grid"] {
@@ -5184,6 +5554,7 @@
[data-page="stats"] [data-section="session-cost"],
[data-page="stats"] [data-section="model-hero"],
[data-page="stats"] [data-section="lab-hero"],
[data-page="stats"] [data-section="model-momentum"],
[data-page="stats"] [data-section="model-panel"] {
padding: 48px 24px;
}
@@ -5351,6 +5722,90 @@
line-height: 22px;
}
[data-page="stats"] [data-section="model-specs"] {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
[data-page="stats"] [data-component="model-spec"] {
min-height: 116px;
padding: 24px;
}
[data-page="stats"] [data-component="model-spec"]:nth-child(n) {
border-left: 1px solid var(--stats-line);
border-top: 0;
}
[data-page="stats"] [data-component="model-spec"]:nth-child(2n + 1) {
border-left: 0;
}
[data-page="stats"] [data-component="model-spec"]:nth-child(n + 3) {
border-top: 1px solid var(--stats-line);
}
[data-page="stats"] [data-component="model-spec"]:last-child:nth-child(odd) {
grid-column: 1 / -1;
}
[data-page="stats"] [data-component="model-spec"] strong {
font-size: 24px;
line-height: 1.35;
}
[data-page="stats"] [data-section="model-momentum"] {
gap: 28px;
}
[data-page="stats"] [data-slot="model-momentum-title"] {
font-size: 20px;
line-height: 30px;
}
[data-page="stats"] [data-slot="model-momentum-title"] span {
margin-left: 8px;
}
[data-page="stats"] [data-component="model-momentum-chart"] {
grid-template-rows: auto 260px 14px;
gap: 14px;
height: 380px;
}
[data-page="stats"] [data-slot="model-momentum-total"] {
align-items: flex-start;
flex-direction: column;
gap: 6px;
height: auto;
}
[data-page="stats"] [data-slot="model-momentum-total"] strong {
font-size: 24px;
line-height: 32px;
}
[data-page="stats"] [data-slot="model-momentum-summary"] p {
flex-wrap: wrap;
white-space: normal;
}
[data-page="stats"] [data-slot="model-momentum-plot"] {
height: 260px;
}
[data-page="stats"] [data-slot="model-momentum-end"] {
display: none;
}
[data-page="stats"] [data-component="model-momentum-metric"] {
min-height: 112px;
}
[data-page="stats"] [data-component="model-momentum-metric"] strong {
font-size: clamp(20px, 5.5vw, 24px);
line-height: 34px;
}
[data-page="stats"] [data-slot="model-catalog-grid"] {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
+47 -21
View File
@@ -1262,30 +1262,56 @@ function MarketShareList(props: {
onActiveAuthorChange: (author: string) => void
}) {
const i18n = useI18n()
const language = useLanguage()
return (
<ol data-component="market-share-list">
<For each={props.data}>
{(item, index) => (
<li
role="button"
tabIndex={0}
aria-label={`${item.author} ${formatTrillions(item.tokens)} ${item.share.toFixed(1)} ${i18n.t("chart.percent")}`}
data-active={props.activeAuthor === item.author ? "true" : undefined}
onPointerEnter={() => props.onActiveAuthorChange(item.author)}
onFocus={() => props.onActiveAuthorChange(item.author)}
onKeyDown={(event) => {
if (event.key !== "Enter" && event.key !== " ") return
event.preventDefault()
props.onActiveAuthorChange(item.author)
}}
>
<span>{String(index() + 1).padStart(2, "0")}</span>
<i style={{ background: getRankColor(item.author, index(), props.authorOrder, marketColors) }} />
<strong>{item.author}</strong>
<em>{formatTrillions(item.tokens)}</em>
<b>{item.share.toFixed(1)}%</b>
</li>
)}
{(item, index) => {
const label = () =>
`${item.author} ${formatTrillions(item.tokens)} ${item.share.toFixed(1)} ${i18n.t("chart.percent")}`
const content = () => (
<>
<span>{String(index() + 1).padStart(2, "0")}</span>
<i style={{ background: getRankColor(item.author, index(), props.authorOrder, marketColors) }} />
<strong>{item.author}</strong>
<em>{formatTrillions(item.tokens)}</em>
<b>{item.share.toFixed(1)}%</b>
</>
)
const href = () =>
item.author === "Other" ? undefined : language.route(`${import.meta.env.BASE_URL}${modelSlug(item.author)}`)
return (
<li
data-active={props.activeAuthor === item.author ? "true" : undefined}
onPointerEnter={() => props.onActiveAuthorChange(item.author)}
>
<Show
when={href()}
fallback={
<button
type="button"
aria-label={label()}
onClick={() => props.onActiveAuthorChange(item.author)}
onFocus={() => props.onActiveAuthorChange(item.author)}
>
{content()}
</button>
}
>
{(href) => (
<a
href={href()}
aria-label={label()}
onClick={() => props.onActiveAuthorChange(item.author)}
onFocus={() => props.onActiveAuthorChange(item.author)}
>
{content()}
</a>
)}
</Show>
</li>
)
}}
</For>
</ol>
)
+70
View File
@@ -1758,6 +1758,9 @@ function ToolPart(props: { last: boolean; part: ToolPart; message: AssistantMess
<Match when={display() === "task"}>
<Task {...toolprops} />
</Match>
<Match when={display() === "execute"}>
<Execute {...toolprops} />
</Match>
<Match when={display() === "apply_patch"}>
<ApplyPatch {...toolprops} />
</Match>
@@ -2322,6 +2325,72 @@ export function formatCompletedSubagentDetail(toolcalls: number, duration: strin
return `${formatSubagentToolcalls(toolcalls)} · ${duration}`
}
type ExecuteCall = { tool: string; status: "running" | "completed" | "error"; input?: Record<string, unknown> }
function executeCalls(value: unknown): ExecuteCall[] {
if (!Array.isArray(value)) return []
return value.flatMap((call) => {
const item = recordValue(call)
const tool = stringValue(item?.tool)
const status = stringValue(item?.status)
if (!tool || !status || !["running", "completed", "error"].includes(status)) return []
return [{ tool, status: status as ExecuteCall["status"], input: recordValue(item?.input) }]
})
}
// The `execute` tool streams child tool calls through metadata, not a child session like Task.
function Execute(props: ToolProps) {
const ctx = use()
const { theme } = useTheme()
const isLoading = createMemo(() => props.part.state.status === "pending" || props.part.state.status === "running")
const calls = createMemo(() => executeCalls(props.metadata.toolCalls))
const output = createMemo(() => stripAnsi(props.output?.trim() ?? ""))
const hasRuntimeError = createMemo(() => props.metadata.error === true)
const outputPreview = createMemo(() => collapseToolOutput(output(), 4, 4 * Math.max(20, ctx.width - 6)).output)
const showOutput = createMemo(() => output() && hasRuntimeError())
return (
<>
<InlineTool
icon={hasRuntimeError() ? "✗" : props.part.state.status === "completed" ? "✓" : "│"}
color={hasRuntimeError() ? theme.error : undefined}
spinner={isLoading()}
pending="execute"
complete={true}
part={props.part}
>
execute
</InlineTool>
<For each={calls()}>
{(call) => {
const args = input(call.input ?? {})
return (
<box paddingLeft={3}>
<text paddingLeft={3} fg={call.status === "error" ? theme.error : theme.textMuted}>
{call.tool}
{args ? ` ${args}` : ""}
{call.status === "error" ? " (failed)" : ""}
</text>
</box>
)
}}
</For>
<Show when={showOutput()}>
<box paddingLeft={3}>
<For each={outputPreview().split("\n")}>
{(line, index) => (
<text paddingLeft={3} fg={theme.error}>
{index() === 0 ? "↳ " : " "}
{line}
</text>
)}
</For>
</box>
</Show>
</>
)
}
function Edit(props: ToolProps) {
const ctx = use()
const { theme, syntax } = useTheme()
@@ -2578,6 +2647,7 @@ const toolDisplays = new Set([
"todowrite",
"question",
"skill",
"execute",
])
export function toolDisplay(tool: string) {