@sylphx/contract 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/README.md +1 -1
  3. package/dist/compute.d.ts +33 -0
  4. package/dist/compute.d.ts.map +1 -0
  5. package/dist/compute.js +119 -0
  6. package/dist/endpoint.d.ts +3 -1
  7. package/dist/endpoint.d.ts.map +1 -1
  8. package/dist/endpoints/admin-audit.d.ts +2 -2
  9. package/dist/endpoints/admin-audit.js +2 -2
  10. package/dist/endpoints/admin-bootstrap.js +3 -3
  11. package/dist/endpoints/admin-branch-databases.d.ts +1 -1
  12. package/dist/endpoints/admin-branch-databases.js +2 -2
  13. package/dist/endpoints/admin-config.d.ts +3 -0
  14. package/dist/endpoints/admin-config.d.ts.map +1 -1
  15. package/dist/endpoints/admin-config.js +9 -1
  16. package/dist/endpoints/admin-envs-spec.d.ts +27 -0
  17. package/dist/endpoints/admin-envs-spec.d.ts.map +1 -0
  18. package/dist/endpoints/admin-envs-spec.js +25 -0
  19. package/dist/endpoints/admin-projects.d.ts +1 -1
  20. package/dist/endpoints/admin-rate-limits.d.ts +1 -1
  21. package/dist/endpoints/admin-rate-limits.js +3 -3
  22. package/dist/endpoints/admin-secrets.d.ts +3 -3
  23. package/dist/endpoints/admin-secrets.js +1 -1
  24. package/dist/endpoints/admin-services.d.ts +3 -3
  25. package/dist/endpoints/admin-services.d.ts.map +1 -1
  26. package/dist/endpoints/admin-services.js +4 -5
  27. package/dist/endpoints/ai-admin.d.ts +134 -5
  28. package/dist/endpoints/ai-admin.d.ts.map +1 -1
  29. package/dist/endpoints/analytics-admin.d.ts +141 -6
  30. package/dist/endpoints/analytics-admin.d.ts.map +1 -1
  31. package/dist/endpoints/analytics-admin.js +7 -7
  32. package/dist/endpoints/auth.d.ts +26 -8
  33. package/dist/endpoints/auth.d.ts.map +1 -1
  34. package/dist/endpoints/auth.js +5 -5
  35. package/dist/endpoints/branch-databases.d.ts +13 -7
  36. package/dist/endpoints/branch-databases.d.ts.map +1 -1
  37. package/dist/endpoints/branch-databases.js +3 -3
  38. package/dist/endpoints/databases.d.ts +100 -164
  39. package/dist/endpoints/databases.d.ts.map +1 -1
  40. package/dist/endpoints/databases.js +8 -35
  41. package/dist/endpoints/deployments.d.ts +1 -3
  42. package/dist/endpoints/deployments.d.ts.map +1 -1
  43. package/dist/endpoints/deployments.js +1 -1
  44. package/dist/endpoints/domains.d.ts +7 -1
  45. package/dist/endpoints/domains.d.ts.map +1 -1
  46. package/dist/endpoints/email-admin.d.ts +1 -0
  47. package/dist/endpoints/email-admin.d.ts.map +1 -1
  48. package/dist/endpoints/environments.d.ts +11 -42
  49. package/dist/endpoints/environments.d.ts.map +1 -1
  50. package/dist/endpoints/flags-admin.d.ts +8 -0
  51. package/dist/endpoints/flags-admin.d.ts.map +1 -1
  52. package/dist/endpoints/image-opt.d.ts +5 -13
  53. package/dist/endpoints/image-opt.d.ts.map +1 -1
  54. package/dist/endpoints/image-opt.js +6 -18
  55. package/dist/endpoints/kv-admin.d.ts +0 -1
  56. package/dist/endpoints/kv-admin.d.ts.map +1 -1
  57. package/dist/endpoints/notifications-admin.d.ts +4 -4
  58. package/dist/endpoints/organizations.d.ts +8 -6
  59. package/dist/endpoints/organizations.d.ts.map +1 -1
  60. package/dist/endpoints/project-manifest.d.ts +362 -354
  61. package/dist/endpoints/project-manifest.d.ts.map +1 -1
  62. package/dist/endpoints/projects.d.ts +0 -8
  63. package/dist/endpoints/projects.d.ts.map +1 -1
  64. package/dist/endpoints/realtime-admin.d.ts +0 -1
  65. package/dist/endpoints/realtime-admin.d.ts.map +1 -1
  66. package/dist/endpoints/realtime-admin.js +1 -1
  67. package/dist/endpoints/regions.d.ts +2 -4
  68. package/dist/endpoints/regions.d.ts.map +1 -1
  69. package/dist/endpoints/regions.js +2 -2
  70. package/dist/endpoints/tasks.d.ts +2 -6
  71. package/dist/endpoints/tasks.d.ts.map +1 -1
  72. package/dist/hono-app.d.ts +3 -3
  73. package/dist/hono-app.js +2 -2
  74. package/dist/index.d.ts +852 -632
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +7 -0
  77. package/dist/schemas/_primitives.d.ts +14 -0
  78. package/dist/schemas/_primitives.d.ts.map +1 -1
  79. package/dist/schemas/_primitives.js +16 -0
  80. package/dist/schemas/admin-audit.d.ts +4 -4
  81. package/dist/schemas/admin-audit.js +3 -3
  82. package/dist/schemas/admin-bootstrap.d.ts +1 -1
  83. package/dist/schemas/admin-bootstrap.js +1 -1
  84. package/dist/schemas/admin-builds.d.ts +1 -1
  85. package/dist/schemas/admin-builds.js +1 -1
  86. package/dist/schemas/admin-config.d.ts +4 -0
  87. package/dist/schemas/admin-config.d.ts.map +1 -1
  88. package/dist/schemas/admin-config.js +3 -0
  89. package/dist/schemas/admin-envs-spec.d.ts +49 -0
  90. package/dist/schemas/admin-envs-spec.d.ts.map +1 -0
  91. package/dist/schemas/admin-envs-spec.js +58 -0
  92. package/dist/schemas/admin-projects.d.ts +2 -2
  93. package/dist/schemas/admin-projects.js +1 -1
  94. package/dist/schemas/admin-rate-limits.d.ts +2 -2
  95. package/dist/schemas/admin-rate-limits.js +2 -2
  96. package/dist/schemas/admin-secrets.d.ts +14 -14
  97. package/dist/schemas/admin-secrets.d.ts.map +1 -1
  98. package/dist/schemas/admin-secrets.js +10 -10
  99. package/dist/schemas/admin-services.d.ts +18 -22
  100. package/dist/schemas/admin-services.d.ts.map +1 -1
  101. package/dist/schemas/admin-services.js +15 -19
  102. package/dist/schemas/ai-admin.d.ts +137 -8
  103. package/dist/schemas/ai-admin.d.ts.map +1 -1
  104. package/dist/schemas/ai-admin.js +119 -13
  105. package/dist/schemas/analytics-admin.d.ts +164 -7
  106. package/dist/schemas/analytics-admin.d.ts.map +1 -1
  107. package/dist/schemas/analytics-admin.js +104 -3
  108. package/dist/schemas/auth.d.ts +2 -1
  109. package/dist/schemas/auth.d.ts.map +1 -1
  110. package/dist/schemas/auth.js +2 -1
  111. package/dist/schemas/branch-database.d.ts +25 -18
  112. package/dist/schemas/branch-database.d.ts.map +1 -1
  113. package/dist/schemas/branch-database.js +15 -14
  114. package/dist/schemas/database.d.ts +13 -19
  115. package/dist/schemas/database.d.ts.map +1 -1
  116. package/dist/schemas/database.js +7 -19
  117. package/dist/schemas/deployment.d.ts +5 -7
  118. package/dist/schemas/deployment.d.ts.map +1 -1
  119. package/dist/schemas/deployment.js +6 -6
  120. package/dist/schemas/domain.d.ts +3 -1
  121. package/dist/schemas/domain.d.ts.map +1 -1
  122. package/dist/schemas/domain.js +2 -1
  123. package/dist/schemas/email-admin.d.ts +1 -0
  124. package/dist/schemas/email-admin.d.ts.map +1 -1
  125. package/dist/schemas/email-admin.js +1 -0
  126. package/dist/schemas/environment.d.ts +17 -31
  127. package/dist/schemas/environment.d.ts.map +1 -1
  128. package/dist/schemas/environment.js +11 -16
  129. package/dist/schemas/flags-admin.d.ts +13 -0
  130. package/dist/schemas/flags-admin.d.ts.map +1 -1
  131. package/dist/schemas/flags-admin.js +6 -0
  132. package/dist/schemas/ids.d.ts +4 -0
  133. package/dist/schemas/ids.d.ts.map +1 -1
  134. package/dist/schemas/ids.js +2 -0
  135. package/dist/schemas/image-opt.d.ts +10 -11
  136. package/dist/schemas/image-opt.d.ts.map +1 -1
  137. package/dist/schemas/image-opt.js +11 -12
  138. package/dist/schemas/kv-admin.d.ts +0 -1
  139. package/dist/schemas/kv-admin.d.ts.map +1 -1
  140. package/dist/schemas/kv-admin.js +0 -1
  141. package/dist/schemas/notifications-admin.d.ts +6 -6
  142. package/dist/schemas/notifications-admin.js +1 -1
  143. package/dist/schemas/organization.d.ts +8 -6
  144. package/dist/schemas/organization.d.ts.map +1 -1
  145. package/dist/schemas/organization.js +11 -6
  146. package/dist/schemas/project-manifest.d.ts +458 -455
  147. package/dist/schemas/project-manifest.d.ts.map +1 -1
  148. package/dist/schemas/project-manifest.js +66 -56
  149. package/dist/schemas/project.d.ts +0 -6
  150. package/dist/schemas/project.d.ts.map +1 -1
  151. package/dist/schemas/project.js +0 -2
  152. package/dist/schemas/realtime-admin.d.ts +0 -1
  153. package/dist/schemas/realtime-admin.d.ts.map +1 -1
  154. package/dist/schemas/realtime-admin.js +0 -1
  155. package/dist/schemas/realtime.d.ts +2 -2
  156. package/dist/schemas/realtime.js +2 -2
  157. package/dist/schemas/region.d.ts +3 -21
  158. package/dist/schemas/region.d.ts.map +1 -1
  159. package/dist/schemas/region.js +2 -11
  160. package/dist/schemas/resources.d.ts +213 -164
  161. package/dist/schemas/resources.d.ts.map +1 -1
  162. package/dist/schemas/resources.js +87 -105
  163. package/dist/schemas/storage.d.ts +1 -1
  164. package/dist/schemas/storage.js +1 -1
  165. package/dist/schemas/tasks.d.ts +3 -8
  166. package/dist/schemas/tasks.d.ts.map +1 -1
  167. package/dist/schemas/tasks.js +1 -4
  168. package/package.json +5 -1
@@ -2,8 +2,8 @@
2
2
  * Admin Secrets — operator-driven secret rotation primitives.
3
3
  *
4
4
  * G-5: closes the production-ready audit gap on secret rotation. The
5
- * Platform holds a small set of HMAC / encryption secrets in K8s Secret
6
- * env-var slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
5
+ * Platform holds a small set of HMAC / encryption secrets in operator-managed
6
+ * secret slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
7
7
  * rotation was a manual two-person rule documented in
8
8
  * `docs/runbooks/break-glass.md` §4 — not auditable, not metered, no
9
9
  * automated reminder when a secret aged past 90 days.
@@ -12,13 +12,13 @@
12
12
  * - List rotatable secrets + their last-rotation age (`--dry-run`)
13
13
  * - Initiate a rotation event for compliance (audit row + metric tick)
14
14
  *
15
- * The actual K8s secret value rotation is delegated to the runbook's
16
- * existing two-person procedure; this endpoint is the AUDIT trail and
15
+ * The actual secret value rotation is delegated to the runbook's existing
16
+ * two-person procedure; this endpoint is the AUDIT trail and
17
17
  * the OBSERVABILITY anchor for `sylphx_secret_age_days`. We deliberately
18
18
  * do NOT mint the new value server-side — minting would require holding
19
- * the cluster KMS key in process memory, which is the very threat the
20
- * rotation is hedging against. Operators paste the new value into the
21
- * cluster Secret store; the endpoint records that it happened.
19
+ * the secret-store root key in process memory, which is the very threat the
20
+ * rotation is hedging against. Operators update the configured secret
21
+ * target; the endpoint records that it happened.
22
22
  *
23
23
  * Scope (`platform:secrets:rotate`) is service-token only; super-admin
24
24
  * sessions are explicitly NOT accepted — a rotation MUST be a programmatic
@@ -59,7 +59,7 @@ export const AdminRotateSecretInput = Schema.Struct({
59
59
  * Per-secret rotation status — one row per known secret type.
60
60
  *
61
61
  * `lastRotatedAt` is null for a secret that has never been rotated since
62
- * ledger ingest (greenfield clusters, freshly seeded `secret_rotation_events`).
62
+ * ledger ingest (fresh installations, freshly seeded `secret_rotation_events`).
63
63
  * `ageDays` is `now() - lastRotatedAt` in days, or null when never-rotated;
64
64
  * the alert rule fires when `ageDays > 90`.
65
65
  */
@@ -71,8 +71,8 @@ export const AdminSecretStatus = Schema.Struct({
71
71
  cadenceDays: Schema.Number,
72
72
  /** True iff `ageDays > cadenceDays` (or never-rotated). */
73
73
  overdue: Schema.Boolean,
74
- /** Name of the K8s Secret + key the operator must update. */
75
- clusterSecretRef: Schema.String,
74
+ /** Operator-facing target the runbook updates. */
75
+ rotationTarget: Schema.String,
76
76
  });
77
77
  export const AdminRotateSecretResult = Schema.Struct({
78
78
  /** True iff a real rotation event was recorded; false on dry-run. */
@@ -5,12 +5,8 @@
5
5
  *
6
6
  * The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
7
7
  * polls this endpoint every 10 minutes. For each Platform service it
8
- * compares:
9
- *
10
- * - DB SSOT — `project_services.latest_image_ref` (the digest the
11
- * build pipeline says is current).
12
- * - K8s live — `deployment.spec.template.spec.containers[0].image`
13
- * (the digest actually rolling on cluster).
8
+ * compares the control-plane artifact reference with the live runtime
9
+ * artifact reference.
14
10
  *
15
11
  * When the two diverge for >30 minutes the probe pages on-call. Inside the
16
12
  * 30-minute grace window drift is tolerated (legit during a rolling deploy
@@ -25,27 +21,27 @@ import { Schema } from 'effect';
25
21
  *
26
22
  * - `name` — service name within the platform project
27
23
  * (e.g. `api`, `controller`, `runtime`).
28
- * - `dbRef` `latest_image_ref` from `project_services`.
24
+ * - `controlRef` artifact reference selected by the control plane.
29
25
  * `null` if the service has never been built.
30
- * - `k8sRef` image string from the live `Deployment`.
31
- * `null` if the deployment is missing in K8s.
26
+ * - `runtimeRef` artifact reference observed in the live runtime.
27
+ * `null` if the runtime target is missing.
32
28
  * - `driftMinutes` — minutes since the divergence first appeared.
33
- * `0` when DB and K8s agree (or both null).
29
+ * `0` when control and runtime agree (or both null).
34
30
  * `null` when one side is missing.
35
- * - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
31
+ * - `inSync` — `true` iff `controlRef === runtimeRef` AND both non-null.
36
32
  * Probes alert when this is `false` past the grace
37
33
  * window.
38
- * - `dbUpdatedAt` — ISO timestamp the DB row was last touched
39
- * (`project_services.updated_at`). Drives the
40
- * `driftMinutes` calculation when DB is the lagger.
34
+ * - `controlUpdatedAt` — ISO timestamp the control-plane artifact pointer
35
+ * was last touched. Drives `driftMinutes` when the
36
+ * control plane is the lagger.
41
37
  */
42
38
  export declare const AdminServiceImageStatusRow: Schema.Struct<{
43
39
  name: typeof Schema.String;
44
- dbRef: Schema.NullOr<typeof Schema.String>;
45
- k8sRef: Schema.NullOr<typeof Schema.String>;
40
+ controlRef: Schema.NullOr<typeof Schema.String>;
41
+ runtimeRef: Schema.NullOr<typeof Schema.String>;
46
42
  driftMinutes: Schema.NullOr<typeof Schema.Number>;
47
43
  inSync: typeof Schema.Boolean;
48
- dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
44
+ controlUpdatedAt: Schema.NullOr<typeof Schema.String>;
49
45
  }>;
50
46
  export type AdminServiceImageStatusRow = typeof AdminServiceImageStatusRow.Type;
51
47
  /**
@@ -53,17 +49,17 @@ export type AdminServiceImageStatusRow = typeof AdminServiceImageStatusRow.Type;
53
49
  *
54
50
  * Always returns one row per Platform service (controller, api, runtime,
55
51
  * web, exec-server, storage-gateway, storage-worker). Missing rows on
56
- * either side surface as `dbRef=null` or `k8sRef=null` so the probe can
57
- * still page on configuration drift, not just digest drift.
52
+ * either side surface as `controlRef=null` or `runtimeRef=null` so the probe
53
+ * can still page on configuration drift, not just digest drift.
58
54
  */
59
55
  export declare const AdminServiceImageStatusResult: Schema.Struct<{
60
56
  services: Schema.Array$<Schema.Struct<{
61
57
  name: typeof Schema.String;
62
- dbRef: Schema.NullOr<typeof Schema.String>;
63
- k8sRef: Schema.NullOr<typeof Schema.String>;
58
+ controlRef: Schema.NullOr<typeof Schema.String>;
59
+ runtimeRef: Schema.NullOr<typeof Schema.String>;
64
60
  driftMinutes: Schema.NullOr<typeof Schema.Number>;
65
61
  inSync: typeof Schema.Boolean;
66
- dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
62
+ controlUpdatedAt: Schema.NullOr<typeof Schema.String>;
67
63
  }>>;
68
64
  checkedAt: typeof Schema.String;
69
65
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-services.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,0BAA0B;;;;;;;EAOrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA"}
1
+ {"version":3,"file":"admin-services.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,0BAA0B;;;;;;;EAOrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA"}
@@ -5,12 +5,8 @@
5
5
  *
6
6
  * The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
7
7
  * polls this endpoint every 10 minutes. For each Platform service it
8
- * compares:
9
- *
10
- * - DB SSOT — `project_services.latest_image_ref` (the digest the
11
- * build pipeline says is current).
12
- * - K8s live — `deployment.spec.template.spec.containers[0].image`
13
- * (the digest actually rolling on cluster).
8
+ * compares the control-plane artifact reference with the live runtime
9
+ * artifact reference.
14
10
  *
15
11
  * When the two diverge for >30 minutes the probe pages on-call. Inside the
16
12
  * 30-minute grace window drift is tolerated (legit during a rolling deploy
@@ -25,35 +21,35 @@ import { Schema } from 'effect';
25
21
  *
26
22
  * - `name` — service name within the platform project
27
23
  * (e.g. `api`, `controller`, `runtime`).
28
- * - `dbRef` `latest_image_ref` from `project_services`.
24
+ * - `controlRef` artifact reference selected by the control plane.
29
25
  * `null` if the service has never been built.
30
- * - `k8sRef` image string from the live `Deployment`.
31
- * `null` if the deployment is missing in K8s.
26
+ * - `runtimeRef` artifact reference observed in the live runtime.
27
+ * `null` if the runtime target is missing.
32
28
  * - `driftMinutes` — minutes since the divergence first appeared.
33
- * `0` when DB and K8s agree (or both null).
29
+ * `0` when control and runtime agree (or both null).
34
30
  * `null` when one side is missing.
35
- * - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
31
+ * - `inSync` — `true` iff `controlRef === runtimeRef` AND both non-null.
36
32
  * Probes alert when this is `false` past the grace
37
33
  * window.
38
- * - `dbUpdatedAt` — ISO timestamp the DB row was last touched
39
- * (`project_services.updated_at`). Drives the
40
- * `driftMinutes` calculation when DB is the lagger.
34
+ * - `controlUpdatedAt` — ISO timestamp the control-plane artifact pointer
35
+ * was last touched. Drives `driftMinutes` when the
36
+ * control plane is the lagger.
41
37
  */
42
38
  export const AdminServiceImageStatusRow = Schema.Struct({
43
39
  name: Schema.String,
44
- dbRef: Schema.NullOr(Schema.String),
45
- k8sRef: Schema.NullOr(Schema.String),
40
+ controlRef: Schema.NullOr(Schema.String),
41
+ runtimeRef: Schema.NullOr(Schema.String),
46
42
  driftMinutes: Schema.NullOr(Schema.Number),
47
43
  inSync: Schema.Boolean,
48
- dbUpdatedAt: Schema.NullOr(Schema.String),
44
+ controlUpdatedAt: Schema.NullOr(Schema.String),
49
45
  });
50
46
  /**
51
47
  * Response of `GET /admin/services/image-status`.
52
48
  *
53
49
  * Always returns one row per Platform service (controller, api, runtime,
54
50
  * web, exec-server, storage-gateway, storage-worker). Missing rows on
55
- * either side surface as `dbRef=null` or `k8sRef=null` so the probe can
56
- * still page on configuration drift, not just digest drift.
51
+ * either side surface as `controlRef=null` or `runtimeRef=null` so the probe
52
+ * can still page on configuration drift, not just digest drift.
57
53
  */
58
54
  export const AdminServiceImageStatusResult = Schema.Struct({
59
55
  services: Schema.Array(AdminServiceImageStatusRow),
@@ -2,8 +2,8 @@
2
2
  * AI Admin — schemas for Console-plane AI usage analytics + model config.
3
3
  * Mirrors `routes/ai.ts`.
4
4
  *
5
- * Plane: `management`. Response shapes for analytics aggregations use
6
- * `Schema.Unknown` they're computed breakdowns that evolve over time.
5
+ * Plane: `management`. Response shapes are explicit because Console, SDK,
6
+ * OpenAPI, and route handlers all depend on the same analytics contract.
7
7
  */
8
8
  import { Schema } from 'effect';
9
9
  export declare const AiAdminProjectIdParams: Schema.Struct<{
@@ -24,16 +24,145 @@ export declare const AiProjectUsageQuery: Schema.Struct<{
24
24
  period: Schema.optional<Schema.Literal<["day", "week", "month"]>>;
25
25
  }>;
26
26
  export type AiProjectUsageQuery = typeof AiProjectUsageQuery.Type;
27
- export declare const AiOverviewResult: typeof Schema.Unknown;
27
+ export declare const AiOverviewResult: Schema.Struct<{
28
+ period: Schema.Literal<["day", "week", "month"]>;
29
+ totals: Schema.Struct<{
30
+ requests: typeof Schema.Number;
31
+ tokens: typeof Schema.Number;
32
+ cost: Schema.Struct<{
33
+ microdollars: typeof Schema.Number;
34
+ formatted: typeof Schema.String;
35
+ }>;
36
+ avgLatencyMs: typeof Schema.Number;
37
+ successRate: typeof Schema.Number;
38
+ }>;
39
+ byProject: Schema.Array$<Schema.Struct<{
40
+ projectId: typeof Schema.String;
41
+ projectName: typeof Schema.String;
42
+ requests: typeof Schema.Number;
43
+ inputTokens: typeof Schema.Number;
44
+ outputTokens: typeof Schema.Number;
45
+ cost: Schema.Struct<{
46
+ microdollars: typeof Schema.Number;
47
+ formatted: typeof Schema.String;
48
+ }>;
49
+ successRate: typeof Schema.Number;
50
+ }>>;
51
+ byModel: Schema.Array$<Schema.Struct<{
52
+ model: typeof Schema.String;
53
+ requests: typeof Schema.Number;
54
+ tokens: typeof Schema.Number;
55
+ cost: Schema.Struct<{
56
+ microdollars: typeof Schema.Number;
57
+ formatted: typeof Schema.String;
58
+ }>;
59
+ }>>;
60
+ byProvider: Schema.Array$<Schema.Struct<{
61
+ provider: typeof Schema.String;
62
+ requests: typeof Schema.Number;
63
+ tokens: typeof Schema.Number;
64
+ cost: Schema.Struct<{
65
+ microdollars: typeof Schema.Number;
66
+ formatted: typeof Schema.String;
67
+ }>;
68
+ }>>;
69
+ }>;
28
70
  export type AiOverviewResult = typeof AiOverviewResult.Type;
29
- export declare const AiProjectUsageResult: typeof Schema.Unknown;
71
+ export declare const AiProjectUsageResult: Schema.Struct<{
72
+ app: Schema.Struct<{
73
+ id: typeof Schema.String;
74
+ name: typeof Schema.String;
75
+ slug: typeof Schema.String;
76
+ }>;
77
+ period: Schema.Literal<["day", "week", "month"]>;
78
+ stats: Schema.Struct<{
79
+ requests: typeof Schema.Number;
80
+ inputTokens: typeof Schema.Number;
81
+ outputTokens: typeof Schema.Number;
82
+ cost: Schema.Struct<{
83
+ microdollars: typeof Schema.Number;
84
+ formatted: typeof Schema.String;
85
+ }>;
86
+ latency: Schema.Struct<{
87
+ avgMs: typeof Schema.Number;
88
+ p95Ms: typeof Schema.Number;
89
+ }>;
90
+ successRate: typeof Schema.Number;
91
+ }>;
92
+ byModel: Schema.Array$<Schema.Struct<{
93
+ model: typeof Schema.String;
94
+ requests: typeof Schema.Number;
95
+ tokens: typeof Schema.Number;
96
+ cost: Schema.Struct<{
97
+ microdollars: typeof Schema.Number;
98
+ formatted: typeof Schema.String;
99
+ }>;
100
+ }>>;
101
+ byType: Schema.Array$<Schema.Struct<{
102
+ type: typeof Schema.String;
103
+ requests: typeof Schema.Number;
104
+ tokens: typeof Schema.Number;
105
+ }>>;
106
+ recentErrors: Schema.Array$<Schema.Struct<{
107
+ id: typeof Schema.String;
108
+ model: typeof Schema.String;
109
+ type: typeof Schema.String;
110
+ error: Schema.NullOr<typeof Schema.String>;
111
+ code: Schema.NullOr<typeof Schema.String>;
112
+ timestamp: typeof Schema.String;
113
+ }>>;
114
+ }>;
30
115
  export type AiProjectUsageResult = typeof AiProjectUsageResult.Type;
31
- export declare const AiCostTrendsResult: typeof Schema.Unknown;
116
+ export declare const AiCostTrendsResult: Schema.Struct<{
117
+ period: Schema.Literal<["day", "week", "month"]>;
118
+ interval: Schema.Literal<["hour", "day"]>;
119
+ data: Schema.Array$<Schema.Struct<{
120
+ timestamp: typeof Schema.String;
121
+ requests: typeof Schema.Number;
122
+ tokens: typeof Schema.Number;
123
+ cost: Schema.Struct<{
124
+ microdollars: typeof Schema.Number;
125
+ formatted: typeof Schema.String;
126
+ }>;
127
+ avgLatencyMs: typeof Schema.Number;
128
+ }>>;
129
+ }>;
32
130
  export type AiCostTrendsResult = typeof AiCostTrendsResult.Type;
33
- export declare const AiProjectConfigResult: typeof Schema.Unknown;
131
+ export declare const AiProjectConfigResult: Schema.Struct<{
132
+ app: Schema.Struct<{
133
+ id: typeof Schema.String;
134
+ name: typeof Schema.String;
135
+ slug: typeof Schema.String;
136
+ }>;
137
+ config: Schema.Struct<{
138
+ defaultMaxTokens: typeof Schema.Number;
139
+ defaultTemperature: typeof Schema.Number;
140
+ enableCaching: typeof Schema.Boolean;
141
+ allowedModels: Schema.NullOr<Schema.Array$<typeof Schema.String>>;
142
+ blockedModels: Schema.NullOr<Schema.Array$<typeof Schema.String>>;
143
+ }>;
144
+ rateLimits: Schema.Array$<Schema.Struct<{
145
+ id: typeof Schema.String;
146
+ modelPattern: typeof Schema.String;
147
+ requestsPerMinute: Schema.NullOr<typeof Schema.Number>;
148
+ requestsPerDay: Schema.NullOr<typeof Schema.Number>;
149
+ tokensPerMinute: Schema.NullOr<typeof Schema.Number>;
150
+ tokensPerDay: Schema.NullOr<typeof Schema.Number>;
151
+ costPerDayMicrodollars: Schema.NullOr<typeof Schema.Number>;
152
+ isActive: typeof Schema.Boolean;
153
+ }>>;
154
+ }>;
34
155
  export type AiProjectConfigResult = typeof AiProjectConfigResult.Type;
35
- export declare const AiUpdateProjectConfigInput: Schema.Record$<typeof Schema.String, typeof Schema.Unknown>;
156
+ export declare const AiUpdateProjectConfigInput: Schema.Struct<{
157
+ defaultMaxTokens: Schema.optional<typeof Schema.Number>;
158
+ defaultTemperature: Schema.optional<typeof Schema.Number>;
159
+ enableCaching: Schema.optional<typeof Schema.Boolean>;
160
+ allowedModels: Schema.optional<Schema.NullOr<Schema.Array$<typeof Schema.String>>>;
161
+ blockedModels: Schema.optional<Schema.NullOr<Schema.Array$<typeof Schema.String>>>;
162
+ }>;
36
163
  export type AiUpdateProjectConfigInput = typeof AiUpdateProjectConfigInput.Type;
37
- export declare const AiUpdateProjectConfigResult: typeof Schema.Unknown;
164
+ export declare const AiUpdateProjectConfigResult: Schema.Struct<{
165
+ success: typeof Schema.Boolean;
166
+ }>;
38
167
  export type AiUpdateProjectConfigResult = typeof AiUpdateProjectConfigResult.Type;
39
168
  //# sourceMappingURL=ai-admin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-admin.d.ts","sourceRoot":"","sources":["../../src/schemas/ai-admin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,sBAAsB;;EAA8C,CAAA;AACjF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE,eAAO,MAAM,eAAe;;EAE1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAA;AAEjE,eAAO,MAAM,gBAAgB,uBAAiB,CAAA;AAC9C,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAC3D,eAAO,MAAM,oBAAoB,uBAAiB,CAAA;AAClD,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AACnE,eAAO,MAAM,kBAAkB,uBAAiB,CAAA;AAChD,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAC/D,eAAO,MAAM,qBAAqB,uBAAiB,CAAA;AACnD,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,0BAA0B,6DAGrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAC/E,eAAO,MAAM,2BAA2B,uBAAiB,CAAA;AACzD,MAAM,MAAM,2BAA2B,GAAG,OAAO,2BAA2B,CAAC,IAAI,CAAA"}
1
+ {"version":3,"file":"ai-admin.d.ts","sourceRoot":"","sources":["../../src/schemas/ai-admin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,sBAAsB;;EAA8C,CAAA;AACjF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAoBvE,eAAO,MAAM,eAAe;;EAE1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAA;AAEjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoC3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC/B,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AAEnE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;EAY7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;EAehC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,0BAA0B;;;;;;EAMrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAC/E,eAAO,MAAM,2BAA2B;;EAA6C,CAAA;AACrF,MAAM,MAAM,2BAA2B,GAAG,OAAO,2BAA2B,CAAC,IAAI,CAAA"}
@@ -2,28 +2,134 @@
2
2
  * AI Admin — schemas for Console-plane AI usage analytics + model config.
3
3
  * Mirrors `routes/ai.ts`.
4
4
  *
5
- * Plane: `management`. Response shapes for analytics aggregations use
6
- * `Schema.Unknown` they're computed breakdowns that evolve over time.
5
+ * Plane: `management`. Response shapes are explicit because Console, SDK,
6
+ * OpenAPI, and route handlers all depend on the same analytics contract.
7
7
  */
8
8
  import { Schema } from 'effect';
9
9
  export const AiAdminProjectIdParams = Schema.Struct({ projectId: Schema.String });
10
+ const AiPeriod = Schema.Literal('day', 'week', 'month');
11
+ const AiMoney = Schema.Struct({
12
+ microdollars: Schema.Number,
13
+ formatted: Schema.String,
14
+ });
15
+ const AiProjectRef = Schema.Struct({
16
+ id: Schema.String,
17
+ name: Schema.String,
18
+ slug: Schema.String,
19
+ });
20
+ const AiModelConfig = Schema.Struct({
21
+ defaultMaxTokens: Schema.Number,
22
+ defaultTemperature: Schema.Number,
23
+ enableCaching: Schema.Boolean,
24
+ allowedModels: Schema.NullOr(Schema.Array(Schema.String)),
25
+ blockedModels: Schema.NullOr(Schema.Array(Schema.String)),
26
+ });
10
27
  export const AiOverviewQuery = Schema.Struct({
11
- period: Schema.optional(Schema.Literal('day', 'week', 'month')),
28
+ period: Schema.optional(AiPeriod),
12
29
  });
13
30
  export const AiCostTrendsQuery = Schema.Struct({
14
- period: Schema.optional(Schema.Literal('day', 'week', 'month')),
31
+ period: Schema.optional(AiPeriod),
15
32
  interval: Schema.optional(Schema.Literal('hour', 'day')),
16
33
  projectId: Schema.optional(Schema.String),
17
34
  });
18
35
  export const AiProjectUsageQuery = Schema.Struct({
19
- period: Schema.optional(Schema.Literal('day', 'week', 'month')),
36
+ period: Schema.optional(AiPeriod),
37
+ });
38
+ export const AiOverviewResult = Schema.Struct({
39
+ period: AiPeriod,
40
+ totals: Schema.Struct({
41
+ requests: Schema.Number,
42
+ tokens: Schema.Number,
43
+ cost: AiMoney,
44
+ avgLatencyMs: Schema.Number,
45
+ successRate: Schema.Number,
46
+ }),
47
+ byProject: Schema.Array(Schema.Struct({
48
+ projectId: Schema.String,
49
+ projectName: Schema.String,
50
+ requests: Schema.Number,
51
+ inputTokens: Schema.Number,
52
+ outputTokens: Schema.Number,
53
+ cost: AiMoney,
54
+ successRate: Schema.Number,
55
+ })),
56
+ byModel: Schema.Array(Schema.Struct({
57
+ model: Schema.String,
58
+ requests: Schema.Number,
59
+ tokens: Schema.Number,
60
+ cost: AiMoney,
61
+ })),
62
+ byProvider: Schema.Array(Schema.Struct({
63
+ provider: Schema.String,
64
+ requests: Schema.Number,
65
+ tokens: Schema.Number,
66
+ cost: AiMoney,
67
+ })),
68
+ });
69
+ export const AiProjectUsageResult = Schema.Struct({
70
+ app: AiProjectRef,
71
+ period: AiPeriod,
72
+ stats: Schema.Struct({
73
+ requests: Schema.Number,
74
+ inputTokens: Schema.Number,
75
+ outputTokens: Schema.Number,
76
+ cost: AiMoney,
77
+ latency: Schema.Struct({
78
+ avgMs: Schema.Number,
79
+ p95Ms: Schema.Number,
80
+ }),
81
+ successRate: Schema.Number,
82
+ }),
83
+ byModel: Schema.Array(Schema.Struct({
84
+ model: Schema.String,
85
+ requests: Schema.Number,
86
+ tokens: Schema.Number,
87
+ cost: AiMoney,
88
+ })),
89
+ byType: Schema.Array(Schema.Struct({
90
+ type: Schema.String,
91
+ requests: Schema.Number,
92
+ tokens: Schema.Number,
93
+ })),
94
+ recentErrors: Schema.Array(Schema.Struct({
95
+ id: Schema.String,
96
+ model: Schema.String,
97
+ type: Schema.String,
98
+ error: Schema.NullOr(Schema.String),
99
+ code: Schema.NullOr(Schema.String),
100
+ timestamp: Schema.String,
101
+ })),
102
+ });
103
+ export const AiCostTrendsResult = Schema.Struct({
104
+ period: AiPeriod,
105
+ interval: Schema.Literal('hour', 'day'),
106
+ data: Schema.Array(Schema.Struct({
107
+ timestamp: Schema.String,
108
+ requests: Schema.Number,
109
+ tokens: Schema.Number,
110
+ cost: AiMoney,
111
+ avgLatencyMs: Schema.Number,
112
+ })),
113
+ });
114
+ export const AiProjectConfigResult = Schema.Struct({
115
+ app: AiProjectRef,
116
+ config: AiModelConfig,
117
+ rateLimits: Schema.Array(Schema.Struct({
118
+ id: Schema.String,
119
+ modelPattern: Schema.String,
120
+ requestsPerMinute: Schema.NullOr(Schema.Number),
121
+ requestsPerDay: Schema.NullOr(Schema.Number),
122
+ tokensPerMinute: Schema.NullOr(Schema.Number),
123
+ tokensPerDay: Schema.NullOr(Schema.Number),
124
+ costPerDayMicrodollars: Schema.NullOr(Schema.Number),
125
+ isActive: Schema.Boolean,
126
+ })),
20
127
  });
21
- export const AiOverviewResult = Schema.Unknown;
22
- export const AiProjectUsageResult = Schema.Unknown;
23
- export const AiCostTrendsResult = Schema.Unknown;
24
- export const AiProjectConfigResult = Schema.Unknown;
25
- export const AiUpdateProjectConfigInput = Schema.Record({
26
- key: Schema.String,
27
- value: Schema.Unknown,
128
+ export const AiUpdateProjectConfigInput = Schema.Struct({
129
+ defaultMaxTokens: Schema.optional(Schema.Number),
130
+ defaultTemperature: Schema.optional(Schema.Number),
131
+ enableCaching: Schema.optional(Schema.Boolean),
132
+ allowedModels: Schema.optional(Schema.NullOr(Schema.Array(Schema.String))),
133
+ blockedModels: Schema.optional(Schema.NullOr(Schema.Array(Schema.String))),
28
134
  });
29
- export const AiUpdateProjectConfigResult = Schema.Unknown;
135
+ export const AiUpdateProjectConfigResult = Schema.Struct({ success: Schema.Boolean });