History

small refactor

Rhys Sullivan committed 9 months ago

Commit 0d995431 parent ae1b033114 files · +2799 −137Browse files

Unified · Split

114 files
  1. README.md +1 −1
  2. assistant/packages/bot/tsconfig.json +1 −1
  3. assistant/packages/server/tsconfig.json +1 −1
  4. bun.lock +571 −25
  5. dev.ts +1 −1
  6. executor/README.md +11 −7
  7. executor/convex.json +1 −1
  8. executor/executor.ts +1 −1
  9. executor/infra/.gitignore +2 −0
  10. executor/infra/README.md +122 −0
  11. executor/infra/package.json +23 −0
  12. executor/infra/sst.config.ts +572 −0
  13. executor/infra/tsconfig.json +12 −0
  14. executor/package.json +9 −0
  15. executor/packages/convex/_generated/api.d.ts +0 −0
  16. executor/packages/convex/_generated/api.js +0 −0
  17. executor/packages/convex/_generated/dataModel.d.ts +0 −0
  18. executor/packages/convex/_generated/server.d.ts +0 −0
  19. executor/packages/convex/_generated/server.js +0 −0
  20. executor/packages/convex/access-controls.test.ts +0 −0
  21. executor/packages/convex/accounts.ts +1 −1
  22. executor/packages/convex/anonymousOauth.ts +0 −0
  23. executor/packages/convex/app.ts +1 −1
  24. executor/packages/convex/auth.config.ts +0 −0
  25. executor/packages/convex/auth.ts +1 −1
  26. executor/packages/convex/billing.ts +2 −2
  27. executor/packages/convex/billingInternal.ts +1 −1
  28. executor/packages/convex/billingSync.ts +0 −0
  29. executor/packages/convex/convex.config.ts +0 −0
  30. executor/packages/convex/credentialsNode.ts +0 −0
  31. executor/packages/convex/database.test.ts +0 −0
  32. executor/packages/convex/database.ts +2 −2
  33. executor/packages/convex/executor-mcp.e2e.test.ts +0 −0
  34. executor/packages/convex/executor.ts +4 −4
  35. executor/packages/convex/executorNode.github-profile.e2e.test.ts +0 −0
  36. executor/packages/convex/executorNode.ts +12 −12
  37. executor/packages/convex/http.ts +2 −2
  38. executor/packages/convex/invites.ts +1 −1
  39. executor/packages/convex/mcp-run-code-oom.e2e.test.ts +0 −0
  40. executor/packages/convex/mcpNode.ts +3 −3
  41. executor/packages/convex/migrations.ts +0 −0
  42. executor/packages/convex/openApiSpecCache.test.ts +0 −0
  43. executor/packages/convex/openApiSpecCache.ts +0 −0
  44. executor/packages/convex/organizationMembers.ts +2 −2
  45. executor/packages/convex/organizations.ts +3 −3
  46. executor/packages/convex/package.json +0 −0
  47. executor/packages/convex/runtimeCallbacks.ts +1 −1
  48. executor/packages/convex/schema.ts +0 −0
  49. executor/packages/convex/test-fixtures/executorNode.oomFixture.ts +0 −0
  50. executor/packages/convex/workspace.ts +1 −1
  51. executor/packages/convex/workspaceAuthInternal.ts +1 −1
  52. executor/packages/convex/workspaceToolCache.ts +0 −0
  53. executor/packages/convex/workspaces.ts +3 −3
  54. executor/packages/core/package.json +12 −0
  55. executor/packages/core/src/adapters/in-process-execution-adapter.test.ts +2 −2
  56. executor/packages/core/src/adapters/in-process-execution-adapter.ts +1 −1
  57. executor/packages/core/src/anonymous-oauth.test.ts +0 −0
  58. executor/packages/core/src/anonymous-oauth.ts +0 −0
  59. executor/packages/core/src/anonymous-session.ts +0 −0
  60. executor/packages/core/src/convex-oauth-storage.ts +1 −1
  61. executor/packages/core/src/credential-providers.test.ts +1 −1
  62. executor/packages/core/src/credential-providers.ts +0 −0
  63. executor/packages/core/src/dts-loader.test.ts +1 −1
  64. executor/packages/core/src/dts-loader.ts +0 −0
  65. executor/packages/core/src/events.ts +0 −0
  66. executor/packages/core/src/execution-constants.ts +0 −0
  67. executor/packages/core/src/function-builders.ts +1 −1
  68. executor/packages/core/src/identity.ts +2 −2
  69. executor/packages/core/src/managed-runtime.ts +0 −0
  70. executor/packages/core/src/mcp-elicitation.demo.test.ts +0 −0
  71. executor/packages/core/src/mcp-gateway-oauth-sdk.test.ts +2 −2
  72. executor/packages/core/src/mcp-gateway-oauth.test.ts +0 −0
  73. executor/packages/core/src/mcp-server.test.ts +2 −2
  74. executor/packages/core/src/mcp-server.ts +2 −2
  75. executor/packages/core/src/openapi-cache.test.ts +1 −1
  76. executor/packages/core/src/openapi-real-specs.test.ts +1 −1
  77. executor/packages/core/src/runtimes/cloudflare-worker-loader-runtime.test.ts +5 −5
  78. executor/packages/core/src/runtimes/cloudflare-worker-loader-runtime.ts +1 −1
  79. executor/packages/core/src/runtimes/runtime-catalog.ts +0 −0
  80. executor/packages/core/src/runtimes/runtime-core.test.ts +3 −3
  81. executor/packages/core/src/runtimes/runtime-core.ts +1 −1
  82. executor/packages/core/src/runtimes/transpile.ts +0 −0
  83. executor/packages/core/src/slug.ts +0 −0
  84. executor/packages/core/src/tool-discovery.test.ts +2 −2
  85. executor/packages/core/src/tool-discovery.ts +1 −1
  86. executor/packages/core/src/tool-sources.test.ts +3 −3
  87. executor/packages/core/src/tool-sources.ts +1 −1
  88. executor/packages/core/src/tools.ts +0 −0
  89. executor/packages/core/src/type-hints.test.ts +1 −1
  90. executor/packages/core/src/type-hints.ts +0 −0
  91. executor/packages/core/src/typechecker.test.ts +1 −1
  92. executor/packages/core/src/typechecker.ts +0 −0
  93. executor/packages/core/src/types.ts +1 −1
  94. executor/packages/core/src/utils.ts +0 −0
  95. executor/packages/core/src/workspace-tool-cache.test.ts +6 −6
  96. executor/packages/core/tsconfig.json +13 −0
  97. executor/packages/runner-node/package.json +12 −0
  98. executor/packages/runner-node/src/index.ts +13 −0
  99. executor/packages/runner-node/tsconfig.json +11 −0
  100. executor/packages/runner-sandbox-host/.dev.vars.example +0 −0
  101. executor/packages/runner-sandbox-host/package.json +2 −1
  102. executor/packages/runner-sandbox-host/src/index.ts +4 −9
  103. executor/packages/runner-sandbox-host/src/isolate/globals.isolate.js +0 −0
  104. executor/packages/runner-sandbox-host/src/isolate/harness.isolate.js +0 −0
  105. executor/packages/runner-sandbox-host/tsconfig.json +5 −1
  106. executor/packages/runner-sandbox-host/wrangler.jsonc +0 −0
  107. executor/scripts/deploy-prod.test.ts +23 −0
  108. executor/scripts/deploy-prod.ts +371 −0
  109. executor/scripts/doctor-prod.test.ts +80 −0
  110. executor/scripts/doctor-prod.ts +382 −0
  111. executor/scripts/setup-prod-cloudflare.ts +290 −0
  112. executor/scripts/setup-prod-env.ts +165 −0
  113. executor/tsconfig.json +3 −3
  114. package.json +1 −1
README.md+1−1
@@ -11,8 +11,8 @@ Most active platform work is in `executor/`, but root scripts are set up to run · 10 unmodified lines
1111
1212 The root `package.json` wires workspaces for:
1313
14−- `executor/convex`
1514 - `executor/apps/*`
15+- `executor/packages/*`
1616 - `assistant`
1717 - `assistant/packages/*`
1818
assistant/packages/bot/tsconfig.json+1−1
@@ -8,7 +8,7 @@ · 7 unmodified lines
88 "esModuleInterop": true,
99 "skipLibCheck": true,
1010 "paths": {
11− "@executor/convex/*": ["../../../executor/convex/*"]
11+ "@executor/convex/*": ["../../../executor/packages/convex/*"]
1212 }
1313 },
1414 "include": ["src"]
assistant/packages/server/tsconfig.json+1−1
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 "esModuleInterop": true,
88 "skipLibCheck": true,
99 "paths": {
10− "@executor/convex/*": ["../../../executor/convex/*"]
10+ "@executor/convex/*": ["../../../executor/packages/convex/*"]
1111 }
1212 },
1313 "include": ["src"]
bun.lock+571−25
@@ -126,15 +126,45 @@ · 125 unmodified lines
126126 "typescript": "^5",
127127 },
128128 },
129− "executor/convex": {
129+ "executor/infra": {
130+ "name": "executor-infra",
131+ "dependencies": {
132+ "@pulumi/command": "^1.1.3",
133+ "@pulumi/pulumi": "^3.220.0",
134+ "@pulumiverse/vercel": "^4.5.0",
135+ "pulumi-stripe": "^0.0.26",
136+ "sst": "^3.17.38",
137+ },
138+ "devDependencies": {
139+ "@types/node": "^24.6.2",
140+ "typescript": "^5.9.3",
141+ },
142+ },
143+ "executor/packages/convex": {
130144 "name": "@executor/convex",
131145 "version": "0.0.1",
132146 },
133− "executor/packages/sandbox-host": {
134− "name": "@executor/sandbox-host",
147+ "executor/packages/core": {
148+ "name": "@executor/core",
149+ "version": "0.1.0",
150+ "devDependencies": {
151+ "typescript": "^5.9.3",
152+ },
153+ },
154+ "executor/packages/runner-node": {
155+ "name": "@executor/runner-node",
156+ "version": "0.1.0",
157+ "devDependencies": {
158+ "typescript": "^5.9.3",
159+ },
160+ },
161+ "executor/packages/runner-sandbox-host": {
162+ "name": "@executor/runner-sandbox-host",
135163 "version": "0.1.0",
136164 "dependencies": {
165+ "@executor/convex": "workspace:*",
137166 "better-result": "^2.7.0",
167+ "convex": "^1.31.7",
138168 },
139169 "devDependencies": {
140170 "@cloudflare/workers-types": "^4.20250214.0",
@@ -439,9 +469,13 @@ · 298 unmodified lines
439469
440470 "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="],
441471
442− "@executor/convex": ["@executor/convex@workspace:executor/convex"],
472+ "@executor/convex": ["@executor/convex@workspace:executor/packages/convex"],
443473
444− "@executor/sandbox-host": ["@executor/sandbox-host@workspace:executor/packages/sandbox-host"],
474+ "@executor/core": ["@executor/core@workspace:executor/packages/core"],
475+
476+ "@executor/runner-node": ["@executor/runner-node@workspace:executor/packages/runner-node"],
477+
478+ "@executor/runner-sandbox-host": ["@executor/runner-sandbox-host@workspace:executor/packages/runner-sandbox-host"],
445479
446480 "@executor/web": ["@executor/web@workspace:executor/apps/web"],
447481
@@ -455,6 +489,10 @@ · 7 unmodified lines
455489
456490 "@google/genai": ["@google/genai@1.40.0", "", { "dependencies": { "google-auth-library": "^10.3.0", "protobufjs": "^7.5.4", "ws": "^8.18.0" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.25.2" }, "optionalPeers": ["@modelcontextprotocol/sdk"] }, "sha512-fhIww8smT0QYRX78qWOiz/nIQhHMF5wXOrlXvj33HBrz3vKDBb+wibLcEmTA+L9dmPD4KmfNr7UF3LDQVTXNjA=="],
457491
492+ "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="],
493+
494+ "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="],
495+
458496 "@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="],
459497
460498 "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
@@ -531,6 +569,10 @@ · 70 unmodified lines
531569
532570 "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
533571
572+ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
573+
574+ "@isaacs/string-locale-compare": ["@isaacs/string-locale-compare@1.1.0", "", {}, "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="],
575+
534576 "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
535577
536578 "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="],
@@ -541,6 +583,10 @@ · 4 unmodified lines
541583
542584 "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="],
543585
586+ "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="],
587+
588+ "@logdna/tail-file": ["@logdna/tail-file@2.2.0", "", {}, "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng=="],
589+
544590 "@mariozechner/pi-ai": ["@mariozechner/pi-ai@0.52.8", "", { "dependencies": { "@anthropic-ai/sdk": "^0.73.0", "@aws-sdk/client-bedrock-runtime": "^3.983.0", "@google/genai": "^1.40.0", "@mistralai/mistralai": "1.10.0", "@sinclair/typebox": "^0.34.41", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "chalk": "^5.6.2", "openai": "6.10.0", "partial-json": "^0.1.7", "proxy-agent": "^6.5.0", "undici": "^7.19.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-+aFCUbKJcskDJhr9wPcMBTy0x/xWio5v1dkxRYXUBPWp+Zt9DSdT5Kmd/IIQ+a0TOZDF4ajt4GY/oAw37X7XTw=="],
545591
546592 "@mistralai/mistralai": ["@mistralai/mistralai@1.10.0", "", { "dependencies": { "zod": "^3.20.0", "zod-to-json-schema": "^3.24.1" } }, "sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg=="],
@@ -601,6 +647,34 @@ · 54 unmodified lines
601647
602648 "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="],
603649
650+ "@npmcli/agent": ["@npmcli/agent@4.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA=="],
651+
652+ "@npmcli/arborist": ["@npmcli/arborist@9.3.0", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^5.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/map-workspaces": "^5.0.0", "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^4.0.0", "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^5.0.0", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.0", "bin-links": "^6.0.0", "cacache": "^20.0.1", "common-ancestor-path": "^2.0.0", "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^11.2.1", "minimatch": "^10.0.3", "nopt": "^9.0.0", "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "pacote": "^21.0.2", "parse-conflict-json": "^5.0.1", "proc-log": "^6.0.0", "proggy": "^4.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "semver": "^7.3.7", "ssri": "^13.0.0", "treeverse": "^3.0.0", "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" } }, "sha512-+iH0S4YZBsSgItmFWJsxbxtuFmaldGG8h9hQfCHeYHQxFZuIKD8NZB960c22OeFtQnI0FcuGLRA+sWQ3/4EEHQ=="],
653+
654+ "@npmcli/fs": ["@npmcli/fs@5.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og=="],
655+
656+ "@npmcli/git": ["@npmcli/git@7.0.1", "", { "dependencies": { "@npmcli/promise-spawn": "^9.0.0", "ini": "^6.0.0", "lru-cache": "^11.2.1", "npm-pick-manifest": "^11.0.1", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^6.0.0" } }, "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA=="],
657+
658+ "@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@4.0.0", "", { "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA=="],
659+
660+ "@npmcli/map-workspaces": ["@npmcli/map-workspaces@5.0.3", "", { "dependencies": { "@npmcli/name-from-folder": "^4.0.0", "@npmcli/package-json": "^7.0.0", "glob": "^13.0.0", "minimatch": "^10.0.3" } }, "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw=="],
661+
662+ "@npmcli/metavuln-calculator": ["@npmcli/metavuln-calculator@9.0.3", "", { "dependencies": { "cacache": "^20.0.0", "json-parse-even-better-errors": "^5.0.0", "pacote": "^21.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5" } }, "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg=="],
663+
664+ "@npmcli/name-from-folder": ["@npmcli/name-from-folder@4.0.0", "", {}, "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg=="],
665+
666+ "@npmcli/node-gyp": ["@npmcli/node-gyp@5.0.0", "", {}, "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ=="],
667+
668+ "@npmcli/package-json": ["@npmcli/package-json@7.0.4", "", { "dependencies": { "@npmcli/git": "^7.0.0", "glob": "^13.0.0", "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^5.0.0", "proc-log": "^6.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" } }, "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ=="],
669+
670+ "@npmcli/promise-spawn": ["@npmcli/promise-spawn@9.0.1", "", { "dependencies": { "which": "^6.0.0" } }, "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q=="],
671+
672+ "@npmcli/query": ["@npmcli/query@5.0.0", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ=="],
673+
674+ "@npmcli/redact": ["@npmcli/redact@4.0.0", "", {}, "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q=="],
675+
676+ "@npmcli/run-script": ["@npmcli/run-script@10.0.3", "", { "dependencies": { "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "node-gyp": "^12.1.0", "proc-log": "^6.0.0", "which": "^6.0.0" } }, "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw=="],
677+
604678 "@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="],
605679
606680 "@open-draft/logger": ["@open-draft/logger@0.3.0", "", { "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" } }, "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ=="],
@@ -609,6 +683,32 @@ · 2 unmodified lines
609683
610684 "@openassistant/reacord": ["@openassistant/reacord@workspace:assistant/packages/reacord"],
611685
686+ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
687+
688+ "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.55.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg=="],
689+
690+ "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="],
691+
692+ "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="],
693+
694+ "@opentelemetry/exporter-zipkin": ["@opentelemetry/exporter-zipkin@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA=="],
695+
696+ "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.55.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.55.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ=="],
697+
698+ "@opentelemetry/instrumentation-grpc": ["@opentelemetry/instrumentation-grpc@0.55.0", "", { "dependencies": { "@opentelemetry/instrumentation": "0.55.0", "@opentelemetry/semantic-conventions": "1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-n2ZH4pRwOy0Vhag/3eKqiyDBwcpUnGgJI9iiIRX7vivE0FMncaLazWphNFezRRaM/LuKwq1TD8pVUvieP68mow=="],
699+
700+ "@opentelemetry/propagator-b3": ["@opentelemetry/propagator-b3@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ=="],
701+
702+ "@opentelemetry/propagator-jaeger": ["@opentelemetry/propagator-jaeger@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg=="],
703+
704+ "@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="],
705+
706+ "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg=="],
707+
708+ "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@1.30.1", "", { "dependencies": { "@opentelemetry/context-async-hooks": "1.30.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/propagator-b3": "1.30.1", "@opentelemetry/propagator-jaeger": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ=="],
709+
710+ "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="],
711+
612712 "@oxc-project/types": ["@oxc-project/types@0.112.0", "", {}, "sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ=="],
613713
614714 "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.6.0", "", { "dependencies": { "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg=="],
@@ -647,6 +747,12 @@ · 32 unmodified lines
647747
648748 "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="],
649749
750+ "@pulumi/command": ["@pulumi/command@1.1.3", "", { "dependencies": { "@pulumi/pulumi": "^3.142.0" } }, "sha512-eBzGE/BQlxMNcxrrA62N4cLaHdL0xDSRACXxB0Hjc4rJG60vhpDVO130xxb4x3cZ7HT1kvjS4KuuoH8R5JRbIQ=="],
751+
752+ "@pulumi/pulumi": ["@pulumi/pulumi@3.220.0", "", { "dependencies": { "@grpc/grpc-js": "^1.10.1", "@logdna/tail-file": "^2.0.6", "@npmcli/arborist": "^9.0.0", "@opentelemetry/api": "^1.9", "@opentelemetry/exporter-zipkin": "^1.28", "@opentelemetry/instrumentation": "^0.55", "@opentelemetry/instrumentation-grpc": "^0.55", "@opentelemetry/resources": "^1.28", "@opentelemetry/sdk-trace-base": "^1.28", "@opentelemetry/sdk-trace-node": "^1.28", "@types/google-protobuf": "^3.15.5", "@types/semver": "^7.5.6", "@types/tmp": "^0.2.6", "execa": "^5.1.0", "fdir": "^6.5.0", "google-protobuf": "^3.21.4", "got": "^11.8.6", "ini": "^2.0.0", "js-yaml": "^3.14.2", "minimist": "^1.2.6", "normalize-package-data": "^6.0.0", "package-directory": "^8.1.0", "picomatch": "^3.0.1", "require-from-string": "^2.0.1", "semver": "^7.5.2", "source-map-support": "^0.5.6", "tmp": "^0.2.4", "upath": "^1.1.0" }, "peerDependencies": { "ts-node": ">= 7.0.1 < 12", "typescript": ">= 3.8.3 < 6" }, "optionalPeers": ["ts-node", "typescript"] }, "sha512-WfFu4Qv5r/9uv4bh6jxZPKLc945RtdjIq29mDa6c9sIXzQtRtv/Voo58E6u6lhA1RKaK+ocymqgykZ6QV7OnGQ=="],
753+
754+ "@pulumiverse/vercel": ["@pulumiverse/vercel@4.5.0", "", { "dependencies": { "@pulumi/pulumi": "^3.142.0" } }, "sha512-WA4MN+II6ie2s2dMcve6AT+XzI16ZbthVXhT5+GK2WqamMHIg9ARexHD68kNQKHQ1Yz9jN1xnzLhggkUC2Uo0A=="],
755+
650756 "@quansync/fs": ["@quansync/fs@1.0.0", "", { "dependencies": { "quansync": "^1.0.0" } }, "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ=="],
651757
652758 "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="],
@@ -877,9 +983,21 @@ · 224 unmodified lines
877983
878984 "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
879985
986+ "@sigstore/bundle": ["@sigstore/bundle@4.0.0", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A=="],
987+
988+ "@sigstore/core": ["@sigstore/core@3.1.0", "", {}, "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A=="],
989+
990+ "@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.5.0", "", {}, "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA=="],
991+
992+ "@sigstore/sign": ["@sigstore/sign@4.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0", "make-fetch-happen": "^15.0.3", "proc-log": "^6.1.0", "promise-retry": "^2.0.1" } }, "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg=="],
993+
994+ "@sigstore/tuf": ["@sigstore/tuf@4.0.1", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0", "tuf-js": "^4.1.0" } }, "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw=="],
995+
996+ "@sigstore/verify": ["@sigstore/verify@3.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag=="],
997+
880998 "@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="],
881999
882− "@sindresorhus/is": ["@sindresorhus/is@7.2.0", "", {}, "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw=="],
1000+ "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="],
8831001
8841002 "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="],
8851003
@@ -981,6 +1099,8 @@ · 95 unmodified lines
9811099
9821100 "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="],
9831101
1102+ "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="],
1103+
9841104 "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="],
9851105
9861106 "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="],
@@ -1027,6 +1147,12 @@ · 40 unmodified lines
10271147
10281148 "@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=="],
10291149
1150+ "@tsconfig/bun": ["@tsconfig/bun@1.0.7", "", {}, "sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA=="],
1151+
1152+ "@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="],
1153+
1154+ "@tufjs/models": ["@tufjs/models@4.1.0", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" } }, "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww=="],
1155+
10301156 "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
10311157
10321158 "@types/accepts": ["@types/accepts@1.3.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ=="],
@@ -1035,6 +1161,8 @@ · 2 unmodified lines
10351161
10361162 "@types/bun": ["@types/bun@1.3.8", "", { "dependencies": { "bun-types": "1.3.8" } }, "sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA=="],
10371163
1164+ "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="],
1165+
10381166 "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],
10391167
10401168 "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
@@ -1057,10 +1185,14 @@ · 16 unmodified lines
10571185
10581186 "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.8", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA=="],
10591187
1188+ "@types/google-protobuf": ["@types/google-protobuf@3.15.12", "", {}, "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ=="],
1189+
10601190 "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
10611191
10621192 "@types/http-assert": ["@types/http-assert@1.5.6", "", {}, "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw=="],
10631193
1194+ "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="],
1195+
10641196 "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="],
10651197
10661198 "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
@@ -1069,6 +1201,8 @@ · 2 unmodified lines
10691201
10701202 "@types/keygrip": ["@types/keygrip@1.0.6", "", {}, "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ=="],
10711203
1204+ "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="],
1205+
10721206 "@types/koa": ["@types/koa@2.15.0", "", { "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", "@types/cookies": "*", "@types/http-assert": "*", "@types/http-errors": "*", "@types/keygrip": "*", "@types/koa-compose": "*", "@types/node": "*" } }, "sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g=="],
10731207
10741208 "@types/koa-compose": ["@types/koa-compose@3.2.9", "", { "dependencies": { "@types/koa": "*" } }, "sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA=="],
@@ -1091,12 +1225,20 @@ · 16 unmodified lines
10911225
10921226 "@types/react-reconciler": ["@types/react-reconciler@0.31.0", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-wa1KtV3SHKnWeLHfZFg/7nrPSe/Ejdn+qbanNX4V6i9I7C3ECKPfBnC1KM3ef58KFWEohLmTvoTH5XuEIKGX2g=="],
10931227
1228+ "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="],
1229+
1230+ "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="],
1231+
10941232 "@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="],
10951233
10961234 "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="],
10971235
1236+ "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="],
1237+
10981238 "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="],
10991239
1240+ "@types/tmp": ["@types/tmp@0.2.6", "", {}, "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA=="],
1241+
11001242 "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
11011243
11021244 "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
@@ -1189,10 +1331,14 @@ · 86 unmodified lines
11891331
11901332 "@workos-inc/node": ["@workos-inc/node@8.2.0", "", { "dependencies": { "iron-webcrypto": "^2.0.0", "jose": "~6.1.0" } }, "sha512-aAY2k7X09lQ4TaVe7Kjm3gjb+EsGRoncbwJCOou9mCmunQoEYO1lsNrJTRIMM+jKCPBQDcmMF1O3Bv8IQwQKtg=="],
11911333
1334+ "abbrev": ["abbrev@4.0.0", "", {}, "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA=="],
1335+
11921336 "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
11931337
11941338 "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
11951339
1340+ "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="],
1341+
11961342 "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
11971343
11981344 "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
@@ -1211,7 +1357,7 @@ · 12 unmodified lines
12111357
12121358 "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="],
12131359
1214− "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
1360+ "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
12151361
12161362 "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="],
12171363
@@ -1249,6 +1395,10 @@ · 31 unmodified lines
12491395
12501396 "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="],
12511397
1398+ "aws-sdk": ["aws-sdk@2.1692.0", "", { "dependencies": { "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", "util": "^0.12.4", "uuid": "8.0.0", "xml2js": "0.6.2" } }, "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw=="],
1399+
1400+ "aws4fetch": ["aws4fetch@1.0.18", "", {}, "sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ=="],
1401+
12521402 "axe-core": ["axe-core@4.11.1", "", {}, "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A=="],
12531403
12541404 "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
@@ -1267,6 +1417,8 @@ · 12 unmodified lines
12671417
12681418 "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="],
12691419
1420+ "bin-links": ["bin-links@6.0.0", "", { "dependencies": { "cmd-shim": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", "proc-log": "^6.0.0", "read-cmd-shim": "^6.0.0", "write-file-atomic": "^7.0.0" } }, "sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w=="],
1421+
12701422 "birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="],
12711423
12721424 "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="],
@@ -1281,10 +1433,12 @@ · 8 unmodified lines
12811433
12821434 "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="],
12831435
1284− "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
1436+ "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="],
12851437
12861438 "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],
12871439
1440+ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
1441+
12881442 "bun-types": ["bun-types@1.3.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q=="],
12891443
12901444 "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
@@ -1293,6 +1447,12 @@ · 2 unmodified lines
12931447
12941448 "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="],
12951449
1450+ "cacache": ["cacache@20.0.3", "", { "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0", "unique-filename": "^5.0.0" } }, "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw=="],
1451+
1452+ "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="],
1453+
1454+ "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="],
1455+
12961456 "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="],
12971457
12981458 "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
@@ -1325,6 +1485,10 @@ · 26 unmodified lines
13251485
13261486 "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
13271487
1488+ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
1489+
1490+ "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="],
1491+
13281492 "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
13291493
13301494 "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
@@ -1337,8 +1501,12 @@ · 6 unmodified lines
13371501
13381502 "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
13391503
1504+ "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="],
1505+
13401506 "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
13411507
1508+ "cmd-shim": ["cmd-shim@8.0.0", "", {}, "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA=="],
1509+
13421510 "code-block-writer": ["code-block-writer@13.0.3", "", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="],
13431511
13441512 "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
@@ -1351,6 +1519,8 @@ · 6 unmodified lines
13511519
13521520 "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
13531521
1522+ "common-ancestor-path": ["common-ancestor-path@2.0.0", "", {}, "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="],
1523+
13541524 "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
13551525
13561526 "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="],
@@ -1393,6 +1563,8 @@ · 36 unmodified lines
13931563
13941564 "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="],
13951565
1566+ "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="],
1567+
13961568 "dedent": ["dedent@1.7.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg=="],
13971569
13981570 "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="],
@@ -1405,6 +1577,8 @@ · 6 unmodified lines
14051577
14061578 "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="],
14071579
1580+ "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="],
1581+
14081582 "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
14091583
14101584 "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="],
@@ -1461,12 +1635,18 @@ · 50 unmodified lines
14611635
14621636 "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="],
14631637
1638+ "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="],
1639+
1640+ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
1641+
14641642 "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="],
14651643
14661644 "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
14671645
14681646 "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
14691647
1648+ "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="],
1649+
14701650 "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="],
14711651
14721652 "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="],
@@ -1539,6 +1719,8 @@ · 66 unmodified lines
15391719
15401720 "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
15411721
1722+ "events": ["events@1.1.1", "", {}, "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw=="],
1723+
15421724 "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="],
15431725
15441726 "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
@@ -1547,8 +1729,12 @@ · 2 unmodified lines
15471729
15481730 "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="],
15491731
1732+ "executor-infra": ["executor-infra@workspace:executor/infra"],
1733+
15501734 "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="],
15511735
1736+ "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="],
1737+
15521738 "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="],
15531739
15541740 "express-rate-limit": ["express-rate-limit@8.2.1", "", { "dependencies": { "ip-address": "10.0.1" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g=="],
@@ -1591,6 +1777,8 @@ · 36 unmodified lines
15911777
15921778 "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
15931779
1780+ "find-up-simple": ["find-up-simple@1.0.1", "", {}, "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="],
1781+
15941782 "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
15951783
15961784 "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
@@ -1607,6 +1795,8 @@ · 10 unmodified lines
16071795
16081796 "fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="],
16091797
1798+ "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="],
1799+
16101800 "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
16111801
16121802 "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
@@ -1647,7 +1837,7 @@ · 34 unmodified lines
16471837
16481838 "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="],
16491839
1650− "glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
1840+ "glob": ["glob@13.0.2", "", { "dependencies": { "minimatch": "^10.1.2", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-035InabNu/c1lW0tzPhAgapKctblppqsKKG9ZaNzbr+gXwWMjXoiyGSyB9sArzrjG7jY+zntRq5ZSUYemrnWVQ=="],
16511841
16521842 "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
16531843
@@ -1659,8 +1849,12 @@ · 5 unmodified lines
16591849
16601850 "google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="],
16611851
1852+ "google-protobuf": ["google-protobuf@3.21.4", "", {}, "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ=="],
1853+
16621854 "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
16631855
1856+ "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="],
1857+
16641858 "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
16651859
16661860 "graphql": ["graphql@16.12.0", "", {}, "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ=="],
@@ -1709,32 +1903,44 @@ · 42 unmodified lines
17091903
17101904 "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="],
17111905
1906+ "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="],
1907+
17121908 "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="],
17131909
17141910 "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
17151911
1912+ "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="],
1913+
17161914 "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=="],
17171915
17181916 "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
17191917
1918+ "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="],
1919+
17201920 "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
17211921
17221922 "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="],
17231923
17241924 "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="],
17251925
1726− "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
1926+ "ieee754": ["ieee754@1.1.13", "", {}, "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="],
17271927
17281928 "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
17291929
1930+ "ignore-walk": ["ignore-walk@8.0.0", "", { "dependencies": { "minimatch": "^10.0.3" } }, "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A=="],
1931+
17301932 "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
17311933
1934+ "import-in-the-middle": ["import-in-the-middle@1.15.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA=="],
1935+
17321936 "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
17331937
17341938 "index-to-position": ["index-to-position@1.2.0", "", {}, "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="],
17351939
17361940 "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
17371941
1942+ "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="],
1943+
17381944 "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="],
17391945
17401946 "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="],
@@ -1751,6 +1957,8 @@ · 10 unmodified lines
17511957
17521958 "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="],
17531959
1960+ "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="],
1961+
17541962 "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
17551963
17561964 "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
@@ -1835,7 +2043,7 @@ · 78 unmodified lines
18352043
18362044 "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="],
18372045
1838− "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
2046+ "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
18392047
18402048 "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
18412049
@@ -1845,13 +2053,15 @@ · 3 unmodified lines
18452053
18462054 "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
18472055
2056+ "jmespath": ["jmespath@0.16.0", "", {}, "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="],
2057+
18482058 "jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="],
18492059
18502060 "js-levenshtein": ["js-levenshtein@1.1.6", "", {}, "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="],
18512061
18522062 "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
18532063
1854− "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
2064+ "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=="],
18552065
18562066 "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
18572067
@@ -1869,12 +2079,20 @@ · 11 unmodified lines
18692079
18702080 "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
18712081
2082+ "json-stringify-nice": ["json-stringify-nice@1.1.4", "", {}, "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw=="],
2083+
18722084 "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
18732085
18742086 "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="],
18752087
2088+ "jsonparse": ["jsonparse@1.3.1", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="],
2089+
18762090 "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="],
18772091
2092+ "just-diff": ["just-diff@6.0.2", "", {}, "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA=="],
2093+
2094+ "just-diff-apply": ["just-diff-apply@5.5.0", "", {}, "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw=="],
2095+
18782096 "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="],
18792097
18802098 "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="],
@@ -1921,6 +2139,8 @@ · 40 unmodified lines
19212139
19222140 "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="],
19232141
2142+ "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="],
2143+
19242144 "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
19252145
19262146 "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="],
@@ -1935,6 +2155,8 @@ · 8 unmodified lines
19352155
19362156 "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="],
19372157
2158+ "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="],
2159+
19382160 "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],
19392161
19402162 "lucide-react": ["lucide-react@0.563.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA=="],
@@ -1943,6 +2165,8 @@ · 2 unmodified lines
19432165
19442166 "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
19452167
2168+ "make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="],
2169+
19462170 "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="],
19472171
19482172 "marked": ["marked@14.0.0", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ=="],
@@ -2055,6 +2279,8 @@ · 106 unmodified lines
20552279
20562280 "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
20572281
2282+ "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
2283+
20582284 "miniflare": ["miniflare@4.20260210.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "7.18.2", "workerd": "1.20260210.0", "ws": "8.18.0", "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-HXR6m53IOqEzq52DuGF1x7I1K6lSIqzhbCbQXv/cTmPnPJmNkr7EBtLDm4nfSkOvlDtnwDCLUjWII5fyGJI5Tw=="],
20592285
20602286 "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
@@ -2063,6 +2289,20 @@ · 2 unmodified lines
20632289
20642290 "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
20652291
2292+ "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="],
2293+
2294+ "minipass-fetch": ["minipass-fetch@5.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw=="],
2295+
2296+ "minipass-flush": ["minipass-flush@1.0.5", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="],
2297+
2298+ "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="],
2299+
2300+ "minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="],
2301+
2302+ "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="],
2303+
2304+ "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="],
2305+
20662306 "monaco-editor": ["monaco-editor@0.55.1", "", { "dependencies": { "dompurify": "3.2.7", "marked": "14.0.0" } }, "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A=="],
20672307
20682308 "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
@@ -2095,14 +2335,38 @@ · 26 unmodified lines
20952335
20962336 "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
20972337
2338+ "node-gyp": ["node-gyp@12.2.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^15.0.0", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ=="],
2339+
20982340 "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="],
20992341
21002342 "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
21012343
2344+ "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="],
2345+
2346+ "normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="],
2347+
2348+ "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="],
2349+
2350+ "npm-bundled": ["npm-bundled@5.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^5.0.0" } }, "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw=="],
2351+
2352+ "npm-install-checks": ["npm-install-checks@8.0.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA=="],
2353+
2354+ "npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="],
2355+
2356+ "npm-package-arg": ["npm-package-arg@13.0.2", "", { "dependencies": { "hosted-git-info": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^7.0.0" } }, "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA=="],
2357+
2358+ "npm-packlist": ["npm-packlist@10.0.3", "", { "dependencies": { "ignore-walk": "^8.0.0", "proc-log": "^6.0.0" } }, "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg=="],
2359+
2360+ "npm-pick-manifest": ["npm-pick-manifest@11.0.3", "", { "dependencies": { "npm-install-checks": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", "npm-package-arg": "^13.0.0", "semver": "^7.3.5" } }, "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ=="],
2361+
2362+ "npm-registry-fetch": ["npm-registry-fetch@19.1.1", "", { "dependencies": { "@npmcli/redact": "^4.0.0", "jsonparse": "^1.3.1", "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minizlib": "^3.0.1", "npm-package-arg": "^13.0.0", "proc-log": "^6.0.0" } }, "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw=="],
2363+
21022364 "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="],
21032365
21042366 "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
21052367
2368+ "object-hash": ["object-hash@2.2.0", "", {}, "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="],
2369+
21062370 "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
21072371
21082372 "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
@@ -2119,6 +2383,8 @@ · 10 unmodified lines
21192383
21202384 "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="],
21212385
2386+ "oidc-token-hash": ["oidc-token-hash@5.2.0", "", {}, "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw=="],
2387+
21222388 "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="],
21232389
21242390 "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
@@ -2137,6 +2403,10 @@ · 12 unmodified lines
21372403
21382404 "openapi-typescript": ["openapi-typescript@7.12.0", "", { "dependencies": { "@redocly/openapi-core": "^1.34.6", "ansi-colors": "^4.1.3", "change-case": "^5.4.4", "parse-json": "^8.3.0", "supports-color": "^10.2.2", "yargs-parser": "^21.1.1" }, "peerDependencies": { "typescript": "^5.x" }, "bin": { "openapi-typescript": "bin/cli.js" } }, "sha512-dtk3h5rbILWfDEUCNgMeBHSpvVsslM0ik1psDxxlrIAJk34SDqZIbhF+qKZy6MytW7Fp+wxynq9y5S3wgJcn0g=="],
21392405
2406+ "opencontrol": ["opencontrol@0.0.6", "", { "dependencies": { "@modelcontextprotocol/sdk": "1.6.1", "@tsconfig/bun": "1.0.7", "hono": "4.7.4", "zod": "3.24.2", "zod-to-json-schema": "3.24.3" }, "bin": { "opencontrol": "bin/index.mjs" } }, "sha512-QeCrpOK5D15QV8kjnGVeD/BHFLwcVr+sn4T6KKmP0WAMs2pww56e4h+eOGHb5iPOufUQXbdbBKi6WV2kk7tefQ=="],
2407+
2408+ "openid-client": ["openid-client@5.6.4", "", { "dependencies": { "jose": "^4.15.4", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" } }, "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA=="],
2409+
21402410 "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
21412411
21422412 "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=="],
@@ -2145,20 +2415,30 @@ · 2 unmodified lines
21452415
21462416 "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="],
21472417
2418+ "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="],
2419+
21482420 "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
21492421
21502422 "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
21512423
2424+ "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="],
2425+
21522426 "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="],
21532427
21542428 "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="],
21552429
2430+ "package-directory": ["package-directory@8.2.0", "", { "dependencies": { "find-up-simple": "^1.0.0" } }, "sha512-qJSu5Mo6tHmRxCy2KCYYKYgcfBdUpy9dwReaZD/xwf608AUk/MoRtIOWzgDtUeGeC7n/55yC3MI1Q+MbSoektw=="],
2431+
21562432 "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
21572433
21582434 "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="],
21592435
2436+ "pacote": ["pacote@21.3.1", "", { "dependencies": { "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg=="],
2437+
21602438 "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
21612439
2440+ "parse-conflict-json": ["parse-conflict-json@5.0.1", "", { "dependencies": { "json-parse-even-better-errors": "^5.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ=="],
2441+
21622442 "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=="],
21632443
21642444 "parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="],
@@ -2179,7 +2459,7 @@ · 14 unmodified lines
21792459
21802460 "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
21812461
2182− "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
2462+ "path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="],
21832463
21842464 "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="],
21852465
@@ -2189,7 +2469,7 @@ · 3 unmodified lines
21892469
21902470 "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
21912471
2192− "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
2472+ "picomatch": ["picomatch@3.0.1", "", {}, "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag=="],
21932473
21942474 "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="],
21952475
@@ -2209,6 +2489,16 @@ · 13 unmodified lines
22092489
22102490 "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="],
22112491
2492+ "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="],
2493+
2494+ "proggy": ["proggy@4.0.0", "", {}, "sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ=="],
2495+
2496+ "promise-all-reject-late": ["promise-all-reject-late@1.0.1", "", {}, "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw=="],
2497+
2498+ "promise-call-limit": ["promise-call-limit@3.0.2", "", {}, "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw=="],
2499+
2500+ "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="],
2501+
22122502 "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
22132503
22142504 "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
@@ -2223,6 +2513,10 @@ · 8 unmodified lines
22232513
22242514 "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
22252515
2516+ "pulumi-stripe": ["pulumi-stripe@0.0.26", "", { "dependencies": { "@pulumi/pulumi": "^3.0.0" } }, "sha512-6kwXa6Sn+JaEtv/b6Gji3tOmjxGyYG6LwavC3udJSt+HP6GwcqirF5NJKyCqpjNdm7wbwIBnz8hI3Xri9hkPqA=="],
2517+
2518+ "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="],
2519+
22262520 "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
22272521
22282522 "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="],
@@ -2235,8 +2529,12 @@ · 6 unmodified lines
22352529
22362530 "quansync": ["quansync@1.0.0", "", {}, "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA=="],
22372531
2532+ "querystring": ["querystring@0.2.0", "", {}, "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="],
2533+
22382534 "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
22392535
2536+ "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="],
2537+
22402538 "radix-ui": ["radix-ui@1.4.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-accessible-icon": "1.1.7", "@radix-ui/react-accordion": "1.2.12", "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-aspect-ratio": "1.1.7", "@radix-ui/react-avatar": "1.1.10", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-context-menu": "2.2.16", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-dropdown-menu": "2.1.16", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-form": "0.1.8", "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.7", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-menubar": "1.1.16", "@radix-ui/react-navigation-menu": "1.2.14", "@radix-ui/react-one-time-password-field": "0.1.8", "@radix-ui/react-password-toggle-field": "0.1.3", "@radix-ui/react-popover": "1.1.15", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-progress": "1.1.7", "@radix-ui/react-radio-group": "1.3.8", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-slider": "1.3.6", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-toggle-group": "1.1.11", "@radix-ui/react-toolbar": "1.1.11", "@radix-ui/react-tooltip": "1.2.8", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-escape-keydown": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA=="],
22412539
22422540 "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],
@@ -2259,6 +2557,8 @@ · 16 unmodified lines
22592557
22602558 "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="],
22612559
2560+ "read-cmd-shim": ["read-cmd-shim@6.0.0", "", {}, "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A=="],
2561+
22622562 "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
22632563
22642564 "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=="],
@@ -2293,14 +2593,22 @@ · 28 unmodified lines
22932593
22942594 "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
22952595
2596+ "require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="],
2597+
22962598 "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
22972599
2600+ "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="],
2601+
22982602 "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
22992603
23002604 "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
23012605
2606+ "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="],
2607+
23022608 "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
23032609
2610+ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
2611+
23042612 "rettime": ["rettime@0.10.1", "", {}, "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw=="],
23052613
23062614 "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
@@ -2329,9 +2637,11 @@ · 22 unmodified lines
23292637
23302638 "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
23312639
2640+ "sax": ["sax@1.2.1", "", {}, "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="],
2641+
23322642 "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
23332643
2334− "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
2644+ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
23352645
23362646 "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=="],
23372647
@@ -2357,6 +2667,8 @@ · 19 unmodified lines
23572667
23582668 "shiki": ["shiki@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/engine-javascript": "3.22.0", "@shikijs/engine-oniguruma": "3.22.0", "@shikijs/langs": "3.22.0", "@shikijs/themes": "3.22.0", "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g=="],
23592669
2670+ "shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="],
2671+
23602672 "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=="],
23612673
23622674 "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="],
@@ -2369,6 +2681,8 @@ · 6 unmodified lines
23692681
23702682 "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
23712683
2684+ "sigstore": ["sigstore@4.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0", "@sigstore/sign": "^4.1.0", "@sigstore/tuf": "^4.0.1", "@sigstore/verify": "^3.1.0" } }, "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA=="],
2685+
23722686 "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
23732687
23742688 "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
@@ -2383,8 +2697,40 @@ · 8 unmodified lines
23832697
23842698 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
23852699
2700+ "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
2701+
23862702 "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
23872703
2704+ "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="],
2705+
2706+ "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="],
2707+
2708+ "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="],
2709+
2710+ "spdx-license-ids": ["spdx-license-ids@3.0.22", "", {}, "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="],
2711+
2712+ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="],
2713+
2714+ "ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="],
2715+
2716+ "sst": ["sst@3.17.38", "", { "dependencies": { "aws-sdk": "2.1692.0", "aws4fetch": "1.0.18", "jose": "5.2.3", "opencontrol": "0.0.6", "openid-client": "5.6.4" }, "optionalDependencies": { "sst-darwin-arm64": "3.17.38", "sst-darwin-x64": "3.17.38", "sst-linux-arm64": "3.17.38", "sst-linux-x64": "3.17.38", "sst-linux-x86": "3.17.38", "sst-win32-arm64": "3.17.38", "sst-win32-x64": "3.17.38", "sst-win32-x86": "3.17.38" }, "bin": { "sst": "bin/sst.mjs" } }, "sha512-AshCCzogYVVTgLV7SBQ2hkmctAI0QV4pJmHwsyrX1ruSCvH18ccGgX/kux6/AFfaKrT7GmuVuQ2Zsz25GPXEiA=="],
2717+
2718+ "sst-darwin-arm64": ["sst-darwin-arm64@3.17.38", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2qEu/jRRBGQbMzkJKy4cypX+LdjInKtn1VrPHeggHD0/DsXLUBVdj/WyYb9ZxbsZEUcA9xZDR2+FBZ7lQzaDcw=="],
2719+
2720+ "sst-darwin-x64": ["sst-darwin-x64@3.17.38", "", { "os": "darwin", "cpu": "x64" }, "sha512-um13cWbRK5rfsYuLxS97gaSkFVd6jCzI+k6wlpJaOcJ5IZiH5UdFIz+ZE/7iCfNTEiwDT+RMw2nGL9a+07Vtww=="],
2721+
2722+ "sst-linux-arm64": ["sst-linux-arm64@3.17.38", "", { "os": "linux", "cpu": "arm64" }, "sha512-gMxYJmpytntqZOf9SZfMnj+v6E0vZ8dAT5XnaKQhETSwuN6WH/OWHgx4bnp7bMQfdvm1uYNB+p7GRopIRRPePQ=="],
2723+
2724+ "sst-linux-x64": ["sst-linux-x64@3.17.38", "", { "os": "linux", "cpu": "x64" }, "sha512-vwzfHhCugRTWevoA2qcl339yQhc8+vVdAqA11Qcats7LvaM6KxN9SqY00SfHPZxmm2odnefDg8z4b3Qvdo2NAw=="],
2725+
2726+ "sst-linux-x86": ["sst-linux-x86@3.17.38", "", { "os": "linux", "cpu": "none" }, "sha512-rxG2YsN2XnykCvJ1ZquZIXbEOWIdLdcJ1ir9hcqb31cLrH0z2EN5F/IsioH9mLRVJnbmY3JewNk+C9mMB2a8zA=="],
2727+
2728+ "sst-win32-arm64": ["sst-win32-arm64@3.17.38", "", { "os": "win32", "cpu": "arm64" }, "sha512-aPTaLqJ4bEEfQwaxnteFXHAePw4Po1Be0tsdTuNUPDhhyv1CV5xSl4nppb4q/Qn1dGxaU6L4zCzZkshWskGIOg=="],
2729+
2730+ "sst-win32-x64": ["sst-win32-x64@3.17.38", "", { "os": "win32", "cpu": "x64" }, "sha512-X2kx6MOK1tZ0JhMqDisB60fJCOSxot5q7NPFMna5hj7cgJaQfj0NAgQqGJkLEB8iVWyxi6e5o1oJLg+vH452HQ=="],
2731+
2732+ "sst-win32-x86": ["sst-win32-x86@3.17.38", "", { "os": "win32", "cpu": "none" }, "sha512-W5PxA4uhpXMzWNT0/sMrmU27fn1DCaReGwVwJGEZapu9GKTix41uaP+pyd9fwjiAHVILIdxqe7+BkZfH+mvzbg=="],
2733+
23882734 "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="],
23892735
23902736 "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="],
@@ -2459,6 +2805,8 @@ · 68 unmodified lines
24592805
24602806 "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="],
24612807
2808+ "tar": ["tar@7.5.7", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ=="],
2809+
24622810 "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="],
24632811
24642812 "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="],
@@ -2477,6 +2825,8 @@ · 12 unmodified lines
24772825
24782826 "tldts-core": ["tldts-core@7.0.22", "", {}, "sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw=="],
24792827
2828+ "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="],
2829+
24802830 "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
24812831
24822832 "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="],
@@ -2485,6 +2835,8 @@ · 2 unmodified lines
24852835
24862836 "tough-cookie": ["tough-cookie@6.0.0", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w=="],
24872837
2838+ "treeverse": ["treeverse@3.0.0", "", {}, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="],
2839+
24882840 "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
24892841
24902842 "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="],
@@ -2503,6 +2855,8 @@ · 12 unmodified lines
25032855
25042856 "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
25052857
2858+ "tuf-js": ["tuf-js@4.1.0", "", { "dependencies": { "@tufjs/models": "4.1.0", "debug": "^4.4.3", "make-fetch-happen": "^15.0.1" } }, "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ=="],
2859+
25062860 "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="],
25072861
25082862 "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
@@ -2543,6 +2897,10 @@ · 34 unmodified lines
25432897
25442898 "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=="],
25452899
2900+ "unique-filename": ["unique-filename@5.0.0", "", { "dependencies": { "unique-slug": "^6.0.0" } }, "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg=="],
2901+
2902+ "unique-slug": ["unique-slug@6.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw=="],
2903+
25462904 "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="],
25472905
25482906 "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
@@ -2561,20 +2919,28 @@ · 12 unmodified lines
25612919
25622920 "until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="],
25632921
2922+ "upath": ["upath@1.2.0", "", {}, "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="],
2923+
25642924 "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
25652925
25662926 "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
25672927
2928+ "url": ["url@0.10.3", "", { "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ=="],
2929+
25682930 "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="],
25692931
25702932 "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="],
25712933
25722934 "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="],
25732935
2936+ "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="],
2937+
25742938 "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
25752939
25762940 "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="],
25772941
2942+ "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="],
2943+
25782944 "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="],
25792945
25802946 "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="],
@@ -2591,6 +2957,8 @@ · 10 unmodified lines
25912957
25922958 "vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="],
25932959
2960+ "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="],
2961+
25942962 "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="],
25952963
25962964 "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
@@ -2621,13 +2989,19 @@ · 24 unmodified lines
26212989
26222990 "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
26232991
2992+ "write-file-atomic": ["write-file-atomic@7.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg=="],
2993+
26242994 "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="],
26252995
26262996 "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="],
26272997
2998+ "xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="],
2999+
3000+ "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="],
3001+
26283002 "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
26293003
2630− "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
3004+ "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
26313005
26323006 "yaml-ast-parser": ["yaml-ast-parser@0.0.43", "", {}, "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A=="],
26333007
@@ -2653,6 +3027,8 @@ · 19 unmodified lines
26533027
26543028 "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
26553029
3030+ "@apidevtools/json-schema-ref-parser/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
3031+
26563032 "@assistant/bot/@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="],
26573033
26583034 "@assistant/server/@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="],
@@ -2661,10 +3037,16 @@ · 2 unmodified lines
26613037
26623038 "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="],
26633039
3040+ "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
3041+
26643042 "@babel/generator/@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=="],
26653043
26663044 "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
26673045
3046+ "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
3047+
3048+ "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
3049+
26683050 "@convex-dev/workos/@workos-inc/authkit-react": ["@workos-inc/authkit-react@0.11.0", "", { "dependencies": { "@workos-inc/authkit-js": "0.13.0" }, "peerDependencies": { "react": ">=17" } }, "sha512-67HFSxP4wXC8ECGyvc1yGMwuD5NGkwT2OPt8DavHoKAlO+hRaAlu9wwzqUx1EJrHht0Dcx+l20Byq8Ab0bEhlg=="],
26693051
26703052 "@convex-dev/workos-authkit/@workos-inc/node": ["@workos-inc/node@7.82.0", "", { "dependencies": { "iron-session": "~6.3.1", "jose": "~5.6.3", "leb": "^1.0.0", "qs": "6.14.1" } }, "sha512-8h6XjIJf8nqNGYQMkWsjZ72WXMtzqrb4Azz39schXWoSRmwoK6tK+GpeAviJ9slddiJdOcp0Ht9/r+L6pGQMCg=="],
@@ -2677,6 +3059,8 @@ · 6 unmodified lines
26773059
26783060 "@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=="],
26793061
3062+ "@dotenvx/dotenvx/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
3063+
26803064 "@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
26813065
26823066 "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
@@ -2685,6 +3069,8 @@ · 2 unmodified lines
26853069
26863070 "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="],
26873071
3072+ "@eslint/eslintrc/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
3073+
26883074 "@executor/web/react": ["react@19.2.3", "", {}, "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA=="],
26893075
26903076 "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
@@ -2701,8 +3087,38 @@ · 10 unmodified lines
27013087
27023088 "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "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.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="],
27033089
3090+ "@npmcli/agent/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
3091+
3092+ "@npmcli/arborist/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
3093+
3094+ "@npmcli/arborist/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
3095+
3096+ "@npmcli/git/ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="],
3097+
3098+ "@npmcli/git/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
3099+
3100+ "@npmcli/git/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
3101+
3102+ "@npmcli/map-workspaces/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
3103+
3104+ "@npmcli/metavuln-calculator/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="],
3105+
3106+ "@npmcli/package-json/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="],
3107+
3108+ "@npmcli/promise-spawn/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
3109+
3110+ "@npmcli/run-script/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
3111+
3112+ "@opentelemetry/instrumentation-grpc/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.27.0", "", {}, "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg=="],
3113+
3114+ "@poppinss/dumper/@sindresorhus/is": ["@sindresorhus/is@7.2.0", "", {}, "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw=="],
3115+
27043116 "@proto/sources/@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="],
27053117
3118+ "@pulumi/pulumi/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=="],
3119+
3120+ "@redocly/openapi-core/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
3121+
27063122 "@redocly/openapi-core/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="],
27073123
27083124 "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="],
@@ -2721,26 +3137,46 @@ · 12 unmodified lines
27213137
27223138 "@ts-morph/common/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
27233139
3140+ "@tufjs/models/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
3141+
3142+ "@types/cacheable-request/@types/node": ["@types/node@24.10.13", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg=="],
3143+
3144+ "@types/keyv/@types/node": ["@types/node@24.10.13", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg=="],
3145+
3146+ "@types/responselike/@types/node": ["@types/node@24.10.13", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg=="],
3147+
27243148 "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
27253149
27263150 "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
27273151
2728− "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
2729−
27303152 "@workos-inc/authkit-nextjs/@workos-inc/node": ["@workos-inc/node@7.82.0", "", { "dependencies": { "iron-session": "~6.3.1", "jose": "~5.6.3", "leb": "^1.0.0", "qs": "6.14.1" } }, "sha512-8h6XjIJf8nqNGYQMkWsjZ72WXMtzqrb4Azz39schXWoSRmwoK6tK+GpeAviJ9slddiJdOcp0Ht9/r+L6pGQMCg=="],
27313153
27323154 "@workos-inc/authkit-nextjs/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="],
27333155
3156+ "aws-sdk/uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="],
3157+
3158+ "buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
3159+
3160+ "cacache/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
3161+
3162+ "cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
3163+
27343164 "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=="],
27353165
27363166 "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
27373167
27383168 "cliui/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=="],
27393169
3170+ "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="],
3171+
3172+ "cosmiconfig/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
3173+
27403174 "cosmiconfig/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=="],
27413175
27423176 "degenerator/ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="],
27433177
3178+ "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
3179+
27443180 "eslint/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
27453181
27463182 "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
@@ -2751,24 +3187,32 @@ · 4 unmodified lines
27513187
27523188 "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
27533189
3190+ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
3191+
27543192 "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="],
27553193
27563194 "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="],
27573195
3196+ "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
3197+
3198+ "executor-infra/@types/node": ["@types/node@24.10.13", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg=="],
3199+
27583200 "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
27593201
27603202 "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
27613203
27623204 "get-uri/data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="],
27633205
2764− "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
3206+ "glob/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
3207+
3208+ "hosted-git-info/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
3209+
3210+ "ignore-walk/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="],
27653211
27663212 "iron-session/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
27673213
27683214 "iron-session/iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="],
27693215
2770− "is-bun-module/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
2771−
27723216 "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
27733217
27743218 "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
@@ -2779,15 +3223,37 @@ · 4 unmodified lines
27793223
27803224 "miniflare/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="],
27813225
3226+ "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
3227+
3228+ "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
3229+
27823230 "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="],
27833231
3232+ "node-gyp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
3233+
3234+ "normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="],
3235+
27843236 "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
27853237
3238+ "opencontrol/@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.6.1", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^4.1.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA=="],
3239+
3240+ "opencontrol/hono": ["hono@4.7.4", "", {}, "sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg=="],
3241+
3242+ "opencontrol/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="],
3243+
3244+ "opencontrol/zod-to-json-schema": ["zod-to-json-schema@3.24.3", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A=="],
3245+
3246+ "openid-client/jose": ["jose@4.15.9", "", {}, "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA=="],
3247+
3248+ "openid-client/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="],
3249+
3250+ "parse-conflict-json/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="],
3251+
27863252 "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
27873253
27883254 "parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
27893255
2790− "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
3256+ "path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
27913257
27923258 "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
27933259
@@ -2795,11 +3261,17 @@ · 1 unmodified line
27953261
27963262 "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
27973263
3264+ "rimraf/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
3265+
27983266 "router/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="],
27993267
3268+ "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
3269+
3270+ "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
3271+
28003272 "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
28013273
2802− "sharp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
3274+ "sst/jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="],
28033275
28043276 "streamdown/marked": ["marked@17.0.1", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="],
28053277
@@ -2813,10 +3285,22 @@ · 7 unmodified lines
28133285
28143286 "strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="],
28153287
2816− "tsdown/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
3288+ "tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
3289+
3290+ "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
3291+
3292+ "token-types/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
3293+
3294+ "url/punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="],
3295+
3296+ "vite/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
3297+
3298+ "vitest/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
28173299
28183300 "vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="],
28193301
3302+ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
3303+
28203304 "wrangler/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="],
28213305
28223306 "wrap-ansi/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=="],
@@ -2829,6 +3313,8 @@ · 6 unmodified lines
28293313
28303314 "yargs/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=="],
28313315
3316+ "@apidevtools/json-schema-ref-parser/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
3317+
28323318 "@assistant/bot/@types/bun/bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="],
28333319
28343320 "@assistant/server/@types/bun/bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="],
@@ -2837,6 +3323,8 @@ · 2 unmodified lines
28373323
28383324 "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
28393325
3326+ "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
3327+
28403328 "@convex-dev/workos-authkit/@workos-inc/node/iron-session": ["iron-session@6.3.1", "", { "dependencies": { "@peculiar/webcrypto": "^1.4.0", "@types/cookie": "^0.5.1", "@types/express": "^4.17.13", "@types/koa": "^2.13.5", "@types/node": "^17.0.41", "cookie": "^0.5.0", "iron-webcrypto": "^0.2.5" }, "peerDependencies": { "express": ">=4", "koa": ">=2", "next": ">=10" }, "optionalPeers": ["express", "koa", "next"] }, "sha512-3UJ7y2vk/WomAtEySmPgM6qtYF1cZ3tXuWX5GsVX4PJXAcs5y/sV9HuSfpjKS6HkTL/OhZcTDWJNLZ7w+Erx3A=="],
28413329
28423330 "@convex-dev/workos-authkit/@workos-inc/node/jose": ["jose@5.6.3", "", {}, "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g=="],
@@ -2859,14 +3347,42 @@ · 16 unmodified lines
28593347
28603348 "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
28613349
3350+ "@eslint/eslintrc/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
3351+
28623352 "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
28633353
28643354 "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
28653355
3356+ "@npmcli/git/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
3357+
3358+ "@npmcli/promise-spawn/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
3359+
3360+ "@npmcli/run-script/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
3361+
28663362 "@proto/sources/@types/bun/bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="],
28673363
3364+ "@pulumi/pulumi/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
3365+
3366+ "@pulumi/pulumi/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="],
3367+
3368+ "@pulumi/pulumi/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
3369+
3370+ "@pulumi/pulumi/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="],
3371+
3372+ "@pulumi/pulumi/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
3373+
3374+ "@pulumi/pulumi/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
3375+
3376+ "@redocly/openapi-core/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
3377+
28683378 "@redocly/openapi-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
28693379
3380+ "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
3381+
3382+ "@types/keyv/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
3383+
3384+ "@types/responselike/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
3385+
28703386 "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
28713387
28723388 "@workos-inc/authkit-nextjs/@workos-inc/node/iron-session": ["iron-session@6.3.1", "", { "dependencies": { "@peculiar/webcrypto": "^1.4.0", "@types/cookie": "^0.5.1", "@types/express": "^4.17.13", "@types/koa": "^2.13.5", "@types/node": "^17.0.41", "cookie": "^0.5.0", "iron-webcrypto": "^0.2.5" }, "peerDependencies": { "express": ">=4", "koa": ">=2", "next": ">=10" }, "optionalPeers": ["express", "koa", "next"] }, "sha512-3UJ7y2vk/WomAtEySmPgM6qtYF1cZ3tXuWX5GsVX4PJXAcs5y/sV9HuSfpjKS6HkTL/OhZcTDWJNLZ7w+Erx3A=="],
@@ -2877,13 +3393,31 @@ · 4 unmodified lines
28773393
28783394 "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
28793395
3396+ "cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
3397+
28803398 "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="],
28813399
28823400 "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
28833401
28843402 "eslint/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
28853403
2886− "glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
3404+ "executor-infra/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
3405+
3406+ "node-gyp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
3407+
3408+ "normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
3409+
3410+ "opencontrol/@modelcontextprotocol/sdk/express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="],
3411+
3412+ "opencontrol/@modelcontextprotocol/sdk/pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="],
3413+
3414+ "opencontrol/@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
3415+
3416+ "opencontrol/@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="],
3417+
3418+ "rimraf/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
3419+
3420+ "rimraf/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
28873421
28883422 "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
28893423
@@ -2967,6 +3501,18 @@ · 77 unmodified lines
29673501
29683502 "@workos-inc/authkit-nextjs/@workos-inc/node/iron-session/iron-webcrypto": ["iron-webcrypto@0.2.8", "", { "dependencies": { "buffer": "^6" } }, "sha512-YPdCvjFMOBjXaYuDj5tiHst5CEk6Xw84Jo8Y2+jzhMceclAnb3+vNPP/CTtb5fO2ZEuXEaO4N+w62Vfko757KA=="],
29693503
3504+ "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
3505+
3506+ "rimraf/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
3507+
29703508 "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
3509+
3510+ "@convex-dev/workos-authkit/@workos-inc/node/iron-session/iron-webcrypto/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
3511+
3512+ "@workos-inc/authkit-nextjs/@workos-inc/node/iron-session/iron-webcrypto/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
3513+
3514+ "@convex-dev/workos-authkit/@workos-inc/node/iron-session/iron-webcrypto/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
3515+
3516+ "@workos-inc/authkit-nextjs/@workos-inc/node/iron-session/iron-webcrypto/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
29713517 }
29723518 }
dev.ts+1−1
@@ -187,7 +187,7 @@ spawnService("sandbox", [ · 186 unmodified lines
187187 "bunx", "wrangler", "dev",
188188 "--port", String(SANDBOX_PORT),
189189 ], {
190− cwd: "./executor/packages/sandbox-host",
190+ cwd: "./executor/packages/runner-sandbox-host",
191191 });
192192
193193 // 4. Everything else in parallel
executor/README.md+11−7
@@ -12,10 +12,11 @@ Executor is a Convex-native execution platform for MCP-driven agents. It provide · 11 unmodified lines
1212
1313 Core components:
1414
15−- `convex/`: control plane data model and domain APIs (tasks, approvals, policies, credentials, org/workspace auth, billing).
16−- `convex/http.ts`: HTTP routes for `/mcp`, OAuth discovery metadata, and internal runtime callbacks.
17−- `convex/executorNode.ts`: task runner action (`runTask`) and tool invocation plumbing.
18−- `lib/`: runtime engine, typechecker, tool discovery, external source adapters (MCP/OpenAPI/GraphQL), credential provider resolvers.
15+- `packages/convex/`: control plane data model and domain APIs (tasks, approvals, policies, credentials, org/workspace auth, billing).
16+- `packages/convex/http.ts`: HTTP routes for `/mcp`, OAuth discovery metadata, and internal runtime callbacks.
17+- `packages/convex/executorNode.ts`: task runner action (`runTask`) and tool invocation plumbing.
18+- `packages/runner-sandbox-host/`: Cloudflare Worker sandbox runtime host.
19+- `packages/core/src/`: runtime engine, typechecker, tool discovery, external source adapters (MCP/OpenAPI/GraphQL), credential provider resolvers.
1920 - `apps/web/`: operator UI (dashboard, tasks, approvals, tools, onboarding, org settings).
2021 - `executor.ts`: CLI entrypoint used by local source scripts and compiled binary releases.
2122
@@ -97,6 +98,8 @@ Run these from `executor/`: · 75 unmodified lines
9798
9899 ```bash
99100 bun run doctor
101+bun run doctor:prod
102+bun run deploy:prod
100103 bun run up
101104 bun run backend -- --help
102105 bun run web
@@ -113,7 +116,7 @@ Notes: · 10 unmodified lines
113116
114117 ## MCP and OAuth Surface
115118
116−Convex HTTP routes (`convex/http.ts`) expose:
119+Convex HTTP routes (`packages/convex/http.ts`) expose:
117120
118121 - `/mcp` (direct Convex MCP transport)
119122 - `/.well-known/oauth-protected-resource`
@@ -176,8 +179,9 @@ bun run typecheck:executor · 56 unmodified lines
176179 ```text
177180 executor/
178181 |- apps/web/ # Next.js operator UI
179−|- convex/ # Convex functions, schema, auth, HTTP routes
180−|- lib/ # runtime, tool loading/discovery, helper modules
182+|- packages/convex/ # Convex functions, schema, auth, HTTP routes
183+|- packages/runner-sandbox-host/ # Cloudflare worker sandbox runtime
184+|- packages/core/src/ # shared executor runtime/tooling core package code
181185 |- scripts/build-release.ts # release artifact builder
182186 |- executor.ts # CLI entrypoint (compiled into binary)
183187 |- install # curl install script
executor/convex.json+1−1
@@ -1,5 +1,5 @@
11 {
2− "functions": "convex",
2+ "functions": "packages/convex",
33 "codegen": {
44 "staticApi": true
55 }
executor/executor.ts+1−1
@@ -1,7 +1,7 @@
11 #!/usr/bin/env bun
22
33 import fs from "node:fs/promises";
4−import { managedRuntimeDiagnostics, runManagedBackend, runManagedWeb } from "./lib/managed_runtime";
4+import { managedRuntimeDiagnostics, runManagedBackend, runManagedWeb } from "./packages/core/src/managed-runtime";
55
66 function printHelp(): void {
77 console.log(`Executor CLI
executor/infra/.gitignore+2−0
@@ -0,0 +1,2 @@
1+.sst
2+.pulumi
executor/infra/README.md+122−0
@@ -0,0 +1,122 @@
1+# Executor IaC (SST)
2+
3+This directory contains the production Infrastructure as Code setup for `executor/`.
4+
5+It uses SST (v3) as the deployment framework and Pulumi providers/resources under the hood.
6+
7+## What this manages
8+
9+- Cloudflare runtime wiring for sandbox execution (via `setup:prod:cloudflare` command resource)
10+- Convex production env synchronization (via `setup:prod:env` command resource)
11+- Convex production deploy (optional command resource)
12+- Production doctor verification (`doctor:prod`) after apply
13+- Stripe catalog resources (optional): product, recurring price, webhook endpoint
14+- Vercel project + environment variables (optional)
15+
16+WorkOS and Convex are managed as code through scripted command resources because they do not have first-class native Pulumi resource coverage in this repo workflow.
17+
18+## Prerequisites
19+
20+- SST CLI login/config ready for your chosen stage
21+- Cloudflare credentials configured for SST/Pulumi deployment backend
22+- Local tools available:
23+ - `bun`
24+ - `bunx convex`
25+ - `bunx wrangler`
26+
27+## Install
28+
29+From `executor/infra`:
30+
31+```bash
32+bun install
33+```
34+
35+## Configure
36+
37+This stack resolves values in this order:
38+
39+1. SST/Pulumi stage config
40+2. Shell env (`process.env`)
41+3. Existing Convex production env (`bunx convex env list --prod`) when `IAC_USE_CONVEX_ENV_DISCOVERY` is not `0`
42+
43+So if your Convex production env is already populated, you only need minimal bootstrap values.
44+
45+Minimal bootstrap env for baseline deploy:
46+
47+```bash
48+# Convex API URL (if not already present in Convex prod env)
49+export CONVEX_URL=https://<deployment>.convex.cloud
50+```
51+
52+If Convex prod env is empty/new, also provide WorkOS + Stripe + runtime vars (or set them via SST secrets/config before deploy).
53+
54+Cloudflare auth is handled by `wrangler` when the Cloudflare setup command runs, so make sure `wrangler whoami` works in your shell.
55+
56+Optional toggles (defaults shown):
57+
58+```bash
59+export IAC_MANAGE_CLOUDFLARE_RUNTIME=true # default true
60+export IAC_MANAGE_CONVEX_ENV=true # default true
61+export IAC_DEPLOY_CONVEX_FUNCTIONS=true # default true
62+export IAC_MANAGE_VERCEL_PROJECT=false # default false
63+export IAC_MANAGE_STRIPE_CATALOG=false # default false
64+```
65+
66+If `IAC_MANAGE_STRIPE_CATALOG=true`, also set:
67+
68+```bash
69+export IAC_STRIPE_UNIT_AMOUNT=2000
70+export IAC_STRIPE_INTERVAL=month
71+export IAC_STRIPE_CURRENCY=usd
72+```
73+
74+If `IAC_MANAGE_VERCEL_PROJECT=true`, also set:
75+
76+```bash
77+export VERCEL_API_TOKEN=<value>
78+export VERCEL_TEAM=<team-id-or-slug> # optional
79+export VERCEL_PROJECT_NAME=executor-web # optional
80+export VERCEL_GIT_REPO=owner/repo # optional
81+```
82+
83+## Deploy
84+
85+```bash
86+sst install
87+bun run deploy
88+```
89+
90+From `executor/`, prefer the guided deploy runner:
91+
92+```bash
93+# Plan only (no changes)
94+bun run deploy:prod
95+
96+# Apply all steps
97+bun run deploy:prod --apply
98+
99+# Apply selected steps
100+bun run deploy:prod --apply --only cloudflare,doctor
101+```
102+
103+For first-time initialization of a fresh production deployment from `executor/`:
104+
105+```bash
106+bun run setup:prod:cloudflare --deploy
107+bun run setup:prod:env --from-env --strict
108+```
109+
110+## Helpful outputs
111+
112+The stack returns outputs including:
113+
114+- `doctorCommand`
115+- `stripePriceId`
116+- `vercelProjectId`
117+
118+## Notes
119+
120+- `doctor:prod` remains the final correctness gate.
121+- Optional billing URLs can be set as config and will be propagated to Convex env.
122+- If you disable a managed area (`manageVercelProject`, `manageStripeCatalog`, etc), ensure required values are supplied by config/secrets instead.
executor/infra/package.json+23−0
@@ -0,0 +1,23 @@
1+{
2+ "name": "executor-infra",
3+ "private": true,
4+ "type": "module",
5+ "scripts": {
6+ "dev": "sst dev",
7+ "deploy": "sst deploy",
8+ "remove": "sst remove",
9+ "diff": "sst diff",
10+ "refresh": "sst refresh"
11+ },
12+ "dependencies": {
13+ "@pulumi/command": "^1.1.3",
14+ "@pulumi/pulumi": "^3.220.0",
15+ "@pulumiverse/vercel": "^4.5.0",
16+ "pulumi-stripe": "^0.0.26",
17+ "sst": "^3.17.38"
18+ },
19+ "devDependencies": {
20+ "@types/node": "^24.6.2",
21+ "typescript": "^5.9.3"
22+ }
23+}
executor/infra/sst.config.ts+572−0
@@ -0,0 +1,572 @@
1+/// <reference path="./.sst/platform/config.d.ts" />
2+
3+function toSiteUrl(convexUrl: string): string {
4+ if (convexUrl.includes(".convex.cloud")) {
5+ return convexUrl.replace(".convex.cloud", ".convex.site");
6+ }
7+ return convexUrl;
8+}
9+
10+function compact<T>(values: Array<T | null | undefined>): T[] {
11+ return values.filter((value): value is T => value !== null && value !== undefined);
12+}
13+
14+function parseConvexEnvList(raw: string): Map<string, string> {
15+ const env = new Map<string, string>();
16+ for (const line of raw.split("\n")) {
17+ const trimmed = line.trim();
18+ if (!trimmed || trimmed.startsWith("#")) {
19+ continue;
20+ }
21+
22+ const eqIndex = trimmed.indexOf("=");
23+ if (eqIndex <= 0) {
24+ continue;
25+ }
26+
27+ const key = trimmed.slice(0, eqIndex).trim();
28+ const value = trimmed.slice(eqIndex + 1);
29+ if (key.length > 0) {
30+ env.set(key, value);
31+ }
32+ }
33+ return env;
34+}
35+
36+function loadConvexEnv(executorRoot: string, spawnSync: any): Map<string, string> {
37+ if (process.env.IAC_USE_CONVEX_ENV_DISCOVERY === "0") {
38+ return new Map<string, string>();
39+ }
40+
41+ const listed = spawnSync("bunx", ["convex", "env", "list", "--prod"], {
42+ cwd: executorRoot,
43+ env: process.env,
44+ encoding: "utf8",
45+ });
46+
47+ if (listed.status !== 0) {
48+ return new Map<string, string>();
49+ }
50+
51+ return parseConvexEnvList(listed.stdout ?? "");
52+}
53+
54+function createResolver(config: any, pulumi: any, convexEnv: Map<string, string>) {
55+ const readText = (configKey: string, envKey: string): string | undefined => {
56+ const cfg = config.get(configKey);
57+ if (cfg && cfg.trim().length > 0) {
58+ return cfg.trim();
59+ }
60+
61+ const env = process.env[envKey];
62+ if (env && env.trim().length > 0) {
63+ return env.trim();
64+ }
65+
66+ const discovered = convexEnv.get(envKey);
67+ if (discovered && discovered.trim().length > 0) {
68+ return discovered.trim();
69+ }
70+
71+ return undefined;
72+ };
73+
74+ const readSecret = (configKey: string, envKey: string): any => {
75+ const cfg = config.getSecret(configKey);
76+ if (cfg) {
77+ return cfg;
78+ }
79+
80+ const text = readText(configKey, envKey);
81+ return text ? pulumi.secret(text) : undefined;
82+ };
83+
84+ const requireText = (configKey: string, envKey: string): string => {
85+ const value = readText(configKey, envKey);
86+ if (!value) {
87+ throw new Error(`Missing required value '${configKey}' (or env '${envKey}')`);
88+ }
89+ return value;
90+ };
91+
92+ const requireSecret = (configKey: string, envKey: string): any => {
93+ const value = readSecret(configKey, envKey);
94+ if (!value) {
95+ throw new Error(`Missing required secret '${configKey}' (or env '${envKey}')`);
96+ }
97+ return value;
98+ };
99+
100+ const readBool = (configKey: string, envKey: string, fallback: boolean): boolean => {
101+ const cfg = config.getBoolean(configKey);
102+ if (cfg !== undefined) {
103+ return cfg;
104+ }
105+
106+ const env = process.env[envKey]?.trim().toLowerCase();
107+ if (!env) {
108+ return fallback;
109+ }
110+
111+ if (["1", "true", "yes", "on"].includes(env)) {
112+ return true;
113+ }
114+ if (["0", "false", "no", "off"].includes(env)) {
115+ return false;
116+ }
117+ return fallback;
118+ };
119+
120+ return {
121+ readText,
122+ readSecret,
123+ requireText,
124+ requireSecret,
125+ readBool,
126+ };
127+}
128+
129+function setupStripe(args: {
130+ manageStripeCatalog: boolean;
131+ resolver: ReturnType<typeof createResolver>;
132+ stripe: any;
133+ config: any;
134+ stage: string;
135+ convexSiteUrl: string;
136+}) {
137+ const { manageStripeCatalog, resolver, stripe, config, stage, convexSiteUrl } = args;
138+
139+ let stripePriceId: any = resolver.readText("stripePriceId", "STRIPE_PRICE_ID");
140+ let stripeWebhookSecret: any = resolver.readSecret("stripeWebhookSecret", "STRIPE_WEBHOOK_SECRET");
141+ const stripeSecretKey = resolver.readSecret("stripeSecretKey", "STRIPE_SECRET_KEY");
142+
143+ let stripeProductResource: any;
144+ if (manageStripeCatalog) {
145+ const stripeProvider = new stripe.Provider("stripe-provider", {
146+ apiKey: resolver.requireSecret("stripeSecretKey", "STRIPE_SECRET_KEY"),
147+ });
148+
149+ const unitAmountRaw = resolver.requireText("stripeUnitAmount", "IAC_STRIPE_UNIT_AMOUNT");
150+ const unitAmount = Number.parseInt(unitAmountRaw, 10);
151+ if (!Number.isFinite(unitAmount) || unitAmount <= 0) {
152+ throw new Error(`Invalid stripeUnitAmount '${unitAmountRaw}'`);
153+ }
154+
155+ const currency = resolver.readText("stripeCurrency", "IAC_STRIPE_CURRENCY") ?? "usd";
156+ const interval = resolver.readText("stripeInterval", "IAC_STRIPE_INTERVAL") ?? "month";
157+ const lookupKey = resolver.readText("stripeLookupKey", "IAC_STRIPE_LOOKUP_KEY") ?? "executor_team_seat_monthly";
158+ const productName = resolver.readText("stripeProductName", "IAC_STRIPE_PRODUCT_NAME") ?? "Executor Team Seat";
159+ const productDescription =
160+ resolver.readText("stripeProductDescription", "IAC_STRIPE_PRODUCT_DESCRIPTION")
161+ ?? "Per-seat subscription for Executor organizations.";
162+
163+ stripeProductResource = new stripe.Product(
164+ "executor-seat-product",
165+ {
166+ name: productName,
167+ description: productDescription,
168+ active: true,
169+ metadata: { managedBy: "sst", stage },
170+ },
171+ { provider: stripeProvider },
172+ );
173+
174+ const stripePrice = new stripe.Price(
175+ "executor-seat-price",
176+ {
177+ product: stripeProductResource.id,
178+ currency,
179+ unitAmount,
180+ lookupKey,
181+ recurring: { interval },
182+ metadata: { managedBy: "sst", stage },
183+ },
184+ { provider: stripeProvider },
185+ );
186+ stripePriceId = stripePrice.id;
187+
188+ const webhookUrl = resolver.readText("stripeWebhookUrl", "IAC_STRIPE_WEBHOOK_URL") ?? `${convexSiteUrl}/stripe/webhook`;
189+ const webhookEvents =
190+ (config.getObject("stripeWebhookEvents") as string[] | undefined)
191+ ?? [
192+ "checkout.session.completed",
193+ "customer.subscription.created",
194+ "customer.subscription.updated",
195+ "customer.subscription.deleted",
196+ "invoice.paid",
197+ "invoice.payment_failed",
198+ ];
199+
200+ const webhook = new stripe.WebhookEndpoint(
201+ "executor-billing-webhook",
202+ {
203+ url: webhookUrl,
204+ enabledEvents: webhookEvents,
205+ description: `Executor billing webhook (${stage})`,
206+ },
207+ { provider: stripeProvider },
208+ );
209+
210+ stripeWebhookSecret = webhook.secret;
211+ }
212+
213+ return {
214+ stripePriceId,
215+ stripeWebhookSecret,
216+ stripeSecretKey,
217+ stripeProductResource,
218+ };
219+}
220+
221+function setupCloudflareRuntime(args: {
222+ enabled: boolean;
223+ resolver: ReturnType<typeof createResolver>;
224+ pulumi: any;
225+ command: any;
226+ convexUrl: string;
227+ executorRoot: string;
228+}) {
229+ const { enabled, resolver, pulumi, command, convexUrl, executorRoot } = args;
230+ if (!enabled) {
231+ return undefined;
232+ }
233+
234+ const runUrl = resolver.readText("cloudflareSandboxRunUrl", "CLOUDFLARE_SANDBOX_RUN_URL");
235+ const authToken = resolver.readSecret("cloudflareSandboxAuthToken", "CLOUDFLARE_SANDBOX_AUTH_TOKEN");
236+ const internalToken = resolver.readSecret("executorInternalToken", "EXECUTOR_INTERNAL_TOKEN");
237+
238+ const runUrlArg = runUrl ? pulumi.interpolate` --run-url ${runUrl}` : "";
239+ const authArg = authToken ? pulumi.interpolate` --auth-token ${authToken}` : "";
240+ const internalArg = internalToken ? pulumi.interpolate` --internal-token ${internalToken}` : "";
241+
242+ const setupCmd = pulumi.interpolate`bun run setup:prod:cloudflare --deploy --no-doctor --convex-url ${convexUrl}${runUrlArg}${authArg}${internalArg}`;
243+
244+ return new command.local.Command("executor-cloudflare-runtime", {
245+ create: setupCmd,
246+ update: setupCmd,
247+ dir: executorRoot,
248+ triggers: [runUrl ?? "", convexUrl, authToken ?? "", internalToken ?? ""],
249+ });
250+}
251+
252+function setupConvexEnvSync(args: {
253+ enabled: boolean;
254+ resolver: ReturnType<typeof createResolver>;
255+ command: any;
256+ executorRoot: string;
257+ cloudflareSetup: any;
258+ stripeSecretKey: any;
259+ stripeWebhookSecret: any;
260+ stripePriceId: any;
261+}) {
262+ const {
263+ enabled,
264+ resolver,
265+ command,
266+ executorRoot,
267+ cloudflareSetup,
268+ stripeSecretKey,
269+ stripeWebhookSecret,
270+ stripePriceId,
271+ } = args;
272+ if (!enabled) {
273+ return undefined;
274+ }
275+
276+ const workosClientId = resolver.requireText("workosClientId", "WORKOS_CLIENT_ID");
277+ const workosApiKey = resolver.requireSecret("workosApiKey", "WORKOS_API_KEY");
278+ const workosWebhookSecret = resolver.requireSecret("workosWebhookSecret", "WORKOS_WEBHOOK_SECRET");
279+ const workosCookiePassword = resolver.requireSecret("workosCookiePassword", "WORKOS_COOKIE_PASSWORD");
280+ const mcpAuthorizationServer =
281+ resolver.readText("mcpAuthorizationServer", "MCP_AUTHORIZATION_SERVER")
282+ ?? resolver.readText("mcpAuthorizationServer", "MCP_AUTHORIZATION_SERVER_URL");
283+ if (!mcpAuthorizationServer) {
284+ throw new Error("Missing MCP authorization server (MCP_AUTHORIZATION_SERVER or MCP_AUTHORIZATION_SERVER_URL)");
285+ }
286+
287+ if (!stripeSecretKey) {
288+ throw new Error("Missing stripeSecretKey (or STRIPE_SECRET_KEY)");
289+ }
290+ if (!stripePriceId) {
291+ throw new Error("Missing stripePriceId (or STRIPE_PRICE_ID)");
292+ }
293+ if (!stripeWebhookSecret) {
294+ throw new Error("Missing stripeWebhookSecret (or STRIPE_WEBHOOK_SECRET)");
295+ }
296+
297+ const billingSuccessUrl = resolver.readText("billingSuccessUrl", "BILLING_SUCCESS_URL");
298+ const billingCancelUrl = resolver.readText("billingCancelUrl", "BILLING_CANCEL_URL");
299+ const billingReturnUrl = resolver.readText("billingReturnUrl", "BILLING_RETURN_URL");
300+
301+ const envVars: Record<string, any> = {
302+ WORKOS_CLIENT_ID: workosClientId,
303+ WORKOS_API_KEY: workosApiKey,
304+ WORKOS_WEBHOOK_SECRET: workosWebhookSecret,
305+ WORKOS_COOKIE_PASSWORD: workosCookiePassword,
306+ MCP_AUTHORIZATION_SERVER: mcpAuthorizationServer,
307+ STRIPE_SECRET_KEY: stripeSecretKey,
308+ STRIPE_WEBHOOK_SECRET: stripeWebhookSecret,
309+ STRIPE_PRICE_ID: stripePriceId,
310+ };
311+
312+ if (billingSuccessUrl) envVars.BILLING_SUCCESS_URL = billingSuccessUrl;
313+ if (billingCancelUrl) envVars.BILLING_CANCEL_URL = billingCancelUrl;
314+ if (billingReturnUrl) envVars.BILLING_RETURN_URL = billingReturnUrl;
315+
316+ return new command.local.Command(
317+ "executor-convex-env",
318+ {
319+ create: "bun run setup:prod:env --from-env --strict",
320+ update: "bun run setup:prod:env --from-env --strict",
321+ dir: executorRoot,
322+ environment: envVars,
323+ triggers: [
324+ workosClientId,
325+ workosApiKey,
326+ workosWebhookSecret,
327+ workosCookiePassword,
328+ mcpAuthorizationServer,
329+ stripeSecretKey,
330+ stripeWebhookSecret,
331+ stripePriceId,
332+ billingSuccessUrl ?? "",
333+ billingCancelUrl ?? "",
334+ billingReturnUrl ?? "",
335+ ],
336+ },
337+ {
338+ dependsOn: compact([cloudflareSetup]),
339+ },
340+ );
341+}
342+
343+function setupConvexDeploy(args: {
344+ enabled: boolean;
345+ command: any;
346+ executorRoot: string;
347+ stage: string;
348+ convexEnvSync: any;
349+ cloudflareSetup: any;
350+}) {
351+ const { enabled, command, executorRoot, stage, convexEnvSync, cloudflareSetup } = args;
352+ if (!enabled) {
353+ return undefined;
354+ }
355+
356+ return new command.local.Command(
357+ "executor-convex-deploy",
358+ {
359+ create: "bunx convex deploy --prod",
360+ update: "bunx convex deploy --prod",
361+ dir: executorRoot,
362+ triggers: [stage],
363+ },
364+ {
365+ dependsOn: compact([convexEnvSync, cloudflareSetup]),
366+ },
367+ );
368+}
369+
370+function setupDoctor(args: {
371+ command: any;
372+ executorRoot: string;
373+ stage: string;
374+ convexDeploy: any;
375+ convexEnvSync: any;
376+ cloudflareSetup: any;
377+}) {
378+ const { command, executorRoot, stage, convexDeploy, convexEnvSync, cloudflareSetup } = args;
379+ return new command.local.Command(
380+ "executor-doctor-prod",
381+ {
382+ create: "bun run doctor:prod",
383+ update: "bun run doctor:prod",
384+ dir: executorRoot,
385+ triggers: [stage],
386+ },
387+ {
388+ dependsOn: compact([convexDeploy, convexEnvSync, cloudflareSetup]),
389+ },
390+ );
391+}
392+
393+function setupVercel(args: {
394+ enabled: boolean;
395+ resolver: ReturnType<typeof createResolver>;
396+ vercel: any;
397+ convexUrl: string;
398+ convexSiteUrl: string;
399+ stripePriceId: any;
400+}) {
401+ const { enabled, resolver, vercel, convexUrl, convexSiteUrl, stripePriceId } = args;
402+ if (!enabled) {
403+ return undefined;
404+ }
405+
406+ const vercelApiToken = resolver.requireSecret("vercelApiToken", "VERCEL_API_TOKEN");
407+ const vercelTeam = resolver.readText("vercelTeam", "VERCEL_TEAM");
408+ const vercelProjectName = resolver.readText("vercelProjectName", "VERCEL_PROJECT_NAME") ?? "executor-web";
409+ const vercelGitRepo = resolver.readText("vercelGitRepo", "VERCEL_GIT_REPO");
410+
411+ const provider = new vercel.Provider("vercel-provider", {
412+ apiToken: vercelApiToken,
413+ team: vercelTeam,
414+ });
415+
416+ const project = new vercel.Project(
417+ "executor-web-project",
418+ {
419+ name: vercelProjectName,
420+ framework: "nextjs",
421+ rootDirectory: "executor/apps/web",
422+ gitRepository: vercelGitRepo
423+ ? {
424+ type: "github",
425+ repo: vercelGitRepo,
426+ }
427+ : undefined,
428+ },
429+ { provider },
430+ );
431+
432+ const workosClientId = resolver.readText("workosClientId", "WORKOS_CLIENT_ID") ?? "";
433+ const workosApiKey = resolver.readSecret("workosApiKey", "WORKOS_API_KEY") ?? "";
434+ const workosCookiePassword = resolver.readSecret("workosCookiePassword", "WORKOS_COOKIE_PASSWORD") ?? "";
435+
436+ const vercelVars: Array<{ key: string; value: any; sensitive: boolean }> = [
437+ { key: "CONVEX_URL", value: convexUrl, sensitive: false },
438+ { key: "CONVEX_SITE_URL", value: convexSiteUrl, sensitive: false },
439+ { key: "WORKOS_CLIENT_ID", value: workosClientId, sensitive: false },
440+ { key: "WORKOS_API_KEY", value: workosApiKey, sensitive: true },
441+ { key: "WORKOS_COOKIE_PASSWORD", value: workosCookiePassword, sensitive: true },
442+ { key: "STRIPE_PRICE_ID", value: stripePriceId ?? "", sensitive: false },
443+ ];
444+
445+ for (const item of vercelVars) {
446+ if (!item.value) {
447+ continue;
448+ }
449+
450+ new vercel.ProjectEnvironmentVariable(
451+ `vercel-env-${item.key.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`,
452+ {
453+ projectId: project.id,
454+ key: item.key,
455+ value: item.value,
456+ targets: ["production", "preview", "development"],
457+ sensitive: item.sensitive,
458+ },
459+ { provider },
460+ );
461+ }
462+
463+ return project;
464+}
465+
466+export default $config({
467+ app(input: any) {
468+ return {
469+ name: "executor-infra",
470+ home: "local",
471+ removal: input?.stage === "production" ? "retain" : "remove",
472+ };
473+ },
474+ async run() {
475+ const path = await import("node:path");
476+ const { fileURLToPath } = await import("node:url");
477+ const { spawnSync } = await import("node:child_process");
478+ const pulumi = await import("@pulumi/pulumi");
479+ const command = await import("@pulumi/command");
480+ const stripe = await import("pulumi-stripe");
481+ const vercel = await import("@pulumiverse/vercel");
482+
483+ const stage = $app.stage;
484+ const executorRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
485+ const config = new pulumi.Config();
486+ const convexEnv = loadConvexEnv(executorRoot, spawnSync);
487+ const resolver = createResolver(config, pulumi, convexEnv);
488+
489+ const flags = {
490+ manageCloudflareRuntime: resolver.readBool("manageCloudflareRuntime", "IAC_MANAGE_CLOUDFLARE_RUNTIME", true),
491+ manageConvexEnv: resolver.readBool("manageConvexEnv", "IAC_MANAGE_CONVEX_ENV", true),
492+ deployConvexFunctions: resolver.readBool("deployConvexFunctions", "IAC_DEPLOY_CONVEX_FUNCTIONS", true),
493+ manageStripeCatalog: resolver.readBool("manageStripeCatalog", "IAC_MANAGE_STRIPE_CATALOG", false),
494+ manageVercelProject: resolver.readBool("manageVercelProject", "IAC_MANAGE_VERCEL_PROJECT", false),
495+ };
496+
497+ const convexUrl = resolver.requireText("convexUrl", "CONVEX_URL");
498+ const convexSiteUrl = resolver.readText("convexSiteUrl", "CONVEX_SITE_URL") ?? toSiteUrl(convexUrl);
499+
500+ const stripeState = setupStripe({
501+ manageStripeCatalog: flags.manageStripeCatalog,
502+ resolver,
503+ stripe,
504+ config,
505+ stage,
506+ convexSiteUrl,
507+ });
508+
509+ const cloudflareSetup = setupCloudflareRuntime({
510+ enabled: flags.manageCloudflareRuntime,
511+ resolver,
512+ pulumi,
513+ command,
514+ convexUrl,
515+ executorRoot,
516+ });
517+
518+ const convexEnvSync = setupConvexEnvSync({
519+ enabled: flags.manageConvexEnv,
520+ resolver,
521+ command,
522+ executorRoot,
523+ cloudflareSetup,
524+ stripeSecretKey: stripeState.stripeSecretKey,
525+ stripeWebhookSecret: stripeState.stripeWebhookSecret,
526+ stripePriceId: stripeState.stripePriceId,
527+ });
528+
529+ const convexDeploy = setupConvexDeploy({
530+ enabled: flags.deployConvexFunctions,
531+ command,
532+ executorRoot,
533+ stage,
534+ convexEnvSync,
535+ cloudflareSetup,
536+ });
537+
538+ const doctor = setupDoctor({
539+ command,
540+ executorRoot,
541+ stage,
542+ convexDeploy,
543+ convexEnvSync,
544+ cloudflareSetup,
545+ });
546+
547+ const vercelProject = setupVercel({
548+ enabled: flags.manageVercelProject,
549+ resolver,
550+ vercel,
551+ convexUrl,
552+ convexSiteUrl,
553+ stripePriceId: stripeState.stripePriceId,
554+ });
555+
556+ return {
557+ stage,
558+ convexUrl,
559+ convexSiteUrl,
560+ cloudflareRuntimeManaged: flags.manageCloudflareRuntime,
561+ convexEnvManaged: flags.manageConvexEnv,
562+ convexDeployManaged: flags.deployConvexFunctions,
563+ stripeManaged: flags.manageStripeCatalog,
564+ vercelManaged: flags.manageVercelProject,
565+ doctorCommand: "bun run --cwd executor doctor:prod",
566+ doctorResourceId: doctor.id,
567+ stripeProductId: stripeState.stripeProductResource?.id,
568+ stripePriceId: stripeState.stripePriceId,
569+ vercelProjectId: vercelProject?.id,
570+ };
571+ },
572+});
executor/infra/tsconfig.json+12−0
@@ -0,0 +1,12 @@
1+{
2+ "compilerOptions": {
3+ "target": "ES2022",
4+ "module": "ESNext",
5+ "moduleResolution": "Bundler",
6+ "strict": true,
7+ "esModuleInterop": true,
8+ "skipLibCheck": true,
9+ "types": ["node"]
10+ },
11+ "include": ["./sst.config.ts"]
12+}
executor/package.json+9−0
@@ -4,6 +4,15 @@ · 3 unmodified lines
44 "type": "module",
55 "scripts": {
66 "doctor": "bun run executor.ts doctor",
7+ "doctor:prod": "bun run scripts/doctor-prod.ts",
8+ "deploy:prod": "bun run scripts/deploy-prod.ts",
9+ "setup:prod:env": "bun run scripts/setup-prod-env.ts --from-env",
10+ "setup:prod:cloudflare": "bun run scripts/setup-prod-cloudflare.ts",
11+ "setup:prod:all": "bun run setup:prod:cloudflare --deploy && bun run setup:prod:env && bun run doctor:prod",
12+ "iac:install": "bun install --cwd infra",
13+ "iac:deploy": "bun run --cwd infra deploy",
14+ "iac:diff": "bun run --cwd infra diff",
15+ "iac:remove": "bun run --cwd infra remove",
716 "up": "bun run executor.ts up",
817 "backend": "bun run executor.ts backend",
918 "convex": "bun run executor.ts backend",
executor/packages/convex/_generated/api.d.tsrenamed from executor/convex/_generated/api.d.ts+0−0

File renamed without changes.

executor/packages/convex/_generated/api.jsrenamed from executor/convex/_generated/api.js+0−0

File renamed without changes.

executor/packages/convex/_generated/dataModel.d.tsrenamed from executor/convex/_generated/dataModel.d.ts+0−0

File renamed without changes.

executor/packages/convex/_generated/server.d.tsrenamed from executor/convex/_generated/server.d.ts+0−0

File renamed without changes.

executor/packages/convex/_generated/server.jsrenamed from executor/convex/_generated/server.js+0−0

File renamed without changes.

executor/packages/convex/access-controls.test.tsrenamed from executor/convex/access-controls.test.ts+0−0

File renamed without changes.

executor/packages/convex/accounts.tsrenamed from executor/convex/accounts.ts+1−1
@@ -1,6 +1,6 @@
11 import type { Id } from "./_generated/dataModel";
22 import type { MutationCtx } from "./_generated/server";
3−import { authedMutation } from "../lib/functionBuilders";
3+import { authedMutation } from "../core/src/function-builders";
44
55 async function deleteWorkspaceData(
66 ctx: Pick<MutationCtx, "db" | "storage">,
executor/packages/convex/anonymousOauth.tsrenamed from executor/convex/anonymousOauth.ts+0−0

File renamed without changes.

executor/packages/convex/app.tsrenamed from executor/convex/app.ts+1−1
@@ -1,5 +1,5 @@
11 import { query } from "./_generated/server";
2−import { optionalAccountQuery } from "../lib/functionBuilders";
2+import { optionalAccountQuery } from "../core/src/function-builders";
33
44 const workosEnabled = Boolean(process.env.WORKOS_CLIENT_ID && process.env.WORKOS_API_KEY);
55
executor/packages/convex/auth.config.tsrenamed from executor/convex/auth.config.ts+0−0

File renamed without changes.

executor/packages/convex/auth.tsrenamed from executor/convex/auth.ts+1−1
@@ -3,7 +3,7 @@ import { components, internal } from "./_generated/api"; · 2 unmodified lines
33 import type { DataModel, Doc, Id } from "./_generated/dataModel";
44 import type { MutationCtx } from "./_generated/server";
55 import { internalMutation, mutation } from "./_generated/server";
6−import { ensureUniqueSlug } from "../lib/slug";
6+import { ensureUniqueSlug } from "../core/src/slug";
77
88 type DbCtx = Pick<MutationCtx, "db">;
99 type RunQueryCtx = Pick<MutationCtx, "runQuery">;
executor/packages/convex/billing.tsrenamed from executor/convex/billing.ts+2−2
@@ -4,8 +4,8 @@ import type { Id } from "./_generated/dataModel"; · 3 unmodified lines
44 import { components, internal } from "./_generated/api";
55 import type { MutationCtx, QueryCtx } from "./_generated/server";
66 import { action } from "./_generated/server";
7−import { organizationMutation, organizationQuery } from "../lib/functionBuilders";
8−import { canManageBilling, isAdminRole } from "../lib/identity";
7+import { organizationMutation, organizationQuery } from "../core/src/function-builders";
8+import { canManageBilling, isAdminRole } from "../core/src/identity";
99
1010 const stripeClient = new StripeSubscriptions(components.stripe, {});
1111
executor/packages/convex/billingInternal.tsrenamed from executor/convex/billingInternal.ts+1−1
@@ -2,7 +2,7 @@ import { v } from "convex/values"; · 1 unmodified line
22 import type { Doc, Id } from "./_generated/dataModel";
33 import type { MutationCtx, QueryCtx } from "./_generated/server";
44 import { internalMutation, internalQuery } from "./_generated/server";
5−import { internalOrganizationQuery } from "../lib/functionBuilders";
5+import { internalOrganizationQuery } from "../core/src/function-builders";
66
77 type DbCtx = Pick<QueryCtx, "db"> | Pick<MutationCtx, "db">;
88
executor/packages/convex/billingSync.tsrenamed from executor/convex/billingSync.ts+0−0

File renamed without changes.

executor/packages/convex/convex.config.tsrenamed from executor/convex/convex.config.ts+0−0

File renamed without changes.

executor/packages/convex/credentialsNode.tsrenamed from executor/convex/credentialsNode.ts+0−0

File renamed without changes.

executor/packages/convex/database.test.tsrenamed from executor/convex/database.test.ts+0−0

File renamed without changes.

executor/packages/convex/database.tsrenamed from executor/convex/database.ts+2−2
@@ -2,8 +2,8 @@ import { v } from "convex/values"; · 1 unmodified line
22 import type { Doc } from "./_generated/dataModel";
33 import { type MutationCtx, type QueryCtx } from "./_generated/server";
44 import { internalMutation, internalQuery } from "./_generated/server";
5−import { ensureUniqueSlug } from "../lib/slug";
6−import type { TaskStatus } from "../lib/types";
5+import { ensureUniqueSlug } from "../core/src/slug";
6+import type { TaskStatus } from "../core/src/types";
77
88 const DEFAULT_TIMEOUT_MS = 300_000;
99 type OrganizationRole = "owner" | "admin" | "member" | "billing_admin";
executor/packages/convex/executor-mcp.e2e.test.tsrenamed from executor/convex/executor-mcp.e2e.test.ts+0−0

File renamed without changes.

executor/packages/convex/executor.tsrenamed from executor/convex/executor.ts+4−4
@@ -3,10 +3,10 @@ import { internal } from "./_generated/api"; · 2 unmodified lines
33 import type { Id } from "./_generated/dataModel";
44 import type { MutationCtx } from "./_generated/server";
55 import { internalMutation } from "./_generated/server";
6−import { workspaceMutation } from "../lib/functionBuilders";
7−import { actorIdForAccount } from "../lib/identity";
8−import { isKnownRuntimeId } from "../lib/runtimes/runtime_catalog";
9−import type { ApprovalRecord, TaskRecord } from "../lib/types";
6+import { workspaceMutation } from "../core/src/function-builders";
7+import { actorIdForAccount } from "../core/src/identity";
8+import { isKnownRuntimeId } from "../core/src/runtimes/runtime-catalog";
9+import type { ApprovalRecord, TaskRecord } from "../core/src/types";
1010
1111 const DEFAULT_TIMEOUT_MS = 300_000;
1212
executor/packages/convex/executorNode.github-profile.e2e.test.tsrenamed from executor/convex/executorNode.github-profile.e2e.test.ts+0−0

File renamed without changes.

executor/packages/convex/executorNode.tsrenamed from executor/convex/executorNode.ts+12−12
@@ -5,19 +5,19 @@ import { internal } from "./_generated/api"; · 4 unmodified lines
55 import type { Id } from "./_generated/dataModel";
66 import { action, internalAction } from "./_generated/server";
77 import type { ActionCtx } from "./_generated/server";
8−import { InProcessExecutionAdapter } from "../lib/adapters/in_process_execution_adapter";
9−import { resolveCredentialPayload } from "../lib/credential_providers";
10−import { APPROVAL_DENIED_PREFIX, APPROVAL_PENDING_PREFIX } from "../lib/execution_constants";
11−import { actorIdForAccount } from "../lib/identity";
12−import { dispatchCodeWithCloudflareWorkerLoader } from "../lib/runtimes/cloudflare_worker_loader_runtime";
8+import { InProcessExecutionAdapter } from "../core/src/adapters/in-process-execution-adapter";
9+import { resolveCredentialPayload } from "../core/src/credential-providers";
10+import { APPROVAL_DENIED_PREFIX, APPROVAL_PENDING_PREFIX } from "../core/src/execution-constants";
11+import { actorIdForAccount } from "../core/src/identity";
12+import { dispatchCodeWithCloudflareWorkerLoader } from "../core/src/runtimes/cloudflare-worker-loader-runtime";
1313 import {
1414 CLOUDFLARE_WORKER_LOADER_RUNTIME_ID,
1515 isCloudflareWorkerLoaderConfigured,
1616 isKnownRuntimeId,
1717 LOCAL_BUN_RUNTIME_ID,
18−} from "../lib/runtimes/runtime_catalog";
19−import { runCodeWithAdapter } from "../lib/runtimes/runtime_core";
20−import { createDiscoverTool } from "../lib/tool_discovery";
18+} from "../core/src/runtimes/runtime-catalog";
19+import { runCodeWithAdapter } from "../core/src/runtimes/runtime-core";
20+import { createDiscoverTool } from "../core/src/tool-discovery";
2121 import {
2222 compileExternalToolSource,
2323 compileOpenApiToolSourceFromPrepared,
@@ -32,8 +32,8 @@ import { · 8 unmodified lines
3232 type OpenApiToolSourceConfig,
3333 type GraphqlToolSourceConfig,
3434 type WorkspaceToolSnapshot,
35−} from "../lib/tool_sources";
36−import { DEFAULT_TOOLS } from "../lib/tools";
35+} from "../core/src/tool-sources";
36+import { DEFAULT_TOOLS } from "../core/src/tools";
3737 import type {
3838 AccessPolicyRecord,
3939 CredentialScope,
@@ -49,8 +49,8 @@ import type { · 9 unmodified lines
4949 OpenApiSourceQuality,
5050 ToolSourceRecord,
5151 ToolRunContext,
52−} from "../lib/types";
53−import { asPayload, describeError } from "../lib/utils";
52+} from "../core/src/types";
53+import { asPayload, describeError } from "../core/src/utils";
5454
5555 function createApprovalId(): string {
5656 return `approval_${crypto.randomUUID()}`;
executor/packages/convex/http.tsrenamed from executor/convex/http.ts+2−2
@@ -4,8 +4,8 @@ import { httpRouter } from "convex/server"; · 3 unmodified lines
44 import { components, internal } from "./_generated/api";
55 import { httpAction } from "./_generated/server";
66 import { authKit } from "./auth";
7−import { handleMcpRequest, type McpWorkspaceContext } from "../lib/mcp_server";
8−import type { AnonymousContext, PendingApprovalRecord, TaskRecord, ToolDescriptor } from "../lib/types";
7+import { handleMcpRequest, type McpWorkspaceContext } from "../core/src/mcp-server";
8+import type { AnonymousContext, PendingApprovalRecord, TaskRecord, ToolDescriptor } from "../core/src/types";
99 import type { Id } from "./_generated/dataModel";
1010
1111 const http = httpRouter();
executor/packages/convex/invites.tsrenamed from executor/convex/invites.ts+1−1
@@ -2,7 +2,7 @@ import { WorkOS } from "@workos-inc/node"; · 1 unmodified line
22 import { v } from "convex/values";
33 import { internal } from "./_generated/api";
44 import { internalAction, internalMutation, internalQuery } from "./_generated/server";
5−import { organizationMutation, organizationQuery } from "../lib/functionBuilders";
5+import { organizationMutation, organizationQuery } from "../core/src/function-builders";
66
77 const workosEnabled = Boolean(process.env.WORKOS_CLIENT_ID && process.env.WORKOS_API_KEY);
88 const workosClient = process.env.WORKOS_API_KEY ? new WorkOS(process.env.WORKOS_API_KEY) : null;
executor/packages/convex/mcp-run-code-oom.e2e.test.tsrenamed from executor/convex/mcp-run-code-oom.e2e.test.ts+0−0

File renamed without changes.

executor/packages/convex/mcpNode.tsrenamed from executor/convex/mcpNode.ts+3−3
@@ -3,9 +3,9 @@ · 2 unmodified lines
33 import { v } from "convex/values";
44 import { internal } from "./_generated/api";
55 import { internalAction } from "./_generated/server";
6−import { loadSourceDtsByUrlCached } from "../lib/dts_loader";
7−import { generateToolDeclarations, typecheckCode } from "../lib/typechecker";
8−import type { ToolDescriptor } from "../lib/types";
6+import { loadSourceDtsByUrlCached } from "../core/src/dts-loader";
7+import { generateToolDeclarations, typecheckCode } from "../core/src/typechecker";
8+import type { ToolDescriptor } from "../core/src/types";
99
1010 export const typecheckRunCodeInternal = internalAction({
1111 args: {
executor/packages/convex/migrations.tsrenamed from executor/convex/migrations.ts+0−0

File renamed without changes.

executor/packages/convex/openApiSpecCache.test.tsrenamed from executor/convex/openApiSpecCache.test.ts+0−0

File renamed without changes.

executor/packages/convex/openApiSpecCache.tsrenamed from executor/convex/openApiSpecCache.ts+0−0

File renamed without changes.

executor/packages/convex/organizationMembers.tsrenamed from executor/convex/organizationMembers.ts+2−2
@@ -1,7 +1,7 @@
11 import { v } from "convex/values";
22 import { internal } from "./_generated/api";
3−import { getOrganizationMembership } from "../lib/identity";
4−import { organizationMutation, organizationQuery } from "../lib/functionBuilders";
3+import { getOrganizationMembership } from "../core/src/identity";
4+import { organizationMutation, organizationQuery } from "../core/src/function-builders";
55
66 const organizationRoleValidator = v.union(
77 v.literal("owner"),
executor/packages/convex/organizations.tsrenamed from executor/convex/organizations.ts+3−3
@@ -1,9 +1,9 @@
11 import { v } from "convex/values";
22 import type { Doc, Id } from "./_generated/dataModel";
33 import type { MutationCtx, QueryCtx } from "./_generated/server";
4−import { optionalAccountQuery, authedMutation } from "../lib/functionBuilders";
5−import { getOrganizationMembership, slugify } from "../lib/identity";
6−import { ensureUniqueSlug } from "../lib/slug";
4+import { optionalAccountQuery, authedMutation } from "../core/src/function-builders";
5+import { getOrganizationMembership, slugify } from "../core/src/identity";
6+import { ensureUniqueSlug } from "../core/src/slug";
77
88 type WorkspaceSummary = {
99 id: Id<"workspaces">;
executor/packages/convex/package.jsonrenamed from executor/convex/package.json+0−0

File renamed without changes.

executor/packages/convex/runtimeCallbacks.tsrenamed from executor/convex/runtimeCallbacks.ts+1−1
@@ -1,7 +1,7 @@
11 import { v } from "convex/values";
22 import { internal } from "./_generated/api";
33 import { action, mutation } from "./_generated/server";
4−import type { ToolCallResult } from "../lib/types";
4+import type { ToolCallResult } from "../core/src/types";
55
66 function requireInternalSecret(secret: string): void {
77 const expected = process.env.EXECUTOR_INTERNAL_TOKEN;
executor/packages/convex/schema.tsrenamed from executor/convex/schema.ts+0−0

File renamed without changes.

executor/packages/convex/test-fixtures/executorNode.oomFixture.tsrenamed from executor/convex/test-fixtures/executorNode.oomFixture.ts+0−0

File renamed without changes.

executor/packages/convex/workspace.tsrenamed from executor/convex/workspace.ts+1−1
@@ -1,7 +1,7 @@
11 import { v } from "convex/values";
22 import { internal } from "./_generated/api";
33 import { mutation, query } from "./_generated/server";
4−import { workspaceMutation, workspaceQuery } from "../lib/functionBuilders";
4+import { workspaceMutation, workspaceQuery } from "../core/src/function-builders";
55
66 const policyDecisionValidator = v.union(v.literal("allow"), v.literal("require_approval"), v.literal("deny"));
77 const credentialScopeValidator = v.union(v.literal("workspace"), v.literal("actor"));
executor/packages/convex/workspaceAuthInternal.tsrenamed from executor/convex/workspaceAuthInternal.ts+1−1
@@ -5,7 +5,7 @@ import { · 4 unmodified lines
55 requireWorkspaceAccessForAccount,
66 resolveAccountForRequest,
77 resolveWorkosAccountBySubject,
8−} from "../lib/identity";
8+} from "../core/src/identity";
99
1010 export const getWorkspaceAccessForRequest = internalQuery({
1111 args: {
executor/packages/convex/workspaceToolCache.tsrenamed from executor/convex/workspaceToolCache.ts+0−0

File renamed without changes.

executor/packages/convex/workspaces.tsrenamed from executor/convex/workspaces.ts+3−3
@@ -1,9 +1,9 @@
11 import { v } from "convex/values";
22 import type { Doc, Id } from "./_generated/dataModel";
33 import type { MutationCtx, QueryCtx } from "./_generated/server";
4−import { optionalAccountQuery, authedMutation } from "../lib/functionBuilders";
5−import { getOrganizationMembership, slugify } from "../lib/identity";
6−import { ensureUniqueSlug } from "../lib/slug";
4+import { optionalAccountQuery, authedMutation } from "../core/src/function-builders";
5+import { getOrganizationMembership, slugify } from "../core/src/identity";
6+import { ensureUniqueSlug } from "../core/src/slug";
77
88 type WorkspaceResult = {
99 id: Id<"workspaces">;
executor/packages/core/package.json+12−0
@@ -0,0 +1,12 @@
1+{
2+ "name": "@executor/core",
3+ "version": "0.1.0",
4+ "private": true,
5+ "type": "module",
6+ "scripts": {
7+ "typecheck": "tsc --noEmit"
8+ },
9+ "devDependencies": {
10+ "typescript": "^5.9.3"
11+ }
12+}
executor/packages/core/src/adapters/in-process-execution-adapter.test.tsrenamed from executor/lib/adapters/in-process-execution-adapter.test.ts+2−2
@@ -1,6 +1,6 @@
11 import { expect, test } from "bun:test";
2−import { APPROVAL_DENIED_PREFIX } from "../execution_constants";
3−import { InProcessExecutionAdapter } from "./in_process_execution_adapter";
2+import { APPROVAL_DENIED_PREFIX } from "../execution-constants";
3+import { InProcessExecutionAdapter } from "./in-process-execution-adapter";
44
55 test("returns run mismatch without invoking tool", async () => {
66 let called = 0;
executor/packages/core/src/adapters/in-process-execution-adapter.tsrenamed from executor/lib/adapters/in_process_execution_adapter.ts+1−1
@@ -1,4 +1,4 @@
1−import { APPROVAL_DENIED_PREFIX, APPROVAL_PENDING_PREFIX } from "../execution_constants";
1+import { APPROVAL_DENIED_PREFIX, APPROVAL_PENDING_PREFIX } from "../execution-constants";
22 import type {
33 ExecutionAdapter,
44 RuntimeOutputEvent,
executor/packages/core/src/anonymous-oauth.test.tsrenamed from executor/lib/anonymous-oauth.test.ts+0−0

File renamed without changes.

executor/packages/core/src/anonymous-oauth.tsrenamed from executor/lib/anonymous-oauth.ts+0−0

File renamed without changes.

executor/packages/core/src/anonymous-session.tsrenamed from executor/lib/anonymousSession.ts+0−0

File renamed without changes.

executor/packages/core/src/convex-oauth-storage.tsrenamed from executor/lib/convex-oauth-storage.ts+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
1111 */
1212
1313 import { ConvexHttpClient } from "convex/browser";
14−import { api } from "../convex/_generated/api";
14+import { api } from "../../convex/_generated/api";
1515 import type {
1616 OAuthStorage,
1717 StoredSigningKey,
executor/packages/core/src/credential-providers.test.tsrenamed from executor/lib/credential-providers.test.ts+1−1
@@ -1,5 +1,5 @@
11 import { expect, test } from "bun:test";
2−import { resolveCredentialPayload } from "./credential_providers";
2+import { resolveCredentialPayload } from "./credential-providers";
33
44 test("managed provider returns stored payload", async () => {
55 const payload = await resolveCredentialPayload({
executor/packages/core/src/credential-providers.tsrenamed from executor/lib/credential_providers.ts+0−0

File renamed without changes.

executor/packages/core/src/dts-loader.test.tsrenamed from executor/lib/dts_loader.test.ts+1−1
@@ -1,5 +1,5 @@
11 import { expect, test } from "bun:test";
2−import { clearDtsUrlCache, loadSourceDtsByUrlCached } from "./dts_loader";
2+import { clearDtsUrlCache, loadSourceDtsByUrlCached } from "./dts-loader";
33
44 test("loadSourceDtsByUrlCached reuses cached URL fetches", async () => {
55 let requestCount = 0;
executor/packages/core/src/dts-loader.tsrenamed from executor/lib/dts_loader.ts+0−0

File renamed without changes.

executor/packages/core/src/events.tsrenamed from executor/lib/events.ts+0−0

File renamed without changes.

executor/packages/core/src/execution-constants.tsrenamed from executor/lib/execution_constants.ts+0−0

File renamed without changes.

executor/packages/core/src/function-builders.tsrenamed from executor/lib/functionBuilders.ts+1−1
@@ -1,6 +1,6 @@
11 import { v } from "convex/values";
22 import { customMutation, customQuery } from "convex-helpers/server/customFunctions";
3−import { internalQuery, mutation, query } from "../convex/_generated/server";
3+import { internalQuery, mutation, query } from "../../convex/_generated/server";
44 import {
55 canManageBilling,
66 getOrganizationMembership,
executor/packages/core/src/identity.tsrenamed from executor/lib/identity.ts+2−2
@@ -1,5 +1,5 @@
1−import type { Doc, Id } from "../convex/_generated/dataModel";
2−import type { MutationCtx, QueryCtx } from "../convex/_generated/server";
1+import type { Doc, Id } from "../../convex/_generated/dataModel";
2+import type { MutationCtx, QueryCtx } from "../../convex/_generated/server";
33
44 type IdentityCtx = Pick<QueryCtx, "auth" | "db"> | Pick<MutationCtx, "auth" | "db">;
55 type MembershipCtx = Pick<QueryCtx, "db"> | Pick<MutationCtx, "db">;
executor/packages/core/src/managed-runtime.tsrenamed from executor/lib/managed_runtime.ts+0−0

File renamed without changes.

executor/packages/core/src/mcp-elicitation.demo.test.tsrenamed from executor/lib/mcp-elicitation.demo.test.ts+0−0

File renamed without changes.

executor/packages/core/src/mcp-gateway-oauth-sdk.test.tsrenamed from executor/lib/mcp-gateway-oauth-sdk.test.ts+2−2
@@ -5,10 +5,10 @@ import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js"; · 4 unmodified lines
55 import type { OAuthClientProvider } from "@modelcontextprotocol/sdk/client/auth.js";
66 import type { OAuthClientMetadata } from "@modelcontextprotocol/sdk/shared/auth.js";
77 import { AnonymousOAuthServer, OAuthBadRequest } from "./anonymous-oauth";
8−import { handleMcpRequest, type McpWorkspaceContext } from "./mcp_server";
8+import { handleMcpRequest, type McpWorkspaceContext } from "./mcp-server";
99 import type { AnonymousContext, CreateTaskInput, TaskRecord, ToolDescriptor } from "./types";
1010 import type { LiveTaskEvent } from "./events";
11−import type { Id } from "../convex/_generated/dataModel";
11+import type { Id } from "../../convex/_generated/dataModel";
1212
1313 /**
1414 * End-to-end test: MCP SDK client with OAuth provider → self-issued anonymous
executor/packages/core/src/mcp-gateway-oauth.test.tsrenamed from executor/lib/mcp-gateway-oauth.test.ts+0−0

File renamed without changes.

executor/packages/core/src/mcp-server.test.tsrenamed from executor/lib/mcp-server.test.ts+2−2
@@ -1,9 +1,9 @@
11 import { expect, test } from "bun:test";
22 import { Client } from "@modelcontextprotocol/sdk/client/index.js";
33 import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4−import { handleMcpRequest } from "./mcp_server";
4+import { handleMcpRequest } from "./mcp-server";
55 import type { LiveTaskEvent } from "./events";
6−import type { Id } from "../convex/_generated/dataModel";
6+import type { Id } from "../../convex/_generated/dataModel";
77 import type { AnonymousContext, CreateTaskInput, TaskRecord, ToolDescriptor } from "./types";
88
99 class FakeMcpService {
executor/packages/core/src/mcp-server.tsrenamed from executor/lib/mcp_server.ts+2−2
@@ -1,7 +1,7 @@
11 import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
22 import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
33 import { z } from "zod";
4−import { loadSourceDtsByUrlCached } from "./dts_loader";
4+import { loadSourceDtsByUrlCached } from "./dts-loader";
55 import { generateToolDeclarations, generateToolInventory, typecheckCode } from "./typechecker";
66 import type { LiveTaskEvent } from "./events";
77 import type {
@@ -11,7 +11,7 @@ import type { · 3 unmodified lines
1111 TaskRecord,
1212 ToolDescriptor,
1313 } from "./types";
14−import type { Id } from "../convex/_generated/dataModel";
14+import type { Id } from "../../convex/_generated/dataModel";
1515
1616 function getTaskTerminalState(status: string): boolean {
1717 return status === "completed" || status === "failed" || status === "timed_out" || status === "denied";
executor/packages/core/src/openapi-cache.test.tsrenamed from executor/lib/openapi-cache.test.ts+1−1
@@ -3,7 +3,7 @@ import { · 2 unmodified lines
33 prepareOpenApiSpec,
44 buildOpenApiToolsFromPrepared,
55 type PreparedOpenApiSpec,
6−} from "./tool_sources";
6+} from "./tool-sources";
77
88 /**
99 * Generate a synthetic OpenAPI spec with many operations, simulating a large
executor/packages/core/src/openapi-real-specs.test.tsrenamed from executor/lib/openapi-real-specs.test.ts+1−1
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 * Specs are fetched live so these tests require network access and are slower (~5-60s each).
88 */
99 import { test, expect, describe } from "bun:test";
10−import { prepareOpenApiSpec, buildOpenApiToolsFromPrepared } from "./tool_sources";
10+import { prepareOpenApiSpec, buildOpenApiToolsFromPrepared } from "./tool-sources";
1111
1212 interface SpecFixture {
1313 name: string;
executor/packages/core/src/runtimes/cloudflare-worker-loader-runtime.test.tsrenamed from executor/lib/runtimes/cloudflare-worker-loader-runtime.test.ts+5−5
@@ -1,5 +1,5 @@
11 import { afterAll, beforeAll, describe, expect, test } from "bun:test";
2−import { dispatchCodeWithCloudflareWorkerLoader } from "./cloudflare_worker_loader_runtime";
2+import { dispatchCodeWithCloudflareWorkerLoader } from "./cloudflare-worker-loader-runtime";
33
44 let fakeHostServer: ReturnType<typeof Bun.serve>;
55 let fakeCallbackServer: ReturnType<typeof Bun.serve>;
@@ -141,7 +141,7 @@ describe("runtime catalog", () => { · 135 unmodified lines
141141 isKnownRuntimeId,
142142 LOCAL_BUN_RUNTIME_ID,
143143 CLOUDFLARE_WORKER_LOADER_RUNTIME_ID,
144− } = await import("./runtime_catalog");
144+ } = await import("./runtime-catalog");
145145
146146 expect(isKnownRuntimeId(LOCAL_BUN_RUNTIME_ID)).toBe(true);
147147 expect(isKnownRuntimeId(CLOUDFLARE_WORKER_LOADER_RUNTIME_ID)).toBe(true);
@@ -149,12 +149,12 @@ describe("runtime catalog", () => { · 1 unmodified line
149149 });
150150
151151 test("isCloudflareWorkerLoaderConfigured checks env vars", async () => {
152− const { isCloudflareWorkerLoaderConfigured } = await import("./runtime_catalog");
152+ const { isCloudflareWorkerLoaderConfigured } = await import("./runtime-catalog");
153153 expect(isCloudflareWorkerLoaderConfigured()).toBe(true);
154154 });
155155
156156 test("getCloudflareWorkerLoaderConfig reads env vars", async () => {
157− const { getCloudflareWorkerLoaderConfig } = await import("./runtime_catalog");
157+ const { getCloudflareWorkerLoaderConfig } = await import("./runtime-catalog");
158158 const config = getCloudflareWorkerLoaderConfig();
159159
160160 expect(config.runUrl).toContain("/v1/runs");
@@ -165,7 +165,7 @@ describe("runtime catalog", () => { · 4 unmodified lines
165165 });
166166
167167 test("prefers CONVEX_URL over CONVEX_SITE_URL for callback RPC", async () => {
168− const { getCloudflareWorkerLoaderConfig } = await import("./runtime_catalog");
168+ const { getCloudflareWorkerLoaderConfig } = await import("./runtime-catalog");
169169 const previousConvexUrl = process.env.CONVEX_URL;
170170 const previousSiteUrl = process.env.CONVEX_SITE_URL;
171171 try {
executor/packages/core/src/runtimes/cloudflare-worker-loader-runtime.tsrenamed from executor/lib/runtimes/cloudflare_worker_loader_runtime.ts+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22
33 import { Result } from "better-result";
44 import type { SandboxExecutionRequest } from "../types";
5−import { getCloudflareWorkerLoaderConfig } from "./runtime_catalog";
5+import { getCloudflareWorkerLoaderConfig } from "./runtime-catalog";
66 import { transpileForRuntime } from "./transpile";
77
88 /**
executor/packages/core/src/runtimes/runtime-catalog.tsrenamed from executor/lib/runtimes/runtime_catalog.ts+0−0

File renamed without changes.

executor/packages/core/src/runtimes/runtime-core.test.tsrenamed from executor/lib/runtimes/runtime-core.test.ts+3−3
@@ -1,7 +1,7 @@
11 import { expect, test } from "bun:test";
2−import { runCodeWithAdapter } from "./runtime_core";
3−import { loadExternalTools } from "../tool_sources";
4−import type { Id } from "../../convex/_generated/dataModel";
2+import { runCodeWithAdapter } from "./runtime-core";
3+import { loadExternalTools } from "../tool-sources";
4+import type { Id } from "../../../convex/_generated/dataModel";
55 import type {
66 ExecutionAdapter,
77 RuntimeOutputEvent,
executor/packages/core/src/runtimes/runtime-core.tsrenamed from executor/lib/runtimes/runtime_core.ts+1−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
44 // string version of similar logic, built from sandbox-fragments.ts. Changes to
55 // the core helpers here (formatArgs, createToolsProxy, console proxy, execution
66 // loop, result mapping) should be mirrored there.
7−import { APPROVAL_DENIED_PREFIX, TASK_TIMEOUT_MARKER } from "../execution_constants";
7+import { APPROVAL_DENIED_PREFIX, TASK_TIMEOUT_MARKER } from "../execution-constants";
88 import { Result } from "better-result";
99 import { Script, createContext } from "node:vm";
1010 import type {
executor/packages/core/src/runtimes/transpile.tsrenamed from executor/lib/runtimes/transpile.ts+0−0

File renamed without changes.

executor/packages/core/src/slug.tsrenamed from executor/lib/slug.ts+0−0

File renamed without changes.

executor/packages/core/src/tool-discovery.test.tsrenamed from executor/lib/tool-discovery.test.ts+2−2
@@ -1,6 +1,6 @@
11 import { expect, test } from "bun:test";
2−import type { Id } from "../convex/_generated/dataModel";
3−import { createDiscoverTool } from "./tool_discovery";
2+import type { Id } from "../../convex/_generated/dataModel";
3+import { createDiscoverTool } from "./tool-discovery";
44 import type { ToolDefinition } from "./types";
55
66 const TEST_WORKSPACE_ID = "w" as Id<"workspaces">;
executor/packages/core/src/tool-discovery.tsrenamed from executor/lib/tool_discovery.ts+1−1
@@ -4,7 +4,7 @@ import { · 3 unmodified lines
44 compactDescriptionLine,
55 compactReturnTypeHint,
66 extractTopLevelTypeKeys,
7−} from "./type_hints";
7+} from "./type-hints";
88
99 interface DiscoverIndexEntry {
1010 path: string;
executor/packages/core/src/tool-sources.test.tsrenamed from executor/lib/tool-sources.test.ts+3−3
@@ -1,12 +1,12 @@
11 import { expect, test } from "bun:test";
2−import type { Id } from "../convex/_generated/dataModel";
2+import type { Id } from "../../convex/_generated/dataModel";
33 import {
44 compileExternalToolSource,
55 loadExternalTools,
66 materializeCompiledToolSource,
77 parseGraphqlOperationPaths,
8−} from "./tool_sources";
9−import type { ExternalToolSourceConfig } from "./tool_sources";
8+} from "./tool-sources";
9+import type { ExternalToolSourceConfig } from "./tool-sources";
1010
1111 const TEST_WORKSPACE_ID = "w" as Id<"workspaces">;
1212
executor/packages/core/src/tool-sources.tsrenamed from executor/lib/tool_sources.ts+1−1
@@ -6,7 +6,7 @@ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js"; · 5 unmodified lines
66 import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
77 import openapiTS, { astToString } from "openapi-typescript";
88 import { Kind, parse, type FragmentDefinitionNode, type SelectionSetNode } from "graphql";
9−import { compactArgKeysHint, compactArgTypeHint, compactReturnTypeHint } from "./type_hints";
9+import { compactArgKeysHint, compactArgTypeHint, compactReturnTypeHint } from "./type-hints";
1010 import type { ToolApprovalMode, ToolCredentialSpec, ToolDefinition, ToolTypeMetadata } from "./types";
1111 import { asRecord } from "./utils";
1212
executor/packages/core/src/tools.tsrenamed from executor/lib/tools.ts+0−0

File renamed without changes.

executor/packages/core/src/type-hints.test.tsrenamed from executor/lib/type_hints.test.ts+1−1
@@ -5,7 +5,7 @@ import { · 4 unmodified lines
55 compactDescriptionLine,
66 compactReturnTypeHint,
77 extractTopLevelTypeKeys,
8−} from "./type_hints";
8+} from "./type-hints";
99
1010 test("extractTopLevelTypeKeys handles nested object literals", async () => {
1111 const keys = extractTopLevelTypeKeys("{ parent: { title: string }; icon?: { emoji: string }; children: string[] }");
executor/packages/core/src/type-hints.tsrenamed from executor/lib/type_hints.ts+0−0

File renamed without changes.

executor/packages/core/src/typechecker.test.tsrenamed from executor/lib/typechecker.test.ts+1−1
@@ -1,6 +1,6 @@
11 import { test, expect, describe } from "bun:test";
22 import { generateToolDeclarations, generateToolInventory, typecheckCode, type TypecheckResult } from "./typechecker";
3−import { prepareOpenApiSpec, buildOpenApiToolsFromPrepared } from "./tool_sources";
3+import { prepareOpenApiSpec, buildOpenApiToolsFromPrepared } from "./tool-sources";
44 import type { ToolDescriptor } from "./types";
55
66 // ---------------------------------------------------------------------------
executor/packages/core/src/typechecker.tsrenamed from executor/lib/typechecker.ts+0−0

File renamed without changes.

executor/packages/core/src/types.tsrenamed from executor/lib/types.ts+1−1
@@ -1,6 +1,6 @@
11 // ── Shared types (inlined from @executor/contracts) ──────────────────────────
22
3−import type { Id } from "../convex/_generated/dataModel";
3+import type { Id } from "../../convex/_generated/dataModel";
44
55 export type TaskStatus = "queued" | "running" | "completed" | "failed" | "timed_out" | "denied";
66 export type ApprovalStatus = "pending" | "approved" | "denied";
executor/packages/core/src/utils.tsrenamed from executor/lib/utils.ts+0−0

File renamed without changes.

executor/packages/core/src/workspace-tool-cache.test.tsrenamed from executor/lib/workspace-tool-cache.test.ts+6−6
@@ -5,7 +5,7 @@ · 4 unmodified lines
55 * round-trip with functional `run` methods.
66 */
77 import { test, expect, describe } from "bun:test";
8−import type { Id } from "../convex/_generated/dataModel";
8+import type { Id } from "../../convex/_generated/dataModel";
99 import {
1010 prepareOpenApiSpec,
1111 buildOpenApiToolsFromPrepared,
@@ -15,7 +15,7 @@ import { · 3 unmodified lines
1515 type CompiledToolSourceArtifact,
1616 type SerializedTool,
1717 type WorkspaceToolSnapshot,
18−} from "./tool_sources";
18+} from "./tool-sources";
1919 import type { ToolDefinition } from "./types";
2020
2121 const TEST_WORKSPACE_ID = "w" as Id<"workspaces">;
@@ -478,12 +478,12 @@ describe("serializeTools + rehydrateTools round-trip", () => { · 456 unmodified lines
478478 describe("workspace tool cache table", () => {
479479 async function setupCacheTest() {
480480 const { convexTest } = await import("convex-test");
481− const { internal } = await import("../convex/_generated/api");
482− const schema = (await import("../convex/schema")).default;
481+ const { internal } = await import("../../convex/_generated/api");
482+ const schema = (await import("../../convex/schema")).default;
483483
484484 const t = convexTest(schema, {
485− "./workspaceToolCache.ts": () => import("../convex/workspaceToolCache"),
486− "./_generated/api.js": () => import("../convex/_generated/api.js"),
485+ "./workspaceToolCache.ts": () => import("../../convex/workspaceToolCache"),
486+ "./_generated/api.js": () => import("../../convex/_generated/api.js"),
487487 });
488488
489489 const wsId = await t.run(async (ctx) => {
executor/packages/core/tsconfig.json+13−0
@@ -0,0 +1,13 @@
1+{
2+ "compilerOptions": {
3+ "target": "ESNext",
4+ "module": "ESNext",
5+ "moduleResolution": "Bundler",
6+ "strict": true,
7+ "skipLibCheck": true,
8+ "noEmit": true,
9+ "types": ["bun"],
10+ "lib": ["ESNext", "DOM"]
11+ },
12+ "include": ["src/**/*.ts"]
13+}
executor/packages/runner-node/package.json+12−0
@@ -0,0 +1,12 @@
1+{
2+ "name": "@executor/runner-node",
3+ "version": "0.1.0",
4+ "private": true,
5+ "type": "module",
6+ "scripts": {
7+ "typecheck": "tsc --noEmit"
8+ },
9+ "devDependencies": {
10+ "typescript": "^5.9.3"
11+ }
12+}
executor/packages/runner-node/src/index.ts+13−0
@@ -0,0 +1,13 @@
1+export type NodeRunnerStatus = "completed" | "failed" | "timed_out" | "denied";
2+
3+export interface NodeRunnerResult {
4+ status: NodeRunnerStatus;
5+ stdout: string;
6+ stderr: string;
7+ error?: string;
8+ exitCode?: number;
9+}
10+
11+export interface NodeRunner {
12+ run(taskId: string, code: string, timeoutMs: number): Promise<NodeRunnerResult>;
13+}
executor/packages/runner-node/tsconfig.json+11−0
@@ -0,0 +1,11 @@
1+{
2+ "compilerOptions": {
3+ "target": "ESNext",
4+ "module": "ESNext",
5+ "moduleResolution": "Bundler",
6+ "strict": true,
7+ "skipLibCheck": true,
8+ "noEmit": true
9+ },
10+ "include": ["src/**/*.ts"]
11+}
executor/packages/runner-sandbox-host/.dev.vars.examplerenamed from executor/packages/sandbox-host/.dev.vars.example+0−0

File renamed without changes.

executor/packages/runner-sandbox-host/package.jsonrenamed from executor/packages/sandbox-host/package.json+2−1
@@ -1,5 +1,5 @@
11 {
2− "name": "@executor/sandbox-host",
2+ "name": "@executor/runner-sandbox-host",
33 "version": "0.1.0",
44 "private": true,
55 "type": "module",
@@ -14,6 +14,7 @@ · 8 unmodified lines
1414 "wrangler": "^4.0.0"
1515 },
1616 "dependencies": {
17+ "@executor/convex": "workspace:*",
1718 "better-result": "^2.7.0",
1819 "convex": "^1.31.7"
1920 }
executor/packages/runner-sandbox-host/src/index.tsrenamed from executor/packages/sandbox-host/src/index.ts+4−9
@@ -36,14 +36,9 @@ · 35 unmodified lines
3636
3737 import { Result } from "better-result";
3838 import { WorkerEntrypoint } from "cloudflare:workers";
39+import { api } from "@executor/convex/_generated/api";
3940 import { ConvexHttpClient } from "convex/browser";
4041
41−const RUNTIME_CALLBACKS = {
42− handleToolCall: "runtimeCallbacks:handleToolCall",
43− appendOutput: "runtimeCallbacks:appendOutput",
44− completeRun: "runtimeCallbacks:completeRun",
45−} as const;
46−
4742 // Import isolate modules as raw text — these are loaded as JS modules inside
4843 // the dynamic isolate, NOT executed in the host worker. The *.isolate.js
4944 // extension is mapped to Text type in wrangler.jsonc rules, so wrangler
@@ -186,7 +181,7 @@ export class ToolBridge extends WorkerEntrypoint<Env> { · 136 unmodified lines
186181
187182 const response = await Result.tryPromise(async () => {
188183 const convex = this.createConvexClient();
189− return await convex.action(RUNTIME_CALLBACKS.handleToolCall as any, {
184+ return await convex.action(api.runtimeCallbacks.handleToolCall, {
190185 internalSecret: callbackInternalSecret,
191186 runId: taskId,
192187 callId: effectiveCallId,
@@ -209,7 +204,7 @@ export class ToolBridge extends WorkerEntrypoint<Env> { · 16 unmodified lines
209204 const { callbackInternalSecret, taskId } = this.props;
210205 await Result.tryPromise(async () => {
211206 const convex = this.createConvexClient();
212− await convex.mutation(RUNTIME_CALLBACKS.appendOutput as any, {
207+ await convex.mutation(api.runtimeCallbacks.appendOutput, {
213208 internalSecret: callbackInternalSecret,
214209 runId: taskId,
215210 stream,
@@ -313,7 +308,7 @@ async function reportRunCompletion(request: RunRequest, result: RunResult, durat · 97 unmodified lines
313308
314309 for (let attempt = 1; attempt <= 3; attempt += 1) {
315310 const response = await Result.tryPromise(async () => {
316− return await convex.mutation(RUNTIME_CALLBACKS.completeRun as any, {
311+ return await convex.mutation(api.runtimeCallbacks.completeRun, {
317312 internalSecret: request.callback.internalSecret,
318313 runId: request.taskId,
319314 status: result.status,
executor/packages/runner-sandbox-host/src/isolate/globals.isolate.jsrenamed from executor/packages/sandbox-host/src/isolate/globals.isolate.js+0−0

File renamed without changes.

executor/packages/runner-sandbox-host/src/isolate/harness.isolate.jsrenamed from executor/packages/sandbox-host/src/isolate/harness.isolate.js+0−0

File renamed without changes.

executor/packages/runner-sandbox-host/tsconfig.jsonrenamed from executor/packages/sandbox-host/tsconfig.json+5−1
@@ -11,7 +11,11 @@ · 10 unmodified lines
1111 "forceConsistentCasingInFileNames": true,
1212 "resolveJsonModule": true,
1313 "isolatedModules": true,
14− "jsx": "react-jsx"
14+ "jsx": "react-jsx",
15+ "baseUrl": ".",
16+ "paths": {
17+ "@executor/convex/*": ["../convex/*"]
18+ }
1519 },
1620 "include": ["src/**/*.ts"]
1721 }
executor/packages/runner-sandbox-host/wrangler.jsoncrenamed from executor/packages/sandbox-host/wrangler.jsonc+0−0

File renamed without changes.

executor/scripts/deploy-prod.test.ts+23−0
@@ -0,0 +1,23 @@
1+import { describe, expect, test } from "bun:test";
2+import { parseArgs, resolveSteps } from "./deploy-prod";
3+
4+describe("deploy-prod args", () => {
5+ test("defaults to plan mode with all steps", () => {
6+ const options = parseArgs([]);
7+ expect(options.apply).toBe(false);
8+ expect(options.yes).toBe(false);
9+ expect(options.force).toBe(false);
10+ expect(resolveSteps(options)).toEqual(["cloudflare", "env", "convex", "doctor"]);
11+ });
12+
13+ test("supports only and skip filters", () => {
14+ const options = parseArgs(["--apply", "--only", "cloudflare,doctor", "--skip", "doctor"]);
15+ expect(options.apply).toBe(true);
16+ expect(resolveSteps(options)).toEqual(["cloudflare"]);
17+ });
18+
19+ test("throws on unknown step", () => {
20+ expect(() => parseArgs(["--only", "bogus"]))
21+ .toThrow("Unknown step 'bogus'");
22+ });
23+});
executor/scripts/deploy-prod.ts+371−0
@@ -0,0 +1,371 @@
1+import path from "node:path";
2+import { createInterface } from "node:readline/promises";
3+import { parseConvexEnvList } from "./doctor-prod";
4+
5+type StepId = "cloudflare" | "env" | "convex" | "doctor";
6+
7+interface Options {
8+ apply: boolean;
9+ yes: boolean;
10+ force: boolean;
11+ only?: Set<StepId>;
12+ skip: Set<StepId>;
13+}
14+
15+interface CommandResult {
16+ exitCode: number;
17+ stdout: string;
18+ stderr: string;
19+}
20+
21+interface PreflightCheck {
22+ id: string;
23+ ok: boolean;
24+ detail: string;
25+ hint?: string;
26+ blocking: boolean;
27+}
28+
29+interface DeployStep {
30+ id: StepId;
31+ name: string;
32+ command: string[];
33+ cwd?: string;
34+}
35+
36+const EXECUTOR_ROOT = path.resolve(import.meta.dir, "..");
37+const RUNNER_HOST_DIR = path.join(EXECUTOR_ROOT, "packages", "runner-sandbox-host");
38+
39+const ALL_STEPS: StepId[] = ["cloudflare", "env", "convex", "doctor"];
40+const REQUIRED_ENV_SETUP_KEYS = [
41+ "WORKOS_CLIENT_ID",
42+ "WORKOS_API_KEY",
43+ "WORKOS_WEBHOOK_SECRET",
44+ "WORKOS_COOKIE_PASSWORD",
45+ "STRIPE_SECRET_KEY",
46+ "STRIPE_WEBHOOK_SECRET",
47+ "STRIPE_PRICE_ID",
48+ "MCP_AUTHORIZATION_SERVER",
49+] as const;
50+
51+function printHelp(): void {
52+ console.log(`Guided production deploy for executor
53+
54+Usage:
55+ bun run scripts/deploy-prod.ts [options]
56+
57+Options:
58+ --apply Execute steps (default is plan only)
59+ --yes Skip confirmation prompts
60+ --force Continue apply even if preflight has blocking failures
61+ --only <steps> Run only these steps (comma-separated)
62+ --skip <steps> Skip these steps (comma-separated)
63+ -h, --help Show this help
64+
65+Steps:
66+ cloudflare Configure sandbox host worker + runtime env wiring
67+ env Sync WorkOS/Stripe/auth env to Convex prod
68+ convex Deploy Convex functions to prod
69+ doctor Verify prod setup and print remediation
70+
71+Examples:
72+ bun run scripts/deploy-prod.ts
73+ bun run scripts/deploy-prod.ts --apply
74+ bun run scripts/deploy-prod.ts --apply --only cloudflare,doctor
75+ bun run scripts/deploy-prod.ts --apply --skip convex --yes
76+`);
77+}
78+
79+function parseStepSet(raw: string): Set<StepId> {
80+ const set = new Set<StepId>();
81+ for (const token of raw.split(",")) {
82+ const value = token.trim();
83+ if (!value) continue;
84+ if (!ALL_STEPS.includes(value as StepId)) {
85+ throw new Error(`Unknown step '${value}'. Valid steps: ${ALL_STEPS.join(", ")}`);
86+ }
87+ set.add(value as StepId);
88+ }
89+ return set;
90+}
91+
92+export function parseArgs(argv: string[]): Options {
93+ const options: Options = {
94+ apply: false,
95+ yes: false,
96+ force: false,
97+ skip: new Set<StepId>(),
98+ };
99+
100+ for (let i = 0; i < argv.length; i += 1) {
101+ const arg = argv[i];
102+ const next = argv[i + 1];
103+
104+ if (arg === "--apply") {
105+ options.apply = true;
106+ continue;
107+ }
108+ if (arg === "--yes") {
109+ options.yes = true;
110+ continue;
111+ }
112+ if (arg === "--force") {
113+ options.force = true;
114+ continue;
115+ }
116+ if (arg === "--only") {
117+ if (!next) throw new Error("Missing value for --only");
118+ options.only = parseStepSet(next);
119+ i += 1;
120+ continue;
121+ }
122+ if (arg === "--skip") {
123+ if (!next) throw new Error("Missing value for --skip");
124+ options.skip = parseStepSet(next);
125+ i += 1;
126+ continue;
127+ }
128+ if (arg === "--help" || arg === "-h") {
129+ printHelp();
130+ process.exit(0);
131+ }
132+
133+ throw new Error(`Unknown option '${arg}'. Use --help for usage.`);
134+ }
135+
136+ return options;
137+}
138+
139+export function resolveSteps(options: Options): StepId[] {
140+ const only = options.only ?? new Set<StepId>(ALL_STEPS);
141+ return ALL_STEPS.filter((step) => only.has(step) && !options.skip.has(step));
142+}
143+
144+async function runCommand(command: string[], cwd = EXECUTOR_ROOT): Promise<CommandResult> {
145+ const proc = Bun.spawn(command, {
146+ cwd,
147+ env: Bun.env,
148+ stdin: "ignore",
149+ stdout: "pipe",
150+ stderr: "pipe",
151+ });
152+
153+ const [stdout, stderr, exitCode] = await Promise.all([
154+ new Response(proc.stdout).text(),
155+ new Response(proc.stderr).text(),
156+ proc.exited,
157+ ]);
158+
159+ return {
160+ exitCode,
161+ stdout,
162+ stderr,
163+ };
164+}
165+
166+function isTruthy(value: string | undefined): boolean {
167+ if (!value) return false;
168+ const normalized = value.trim().toLowerCase();
169+ return ["1", "true", "yes", "on"].includes(normalized);
170+}
171+
172+function buildSteps(selected: StepId[]): DeployStep[] {
173+ const byId: Record<StepId, DeployStep> = {
174+ cloudflare: {
175+ id: "cloudflare",
176+ name: "Cloudflare Runtime",
177+ command: ["bun", "run", "scripts/setup-prod-cloudflare.ts", "--deploy", "--no-doctor"],
178+ cwd: EXECUTOR_ROOT,
179+ },
180+ env: {
181+ id: "env",
182+ name: "Convex Env Sync",
183+ command: ["bun", "run", "scripts/setup-prod-env.ts", "--from-env", "--strict"],
184+ cwd: EXECUTOR_ROOT,
185+ },
186+ convex: {
187+ id: "convex",
188+ name: "Convex Deploy",
189+ command: ["bunx", "convex", "deploy", "--prod"],
190+ cwd: EXECUTOR_ROOT,
191+ },
192+ doctor: {
193+ id: "doctor",
194+ name: "Production Doctor",
195+ command: ["bun", "run", "scripts/doctor-prod.ts"],
196+ cwd: EXECUTOR_ROOT,
197+ },
198+ };
199+
200+ return selected.map((step) => byId[step]);
201+}
202+
203+async function getConvexProdEnv(): Promise<Map<string, string>> {
204+ const result = await runCommand(["bunx", "convex", "env", "list", "--prod"]);
205+ if (result.exitCode !== 0) {
206+ return new Map<string, string>();
207+ }
208+ return parseConvexEnvList(result.stdout);
209+}
210+
211+function missingLocalEnvKeys(): string[] {
212+ return REQUIRED_ENV_SETUP_KEYS.filter((key) => !Bun.env[key]?.trim());
213+}
214+
215+async function runPreflight(selected: StepId[]): Promise<PreflightCheck[]> {
216+ const checks: PreflightCheck[] = [];
217+ const usesCloudflare = selected.includes("cloudflare");
218+ const usesConvex = selected.some((id) => id === "env" || id === "convex" || id === "doctor" || id === "cloudflare");
219+
220+ if (usesCloudflare) {
221+ const whoami = await runCommand(["bunx", "wrangler", "whoami"], RUNNER_HOST_DIR);
222+ checks.push({
223+ id: "wrangler-auth",
224+ ok: whoami.exitCode === 0,
225+ blocking: true,
226+ detail: whoami.exitCode === 0 ? "Wrangler auth is available" : "Wrangler auth not available",
227+ hint: whoami.exitCode === 0 ? undefined : "Run `bunx wrangler login` and retry.",
228+ });
229+ }
230+
231+ if (usesConvex) {
232+ const convexEnv = await runCommand(["bunx", "convex", "env", "list", "--prod"]);
233+ checks.push({
234+ id: "convex-auth",
235+ ok: convexEnv.exitCode === 0,
236+ blocking: true,
237+ detail: convexEnv.exitCode === 0 ? "Convex prod env is accessible" : "Cannot access Convex prod env",
238+ hint: convexEnv.exitCode === 0 ? undefined : "Run `bunx convex dev` or `bunx convex login` to authenticate.",
239+ });
240+ }
241+
242+ if (selected.includes("env")) {
243+ const missing = missingLocalEnvKeys();
244+ checks.push({
245+ id: "env-local-values",
246+ ok: missing.length === 0,
247+ blocking: true,
248+ detail: missing.length === 0
249+ ? "All required local env vars for setup:prod:env are present"
250+ : `Missing local env vars: ${missing.join(", ")}`,
251+ hint: missing.length === 0
252+ ? undefined
253+ : "Export required WORKOS_*, STRIPE_*, and MCP_AUTHORIZATION_SERVER vars before apply.",
254+ });
255+ }
256+
257+ if (selected.includes("cloudflare")) {
258+ const env = await getConvexProdEnv();
259+ const hasConvexUrl = Boolean(Bun.env.CONVEX_URL?.trim() || env.get("CONVEX_URL")?.trim());
260+ checks.push({
261+ id: "convex-url",
262+ ok: hasConvexUrl,
263+ blocking: true,
264+ detail: hasConvexUrl ? "CONVEX_URL is available" : "CONVEX_URL not found locally or in Convex prod env",
265+ hint: hasConvexUrl
266+ ? undefined
267+ : "Set with `export CONVEX_URL=https://<deployment>.convex.cloud` or `bunx convex env set CONVEX_URL ... --prod`.",
268+ });
269+ }
270+
271+ if (selected.includes("convex") && isTruthy(Bun.env.IAC_MANAGE_CONVEX_ENV) && !selected.includes("env")) {
272+ checks.push({
273+ id: "convex-env-order",
274+ ok: true,
275+ blocking: false,
276+ detail: "Convex deploy selected without env sync",
277+ hint: "If you changed env vars, run with `--only env,convex,doctor` for safer ordering.",
278+ });
279+ }
280+
281+ return checks;
282+}
283+
284+function printPlan(steps: DeployStep[], checks: PreflightCheck[]): void {
285+ console.log("Deploy plan");
286+ for (const step of steps) {
287+ console.log(` - ${step.id}: ${step.name}`);
288+ console.log(` ${step.command.join(" ")}`);
289+ }
290+
291+ console.log("\nPreflight");
292+ for (const check of checks) {
293+ const label = check.ok ? "ok" : (check.blocking ? "fail" : "warn");
294+ console.log(` [${label}] ${check.id}: ${check.detail}`);
295+ if (check.hint) {
296+ console.log(` hint: ${check.hint}`);
297+ }
298+ }
299+}
300+
301+async function confirmApply(): Promise<boolean> {
302+ const rl = createInterface({
303+ input: process.stdin,
304+ output: process.stdout,
305+ });
306+ const input = (await rl.question("\nProceed with apply? [y/N] ")).trim().toLowerCase();
307+ rl.close();
308+ return input === "y" || input === "yes";
309+}
310+
311+async function executeSteps(steps: DeployStep[]): Promise<void> {
312+ for (const step of steps) {
313+ console.log(`\n==> ${step.name}`);
314+ const result = await runCommand(step.command, step.cwd ?? EXECUTOR_ROOT);
315+
316+ const stdout = result.stdout.trim();
317+ const stderr = result.stderr.trim();
318+ if (stdout) console.log(stdout);
319+ if (stderr) console.error(stderr);
320+
321+ if (result.exitCode !== 0) {
322+ throw new Error(`Step '${step.id}' failed with exit code ${result.exitCode}`);
323+ }
324+ }
325+}
326+
327+async function main(): Promise<void> {
328+ const options = parseArgs(process.argv.slice(2));
329+ const selected = resolveSteps(options);
330+ if (selected.length === 0) {
331+ throw new Error("No steps selected. Remove --skip/--only filters.");
332+ }
333+
334+ const steps = buildSteps(selected);
335+ const checks = await runPreflight(selected);
336+ const blockingFailures = checks.filter((check) => !check.ok && check.blocking);
337+
338+ console.log("Executor production deploy");
339+ console.log(`Mode: ${options.apply ? "apply" : "plan"}`);
340+ printPlan(steps, checks);
341+
342+ if (!options.apply) {
343+ console.log("\nPlan only. Re-run with --apply to execute.");
344+ return;
345+ }
346+
347+ if (blockingFailures.length > 0 && !options.force) {
348+ throw new Error("Blocking preflight failures detected. Fix them or use --force to override.");
349+ }
350+
351+ if (!options.yes) {
352+ const approved = await confirmApply();
353+ if (!approved) {
354+ console.log("Aborted.");
355+ return;
356+ }
357+ }
358+
359+ await executeSteps(steps);
360+ console.log("\nDeploy completed.");
361+}
362+
363+if (import.meta.main) {
364+ try {
365+ await main();
366+ } catch (error) {
367+ const message = error instanceof Error ? error.message : String(error);
368+ console.error(`deploy:prod failed: ${message}`);
369+ process.exit(1);
370+ }
371+}
executor/scripts/doctor-prod.test.ts+80−0
@@ -0,0 +1,80 @@
1+import { describe, expect, test } from "bun:test";
2+import { buildEnvChecks, parseConvexEnvList } from "./doctor-prod";
3+
4+describe("parseConvexEnvList", () => {
5+ test("parses key value lines and ignores comments", () => {
6+ const env = parseConvexEnvList([
7+ "# comment",
8+ "CONVEX_URL=https://example.convex.cloud",
9+ "EXECUTOR_INTERNAL_TOKEN=abc=def",
10+ "",
11+ ].join("\n"));
12+
13+ expect(env.get("CONVEX_URL")).toBe("https://example.convex.cloud");
14+ expect(env.get("EXECUTOR_INTERNAL_TOKEN")).toBe("abc=def");
15+ expect(env.has("# comment")).toBe(false);
16+ });
17+});
18+
19+describe("buildEnvChecks", () => {
20+ test("flags missing required production env vars", () => {
21+ const checks = buildEnvChecks(new Map());
22+ const byName = new Map(checks.map((check) => [check.name, check]));
23+
24+ expect(byName.get("env:CLOUDFLARE_SANDBOX_RUN_URL")?.ok).toBe(false);
25+ expect(byName.get("env:CLOUDFLARE_SANDBOX_AUTH_TOKEN")?.ok).toBe(false);
26+ expect(byName.get("env:EXECUTOR_INTERNAL_TOKEN")?.ok).toBe(false);
27+ expect(byName.get("env:CONVEX_URL")?.ok).toBe(false);
28+ expect(byName.get("env:WORKOS_CLIENT_ID")?.ok).toBe(false);
29+ expect(byName.get("env:WORKOS_API_KEY")?.ok).toBe(false);
30+ expect(byName.get("env:WORKOS_WEBHOOK_SECRET")?.ok).toBe(false);
31+ expect(byName.get("env:WORKOS_COOKIE_PASSWORD")?.ok).toBe(false);
32+ expect(byName.get("env:STRIPE_SECRET_KEY")?.ok).toBe(false);
33+ expect(byName.get("env:STRIPE_WEBHOOK_SECRET")?.ok).toBe(false);
34+ expect(byName.get("env:STRIPE_PRICE_ID")?.ok).toBe(false);
35+ expect(byName.get("env:auth server")?.ok).toBe(false);
36+ });
37+
38+ test("rejects CONVEX_URL pointing to convex.site", () => {
39+ const env = new Map<string, string>([
40+ ["CLOUDFLARE_SANDBOX_RUN_URL", "https://executor-sandbox-host.example.workers.dev/v1/runs"],
41+ ["CLOUDFLARE_SANDBOX_AUTH_TOKEN", "abcdefghijklmnopqrstuvwxyz0123456789"],
42+ ["EXECUTOR_INTERNAL_TOKEN", "abcdefghijklmnopqrstuvwxyz0123456789"],
43+ ["CONVEX_URL", "https://perceptive-pigeon-577.convex.site"],
44+ ["WORKOS_CLIENT_ID", "client_123"],
45+ ["WORKOS_API_KEY", "sk_test_123"],
46+ ["WORKOS_WEBHOOK_SECRET", "whsec_123"],
47+ ["WORKOS_COOKIE_PASSWORD", "cookie_password_123"],
48+ ["STRIPE_SECRET_KEY", "sk_live_123"],
49+ ["STRIPE_WEBHOOK_SECRET", "whsec_live_123"],
50+ ["STRIPE_PRICE_ID", "price_123"],
51+ ["MCP_AUTHORIZATION_SERVER", "https://auth.example.com"],
52+ ]);
53+
54+ const checks = buildEnvChecks(env);
55+ const hostTypeCheck = checks.find((check) => check.name === "convex URL host type");
56+ expect(hostTypeCheck?.ok).toBe(false);
57+ });
58+
59+ test("accepts well-formed cloud configuration", () => {
60+ const env = new Map<string, string>([
61+ ["CLOUDFLARE_SANDBOX_RUN_URL", "https://executor-sandbox-host.example.workers.dev/v1/runs"],
62+ ["CLOUDFLARE_SANDBOX_AUTH_TOKEN", "abcdefghijklmnopqrstuvwxyz0123456789"],
63+ ["EXECUTOR_INTERNAL_TOKEN", "abcdefghijklmnopqrstuvwxyz0123456789"],
64+ ["CONVEX_URL", "https://perceptive-pigeon-577.convex.cloud"],
65+ ["CONVEX_SITE_URL", "https://perceptive-pigeon-577.convex.site"],
66+ ["WORKOS_CLIENT_ID", "client_123"],
67+ ["WORKOS_API_KEY", "sk_test_123"],
68+ ["WORKOS_WEBHOOK_SECRET", "whsec_123"],
69+ ["WORKOS_COOKIE_PASSWORD", "cookie_password_123"],
70+ ["STRIPE_SECRET_KEY", "sk_live_123"],
71+ ["STRIPE_WEBHOOK_SECRET", "whsec_live_123"],
72+ ["STRIPE_PRICE_ID", "price_123"],
73+ ["MCP_AUTHORIZATION_SERVER", "https://auth.example.com"],
74+ ]);
75+
76+ const checks = buildEnvChecks(env);
77+ const failures = checks.filter((check) => !check.ok);
78+ expect(failures).toEqual([]);
79+ });
80+});
executor/scripts/doctor-prod.ts+382−0
@@ -0,0 +1,382 @@
1+import path from "node:path";
2+
3+export interface DoctorCheck {
4+ name: string;
5+ ok: boolean;
6+ detail: string;
7+}
8+
9+export interface ProductionDoctorReport {
10+ checks: DoctorCheck[];
11+}
12+
13+interface CommandResult {
14+ exitCode: number;
15+ stdout: string;
16+ stderr: string;
17+}
18+
19+const REQUIRED_PROD_ENV_KEYS = [
20+ "CLOUDFLARE_SANDBOX_RUN_URL",
21+ "CLOUDFLARE_SANDBOX_AUTH_TOKEN",
22+ "EXECUTOR_INTERNAL_TOKEN",
23+ "CONVEX_URL",
24+] as const;
25+
26+const REQUIRED_APP_ENV_KEYS = [
27+ "WORKOS_CLIENT_ID",
28+ "WORKOS_API_KEY",
29+ "WORKOS_WEBHOOK_SECRET",
30+ "WORKOS_COOKIE_PASSWORD",
31+] as const;
32+
33+const REQUIRED_BILLING_ENV_KEYS = [
34+ "STRIPE_SECRET_KEY",
35+ "STRIPE_WEBHOOK_SECRET",
36+ "STRIPE_PRICE_ID",
37+] as const;
38+
39+const OPTIONAL_BILLING_ENV_KEYS = [
40+ "BILLING_SUCCESS_URL",
41+ "BILLING_CANCEL_URL",
42+ "BILLING_RETURN_URL",
43+] as const;
44+
45+const AUTH_SERVER_ENV_KEYS = [
46+ "MCP_AUTHORIZATION_SERVER",
47+ "MCP_AUTHORIZATION_SERVER_URL",
48+ "WORKOS_AUTHKIT_ISSUER",
49+ "WORKOS_AUTHKIT_DOMAIN",
50+] as const;
51+
52+const EXECUTOR_ROOT = path.resolve(import.meta.dir, "..");
53+
54+function addCheck(report: ProductionDoctorReport, name: string, ok: boolean, detail: string): void {
55+ report.checks.push({ name, ok, detail });
56+}
57+
58+async function runCommand(command: string[], cwd = EXECUTOR_ROOT): Promise<CommandResult> {
59+ const proc = Bun.spawn(command, {
60+ cwd,
61+ env: Bun.env,
62+ stdin: "ignore",
63+ stdout: "pipe",
64+ stderr: "pipe",
65+ });
66+
67+ const [stdout, stderr, exitCode] = await Promise.all([
68+ new Response(proc.stdout).text(),
69+ new Response(proc.stderr).text(),
70+ proc.exited,
71+ ]);
72+
73+ return {
74+ exitCode,
75+ stdout,
76+ stderr,
77+ };
78+}
79+
80+async function runConvex(args: string[]): Promise<CommandResult> {
81+ return await runCommand(["bunx", "convex", ...args]);
82+}
83+
84+export function parseConvexEnvList(raw: string): Map<string, string> {
85+ const env = new Map<string, string>();
86+
87+ for (const line of raw.split("\n")) {
88+ const trimmed = line.trim();
89+ if (!trimmed || trimmed.startsWith("#")) {
90+ continue;
91+ }
92+
93+ const eqIndex = trimmed.indexOf("=");
94+ if (eqIndex <= 0) {
95+ continue;
96+ }
97+
98+ const key = trimmed.slice(0, eqIndex).trim();
99+ const value = trimmed.slice(eqIndex + 1);
100+ if (key.length > 0) {
101+ env.set(key, value);
102+ }
103+ }
104+
105+ return env;
106+}
107+
108+function parseUrl(input: string): URL | null {
109+ try {
110+ return new URL(input);
111+ } catch {
112+ return null;
113+ }
114+}
115+
116+function deploymentPrefix(hostname: string, suffix: ".convex.cloud" | ".convex.site"): string | null {
117+ if (!hostname.endsWith(suffix)) {
118+ return null;
119+ }
120+ return hostname.slice(0, hostname.length - suffix.length);
121+}
122+
123+function addTokenStrengthCheck(report: ProductionDoctorReport, key: string, value: string): void {
124+ const looksUsable = value.length >= 24;
125+ addCheck(report, `${key} strength`, looksUsable, looksUsable ? "length looks reasonable" : "value seems too short");
126+}
127+
128+export function buildEnvChecks(env: Map<string, string>): DoctorCheck[] {
129+ const checks: DoctorCheck[] = [];
130+ const report: ProductionDoctorReport = { checks };
131+
132+ for (const key of REQUIRED_PROD_ENV_KEYS) {
133+ const present = Boolean(env.get(key)?.trim());
134+ addCheck(report, `env:${key}`, present, present ? "set" : "missing");
135+ }
136+
137+ for (const key of REQUIRED_APP_ENV_KEYS) {
138+ const present = Boolean(env.get(key)?.trim());
139+ addCheck(report, `env:${key}`, present, present ? "set" : "missing");
140+ }
141+
142+ for (const key of REQUIRED_BILLING_ENV_KEYS) {
143+ const present = Boolean(env.get(key)?.trim());
144+ addCheck(
145+ report,
146+ `env:${key}`,
147+ present,
148+ present ? "set" : "missing (required while billing feature is enabled)",
149+ );
150+ }
151+
152+ const authServerKey = AUTH_SERVER_ENV_KEYS.find((key) => Boolean(env.get(key)?.trim()));
153+ addCheck(
154+ report,
155+ "env:auth server",
156+ Boolean(authServerKey),
157+ authServerKey
158+ ? `using ${authServerKey}`
159+ : `missing (set one of ${AUTH_SERVER_ENV_KEYS.join(", ")})`,
160+ );
161+
162+ const runUrlRaw = env.get("CLOUDFLARE_SANDBOX_RUN_URL")?.trim() ?? "";
163+ if (runUrlRaw) {
164+ const runUrl = parseUrl(runUrlRaw);
165+ if (!runUrl) {
166+ addCheck(report, "sandbox run URL format", false, `invalid URL: ${runUrlRaw}`);
167+ } else {
168+ addCheck(report, "sandbox run URL format", true, runUrlRaw);
169+ addCheck(
170+ report,
171+ "sandbox run URL protocol",
172+ runUrl.protocol === "https:",
173+ runUrl.protocol === "https:" ? "https" : `expected https, got ${runUrl.protocol}`,
174+ );
175+ addCheck(
176+ report,
177+ "sandbox run URL path",
178+ runUrl.pathname === "/v1/runs",
179+ runUrl.pathname === "/v1/runs" ? "path is /v1/runs" : `expected /v1/runs, got ${runUrl.pathname}`,
180+ );
181+ }
182+ }
183+
184+ const convexUrlRaw = env.get("CONVEX_URL")?.trim() ?? "";
185+ if (convexUrlRaw) {
186+ const convexUrl = parseUrl(convexUrlRaw);
187+ if (!convexUrl) {
188+ addCheck(report, "convex URL format", false, `invalid URL: ${convexUrlRaw}`);
189+ } else {
190+ addCheck(report, "convex URL format", true, convexUrlRaw);
191+ addCheck(
192+ report,
193+ "convex URL protocol",
194+ convexUrl.protocol === "https:",
195+ convexUrl.protocol === "https:" ? "https" : `expected https, got ${convexUrl.protocol}`,
196+ );
197+
198+ if (convexUrl.hostname.endsWith(".convex.site")) {
199+ addCheck(report, "convex URL host type", false, "uses .convex.site; expected API host (.convex.cloud)");
200+ } else if (convexUrl.hostname.endsWith(".convex.cloud")) {
201+ addCheck(report, "convex URL host type", true, "uses .convex.cloud API host");
202+ } else {
203+ addCheck(report, "convex URL host type", true, `custom host: ${convexUrl.hostname}`);
204+ }
205+ }
206+ }
207+
208+ const convexSiteUrlRaw = env.get("CONVEX_SITE_URL")?.trim() ?? "";
209+ if (convexSiteUrlRaw) {
210+ const convexSiteUrl = parseUrl(convexSiteUrlRaw);
211+ addCheck(
212+ report,
213+ "convex site URL format",
214+ Boolean(convexSiteUrl),
215+ convexSiteUrl ? convexSiteUrlRaw : `invalid URL: ${convexSiteUrlRaw}`,
216+ );
217+
218+ if (convexSiteUrl) {
219+ addCheck(
220+ report,
221+ "convex site URL protocol",
222+ convexSiteUrl.protocol === "https:",
223+ convexSiteUrl.protocol === "https:" ? "https" : `expected https, got ${convexSiteUrl.protocol}`,
224+ );
225+ }
226+ }
227+
228+ if (convexUrlRaw && convexSiteUrlRaw) {
229+ const convexUrl = parseUrl(convexUrlRaw);
230+ const convexSiteUrl = parseUrl(convexSiteUrlRaw);
231+ if (convexUrl && convexSiteUrl) {
232+ const cloudPrefix = deploymentPrefix(convexUrl.hostname, ".convex.cloud");
233+ const sitePrefix = deploymentPrefix(convexSiteUrl.hostname, ".convex.site");
234+ if (cloudPrefix && sitePrefix) {
235+ addCheck(
236+ report,
237+ "convex deployment pairing",
238+ cloudPrefix === sitePrefix,
239+ cloudPrefix === sitePrefix
240+ ? `deployment ${cloudPrefix} matches`
241+ : `CONVEX_URL(${cloudPrefix}) does not match CONVEX_SITE_URL(${sitePrefix})`,
242+ );
243+ }
244+ }
245+ }
246+
247+ const sandboxAuthToken = env.get("CLOUDFLARE_SANDBOX_AUTH_TOKEN")?.trim();
248+ if (sandboxAuthToken) {
249+ addTokenStrengthCheck(report, "CLOUDFLARE_SANDBOX_AUTH_TOKEN", sandboxAuthToken);
250+ }
251+
252+ const internalSecret = env.get("EXECUTOR_INTERNAL_TOKEN")?.trim();
253+ if (internalSecret) {
254+ addTokenStrengthCheck(report, "EXECUTOR_INTERNAL_TOKEN", internalSecret);
255+ }
256+
257+ for (const key of OPTIONAL_BILLING_ENV_KEYS) {
258+ const value = env.get(key)?.trim();
259+ addCheck(
260+ report,
261+ `env(optional):${key}`,
262+ true,
263+ value ? "set" : "not set (billing flow falls back to localhost URL)",
264+ );
265+ }
266+
267+ return checks;
268+}
269+
270+function guidanceForFailure(checkName: string): string[] {
271+ if (
272+ checkName === "env:CLOUDFLARE_SANDBOX_RUN_URL"
273+ || checkName === "env:CLOUDFLARE_SANDBOX_AUTH_TOKEN"
274+ || checkName === "env:EXECUTOR_INTERNAL_TOKEN"
275+ ) {
276+ return [
277+ "Run `bun run setup:prod:cloudflare --deploy` (or `bun run setup:prod:all`) to deploy sandbox host and set required Cloudflare runtime env vars.",
278+ ];
279+ }
280+
281+ if (checkName === "env:CONVEX_URL") {
282+ return [
283+ "Set Convex API URL: `bunx convex env set CONVEX_URL https://<deployment>.convex.cloud --prod`.",
284+ ];
285+ }
286+
287+ if (checkName === "convex URL host type") {
288+ return [
289+ "Use `.convex.cloud` for `CONVEX_URL` (do not use `.convex.site` for callback RPC).",
290+ ];
291+ }
292+
293+ if (checkName === "env:WORKOS_CLIENT_ID" || checkName === "env:WORKOS_API_KEY" || checkName === "env:WORKOS_WEBHOOK_SECRET") {
294+ return [
295+ "Set WorkOS auth env vars with `bun run setup:prod:env --from-env` (after exporting WORKOS_* vars), or run `bun run setup:prod:all`.",
296+ ];
297+ }
298+
299+ if (checkName === "env:WORKOS_COOKIE_PASSWORD") {
300+ return [
301+ "Set a strong cookie password (`WORKOS_COOKIE_PASSWORD`) via `bunx convex env set WORKOS_COOKIE_PASSWORD <VALUE> --prod`.",
302+ ];
303+ }
304+
305+ if (checkName === "env:auth server") {
306+ return [
307+ "Set one auth server env var: `MCP_AUTHORIZATION_SERVER` (preferred) via `bunx convex env set MCP_AUTHORIZATION_SERVER <URL> --prod`.",
308+ ];
309+ }
310+
311+ if (
312+ checkName === "env:STRIPE_SECRET_KEY"
313+ || checkName === "env:STRIPE_WEBHOOK_SECRET"
314+ || checkName === "env:STRIPE_PRICE_ID"
315+ ) {
316+ return [
317+ "Set Stripe billing env vars with `bun run setup:prod:env --from-env` (after exporting STRIPE_* vars), or run `bun run setup:prod:all`.",
318+ ];
319+ }
320+
321+ return ["Inspect current prod vars with `bunx convex env list --prod`."];
322+}
323+
324+export async function runProductionDoctor(): Promise<ProductionDoctorReport> {
325+ const report: ProductionDoctorReport = { checks: [] };
326+
327+ const envResult = await runConvex(["env", "list", "--prod"]);
328+ if (envResult.exitCode !== 0) {
329+ const detail = (envResult.stderr.trim() || envResult.stdout.trim() || "unknown failure").split("\n")[0] ?? "unknown failure";
330+ addCheck(report, "convex env access", false, detail);
331+ return report;
332+ }
333+
334+ addCheck(report, "convex env access", true, "able to read production Convex env");
335+ const env = parseConvexEnvList(envResult.stdout);
336+
337+ report.checks.push(...buildEnvChecks(env));
338+
339+ return report;
340+}
341+
342+export function hasDoctorFailures(report: ProductionDoctorReport): boolean {
343+ return report.checks.some((check) => !check.ok);
344+}
345+
346+async function main(): Promise<void> {
347+ const report = await runProductionDoctor();
348+ console.log("Production doctor");
349+ for (const check of report.checks) {
350+ const status = check.ok ? "ok" : "fail";
351+ console.log(` [${status}] ${check.name}: ${check.detail}`);
352+ }
353+
354+ const failedChecks = report.checks.filter((check) => !check.ok);
355+ if (failedChecks.length > 0) {
356+ const guidance = new Set<string>();
357+ for (const check of failedChecks) {
358+ for (const line of guidanceForFailure(check.name)) {
359+ guidance.add(line);
360+ }
361+ }
362+
363+ console.log("\nHow to fix");
364+ for (const line of guidance) {
365+ console.log(` - ${line}`);
366+ }
367+ }
368+
369+ if (hasDoctorFailures(report)) {
370+ process.exit(1);
371+ }
372+}
373+
374+if (import.meta.main) {
375+ try {
376+ await main();
377+ } catch (error) {
378+ const message = error instanceof Error ? error.message : String(error);
379+ console.error(`doctor:prod failed: ${message}`);
380+ process.exit(1);
381+ }
382+}
executor/scripts/setup-prod-cloudflare.ts+290−0
@@ -0,0 +1,290 @@
1+import crypto from "node:crypto";
2+import fs from "node:fs/promises";
3+import path from "node:path";
4+import { parseConvexEnvList } from "./doctor-prod";
5+
6+interface Options {
7+ runUrl?: string;
8+ convexUrl?: string;
9+ authToken?: string;
10+ internalToken?: string;
11+ deploy: boolean;
12+ runDoctor: boolean;
13+}
14+
15+interface CommandResult {
16+ exitCode: number;
17+ stdout: string;
18+ stderr: string;
19+}
20+
21+const EXECUTOR_ROOT = path.resolve(import.meta.dir, "..");
22+const SANDBOX_HOST_DIR = path.join(EXECUTOR_ROOT, "packages", "runner-sandbox-host");
23+
24+function printHelp(): void {
25+ console.log(`Setup Cloudflare runtime for production
26+
27+Usage:
28+ bun run scripts/setup-prod-cloudflare.ts [options]
29+
30+Options:
31+ --run-url <url> Explicit sandbox run URL (e.g. https://.../v1/runs)
32+ --convex-url <url> Explicit Convex API URL (https://...convex.cloud)
33+ --auth-token <token> Explicit sandbox auth token (otherwise generated)
34+ --internal-token <token> Explicit internal callback token (otherwise generated)
35+ --no-deploy Skip wrangler deploy step
36+ --no-doctor Skip running doctor:prod at the end
37+ -h, --help Show this help
38+`);
39+}
40+
41+function parseArgs(argv: string[]): Options {
42+ const options: Options = {
43+ deploy: true,
44+ runDoctor: true,
45+ };
46+
47+ for (let i = 0; i < argv.length; i += 1) {
48+ const arg = argv[i];
49+ const next = argv[i + 1];
50+ if (arg === "--run-url") {
51+ if (!next) throw new Error("Missing value for --run-url");
52+ options.runUrl = next;
53+ i += 1;
54+ continue;
55+ }
56+ if (arg === "--convex-url") {
57+ if (!next) throw new Error("Missing value for --convex-url");
58+ options.convexUrl = next;
59+ i += 1;
60+ continue;
61+ }
62+ if (arg === "--auth-token") {
63+ if (!next) throw new Error("Missing value for --auth-token");
64+ options.authToken = next;
65+ i += 1;
66+ continue;
67+ }
68+ if (arg === "--internal-token") {
69+ if (!next) throw new Error("Missing value for --internal-token");
70+ options.internalToken = next;
71+ i += 1;
72+ continue;
73+ }
74+ if (arg === "--no-deploy") {
75+ options.deploy = false;
76+ continue;
77+ }
78+ if (arg === "--no-doctor") {
79+ options.runDoctor = false;
80+ continue;
81+ }
82+ if (arg === "--help" || arg === "-h") {
83+ printHelp();
84+ process.exit(0);
85+ }
86+ throw new Error(`Unknown option: ${arg}`);
87+ }
88+
89+ return options;
90+}
91+
92+function randomToken(bytes = 32): string {
93+ return crypto.randomBytes(bytes).toString("base64url");
94+}
95+
96+function redact(value: string): string {
97+ if (value.length <= 8) return "********";
98+ return `${value.slice(0, 4)}...${value.slice(-4)}`;
99+}
100+
101+async function runCommand(
102+ command: string[],
103+ opts: { cwd?: string; stdinData?: string } = {},
104+): Promise<CommandResult> {
105+ const proc = Bun.spawn(command, {
106+ cwd: opts.cwd ?? EXECUTOR_ROOT,
107+ env: Bun.env,
108+ stdin: opts.stdinData !== undefined ? "pipe" : "ignore",
109+ stdout: "pipe",
110+ stderr: "pipe",
111+ });
112+
113+ if (opts.stdinData !== undefined && proc.stdin) {
114+ proc.stdin.write(`${opts.stdinData}\n`);
115+ proc.stdin.end();
116+ }
117+
118+ const [stdout, stderr, exitCode] = await Promise.all([
119+ new Response(proc.stdout).text(),
120+ new Response(proc.stderr).text(),
121+ proc.exited,
122+ ]);
123+
124+ return {
125+ exitCode,
126+ stdout,
127+ stderr,
128+ };
129+}
130+
131+async function runConvex(args: string[]): Promise<CommandResult> {
132+ return await runCommand(["bunx", "convex", ...args]);
133+}
134+
135+function ensureHttpsUrl(name: string, raw: string): void {
136+ let parsed: URL;
137+ try {
138+ parsed = new URL(raw);
139+ } catch {
140+ throw new Error(`${name} is not a valid URL: ${raw}`);
141+ }
142+
143+ if (parsed.protocol !== "https:") {
144+ throw new Error(`${name} must use https: ${raw}`);
145+ }
146+}
147+
148+async function parseSandboxWorkerName(): Promise<string> {
149+ const wranglerConfigPath = path.join(SANDBOX_HOST_DIR, "wrangler.jsonc");
150+ const text = await fs.readFile(wranglerConfigPath, "utf8");
151+ const match = text.match(/"name"\s*:\s*"([^"]+)"/);
152+ if (!match?.[1]) {
153+ throw new Error(`Could not parse worker name from ${wranglerConfigPath}`);
154+ }
155+ return match[1];
156+}
157+
158+function inferWorkersUrlFromDeployOutput(output: string): string | null {
159+ const match = output.match(/https:\/\/[a-zA-Z0-9._-]+\.workers\.dev/);
160+ if (!match?.[0]) {
161+ return null;
162+ }
163+ return `${match[0]}/v1/runs`;
164+}
165+
166+async function deploySandboxHostIfNeeded(enabled: boolean): Promise<string | null> {
167+ if (!enabled) {
168+ return null;
169+ }
170+
171+ console.log("[setup] deploying sandbox host worker...");
172+ const deploy = await runCommand(["bunx", "wrangler", "deploy"], { cwd: SANDBOX_HOST_DIR });
173+ if (deploy.exitCode !== 0) {
174+ throw new Error(`wrangler deploy failed:\n${deploy.stderr || deploy.stdout}`);
175+ }
176+
177+ const combined = `${deploy.stdout}\n${deploy.stderr}`;
178+ const inferred = inferWorkersUrlFromDeployOutput(combined);
179+ if (inferred) {
180+ console.log(`[setup] inferred run URL from deploy output: ${inferred}`);
181+ }
182+ return inferred;
183+}
184+
185+async function putWorkerSecret(secretName: string, value: string): Promise<void> {
186+ const workerName = await parseSandboxWorkerName();
187+ console.log(`[setup] setting wrangler secret ${secretName} on ${workerName}...`);
188+
189+ const result = await runCommand(
190+ ["bunx", "wrangler", "secret", "put", secretName, "--name", workerName],
191+ { cwd: SANDBOX_HOST_DIR, stdinData: value },
192+ );
193+ if (result.exitCode !== 0) {
194+ throw new Error(`wrangler secret put ${secretName} failed:\n${result.stderr || result.stdout}`);
195+ }
196+}
197+
198+async function setConvexEnv(key: string, value: string): Promise<void> {
199+ const result = await runConvex(["env", "set", key, value, "--prod"]);
200+ if (result.exitCode !== 0) {
201+ throw new Error(`convex env set ${key} failed:\n${result.stderr || result.stdout}`);
202+ }
203+}
204+
205+async function getProdEnvMap(): Promise<Map<string, string>> {
206+ const envResult = await runConvex(["env", "list", "--prod"]);
207+ if (envResult.exitCode !== 0) {
208+ throw new Error(`convex env list --prod failed:\n${envResult.stderr || envResult.stdout}`);
209+ }
210+ return parseConvexEnvList(envResult.stdout);
211+}
212+
213+function resolveConvexUrl(options: Options, env: Map<string, string>): string {
214+ const selected = options.convexUrl?.trim()
215+ || env.get("CONVEX_URL")?.trim()
216+ || Bun.env.CONVEX_URL?.trim();
217+
218+ if (!selected) {
219+ throw new Error(
220+ "Could not determine CONVEX_URL. Pass --convex-url or set CONVEX_URL in your environment.",
221+ );
222+ }
223+
224+ ensureHttpsUrl("CONVEX_URL", selected);
225+ return selected;
226+}
227+
228+function resolveRunUrl(options: Options, env: Map<string, string>, deployedRunUrl: string | null): string {
229+ const selected = options.runUrl?.trim()
230+ || deployedRunUrl
231+ || env.get("CLOUDFLARE_SANDBOX_RUN_URL")?.trim();
232+
233+ if (!selected) {
234+ throw new Error(
235+ "Could not determine CLOUDFLARE_SANDBOX_RUN_URL. Pass --run-url or allow deploy to infer it.",
236+ );
237+ }
238+
239+ ensureHttpsUrl("CLOUDFLARE_SANDBOX_RUN_URL", selected);
240+ if (!selected.includes("/v1/runs")) {
241+ throw new Error(`CLOUDFLARE_SANDBOX_RUN_URL must include /v1/runs: ${selected}`);
242+ }
243+ return selected;
244+}
245+
246+async function main(): Promise<void> {
247+ const options = parseArgs(process.argv.slice(2));
248+ const env = await getProdEnvMap();
249+
250+ const deployedRunUrl = await deploySandboxHostIfNeeded(options.deploy);
251+
252+ const runUrl = resolveRunUrl(options, env, deployedRunUrl);
253+ const convexUrl = resolveConvexUrl(options, env);
254+ const authToken = options.authToken?.trim() || env.get("CLOUDFLARE_SANDBOX_AUTH_TOKEN")?.trim() || randomToken();
255+ const internalToken = options.internalToken?.trim() || env.get("EXECUTOR_INTERNAL_TOKEN")?.trim() || randomToken();
256+
257+ await putWorkerSecret("AUTH_TOKEN", authToken);
258+
259+ console.log("[setup] setting production Convex env vars...");
260+ await setConvexEnv("CLOUDFLARE_SANDBOX_RUN_URL", runUrl);
261+ await setConvexEnv("CLOUDFLARE_SANDBOX_AUTH_TOKEN", authToken);
262+ await setConvexEnv("EXECUTOR_INTERNAL_TOKEN", internalToken);
263+ await setConvexEnv("CONVEX_URL", convexUrl);
264+
265+ console.log("\n[setup] cloudflare production runtime configured");
266+ console.log(` CLOUDFLARE_SANDBOX_RUN_URL: ${runUrl}`);
267+ console.log(` CLOUDFLARE_SANDBOX_AUTH_TOKEN: ${redact(authToken)}`);
268+ console.log(` EXECUTOR_INTERNAL_TOKEN: ${redact(internalToken)}`);
269+ console.log(` CONVEX_URL: ${convexUrl}`);
270+
271+ if (options.runDoctor) {
272+ console.log("\n[setup] running doctor:prod...");
273+ const doctor = await runCommand(["bun", "run", "doctor:prod"], { cwd: EXECUTOR_ROOT });
274+ const output = [doctor.stdout.trim(), doctor.stderr.trim()].filter(Boolean).join("\n");
275+ if (output) {
276+ console.log(output);
277+ }
278+ if (doctor.exitCode !== 0) {
279+ process.exit(doctor.exitCode);
280+ }
281+ }
282+}
283+
284+try {
285+ await main();
286+} catch (error) {
287+ const message = error instanceof Error ? error.message : String(error);
288+ console.error(`[setup] failed: ${message}`);
289+ process.exit(1);
290+}
executor/scripts/setup-prod-env.ts+165−0
@@ -0,0 +1,165 @@
1+interface CommandResult {
2+ exitCode: number;
3+ stdout: string;
4+ stderr: string;
5+}
6+
7+interface Options {
8+ fromEnv: boolean;
9+ strict: boolean;
10+}
11+
12+const REQUIRED_KEYS = [
13+ "WORKOS_CLIENT_ID",
14+ "WORKOS_API_KEY",
15+ "WORKOS_WEBHOOK_SECRET",
16+ "WORKOS_COOKIE_PASSWORD",
17+ "STRIPE_SECRET_KEY",
18+ "STRIPE_WEBHOOK_SECRET",
19+ "STRIPE_PRICE_ID",
20+ "MCP_AUTHORIZATION_SERVER",
21+] as const;
22+
23+const OPTIONAL_KEYS = [
24+ "BILLING_SUCCESS_URL",
25+ "BILLING_CANCEL_URL",
26+ "BILLING_RETURN_URL",
27+] as const;
28+
29+function printHelp(): void {
30+ console.log(`Setup production Convex app env vars
31+
32+Usage:
33+ bun run scripts/setup-prod-env.ts --from-env [--strict]
34+
35+Options:
36+ --from-env Read values from current shell env and push to Convex prod
37+ --strict Fail if any required key is missing locally
38+ -h, --help Show this help
39+
40+Required local env keys:
41+ ${REQUIRED_KEYS.join("\n ")}
42+
43+Optional local env keys:
44+ ${OPTIONAL_KEYS.join("\n ")}
45+`);
46+}
47+
48+function parseArgs(argv: string[]): Options {
49+ const options: Options = {
50+ fromEnv: false,
51+ strict: false,
52+ };
53+
54+ for (const arg of argv) {
55+ if (arg === "--from-env") {
56+ options.fromEnv = true;
57+ continue;
58+ }
59+ if (arg === "--strict") {
60+ options.strict = true;
61+ continue;
62+ }
63+ if (arg === "--help" || arg === "-h") {
64+ printHelp();
65+ process.exit(0);
66+ }
67+ throw new Error(`Unknown option: ${arg}`);
68+ }
69+
70+ if (!options.fromEnv) {
71+ throw new Error("Use --from-env to read values from your local environment.");
72+ }
73+
74+ return options;
75+}
76+
77+async function runCommand(command: string[]): Promise<CommandResult> {
78+ const proc = Bun.spawn(command, {
79+ env: Bun.env,
80+ stdin: "ignore",
81+ stdout: "pipe",
82+ stderr: "pipe",
83+ });
84+
85+ const [stdout, stderr, exitCode] = await Promise.all([
86+ new Response(proc.stdout).text(),
87+ new Response(proc.stderr).text(),
88+ proc.exited,
89+ ]);
90+
91+ return {
92+ exitCode,
93+ stdout,
94+ stderr,
95+ };
96+}
97+
98+async function setConvexEnv(key: string, value: string): Promise<void> {
99+ const result = await runCommand(["bunx", "convex", "env", "set", key, value, "--prod"]);
100+ if (result.exitCode !== 0) {
101+ throw new Error(`Failed setting ${key}: ${result.stderr || result.stdout}`);
102+ }
103+}
104+
105+function redact(value: string): string {
106+ if (value.length < 8) return "********";
107+ return `${value.slice(0, 4)}...${value.slice(-4)}`;
108+}
109+
110+async function main(): Promise<void> {
111+ const options = parseArgs(process.argv.slice(2));
112+
113+ const missingRequired: string[] = [];
114+ const toSet: Array<{ key: string; value: string; optional: boolean }> = [];
115+
116+ for (const key of REQUIRED_KEYS) {
117+ const value = Bun.env[key]?.trim();
118+ if (!value) {
119+ missingRequired.push(key);
120+ continue;
121+ }
122+ toSet.push({ key, value, optional: false });
123+ }
124+
125+ for (const key of OPTIONAL_KEYS) {
126+ const value = Bun.env[key]?.trim();
127+ if (!value) {
128+ continue;
129+ }
130+ toSet.push({ key, value, optional: true });
131+ }
132+
133+ if (missingRequired.length > 0) {
134+ console.log("[setup] missing required local env vars:");
135+ for (const key of missingRequired) {
136+ console.log(` - ${key}`);
137+ }
138+ if (options.strict) {
139+ throw new Error("Required local env vars are missing and --strict was set.");
140+ }
141+ console.log("[setup] continuing with available values (use --strict to enforce all required vars)");
142+ }
143+
144+ if (toSet.length === 0) {
145+ throw new Error("No env vars found to set. Export values and rerun with --from-env.");
146+ }
147+
148+ console.log("[setup] pushing env vars to Convex prod...");
149+ for (const item of toSet) {
150+ await setConvexEnv(item.key, item.value);
151+ console.log(` - ${item.key}=${redact(item.value)}${item.optional ? " (optional)" : ""}`);
152+ }
153+
154+ console.log("[setup] done.");
155+}
156+
157+try {
158+ await main();
159+} catch (error) {
160+ const message = error instanceof Error ? error.message : String(error);
161+ console.error(`[setup] failed: ${message}`);
162+ process.exit(1);
163+}
164+
165+export {};
executor/tsconfig.json+3−3
@@ -16,9 +16,9 @@ · 15 unmodified lines
1616 "baseUrl": "."
1717 },
1818 "include": [
19− "packages/**/*.ts",
20− "convex/**/*.ts",
21− "lib/**/*.ts",
19+ "packages/convex/**/*.ts",
20+ "packages/runner-node/**/*.ts",
21+ "packages/core/src/**/*.ts",
2222 "scripts/**/*.ts",
2323 "executor.ts",
2424 "vscode-elicitation-server.ts"
package.json+1−1
@@ -3,9 +3,9 @@ · 2 unmodified lines
33 "private": true,
44 "type": "module",
55 "workspaces": [
6− "executor/convex",
76 "executor/apps/*",
87 "executor/packages/*",
8+ "executor/infra",
99 "sources",
1010 "assistant",
1111 "assistant/packages/*",