History

misc fixes

Rhys Sullivan committed 8 months ago

Commit e604ea61 parent 54d7a4225 files · +414 −256Browse files

Unified · Split

25 files
  1. apps/executor/package.json +0 −2
  2. apps/executor/src/cli/dev.ts +3 −3
  3. apps/executor/src/server/index.ts +3 −5
  4. bun.lock +103 −3
  5. knip.json +38 −0
  6. package.json +3 −1
  7. packages/codemode-mcp/src/mcp-elicitation-bridge.ts +1 −1
  8. packages/control-plane/src/api/api.ts +0 −50
  9. packages/control-plane/src/api/executions/http.ts +4 −4
  10. packages/control-plane/src/api/http.ts +2 −2
  11. packages/control-plane/src/api/index.ts +15 −2
  12. packages/control-plane/src/api/local/http.ts +3 −3
  13. packages/control-plane/src/api/memberships/http.ts +5 −5
  14. packages/control-plane/src/api/organizations/http.ts +6 −6
  15. packages/control-plane/src/api/policies/http.ts +6 −6
  16. packages/control-plane/src/api/service.ts +56 −4
  17. packages/control-plane/src/api/sources/http.ts +6 −6
  18. packages/control-plane/src/api/workspaces/http.ts +6 −6
  19. packages/control-plane/src/runtime/control-plane-runtime.test.ts +1 −6
  20. packages/control-plane/src/runtime/execution-service.ts +5 −18
  21. packages/control-plane/src/runtime/index.ts +75 −14
  22. packages/control-plane/src/runtime/services.ts +71 −86
  23. packages/control-plane/src/runtime/slug.ts +0 −18
  24. packages/control-plane/src/runtime/test-http-client.ts +2 −4
  25. packages/kitchen-sink/package.json +0 −1
apps/executor/package.json+0−2
@@ -16,8 +16,6 @@ · 15 unmodified lines
16 "@effect/platform": "catalog:",16 "@effect/platform": "catalog:",
17 "@effect/platform-node": "catalog:",17 "@effect/platform-node": "catalog:",
18 "@executor-v3/codemode-core": "workspace:*",18 "@executor-v3/codemode-core": "workspace:*",
19 "@executor-v3/codemode-mcp": "workspace:*",
20 "@executor-v3/codemode-openapi": "workspace:*",
21 "@executor-v3/control-plane": "workspace:*",19 "@executor-v3/control-plane": "workspace:*",
22 "@executor-v3/runtime-local-inproc": "workspace:*",20 "@executor-v3/runtime-local-inproc": "workspace:*",
23 "effect": "catalog:"21 "effect": "catalog:"
apps/executor/src/cli/dev.ts+3−3
@@ -4,7 +4,7 @@ import { · 3 unmodified lines
4} from "@executor-v3/control-plane";4} from "@executor-v3/control-plane";
5import * as Effect from "effect/Effect";5import * as Effect from "effect/Effect";
6 6
7export type SeedDemoMcpSourceInput = {7type SeedDemoMcpSourceInput = {
8 client: ControlPlaneClient;8 client: ControlPlaneClient;
9 workspaceId: string;9 workspaceId: string;
10 endpoint: string;10 endpoint: string;
@@ -12,7 +12,7 @@ export type SeedDemoMcpSourceInput = { · 1 unmodified line
12 namespace: string;12 namespace: string;
13};13};
14 14
15export type SeedDemoMcpSourceResult =15type SeedDemoMcpSourceResult =
16 | {16 | {
17 action: "noop";17 action: "noop";
18 sourceId: string;18 sourceId: string;
@@ -26,7 +26,7 @@ export type SeedDemoMcpSourceResult = · 7 unmodified lines
26 endpoint: string;26 endpoint: string;
27 };27 };
28 28
29export type SeedGithubOpenApiSourceInput = {29type SeedGithubOpenApiSourceInput = {
30 client: ControlPlaneClient;30 client: ControlPlaneClient;
31 workspaceId: string;31 workspaceId: string;
32 endpoint: string;32 endpoint: string;
apps/executor/src/server/index.ts+3−5
@@ -6,7 +6,6 @@ import { HttpApiBuilder, HttpServer } from "@effect/platform"; · 5 unmodified lines
6import { NodeHttpServer } from "@effect/platform-node";6import { NodeHttpServer } from "@effect/platform-node";
7import {7import {
8 ControlPlaneActorResolver,8 ControlPlaneActorResolver,
9 ControlPlaneService,
10 createControlPlaneApiLayer,9 createControlPlaneApiLayer,
11 createSqlControlPlaneRuntime,10 createSqlControlPlaneRuntime,
12 type ResolveExecutionEnvironment,11 type ResolveExecutionEnvironment,
@@ -24,14 +23,14 @@ import { · 11 unmodified lines
24 DEFAULT_SERVER_PORT,23 DEFAULT_SERVER_PORT,
25} from "./config";24} from "./config";
26 25
27export type LocalExecutorServer = {26type LocalExecutorServer = {
28 readonly runtime: SqlControlPlaneRuntime;27 readonly runtime: SqlControlPlaneRuntime;
29 readonly port: number;28 readonly port: number;
30 readonly host: string;29 readonly host: string;
31 readonly baseUrl: string;30 readonly baseUrl: string;
32};31};
33 32
34export type StartLocalExecutorServerOptions = {33type StartLocalExecutorServerOptions = {
35 readonly port?: number;34 readonly port?: number;
36 readonly host?: string;35 readonly host?: string;
37 readonly localDataDir?: string;36 readonly localDataDir?: string;
@@ -47,12 +46,11 @@ const createControlPlaneServerLayer = (input: { · 9 unmodified lines
47 host: string;46 host: string;
48 port: number;47 port: number;
49}) => {48}) => {
50 const serviceLayer = Layer.succeed(ControlPlaneService, input.runtime.service);
51 const actorResolverLayer = Layer.succeed(49 const actorResolverLayer = Layer.succeed(
52 ControlPlaneActorResolver,50 ControlPlaneActorResolver,
53 input.runtime.actorResolver,51 input.runtime.actorResolver,
54 );52 );
55 const apiLayer = createControlPlaneApiLayer(serviceLayer, actorResolverLayer);53 const apiLayer = createControlPlaneApiLayer(input.runtime.serviceLayer, actorResolverLayer);
56 54
57 return HttpApiBuilder.serve().pipe(55 return HttpApiBuilder.serve().pipe(
58 Layer.provide(apiLayer),56 Layer.provide(apiLayer),
bun.lock+103−3
@@ -5,6 +5,7 @@ · 4 unmodified lines
5 "": {5 "": {
6 "name": "executor-v3",6 "name": "executor-v3",
7 "devDependencies": {7 "devDependencies": {
8 "knip": "^5.85.0",
8 "typescript": "^5.9.3",9 "typescript": "^5.9.3",
9 },10 },
10 },11 },
@@ -18,8 +19,6 @@ · 7 unmodified lines
18 "@effect/platform": "catalog:",19 "@effect/platform": "catalog:",
19 "@effect/platform-node": "catalog:",20 "@effect/platform-node": "catalog:",
20 "@executor-v3/codemode-core": "workspace:*",21 "@executor-v3/codemode-core": "workspace:*",
21 "@executor-v3/codemode-mcp": "workspace:*",
22 "@executor-v3/codemode-openapi": "workspace:*",
23 "@executor-v3/control-plane": "workspace:*",22 "@executor-v3/control-plane": "workspace:*",
24 "@executor-v3/runtime-local-inproc": "workspace:*",23 "@executor-v3/runtime-local-inproc": "workspace:*",
25 "effect": "catalog:",24 "effect": "catalog:",
@@ -136,7 +135,6 @@ · 110 unmodified lines
136 "@executor-v3/ai-sdk-adapter": "workspace:*",135 "@executor-v3/ai-sdk-adapter": "workspace:*",
137 "@executor-v3/codemode-core": "workspace:*",136 "@executor-v3/codemode-core": "workspace:*",
138 "@executor-v3/codemode-openapi": "workspace:*",137 "@executor-v3/codemode-openapi": "workspace:*",
139 "@executor-v3/control-plane": "workspace:*",
140 "@executor-v3/runtime-local-inproc": "workspace:*",138 "@executor-v3/runtime-local-inproc": "workspace:*",
141 "effect": "catalog:",139 "effect": "catalog:",
142 },140 },
@@ -241,6 +239,12 @@ · 98 unmodified lines
241 239
242 "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="],240 "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="],
243 241
242 "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="],
243
244 "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
245
246 "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="],
247
244 "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],248 "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
245 249
246 "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="],250 "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="],
@@ -331,8 +335,56 @@ · 84 unmodified lines
331 335
332 "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="],336 "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="],
333 337
338 "@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=="],
339
340 "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
341
342 "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
343
344 "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
345
334 "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],346 "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
335 347
348 "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.19.1", "", { "os": "android", "cpu": "arm" }, "sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg=="],
349
350 "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.19.1", "", { "os": "android", "cpu": "arm64" }, "sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA=="],
351
352 "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.19.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ=="],
353
354 "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.19.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ=="],
355
356 "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.19.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw=="],
357
358 "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1", "", { "os": "linux", "cpu": "arm" }, "sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A=="],
359
360 "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.19.1", "", { "os": "linux", "cpu": "arm" }, "sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ=="],
361
362 "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.19.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig=="],
363
364 "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.19.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew=="],
365
366 "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.19.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ=="],
367
368 "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.19.1", "", { "os": "linux", "cpu": "none" }, "sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w=="],
369
370 "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.19.1", "", { "os": "linux", "cpu": "none" }, "sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw=="],
371
372 "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.19.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA=="],
373
374 "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.19.1", "", { "os": "linux", "cpu": "x64" }, "sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ=="],
375
376 "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.19.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw=="],
377
378 "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.19.1", "", { "os": "none", "cpu": "arm64" }, "sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA=="],
379
380 "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.19.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg=="],
381
382 "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.19.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ=="],
383
384 "@oxc-resolver/binding-win32-ia32-msvc": ["@oxc-resolver/binding-win32-ia32-msvc@11.19.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA=="],
385
386 "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.19.1", "", { "os": "win32", "cpu": "x64" }, "sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw=="],
387
336 "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="],388 "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="],
337 389
338 "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="],390 "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="],
@@ -415,6 +467,8 @@ · 76 unmodified lines
415 467
416 "@tediousjs/connection-string": ["@tediousjs/connection-string@0.5.0", "", {}, "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ=="],468 "@tediousjs/connection-string": ["@tediousjs/connection-string@0.5.0", "", {}, "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ=="],
417 469
470 "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
471
418 "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],472 "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],
419 473
420 "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],474 "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],
@@ -457,6 +511,8 @@ · 36 unmodified lines
457 511
458 "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="],512 "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="],
459 513
514 "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
515
460 "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="],516 "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="],
461 517
462 "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],518 "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
@@ -465,6 +521,8 @@ · 2 unmodified lines
465 521
466 "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],522 "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
467 523
524 "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
525
468 "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],526 "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
469 527
470 "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],528 "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],
@@ -563,14 +621,24 @@ · 92 unmodified lines
563 621
564 "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],622 "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
565 623
624 "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
625
566 "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],626 "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],
567 627
628 "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
629
630 "fd-package-json": ["fd-package-json@2.0.0", "", { "dependencies": { "walk-up-path": "^4.0.0" } }, "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ=="],
631
568 "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],632 "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
569 633
634 "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
635
570 "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="],636 "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="],
571 637
572 "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="],638 "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="],
573 639
640 "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="],
641
574 "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="],642 "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="],
575 643
576 "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="],644 "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="],
@@ -583,6 +651,8 @@ · 6 unmodified lines
583 651
584 "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],652 "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
585 653
654 "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
655
586 "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],656 "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
587 657
588 "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],658 "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
@@ -617,6 +687,8 @@ · 28 unmodified lines
617 687
618 "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],688 "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
619 689
690 "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
691
620 "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="],692 "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="],
621 693
622 "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="],694 "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="],
@@ -631,6 +703,8 @@ · 8 unmodified lines
631 703
632 "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="],704 "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="],
633 705
706 "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
707
634 "jsbi": ["jsbi@4.3.2", "", {}, "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew=="],708 "jsbi": ["jsbi@4.3.2", "", {}, "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew=="],
635 709
636 "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="],710 "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="],
@@ -645,6 +719,8 @@ · 8 unmodified lines
645 719
646 "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=="],720 "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=="],
647 721
722 "knip": ["knip@5.85.0", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "jiti": "^2.6.0", "js-yaml": "^4.1.1", "minimist": "^1.2.8", "oxc-resolver": "^11.15.0", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.5.2", "strip-json-comments": "5.0.3", "zod": "^4.1.11" }, "peerDependencies": { "@types/node": ">=18", "typescript": ">=5.0.4 <7" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg=="],
723
648 "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="],724 "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="],
649 725
650 "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="],726 "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="],
@@ -671,12 +747,18 @@ · 20 unmodified lines
671 747
672 "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="],748 "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="],
673 749
750 "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
751
752 "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
753
674 "mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="],754 "mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="],
675 755
676 "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],756 "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
677 757
678 "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],758 "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
679 759
760 "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
761
680 "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],762 "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
681 763
682 "msgpackr": ["msgpackr@1.11.8", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA=="],764 "msgpackr": ["msgpackr@1.11.8", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA=="],
@@ -707,6 +789,8 @@ · 24 unmodified lines
707 789
708 "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="],790 "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="],
709 791
792 "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="],
793
710 "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="],794 "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="],
711 795
712 "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],796 "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
@@ -735,6 +819,8 @@ · 22 unmodified lines
735 819
736 "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="],820 "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="],
737 821
822 "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
823
738 "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],824 "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],
739 825
740 "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],826 "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
@@ -743,6 +829,8 @@ · 2 unmodified lines
743 829
744 "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],830 "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
745 831
832 "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
833
746 "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],834 "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
747 835
748 "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="],836 "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="],
@@ -751,6 +839,8 @@ · 2 unmodified lines
751 839
752 "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="],840 "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="],
753 841
842 "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
843
754 "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],844 "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
755 845
756 "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],846 "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
@@ -777,6 +867,8 @@ · 20 unmodified lines
777 867
778 "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="],868 "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="],
779 869
870 "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="],
871
780 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],872 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
781 873
782 "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="],874 "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="],
@@ -789,6 +881,8 @@ · 6 unmodified lines
789 881
790 "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],882 "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
791 883
884 "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="],
885
792 "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="],886 "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="],
793 887
794 "tarn": ["tarn@3.0.2", "", {}, "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="],888 "tarn": ["tarn@3.0.2", "", {}, "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="],
@@ -807,6 +901,8 @@ · 12 unmodified lines
807 901
808 "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="],902 "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="],
809 903
904 "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
905
810 "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="],906 "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="],
811 907
812 "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="],908 "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="],
@@ -833,6 +929,8 @@ · 20 unmodified lines
833 929
834 "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=="],930 "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=="],
835 931
932 "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="],
933
836 "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],934 "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
837 935
838 "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="],936 "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="],
@@ -851,6 +949,8 @@ · 12 unmodified lines
851 949
852 "@azure/msal-node/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="],950 "@azure/msal-node/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="],
853 951
952 "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
953
854 "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],954 "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
855 955
856 "vite/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=="],956 "vite/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=="],
knip.json+38−0
@@ -0,0 +1,38 @@
1{
2 "$schema": "https://unpkg.com/knip@5/schema.json",
3 "exclude": [
4 "duplicates"
5 ],
6 "ignoreIssues": {
7 "packages/codemode-openapi/src/openapi-extractor-wasm/openapi_extractor.js": [
8 "exports"
9 ]
10 },
11 "workspaces": {
12 ".": {
13 "entry": [],
14 "project": []
15 },
16 "apps/*": {
17 "entry": [
18 "src/index.ts",
19 "src/main.ts",
20 "src/server.ts",
21 "src/cli/main.ts"
22 ],
23 "project": [
24 "src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}"
25 ]
26 },
27 "packages/*": {
28 "entry": [
29 "src/index.ts",
30 "src/main.ts",
31 "src/playground.ts"
32 ],
33 "project": [
34 "src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}"
35 ]
36 }
37 }
38}
package.json+3−1
@@ -19,9 +19,11 @@ · 18 unmodified lines
19 "zod": "^4.3.6"19 "zod": "^4.3.6"
20 },20 },
21 "scripts": {21 "scripts": {
22 "typecheck": "bun run --filter='*' typecheck"22 "typecheck": "bun run --filter='*' typecheck",
23 "knip": "knip"
23 },24 },
24 "devDependencies": {25 "devDependencies": {
26 "knip": "^5.85.0",
25 "typescript": "^5.9.3"27 "typescript": "^5.9.3"
26 }28 }
27}29}
packages/codemode-mcp/src/mcp-elicitation-bridge.ts+1−1
@@ -76,7 +76,7 @@ export const toMcpElicitationResponse = ( · 75 unmodified lines
76 }76 }
77 : { action: response.action };77 : { action: response.action };
78 78
79export type McpClientWithElicitationHandler = {79type McpClientWithElicitationHandler = {
80 setRequestHandler: (80 setRequestHandler: (
81 schema: typeof ElicitRequestSchema,81 schema: typeof ElicitRequestSchema,
82 handler: (request: { params: unknown }) => Promise<unknown>,82 handler: (request: { params: unknown }) => Promise<unknown>,
packages/control-plane/src/api/api.ts+0−50
@@ -8,56 +8,6 @@ import { PoliciesApi } from "./policies/api"; · 7 unmodified lines
8import { SourcesApi } from "./sources/api";8import { SourcesApi } from "./sources/api";
9import { WorkspacesApi } from "./workspaces/api";9import { WorkspacesApi } from "./workspaces/api";
10 10
11export {
12 ControlPlaneBadRequestError,
13 ControlPlaneForbiddenError,
14 ControlPlaneNotFoundError,
15 ControlPlaneStorageError,
16 ControlPlaneUnauthorizedError,
17} from "./errors";
18
19export {
20 CreateExecutionPayloadSchema,
21 ResumeExecutionPayloadSchema,
22 type CreateExecutionPayload,
23 type ResumeExecutionPayload,
24} from "./executions/api";
25
26export {
27 CreateOrganizationPayloadSchema,
28 UpdateOrganizationPayloadSchema,
29 type CreateOrganizationPayload,
30 type UpdateOrganizationPayload,
31} from "./organizations/api";
32
33export {
34 CreateMembershipPayloadSchema,
35 UpdateMembershipPayloadSchema,
36 type CreateMembershipPayload,
37 type UpdateMembershipPayload,
38} from "./memberships/api";
39
40export {
41 CreateWorkspacePayloadSchema,
42 UpdateWorkspacePayloadSchema,
43 type CreateWorkspacePayload,
44 type UpdateWorkspacePayload,
45} from "./workspaces/api";
46
47export {
48 CreateSourcePayloadSchema,
49 UpdateSourcePayloadSchema,
50 type CreateSourcePayload,
51 type UpdateSourcePayload,
52} from "./sources/api";
53
54export {
55 CreatePolicyPayloadSchema,
56 UpdatePolicyPayloadSchema,
57 type CreatePolicyPayload,
58 type UpdatePolicyPayload,
59} from "./policies/api";
60
61export class ControlPlaneApi extends HttpApi.make("controlPlane")11export class ControlPlaneApi extends HttpApi.make("controlPlane")
62 .add(LocalApi)12 .add(LocalApi)
63 .add(OrganizationsApi)13 .add(OrganizationsApi)
packages/control-plane/src/api/executions/http.ts+4−4
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlaneExecutionsService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -59,7 +59,7 @@ export const ControlPlaneExecutionsLive = HttpApiBuilder.group( · 36 unmodified lines
59 handlers59 handlers
60 .handle("create", ({ path, payload }) =>60 .handle("create", ({ path, payload }) =>
61 Effect.gen(function* () {61 Effect.gen(function* () {
62 const service = yield* ControlPlaneService;62 const service = yield* ControlPlaneExecutionsService;
63 const actor = yield* resolveWorkspaceActor(path.workspaceId);63 const actor = yield* resolveWorkspaceActor(path.workspaceId);
64 64
65 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(65 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(
@@ -80,7 +80,7 @@ export const ControlPlaneExecutionsLive = HttpApiBuilder.group( · 14 unmodified lines
80 )80 )
81 .handle("get", ({ path }) =>81 .handle("get", ({ path }) =>
82 Effect.gen(function* () {82 Effect.gen(function* () {
83 const service = yield* ControlPlaneService;83 const service = yield* ControlPlaneExecutionsService;
84 const actor = yield* resolveWorkspaceActor(path.workspaceId);84 const actor = yield* resolveWorkspaceActor(path.workspaceId);
85 85
86 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(86 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(
@@ -100,7 +100,7 @@ export const ControlPlaneExecutionsLive = HttpApiBuilder.group( · 13 unmodified lines
100 )100 )
101 .handle("resume", ({ path, payload }) =>101 .handle("resume", ({ path, payload }) =>
102 Effect.gen(function* () {102 Effect.gen(function* () {
103 const service = yield* ControlPlaneService;103 const service = yield* ControlPlaneExecutionsService;
104 const actor = yield* resolveWorkspaceActor(path.workspaceId);104 const actor = yield* resolveWorkspaceActor(path.workspaceId);
105 105
106 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(106 return yield* withPolicy(requireExecuteWorkspace(path.workspaceId))(
packages/control-plane/src/api/http.ts+2−2
@@ -11,7 +11,7 @@ import { ControlPlaneLocalLive } from "./local/http"; · 10 unmodified lines
11import { ControlPlaneMembershipsLive } from "./memberships/http";11import { ControlPlaneMembershipsLive } from "./memberships/http";
12import { ControlPlaneOrganizationsLive } from "./organizations/http";12import { ControlPlaneOrganizationsLive } from "./organizations/http";
13import { ControlPlanePoliciesLive } from "./policies/http";13import { ControlPlanePoliciesLive } from "./policies/http";
14import { ControlPlaneService } from "./service";14import { type ControlPlaneApiServiceContext } from "./service";
15import { ControlPlaneSourcesLive } from "./sources/http";15import { ControlPlaneSourcesLive } from "./sources/http";
16import { ControlPlaneWorkspacesLive } from "./workspaces/http";16import { ControlPlaneWorkspacesLive } from "./workspaces/http";
17 17
@@ -26,7 +26,7 @@ export const ControlPlaneApiLive = HttpApiBuilder.api(ControlPlaneApi).pipe( · 8 unmodified lines
26);26);
27 27
28export const createControlPlaneApiLayer = <EService, EResolver>(28export const createControlPlaneApiLayer = <EService, EResolver>(
29 serviceLayer: Layer.Layer<ControlPlaneService, EService, never>,29 serviceLayer: Layer.Layer<ControlPlaneApiServiceContext, EService, never>,
30 actorResolverLayer: Layer.Layer<ControlPlaneActorResolver, EResolver, never>,30 actorResolverLayer: Layer.Layer<ControlPlaneActorResolver, EResolver, never>,
31) =>31) =>
32 ControlPlaneApiLive.pipe(32 ControlPlaneApiLive.pipe(
packages/control-plane/src/api/index.ts+15−2
@@ -14,8 +14,21 @@ export { · 13 unmodified lines
14} from "./errors";14} from "./errors";
15 15
16export {16export {
17 ControlPlaneService,17 ControlPlaneOrganizationsService,
18 type ControlPlaneServiceShape,18 type ControlPlaneOrganizationsServiceShape,
19 ControlPlaneMembershipsService,
20 type ControlPlaneMembershipsServiceShape,
21 ControlPlaneWorkspacesService,
22 type ControlPlaneWorkspacesServiceShape,
23 ControlPlaneSourcesService,
24 type ControlPlaneSourcesServiceShape,
25 ControlPlaneExecutionsService,
26 type ControlPlaneExecutionsServiceShape,
27 ControlPlaneLocalService,
28 type ControlPlaneLocalServiceShape,
29 ControlPlanePoliciesService,
30 type ControlPlanePoliciesServiceShape,
31 type ControlPlaneApiServiceContext,
19 type CreateOrganizationInput,32 type CreateOrganizationInput,
20 type UpdateOrganizationInput,33 type UpdateOrganizationInput,
21 type RemoveOrganizationInput,34 type RemoveOrganizationInput,
packages/control-plane/src/api/local/http.ts+3−3
@@ -2,7 +2,7 @@ import { HttpApiBuilder, HttpServerRequest } from "@effect/platform"; · 1 unmodified line
2import * as Effect from "effect/Effect";2import * as Effect from "effect/Effect";
3 3
4import { ControlPlaneApi } from "../api";4import { ControlPlaneApi } from "../api";
5import { ControlPlaneService } from "../service";5import { ControlPlaneLocalService } from "../service";
6 6
7export const ControlPlaneLocalLive = HttpApiBuilder.group(7export const ControlPlaneLocalLive = HttpApiBuilder.group(
8 ControlPlaneApi,8 ControlPlaneApi,
@@ -11,13 +11,13 @@ export const ControlPlaneLocalLive = HttpApiBuilder.group( · 2 unmodified lines
11 handlers11 handlers
12 .handle("installation", () =>12 .handle("installation", () =>
13 Effect.gen(function* () {13 Effect.gen(function* () {
14 const service = yield* ControlPlaneService;14 const service = yield* ControlPlaneLocalService;
15 return yield* service.getLocalInstallation();15 return yield* service.getLocalInstallation();
16 }),16 }),
17 )17 )
18 .handle("oauthCallback", () =>18 .handle("oauthCallback", () =>
19 Effect.gen(function* () {19 Effect.gen(function* () {
20 const service = yield* ControlPlaneService;20 const service = yield* ControlPlaneLocalService;
21 const request = yield* HttpServerRequest.HttpServerRequest;21 const request = yield* HttpServerRequest.HttpServerRequest;
22 const requestUrl = new URL(request.url, "http://127.0.0.1");22 const requestUrl = new URL(request.url, "http://127.0.0.1");
23 23
packages/control-plane/src/api/memberships/http.ts+5−5
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlaneMembershipsService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -63,7 +63,7 @@ export const ControlPlaneMembershipsLive = HttpApiBuilder.group( · 40 unmodified lines
63 handlers63 handlers
64 .handle("list", ({ path }) =>64 .handle("list", ({ path }) =>
65 Effect.gen(function* () {65 Effect.gen(function* () {
66 const service = yield* ControlPlaneService;66 const service = yield* ControlPlaneMembershipsService;
67 const actor = yield* resolveActor;67 const actor = yield* resolveActor;
68 68
69 return yield* withPolicy(requireReadMemberships(path.organizationId))(69 return yield* withPolicy(requireReadMemberships(path.organizationId))(
@@ -80,7 +80,7 @@ export const ControlPlaneMembershipsLive = HttpApiBuilder.group( · 10 unmodified lines
80 )80 )
81 .handle("create", ({ path, payload }) =>81 .handle("create", ({ path, payload }) =>
82 Effect.gen(function* () {82 Effect.gen(function* () {
83 const service = yield* ControlPlaneService;83 const service = yield* ControlPlaneMembershipsService;
84 const actor = yield* resolveActor;84 const actor = yield* resolveActor;
85 85
86 return yield* withPolicy(requireWriteMemberships(path.organizationId))(86 return yield* withPolicy(requireWriteMemberships(path.organizationId))(
@@ -97,7 +97,7 @@ export const ControlPlaneMembershipsLive = HttpApiBuilder.group( · 10 unmodified lines
97 )97 )
98 .handle("update", ({ path, payload }) =>98 .handle("update", ({ path, payload }) =>
99 Effect.gen(function* () {99 Effect.gen(function* () {
100 const service = yield* ControlPlaneService;100 const service = yield* ControlPlaneMembershipsService;
101 const actor = yield* resolveActor;101 const actor = yield* resolveActor;
102 102
103 return yield* withPolicy(requireWriteMemberships(path.organizationId))(103 return yield* withPolicy(requireWriteMemberships(path.organizationId))(
@@ -118,7 +118,7 @@ export const ControlPlaneMembershipsLive = HttpApiBuilder.group( · 14 unmodified lines
118 )118 )
119 .handle("remove", ({ path }) =>119 .handle("remove", ({ path }) =>
120 Effect.gen(function* () {120 Effect.gen(function* () {
121 const service = yield* ControlPlaneService;121 const service = yield* ControlPlaneMembershipsService;
122 const actor = yield* resolveActor;122 const actor = yield* resolveActor;
123 123
124 return yield* withPolicy(requireWriteMemberships(path.organizationId))(124 return yield* withPolicy(requireWriteMemberships(path.organizationId))(
packages/control-plane/src/api/organizations/http.ts+6−6
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlaneOrganizationsService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -61,7 +61,7 @@ export const ControlPlaneOrganizationsLive = HttpApiBuilder.group( · 38 unmodified lines
61 handlers61 handlers
62 .handle("list", () =>62 .handle("list", () =>
63 Effect.gen(function* () {63 Effect.gen(function* () {
64 const service = yield* ControlPlaneService;64 const service = yield* ControlPlaneOrganizationsService;
65 const actor = yield* resolveActor;65 const actor = yield* resolveActor;
66 66
67 return yield* withPolicy(requireReadOrganizations)(67 return yield* withPolicy(requireReadOrganizations)(
@@ -80,7 +80,7 @@ export const ControlPlaneOrganizationsLive = HttpApiBuilder.group( · 12 unmodified lines
80 )80 )
81 .handle("create", ({ payload }) =>81 .handle("create", ({ payload }) =>
82 Effect.gen(function* () {82 Effect.gen(function* () {
83 const service = yield* ControlPlaneService;83 const service = yield* ControlPlaneOrganizationsService;
84 const actor = yield* resolveActor;84 const actor = yield* resolveActor;
85 85
86 return yield* service.createOrganization({86 return yield* service.createOrganization({
@@ -95,7 +95,7 @@ export const ControlPlaneOrganizationsLive = HttpApiBuilder.group( · 8 unmodified lines
95 )95 )
96 .handle("get", ({ path }) =>96 .handle("get", ({ path }) =>
97 Effect.gen(function* () {97 Effect.gen(function* () {
98 const service = yield* ControlPlaneService;98 const service = yield* ControlPlaneOrganizationsService;
99 const actor = yield* resolveActor;99 const actor = yield* resolveActor;
100 100
101 return yield* withPolicy(requireReadOrganizations)(101 return yield* withPolicy(requireReadOrganizations)(
@@ -115,7 +115,7 @@ export const ControlPlaneOrganizationsLive = HttpApiBuilder.group( · 13 unmodified lines
115 )115 )
116 .handle("update", ({ path, payload }) =>116 .handle("update", ({ path, payload }) =>
117 Effect.gen(function* () {117 Effect.gen(function* () {
118 const service = yield* ControlPlaneService;118 const service = yield* ControlPlaneOrganizationsService;
119 const actor = yield* resolveActor;119 const actor = yield* resolveActor;
120 120
121 return yield* withPolicy(requireManageOrganizations(path.organizationId))(121 return yield* withPolicy(requireManageOrganizations(path.organizationId))(
@@ -135,7 +135,7 @@ export const ControlPlaneOrganizationsLive = HttpApiBuilder.group( · 13 unmodified lines
135 )135 )
136 .handle("remove", ({ path }) =>136 .handle("remove", ({ path }) =>
137 Effect.gen(function* () {137 Effect.gen(function* () {
138 const service = yield* ControlPlaneService;138 const service = yield* ControlPlaneOrganizationsService;
139 const actor = yield* resolveActor;139 const actor = yield* resolveActor;
140 140
141 return yield* withPolicy(requireManageOrganizations(path.organizationId))(141 return yield* withPolicy(requireManageOrganizations(path.organizationId))(
packages/control-plane/src/api/policies/http.ts+6−6
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlanePoliciesService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -65,7 +65,7 @@ export const ControlPlanePoliciesLive = HttpApiBuilder.group( · 42 unmodified lines
65 handlers65 handlers
66 .handle("list", ({ path }) =>66 .handle("list", ({ path }) =>
67 Effect.gen(function* () {67 Effect.gen(function* () {
68 const service = yield* ControlPlaneService;68 const service = yield* ControlPlanePoliciesService;
69 const actor = yield* resolveWorkspaceActor(path.workspaceId);69 const actor = yield* resolveWorkspaceActor(path.workspaceId);
70 70
71 return yield* withPolicy(requireReadPolicies(path.workspaceId))(71 return yield* withPolicy(requireReadPolicies(path.workspaceId))(
@@ -82,7 +82,7 @@ export const ControlPlanePoliciesLive = HttpApiBuilder.group( · 10 unmodified lines
82 )82 )
83 .handle("create", ({ path, payload }) =>83 .handle("create", ({ path, payload }) =>
84 Effect.gen(function* () {84 Effect.gen(function* () {
85 const service = yield* ControlPlaneService;85 const service = yield* ControlPlanePoliciesService;
86 const actor = yield* resolveWorkspaceActor(path.workspaceId);86 const actor = yield* resolveWorkspaceActor(path.workspaceId);
87 87
88 return yield* withPolicy(requireWritePolicies(path.workspaceId))(88 return yield* withPolicy(requireWritePolicies(path.workspaceId))(
@@ -99,7 +99,7 @@ export const ControlPlanePoliciesLive = HttpApiBuilder.group( · 10 unmodified lines
99 )99 )
100 .handle("get", ({ path }) =>100 .handle("get", ({ path }) =>
101 Effect.gen(function* () {101 Effect.gen(function* () {
102 const service = yield* ControlPlaneService;102 const service = yield* ControlPlanePoliciesService;
103 const actor = yield* resolveWorkspaceActor(path.workspaceId);103 const actor = yield* resolveWorkspaceActor(path.workspaceId);
104 104
105 return yield* withPolicy(requireReadPolicies(path.workspaceId))(105 return yield* withPolicy(requireReadPolicies(path.workspaceId))(
@@ -119,7 +119,7 @@ export const ControlPlanePoliciesLive = HttpApiBuilder.group( · 13 unmodified lines
119 )119 )
120 .handle("update", ({ path, payload }) =>120 .handle("update", ({ path, payload }) =>
121 Effect.gen(function* () {121 Effect.gen(function* () {
122 const service = yield* ControlPlaneService;122 const service = yield* ControlPlanePoliciesService;
123 const actor = yield* resolveWorkspaceActor(path.workspaceId);123 const actor = yield* resolveWorkspaceActor(path.workspaceId);
124 124
125 return yield* withPolicy(requireWritePolicies(path.workspaceId))(125 return yield* withPolicy(requireWritePolicies(path.workspaceId))(
@@ -140,7 +140,7 @@ export const ControlPlanePoliciesLive = HttpApiBuilder.group( · 14 unmodified lines
140 )140 )
141 .handle("remove", ({ path }) =>141 .handle("remove", ({ path }) =>
142 Effect.gen(function* () {142 Effect.gen(function* () {
143 const service = yield* ControlPlaneService;143 const service = yield* ControlPlanePoliciesService;
144 const actor = yield* resolveWorkspaceActor(path.workspaceId);144 const actor = yield* resolveWorkspaceActor(path.workspaceId);
145 145
146 return yield* withPolicy(requireWritePolicies(path.workspaceId))(146 return yield* withPolicy(requireWritePolicies(path.workspaceId))(
packages/control-plane/src/api/service.ts+56−4
@@ -158,7 +158,7 @@ export type RemovePolicyInput = { · 157 unmodified lines
158 policyId: PolicyId;158 policyId: PolicyId;
159};159};
160 160
161export type ControlPlaneServiceShape = {161export type ControlPlaneOrganizationsServiceShape = {
162 listOrganizations: (input: {162 listOrganizations: (input: {
163 accountId: AccountId;163 accountId: AccountId;
164 }) => Effect.Effect<ReadonlyArray<Organization>, ControlPlaneStorageError>;164 }) => Effect.Effect<ReadonlyArray<Organization>, ControlPlaneStorageError>;
@@ -178,7 +178,9 @@ export type ControlPlaneServiceShape = { · 13 unmodified lines
178 removeOrganization: (178 removeOrganization: (
179 input: RemoveOrganizationInput,179 input: RemoveOrganizationInput,
180 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;180 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;
181};
181 182
183export type ControlPlaneMembershipsServiceShape = {
182 listMemberships: (184 listMemberships: (
183 organizationId: OrganizationId,185 organizationId: OrganizationId,
184 ) => Effect.Effect<186 ) => Effect.Effect<
@@ -200,7 +202,9 @@ export type ControlPlaneServiceShape = { · 15 unmodified lines
200 removeMembership: (202 removeMembership: (
201 input: RemoveMembershipInput,203 input: RemoveMembershipInput,
202 ) => Effect.Effect<{ removed: boolean }, ControlPlaneNotFoundError | ControlPlaneStorageError>;204 ) => Effect.Effect<{ removed: boolean }, ControlPlaneNotFoundError | ControlPlaneStorageError>;
205};
203 206
207export type ControlPlaneWorkspacesServiceShape = {
204 listWorkspaces: (208 listWorkspaces: (
205 organizationId: OrganizationId,209 organizationId: OrganizationId,
206 ) => Effect.Effect<ReadonlyArray<Workspace>, ControlPlaneNotFoundError | ControlPlaneStorageError>;210 ) => Effect.Effect<ReadonlyArray<Workspace>, ControlPlaneNotFoundError | ControlPlaneStorageError>;
@@ -222,7 +226,9 @@ export type ControlPlaneServiceShape = { · 15 unmodified lines
222 removeWorkspace: (226 removeWorkspace: (
223 input: RemoveWorkspaceInput,227 input: RemoveWorkspaceInput,
224 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;228 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;
229};
225 230
231export type ControlPlaneSourcesServiceShape = {
226 listSources: (232 listSources: (
227 workspaceId: WorkspaceId,233 workspaceId: WorkspaceId,
228 ) => Effect.Effect<ReadonlyArray<Source>, ControlPlaneStorageError>;234 ) => Effect.Effect<ReadonlyArray<Source>, ControlPlaneStorageError>;
@@ -241,7 +247,9 @@ export type ControlPlaneServiceShape = { · 12 unmodified lines
241 removeSource: (247 removeSource: (
242 input: RemoveSourceInput,248 input: RemoveSourceInput,
243 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;249 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;
250};
244 251
252export type ControlPlaneExecutionsServiceShape = {
245 createExecution: (253 createExecution: (
246 input: CreateExecutionInput,254 input: CreateExecutionInput,
247 ) => Effect.Effect<255 ) => Effect.Effect<
@@ -257,7 +265,9 @@ export type ControlPlaneServiceShape = { · 9 unmodified lines
257 ExecutionEnvelope,265 ExecutionEnvelope,
258 ControlPlaneBadRequestError | ControlPlaneNotFoundError | ControlPlaneStorageError266 ControlPlaneBadRequestError | ControlPlaneNotFoundError | ControlPlaneStorageError
259 >;267 >;
268};
260 269
270export type ControlPlaneLocalServiceShape = {
261 getLocalInstallation: () => Effect.Effect<271 getLocalInstallation: () => Effect.Effect<
262 LocalInstallation,272 LocalInstallation,
263 ControlPlaneNotFoundError | ControlPlaneStorageError273 ControlPlaneNotFoundError | ControlPlaneStorageError
@@ -265,7 +275,9 @@ export type ControlPlaneServiceShape = { · 1 unmodified line
265 completeSourceAuthCallback: (275 completeSourceAuthCallback: (
266 input: CompleteSourceAuthCallbackInput,276 input: CompleteSourceAuthCallbackInput,
267 ) => Effect.Effect<Source, ControlPlaneBadRequestError | ControlPlaneNotFoundError | ControlPlaneStorageError>;277 ) => Effect.Effect<Source, ControlPlaneBadRequestError | ControlPlaneNotFoundError | ControlPlaneStorageError>;
278};
268 279
280export type ControlPlanePoliciesServiceShape = {
269 listPolicies: (281 listPolicies: (
270 workspaceId: WorkspaceId,282 workspaceId: WorkspaceId,
271 ) => Effect.Effect<ReadonlyArray<Policy>, ControlPlaneStorageError>;283 ) => Effect.Effect<ReadonlyArray<Policy>, ControlPlaneStorageError>;
@@ -286,6 +298,46 @@ export type ControlPlaneServiceShape = { · 14 unmodified lines
286 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;298 ) => Effect.Effect<{ removed: boolean }, ControlPlaneStorageError>;
287};299};
288 300
289export class ControlPlaneService extends Context.Tag(301export class ControlPlaneOrganizationsService extends Context.Tag(
290 "#api/ControlPlaneService",302 "#api/ControlPlaneOrganizationsService",
291)<ControlPlaneService, ControlPlaneServiceShape>() {}303)<ControlPlaneOrganizationsService, ControlPlaneOrganizationsServiceShape>() {
304}
305
306export class ControlPlaneMembershipsService extends Context.Tag(
307 "#api/ControlPlaneMembershipsService",
308)<ControlPlaneMembershipsService, ControlPlaneMembershipsServiceShape>() {
309}
310
311export class ControlPlaneWorkspacesService extends Context.Tag(
312 "#api/ControlPlaneWorkspacesService",
313)<ControlPlaneWorkspacesService, ControlPlaneWorkspacesServiceShape>() {
314}
315
316export class ControlPlaneSourcesService extends Context.Tag(
317 "#api/ControlPlaneSourcesService",
318)<ControlPlaneSourcesService, ControlPlaneSourcesServiceShape>() {
319}
320
321export class ControlPlaneExecutionsService extends Context.Tag(
322 "#api/ControlPlaneExecutionsService",
323)<ControlPlaneExecutionsService, ControlPlaneExecutionsServiceShape>() {
324}
325
326export class ControlPlaneLocalService extends Context.Tag(
327 "#api/ControlPlaneLocalService",
328)<ControlPlaneLocalService, ControlPlaneLocalServiceShape>() {
329}
330
331export class ControlPlanePoliciesService extends Context.Tag(
332 "#api/ControlPlanePoliciesService",
333)<ControlPlanePoliciesService, ControlPlanePoliciesServiceShape>() {
334}
335
336export type ControlPlaneApiServiceContext =
337 | ControlPlaneOrganizationsService
338 | ControlPlaneMembershipsService
339 | ControlPlaneWorkspacesService
340 | ControlPlaneSourcesService
341 | ControlPlaneExecutionsService
342 | ControlPlaneLocalService
343 | ControlPlanePoliciesService;
packages/control-plane/src/api/sources/http.ts+6−6
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlaneSourcesService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -65,7 +65,7 @@ export const ControlPlaneSourcesLive = HttpApiBuilder.group( · 42 unmodified lines
65 handlers65 handlers
66 .handle("list", ({ path }) =>66 .handle("list", ({ path }) =>
67 Effect.gen(function* () {67 Effect.gen(function* () {
68 const service = yield* ControlPlaneService;68 const service = yield* ControlPlaneSourcesService;
69 const actor = yield* resolveWorkspaceActor(path.workspaceId);69 const actor = yield* resolveWorkspaceActor(path.workspaceId);
70 70
71 return yield* withPolicy(requireReadSources(path.workspaceId))(71 return yield* withPolicy(requireReadSources(path.workspaceId))(
@@ -82,7 +82,7 @@ export const ControlPlaneSourcesLive = HttpApiBuilder.group( · 10 unmodified lines
82 )82 )
83 .handle("create", ({ path, payload }) =>83 .handle("create", ({ path, payload }) =>
84 Effect.gen(function* () {84 Effect.gen(function* () {
85 const service = yield* ControlPlaneService;85 const service = yield* ControlPlaneSourcesService;
86 const actor = yield* resolveWorkspaceActor(path.workspaceId);86 const actor = yield* resolveWorkspaceActor(path.workspaceId);
87 87
88 return yield* withPolicy(requireWriteSources(path.workspaceId))(88 return yield* withPolicy(requireWriteSources(path.workspaceId))(
@@ -99,7 +99,7 @@ export const ControlPlaneSourcesLive = HttpApiBuilder.group( · 10 unmodified lines
99 )99 )
100 .handle("get", ({ path }) =>100 .handle("get", ({ path }) =>
101 Effect.gen(function* () {101 Effect.gen(function* () {
102 const service = yield* ControlPlaneService;102 const service = yield* ControlPlaneSourcesService;
103 const actor = yield* resolveWorkspaceActor(path.workspaceId);103 const actor = yield* resolveWorkspaceActor(path.workspaceId);
104 104
105 return yield* withPolicy(requireReadSources(path.workspaceId))(105 return yield* withPolicy(requireReadSources(path.workspaceId))(
@@ -119,7 +119,7 @@ export const ControlPlaneSourcesLive = HttpApiBuilder.group( · 13 unmodified lines
119 )119 )
120 .handle("update", ({ path, payload }) =>120 .handle("update", ({ path, payload }) =>
121 Effect.gen(function* () {121 Effect.gen(function* () {
122 const service = yield* ControlPlaneService;122 const service = yield* ControlPlaneSourcesService;
123 const actor = yield* resolveWorkspaceActor(path.workspaceId);123 const actor = yield* resolveWorkspaceActor(path.workspaceId);
124 124
125 return yield* withPolicy(requireWriteSources(path.workspaceId))(125 return yield* withPolicy(requireWriteSources(path.workspaceId))(
@@ -140,7 +140,7 @@ export const ControlPlaneSourcesLive = HttpApiBuilder.group( · 14 unmodified lines
140 )140 )
141 .handle("remove", ({ path }) =>141 .handle("remove", ({ path }) =>
142 Effect.gen(function* () {142 Effect.gen(function* () {
143 const service = yield* ControlPlaneService;143 const service = yield* ControlPlaneSourcesService;
144 const actor = yield* resolveWorkspaceActor(path.workspaceId);144 const actor = yield* resolveWorkspaceActor(path.workspaceId);
145 145
146 return yield* withPolicy(requireWriteSources(path.workspaceId))(146 return yield* withPolicy(requireWriteSources(path.workspaceId))(
packages/control-plane/src/api/workspaces/http.ts+6−6
@@ -16,7 +16,7 @@ import { · 15 unmodified lines
16 ControlPlaneForbiddenError,16 ControlPlaneForbiddenError,
17 ControlPlaneUnauthorizedError,17 ControlPlaneUnauthorizedError,
18} from "../errors";18} from "../errors";
19import { ControlPlaneService } from "../service";19import { ControlPlaneWorkspacesService } from "../service";
20 20
21const toForbiddenError = (21const toForbiddenError = (
22 operation: string,22 operation: string,
@@ -83,7 +83,7 @@ export const ControlPlaneWorkspacesLive = HttpApiBuilder.group( · 60 unmodified lines
83 handlers83 handlers
84 .handle("list", ({ path }) =>84 .handle("list", ({ path }) =>
85 Effect.gen(function* () {85 Effect.gen(function* () {
86 const service = yield* ControlPlaneService;86 const service = yield* ControlPlaneWorkspacesService;
87 const actor = yield* resolveActor;87 const actor = yield* resolveActor;
88 88
89 return yield* withPolicy(89 return yield* withPolicy(
@@ -102,7 +102,7 @@ export const ControlPlaneWorkspacesLive = HttpApiBuilder.group( · 12 unmodified lines
102 )102 )
103 .handle("create", ({ path, payload }) =>103 .handle("create", ({ path, payload }) =>
104 Effect.gen(function* () {104 Effect.gen(function* () {
105 const service = yield* ControlPlaneService;105 const service = yield* ControlPlaneWorkspacesService;
106 const actor = yield* resolveActor;106 const actor = yield* resolveActor;
107 107
108 return yield* withPolicy(108 return yield* withPolicy(
@@ -125,7 +125,7 @@ export const ControlPlaneWorkspacesLive = HttpApiBuilder.group( · 16 unmodified lines
125 )125 )
126 .handle("get", ({ path }) =>126 .handle("get", ({ path }) =>
127 Effect.gen(function* () {127 Effect.gen(function* () {
128 const service = yield* ControlPlaneService;128 const service = yield* ControlPlaneWorkspacesService;
129 const actor = yield* resolveWorkspaceActor(path.workspaceId);129 const actor = yield* resolveWorkspaceActor(path.workspaceId);
130 130
131 return yield* withPolicy(requireReadWorkspace(path.workspaceId))(131 return yield* withPolicy(requireReadWorkspace(path.workspaceId))(
@@ -142,7 +142,7 @@ export const ControlPlaneWorkspacesLive = HttpApiBuilder.group( · 10 unmodified lines
142 )142 )
143 .handle("update", ({ path, payload }) =>143 .handle("update", ({ path, payload }) =>
144 Effect.gen(function* () {144 Effect.gen(function* () {
145 const service = yield* ControlPlaneService;145 const service = yield* ControlPlaneWorkspacesService;
146 const actor = yield* resolveWorkspaceActor(path.workspaceId);146 const actor = yield* resolveWorkspaceActor(path.workspaceId);
147 147
148 return yield* withPolicy(requireManageWorkspace(path.workspaceId))(148 return yield* withPolicy(requireManageWorkspace(path.workspaceId))(
@@ -159,7 +159,7 @@ export const ControlPlaneWorkspacesLive = HttpApiBuilder.group( · 10 unmodified lines
159 )159 )
160 .handle("remove", ({ path }) =>160 .handle("remove", ({ path }) =>
161 Effect.gen(function* () {161 Effect.gen(function* () {
162 const service = yield* ControlPlaneService;162 const service = yield* ControlPlaneWorkspacesService;
163 const actor = yield* resolveWorkspaceActor(path.workspaceId);163 const actor = yield* resolveWorkspaceActor(path.workspaceId);
164 164
165 return yield* withPolicy(requireManageWorkspace(path.workspaceId))(165 return yield* withPolicy(requireManageWorkspace(path.workspaceId))(
packages/control-plane/src/runtime/control-plane-runtime.test.ts+1−6
@@ -1,7 +1,7 @@
1import { describe, expect, it } from "@effect/vitest";1import { describe, expect, it } from "@effect/vitest";
2import * as Effect from "effect/Effect";2import * as Effect from "effect/Effect";
3 3
4import { WorkspaceIdSchema, type AccountId } from "#schema";4import type { AccountId } from "#schema";
5 5
6import { createSqlControlPlaneRuntime } from "./index";6import { createSqlControlPlaneRuntime } from "./index";
7import { withControlPlaneClient } from "./test-http-client";7import { withControlPlaneClient } from "./test-http-client";
@@ -314,11 +314,6 @@ describe("control-plane-runtime", () => { · 306 unmodified lines
314 );314 );
315 expect(deleteOrg.removed).toBe(true);315 expect(deleteOrg.removed).toBe(true);
316 316
317 const deletedWorkspaceLookup = yield* Effect.either(
318 runtime.service.getWorkspace(WorkspaceIdSchema.make(workspace.id)),
319 );
320 expect(deletedWorkspaceLookup._tag).toBe("Left");
321
322 const listStaleWorkspacesError = yield* expectLeft(317 const listStaleWorkspacesError = yield* expectLeft(
323 withControlPlaneClient(318 withControlPlaneClient(
324 { runtime, accountId: "acc_del" },319 { runtime, accountId: "acc_del" },
packages/control-plane/src/runtime/execution-service.ts+5−18
@@ -1,4 +1,4 @@
1import type { ControlPlaneServiceShape } from "#api";1import type { ControlPlaneExecutionsServiceShape } from "#api";
2import {2import {
3 ControlPlaneBadRequestError,3 ControlPlaneBadRequestError,
4 ControlPlaneNotFoundError,4 ControlPlaneNotFoundError,
@@ -24,7 +24,6 @@ import { · 19 unmodified lines
24 ResumeUnsupportedError,24 ResumeUnsupportedError,
25} from "./execution-state";25} from "./execution-state";
26import {26import {
27 createLiveExecutionManager,
28 type LiveExecutionManager,27 type LiveExecutionManager,
29} from "./live-execution";28} from "./live-execution";
30 29
@@ -107,13 +106,6 @@ const ElicitationResponseSchema = Schema.Struct({ · 76 unmodified lines
107 106
108const decodeElicitationResponse = Schema.decodeUnknown(ElicitationResponseSchema);107const decodeElicitationResponse = Schema.decodeUnknown(ElicitationResponseSchema);
109 108
110const defaultExecutionResolver: ResolveExecutionEnvironment = () =>
111 Effect.fail(
112 new Error("Execution environment resolver is not configured"),
113 );
114
115const defaultLiveExecutionManager = createLiveExecutionManager();
116
117const withExecutionInvocationContext = (input: {109const withExecutionInvocationContext = (input: {
118 executionId: Execution["id"];110 executionId: Execution["id"];
119 toolInvoker: ToolInvoker;111 toolInvoker: ToolInvoker;
@@ -190,15 +182,10 @@ const fetchExecutionEnvelope = ( · 70 unmodified lines
190 182
191export const createRuntimeExecutionsService = (183export const createRuntimeExecutionsService = (
192 rows: SqlControlPlaneRows,184 rows: SqlControlPlaneRows,
193 executionResolver: ResolveExecutionEnvironment = defaultExecutionResolver,185 executionResolver: ResolveExecutionEnvironment,
194 liveExecutionManager: LiveExecutionManager = defaultLiveExecutionManager,186 liveExecutionManager: LiveExecutionManager,
195): Pick<187): ControlPlaneExecutionsServiceShape => {
196 ControlPlaneServiceShape,188 const createExecution: ControlPlaneExecutionsServiceShape["createExecution"] = (
197 | "createExecution"
198 | "getExecution"
199 | "resumeExecution"
200> => {
201 const createExecution: ControlPlaneServiceShape["createExecution"] = (
202 { workspaceId, payload, createdByAccountId },189 { workspaceId, payload, createdByAccountId },
203 ) =>190 ) =>
204 Effect.gen(function* () {191 Effect.gen(function* () {
packages/control-plane/src/runtime/index.ts+75−14
@@ -5,10 +5,23 @@ import * as Layer from "effect/Layer"; · 4 unmodified lines
5import * as Scope from "effect/Scope";5import * as Scope from "effect/Scope";
6 6
7import {7import {
8 type ControlPlaneApiServiceContext,
8 ControlPlaneActorResolver,9 ControlPlaneActorResolver,
9 type ControlPlaneActorResolverShape,10 type ControlPlaneActorResolverShape,
10 ControlPlaneService,11 ControlPlaneExecutionsService,
11 type ControlPlaneServiceShape,12 type ControlPlaneExecutionsServiceShape,
13 ControlPlaneLocalService,
14 type ControlPlaneLocalServiceShape,
15 ControlPlaneMembershipsService,
16 type ControlPlaneMembershipsServiceShape,
17 ControlPlaneOrganizationsService,
18 type ControlPlaneOrganizationsServiceShape,
19 ControlPlanePoliciesService,
20 type ControlPlanePoliciesServiceShape,
21 ControlPlaneSourcesService,
22 type ControlPlaneSourcesServiceShape,
23 ControlPlaneWorkspacesService,
24 type ControlPlaneWorkspacesServiceShape,
12} from "#api";25} from "#api";
13import {26import {
14 SqlControlPlanePersistenceLive,27 SqlControlPlanePersistenceLive,
@@ -39,8 +52,7 @@ import { · 24 unmodified lines
39 type ResolveSecretMaterial,52 type ResolveSecretMaterial,
40} from "./source-auth-service";53} from "./source-auth-service";
41import {54import {
42 RuntimeControlPlaneServiceLive,55 RuntimeControlPlaneApiServicesLive,
43 createRuntimeControlPlaneService,
44} from "./services";56} from "./services";
45import {57import {
46 RuntimeExecutionResolverLive,58 RuntimeExecutionResolverLive,
@@ -49,7 +61,6 @@ import { · 2 unmodified lines
49export {61export {
50 ControlPlaneAuthHeaders,62 ControlPlaneAuthHeaders,
51 createHeaderActorResolver,63 createHeaderActorResolver,
52 createRuntimeControlPlaneService,
53};64};
54 65
55export * from "./execution-state";66export * from "./execution-state";
@@ -85,6 +96,25 @@ const toLocalInstallationBootstrapError = ( · 29 unmodified lines
85const closeScope = (scope: Scope.CloseableScope) =>96const closeScope = (scope: Scope.CloseableScope) =>
86 Scope.close(scope, Exit.void).pipe(Effect.orDie);97 Scope.close(scope, Exit.void).pipe(Effect.orDie);
87 98
99const createRuntimeServicesLayer = (input: {
100 organizationsService: ControlPlaneOrganizationsServiceShape;
101 membershipsService: ControlPlaneMembershipsServiceShape;
102 workspacesService: ControlPlaneWorkspacesServiceShape;
103 sourcesService: ControlPlaneSourcesServiceShape;
104 policiesService: ControlPlanePoliciesServiceShape;
105 localService: ControlPlaneLocalServiceShape;
106 executionsService: ControlPlaneExecutionsServiceShape;
107}): Layer.Layer<ControlPlaneApiServiceContext, never, never> =>
108 Layer.mergeAll(
109 Layer.succeed(ControlPlaneOrganizationsService, input.organizationsService),
110 Layer.succeed(ControlPlaneMembershipsService, input.membershipsService),
111 Layer.succeed(ControlPlaneWorkspacesService, input.workspacesService),
112 Layer.succeed(ControlPlaneSourcesService, input.sourcesService),
113 Layer.succeed(ControlPlanePoliciesService, input.policiesService),
114 Layer.succeed(ControlPlaneLocalService, input.localService),
115 Layer.succeed(ControlPlaneExecutionsService, input.executionsService),
116 );
117
88export const createRuntimeControlPlaneLayer = (118export const createRuntimeControlPlaneLayer = (
89 options: RuntimeControlPlaneOptions = {},119 options: RuntimeControlPlaneOptions = {},
90) => {120) => {
@@ -105,11 +135,12 @@ export const createRuntimeControlPlaneLayer = ( · 14 unmodified lines
105 sourceAuthLayer,135 sourceAuthLayer,
106 executionResolverLayer,136 executionResolverLayer,
107 );137 );
138 const apiServicesLayer = RuntimeControlPlaneApiServicesLive.pipe(
139 Layer.provide(runtimeDependenciesLayer),
140 );
108 141
109 return Layer.mergeAll(142 return Layer.mergeAll(
110 RuntimeControlPlaneServiceLive.pipe(143 apiServicesLayer,
111 Layer.provide(runtimeDependenciesLayer),
112 ),
113 RuntimeActorResolverLive(options.actorResolver),144 RuntimeActorResolverLive(options.actorResolver),
114 runtimeDependenciesLayer,145 runtimeDependenciesLayer,
115 );146 );
@@ -118,15 +149,30 @@ export const createRuntimeControlPlaneLayer = ( · 2 unmodified lines
118export const createRuntimeControlPlane = (149export const createRuntimeControlPlane = (
119 input: RuntimeControlPlaneInput,150 input: RuntimeControlPlaneInput,
120): Effect.Effect<{151): Effect.Effect<{
121 service: ControlPlaneServiceShape;152 serviceLayer: Layer.Layer<ControlPlaneApiServiceContext, never, never>;
122 actorResolver: ControlPlaneActorResolverShape;153 actorResolver: ControlPlaneActorResolverShape;
123}> =>154}> =>
124 Effect.gen(function* () {155 Effect.gen(function* () {
125 const service = yield* ControlPlaneService;
126 const actorResolver = yield* ControlPlaneActorResolver;156 const actorResolver = yield* ControlPlaneActorResolver;
157 const organizationsService = yield* ControlPlaneOrganizationsService;
158 const membershipsService = yield* ControlPlaneMembershipsService;
159 const workspacesService = yield* ControlPlaneWorkspacesService;
160 const sourcesService = yield* ControlPlaneSourcesService;
161 const policiesService = yield* ControlPlanePoliciesService;
162 const localService = yield* ControlPlaneLocalService;
163 const executionsService = yield* ControlPlaneExecutionsService;
164 const serviceLayer = createRuntimeServicesLayer({
165 organizationsService,
166 membershipsService,
167 workspacesService,
168 sourcesService,
169 policiesService,
170 localService,
171 executionsService,
172 });
127 173
128 return {174 return {
129 service,175 serviceLayer,
130 actorResolver,176 actorResolver,
131 };177 };
132 }).pipe(178 }).pipe(
@@ -143,7 +189,7 @@ export const createRuntimeControlPlane = ( · 10 unmodified lines
143export type SqlControlPlaneRuntime = {189export type SqlControlPlaneRuntime = {
144 persistence: SqlControlPlanePersistence;190 persistence: SqlControlPlanePersistence;
145 localInstallation: LocalInstallation;191 localInstallation: LocalInstallation;
146 service: ControlPlaneServiceShape;192 serviceLayer: Layer.Layer<ControlPlaneApiServiceContext, never, never>;
147 actorResolver: ControlPlaneActorResolverShape;193 actorResolver: ControlPlaneActorResolverShape;
148 close: () => Promise<void>;194 close: () => Promise<void>;
149};195};
@@ -171,8 +217,23 @@ export const createSqlControlPlaneRuntime = ( · 21 unmodified lines
171 );217 );
172 218
173 const persistence = Context.get(context, SqlControlPlanePersistenceService);219 const persistence = Context.get(context, SqlControlPlanePersistenceService);
174 const service = Context.get(context, ControlPlaneService);
175 const actorResolver = Context.get(context, ControlPlaneActorResolver);220 const actorResolver = Context.get(context, ControlPlaneActorResolver);
221 const organizationsService = Context.get(context, ControlPlaneOrganizationsService);
222 const membershipsService = Context.get(context, ControlPlaneMembershipsService);
223 const workspacesService = Context.get(context, ControlPlaneWorkspacesService);
224 const sourcesService = Context.get(context, ControlPlaneSourcesService);
225 const policiesService = Context.get(context, ControlPlanePoliciesService);
226 const localService = Context.get(context, ControlPlaneLocalService);
227 const executionsService = Context.get(context, ControlPlaneExecutionsService);
228 const serviceLayer = createRuntimeServicesLayer({
229 organizationsService,
230 membershipsService,
231 workspacesService,
232 sourcesService,
233 policiesService,
234 localService,
235 executionsService,
236 });
176 237
177 const localInstallation = yield* getOrProvisionLocalInstallation(238 const localInstallation = yield* getOrProvisionLocalInstallation(
178 persistence.rows,239 persistence.rows,
@@ -187,7 +248,7 @@ export const createSqlControlPlaneRuntime = ( · 8 unmodified lines
187 return {248 return {
188 persistence,249 persistence,
189 localInstallation,250 localInstallation,
190 service,251 serviceLayer,
191 actorResolver,252 actorResolver,
192 close: () => Effect.runPromise(Scope.close(scope, Exit.void)),253 close: () => Effect.runPromise(Scope.close(scope, Exit.void)),
193 };254 };
packages/control-plane/src/runtime/services.ts+71−86
@@ -1,6 +1,18 @@
1import {1import {
2 ControlPlaneService,2 ControlPlaneExecutionsService,
3 type ControlPlaneServiceShape,3 type ControlPlaneExecutionsServiceShape,
4 ControlPlaneLocalService,
5 type ControlPlaneLocalServiceShape,
6 ControlPlaneMembershipsService,
7 type ControlPlaneMembershipsServiceShape,
8 ControlPlaneOrganizationsService,
9 type ControlPlaneOrganizationsServiceShape,
10 ControlPlanePoliciesService,
11 type ControlPlanePoliciesServiceShape,
12 ControlPlaneSourcesService,
13 type ControlPlaneSourcesServiceShape,
14 ControlPlaneWorkspacesService,
15 type ControlPlaneWorkspacesServiceShape,
4 ControlPlaneBadRequestError,16 ControlPlaneBadRequestError,
5 ControlPlaneNotFoundError,17 ControlPlaneNotFoundError,
6 ControlPlaneStorageError,18 ControlPlaneStorageError,
@@ -30,10 +42,8 @@ import * as Effect from "effect/Effect"; · 23 unmodified lines
30import * as Layer from "effect/Layer";42import * as Layer from "effect/Layer";
31import * as Option from "effect/Option";43import * as Option from "effect/Option";
32 44
33import { type ResolveExecutionEnvironment } from "./execution-state";
34import {45import {
35 LiveExecutionManagerService,46 LiveExecutionManagerService,
36 type LiveExecutionManager,
37} from "./live-execution";47} from "./live-execution";
38import { createRuntimeExecutionsService } from "./execution-service";48import { createRuntimeExecutionsService } from "./execution-service";
39import { loadLocalInstallation } from "./local-installation";49import { loadLocalInstallation } from "./local-installation";
@@ -204,14 +214,7 @@ const ensureOrganizationExists = ( · 164 unmodified lines
204 214
205const createOrganizationsService = (215const createOrganizationsService = (
206 rows: SqlControlPlaneRows,216 rows: SqlControlPlaneRows,
207): Pick<217): ControlPlaneOrganizationsServiceShape => ({
208 ControlPlaneServiceShape,
209 | "listOrganizations"
210 | "createOrganization"
211 | "getOrganization"
212 | "updateOrganization"
213 | "removeOrganization"
214> => ({
215 listOrganizations: ({ accountId }) =>218 listOrganizations: ({ accountId }) =>
216 Effect.gen(function* () {219 Effect.gen(function* () {
217 const memberships = yield* mapStorageError(220 const memberships = yield* mapStorageError(
@@ -363,13 +366,7 @@ const createOrganizationsService = ( · 145 unmodified lines
363 366
364const createMembershipsService = (367const createMembershipsService = (
365 rows: SqlControlPlaneRows,368 rows: SqlControlPlaneRows,
366): Pick<369): ControlPlaneMembershipsServiceShape => ({
367 ControlPlaneServiceShape,
368 | "listMemberships"
369 | "createMembership"
370 | "updateMembership"
371 | "removeMembership"
372> => ({
373 listMemberships: (organizationId) =>370 listMemberships: (organizationId) =>
374 Effect.gen(function* () {371 Effect.gen(function* () {
375 yield* ensureOrganizationExists(rows, "memberships.list", organizationId);372 yield* ensureOrganizationExists(rows, "memberships.list", organizationId);
@@ -485,14 +482,7 @@ const createMembershipsService = ( · 109 unmodified lines
485 482
486const createWorkspacesService = (483const createWorkspacesService = (
487 rows: SqlControlPlaneRows,484 rows: SqlControlPlaneRows,
488): Pick<485): ControlPlaneWorkspacesServiceShape => ({
489 ControlPlaneServiceShape,
490 | "listWorkspaces"
491 | "createWorkspace"
492 | "getWorkspace"
493 | "updateWorkspace"
494 | "removeWorkspace"
495> => ({
496 listWorkspaces: (organizationId) =>486 listWorkspaces: (organizationId) =>
497 Effect.gen(function* () {487 Effect.gen(function* () {
498 yield* ensureOrganizationExists(rows, "workspaces.list", organizationId);488 yield* ensureOrganizationExists(rows, "workspaces.list", organizationId);
@@ -594,14 +584,7 @@ const createWorkspacesService = ( · 95 unmodified lines
594 584
595const createSourcesService = (585const createSourcesService = (
596 rows: SqlControlPlaneRows,586 rows: SqlControlPlaneRows,
597): Pick<587): ControlPlaneSourcesServiceShape => ({
598 ControlPlaneServiceShape,
599 | "listSources"
600 | "createSource"
601 | "getSource"
602 | "updateSource"
603 | "removeSource"
604> => ({
605 listSources: (workspaceId) =>588 listSources: (workspaceId) =>
606 Effect.gen(function* () {589 Effect.gen(function* () {
607 const sourceRecords = yield* mapStorageError(590 const sourceRecords = yield* mapStorageError(
@@ -833,14 +816,7 @@ const createSourcesService = ( · 225 unmodified lines
833 816
834const createPoliciesService = (817const createPoliciesService = (
835 rows: SqlControlPlaneRows,818 rows: SqlControlPlaneRows,
836): Pick<819): ControlPlanePoliciesServiceShape => ({
837 ControlPlaneServiceShape,
838 | "listPolicies"
839 | "createPolicy"
840 | "getPolicy"
841 | "updatePolicy"
842 | "removePolicy"
843> => ({
844 listPolicies: (workspaceId) =>820 listPolicies: (workspaceId) =>
845 mapStorageError(821 mapStorageError(
846 "policies.list",822 "policies.list",
@@ -1003,8 +979,8 @@ const createPoliciesService = ( · 156 unmodified lines
1003 979
1004const createLocalService = (980const createLocalService = (
1005 rows: SqlControlPlaneRows,981 rows: SqlControlPlaneRows,
1006 sourceAuthService?: RuntimeSourceAuthService,982 sourceAuthService: RuntimeSourceAuthService,
1007): Pick<ControlPlaneServiceShape, "getLocalInstallation" | "completeSourceAuthCallback"> => ({983): ControlPlaneLocalServiceShape => ({
1008 getLocalInstallation: () =>984 getLocalInstallation: () =>
1009 Effect.gen(function* () {985 Effect.gen(function* () {
1010 const installation = yield* loadLocalInstallation(rows).pipe(986 const installation = yield* loadLocalInstallation(rows).pipe(
@@ -1034,16 +1010,6 @@ const createLocalService = ( · 23 unmodified lines
1034 1010
1035 completeSourceAuthCallback: (input) =>1011 completeSourceAuthCallback: (input) =>
1036 Effect.gen(function* () {1012 Effect.gen(function* () {
1037 if (!sourceAuthService) {
1038 return yield* Effect.fail(
1039 badRequest(
1040 "local.oauth.callback",
1041 "Source auth callback handling is unavailable",
1042 "Runtime source auth service is not configured",
1043 ),
1044 );
1045 }
1046
1047 return yield* sourceAuthService.completeSourceAuthCallback(input).pipe(1013 return yield* sourceAuthService.completeSourceAuthCallback(input).pipe(
1048 Effect.mapError((error) =>1014 Effect.mapError((error) =>
1049 new ControlPlaneStorageError({1015 new ControlPlaneStorageError({
@@ -1056,43 +1022,62 @@ const createLocalService = ( · 6 unmodified lines
1056 }),1022 }),
1057 });1023 });
1058 1024
1059export const createRuntimeControlPlaneService = (1025const RuntimeOrganizationsServiceLive = Layer.effect(
1060 rows: SqlControlPlaneRows,1026 ControlPlaneOrganizationsService,
1061 options: {1027 Effect.map(SqlControlPlaneRowsService, createOrganizationsService),
1062 executionResolver?: ResolveExecutionEnvironment;1028);
1063 liveExecutionManager?: LiveExecutionManager;1029
1064 sourceAuthService?: RuntimeSourceAuthService;1030const RuntimeMembershipsServiceLive = Layer.effect(
1065 } = {},1031 ControlPlaneMembershipsService,
1066) => ({1032 Effect.map(SqlControlPlaneRowsService, createMembershipsService),
1067 ...createLocalService(rows, options.sourceAuthService),1033);
1068 ...createOrganizationsService(rows),1034
1069 ...createMembershipsService(rows),1035const RuntimeWorkspacesServiceLive = Layer.effect(
1070 ...createWorkspacesService(rows),1036 ControlPlaneWorkspacesService,
1071 ...createSourcesService(rows),1037 Effect.map(SqlControlPlaneRowsService, createWorkspacesService),
1072 ...createPoliciesService(rows),1038);
1073 ...createRuntimeExecutionsService(1039
1074 rows,1040const RuntimeSourcesServiceLive = Layer.effect(
1075 options.executionResolver,1041 ControlPlaneSourcesService,
1076 options.liveExecutionManager,1042 Effect.map(SqlControlPlaneRowsService, createSourcesService),
1077 ),1043);
1078} satisfies ControlPlaneServiceShape);1044
1079 1045const RuntimePoliciesServiceLive = Layer.effect(
1080export type RuntimeControlPlaneService = ReturnType<1046 ControlPlanePoliciesService,
1081 typeof createRuntimeControlPlaneService1047 Effect.map(SqlControlPlaneRowsService, createPoliciesService),
1082>;1048);
1083 1049
1084export const RuntimeControlPlaneServiceLive = Layer.effect(1050const RuntimeLocalServiceLive = Layer.effect(
1085 ControlPlaneService,1051 ControlPlaneLocalService,
1052 Effect.gen(function* () {
1053 const rows = yield* SqlControlPlaneRowsService;
1054 const sourceAuthService = yield* RuntimeSourceAuthServiceTag;
1055
1056 return createLocalService(rows, sourceAuthService);
1057 }),
1058);
1059
1060const RuntimeExecutionsServiceLive = Layer.effect(
1061 ControlPlaneExecutionsService,
1086 Effect.gen(function* () {1062 Effect.gen(function* () {
1087 const rows = yield* SqlControlPlaneRowsService;1063 const rows = yield* SqlControlPlaneRowsService;
1088 const executionResolver = yield* RuntimeExecutionResolverService;1064 const executionResolver = yield* RuntimeExecutionResolverService;
1089 const liveExecutionManager = yield* LiveExecutionManagerService;1065 const liveExecutionManager = yield* LiveExecutionManagerService;
1090 const sourceAuthService = yield* RuntimeSourceAuthServiceTag;
1091 1066
1092 return createRuntimeControlPlaneService(rows, {1067 return createRuntimeExecutionsService(
1068 rows,
1093 executionResolver,1069 executionResolver,
1094 liveExecutionManager,1070 liveExecutionManager,
1095 sourceAuthService,1071 );
1096 });
1097 }),1072 }),
1098);1073);
1074
1075export const RuntimeControlPlaneApiServicesLive = Layer.mergeAll(
1076 RuntimeOrganizationsServiceLive,
1077 RuntimeMembershipsServiceLive,
1078 RuntimeWorkspacesServiceLive,
1079 RuntimeSourcesServiceLive,
1080 RuntimePoliciesServiceLive,
1081 RuntimeLocalServiceLive,
1082 RuntimeExecutionsServiceLive,
1083);
packages/control-plane/src/runtime/slug.ts+0−18
@@ -7,21 +7,3 @@ export const slugify = (value: string): string => · 6 unmodified lines
7 .replace(slugifyRegex, "-")7 .replace(slugifyRegex, "-")
8 .replace(/^-+/, "")8 .replace(/^-+/, "")
9 .replace(/-+$/, "");9 .replace(/-+$/, "");
10
11export const ensureUniqueSlug = async (
12 base: string,
13 hasCollision: (candidate: string) => Promise<boolean>,
14): Promise<string> => {
15 const normalizedBase = slugify(base);
16 const seed = normalizedBase.length > 0 ? normalizedBase : "item";
17
18 let counter = 0;
19 while (true) {
20 const candidate = counter === 0 ? seed : `${seed}-${counter + 1}`;
21 if (!(await hasCollision(candidate))) {
22 return candidate;
23 }
24
25 counter += 1;
26 }
27};
packages/control-plane/src/runtime/test-http-client.ts+2−4
@@ -11,7 +11,6 @@ import * as Layer from "effect/Layer"; · 10 unmodified lines
11import {11import {
12 ControlPlaneActorResolver,12 ControlPlaneActorResolver,
13 ControlPlaneApi,13 ControlPlaneApi,
14 ControlPlaneService,
15 createControlPlaneApiLayer,14 createControlPlaneApiLayer,
16} from "#api";15} from "#api";
17 16
@@ -21,12 +20,11 @@ import { · 3 unmodified lines
21} from "./index";20} from "./index";
22 21
23const createClientLayer = (runtime: SqlControlPlaneRuntime) => {22const createClientLayer = (runtime: SqlControlPlaneRuntime) => {
24 const serviceLayer = Layer.succeed(ControlPlaneService, runtime.service);
25 const actorResolverLayer = Layer.succeed(23 const actorResolverLayer = Layer.succeed(
26 ControlPlaneActorResolver,24 ControlPlaneActorResolver,
27 runtime.actorResolver,25 runtime.actorResolver,
28 );26 );
29 const apiLayer = createControlPlaneApiLayer(serviceLayer, actorResolverLayer);27 const apiLayer = createControlPlaneApiLayer(runtime.serviceLayer, actorResolverLayer);
30 28
31 return HttpApiBuilder.serve().pipe(29 return HttpApiBuilder.serve().pipe(
32 Layer.provide(apiLayer),30 Layer.provide(apiLayer),
@@ -49,7 +47,7 @@ const createControlPlaneClient = (accountId?: string) => · 16 unmodified lines
49 : undefined,47 : undefined,
50 });48 });
51 49
52export type ControlPlaneClient = Effect.Effect.Success<50type ControlPlaneClient = Effect.Effect.Success<
53 ReturnType<typeof createControlPlaneClient>51 ReturnType<typeof createControlPlaneClient>
54>;52>;
55 53
packages/kitchen-sink/package.json+0−1
@@ -13,7 +13,6 @@ · 12 unmodified lines
13 "@executor-v3/ai-sdk-adapter": "workspace:*",13 "@executor-v3/ai-sdk-adapter": "workspace:*",
14 "@executor-v3/codemode-core": "workspace:*",14 "@executor-v3/codemode-core": "workspace:*",
15 "@executor-v3/codemode-openapi": "workspace:*",15 "@executor-v3/codemode-openapi": "workspace:*",
16 "@executor-v3/control-plane": "workspace:*",
17 "@executor-v3/runtime-local-inproc": "workspace:*",16 "@executor-v3/runtime-local-inproc": "workspace:*",
18 "effect": "catalog:"17 "effect": "catalog:"
19 },18 },