From b549004678d141666d7ff099d6b3a0750718eacc Mon Sep 17 00:00:00 2001 From: matamune Date: Fri, 15 May 2026 22:49:49 +0000 Subject: [PATCH] Add Tome docs package --- README.md | 25 +- docs/development-flow.md => RELEASE.md | 0 bun.lock | 538 ++++++++++++++++++ docs/.gitignore | 1 + docs/.tome/entry.tsx | 3 + docs/2026-05-15-flow-backend-handoff.md | 137 ----- docs/2026-05-15-flow-client-design.md | 399 ------------- docs/flows.md | 280 --------- docs/index.html | 22 + docs/package.json | 18 + docs/pages/concepts/architecture.md | 36 ++ docs/pages/concepts/backends.md | 39 ++ docs/pages/concepts/code-mode.md | 26 + docs/pages/concepts/domain-boundaries.md | 39 ++ .../pages/concepts/gateway-backend-process.md | 54 ++ docs/pages/concepts/gateway-backends.md | 28 + docs/pages/guides/author-flow-package.md | 76 +++ .../guides/dispatch-and-replay-events.md | 57 ++ docs/pages/guides/enable-code-mode.md | 42 ++ .../guides/operate-codex-release-flows.md | 71 +++ docs/pages/guides/operate-systemd-local.md | 61 ++ .../pages/guides/run-discord-local-backend.md | 79 +++ docs/pages/guides/run-flows-locally.md | 68 +++ docs/pages/guides/use-convex-backend.md | 46 ++ docs/pages/index.md | 53 ++ docs/pages/reference/backend-http.md | 39 ++ docs/pages/reference/cli.md | 39 ++ docs/pages/reference/discord-bridge.md | 143 +++++ docs/pages/reference/flow-client.md | 63 ++ docs/pages/reference/flow-event.md | 53 ++ docs/pages/reference/flow-toml.md | 53 ++ docs/pages/reference/packages.md | 42 ++ .../pages/tutorials/dispatch-release-event.md | 72 +++ docs/pages/tutorials/first-flow.md | 90 +++ docs/tome.config.js | 60 ++ package.json | 8 +- packages/codex-opencode-go-router/README.md | 2 +- 37 files changed, 2039 insertions(+), 823 deletions(-) rename docs/development-flow.md => RELEASE.md (100%) create mode 100644 docs/.gitignore create mode 100644 docs/.tome/entry.tsx delete mode 100644 docs/2026-05-15-flow-backend-handoff.md delete mode 100644 docs/2026-05-15-flow-client-design.md delete mode 100644 docs/flows.md create mode 100644 docs/index.html create mode 100644 docs/package.json create mode 100644 docs/pages/concepts/architecture.md create mode 100644 docs/pages/concepts/backends.md create mode 100644 docs/pages/concepts/code-mode.md create mode 100644 docs/pages/concepts/domain-boundaries.md create mode 100644 docs/pages/concepts/gateway-backend-process.md create mode 100644 docs/pages/concepts/gateway-backends.md create mode 100644 docs/pages/guides/author-flow-package.md create mode 100644 docs/pages/guides/dispatch-and-replay-events.md create mode 100644 docs/pages/guides/enable-code-mode.md create mode 100644 docs/pages/guides/operate-codex-release-flows.md create mode 100644 docs/pages/guides/operate-systemd-local.md create mode 100644 docs/pages/guides/run-discord-local-backend.md create mode 100644 docs/pages/guides/run-flows-locally.md create mode 100644 docs/pages/guides/use-convex-backend.md create mode 100644 docs/pages/index.md create mode 100644 docs/pages/reference/backend-http.md create mode 100644 docs/pages/reference/cli.md create mode 100644 docs/pages/reference/discord-bridge.md create mode 100644 docs/pages/reference/flow-client.md create mode 100644 docs/pages/reference/flow-event.md create mode 100644 docs/pages/reference/flow-toml.md create mode 100644 docs/pages/reference/packages.md create mode 100644 docs/pages/tutorials/dispatch-release-event.md create mode 100644 docs/pages/tutorials/first-flow.md create mode 100644 docs/tome.config.js diff --git a/README.md b/README.md index c556e8b..94a8c01 100644 --- a/README.md +++ b/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 diff --git a/docs/development-flow.md b/RELEASE.md similarity index 100% rename from docs/development-flow.md rename to RELEASE.md diff --git a/bun.lock b/bun.lock index b10accc..377b3ae 100644 --- a/bun.lock +++ b/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=="], diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..89f9ac0 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +out/ diff --git a/docs/.tome/entry.tsx b/docs/.tome/entry.tsx new file mode 100644 index 0000000..9f460ef --- /dev/null +++ b/docs/.tome/entry.tsx @@ -0,0 +1,3 @@ +// Bootstraps the Tome documentation shell. +// Configure the site in tome.config.js. +import "@tomehq/theme/entry"; diff --git a/docs/2026-05-15-flow-backend-handoff.md b/docs/2026-05-15-flow-backend-handoff.md deleted file mode 100644 index ab52cc1..0000000 --- a/docs/2026-05-15-flow-backend-handoff.md +++ /dev/null @@ -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. diff --git a/docs/2026-05-15-flow-client-design.md b/docs/2026-05-15-flow-client-design.md deleted file mode 100644 index 3e729f3..0000000 --- a/docs/2026-05-15-flow-client-design.md +++ /dev/null @@ -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; - getRun(runId: string): Promise; - listEvents(options?: FlowListEventsOptions): Promise; - getEvent(eventId: string): Promise; - dispatchEvent(event: FlowEvent, options?: FlowDispatchOptions): Promise; - replayEvent(eventId: string, options?: FlowReplayOptions): Promise; - cancelRun(runId: string): Promise; -}; -``` - -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; - 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 diff --git a/docs/flows.md b/docs/flows.md deleted file mode 100644 index ea8ca2d..0000000 --- a/docs/flows.md +++ /dev/null @@ -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 = { - 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=`: list stored events -- `GET /events/`: inspect a stored event and its runs -- `POST /events//replay`: start a new run attempt for a stored event -- `GET /runs?eventId=&status=&limit=`: inspect recorded runs -- `GET /runs/`: 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//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. diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..19c784e --- /dev/null +++ b/docs/index.html @@ -0,0 +1,22 @@ + + + + + + codex-flow + + + + + + +
+ + + diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..ae58642 --- /dev/null +++ b/docs/package.json @@ -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:" + } +} diff --git a/docs/pages/concepts/architecture.md b/docs/pages/concepts/architecture.md new file mode 100644 index 0000000..1fe445a --- /dev/null +++ b/docs/pages/concepts/architecture.md @@ -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. diff --git a/docs/pages/concepts/backends.md b/docs/pages/concepts/backends.md new file mode 100644 index 0000000..7404e3d --- /dev/null +++ b/docs/pages/concepts/backends.md @@ -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. diff --git a/docs/pages/concepts/code-mode.md b/docs/pages/concepts/code-mode.md new file mode 100644 index 0000000..b57d261 --- /dev/null +++ b/docs/pages/concepts/code-mode.md @@ -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. diff --git a/docs/pages/concepts/domain-boundaries.md b/docs/pages/concepts/domain-boundaries.md new file mode 100644 index 0000000..b83e5ac --- /dev/null +++ b/docs/pages/concepts/domain-boundaries.md @@ -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. diff --git a/docs/pages/concepts/gateway-backend-process.md b/docs/pages/concepts/gateway-backend-process.md new file mode 100644 index 0000000..114304d --- /dev/null +++ b/docs/pages/concepts/gateway-backend-process.md @@ -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. diff --git a/docs/pages/concepts/gateway-backends.md b/docs/pages/concepts/gateway-backends.md new file mode 100644 index 0000000..5a4b213 --- /dev/null +++ b/docs/pages/concepts/gateway-backends.md @@ -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. diff --git a/docs/pages/guides/author-flow-package.md b/docs/pages/guides/author-flow-package.md new file mode 100644 index 0000000..76ede47 --- /dev/null +++ b/docs/pages/guides/author-flow-package.md @@ -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. diff --git a/docs/pages/guides/dispatch-and-replay-events.md b/docs/pages/guides/dispatch-and-replay-events.md new file mode 100644 index 0000000..e1cd456 --- /dev/null +++ b/docs/pages/guides/dispatch-and-replay-events.md @@ -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`. diff --git a/docs/pages/guides/enable-code-mode.md b/docs/pages/guides/enable-code-mode.md new file mode 100644 index 0000000..c69f8bf --- /dev/null +++ b/docs/pages/guides/enable-code-mode.md @@ -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. diff --git a/docs/pages/guides/operate-codex-release-flows.md b/docs/pages/guides/operate-codex-release-flows.md new file mode 100644 index 0000000..cd4d4ac --- /dev/null +++ b/docs/pages/guides/operate-codex-release-flows.md @@ -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. diff --git a/docs/pages/guides/operate-systemd-local.md b/docs/pages/guides/operate-systemd-local.md new file mode 100644 index 0000000..0d9a4e6 --- /dev/null +++ b/docs/pages/guides/operate-systemd-local.md @@ -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. diff --git a/docs/pages/guides/run-discord-local-backend.md b/docs/pages/guides/run-discord-local-backend.md new file mode 100644 index 0000000..88ef5ae --- /dev/null +++ b/docs/pages/guides/run-discord-local-backend.md @@ -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. diff --git a/docs/pages/guides/run-flows-locally.md b/docs/pages/guides/run-flows-locally.md new file mode 100644 index 0000000..e06cdfd --- /dev/null +++ b/docs/pages/guides/run-flows-locally.md @@ -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. diff --git a/docs/pages/guides/use-convex-backend.md b/docs/pages/guides/use-convex-backend.md new file mode 100644 index 0000000..7d08943 --- /dev/null +++ b/docs/pages/guides/use-convex-backend.md @@ -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. diff --git a/docs/pages/index.md b/docs/pages/index.md new file mode 100644 index 0000000..38f219e --- /dev/null +++ b/docs/pages/index.md @@ -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. diff --git a/docs/pages/reference/backend-http.md b/docs/pages/reference/backend-http.md new file mode 100644 index 0000000..6a7c7df --- /dev/null +++ b/docs/pages/reference/backend-http.md @@ -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=` | List stored events. | +| `GET` | `/events/` | Inspect one event and its runs. | +| `POST` | `/events//replay` | Start a new attempt for a stored event. | +| `GET` | `/runs?eventId=&status=&limit=` | List runs. | +| `GET` | `/runs/` | Inspect one run. | +| `POST` | `/runs//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= +``` + +`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. diff --git a/docs/pages/reference/cli.md b/docs/pages/reference/cli.md new file mode 100644 index 0000000..377a62f --- /dev/null +++ b/docs/pages/reference/cli.md @@ -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 --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 +bun run flow:backend list-events --limit 20 +bun run flow:backend show-event +bun run flow:backend list-runs --status failed --limit 20 +bun run flow:backend show-run +bun run flow:backend replay-event --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. | diff --git a/docs/pages/reference/discord-bridge.md b/docs/pages/reference/discord-bridge.md new file mode 100644 index 0000000..c492091 --- /dev/null +++ b/docs/pages/reference/discord-bridge.md @@ -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. diff --git a/docs/pages/reference/flow-client.md b/docs/pages/reference/flow-client.md new file mode 100644 index 0000000..a0d9abc --- /dev/null +++ b/docs/pages/reference/flow-client.md @@ -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; + getRun(runId: string): Promise; + listEvents(options?: FlowListEventsOptions): Promise; + getEvent(eventId: string): Promise; + dispatchEvent(event: FlowEvent, options?: FlowDispatchOptions): Promise; + replayEvent(eventId: string, options?: FlowReplayOptions): Promise; + cancelRun(runId: string): Promise; +}; +``` + +## 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; + 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. diff --git a/docs/pages/reference/flow-event.md b/docs/pages/reference/flow-event.md new file mode 100644 index 0000000..623d778 --- /dev/null +++ b/docs/pages/reference/flow-event.md @@ -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 = { + 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. diff --git a/docs/pages/reference/flow-toml.md b/docs/pages/reference/flow-toml.md new file mode 100644 index 0000000..8c41014 --- /dev/null +++ b/docs/pages/reference/flow-toml.md @@ -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`. | diff --git a/docs/pages/reference/packages.md b/docs/pages/reference/packages.md new file mode 100644 index 0000000..a72d2ec --- /dev/null +++ b/docs/pages/reference/packages.md @@ -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. diff --git a/docs/pages/tutorials/dispatch-release-event.md b/docs/pages/tutorials/dispatch-release-event.md new file mode 100644 index 0000000..35def3f --- /dev/null +++ b/docs/pages/tutorials/dispatch-release-event.md @@ -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. diff --git a/docs/pages/tutorials/first-flow.md b/docs/pages/tutorials/first-flow.md new file mode 100644 index 0000000..8973a24 --- /dev/null +++ b/docs/pages/tutorials/first-flow.md @@ -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`. diff --git a/docs/tome.config.js b/docs/tome.config.js new file mode 100644 index 0000000..69d4073 --- /dev/null +++ b/docs/tome.config.js @@ -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" }, + ], +}; diff --git a/package.json b/package.json index eebc28f..3c7daf9 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/codex-opencode-go-router/README.md b/packages/codex-opencode-go-router/README.md index dd4076d..ad030ab 100644 --- a/packages/codex-opencode-go-router/README.md +++ b/packages/codex-opencode-go-router/README.md @@ -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.