Add Tome docs package
This commit is contained in:
parent
94046e6216
commit
b549004678
37 changed files with 2039 additions and 823 deletions
25
README.md
25
README.md
|
|
@ -6,8 +6,11 @@ The current source is:
|
|||
|
||||
- `apps/web`: React/Vite UI that connects directly to a Codex app-server WebSocket.
|
||||
- `apps/cli`: Bun CLI that sends JSON-RPC actions to a listening Codex app-server.
|
||||
- `apps/discord-bridge`: Discord sidecar that connects Discord threads to
|
||||
Codex app-server threads and gateway delegation.
|
||||
- `apps/flow-runner`: CLI for discovering and firing packaged flows.
|
||||
- `apps/flow-backend-systemd-local`: local HTTP backend for executing flows from dispatch events.
|
||||
- `docs`: Tome documentation site for codex-flow.
|
||||
- `packages/codex-client`: JSON-RPC client, app-server transports, flow helpers, and generated protocol types.
|
||||
- `packages/flow-runtime`: flow manifest loading, event matching, and runner primitives.
|
||||
- `packages/ui`: small shared UI primitives and styling.
|
||||
|
|
@ -67,9 +70,9 @@ Discord bridge tests.
|
|||
## Flow Automation
|
||||
|
||||
Flow packages live under `flows/*` and installed copies can live under
|
||||
`.codex/flows/*`. See [docs/flows.md](docs/flows.md) for `flow.toml`, generic
|
||||
`FlowEvent` dispatch, Bun and Code Mode runners, the systemd-local backend, and
|
||||
the Codex release flows.
|
||||
`.codex/flows/*`. The publishable Tome docs live in [docs](docs) and cover
|
||||
`flow.toml`, generic `FlowEvent` dispatch, Bun and Code Mode runners, local
|
||||
clients, systemd-local, and Convex backends.
|
||||
|
||||
```bash
|
||||
bun run flow list
|
||||
|
|
@ -97,7 +100,21 @@ should happen on the next real upstream release.
|
|||
|
||||
Development happens on jojo at `jojo.build`. Codeberg is configured as a push mirror, and GitHub is kept for npm trusted publishing only.
|
||||
|
||||
See [docs/development-flow.md](docs/development-flow.md) for remotes, key setup, jojo CLI setup, mirroring, and the release procedure.
|
||||
See [DEVELOP.md](DEVELOP.md) for remotes, key setup, jojo CLI setup, mirroring, and the release procedure.
|
||||
|
||||
## Documentation
|
||||
|
||||
The codex-flow documentation site is a Tome project in `docs/`:
|
||||
|
||||
```bash
|
||||
bun run docs:dev
|
||||
bun run docs:build
|
||||
```
|
||||
|
||||
The source pages are organized with the Diataxis framework under
|
||||
`docs/pages/tutorials`, `docs/pages/guides`, `docs/pages/reference`, and
|
||||
`docs/pages/concepts`. `bun run docs:build` writes the static site and
|
||||
machine-readable files to `docs/out`.
|
||||
|
||||
## Publishing
|
||||
|
||||
|
|
|
|||
538
bun.lock
538
bun.lock
|
|
@ -87,6 +87,16 @@
|
|||
"vite": "catalog:",
|
||||
},
|
||||
},
|
||||
"docs": {
|
||||
"name": "@peezy.tech/codex-flow-docs",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"@tomehq/cli": "^0.8.1",
|
||||
"@tomehq/theme": "^0.8.1",
|
||||
"react": "catalog:",
|
||||
"react-dom": "catalog:",
|
||||
},
|
||||
},
|
||||
"packages/codex-client": {
|
||||
"name": "@peezy.tech/codex-flows",
|
||||
"version": "0.3.1",
|
||||
|
|
@ -172,6 +182,22 @@
|
|||
"vite": "^7.3.2",
|
||||
},
|
||||
"packages": {
|
||||
"@apidevtools/json-schema-ref-parser": ["@apidevtools/json-schema-ref-parser@14.0.1", "", { "dependencies": { "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" } }, "sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw=="],
|
||||
|
||||
"@apidevtools/openapi-schemas": ["@apidevtools/openapi-schemas@2.1.0", "", {}, "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ=="],
|
||||
|
||||
"@apidevtools/swagger-methods": ["@apidevtools/swagger-methods@3.0.2", "", {}, "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="],
|
||||
|
||||
"@apidevtools/swagger-parser": ["@apidevtools/swagger-parser@12.1.0", "", { "dependencies": { "@apidevtools/json-schema-ref-parser": "14.0.1", "@apidevtools/openapi-schemas": "^2.1.0", "@apidevtools/swagger-methods": "^3.0.2", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "call-me-maybe": "^1.0.2" }, "peerDependencies": { "openapi-types": ">=7" } }, "sha512-e5mJoswsnAX0jG+J09xHFYQXb/bUc5S3pLpMxUuRUA2H8T2kni3yEoyz2R3Dltw5f4A6j6rPNMpWTK+iVDFlng=="],
|
||||
|
||||
"@asamuzakjp/css-color": ["@asamuzakjp/css-color@5.1.11", "", { "dependencies": { "@asamuzakjp/generational-cache": "^1.0.1", "@csstools/css-calc": "^3.2.0", "@csstools/css-color-parser": "^4.1.0", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg=="],
|
||||
|
||||
"@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@7.1.1", "", { "dependencies": { "@asamuzakjp/generational-cache": "^1.0.1", "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1" } }, "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ=="],
|
||||
|
||||
"@asamuzakjp/generational-cache": ["@asamuzakjp/generational-cache@1.0.1", "", {}, "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg=="],
|
||||
|
||||
"@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="],
|
||||
|
||||
"@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="],
|
||||
|
||||
"@babel/compat-data": ["@babel/compat-data@7.29.3", "", {}, "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg=="],
|
||||
|
|
@ -238,6 +264,20 @@
|
|||
|
||||
"@base-ui/utils": ["@base-ui/utils@0.2.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ=="],
|
||||
|
||||
"@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="],
|
||||
|
||||
"@csstools/color-helpers": ["@csstools/color-helpers@6.0.2", "", {}, "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q=="],
|
||||
|
||||
"@csstools/css-calc": ["@csstools/css-calc@3.2.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg=="],
|
||||
|
||||
"@csstools/css-color-parser": ["@csstools/css-color-parser@4.1.1", "", { "dependencies": { "@csstools/color-helpers": "^6.0.2", "@csstools/css-calc": "^3.2.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g=="],
|
||||
|
||||
"@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@4.0.0", "", { "peerDependencies": { "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w=="],
|
||||
|
||||
"@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.1.4", "", { "peerDependencies": { "css-tree": "^3.2.1" }, "optionalPeers": ["css-tree"] }, "sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw=="],
|
||||
|
||||
"@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="],
|
||||
|
||||
"@discordjs/builders": ["@discordjs/builders@1.14.1", "", { "dependencies": { "@discordjs/formatters": "^0.6.2", "@discordjs/util": "^1.2.0", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.40", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" } }, "sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ=="],
|
||||
|
||||
"@discordjs/collection": ["@discordjs/collection@1.5.3", "", {}, "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="],
|
||||
|
|
@ -254,6 +294,12 @@
|
|||
|
||||
"@ecies/ciphers": ["@ecies/ciphers@0.2.6", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g=="],
|
||||
|
||||
"@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
|
||||
|
||||
"@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
|
||||
|
||||
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
|
||||
|
||||
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A=="],
|
||||
|
||||
"@esbuild/android-arm": ["@esbuild/android-arm@0.27.0", "", { "os": "android", "cpu": "arm" }, "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ=="],
|
||||
|
|
@ -306,6 +352,8 @@
|
|||
|
||||
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.0", "", { "os": "win32", "cpu": "x64" }, "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg=="],
|
||||
|
||||
"@exodus/bytes": ["@exodus/bytes@1.15.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ=="],
|
||||
|
||||
"@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="],
|
||||
|
||||
"@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="],
|
||||
|
|
@ -336,10 +384,16 @@
|
|||
|
||||
"@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=="],
|
||||
|
||||
"@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="],
|
||||
|
||||
"@mdx-js/rollup": ["@mdx-js/rollup@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", "source-map": "^0.7.0", "vfile": "^6.0.0" }, "peerDependencies": { "rollup": ">=2" } }, "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw=="],
|
||||
|
||||
"@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="],
|
||||
|
||||
"@mswjs/interceptors": ["@mswjs/interceptors@0.41.8", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-pRLMNKTSGRoLq+KnEB/7OY5vijw1XmcheAAOiv6pj7W1FG32kAGqj1C/RK/cqxRGr1Fh+zBi8sDur8kj3EQv6A=="],
|
||||
|
||||
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
|
||||
|
||||
"@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="],
|
||||
|
||||
"@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
|
||||
|
|
@ -358,6 +412,10 @@
|
|||
|
||||
"@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="],
|
||||
|
||||
"@oxc-project/types": ["@oxc-project/types@0.130.0", "", {}, "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q=="],
|
||||
|
||||
"@peezy.tech/codex-flow-docs": ["@peezy.tech/codex-flow-docs@workspace:docs"],
|
||||
|
||||
"@peezy.tech/codex-flows": ["@peezy.tech/codex-flows@workspace:packages/codex-client"],
|
||||
|
||||
"@peezy.tech/codex-opencode-go-router": ["@peezy.tech/codex-opencode-go-router@workspace:packages/codex-opencode-go-router"],
|
||||
|
|
@ -366,8 +424,40 @@
|
|||
|
||||
"@peezy.tech/flow-runtime": ["@peezy.tech/flow-runtime@workspace:packages/flow-runtime"],
|
||||
|
||||
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg=="],
|
||||
|
||||
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg=="],
|
||||
|
||||
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg=="],
|
||||
|
||||
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw=="],
|
||||
|
||||
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ=="],
|
||||
|
||||
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A=="],
|
||||
|
||||
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg=="],
|
||||
|
||||
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg=="],
|
||||
|
||||
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ=="],
|
||||
|
||||
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw=="],
|
||||
|
||||
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ=="],
|
||||
|
||||
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.1", "", { "os": "none", "cpu": "arm64" }, "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ=="],
|
||||
|
||||
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.1", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ=="],
|
||||
|
||||
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw=="],
|
||||
|
||||
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ=="],
|
||||
|
||||
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.3", "", {}, "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q=="],
|
||||
|
||||
"@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="],
|
||||
|
||||
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.3", "", { "os": "android", "cpu": "arm" }, "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw=="],
|
||||
|
||||
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.3", "", { "os": "android", "cpu": "arm64" }, "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw=="],
|
||||
|
|
@ -426,6 +516,24 @@
|
|||
|
||||
"@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="],
|
||||
|
||||
"@shikijs/core": ["@shikijs/core@4.0.2", "", { "dependencies": { "@shikijs/primitive": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw=="],
|
||||
|
||||
"@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag=="],
|
||||
|
||||
"@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg=="],
|
||||
|
||||
"@shikijs/langs": ["@shikijs/langs@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg=="],
|
||||
|
||||
"@shikijs/primitive": ["@shikijs/primitive@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw=="],
|
||||
|
||||
"@shikijs/themes": ["@shikijs/themes@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA=="],
|
||||
|
||||
"@shikijs/twoslash": ["@shikijs/twoslash@4.0.2", "", { "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/types": "4.0.2", "twoslash": "^0.3.6" }, "peerDependencies": { "typescript": ">=5.5.0" } }, "sha512-yHRudhirlMxOwDO6Q4OFU9hJMvUqNkY8hwtUfbaSEoG7A2cYicdO4c8fdDaDtyJ50HK7I8vTokrkIHTK3DCkLQ=="],
|
||||
|
||||
"@shikijs/types": ["@shikijs/types@4.0.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg=="],
|
||||
|
||||
"@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
|
||||
|
||||
"@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="],
|
||||
|
||||
"@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="],
|
||||
|
|
@ -458,8 +566,18 @@
|
|||
|
||||
"@tailwindcss/vite": ["@tailwindcss/vite@4.2.4", "", { "dependencies": { "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "tailwindcss": "4.2.4" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw=="],
|
||||
|
||||
"@tomehq/cli": ["@tomehq/cli@0.8.1", "", { "dependencies": { "@tomehq/core": "0.8.1", "@vitejs/plugin-react": "^6.0.0", "commander": "^14.0.0", "picocolors": "^1.1.0", "react": "^19.0.0", "react-dom": "^19.0.0", "vite": "^8.0.8" }, "bin": { "tome": "dist/cli.js" } }, "sha512-2tcM60GPaF3JIRaBpAWeA1QbStnVwGajoAT5PScBrWdIei9vY7xrbMt3MoHBBrDWB7eLl4Zfvc0sCyfozyhhHA=="],
|
||||
|
||||
"@tomehq/components": ["@tomehq/components@0.8.1", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-5TElB/7K0uaZkqS438wzPKrpm+wz93bAb8B7xOe0b4YnScqRpewB3GTE9BMp3M0z3brVhpoN0p1oq7ShTwDBEA=="],
|
||||
|
||||
"@tomehq/core": ["@tomehq/core@0.8.1", "", { "dependencies": { "@apidevtools/swagger-parser": "^12.0.0", "@mdx-js/rollup": "^3.0.0", "@modelcontextprotocol/sdk": "^1.28.0", "@shikijs/twoslash": "^4.0.0", "estree-util-visit": "^2.0.0", "glob": "^13.0.0", "gray-matter": "^4.0.3", "hast-util-to-html": "^9.0.0", "isomorphic-dompurify": "^3.12.0", "openapi-types": "^12.1.3", "rehype-autolink-headings": "^7.1.0", "rehype-raw": "^7.0.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.0", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "shiki": "^4.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.1.0", "yaml": "^2.8.3", "zod": "^4.0.0" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-twxusdG9xwI+sRa//UI1RvEdEqQhvlE7UBRHazhNmOwUVjYeZzbs383Isjyh62IB0kcULxQcjyrkRptWhxGWWA=="],
|
||||
|
||||
"@tomehq/theme": ["@tomehq/theme@0.8.1", "", { "dependencies": { "@tomehq/components": "0.8.1", "@tomehq/core": "0.8.1" }, "peerDependencies": { "@docsearch/css": "^3.0.0", "@docsearch/react": "^3.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@docsearch/css", "@docsearch/react"] }, "sha512-4BXSbYh5dda0W9inMCR/iHU/JdaQDh42d+TUCbXz4mJqeyufcdXEd54L368HvEaTI1D7n81ZnGGOu8O9z/2siw=="],
|
||||
|
||||
"@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="],
|
||||
|
||||
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="],
|
||||
|
||||
"@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
|
||||
|
||||
"@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="],
|
||||
|
|
@ -470,8 +588,22 @@
|
|||
|
||||
"@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="],
|
||||
|
||||
"@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="],
|
||||
|
||||
"@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
|
||||
|
||||
"@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="],
|
||||
|
||||
"@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
|
||||
|
||||
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
|
||||
|
||||
"@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
|
||||
|
||||
"@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="],
|
||||
|
||||
"@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
|
||||
|
||||
"@types/node": ["@types/node@22.19.17", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q=="],
|
||||
|
||||
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
|
||||
|
|
@ -482,10 +614,18 @@
|
|||
|
||||
"@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="],
|
||||
|
||||
"@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
|
||||
|
||||
"@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
|
||||
|
||||
"@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="],
|
||||
|
||||
"@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
|
||||
|
||||
"@typescript/vfs": ["@typescript/vfs@1.6.4", "", { "dependencies": { "debug": "^4.4.3" }, "peerDependencies": { "typescript": "*" } }, "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ=="],
|
||||
|
||||
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="],
|
||||
|
||||
"@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="],
|
||||
|
||||
"@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.7", "", {}, "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g=="],
|
||||
|
|
@ -494,10 +634,16 @@
|
|||
|
||||
"accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
|
||||
|
||||
"acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="],
|
||||
|
||||
"acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
|
||||
|
||||
"agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
|
||||
|
||||
"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-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="],
|
||||
|
||||
"ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="],
|
||||
|
||||
"ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
|
||||
|
|
@ -508,10 +654,16 @@
|
|||
|
||||
"ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="],
|
||||
|
||||
"astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="],
|
||||
|
||||
"bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="],
|
||||
|
||||
"balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
|
||||
|
||||
"baseline-browser-mapping": ["baseline-browser-mapping@2.10.27", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA=="],
|
||||
|
||||
"bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="],
|
||||
|
||||
"body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
|
||||
|
||||
"brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="],
|
||||
|
|
@ -530,12 +682,24 @@
|
|||
|
||||
"call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="],
|
||||
|
||||
"call-me-maybe": ["call-me-maybe@1.0.2", "", {}, "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="],
|
||||
|
||||
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
|
||||
|
||||
"caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="],
|
||||
|
||||
"ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
|
||||
|
||||
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
||||
|
||||
"character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="],
|
||||
|
||||
"character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
|
||||
|
||||
"character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
|
||||
|
||||
"character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="],
|
||||
|
||||
"class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
|
||||
|
||||
"cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
|
||||
|
|
@ -558,10 +722,14 @@
|
|||
|
||||
"codex-flow-systemd-local": ["codex-flow-systemd-local@workspace:apps/flow-backend-systemd-local"],
|
||||
|
||||
"collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="],
|
||||
|
||||
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||
|
||||
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
||||
|
||||
"comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
|
||||
|
||||
"commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
|
||||
|
||||
"content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="],
|
||||
|
|
@ -582,14 +750,22 @@
|
|||
|
||||
"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-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
|
||||
|
||||
"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=="],
|
||||
|
||||
"data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
|
||||
|
||||
"data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="],
|
||||
|
||||
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
|
||||
|
||||
"decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="],
|
||||
|
||||
"decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="],
|
||||
|
||||
"dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="],
|
||||
|
||||
"deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
|
||||
|
|
@ -602,14 +778,20 @@
|
|||
|
||||
"depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="],
|
||||
|
||||
"dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
|
||||
|
||||
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
|
||||
|
||||
"devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="],
|
||||
|
||||
"diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="],
|
||||
|
||||
"discord-api-types": ["discord-api-types@0.38.47", "", {}, "sha512-XgXQodHQBAE6kfD7kMvVo30863iHX1LHSqNq6MGUTDwIFCCvHva13+rwxyxVXDqudyApMNAd32PGjgVETi5rjA=="],
|
||||
|
||||
"discord.js": ["discord.js@14.26.4", "", { "dependencies": { "@discordjs/builders": "^1.14.1", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.2", "@discordjs/rest": "^2.6.1", "@discordjs/util": "^1.2.0", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.40", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "6.24.1" } }, "sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA=="],
|
||||
|
||||
"dompurify": ["dompurify@3.4.3", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-VVwJidIJcp1hpg2OMXML3ZVRPYSZiq4aX7qBh83BSIpOaRDqI+qxhXjjIWnpzkOXhmp0L81lnoME1mnCc9H48A=="],
|
||||
|
||||
"dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="],
|
||||
|
||||
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
|
||||
|
|
@ -626,6 +808,8 @@
|
|||
|
||||
"enhanced-resolve": ["enhanced-resolve@5.21.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-8p7DUVq6XJnZEz9W4oSwiwycxBIjHjRzYb3Je3zVN+geKTRQKzAkR/K4PBExlS0090d9nshak6phMUxr3PDjmQ=="],
|
||||
|
||||
"entities": ["entities@8.0.0", "", {}, "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA=="],
|
||||
|
||||
"env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
|
||||
|
||||
"error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="],
|
||||
|
|
@ -636,14 +820,34 @@
|
|||
|
||||
"es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
|
||||
|
||||
"esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="],
|
||||
|
||||
"esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="],
|
||||
|
||||
"esbuild": ["esbuild@0.27.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.0", "@esbuild/android-arm": "0.27.0", "@esbuild/android-arm64": "0.27.0", "@esbuild/android-x64": "0.27.0", "@esbuild/darwin-arm64": "0.27.0", "@esbuild/darwin-x64": "0.27.0", "@esbuild/freebsd-arm64": "0.27.0", "@esbuild/freebsd-x64": "0.27.0", "@esbuild/linux-arm": "0.27.0", "@esbuild/linux-arm64": "0.27.0", "@esbuild/linux-ia32": "0.27.0", "@esbuild/linux-loong64": "0.27.0", "@esbuild/linux-mips64el": "0.27.0", "@esbuild/linux-ppc64": "0.27.0", "@esbuild/linux-riscv64": "0.27.0", "@esbuild/linux-s390x": "0.27.0", "@esbuild/linux-x64": "0.27.0", "@esbuild/netbsd-arm64": "0.27.0", "@esbuild/netbsd-x64": "0.27.0", "@esbuild/openbsd-arm64": "0.27.0", "@esbuild/openbsd-x64": "0.27.0", "@esbuild/openharmony-arm64": "0.27.0", "@esbuild/sunos-x64": "0.27.0", "@esbuild/win32-arm64": "0.27.0", "@esbuild/win32-ia32": "0.27.0", "@esbuild/win32-x64": "0.27.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA=="],
|
||||
|
||||
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
|
||||
|
||||
"escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
|
||||
|
||||
"escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
|
||||
|
||||
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
|
||||
|
||||
"estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="],
|
||||
|
||||
"estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="],
|
||||
|
||||
"estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="],
|
||||
|
||||
"estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="],
|
||||
|
||||
"estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="],
|
||||
|
||||
"estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="],
|
||||
|
||||
"estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
|
||||
|
||||
"etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
|
||||
|
||||
"eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="],
|
||||
|
|
@ -656,6 +860,10 @@
|
|||
|
||||
"express-rate-limit": ["express-rate-limit@8.5.1", "", { "dependencies": { "ip-address": "^10.2.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ=="],
|
||||
|
||||
"extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="],
|
||||
|
||||
"extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="],
|
||||
|
||||
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
|
||||
|
||||
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
|
||||
|
|
@ -670,6 +878,8 @@
|
|||
|
||||
"fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
|
||||
|
||||
"fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="],
|
||||
|
||||
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
|
||||
|
||||
"fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
|
||||
|
|
@ -680,6 +890,8 @@
|
|||
|
||||
"finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="],
|
||||
|
||||
"format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="],
|
||||
|
||||
"formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
|
||||
|
||||
"forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="],
|
||||
|
|
@ -708,6 +920,10 @@
|
|||
|
||||
"get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="],
|
||||
|
||||
"github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="],
|
||||
|
||||
"glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="],
|
||||
|
||||
"glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
||||
|
||||
"gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
|
||||
|
|
@ -716,14 +932,44 @@
|
|||
|
||||
"graphql": ["graphql@16.14.0", "", {}, "sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q=="],
|
||||
|
||||
"gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="],
|
||||
|
||||
"has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
|
||||
|
||||
"hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="],
|
||||
|
||||
"hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="],
|
||||
|
||||
"hast-util-heading-rank": ["hast-util-heading-rank@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA=="],
|
||||
|
||||
"hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="],
|
||||
|
||||
"hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="],
|
||||
|
||||
"hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="],
|
||||
|
||||
"hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="],
|
||||
|
||||
"hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="],
|
||||
|
||||
"hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="],
|
||||
|
||||
"hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="],
|
||||
|
||||
"hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="],
|
||||
|
||||
"hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="],
|
||||
|
||||
"hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="],
|
||||
|
||||
"headers-polyfill": ["headers-polyfill@5.0.1", "", { "dependencies": { "@types/set-cookie-parser": "^2.4.10", "set-cookie-parser": "^3.0.1" } }, "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA=="],
|
||||
|
||||
"hono": ["hono@4.12.18", "", {}, "sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ=="],
|
||||
|
||||
"html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="],
|
||||
|
||||
"html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
|
||||
|
||||
"http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="],
|
||||
|
||||
"https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
|
||||
|
|
@ -738,20 +984,32 @@
|
|||
|
||||
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
|
||||
|
||||
"inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="],
|
||||
|
||||
"ip-address": ["ip-address@10.2.0", "", {}, "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="],
|
||||
|
||||
"ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="],
|
||||
|
||||
"is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="],
|
||||
|
||||
"is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="],
|
||||
|
||||
"is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
|
||||
|
||||
"is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="],
|
||||
|
||||
"is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
|
||||
|
||||
"is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="],
|
||||
|
||||
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
||||
|
||||
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
||||
|
||||
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
|
||||
|
||||
"is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="],
|
||||
|
||||
"is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="],
|
||||
|
||||
"is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
|
||||
|
|
@ -766,6 +1024,8 @@
|
|||
|
||||
"is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="],
|
||||
|
||||
"is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="],
|
||||
|
||||
"is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="],
|
||||
|
||||
"is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="],
|
||||
|
|
@ -778,6 +1038,8 @@
|
|||
|
||||
"isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
|
||||
|
||||
"isomorphic-dompurify": ["isomorphic-dompurify@3.13.0", "", { "dependencies": { "dompurify": "^3.4.3", "jsdom": "^29.1.1" } }, "sha512-QzgzjAGJN0QoOpLWx7mkMhhTQvQXsBpS6oEi2Wy58mEWwrvaRJrx5hrVEdsM70nNKOwHCHj3bwYkwI+HFd3Khg=="],
|
||||
|
||||
"jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="],
|
||||
|
||||
"jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="],
|
||||
|
|
@ -786,6 +1048,8 @@
|
|||
|
||||
"js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
|
||||
|
||||
"jsdom": ["jsdom@29.1.1", "", { "dependencies": { "@asamuzakjp/css-color": "^5.1.11", "@asamuzakjp/dom-selector": "^7.1.1", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.3", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.3.5", "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", "undici": "^7.25.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q=="],
|
||||
|
||||
"jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
|
||||
|
||||
"json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
|
||||
|
|
@ -798,6 +1062,8 @@
|
|||
|
||||
"jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="],
|
||||
|
||||
"kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
|
||||
|
||||
"kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
|
||||
|
||||
"lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
|
||||
|
|
@ -832,6 +1098,8 @@
|
|||
|
||||
"log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="],
|
||||
|
||||
"longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="],
|
||||
|
||||
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
||||
|
||||
"lucide-react": ["lucide-react@1.14.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA=="],
|
||||
|
|
@ -840,8 +1108,48 @@
|
|||
|
||||
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
|
||||
|
||||
"markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="],
|
||||
|
||||
"markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="],
|
||||
|
||||
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
||||
|
||||
"mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="],
|
||||
|
||||
"mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="],
|
||||
|
||||
"mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="],
|
||||
|
||||
"mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="],
|
||||
|
||||
"mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="],
|
||||
|
||||
"mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="],
|
||||
|
||||
"mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="],
|
||||
|
||||
"mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="],
|
||||
|
||||
"mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="],
|
||||
|
||||
"mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="],
|
||||
|
||||
"mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="],
|
||||
|
||||
"mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="],
|
||||
|
||||
"mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="],
|
||||
|
||||
"mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="],
|
||||
|
||||
"mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="],
|
||||
|
||||
"mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="],
|
||||
|
||||
"mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="],
|
||||
|
||||
"mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="],
|
||||
|
||||
"media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="],
|
||||
|
||||
"merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="],
|
||||
|
|
@ -850,6 +1158,78 @@
|
|||
|
||||
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
|
||||
|
||||
"micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="],
|
||||
|
||||
"micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="],
|
||||
|
||||
"micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="],
|
||||
|
||||
"micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="],
|
||||
|
||||
"micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="],
|
||||
|
||||
"micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="],
|
||||
|
||||
"micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="],
|
||||
|
||||
"micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="],
|
||||
|
||||
"micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="],
|
||||
|
||||
"micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="],
|
||||
|
||||
"micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="],
|
||||
|
||||
"micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="],
|
||||
|
||||
"micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="],
|
||||
|
||||
"micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="],
|
||||
|
||||
"micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="],
|
||||
|
||||
"micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="],
|
||||
|
||||
"micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="],
|
||||
|
||||
"micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="],
|
||||
|
||||
"micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="],
|
||||
|
||||
"micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="],
|
||||
|
||||
"micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="],
|
||||
|
||||
"micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="],
|
||||
|
||||
"micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="],
|
||||
|
||||
"micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="],
|
||||
|
||||
"micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="],
|
||||
|
||||
"micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="],
|
||||
|
||||
"micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="],
|
||||
|
||||
"micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="],
|
||||
|
||||
"micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="],
|
||||
|
||||
"micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="],
|
||||
|
||||
"micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="],
|
||||
|
||||
"micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="],
|
||||
|
||||
"micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="],
|
||||
|
||||
"micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="],
|
||||
|
||||
"micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
|
||||
|
||||
"micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="],
|
||||
|
||||
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
||||
|
||||
"mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
|
||||
|
|
@ -864,6 +1244,8 @@
|
|||
|
||||
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
|
||||
|
||||
"minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
|
||||
|
||||
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
||||
|
||||
"msw": ["msw@2.14.4", "", { "dependencies": { "@inquirer/confirm": "^6.0.11", "@mswjs/interceptors": "^0.41.3", "@open-draft/deferred-promise": "^3.0.0", "@types/statuses": "^2.0.6", "cookie": "^1.1.1", "graphql": "^16.13.2", "headers-polyfill": "^5.0.1", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.11.11", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.1", "type-fest": "^5.5.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-HVPZJ9Rx4nDCWhjNQ57lKQGSE+0zDHw0xWE2IN2rLOUTLkagEBWNlvWuKYNwG2pQWq96TMd8NiSK/6vO1udnWQ=="],
|
||||
|
|
@ -894,24 +1276,36 @@
|
|||
|
||||
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
||||
|
||||
"oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="],
|
||||
|
||||
"oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="],
|
||||
|
||||
"open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="],
|
||||
|
||||
"openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="],
|
||||
|
||||
"ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="],
|
||||
|
||||
"outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="],
|
||||
|
||||
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
|
||||
|
||||
"parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="],
|
||||
|
||||
"parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
|
||||
|
||||
"parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="],
|
||||
|
||||
"parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="],
|
||||
|
||||
"parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="],
|
||||
|
||||
"path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="],
|
||||
|
||||
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
|
||||
|
||||
"path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="],
|
||||
|
||||
"path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="],
|
||||
|
||||
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
||||
|
|
@ -932,8 +1326,12 @@
|
|||
|
||||
"prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
|
||||
|
||||
"property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
|
||||
|
||||
"proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="],
|
||||
|
||||
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
|
||||
|
||||
"qs": ["qs@6.15.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg=="],
|
||||
|
||||
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
|
||||
|
|
@ -950,6 +1348,42 @@
|
|||
|
||||
"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=="],
|
||||
|
||||
"recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="],
|
||||
|
||||
"recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="],
|
||||
|
||||
"recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="],
|
||||
|
||||
"recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="],
|
||||
|
||||
"regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="],
|
||||
|
||||
"regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
|
||||
|
||||
"regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
|
||||
|
||||
"rehype-autolink-headings": ["rehype-autolink-headings@7.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-is-element": "^3.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw=="],
|
||||
|
||||
"rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="],
|
||||
|
||||
"rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="],
|
||||
|
||||
"rehype-slug": ["rehype-slug@6.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "github-slugger": "^2.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-to-string": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A=="],
|
||||
|
||||
"rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="],
|
||||
|
||||
"remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="],
|
||||
|
||||
"remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="],
|
||||
|
||||
"remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="],
|
||||
|
||||
"remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="],
|
||||
|
||||
"remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="],
|
||||
|
||||
"remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="],
|
||||
|
||||
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
|
||||
|
||||
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
|
||||
|
|
@ -964,6 +1398,8 @@
|
|||
|
||||
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
|
||||
|
||||
"rolldown": ["rolldown@1.0.1", "", { "dependencies": { "@oxc-project/types": "=0.130.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.1", "@rolldown/binding-darwin-arm64": "1.0.1", "@rolldown/binding-darwin-x64": "1.0.1", "@rolldown/binding-freebsd-x64": "1.0.1", "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", "@rolldown/binding-linux-arm64-gnu": "1.0.1", "@rolldown/binding-linux-arm64-musl": "1.0.1", "@rolldown/binding-linux-ppc64-gnu": "1.0.1", "@rolldown/binding-linux-s390x-gnu": "1.0.1", "@rolldown/binding-linux-x64-gnu": "1.0.1", "@rolldown/binding-linux-x64-musl": "1.0.1", "@rolldown/binding-openharmony-arm64": "1.0.1", "@rolldown/binding-wasm32-wasi": "1.0.1", "@rolldown/binding-win32-arm64-msvc": "1.0.1", "@rolldown/binding-win32-x64-msvc": "1.0.1" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ=="],
|
||||
|
||||
"rollup": ["rollup@4.60.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.3", "@rollup/rollup-android-arm64": "4.60.3", "@rollup/rollup-darwin-arm64": "4.60.3", "@rollup/rollup-darwin-x64": "4.60.3", "@rollup/rollup-freebsd-arm64": "4.60.3", "@rollup/rollup-freebsd-x64": "4.60.3", "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", "@rollup/rollup-linux-arm-musleabihf": "4.60.3", "@rollup/rollup-linux-arm64-gnu": "4.60.3", "@rollup/rollup-linux-arm64-musl": "4.60.3", "@rollup/rollup-linux-loong64-gnu": "4.60.3", "@rollup/rollup-linux-loong64-musl": "4.60.3", "@rollup/rollup-linux-ppc64-gnu": "4.60.3", "@rollup/rollup-linux-ppc64-musl": "4.60.3", "@rollup/rollup-linux-riscv64-gnu": "4.60.3", "@rollup/rollup-linux-riscv64-musl": "4.60.3", "@rollup/rollup-linux-s390x-gnu": "4.60.3", "@rollup/rollup-linux-x64-gnu": "4.60.3", "@rollup/rollup-linux-x64-musl": "4.60.3", "@rollup/rollup-openbsd-x64": "4.60.3", "@rollup/rollup-openharmony-arm64": "4.60.3", "@rollup/rollup-win32-arm64-msvc": "4.60.3", "@rollup/rollup-win32-ia32-msvc": "4.60.3", "@rollup/rollup-win32-x64-gnu": "4.60.3", "@rollup/rollup-win32-x64-msvc": "4.60.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A=="],
|
||||
|
||||
"router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
|
||||
|
|
@ -974,8 +1410,12 @@
|
|||
|
||||
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
|
||||
|
||||
"saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="],
|
||||
|
||||
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
|
||||
|
||||
"section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="],
|
||||
|
||||
"semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
||||
|
||||
"send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="],
|
||||
|
|
@ -992,6 +1432,8 @@
|
|||
|
||||
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
||||
|
||||
"shiki": ["shiki@4.0.2", "", { "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/engine-javascript": "4.0.2", "@shikijs/engine-oniguruma": "4.0.2", "@shikijs/langs": "4.0.2", "@shikijs/themes": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ=="],
|
||||
|
||||
"side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="],
|
||||
|
||||
"side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="],
|
||||
|
|
@ -1008,6 +1450,10 @@
|
|||
|
||||
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
||||
|
||||
"space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
|
||||
|
||||
"sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="],
|
||||
|
||||
"statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
|
||||
|
||||
"stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
|
||||
|
|
@ -1016,14 +1462,24 @@
|
|||
|
||||
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
||||
|
||||
"stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
|
||||
|
||||
"stringify-object": ["stringify-object@5.0.0", "", { "dependencies": { "get-own-enumerable-keys": "^1.0.0", "is-obj": "^3.0.0", "is-regexp": "^3.1.0" } }, "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg=="],
|
||||
|
||||
"strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
|
||||
|
||||
"strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="],
|
||||
|
||||
"strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="],
|
||||
|
||||
"strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="],
|
||||
|
||||
"style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="],
|
||||
|
||||
"style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="],
|
||||
|
||||
"symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="],
|
||||
|
||||
"tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="],
|
||||
|
||||
"tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="],
|
||||
|
|
@ -1046,6 +1502,12 @@
|
|||
|
||||
"tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="],
|
||||
|
||||
"tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="],
|
||||
|
||||
"trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
|
||||
|
||||
"trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="],
|
||||
|
||||
"ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="],
|
||||
|
||||
"ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="],
|
||||
|
|
@ -1056,6 +1518,10 @@
|
|||
|
||||
"tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="],
|
||||
|
||||
"twoslash": ["twoslash@0.3.8", "", { "dependencies": { "@typescript/vfs": "^1.6.4", "twoslash-protocol": "0.3.8" }, "peerDependencies": { "typescript": "^5.5.0 || ^6.0.0" } }, "sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig=="],
|
||||
|
||||
"twoslash-protocol": ["twoslash-protocol@0.3.8", "", {}, "sha512-HmvAHoiEviK8LqvAQyc9/irkdvwTUiR1fHmNwH/0gq8EHxyBt4PWVPixjEXg6wJu1u6yBrILEWXGK9Kw58/8yQ=="],
|
||||
|
||||
"type-fest": ["type-fest@5.6.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA=="],
|
||||
|
||||
"type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="],
|
||||
|
|
@ -1068,6 +1534,20 @@
|
|||
|
||||
"unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
|
||||
|
||||
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
|
||||
|
||||
"unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="],
|
||||
|
||||
"unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
|
||||
|
||||
"unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="],
|
||||
|
||||
"unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
|
||||
|
||||
"unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="],
|
||||
|
||||
"unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="],
|
||||
|
||||
"universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
|
||||
|
||||
"unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="],
|
||||
|
|
@ -1084,12 +1564,28 @@
|
|||
|
||||
"vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="],
|
||||
|
||||
"vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
|
||||
|
||||
"vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="],
|
||||
|
||||
"vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="],
|
||||
|
||||
"vite": ["vite@7.3.3", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA=="],
|
||||
|
||||
"w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="],
|
||||
|
||||
"web": ["web@workspace:apps/web"],
|
||||
|
||||
"web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="],
|
||||
|
||||
"web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
|
||||
|
||||
"webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="],
|
||||
|
||||
"whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="],
|
||||
|
||||
"whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="],
|
||||
|
||||
"which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
|
||||
|
||||
"wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
|
||||
|
|
@ -1100,10 +1596,16 @@
|
|||
|
||||
"wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="],
|
||||
|
||||
"xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="],
|
||||
|
||||
"xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="],
|
||||
|
||||
"y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
|
||||
|
||||
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
|
||||
|
||||
"yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="],
|
||||
|
||||
"yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
|
||||
|
||||
"yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
|
||||
|
|
@ -1116,6 +1618,8 @@
|
|||
|
||||
"zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="],
|
||||
|
||||
"zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
|
||||
|
||||
"@discordjs/rest/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="],
|
||||
|
||||
"@discordjs/rest/@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="],
|
||||
|
|
@ -1128,8 +1632,14 @@
|
|||
|
||||
"@dotenvx/dotenvx/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=="],
|
||||
|
||||
"@mdx-js/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
|
||||
|
||||
"@mdx-js/rollup/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
|
||||
|
||||
"@mswjs/interceptors/@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="],
|
||||
|
||||
"@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
|
||||
|
||||
"@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
|
||||
|
||||
"@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
|
||||
|
|
@ -1142,24 +1652,46 @@
|
|||
|
||||
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
||||
|
||||
"@tomehq/cli/@vitejs/plugin-react": ["@vitejs/plugin-react@6.0.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.0" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler"] }, "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg=="],
|
||||
|
||||
"@tomehq/cli/vite": ["vite@8.0.13", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.14", "rolldown": "1.0.1", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw=="],
|
||||
|
||||
"@tomehq/core/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
|
||||
|
||||
"cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
||||
|
||||
"cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
||||
|
||||
"cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
||||
|
||||
"estree-util-to-js/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
|
||||
|
||||
"express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
|
||||
|
||||
"gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
|
||||
|
||||
"hast-util-raw/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
|
||||
|
||||
"jsdom/lru-cache": ["lru-cache@11.3.6", "", {}, "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A=="],
|
||||
|
||||
"jsdom/undici": ["undici@7.25.0", "", {}, "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ=="],
|
||||
|
||||
"log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
|
||||
|
||||
"micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
|
||||
|
||||
"npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
|
||||
|
||||
"parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
|
||||
|
||||
"path-scurry/lru-cache": ["lru-cache@11.3.6", "", {}, "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A=="],
|
||||
|
||||
"prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
|
||||
|
||||
"restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
|
||||
|
||||
"rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
|
||||
|
||||
"router/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="],
|
||||
|
||||
"vite/esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="],
|
||||
|
|
@ -1182,12 +1714,18 @@
|
|||
|
||||
"@dotenvx/dotenvx/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
|
||||
|
||||
"@tomehq/cli/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
|
||||
|
||||
"cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
|
||||
|
||||
"cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
||||
|
||||
"cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
|
||||
|
||||
"gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
|
||||
|
||||
"hast-util-raw/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
|
||||
|
||||
"vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="],
|
||||
|
||||
"vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="],
|
||||
|
|
|
|||
1
docs/.gitignore
vendored
Normal file
1
docs/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
out/
|
||||
3
docs/.tome/entry.tsx
Normal file
3
docs/.tome/entry.tsx
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
// Bootstraps the Tome documentation shell.
|
||||
// Configure the site in tome.config.js.
|
||||
import "@tomehq/theme/entry";
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
# Flow Backend Handoff - 2026-05-15
|
||||
|
||||
This handoff summarizes the flow-backend discussion so a fresh agent can continue without redoing the same repo archaeology.
|
||||
|
||||
## Repositories Discussed
|
||||
|
||||
- `codex-flows`: `/home/peezy/codex-fork-workspace/codex-flows`
|
||||
- `protocol-mono`: `/home/peezy/load-game-workspace/protocol-mono`
|
||||
- A mistaken path was checked first: `/home/peezy/game-protocol-workspace/protocol-mono`. It is not the active repo; it only contained a sparse `apps/web/.vite` directory and no Git checkout.
|
||||
|
||||
## codex-flows Backend Model
|
||||
|
||||
`codex-flows` has three relevant layers:
|
||||
|
||||
- `packages/flow-runtime`: shared runtime. It loads `flow.toml`, discovers `.codex/flows/*` before `flows/*`, validates event payloads against per-step JSON Schema, matches steps by trigger type, and executes steps with `runner = "bun"` or gated `runner = "code-mode"`.
|
||||
- `apps/flow-runner`: CLI wrapper over the runtime. It lists flows, fires matching steps for an event, or runs one explicit step. It does not persist backend state.
|
||||
- `apps/flow-backend-systemd-local`: the implemented local HTTP/CLI execution backend. It persists events/runs to SQLite, writes event JSON files, discovers matching steps, and starts `flow-runner` locally.
|
||||
|
||||
`systemd-local` has two executor modes:
|
||||
|
||||
- `CODEX_FLOW_BACKEND_EXECUTOR=direct`: spawn Bun directly.
|
||||
- `CODEX_FLOW_BACKEND_EXECUTOR=systemd-run`: wrap each step in `systemd-run --user --wait --collect`.
|
||||
|
||||
Important behavior:
|
||||
|
||||
- Normal dispatch is idempotent by `event.id`; duplicates return existing run ids and do not start another attempt.
|
||||
- Replay intentionally creates a new run attempt.
|
||||
- Local run status is process-level: `queued`, `running`, `completed`, `failed`. Semantic flow result statuses such as `blocked` or `needs_intervention` live inside `resultJson`.
|
||||
- Code Mode steps require `CODEX_FLOWS_MODE=code-mode` or `CODEX_FLOWS_ENABLE_CODE_MODE=1`.
|
||||
|
||||
The Convex package in `packages/flow-backend-convex` is a durable control-plane component, not an executor. It stores synced manifests, flow events, runs, attempts, leases, output chunks, and final results. External workers claim runs and execute `flow.toml` steps using `@peezy.tech/flow-runtime`.
|
||||
|
||||
Focused tests were run and passed:
|
||||
|
||||
```bash
|
||||
bun test packages/flow-runtime/test/flow-runtime.test.ts apps/flow-backend-systemd-local/test/backend.test.ts packages/flow-backend-convex/test/backend-model.test.ts
|
||||
```
|
||||
|
||||
Result: 16 pass, 0 fail.
|
||||
|
||||
## protocol-mono Usage
|
||||
|
||||
`protocol-mono` is primarily using the Convex backend option for the pet game.
|
||||
|
||||
Key files:
|
||||
|
||||
- `apps/pet-game/convex/convex.config.ts`: installs `@peezy.tech/flow-backend-convex` with `app.use(flowBackend)`.
|
||||
- `apps/pet-game/convex/flowBackend.ts`: app-owned service-secret wrappers around the generic Convex component API.
|
||||
- `apps/pet-game/convex/chain.ts`: records validated `GameTreasury.PaymentReceived` events and dispatches generic flow events.
|
||||
- `apps/pet-game/src/worker/codexWorker.ts`: private worker that syncs local manifests, claims Convex runs, heartbeats, executes with `@peezy.tech/flow-runtime`, applies domain completion, and completes/fails the backend run.
|
||||
- `apps/pet-game/flows/player-character-asset/flow.toml`: first app flow.
|
||||
- `apps/pet-game/flows/player-character-asset/exec/generate-player-character.ts`: Bun step implementation that starts the Codex sprite-generation flow and emits `FLOW_RESULT`.
|
||||
|
||||
The payment-to-flow path is:
|
||||
|
||||
1. Browser creates a `generationRequests` row in Convex and returns payment payload data.
|
||||
2. Wallet pays `GameTreasury`.
|
||||
3. `chain-watcher` observes `PaymentReceived`.
|
||||
4. `convex/chain.ts` validates chain/payment/source data.
|
||||
5. It dispatches a generic `FlowEvent`:
|
||||
|
||||
```ts
|
||||
{
|
||||
id: `pet-game:payment:${chainId}:${txHash}:${logIndex}`,
|
||||
type: "pet-game.player_asset_generation.requested",
|
||||
source: "pet-game.chain",
|
||||
payload: { requestId, source, characterName, installAsDefault, allowMirror, ... }
|
||||
}
|
||||
```
|
||||
|
||||
6. Convex flow backend creates queued run(s) from synced manifests.
|
||||
7. `codexWorker.ts` claims the run, executes the matching local flow step, and heartbeats during execution.
|
||||
8. On success, `codexWorker.ts` uploads generated outputs to `asset-service`, optionally mints, calls `convex/worker.ts::completeAssetFlowResult`, then calls `flowBackend.completeRun`.
|
||||
9. On failure, it calls `failAssetFlowResult` and `flowBackend.failRun`.
|
||||
|
||||
`protocol-mono` also has `services/codex-service`, a separate protocol-wide HTTP/file-backed runner over `@peezy.tech/flow-runtime`. It has its own `/events`, `/runs`, retry/cancel, and worker loop. It is domain-neutral and can run the same flow packages, but the pet-game payment lifecycle described above is wired through Convex plus `codex-worker`.
|
||||
|
||||
## Discord Bridge Handling
|
||||
|
||||
`apps/discord-bridge` in `codex-flows` does not run flows and does not talk to the Convex component directly.
|
||||
|
||||
Its main role is a Discord-to-Codex app-server bridge:
|
||||
|
||||
- It mirrors Discord messages into Codex app-server threads.
|
||||
- It mirrors progress/status/output back to Discord.
|
||||
- In gateway mode, it gives the main Codex operator thread privileged `codex_gateway.*` dynamic tools.
|
||||
|
||||
For flow backend state, it exposes only two read-only tools:
|
||||
|
||||
- `codex_gateway.list_flow_runs`
|
||||
- `codex_gateway.list_flow_events`
|
||||
|
||||
Configuration:
|
||||
|
||||
- `--flow-backend-url`
|
||||
- `CODEX_FLOW_BACKEND_URL`
|
||||
- `CODEX_GATEWAY_BACKEND_URL`
|
||||
|
||||
Flow inspection path:
|
||||
|
||||
```text
|
||||
Discord user
|
||||
-> discord-bridge
|
||||
-> main Codex gateway thread
|
||||
-> dynamic tool call: codex_gateway.list_flow_runs
|
||||
-> discord-bridge calls FlowBackendHttpClient.listRuns()
|
||||
-> JSON returned to Codex
|
||||
-> Codex summarizes/responds in Discord
|
||||
```
|
||||
|
||||
The bridge now uses `@peezy.tech/flow-runtime/backend-client` for the existing
|
||||
read-only inspection tools:
|
||||
|
||||
- `FlowBackendClient.listRuns(...)`
|
||||
- `FlowBackendClient.listEvents(...)`
|
||||
|
||||
It still does not expose Discord dispatch, replay, or cancel tools. When the
|
||||
HTTP implementation is constructed from `CODEX_FLOW_BACKEND_URL`, it performs
|
||||
inspection against the `/runs` and `/events` API; Convex consumers should expose
|
||||
an app-owned HTTP adapter with appropriate service auth instead of importing
|
||||
generated app-specific Convex APIs into a generic client.
|
||||
|
||||
If the goal is to let Discord inspect `protocol-mono` Convex flow state, the next increment should be one of:
|
||||
|
||||
- add a small HTTP adapter in `protocol-mono` that exposes `/runs` and `/events`
|
||||
in the normalized backend-client shape, with appropriate service auth; or
|
||||
- configure the Discord bridge against an existing HTTP adapter such as
|
||||
`services/codex-service` when that service owns the relevant runs.
|
||||
|
||||
If the goal is dispatch/replay/cancel from Discord, the bridge would need new privileged tools. Today it only lists runs/events.
|
||||
|
||||
## Useful Follow-Up Checks
|
||||
|
||||
- Decide whether `services/codex-service` should become the shared HTTP adapter for Discord bridge inspection, or whether Convex should get its own small inspection gateway.
|
||||
- If using `codex-service`, confirm whether its JSON response shape is close enough to `codex-flow-systemd-local` for bridge consumption.
|
||||
- If adding bridge write tools, keep them restricted to the gateway main thread like the existing `codex_gateway.*` tools.
|
||||
- Preserve the rule that generic backend state remains domain-neutral; pet-game completion should stay in app-owned Convex functions or worker adapters.
|
||||
|
|
@ -1,399 +0,0 @@
|
|||
# Flow Client Design - 2026-05-15
|
||||
|
||||
This note designs the next reusable client layer for Codex flows. It builds on
|
||||
the current split between `@peezy.tech/flow-runtime`,
|
||||
`@peezy.tech/flow-runtime/backend-client`, `codex-flow-runner`, and
|
||||
`codex-flow-systemd-local`.
|
||||
|
||||
## Intent
|
||||
|
||||
Consumers such as `patch.moi` should be able to use Codex flows as a product
|
||||
capability without caring whether execution is backendless in the current
|
||||
workspace or delegated to a flow backend.
|
||||
|
||||
The event-shaped contract remains the stable ABI. The client hides ceremony,
|
||||
not semantics:
|
||||
|
||||
- flow packages still receive `FlowEvent` through the existing runner context
|
||||
- steps still emit `FLOW_RESULT`
|
||||
- backend dispatch still uses `event.id` for idempotency
|
||||
- app-owned domain completion stays outside generic flow clients and backends
|
||||
|
||||
The product-facing experience can be direct:
|
||||
|
||||
```bash
|
||||
patch upstream release openai/codex rust-v1.2.3
|
||||
```
|
||||
|
||||
Patch can translate that into:
|
||||
|
||||
```ts
|
||||
await flows.dispatchEvent({
|
||||
id: "patch:upstream.release:openai/codex:rust-v1.2.3",
|
||||
type: "upstream.release",
|
||||
source: "patch",
|
||||
receivedAt: new Date().toISOString(),
|
||||
payload: {
|
||||
repo: "openai/codex",
|
||||
tag: "rust-v1.2.3",
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Existing Surfaces
|
||||
|
||||
`@peezy.tech/flow-runtime` already provides the local building blocks:
|
||||
|
||||
- `discoverFlows({ cwd, roots })`
|
||||
- `matchingSteps(flows, event)`
|
||||
- `runFlowStep({ flow, step, event, env, codeMode })`
|
||||
- Bun and gated Code Mode runners
|
||||
- JSON Schema trigger validation
|
||||
|
||||
`codex-flow-runner` proves backendless execution works, but only as a CLI over
|
||||
event JSON files. It does not expose a reusable client object, normalized
|
||||
run/event views, local idempotency, or replay/list APIs.
|
||||
|
||||
`codex-flow-systemd-local` provides durable backend behavior:
|
||||
|
||||
- `POST /events`
|
||||
- `GET /events`
|
||||
- `GET /runs`
|
||||
- `POST /events/:id/replay`
|
||||
- process status in backend records
|
||||
- semantic result status in `FLOW_RESULT`
|
||||
- idempotency by `event.id`
|
||||
|
||||
`@peezy.tech/flow-runtime/backend-client` normalizes HTTP backend responses and
|
||||
already covers backend-native list/get/dispatch/replay/cancel operations.
|
||||
|
||||
`patch.moi` currently builds `FlowEvent` objects from feed signals and POSTs
|
||||
them to a configured backend URL. The same product should also support a local
|
||||
CLI mode where flows run in the current repository without a daemon.
|
||||
|
||||
## Proposed Packages
|
||||
|
||||
Add two subpath exports to `@peezy.tech/flow-runtime`:
|
||||
|
||||
- `@peezy.tech/flow-runtime/local-client`
|
||||
- `@peezy.tech/flow-runtime/client`
|
||||
|
||||
Keep the existing:
|
||||
|
||||
- `@peezy.tech/flow-runtime/backend-client`
|
||||
|
||||
`local-client` owns backendless execution. `backend-client` owns remote backend
|
||||
HTTP access. `client` is a tiny factory and shared type surface over both.
|
||||
|
||||
No new package named `sdk` should be introduced.
|
||||
|
||||
## Client API
|
||||
|
||||
The common client should expose flow-native operations:
|
||||
|
||||
```ts
|
||||
export type FlowClient = {
|
||||
listRuns(options?: FlowListRunsOptions): Promise<FlowRunList>;
|
||||
getRun(runId: string): Promise<FlowRunView>;
|
||||
listEvents(options?: FlowListEventsOptions): Promise<FlowEventList>;
|
||||
getEvent(eventId: string): Promise<FlowEventView>;
|
||||
dispatchEvent(event: FlowEvent, options?: FlowDispatchOptions): Promise<FlowDispatchResult>;
|
||||
replayEvent(eventId: string, options?: FlowReplayOptions): Promise<FlowDispatchResult>;
|
||||
cancelRun(runId: string): Promise<FlowCancelResult>;
|
||||
};
|
||||
```
|
||||
|
||||
The view models should be neutral aliases or successors of the current backend
|
||||
views:
|
||||
|
||||
- `FlowRunView`
|
||||
- `FlowEventView`
|
||||
- `FlowDispatchResult`
|
||||
- `FlowRunList`
|
||||
- `FlowEventList`
|
||||
|
||||
They should preserve the fields proven by `backend-client`:
|
||||
|
||||
- process status
|
||||
- semantic `FLOW_RESULT` status
|
||||
- `effectiveStatus`
|
||||
- `needsAttention`
|
||||
- attempts
|
||||
- output
|
||||
- latest output
|
||||
- result payload
|
||||
- raw backend/local record
|
||||
|
||||
The term `backend` can remain as a field value, but common client names should
|
||||
not force local execution to pretend it is a backend.
|
||||
|
||||
## Factory
|
||||
|
||||
The factory should be discriminated by mode:
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "local",
|
||||
cwd: process.cwd(),
|
||||
});
|
||||
```
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "http",
|
||||
baseUrl: process.env.PATCH_FLOW_BACKEND_URL,
|
||||
hmacSecret: process.env.PATCH_FLOW_DISPATCH_SECRET,
|
||||
});
|
||||
```
|
||||
|
||||
`mode: "http"` should wrap `createFlowBackendHttpClient()`.
|
||||
|
||||
`mode: "local"` should wrap `createLocalFlowClient()`.
|
||||
|
||||
## Local Client
|
||||
|
||||
Local mode should execute matching flow steps directly in the selected
|
||||
workspace:
|
||||
|
||||
```ts
|
||||
export type LocalFlowClientOptions = {
|
||||
cwd: string;
|
||||
roots?: string[];
|
||||
env?: Record<string, string | undefined>;
|
||||
state?: false | "memory" | {
|
||||
kind: "file";
|
||||
dataDir?: string;
|
||||
};
|
||||
codex?: LocalFlowCodexOptions;
|
||||
};
|
||||
```
|
||||
|
||||
Discovery follows the runtime default unless roots are provided:
|
||||
|
||||
- `.codex/flows/*`
|
||||
- `flows/*`
|
||||
|
||||
The first implementation should support `state: "memory"` by default. That is
|
||||
enough for direct CLI runs and tests. A file-backed state mode can be added next
|
||||
under `.codex/flow-runs` or `.codex/flow-client` without introducing a daemon.
|
||||
|
||||
Local dispatch behavior:
|
||||
|
||||
- normalize the incoming `FlowEvent`
|
||||
- discover flows
|
||||
- match trigger type and schema
|
||||
- create one run view per matching step
|
||||
- execute steps using `runFlowStep`
|
||||
- return a normalized dispatch result
|
||||
- mark semantic `blocked` and `needs_intervention` as attention states
|
||||
|
||||
For local mode, `dispatchEvent` should run synchronously by default. A future
|
||||
`wait: false` local option can queue to file state, but it should not fake async
|
||||
behavior before there is a worker loop.
|
||||
|
||||
## Idempotency And Replay
|
||||
|
||||
The client must not silently generate random ids for normal dispatch. A product
|
||||
can hide event construction, but it must still provide a deterministic event id
|
||||
or idempotency key when duplicate suppression matters.
|
||||
|
||||
Recommended product helper pattern:
|
||||
|
||||
```ts
|
||||
const event = patchUpstreamReleaseEvent({
|
||||
repo: "openai/codex",
|
||||
tag: "rust-v1.2.3",
|
||||
});
|
||||
await flows.dispatchEvent(event);
|
||||
```
|
||||
|
||||
HTTP mode inherits backend idempotency and replay semantics:
|
||||
|
||||
- duplicate `event.id` dispatch returns the backend's duplicate/idempotent
|
||||
response
|
||||
- `replayEvent(eventId)` creates a new backend attempt
|
||||
|
||||
Local memory mode can dedupe duplicate event ids only for the lifetime of the
|
||||
client process. File-backed local state should make idempotency durable and make
|
||||
`replayEvent(eventId)` create a new local attempt.
|
||||
|
||||
If local state is disabled, `listEvents`, `getEvent`, `listRuns`, `getRun`, and
|
||||
`replayEvent` should fail with a clear unsupported-state error rather than
|
||||
returning misleading empty data.
|
||||
|
||||
## Code Mode Configuration
|
||||
|
||||
Flow orchestration location and Codex execution location are separate axes.
|
||||
|
||||
Local flow execution can still use a local or remote Codex executor for
|
||||
`runner = "code-mode"` steps.
|
||||
|
||||
Initial local Code Mode support should preserve current behavior:
|
||||
|
||||
```ts
|
||||
codex: {
|
||||
mode: "stdio",
|
||||
command: process.env.CODEX_APP_SERVER_CODEX_COMMAND,
|
||||
codexHome: process.env.CODEX_HOME,
|
||||
stream: true,
|
||||
}
|
||||
```
|
||||
|
||||
The design should leave room for:
|
||||
|
||||
```ts
|
||||
codex: {
|
||||
mode: "remote",
|
||||
url: "https://codex-worker.internal",
|
||||
headers: { authorization: "Bearer ..." },
|
||||
}
|
||||
```
|
||||
|
||||
Remote Code Mode should not be added until `runCodeModeStep` has a real remote
|
||||
app-server transport. Do not simulate remote Codex by shelling out through
|
||||
unrelated HTTP APIs.
|
||||
|
||||
Code Mode remains gated by `CODEX_FLOWS_MODE=code-mode` or
|
||||
`CODEX_FLOWS_ENABLE_CODE_MODE=1`.
|
||||
|
||||
## Workspace Configuration
|
||||
|
||||
The existing `.codex/workspace.toml` is already used for Discord gateway
|
||||
surfaces. Flow client configuration can use the same file, but should stay in a
|
||||
separate table:
|
||||
|
||||
```toml
|
||||
[flows]
|
||||
mode = "local"
|
||||
roots = ["flows"]
|
||||
state = "memory"
|
||||
|
||||
[flows.codex]
|
||||
mode = "stdio"
|
||||
stream = true
|
||||
```
|
||||
|
||||
Patch can resolve configuration in this order:
|
||||
|
||||
1. CLI flags
|
||||
2. environment variables
|
||||
3. `.codex/workspace.toml`
|
||||
4. defaults
|
||||
|
||||
The Discord-specific `[[discord.gateway.surfaces]]` table must remain unrelated
|
||||
to flow execution.
|
||||
|
||||
## Patch Integration
|
||||
|
||||
Patch should be able to use one abstraction in both roles:
|
||||
|
||||
- CLI utility run from a fork checkout
|
||||
- feed watching service that dispatches upstream activity
|
||||
|
||||
Suggested Patch adapter:
|
||||
|
||||
```ts
|
||||
const flows = createFlowClientFromPatchConfig({
|
||||
cwd,
|
||||
env: process.env,
|
||||
});
|
||||
```
|
||||
|
||||
Resolution:
|
||||
|
||||
- if a backend URL is configured, use `mode: "http"`
|
||||
- otherwise use `mode: "local"` in the current workspace
|
||||
|
||||
The existing Patch server can replace its hand-rolled fetch/HMAC dispatch logic
|
||||
with the HTTP client mode. The future Patch CLI can use local mode by default.
|
||||
|
||||
Patch-specific commands should create domain events but not bypass the generic
|
||||
flow ABI:
|
||||
|
||||
```bash
|
||||
patch upstream release openai/codex rust-v1.2.3
|
||||
patch flow fire upstream.release --repo openai/codex --tag rust-v1.2.3
|
||||
patch flow runs
|
||||
```
|
||||
|
||||
## Boundaries
|
||||
|
||||
This client is not an app-server SDK. It must not expose convenience wrappers
|
||||
for app-server thread methods such as `setGoal`, `readThread`, `startTurn`, or
|
||||
`renameThread`.
|
||||
|
||||
The client owns generic flow concerns:
|
||||
|
||||
- event dispatch
|
||||
- flow discovery
|
||||
- local step execution
|
||||
- backend dispatch
|
||||
- run/event normalization
|
||||
- replay/cancel when supported by the selected mode
|
||||
|
||||
It does not own:
|
||||
|
||||
- Patch fork policy
|
||||
- organization release rules
|
||||
- pet-game asset registration
|
||||
- payment state
|
||||
- minting
|
||||
- Discord gateway write tools
|
||||
- arbitrary app-server command wrappers
|
||||
|
||||
Domain completion remains app-owned. A flow result can say work completed or
|
||||
needs intervention; the consuming app decides what that means in its product.
|
||||
|
||||
## Implementation Plan
|
||||
|
||||
1. Extract neutral view model names from `backend-client` without breaking the
|
||||
existing backend-client export.
|
||||
2. Add `local-client` with in-memory state and synchronous dispatch.
|
||||
3. Add `client` factory that returns local or HTTP clients.
|
||||
4. Refactor `codex-flow-runner` to use the local client internally.
|
||||
5. Add optional file-backed local state for durable idempotency, list/get, and
|
||||
replay.
|
||||
6. Update Patch to consume the common client instead of hand-rolled HTTP
|
||||
dispatch.
|
||||
7. Add `.codex/workspace.toml` flow configuration support only after the direct
|
||||
constructor API is stable.
|
||||
|
||||
## Test Plan
|
||||
|
||||
Local client tests:
|
||||
|
||||
- discovers `.codex/flows/*` before `flows/*`
|
||||
- dispatches one event to all matching steps
|
||||
- returns normalized run/event/result views
|
||||
- preserves `FLOW_RESULT.status` as semantic result status
|
||||
- marks `blocked` and `needs_intervention` as `needsAttention`
|
||||
- forwards Code Mode configuration to `runFlowStep`
|
||||
- rejects replay/list/get when durable or memory state does not contain the
|
||||
requested event/run
|
||||
- dedupes duplicate event ids in memory mode
|
||||
|
||||
HTTP factory tests:
|
||||
|
||||
- delegates to `FlowBackendHttpClient`
|
||||
- preserves HMAC/header/auth construction
|
||||
- returns the same normalized payload shape as direct backend-client use
|
||||
|
||||
CLI and Patch-oriented tests:
|
||||
|
||||
- `codex-flow-runner fire` continues to produce the existing payload shape
|
||||
- Patch can select local mode when no backend URL is configured
|
||||
- Patch can select HTTP mode when a backend URL is configured
|
||||
- Patch product helpers create deterministic event ids for fork-maintenance
|
||||
commands
|
||||
|
||||
## Open Decisions
|
||||
|
||||
The first implementation can proceed with conservative defaults, but these
|
||||
should be decided before exposing a stable CLI promise:
|
||||
|
||||
- whether local mode should default to in-memory state or file state
|
||||
- exact default local state directory if file state is enabled
|
||||
- whether local dispatch should ever support `wait: false`
|
||||
- final remote Code Mode transport shape
|
||||
- whether `cancelRun` in local synchronous mode should be unsupported or tied to
|
||||
a future worker process
|
||||
280
docs/flows.md
280
docs/flows.md
|
|
@ -1,280 +0,0 @@
|
|||
# Flows
|
||||
|
||||
Flows are packaged automation units. They are discovered from `.codex/flows/*`
|
||||
first and then `flows/*`, with the installed `.codex` copy taking precedence.
|
||||
|
||||
Each flow has:
|
||||
|
||||
```text
|
||||
flow.toml
|
||||
schemas/*.schema.json
|
||||
exec/*
|
||||
```
|
||||
|
||||
`flow.toml` is the manifest. Use `flow` naming consistently:
|
||||
|
||||
```toml
|
||||
name = "example-flow"
|
||||
version = 1
|
||||
description = "Short operational purpose."
|
||||
|
||||
[config]
|
||||
commit = true
|
||||
|
||||
[[steps]]
|
||||
name = "do-work"
|
||||
runner = "bun"
|
||||
script = "exec/do-work.ts"
|
||||
timeout_ms = 300000
|
||||
|
||||
[steps.trigger]
|
||||
type = "upstream.release"
|
||||
schema = "schemas/upstream-release.schema.json"
|
||||
```
|
||||
|
||||
The runtime passes a generic event to every step:
|
||||
|
||||
```ts
|
||||
type FlowEvent<T = unknown> = {
|
||||
id: string;
|
||||
type: string;
|
||||
source?: string;
|
||||
occurredAt?: string;
|
||||
receivedAt: string;
|
||||
payload: T;
|
||||
};
|
||||
```
|
||||
|
||||
Domain payload types live in each flow package as JSON Schema files and are
|
||||
referenced by `steps.trigger.schema`.
|
||||
|
||||
## Runners
|
||||
|
||||
`runner = "bun"` executes the script directly with Bun. The step receives JSON
|
||||
on stdin:
|
||||
|
||||
```json
|
||||
{
|
||||
"flow": {
|
||||
"name": "example-flow",
|
||||
"version": 1,
|
||||
"root": "/repo/flows/example-flow",
|
||||
"step": "do-work",
|
||||
"config": {},
|
||||
"event": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The script must print a final line beginning with `FLOW_RESULT ` followed by
|
||||
JSON.
|
||||
|
||||
`runner = "code-mode"` starts a Codex app-server and calls the fork-only
|
||||
`thread/codeMode/execute` method through a raw JSON-RPC request. Code Mode code
|
||||
is present on `main`, but execution is disabled unless codex-flows is set to
|
||||
Code Mode:
|
||||
|
||||
```bash
|
||||
CODEX_FLOWS_MODE=code-mode
|
||||
```
|
||||
|
||||
That single mode setting also makes stdio app-server launches default to
|
||||
`bunx @peezy.tech/codex`. Set `CODEX_APP_SERVER_CODEX_COMMAND` when Code Mode
|
||||
should run against a specific local binary instead, or
|
||||
`CODEX_APP_SERVER_CODEX_PACKAGE` when it should use a different npm package.
|
||||
The older `CODEX_FLOWS_ENABLE_CODE_MODE=1` gate is still accepted as a narrow
|
||||
runner-only escape hatch.
|
||||
|
||||
## Commands
|
||||
|
||||
List flows:
|
||||
|
||||
```bash
|
||||
bun run flow list
|
||||
```
|
||||
|
||||
Fire all matching steps for an event:
|
||||
|
||||
```bash
|
||||
bun run flow fire --event event.json
|
||||
```
|
||||
|
||||
Run one step:
|
||||
|
||||
```bash
|
||||
bun run flow run openai-codex-bindings regenerate-bindings --event event.json
|
||||
```
|
||||
|
||||
## Systemd-Local Backend
|
||||
|
||||
`codex-flow-systemd-local` is the first execution backend. Patch posts
|
||||
generic `FlowEvent` JSON to this service; the service persists events and runs
|
||||
to SQLite, discovers matching flow steps, and starts each step locally.
|
||||
|
||||
Run it directly:
|
||||
|
||||
```bash
|
||||
bun run flow:backend serve --cwd /home/peezy/codex-flows-public
|
||||
```
|
||||
|
||||
Useful environment:
|
||||
|
||||
```bash
|
||||
CODEX_FLOW_BACKEND_HOST=127.0.0.1
|
||||
CODEX_FLOW_BACKEND_PORT=7345
|
||||
CODEX_FLOW_BACKEND_DATA_DIR=/var/lib/codex-flow-systemd-local
|
||||
CODEX_FLOW_BACKEND_SECRET=shared-hmac-secret
|
||||
CODEX_FLOW_BACKEND_EXECUTOR=direct
|
||||
```
|
||||
|
||||
`CODEX_FLOW_BACKEND_EXECUTOR=systemd-run` wraps each step in a transient
|
||||
`systemd-run --user --wait --collect` unit. The default `direct` executor is
|
||||
still suitable when the backend service itself is managed by systemd.
|
||||
|
||||
Endpoints:
|
||||
|
||||
- `POST /events` or `POST /flow-events`: accept one `FlowEvent`
|
||||
- `GET /events?limit=<n>`: list stored events
|
||||
- `GET /events/<event-id>`: inspect a stored event and its runs
|
||||
- `POST /events/<event-id>/replay`: start a new run attempt for a stored event
|
||||
- `GET /runs?eventId=<id>&status=<status>&limit=<n>`: inspect recorded runs
|
||||
- `GET /runs/<run-id>`: inspect one recorded run
|
||||
- `GET /healthz`: health check
|
||||
|
||||
When `CODEX_FLOW_BACKEND_SECRET` is configured, HTTP dispatches must include an
|
||||
HMAC SHA-256 body signature. The preferred header is `x-flow-signature-256`;
|
||||
`x-patch-flow-signature-256` is also accepted for Patch dispatches.
|
||||
|
||||
The CLI exposes the same operational surface:
|
||||
|
||||
```bash
|
||||
bun run flow:backend list-events --limit 20
|
||||
bun run flow:backend show-event 'patch:source:entry:upstream.release'
|
||||
bun run flow:backend list-runs --status failed --limit 20
|
||||
bun run flow:backend show-run run_abc123
|
||||
bun run flow:backend replay-event 'patch:source:entry:upstream.release' --wait
|
||||
```
|
||||
|
||||
Normal dispatch is idempotent by `event.id`: a duplicate `POST /events` returns
|
||||
the existing run ids and does not start another attempt. `replay-event` and
|
||||
`POST /events/<event-id>/replay` intentionally create a new run attempt for the
|
||||
stored event, which is the recovery path for accepted events whose flow step
|
||||
failed or blocked.
|
||||
|
||||
The live backend state is a SQLite database under
|
||||
`CODEX_FLOW_BACKEND_DATA_DIR` plus per-event JSON files under
|
||||
`CODEX_FLOW_BACKEND_DATA_DIR/events`. Back up both by copying the whole data
|
||||
directory while the service is stopped, or by using SQLite online backup plus a
|
||||
copy of the `events/` directory. For the current host deployment the intended
|
||||
values are:
|
||||
|
||||
```text
|
||||
CODEX_FLOW_BACKEND_CWD=/home/peezy/codex-flows-public
|
||||
CODEX_FLOW_BACKEND_DATA_DIR=/home/peezy/.local/state/codex-flow-systemd-local
|
||||
CODEX_FLOWS_MODE=code-mode
|
||||
CODEX_FLOW_PUSH=1
|
||||
CODEX_FLOW_PUBLISH=1
|
||||
PEEZY_CODEX_REPO=/home/peezy/codex-flow-worktrees/codex
|
||||
PEEZY_CODEX_TARGET_BRANCH=code-mode-exec-hooks
|
||||
```
|
||||
|
||||
Do not fabricate an upstream Codex release lifecycle test. Until the next real
|
||||
`openai/codex` release, use health checks, non-release smoke events, and stored
|
||||
event inspection/replay tooling only.
|
||||
|
||||
## Backend Client
|
||||
|
||||
Reusable consumers should use
|
||||
`@peezy.tech/flow-runtime/backend-client` for backend-native run and event
|
||||
inspection/control. The HTTP client speaks the `/runs`, `/runs/:id`,
|
||||
`/events`, `/events/:id`, `/events/:id/replay`, and `/runs/:id/cancel` style
|
||||
surface used by the local backend and compatible app-owned adapters.
|
||||
|
||||
The client normalizes backend responses into view models with:
|
||||
|
||||
- process status from the backend run record
|
||||
- semantic `FLOW_RESULT` status from `resultJson` or `result`
|
||||
- `effectiveStatus` and `needsAttention` for `blocked` and
|
||||
`needs_intervention`
|
||||
- attempt count and attempt records
|
||||
- output chunks or stdout/stderr-derived output
|
||||
- latest output and result payload
|
||||
|
||||
This is intentionally a flow-backend API, not an app-server wrapper. App-server
|
||||
thread controls stay as direct app-server protocol requests, and application
|
||||
completion logic stays outside generic backends. For example, a pet-game worker
|
||||
may upload generated assets, update payment state, and mint before completing a
|
||||
generic flow run.
|
||||
|
||||
## Flow Client
|
||||
|
||||
Reusable product code can use `@peezy.tech/flow-runtime/client` when it should
|
||||
dispatch, inspect, or replay generic flow events without hard-coding whether
|
||||
execution is local or delegated to an HTTP backend.
|
||||
|
||||
```ts
|
||||
import { createFlowClient } from "@peezy.tech/flow-runtime/client";
|
||||
|
||||
const flows = createFlowClient({
|
||||
mode: "local",
|
||||
cwd: process.cwd(),
|
||||
});
|
||||
```
|
||||
|
||||
`mode: "local"` wraps `@peezy.tech/flow-runtime/local-client` and runs matching
|
||||
steps synchronously in the selected workspace with in-memory run/event state by
|
||||
default. Set `state: { kind: "file" }` to persist local state under
|
||||
`.codex/flow-client`. `mode: "http"` wraps the existing backend HTTP client and
|
||||
inherits the backend's durable idempotency, replay, and cancellation semantics.
|
||||
|
||||
Both modes preserve the same `FlowEvent` and `FLOW_RESULT` contracts. The client
|
||||
hides dispatch ceremony, not event semantics: products still provide stable
|
||||
event ids when duplicate suppression matters, and product-specific completion
|
||||
logic stays outside the generic client. See
|
||||
`docs/2026-05-15-flow-client-design.md` for the design rationale, Patch
|
||||
integration path, local state model, and remaining open decisions.
|
||||
|
||||
## Convex Backend Direction
|
||||
|
||||
Convex should be a durable orchestration backend, not the place where long
|
||||
running Codex or shell work executes. A future Convex backend should:
|
||||
|
||||
- accept the same generic `FlowEvent` shape
|
||||
- persist event, run, step, retry, and result records durably
|
||||
- choose matching flow steps from a stored or installed flow manifest
|
||||
- lease work to an external worker or remote app-server
|
||||
- receive heartbeats and final `FLOW_RESULT` records from that worker
|
||||
- expose programmatic fire/retry/cancel APIs
|
||||
|
||||
This keeps Patch dispatch-only, keeps Convex durable, and keeps process-heavy
|
||||
work on infrastructure that can run Codex, Bun, Git, Cargo, and system tools.
|
||||
|
||||
The reusable component package now lives at
|
||||
`packages/flow-backend-convex`. It owns only generic flow control-plane state:
|
||||
synced manifests, events, runs, attempts, leases, compact output events, and
|
||||
final results. Installing apps should expose their own service-authenticated
|
||||
wrapper functions and keep domain-specific completion in app code. For example,
|
||||
the 2D pet game keeps asset registration, payment state, and minting outside the
|
||||
generic backend.
|
||||
|
||||
The first component version stores readable progress chunks in
|
||||
`flowOutputEvents`. If durable long-form transcripts become important, add
|
||||
`@convex-dev/persistent-text-streaming` as a child component and attach a stream
|
||||
id to each run attempt; canonical run state should remain in the flow backend
|
||||
tables.
|
||||
|
||||
## Codex Release Flows
|
||||
|
||||
The upstream `openai/codex` release event fans out to two flow packages:
|
||||
|
||||
- `openai-codex-bindings`: Bun runner. Uses canonical `@openai/codex@version`,
|
||||
regenerates `@peezy.tech/codex-flows` app-server bindings, runs checks,
|
||||
commits when changed, and can push/trigger trusted publishing when configured.
|
||||
- `peezy-codex-fork`: Code Mode runner. Rebases the Peezy fork patch stack onto
|
||||
the upstream release tag, optionally squashes the patch stack, verifies the
|
||||
fork, and can push/tag to trigger the fork release flow when configured.
|
||||
|
||||
Publishing is controlled by flow config and environment. The packaged defaults
|
||||
commit local changes when appropriate but do not push or publish until
|
||||
`push = true`, `publish = true`, or matching `CODEX_FLOW_PUSH=1` /
|
||||
`CODEX_FLOW_PUBLISH=1` deployment configuration is set.
|
||||
22
docs/index.html
Normal file
22
docs/index.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>codex-flow</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body { -webkit-font-smoothing: antialiased; }
|
||||
::-webkit-scrollbar { width: 6px; height: 6px; }
|
||||
::-webkit-scrollbar-track { background: transparent; }
|
||||
::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="tome-root"></div>
|
||||
<script type="module" src="./.tome/entry.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
18
docs/package.json
Normal file
18
docs/package.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "@peezy.tech/codex-flow-docs",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"check:types": "node --check tome.config.js",
|
||||
"dev": "tome dev --host 127.0.0.1",
|
||||
"build": "tome build",
|
||||
"deploy": "tome deploy"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tomehq/cli": "^0.8.1",
|
||||
"@tomehq/theme": "^0.8.1",
|
||||
"react": "catalog:",
|
||||
"react-dom": "catalog:"
|
||||
}
|
||||
}
|
||||
36
docs/pages/concepts/architecture.md
Normal file
36
docs/pages/concepts/architecture.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
title: Architecture
|
||||
description: How events, clients, runtimes, backends, workers, and apps fit together.
|
||||
---
|
||||
|
||||
# Architecture
|
||||
|
||||
codex-flow separates event semantics, execution, and product completion.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant App as Product app
|
||||
participant Client as Flow client
|
||||
participant Backend as Backend or local runtime
|
||||
participant Step as Flow step
|
||||
participant Domain as App completion
|
||||
|
||||
App->>Client: dispatchEvent(FlowEvent)
|
||||
Client->>Backend: local match or HTTP POST /events
|
||||
Backend->>Step: runner context on stdin
|
||||
Step-->>Backend: FLOW_RESULT
|
||||
Backend-->>Client: run/event views
|
||||
Backend-->>Domain: app-owned worker or wrapper applies product effects
|
||||
```
|
||||
|
||||
The same flow package can run:
|
||||
|
||||
- directly through `codex-flow-runner`
|
||||
- synchronously through `@peezy.tech/flow-runtime/local-client`
|
||||
- through `codex-flow-systemd-local`
|
||||
- through a Convex control plane plus an external worker
|
||||
- through any app-owned backend adapter that preserves the event/result ABI
|
||||
|
||||
The important invariant is that the generic layer owns flow state, not product
|
||||
meaning. A `blocked` result can be surfaced by the backend, but the app decides
|
||||
what blocked means and how to resolve it.
|
||||
39
docs/pages/concepts/backends.md
Normal file
39
docs/pages/concepts/backends.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
title: Backends
|
||||
description: Compare local memory, file state, systemd-local, HTTP adapters, and Convex.
|
||||
---
|
||||
|
||||
# Backends
|
||||
|
||||
Backends differ in durability and execution location, not in event semantics.
|
||||
|
||||
## Local client
|
||||
|
||||
The local client runs matching steps synchronously in the current workspace.
|
||||
Memory state is the default. File state under `.codex/flow-client` gives durable
|
||||
event ids, list/get, and replay across client instances.
|
||||
|
||||
Use it for product CLIs, tests, and local development.
|
||||
|
||||
## systemd-local
|
||||
|
||||
The systemd-local backend accepts HTTP dispatches, stores events and runs in
|
||||
SQLite, writes event JSON files, and starts local steps directly or through
|
||||
`systemd-run`.
|
||||
|
||||
Use it for a small host-level service where local system tools and Codex are
|
||||
available.
|
||||
|
||||
## Convex component
|
||||
|
||||
The Convex component stores generic control-plane state and leases work to
|
||||
external workers. It is not an executor.
|
||||
|
||||
Use it when the product already uses Convex and needs durable app-visible run
|
||||
state, service-authenticated wrappers, and worker handoff.
|
||||
|
||||
## HTTP adapters
|
||||
|
||||
Any app can expose a compatible `/events` and `/runs` adapter. The shared
|
||||
backend client normalizes compatible responses, but authentication and domain
|
||||
policy remain app-owned.
|
||||
26
docs/pages/concepts/code-mode.md
Normal file
26
docs/pages/concepts/code-mode.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: Code Mode
|
||||
description: Why Code Mode is gated and how it relates to normal Bun runners.
|
||||
---
|
||||
|
||||
# Code Mode
|
||||
|
||||
Most flow steps should use `runner = "bun"`. Bun runners are plain scripts:
|
||||
they receive flow context on stdin, perform deterministic work, and emit
|
||||
`FLOW_RESULT`.
|
||||
|
||||
Use `runner = "code-mode"` when the step needs Codex to operate inside the
|
||||
repository. Code Mode calls a fork-only app-server method,
|
||||
`thread/codeMode/execute`, so it is intentionally gated.
|
||||
|
||||
## Why it is gated
|
||||
|
||||
Code Mode can use Codex tools and repository access. Enabling it changes the
|
||||
trust and operational model of a flow deployment. The explicit gate keeps
|
||||
ordinary flow execution safe by default.
|
||||
|
||||
## Execution location
|
||||
|
||||
Flow orchestration and Codex execution are separate axes. A local flow can start
|
||||
a local stdio app-server today. A future remote Code Mode transport should use a
|
||||
real app-server transport, not an unrelated HTTP shell wrapper.
|
||||
39
docs/pages/concepts/domain-boundaries.md
Normal file
39
docs/pages/concepts/domain-boundaries.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
title: Domain boundaries
|
||||
description: What generic flow infrastructure owns and what products must keep.
|
||||
---
|
||||
|
||||
# Domain boundaries
|
||||
|
||||
Generic flow infrastructure owns reusable automation mechanics:
|
||||
|
||||
- event dispatch
|
||||
- flow discovery
|
||||
- payload schema matching
|
||||
- local step execution
|
||||
- backend event/run persistence
|
||||
- replay and cancellation where supported
|
||||
- output, attempts, and result payload storage
|
||||
- normalized inspection views
|
||||
|
||||
It does not own product-specific completion:
|
||||
|
||||
- Patch fork policy
|
||||
- organization release rules
|
||||
- pet-game asset registration
|
||||
- payment state
|
||||
- minting
|
||||
- Discord write tools
|
||||
- gateway backends and arbitrary app-server thread wrappers
|
||||
|
||||
Keep domain completion in the consuming app. For example, a pet-game worker can
|
||||
generate an asset through a flow step, upload the asset, update payment state,
|
||||
mint if needed, and only then complete the generic run.
|
||||
|
||||
This boundary keeps flow packages portable and prevents generic backends from
|
||||
depending on app-specific Convex schemas, credentials, or release policy.
|
||||
|
||||
The Discord gateway backend follows the same rule. It may inspect generic flow
|
||||
runs and events for an operator, but its app-server thread orchestration,
|
||||
delegation policy, Discord workbench state, and hook-spool wake behavior are not
|
||||
part of the generic codex-flow backend contract.
|
||||
54
docs/pages/concepts/gateway-backend-process.md
Normal file
54
docs/pages/concepts/gateway-backend-process.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
title: Gateway backend process
|
||||
description: Process boundaries for local and future remote Codex gateway backends.
|
||||
---
|
||||
|
||||
# Gateway backend process
|
||||
|
||||
The current Discord gateway backend runs in-process with the Discord transport.
|
||||
That keeps deployment simple while preserving the backend boundary in code:
|
||||
|
||||
- `DiscordCodexBridge` owns Discord startup, shutdown, command registration, and
|
||||
inbound dispatch.
|
||||
- `LocalCodexGatewayBackend` owns app-server connection, Codex thread lifecycle,
|
||||
turn routing, goals, delegations, workbench state, hook-spool draining, and
|
||||
persisted gateway state.
|
||||
- `CodexGatewayPresenter` is the only outbound UI surface the local backend
|
||||
receives. It can create posts or threads, send and update messages, pin status,
|
||||
type, and delete presentation artifacts.
|
||||
|
||||
## In-process local backend
|
||||
|
||||
Local mode is the first implementation. The Discord process constructs a local
|
||||
backend with:
|
||||
|
||||
- a Codex app-server client
|
||||
- a state store
|
||||
- bridge configuration
|
||||
- a presenter adapter backed by the Discord transport
|
||||
- an optional flow backend client for read-only run and event inspection
|
||||
|
||||
The backend may connect to an existing app-server WebSocket or to a local stdio
|
||||
app-server started by the CLI.
|
||||
|
||||
## Future remote backend
|
||||
|
||||
A remote backend can implement the same `CodexGatewayBackend` shape behind HTTP
|
||||
or WebSocket. The transport-facing protocol should stay small:
|
||||
|
||||
| Direction | Shape | Purpose |
|
||||
|-----------|-------|---------|
|
||||
| transport to backend | `start`, `stop`, `handleInbound`, `commandRegistration` | lifecycle and event delivery |
|
||||
| backend to transport | `CodexGatewayPresenter` operations | UI output and presentation updates |
|
||||
| backend to app-server | Codex app-server client calls | thread, turn, goal, and tool orchestration |
|
||||
| backend to flow backend | `@peezy.tech/flow-runtime` backend client calls | optional read-only inspection |
|
||||
|
||||
Inbound events are still transport-shaped today because Discord is the only UI.
|
||||
If another UI lands, the next boundary is a transport-neutral gateway event
|
||||
model plus a presenter adapter per UI.
|
||||
|
||||
## Flow backend boundary
|
||||
|
||||
This gateway backend is not a codex-flow backend. It may inspect flow runs and
|
||||
events, but it must not own `FlowEvent`, `flow.toml`, `FLOW_RESULT`, matching,
|
||||
or step execution.
|
||||
28
docs/pages/concepts/gateway-backends.md
Normal file
28
docs/pages/concepts/gateway-backends.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
title: Gateway backends
|
||||
description: How Codex gateway surfaces differ from generic flow backends.
|
||||
---
|
||||
|
||||
# Gateway backends
|
||||
|
||||
A Codex gateway backend is the runtime behind an operator surface such as
|
||||
Discord. It owns Codex app-server orchestration and exposes a small UI-facing
|
||||
contract to the transport.
|
||||
|
||||
The Discord bridge is the first transport using this split:
|
||||
|
||||
- Discord owns bot login, commands, interactions, Discord channels, and message
|
||||
delivery.
|
||||
- The gateway backend owns app-server connection, Codex thread start/resume,
|
||||
turns, goals, delegations, workbench state, hook-spool draining, persisted
|
||||
bridge state, and optional flow-run inspection.
|
||||
- The local backend is the first implementation. It can connect to an existing
|
||||
app-server WebSocket or start a local stdio app-server.
|
||||
|
||||
This is separate from codex-flow backends. A flow backend accepts `FlowEvent`,
|
||||
matches `flow.toml`, executes steps, records `FLOW_RESULT`, and exposes run and
|
||||
event views. A gateway backend may read those run and event views, but it does
|
||||
not redefine the flow ABI and should not become the generic flow executor.
|
||||
|
||||
Use a gateway backend when the product needs a long-lived Codex control surface.
|
||||
Use a flow backend when the product needs portable event-driven automation.
|
||||
76
docs/pages/guides/author-flow-package.md
Normal file
76
docs/pages/guides/author-flow-package.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
---
|
||||
title: Author a flow package
|
||||
description: Structure a reusable flow package with triggers, schemas, and steps.
|
||||
---
|
||||
|
||||
# Author a flow package
|
||||
|
||||
Use a flow package when automation should be reusable across products or
|
||||
backends. A package is just a manifest, schemas, and executable step files.
|
||||
|
||||
## Layout
|
||||
|
||||
```text
|
||||
flow.toml
|
||||
schemas/*.schema.json
|
||||
exec/*
|
||||
```
|
||||
|
||||
Source packages live under `flows/*`. Installed packages can live under
|
||||
`.codex/flows/*`; installed copies take precedence so a workspace can override
|
||||
or pin a flow without editing source packages.
|
||||
|
||||
## Manifest
|
||||
|
||||
```toml
|
||||
name = "example-flow"
|
||||
version = 1
|
||||
description = "Short operational purpose."
|
||||
|
||||
[config]
|
||||
commit = true
|
||||
|
||||
[[steps]]
|
||||
name = "do-work"
|
||||
runner = "bun"
|
||||
script = "exec/do-work.ts"
|
||||
timeout_ms = 300000
|
||||
|
||||
[steps.trigger]
|
||||
type = "upstream.release"
|
||||
schema = "schemas/upstream-release.schema.json"
|
||||
```
|
||||
|
||||
Keep event payload shape in JSON Schema. Product-specific payload fields belong
|
||||
in the schema and event payload, not in the generic runner.
|
||||
|
||||
## Step input
|
||||
|
||||
Bun steps receive a JSON context on stdin:
|
||||
|
||||
```json
|
||||
{
|
||||
"flow": {
|
||||
"name": "example-flow",
|
||||
"version": 1,
|
||||
"root": "/repo/flows/example-flow",
|
||||
"step": "do-work",
|
||||
"config": {},
|
||||
"event": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Step output
|
||||
|
||||
Print a final `FLOW_RESULT` line:
|
||||
|
||||
```ts
|
||||
console.log(`FLOW_RESULT ${JSON.stringify({
|
||||
status: "completed",
|
||||
message: "updated bindings",
|
||||
})}`);
|
||||
```
|
||||
|
||||
Use `blocked` or `needs_intervention` when a human or external condition is
|
||||
required. Clients and backends mark those statuses as needing attention.
|
||||
57
docs/pages/guides/dispatch-and-replay-events.md
Normal file
57
docs/pages/guides/dispatch-and-replay-events.md
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
title: Dispatch and replay events
|
||||
description: Choose local or HTTP mode and understand idempotency, replay, and state.
|
||||
---
|
||||
|
||||
# Dispatch and replay events
|
||||
|
||||
Use `@peezy.tech/flow-runtime/client` when product code should not care whether
|
||||
execution is local or delegated to a backend.
|
||||
|
||||
## Select execution mode
|
||||
|
||||
```ts
|
||||
import { createFlowClient } from "@peezy.tech/flow-runtime/client";
|
||||
|
||||
const flows = createFlowClient({
|
||||
mode: "local",
|
||||
cwd: process.cwd(),
|
||||
});
|
||||
```
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "http",
|
||||
baseUrl: process.env.CODEX_FLOW_BACKEND_URL,
|
||||
bearerToken: process.env.CODEX_FLOW_BACKEND_TOKEN,
|
||||
});
|
||||
```
|
||||
|
||||
## Dispatch
|
||||
|
||||
```ts
|
||||
await flows.dispatchEvent(event);
|
||||
```
|
||||
|
||||
The client normalizes dispatch results into event ids, run ids, matched count,
|
||||
run views, and raw backend or local data.
|
||||
|
||||
## Replay
|
||||
|
||||
```ts
|
||||
await flows.replayEvent(event.id);
|
||||
```
|
||||
|
||||
Replay starts a new attempt for a stored event. HTTP backends provide durable
|
||||
replay. Local replay requires memory or file state; disabled local state fails
|
||||
with a clear unsupported-state error.
|
||||
|
||||
## Inspect
|
||||
|
||||
```ts
|
||||
const eventView = await flows.getEvent(event.id);
|
||||
const { runs } = await flows.listRuns({ status: "blocked", limit: 20 });
|
||||
```
|
||||
|
||||
Use `effectiveStatus` and `needsAttention` for user-facing triage. They combine
|
||||
backend process status with semantic `FLOW_RESULT.status`.
|
||||
42
docs/pages/guides/enable-code-mode.md
Normal file
42
docs/pages/guides/enable-code-mode.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
title: Enable Code Mode
|
||||
description: Gate Code Mode steps explicitly and configure the Codex executor.
|
||||
---
|
||||
|
||||
# Enable Code Mode
|
||||
|
||||
`runner = "code-mode"` starts a Codex app-server and calls the fork-only
|
||||
`thread/codeMode/execute` method. Code Mode remains opt-in because it executes
|
||||
Codex work with repository access and tool permissions.
|
||||
|
||||
## Enable the mode
|
||||
|
||||
```bash
|
||||
CODEX_FLOWS_MODE=code-mode
|
||||
```
|
||||
|
||||
That mode also makes stdio app-server launches default to:
|
||||
|
||||
```bash
|
||||
bunx @peezy.tech/codex app-server
|
||||
```
|
||||
|
||||
Use `CODEX_APP_SERVER_CODEX_COMMAND` when a specific local binary should run
|
||||
instead. `CODEX_APP_SERVER_CODEX_PACKAGE` can point at another npm package.
|
||||
|
||||
## Narrow runner-only gate
|
||||
|
||||
The older flag is still accepted:
|
||||
|
||||
```bash
|
||||
CODEX_FLOWS_ENABLE_CODE_MODE=1
|
||||
```
|
||||
|
||||
Prefer `CODEX_FLOWS_MODE=code-mode` for deployments because it configures both
|
||||
flow selection and the default Codex command.
|
||||
|
||||
## Keep orchestration and execution separate
|
||||
|
||||
Local flow orchestration can still use a local or remote Codex executor in the
|
||||
future. Do not simulate remote Code Mode by shelling out through unrelated HTTP
|
||||
APIs; wait for a real remote app-server transport.
|
||||
71
docs/pages/guides/operate-codex-release-flows.md
Normal file
71
docs/pages/guides/operate-codex-release-flows.md
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
title: Operate Codex release flows
|
||||
description: Understand the packaged openai/codex release automation and its safety gates.
|
||||
---
|
||||
|
||||
# Operate Codex release flows
|
||||
|
||||
The upstream `openai/codex` release event fans out to packaged automation in
|
||||
this repository. Treat these flows as real release machinery, not as generic
|
||||
smoke tests.
|
||||
|
||||
## Event
|
||||
|
||||
The release path starts from a generic event:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "patch:upstream.release:openai/codex:rust-v1.2.3",
|
||||
"type": "upstream.release",
|
||||
"source": "patch",
|
||||
"receivedAt": "2026-05-15T00:00:00.000Z",
|
||||
"payload": {
|
||||
"repo": "openai/codex",
|
||||
"tag": "rust-v1.2.3"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Products such as Patch create this event from upstream release feeds and
|
||||
dispatch it through the shared flow client or HTTP backend.
|
||||
|
||||
## Packaged steps
|
||||
|
||||
- `openai-codex-bindings`: Bun runner. Uses canonical `@openai/codex@version`,
|
||||
regenerates `@peezy.tech/codex-flows` app-server bindings, runs checks,
|
||||
commits when changed, and can push or trigger trusted publishing when
|
||||
configured.
|
||||
- `peezy-codex-fork`: Code Mode runner. Rebases the Peezy fork patch stack onto
|
||||
the upstream release tag, optionally squashes the patch stack, verifies the
|
||||
fork, and can push or tag to trigger the fork release flow when configured.
|
||||
|
||||
## Publishing gates
|
||||
|
||||
Packaged defaults may commit local changes when appropriate, but they do not
|
||||
push or publish unless deployment configuration allows it:
|
||||
|
||||
```bash
|
||||
CODEX_FLOW_PUSH=1
|
||||
CODEX_FLOW_PUBLISH=1
|
||||
```
|
||||
|
||||
Equivalent flow config fields can enable the same behavior:
|
||||
|
||||
```toml
|
||||
[config]
|
||||
push = true
|
||||
publish = true
|
||||
```
|
||||
|
||||
## Safe verification
|
||||
|
||||
Do not fabricate a full `openai/codex` release lifecycle test. Until the next
|
||||
real upstream release, use:
|
||||
|
||||
- backend health checks
|
||||
- non-release smoke events
|
||||
- stored event inspection
|
||||
- replay of already accepted events when recovery is needed
|
||||
|
||||
This avoids accidentally running release, push, or publishing automation from a
|
||||
made-up upstream lifecycle.
|
||||
61
docs/pages/guides/operate-systemd-local.md
Normal file
61
docs/pages/guides/operate-systemd-local.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
---
|
||||
title: Operate systemd-local
|
||||
description: Run the local HTTP backend, inspect stored events, and replay failed runs.
|
||||
---
|
||||
|
||||
# Operate systemd-local
|
||||
|
||||
`codex-flow-systemd-local` is the local durable HTTP backend. Patch and other
|
||||
services can post generic `FlowEvent` JSON to it while operators inspect and
|
||||
replay runs later.
|
||||
|
||||
## Start the backend
|
||||
|
||||
```bash
|
||||
bun run flow:backend serve --cwd /home/peezy/codex-flows-public
|
||||
```
|
||||
|
||||
Useful environment:
|
||||
|
||||
```bash
|
||||
CODEX_FLOW_BACKEND_HOST=127.0.0.1
|
||||
CODEX_FLOW_BACKEND_PORT=7345
|
||||
CODEX_FLOW_BACKEND_DATA_DIR=/var/lib/codex-flow-systemd-local
|
||||
CODEX_FLOW_BACKEND_SECRET=shared-hmac-secret
|
||||
CODEX_FLOW_BACKEND_EXECUTOR=direct
|
||||
```
|
||||
|
||||
Set `CODEX_FLOW_BACKEND_EXECUTOR=systemd-run` to wrap each step in a transient
|
||||
`systemd-run --user --wait --collect` unit. The default `direct` executor is
|
||||
suitable when the backend service itself is already managed by systemd.
|
||||
|
||||
## Dispatch
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:7345/events \
|
||||
-H 'content-type: application/json' \
|
||||
--data @event.json
|
||||
```
|
||||
|
||||
When `CODEX_FLOW_BACKEND_SECRET` is configured, dispatches must include
|
||||
`x-flow-signature-256` with an HMAC SHA-256 body signature.
|
||||
|
||||
## Inspect and replay
|
||||
|
||||
```bash
|
||||
bun run flow:backend list-events --limit 20
|
||||
bun run flow:backend show-event 'patch:source:entry:upstream.release'
|
||||
bun run flow:backend list-runs --status failed --limit 20
|
||||
bun run flow:backend show-run run_abc123
|
||||
bun run flow:backend replay-event 'patch:source:entry:upstream.release' --wait
|
||||
```
|
||||
|
||||
Normal dispatch is idempotent by `event.id`. Replay intentionally creates a new
|
||||
run attempt.
|
||||
|
||||
## Back up state
|
||||
|
||||
The backend stores SQLite state under `CODEX_FLOW_BACKEND_DATA_DIR` and per
|
||||
event JSON files under `CODEX_FLOW_BACKEND_DATA_DIR/events`. Back up the whole
|
||||
data directory while the service is stopped, or use SQLite online backup plus a
|
||||
copy of the `events/` directory.
|
||||
79
docs/pages/guides/run-discord-local-backend.md
Normal file
79
docs/pages/guides/run-discord-local-backend.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
title: Run Discord over a local backend
|
||||
description: Start the Discord bridge with the in-process local Codex gateway backend.
|
||||
---
|
||||
|
||||
# Run Discord over a local backend
|
||||
|
||||
Use the local gateway backend when Discord should be the operator surface for a
|
||||
Codex workspace on the same host.
|
||||
|
||||
## 1. Configure Discord access
|
||||
|
||||
Set the bot token and allowlists:
|
||||
|
||||
```bash
|
||||
export CODEX_DISCORD_BOT_TOKEN="..."
|
||||
export CODEX_DISCORD_ALLOWED_USER_IDS="123456789"
|
||||
export CODEX_DISCORD_ALLOWED_CHANNEL_IDS="987654321"
|
||||
```
|
||||
|
||||
To enable gateway mode, set a home channel:
|
||||
|
||||
```bash
|
||||
export CODEX_DISCORD_HOME_CHANNEL_ID="987654321"
|
||||
```
|
||||
|
||||
## 2. Choose the app-server mode
|
||||
|
||||
Start with a local stdio app-server:
|
||||
|
||||
```bash
|
||||
bun ./apps/discord-bridge/src/index.ts --local-app-server
|
||||
```
|
||||
|
||||
Or connect to an app-server that is already running:
|
||||
|
||||
```bash
|
||||
bun ./apps/discord-bridge/src/index.ts \
|
||||
--app-server-url ws://127.0.0.1:3585 \
|
||||
--approval-policy never \
|
||||
--sandbox danger-full-access
|
||||
```
|
||||
|
||||
Both modes use the same in-process `LocalCodexGatewayBackend`.
|
||||
|
||||
## 3. Add optional workbench channels
|
||||
|
||||
Workbench channels let the gateway keep workspace dashboards and task threads:
|
||||
|
||||
```bash
|
||||
export CODEX_DISCORD_WORKSPACE_FORUM_CHANNEL_ID="111111111"
|
||||
export CODEX_DISCORD_TASK_THREADS_CHANNEL_ID="222222222"
|
||||
```
|
||||
|
||||
Set both values together. A partial workbench configuration is invalid.
|
||||
|
||||
## 4. Enable hook-spool returns
|
||||
|
||||
Install hooks for the runtime backing the gateway:
|
||||
|
||||
```bash
|
||||
codex-discord-bridge hook install
|
||||
```
|
||||
|
||||
The hook command writes lifecycle events into the spool directory. The local
|
||||
backend drains those files, updates observed thread state, returns delegated
|
||||
results, and wakes the main operator thread when policy says to.
|
||||
|
||||
## 5. Add optional flow inspection
|
||||
|
||||
If a codex-flow backend is running, point the gateway at it:
|
||||
|
||||
```bash
|
||||
export CODEX_FLOW_BACKEND_URL="http://127.0.0.1:8787"
|
||||
```
|
||||
|
||||
This enables read-only `codex_gateway.list_flow_runs` and
|
||||
`codex_gateway.list_flow_events`. It does not make the gateway backend a flow
|
||||
executor.
|
||||
68
docs/pages/guides/run-flows-locally.md
Normal file
68
docs/pages/guides/run-flows-locally.md
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
---
|
||||
title: Run flows locally
|
||||
description: Use the CLI or local client to discover, match, and execute flow steps.
|
||||
---
|
||||
|
||||
# Run flows locally
|
||||
|
||||
Local execution is the simplest path for development and product CLIs. It uses
|
||||
the same `FlowEvent` and `FLOW_RESULT` contract as backend execution.
|
||||
|
||||
## List flows
|
||||
|
||||
```bash
|
||||
bun run flow list
|
||||
```
|
||||
|
||||
Discovery order is:
|
||||
|
||||
1. `.codex/flows/*`
|
||||
2. `flows/*`
|
||||
|
||||
The installed `.codex` copy wins when both locations contain a flow with the
|
||||
same name.
|
||||
|
||||
## Fire matching steps
|
||||
|
||||
```bash
|
||||
bun run flow fire --event event.json
|
||||
```
|
||||
|
||||
`fire` dispatches the event through the local flow client and preserves the
|
||||
existing CLI payload shape:
|
||||
|
||||
```json
|
||||
{
|
||||
"eventId": "demo:hello:ada",
|
||||
"results": [
|
||||
{
|
||||
"flow": "hello-flow",
|
||||
"step": "hello",
|
||||
"result": { "status": "completed" }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Run one explicit step
|
||||
|
||||
```bash
|
||||
bun run flow run hello-flow hello --event event.json
|
||||
```
|
||||
|
||||
Use explicit `run` when you are debugging one step and do not want trigger
|
||||
matching to select other steps.
|
||||
|
||||
## Use the local client
|
||||
|
||||
```ts
|
||||
import { createLocalFlowClient } from "@peezy.tech/flow-runtime/local-client";
|
||||
|
||||
const flows = createLocalFlowClient({
|
||||
cwd: process.cwd(),
|
||||
state: { kind: "file" },
|
||||
});
|
||||
```
|
||||
|
||||
The local client runs synchronously. `wait: false` is intentionally unsupported
|
||||
until a worker loop exists.
|
||||
46
docs/pages/guides/use-convex-backend.md
Normal file
46
docs/pages/guides/use-convex-backend.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
title: Use the Convex backend
|
||||
description: Install the generic Convex control plane and keep execution in app-owned workers.
|
||||
---
|
||||
|
||||
# Use the Convex backend
|
||||
|
||||
`@peezy.tech/flow-backend-convex` is a durable control-plane component. It
|
||||
stores generic events, runs, attempts, leases, output chunks, and final result
|
||||
payloads. It does not execute shell, Bun, Git, Cargo, or Codex work.
|
||||
|
||||
## Install the component
|
||||
|
||||
```ts
|
||||
// convex/convex.config.ts
|
||||
import flowBackend from "@peezy.tech/flow-backend-convex/convex.config.js";
|
||||
import { defineApp } from "convex/server";
|
||||
|
||||
const app = defineApp();
|
||||
app.use(flowBackend);
|
||||
|
||||
export default app;
|
||||
```
|
||||
|
||||
## Add app-owned wrappers
|
||||
|
||||
Expose service-authenticated wrapper functions from your app. Those wrappers
|
||||
call the installed component through `components.flowBackend`.
|
||||
|
||||
Keep authentication, tenancy, billing, and product-specific policy in the app
|
||||
wrapper. The generic component should not know about game assets, payments,
|
||||
minting, Patch fork policy, or organization release rules.
|
||||
|
||||
## Run an external worker
|
||||
|
||||
The worker should:
|
||||
|
||||
1. Sync or provide flow manifests.
|
||||
2. Claim a queued run.
|
||||
3. Heartbeat while it works.
|
||||
4. Execute the matching step with `@peezy.tech/flow-runtime`.
|
||||
5. Apply app-owned domain completion if needed.
|
||||
6. Complete or fail the generic run.
|
||||
|
||||
This keeps Convex durable and queryable while process-heavy work runs on
|
||||
infrastructure that can run Codex and local system tools.
|
||||
53
docs/pages/index.md
Normal file
53
docs/pages/index.md
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
title: codex-flow
|
||||
description: Event-driven automation packages for Codex app-server work.
|
||||
---
|
||||
|
||||
# codex-flow
|
||||
|
||||
codex-flow is a small automation system for running reusable Codex work from
|
||||
generic events. A product emits a `FlowEvent`, a flow package matches it with
|
||||
JSON Schema, and a runner executes a Bun or gated Code Mode step that prints a
|
||||
`FLOW_RESULT`.
|
||||
|
||||
The stable contract is intentionally narrow:
|
||||
|
||||
- Products dispatch generic `FlowEvent` objects with deterministic ids.
|
||||
- Flow packages declare triggers and scripts in `flow.toml`.
|
||||
- Steps receive the event through runner context and emit one `FLOW_RESULT`.
|
||||
- Backends track run state, attempts, output, replay, and cancellation.
|
||||
- App-owned domain completion stays outside generic flow clients and backends.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Product["Product or CLI"] --> Event["FlowEvent"]
|
||||
Event --> Client["Flow client"]
|
||||
Client --> Local["Local runtime"]
|
||||
Client --> Backend["HTTP or Convex backend"]
|
||||
Local --> Step["Flow step"]
|
||||
Backend --> Worker["External worker"]
|
||||
Worker --> Step
|
||||
Step --> Result["FLOW_RESULT"]
|
||||
Result --> ProductDone["App-owned completion"]
|
||||
```
|
||||
|
||||
## Start here
|
||||
|
||||
- New to flows: [Build your first flow](tutorials/first-flow).
|
||||
- Integrating a product: [Dispatch a release event](tutorials/dispatch-release-event).
|
||||
- Need exact shapes: [FlowEvent and FLOW_RESULT](reference/flow-event).
|
||||
- Operating runs: [Operate systemd-local](guides/operate-systemd-local).
|
||||
|
||||
## What is in this repo
|
||||
|
||||
- `@peezy.tech/codex-flows`: Codex app-server JSON-RPC client, transports,
|
||||
flow helpers, auth helpers, workbench reducers, and generated protocol types.
|
||||
- `@peezy.tech/flow-runtime`: flow manifest loading, event matching, local
|
||||
execution, the shared flow client, and backend HTTP client normalization.
|
||||
- `@peezy.tech/flow-backend-convex`: reusable Convex control-plane component
|
||||
for generic flow events and runs.
|
||||
- `codex-flow-runner`: CLI for discovering and firing local flow packages.
|
||||
- `codex-flow-systemd-local`: local HTTP backend for durable flow dispatch,
|
||||
inspection, replay, and optional `systemd-run` execution.
|
||||
- `codex-discord-bridge`: Discord sidecar for routing Discord threads to Codex
|
||||
app-server threads, gateway delegation, and read-only flow inspection.
|
||||
39
docs/pages/reference/backend-http.md
Normal file
39
docs/pages/reference/backend-http.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
title: Backend HTTP API
|
||||
description: Endpoints used by systemd-local and compatible flow backends.
|
||||
---
|
||||
|
||||
# Backend HTTP API
|
||||
|
||||
HTTP backends accept generic `FlowEvent` objects and expose stored event and run
|
||||
state.
|
||||
|
||||
| Method | Path | Purpose |
|
||||
|--------|------|---------|
|
||||
| `POST` | `/events` | Accept one `FlowEvent`. |
|
||||
| `POST` | `/flow-events` | Compatibility alias for event dispatch. |
|
||||
| `GET` | `/events?limit=<n>` | List stored events. |
|
||||
| `GET` | `/events/<event-id>` | Inspect one event and its runs. |
|
||||
| `POST` | `/events/<event-id>/replay` | Start a new attempt for a stored event. |
|
||||
| `GET` | `/runs?eventId=<id>&status=<status>&limit=<n>` | List runs. |
|
||||
| `GET` | `/runs/<run-id>` | Inspect one run. |
|
||||
| `POST` | `/runs/<run-id>/cancel` | Cancel when supported by the backend. |
|
||||
| `GET` | `/healthz` | Health check. |
|
||||
|
||||
## Signing
|
||||
|
||||
When the backend has a shared secret, sign the exact JSON body with HMAC
|
||||
SHA-256 and send:
|
||||
|
||||
```text
|
||||
x-flow-signature-256: sha256=<hex digest>
|
||||
```
|
||||
|
||||
`x-patch-flow-signature-256` remains accepted by systemd-local for older Patch
|
||||
dispatchers.
|
||||
|
||||
## Compatibility
|
||||
|
||||
`@peezy.tech/flow-runtime/backend-client` normalizes compatible backend
|
||||
responses into the shared flow view model. Convex deployments should expose an
|
||||
app-owned HTTP adapter if they need generic HTTP inspection.
|
||||
39
docs/pages/reference/cli.md
Normal file
39
docs/pages/reference/cli.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
title: CLI reference
|
||||
description: Commands for local flow execution and backend operation.
|
||||
---
|
||||
|
||||
# CLI reference
|
||||
|
||||
## Local runner
|
||||
|
||||
```bash
|
||||
bun run flow list
|
||||
bun run flow fire --event event.json
|
||||
bun run flow run <flow> <step> --event event.json
|
||||
```
|
||||
|
||||
`flow fire` dispatches through the local client and runs every step whose
|
||||
trigger type and schema match the event.
|
||||
|
||||
## systemd-local backend
|
||||
|
||||
```bash
|
||||
bun run flow:backend serve --cwd <workspace>
|
||||
bun run flow:backend list-events --limit 20
|
||||
bun run flow:backend show-event <event-id>
|
||||
bun run flow:backend list-runs --status failed --limit 20
|
||||
bun run flow:backend show-run <run-id>
|
||||
bun run flow:backend replay-event <event-id> --wait
|
||||
```
|
||||
|
||||
## Common environment
|
||||
|
||||
| Variable | Purpose |
|
||||
|----------|---------|
|
||||
| `CODEX_FLOWS_MODE=code-mode` | Enables Code Mode flow steps and Peezy Codex defaults. |
|
||||
| `CODEX_APP_SERVER_CODEX_COMMAND` | Overrides the Codex command for stdio app-server launches. |
|
||||
| `CODEX_FLOW_BACKEND_URL` | HTTP backend URL for consumers such as Discord bridge inspection. |
|
||||
| `CODEX_FLOW_BACKEND_SECRET` | Shared HMAC secret for systemd-local dispatch. |
|
||||
| `CODEX_FLOW_BACKEND_EXECUTOR` | `direct` or `systemd-run`. |
|
||||
| `CODEX_FLOW_BACKEND_DATA_DIR` | Durable backend state directory. |
|
||||
143
docs/pages/reference/discord-bridge.md
Normal file
143
docs/pages/reference/discord-bridge.md
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
---
|
||||
title: Discord bridge
|
||||
description: Long-lived Discord sidecar for Codex app-server threads, gateway mode, and flow inspection.
|
||||
---
|
||||
|
||||
# Discord bridge
|
||||
|
||||
`codex-discord-bridge` is a private workspace app that exposes Discord as a
|
||||
transport over a Codex gateway backend. It is a user interface and operator
|
||||
sidecar, not part of the generic flow runtime.
|
||||
|
||||
Use it when a team wants to:
|
||||
|
||||
- start or resume Codex work from Discord
|
||||
- keep one gateway home channel as the operator surface
|
||||
- delegate work into separate Codex threads
|
||||
- expose selected Codex thread state through Discord commands
|
||||
- inspect codex-flow backend events and runs from the gateway
|
||||
|
||||
## Run it
|
||||
|
||||
The bridge can connect to an existing app-server WebSocket or start a local
|
||||
stdio app-server:
|
||||
|
||||
```bash
|
||||
bun ./apps/discord-bridge/src/index.ts \
|
||||
--app-server-url ws://127.0.0.1:3585 \
|
||||
--approval-policy never \
|
||||
--sandbox danger-full-access \
|
||||
--progress-mode commentary
|
||||
```
|
||||
|
||||
```bash
|
||||
bun ./apps/discord-bridge/src/index.ts --local-app-server
|
||||
```
|
||||
|
||||
Required configuration:
|
||||
|
||||
| Variable | Purpose |
|
||||
|----------|---------|
|
||||
| `CODEX_DISCORD_BOT_TOKEN` | Discord bot token. |
|
||||
| `CODEX_DISCORD_ALLOWED_USER_IDS` | Comma-separated Discord user allowlist. |
|
||||
|
||||
Common optional configuration:
|
||||
|
||||
| Variable | Purpose |
|
||||
|----------|---------|
|
||||
| `CODEX_DISCORD_ALLOWED_CHANNEL_IDS` | Parent channels where the bridge may respond. |
|
||||
| `CODEX_DISCORD_DIR` | Root directory for Codex thread workspaces. |
|
||||
| `CODEX_DISCORD_HOME_CHANNEL_ID` | Enables gateway mode for a Discord home channel. |
|
||||
| `CODEX_DISCORD_MAIN_THREAD_ID` | Existing Codex operator thread to resume for gateway mode. |
|
||||
| `CODEX_DISCORD_WORKSPACE_FORUM_CHANNEL_ID` | Optional workbench forum channel. |
|
||||
| `CODEX_DISCORD_TASK_THREADS_CHANNEL_ID` | Optional workbench task-thread channel. |
|
||||
| `CODEX_FLOW_BACKEND_URL` | Optional HTTP flow backend for read-only run/event inspection. |
|
||||
| `CODEX_DISCORD_HOOK_SPOOL_DIR` | Directory for Codex hook lifecycle events. |
|
||||
|
||||
## Gateway mode
|
||||
|
||||
Gateway mode keeps one Discord home channel as the compact operator surface and
|
||||
one Codex main thread as the model-visible operator memory. Normal messages in
|
||||
the home channel go to that main thread. The main thread receives privileged
|
||||
`codex_gateway` tools that can start, resume, read, and message delegated Codex
|
||||
sessions.
|
||||
|
||||
The gateway tools can also list flow events and runs when
|
||||
`CODEX_FLOW_BACKEND_URL` points at a compatible backend such as
|
||||
`codex-flow-systemd-local`.
|
||||
|
||||
## Backend contract
|
||||
|
||||
The Discord process has two sides:
|
||||
|
||||
- the Discord transport starts the bot, receives commands and messages, maps
|
||||
Discord channels and threads, registers slash commands, and sends Discord
|
||||
output
|
||||
- the gateway backend handles inbound events, owns Codex app-server lifecycle,
|
||||
starts and resumes Codex threads, manages goals, delegations, workbench state,
|
||||
persisted bridge state, and hook-spool wake behavior
|
||||
|
||||
The built-in backend is local. It preserves the current behavior while giving
|
||||
the bridge an explicit `CodexGatewayBackend` contract that another backend can
|
||||
implement later. The local backend only receives the outbound Discord
|
||||
presentation surface; transport startup, shutdown, inbound dispatch, and command
|
||||
registration stay in the Discord wrapper.
|
||||
|
||||
## Workbench channels
|
||||
|
||||
When both workbench channels are configured, the bridge keeps Discord workspace
|
||||
posts and task threads beside the home channel:
|
||||
|
||||
- workspace forum posts summarize known Codex threads for a workspace
|
||||
- `/threads` opens a private picker for active or recent Codex threads
|
||||
- selected threads open or reuse a Discord task thread
|
||||
- `/goals` can inspect or update thread goals from workspace or task threads
|
||||
|
||||
Both workbench channels must be configured together. Setting only one is
|
||||
invalid.
|
||||
|
||||
## Multi-surface routing
|
||||
|
||||
Single-surface `.env` configuration is the default. For multi-guild routing,
|
||||
put one surface entry in a workspace-owned `.codex/workspace.toml`:
|
||||
|
||||
```toml
|
||||
[[discord.gateway.surfaces]]
|
||||
key = "crypto"
|
||||
home_channel_id = "1503107617512919220"
|
||||
workspace_forum_channel_id = "1503107617512919221"
|
||||
task_threads_channel_id = "1503107617512919222"
|
||||
```
|
||||
|
||||
Each surface owns its home channel, workspace forum channel, and task-thread
|
||||
channel. Workspace files do not list workspace paths; the file's containing
|
||||
workspace is the route.
|
||||
|
||||
## Codex hooks
|
||||
|
||||
Install Codex hooks once for the runtime backing the gateway:
|
||||
|
||||
```bash
|
||||
codex-discord-bridge hook install
|
||||
```
|
||||
|
||||
For package-on-demand installs:
|
||||
|
||||
```bash
|
||||
codex-discord-bridge hook install --bunx
|
||||
codex-discord-bridge hook install --bunx-package @peezy.tech/codex-flows
|
||||
```
|
||||
|
||||
The hook command is intentionally dumb. It writes lifecycle-event files to the
|
||||
spool directory and lets Codex continue. The running bridge drains those files
|
||||
to update observed thread state, return delegated results, and wake the main
|
||||
operator thread when configured.
|
||||
|
||||
## Boundary
|
||||
|
||||
The Discord bridge may present flow backend events and runs, but it does not
|
||||
own the generic flow ABI. The gateway backend can read from
|
||||
`@peezy.tech/flow-runtime` backend clients for inspection, but flow packages
|
||||
still communicate through `FlowEvent`, `flow.toml`, and `FLOW_RESULT`;
|
||||
app-specific completion still belongs in the app that dispatched or consumed the
|
||||
event.
|
||||
63
docs/pages/reference/flow-client.md
Normal file
63
docs/pages/reference/flow-client.md
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
title: Flow client
|
||||
description: Common local and HTTP client API.
|
||||
---
|
||||
|
||||
# Flow client
|
||||
|
||||
The common client lives at `@peezy.tech/flow-runtime/client`.
|
||||
|
||||
```ts
|
||||
export type FlowClient = {
|
||||
listRuns(options?: FlowListRunsOptions): Promise<FlowRunList>;
|
||||
getRun(runId: string): Promise<FlowRunView>;
|
||||
listEvents(options?: FlowListEventsOptions): Promise<FlowEventList>;
|
||||
getEvent(eventId: string): Promise<FlowEventView>;
|
||||
dispatchEvent(event: FlowEvent, options?: FlowDispatchOptions): Promise<FlowDispatchResult>;
|
||||
replayEvent(eventId: string, options?: FlowReplayOptions): Promise<FlowReplayResult>;
|
||||
cancelRun(runId: string): Promise<FlowCancelResult>;
|
||||
};
|
||||
```
|
||||
|
||||
## Factory
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "local",
|
||||
cwd: process.cwd(),
|
||||
});
|
||||
```
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "http",
|
||||
baseUrl: "http://127.0.0.1:7345",
|
||||
hmacSecret: process.env.CODEX_FLOW_BACKEND_SECRET,
|
||||
});
|
||||
```
|
||||
|
||||
## Local options
|
||||
|
||||
```ts
|
||||
type LocalFlowClientOptions = {
|
||||
cwd: string;
|
||||
roots?: string[];
|
||||
env?: Record<string, string | undefined>;
|
||||
state?: false | "memory" | { kind: "file"; dataDir?: string };
|
||||
codex?: {
|
||||
mode?: "stdio";
|
||||
command?: string;
|
||||
codexHome?: string;
|
||||
stream?: boolean;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
Local mode runs matching steps synchronously. `cancelRun` is unsupported in
|
||||
local synchronous mode. `wait: false` is unsupported until a worker loop exists.
|
||||
|
||||
## View model
|
||||
|
||||
Run views expose process status, semantic result status, `effectiveStatus`,
|
||||
`needsAttention`, attempt records, output, latest output, result payload, and
|
||||
the raw backend or local record.
|
||||
53
docs/pages/reference/flow-event.md
Normal file
53
docs/pages/reference/flow-event.md
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
title: FlowEvent and FLOW_RESULT
|
||||
description: Stable event and result contracts shared by local and backend execution.
|
||||
---
|
||||
|
||||
# FlowEvent and FLOW_RESULT
|
||||
|
||||
`FlowEvent` is the ABI between products, clients, backends, and flow packages.
|
||||
|
||||
```ts
|
||||
type FlowEvent<T = unknown> = {
|
||||
id: string;
|
||||
type: string;
|
||||
source?: string;
|
||||
occurredAt?: string;
|
||||
receivedAt: string;
|
||||
payload: T;
|
||||
};
|
||||
```
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Required | Meaning |
|
||||
|-------|----------|---------|
|
||||
| `id` | Yes | Caller-owned idempotency key. Use deterministic ids for duplicate suppression. |
|
||||
| `type` | Yes | Trigger type matched by `flow.toml`. |
|
||||
| `source` | No | Product or subsystem that emitted the event. |
|
||||
| `occurredAt` | No | When the domain event happened. |
|
||||
| `receivedAt` | Yes | When the flow system accepted the event. |
|
||||
| `payload` | Yes | Domain payload validated by each step schema. |
|
||||
|
||||
## Result status
|
||||
|
||||
Steps print one final line:
|
||||
|
||||
```text
|
||||
FLOW_RESULT {"status":"completed","message":"done"}
|
||||
```
|
||||
|
||||
Known semantic statuses:
|
||||
|
||||
| Status | Meaning |
|
||||
|--------|---------|
|
||||
| `skipped` | Step intentionally did no work. |
|
||||
| `completed` | Step completed without durable changes or with expected work done. |
|
||||
| `changed` | Step completed and changed state. |
|
||||
| `needs_intervention` | A human decision or action is needed. |
|
||||
| `blocked` | External state blocks progress. |
|
||||
| `failed` | Step failed semantically even if the process exited cleanly. |
|
||||
|
||||
Backends also track process status such as `queued`, `running`, `completed`,
|
||||
`failed`, and `canceled`. Clients expose `effectiveStatus` and
|
||||
`needsAttention` to combine process and semantic result state.
|
||||
53
docs/pages/reference/flow-toml.md
Normal file
53
docs/pages/reference/flow-toml.md
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
title: flow.toml
|
||||
description: Manifest fields for codex-flow packages.
|
||||
---
|
||||
|
||||
# flow.toml
|
||||
|
||||
`flow.toml` declares a flow package and its steps.
|
||||
|
||||
```toml
|
||||
name = "example-flow"
|
||||
version = 1
|
||||
description = "Short operational purpose."
|
||||
|
||||
[config]
|
||||
commit = true
|
||||
|
||||
[[steps]]
|
||||
name = "do-work"
|
||||
runner = "bun"
|
||||
script = "exec/do-work.ts"
|
||||
timeout_ms = 300000
|
||||
|
||||
[steps.trigger]
|
||||
type = "upstream.release"
|
||||
schema = "schemas/upstream-release.schema.json"
|
||||
```
|
||||
|
||||
## Top-level fields
|
||||
|
||||
| Field | Type | Required | Meaning |
|
||||
|-------|------|----------|---------|
|
||||
| `name` | string | Yes | Stable flow package name. |
|
||||
| `version` | number | Yes | Manifest version for run records and workers. |
|
||||
| `description` | string | Yes | Human-readable purpose. |
|
||||
| `config` | table | No | Flow-owned configuration passed to steps. |
|
||||
|
||||
## Step fields
|
||||
|
||||
| Field | Type | Required | Meaning |
|
||||
|-------|------|----------|---------|
|
||||
| `name` | string | Yes | Step name within the flow. |
|
||||
| `runner` | `"bun"` or `"code-mode"` | Yes | Execution runner. |
|
||||
| `script` | string | Yes | Path relative to the flow root. |
|
||||
| `timeout_ms` | number | Yes | Step timeout. |
|
||||
| `cwd` | string | No | Working directory relative to the flow root. |
|
||||
|
||||
## Trigger fields
|
||||
|
||||
| Field | Type | Required | Meaning |
|
||||
|-------|------|----------|---------|
|
||||
| `type` | string | Yes | `FlowEvent.type` to match. |
|
||||
| `schema` | string | Yes | JSON Schema file for `FlowEvent.payload`. |
|
||||
42
docs/pages/reference/packages.md
Normal file
42
docs/pages/reference/packages.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
title: Packages
|
||||
description: Public and workspace packages in the codex-flow stack.
|
||||
---
|
||||
|
||||
# Packages
|
||||
|
||||
## `@peezy.tech/codex-flows`
|
||||
|
||||
Low-level Codex app-server client package. It exports:
|
||||
|
||||
- app-server JSON-RPC client and stdio/WebSocket transports
|
||||
- browser-safe WebSocket transport
|
||||
- framework-agnostic app-server flow helpers
|
||||
- auth helpers for account login/status/usage
|
||||
- workbench reducers and request descriptors
|
||||
- generated Codex app-server protocol types
|
||||
|
||||
## `@peezy.tech/flow-runtime`
|
||||
|
||||
Runtime package for:
|
||||
|
||||
- loading `flow.toml`
|
||||
- discovering `.codex/flows/*` before `flows/*`
|
||||
- matching events with trigger type and JSON Schema
|
||||
- running Bun and gated Code Mode steps
|
||||
- local and HTTP flow clients
|
||||
- backend response normalization
|
||||
|
||||
## `@peezy.tech/flow-backend-convex`
|
||||
|
||||
Convex component for generic flow control-plane state: manifests, events, runs,
|
||||
attempts, leases, output chunks, and final result payloads.
|
||||
|
||||
## Workspace apps
|
||||
|
||||
- `codex-flow-runner`: local CLI for listing, firing, and running steps.
|
||||
- `codex-flow-systemd-local`: local durable HTTP backend and CLI.
|
||||
- [`codex-discord-bridge`](discord-bridge): Discord-to-Codex bridge with
|
||||
gateway delegation and read-only flow inspection tools.
|
||||
- `web`: browser UI for Codex app-server threads.
|
||||
- `codex-app-cli`: JSON-RPC CLI for app-server actions.
|
||||
72
docs/pages/tutorials/dispatch-release-event.md
Normal file
72
docs/pages/tutorials/dispatch-release-event.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
title: Dispatch a release event
|
||||
description: Use the shared flow client to trigger release automation from product code.
|
||||
---
|
||||
|
||||
# Dispatch a release event
|
||||
|
||||
This tutorial shows the product-facing path: build a deterministic event, select
|
||||
local or HTTP execution, and dispatch it through the same flow client.
|
||||
|
||||
## 1. Build a deterministic event
|
||||
|
||||
Products own event ids. Use a stable id when duplicate suppression matters:
|
||||
|
||||
```ts
|
||||
const event = {
|
||||
id: "patch:upstream.release:openai/codex:rust-v1.2.3",
|
||||
type: "upstream.release",
|
||||
source: "patch",
|
||||
receivedAt: new Date().toISOString(),
|
||||
payload: {
|
||||
repo: "openai/codex",
|
||||
tag: "rust-v1.2.3",
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
Normal dispatch is idempotent by `event.id`. Replays intentionally create a new
|
||||
attempt for the stored event.
|
||||
|
||||
## 2. Dispatch locally during CLI work
|
||||
|
||||
```ts
|
||||
import { createFlowClient } from "@peezy.tech/flow-runtime/client";
|
||||
|
||||
const flows = createFlowClient({
|
||||
mode: "local",
|
||||
cwd: process.cwd(),
|
||||
});
|
||||
|
||||
await flows.dispatchEvent(event);
|
||||
```
|
||||
|
||||
Local mode discovers `.codex/flows/*` before `flows/*`, executes matching steps
|
||||
synchronously, and keeps in-memory state by default. Use
|
||||
`state: { kind: "file" }` when local ids and replay need to survive process
|
||||
restart.
|
||||
|
||||
## 3. Dispatch to an HTTP backend in service mode
|
||||
|
||||
```ts
|
||||
const flows = createFlowClient({
|
||||
mode: "http",
|
||||
baseUrl: "http://127.0.0.1:7345",
|
||||
hmacSecret: process.env.PATCH_FLOW_DISPATCH_SECRET,
|
||||
});
|
||||
|
||||
await flows.dispatchEvent(event);
|
||||
```
|
||||
|
||||
HTTP mode speaks the backend `/events`, `/runs`, replay, and cancel surface.
|
||||
It inherits the backend's durable idempotency and run history.
|
||||
|
||||
## 4. Inspect the result
|
||||
|
||||
```ts
|
||||
const flowEvent = await flows.getEvent(event.id);
|
||||
const runs = await flows.listRuns({ eventId: event.id });
|
||||
```
|
||||
|
||||
Run views include process status, semantic `FLOW_RESULT` status,
|
||||
`effectiveStatus`, attention flags, attempts, output, and result payloads.
|
||||
90
docs/pages/tutorials/first-flow.md
Normal file
90
docs/pages/tutorials/first-flow.md
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
---
|
||||
title: Build your first flow
|
||||
description: Create a minimal Bun-backed flow package and run it locally.
|
||||
---
|
||||
|
||||
# Build your first flow
|
||||
|
||||
This tutorial creates a flow package that handles a `demo.hello` event and
|
||||
prints a `FLOW_RESULT`.
|
||||
|
||||
## 1. Create the files
|
||||
|
||||
Flow packages live under `flows/*` while installed copies can live under
|
||||
`.codex/flows/*`. Create this structure:
|
||||
|
||||
```text
|
||||
flows/hello-flow/
|
||||
flow.toml
|
||||
schemas/hello.schema.json
|
||||
exec/hello.ts
|
||||
```
|
||||
|
||||
## 2. Write the manifest
|
||||
|
||||
```toml
|
||||
name = "hello-flow"
|
||||
version = 1
|
||||
description = "Greets a person from a demo event."
|
||||
|
||||
[[steps]]
|
||||
name = "hello"
|
||||
runner = "bun"
|
||||
script = "exec/hello.ts"
|
||||
timeout_ms = 30000
|
||||
|
||||
[steps.trigger]
|
||||
type = "demo.hello"
|
||||
schema = "schemas/hello.schema.json"
|
||||
```
|
||||
|
||||
## 3. Add the event schema
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "object",
|
||||
"required": ["name"],
|
||||
"properties": {
|
||||
"name": { "type": "string" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 4. Implement the step
|
||||
|
||||
```ts
|
||||
const context = JSON.parse(await Bun.stdin.text());
|
||||
const name = context.flow.event.payload.name;
|
||||
|
||||
console.log(`FLOW_RESULT ${JSON.stringify({
|
||||
status: "completed",
|
||||
message: `hello ${name}`,
|
||||
})}`);
|
||||
```
|
||||
|
||||
The runner sends JSON on stdin. The step must print a final line beginning with
|
||||
`FLOW_RESULT ` followed by JSON.
|
||||
|
||||
## 5. Fire the event
|
||||
|
||||
Create `event.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "demo:hello:ada",
|
||||
"type": "demo.hello",
|
||||
"source": "tutorial",
|
||||
"receivedAt": "2026-05-15T00:00:00.000Z",
|
||||
"payload": {
|
||||
"name": "Ada"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Run all matching steps:
|
||||
|
||||
```bash
|
||||
bun run flow fire --event event.json
|
||||
```
|
||||
|
||||
You should see the event id and one result for `hello-flow/hello`.
|
||||
60
docs/tome.config.js
Normal file
60
docs/tome.config.js
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/** @type {import('@tomehq/core').TomeConfig} */
|
||||
export default {
|
||||
name: "codex-flow",
|
||||
basePath: "/docs",
|
||||
theme: {
|
||||
preset: "editorial",
|
||||
mode: "auto",
|
||||
accent: "#2563eb",
|
||||
},
|
||||
navigation: [
|
||||
{ group: "Overview", pages: ["index"] },
|
||||
{
|
||||
group: "Tutorials",
|
||||
pages: [
|
||||
"tutorials/first-flow",
|
||||
"tutorials/dispatch-release-event",
|
||||
],
|
||||
},
|
||||
{
|
||||
group: "Guides",
|
||||
pages: [
|
||||
"guides/author-flow-package",
|
||||
"guides/run-flows-locally",
|
||||
"guides/dispatch-and-replay-events",
|
||||
"guides/operate-systemd-local",
|
||||
"guides/use-convex-backend",
|
||||
"guides/enable-code-mode",
|
||||
"guides/operate-codex-release-flows",
|
||||
"guides/run-discord-local-backend",
|
||||
],
|
||||
},
|
||||
{
|
||||
group: "Reference",
|
||||
pages: [
|
||||
"reference/flow-event",
|
||||
"reference/flow-toml",
|
||||
"reference/flow-client",
|
||||
"reference/backend-http",
|
||||
"reference/cli",
|
||||
"reference/discord-bridge",
|
||||
"reference/packages",
|
||||
],
|
||||
},
|
||||
{
|
||||
group: "Concepts",
|
||||
pages: [
|
||||
"concepts/architecture",
|
||||
"concepts/backends",
|
||||
"concepts/domain-boundaries",
|
||||
"concepts/gateway-backends",
|
||||
"concepts/gateway-backend-process",
|
||||
"concepts/code-mode",
|
||||
],
|
||||
},
|
||||
],
|
||||
topNav: [
|
||||
{ label: "GitHub", href: "https://github.com/peezy-tech/codex-flows" },
|
||||
{ label: "Development", href: "https://github.com/peezy-tech/codex-flows/blob/main/DEVELOP.md" },
|
||||
],
|
||||
};
|
||||
|
|
@ -11,7 +11,8 @@
|
|||
"workspaces": {
|
||||
"packages": [
|
||||
"apps/*",
|
||||
"packages/*"
|
||||
"packages/*",
|
||||
"docs"
|
||||
],
|
||||
"catalog": {
|
||||
"@base-ui/react": "^1.4.1",
|
||||
|
|
@ -36,10 +37,13 @@
|
|||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "bun run --filter @peezy.tech/codex-flows build && bun run --filter @peezy.tech/flow-runtime build && bun run --filter @peezy.tech/flow-backend-convex build && bun run --filter @peezy.tech/codex-opencode-go-router build && bun run --filter @workspace/ui build && bun run --filter codex-app-cli build && bun run --filter codex-discord-bridge build && bun run --filter codex-flow-systemd-local build && bun run --filter codex-flow-runner build && bun run --filter web build",
|
||||
"build": "bun run --filter @peezy.tech/codex-flows build && bun run --filter @peezy.tech/flow-runtime build && bun run --filter @peezy.tech/flow-backend-convex build && bun run --filter @peezy.tech/codex-opencode-go-router build && bun run --filter @workspace/ui build && bun run --filter codex-app-cli build && bun run --filter codex-discord-bridge build && bun run --filter codex-flow-systemd-local build && bun run --filter codex-flow-runner build && bun run --filter web build && bun run --filter @peezy.tech/codex-flow-docs build",
|
||||
"check:types": "bun run --workspaces check:types",
|
||||
"codex:update": "bun scripts/run-codex-release-update-thread.ts",
|
||||
"dev": "bun run --filter web dev",
|
||||
"docs:build": "bun run --filter @peezy.tech/codex-flow-docs build",
|
||||
"docs:deploy": "bun run --filter @peezy.tech/codex-flow-docs deploy",
|
||||
"docs:dev": "bun run --filter @peezy.tech/codex-flow-docs dev",
|
||||
"dev:web": "bun run --filter web dev",
|
||||
"flow": "bun apps/flow-runner/src/index.ts",
|
||||
"flow:backend": "bun apps/flow-backend-systemd-local/src/index.ts",
|
||||
|
|
|
|||
|
|
@ -68,5 +68,5 @@ The self-test starts a fake OpenCode Go upstream and verifies plain messages, fu
|
|||
|
||||
## Development
|
||||
|
||||
See `docs/development-flow.md`. This package is private and is not included in
|
||||
See `DEVELOP.md`. This package is private and is not included in
|
||||
the public npm publish workflow.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue