@cosmicdrift/kumiko-framework 0.369.0 → 0.371.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 (451) hide show
  1. package/AGENTS.md +14 -1
  2. package/agents/examples/apex-surface-auth.md +2 -1
  3. package/agents/examples/app-config.md +98 -0
  4. package/agents/examples/auth-mfa.md +72 -0
  5. package/agents/examples/chat-channels.md +1 -1
  6. package/agents/examples/compose-stacks.md +188 -0
  7. package/agents/examples/env-composition.md +278 -0
  8. package/agents/examples/host-routing.md +181 -0
  9. package/agents/examples/inbound-mail-triage.md +1 -1
  10. package/agents/examples/legal-pages.md +52 -3
  11. package/agents/examples/managed-config.md +1 -0
  12. package/agents/examples/managed-pages.md +1 -0
  13. package/agents/examples/prod-boot-options.md +180 -0
  14. package/agents/examples/relations.md +4 -0
  15. package/agents/examples/secrets-demo.md +4 -2
  16. package/agents/examples/security-baseline.md +20 -17
  17. package/agents/examples.md +6 -1
  18. package/agents/features.md +14 -2
  19. package/dist/api/anonymous-cookie.d.ts +1 -1
  20. package/dist/api/anonymous-live-entities.d.ts +1 -1
  21. package/dist/api/auth-middleware.d.ts +2 -2
  22. package/dist/api/auth-routes.d.ts +7 -7
  23. package/dist/api/extra-route.d.ts +2 -2
  24. package/dist/api/index.d.ts +37 -37
  25. package/dist/api/jwt.d.ts +1 -1
  26. package/dist/api/observability-middleware.d.ts +1 -1
  27. package/dist/api/readiness.d.ts +1 -1
  28. package/dist/api/redis-sse-broker.d.ts +2 -2
  29. package/dist/api/request-context.d.ts +1 -1
  30. package/dist/api/request-id-middleware.d.ts +3 -3
  31. package/dist/api/route-registrars.d.ts +4 -4
  32. package/dist/api/routes.d.ts +1 -1
  33. package/dist/api/server.d.ts +16 -16
  34. package/dist/api/sse-broker.d.ts +1 -1
  35. package/dist/api/sse-route.d.ts +1 -1
  36. package/dist/api/websocket-route.d.ts +3 -3
  37. package/dist/auth/index.d.ts +2 -2
  38. package/dist/compliance/duration-spec.d.ts +2 -2
  39. package/dist/compliance/index.d.ts +6 -6
  40. package/dist/compliance/profiles.d.ts +1 -1
  41. package/dist/config/index.d.ts +44 -0
  42. package/dist/config/index.js +61 -0
  43. package/dist/crypto/blind-index.d.ts +1 -1
  44. package/dist/crypto/event-pii.d.ts +1 -1
  45. package/dist/crypto/in-memory-kms-adapter.d.ts +1 -1
  46. package/dist/crypto/index.d.ts +11 -11
  47. package/dist/crypto/is-self-pii-field.d.ts +1 -1
  48. package/dist/crypto/kms-wiring.d.ts +2 -2
  49. package/dist/crypto/owner-transition-rekey.d.ts +1 -1
  50. package/dist/crypto/pg-kms-adapter.d.ts +1 -1
  51. package/dist/crypto/pii-field-encryption.d.ts +4 -4
  52. package/dist/crypto/request-kms-cache.d.ts +1 -1
  53. package/dist/crypto/subject-resolver.d.ts +3 -3
  54. package/dist/db/apply-entity-event.d.ts +4 -4
  55. package/dist/db/assert-exists-in.d.ts +4 -4
  56. package/dist/db/blind-index-cleanup.d.ts +2 -2
  57. package/dist/db/collect-table-metas.d.ts +2 -2
  58. package/dist/db/compound-types.d.ts +1 -1
  59. package/dist/db/config-seed.d.ts +5 -5
  60. package/dist/db/connection.d.ts +1 -6
  61. package/dist/db/connection.js +15 -4
  62. package/dist/db/dialect.d.ts +1 -1
  63. package/dist/db/eagerload.d.ts +3 -3
  64. package/dist/db/entity-field-encryption.d.ts +3 -3
  65. package/dist/db/entity-field-encryption.js +3 -1
  66. package/dist/db/entity-table-from-registry.d.ts +3 -3
  67. package/dist/db/entity-table-meta.d.ts +3 -3
  68. package/dist/db/event-store-executor-context.d.ts +9 -9
  69. package/dist/db/event-store-executor-read.d.ts +2 -2
  70. package/dist/db/event-store-executor-write.d.ts +2 -2
  71. package/dist/db/event-store-executor.d.ts +8 -8
  72. package/dist/db/feature-table-sources.d.ts +1 -1
  73. package/dist/db/index.d.ts +39 -39
  74. package/dist/db/located-timestamp.d.ts +1 -1
  75. package/dist/db/lock-guard.d.ts +2 -2
  76. package/dist/db/migrate-generator.d.ts +2 -2
  77. package/dist/db/migrate-runner.d.ts +1 -1
  78. package/dist/db/money.d.ts +1 -1
  79. package/dist/db/parent-ref-clause.d.ts +4 -4
  80. package/dist/db/projection-registry-binding.d.ts +1 -1
  81. package/dist/db/queries/advisory-lock.d.ts +1 -1
  82. package/dist/db/queries/backfill-pii.d.ts +2 -2
  83. package/dist/db/queries/ddl.d.ts +1 -1
  84. package/dist/db/queries/entity-read.d.ts +1 -1
  85. package/dist/db/queries/es-ops.d.ts +1 -1
  86. package/dist/db/queries/event-consumer.d.ts +2 -2
  87. package/dist/db/queries/event-store-admin.d.ts +1 -1
  88. package/dist/db/queries/event-store-transfer.d.ts +1 -1
  89. package/dist/db/queries/event-store.d.ts +1 -1
  90. package/dist/db/queries/pii-backfill-state.d.ts +1 -1
  91. package/dist/db/queries/projection-rebuild.d.ts +1 -1
  92. package/dist/db/queries/raw-sql.d.ts +1 -1
  93. package/dist/db/queries/seed-context.d.ts +2 -2
  94. package/dist/db/queries/shadow-swap.d.ts +3 -3
  95. package/dist/db/queries/table-ops.d.ts +1 -1
  96. package/dist/db/queries/test-stack.d.ts +2 -2
  97. package/dist/db/query.d.ts +3 -3
  98. package/dist/db/rebuild-marker.d.ts +1 -1
  99. package/dist/db/reference-data.d.ts +3 -3
  100. package/dist/db/render-ddl.d.ts +1 -1
  101. package/dist/db/replay-migration-sql.d.ts +1 -1
  102. package/dist/db/retired-framework-tables.d.ts +1 -1
  103. package/dist/db/schema-inspection.d.ts +1 -1
  104. package/dist/db/table-builder.d.ts +4 -4
  105. package/dist/db/table-push.d.ts +3 -3
  106. package/dist/db/tenant-db-runner.d.ts +2 -2
  107. package/dist/db/tenant-db.d.ts +7 -9
  108. package/dist/db/tenant-db.js +2 -12
  109. package/dist/derivatives/derivatives-context.d.ts +3 -3
  110. package/dist/derivatives/field-variants.d.ts +1 -1
  111. package/dist/derivatives/index.d.ts +6 -6
  112. package/dist/engine/access.d.ts +1 -1
  113. package/dist/engine/active-membership.d.ts +2 -2
  114. package/dist/engine/boot-validator/access-declarations.d.ts +1 -1
  115. package/dist/engine/boot-validator/access-roles.d.ts +1 -1
  116. package/dist/engine/boot-validator/action-wiring.d.ts +1 -1
  117. package/dist/engine/boot-validator/api-ext.d.ts +1 -1
  118. package/dist/engine/boot-validator/boot-check.d.ts +1 -1
  119. package/dist/engine/boot-validator/card-meta-overflow.d.ts +1 -1
  120. package/dist/engine/boot-validator/config-deps.d.ts +1 -1
  121. package/dist/engine/boot-validator/detail-screens.d.ts +2 -2
  122. package/dist/engine/boot-validator/entity-handler.d.ts +1 -1
  123. package/dist/engine/boot-validator/entity-list-screens.d.ts +1 -1
  124. package/dist/engine/boot-validator/gdpr-storage.d.ts +1 -1
  125. package/dist/engine/boot-validator/global-tenancy.d.ts +1 -1
  126. package/dist/engine/boot-validator/handler-field-references.d.ts +1 -1
  127. package/dist/engine/boot-validator/i18n-keys.d.ts +1 -1
  128. package/dist/engine/boot-validator/index.d.ts +7 -7
  129. package/dist/engine/boot-validator/nav.d.ts +1 -1
  130. package/dist/engine/boot-validator/ownership.d.ts +2 -2
  131. package/dist/engine/boot-validator/parent-ref.d.ts +1 -1
  132. package/dist/engine/boot-validator/pii-retention.d.ts +2 -2
  133. package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
  134. package/dist/engine/boot-validator/query-output-columns.d.ts +1 -1
  135. package/dist/engine/boot-validator/query-refs.d.ts +1 -1
  136. package/dist/engine/boot-validator/record-owned.d.ts +1 -1
  137. package/dist/engine/boot-validator/screens.d.ts +2 -2
  138. package/dist/engine/boot-validator/security-baseline.d.ts +1 -1
  139. package/dist/engine/boot-validator/selector-owner-panels.d.ts +1 -1
  140. package/dist/engine/boot-validator/transfer-graph.d.ts +2 -2
  141. package/dist/engine/boot-validator/url-prefill-fields.d.ts +1 -1
  142. package/dist/engine/boot-validator/workspaces.d.ts +1 -1
  143. package/dist/engine/boot-validator.d.ts +1 -1
  144. package/dist/engine/bridge-stub.d.ts +1 -1
  145. package/dist/engine/build-app-schema.d.ts +2 -2
  146. package/dist/engine/build-config-feature-schema.d.ts +5 -5
  147. package/dist/engine/build-target.d.ts +2 -2
  148. package/dist/engine/changeset-changes.d.ts +1 -1
  149. package/dist/engine/codemod/index.d.ts +2 -2
  150. package/dist/engine/config-helpers.d.ts +1 -1
  151. package/dist/engine/constants.d.ts +1 -1
  152. package/dist/engine/create-app.d.ts +2 -2
  153. package/dist/engine/cross-tenant.d.ts +2 -2
  154. package/dist/engine/dedupe-features.d.ts +1 -1
  155. package/dist/engine/define-feature.d.ts +1 -1
  156. package/dist/engine/define-feature.js +2 -2
  157. package/dist/engine/define-handler.d.ts +4 -4
  158. package/dist/engine/define-step.d.ts +1 -1
  159. package/dist/engine/define-workflow.d.ts +2 -2
  160. package/dist/engine/effective-features.d.ts +1 -1
  161. package/dist/engine/embedded-derived.d.ts +1 -1
  162. package/dist/engine/entity-handlers.d.ts +6 -5
  163. package/dist/engine/entity-handlers.js +6 -3
  164. package/dist/engine/event-def.d.ts +15 -0
  165. package/dist/engine/event-def.js +123 -0
  166. package/dist/engine/event-helpers.d.ts +1 -1
  167. package/dist/engine/extension-names.d.ts +8 -8
  168. package/dist/engine/extension-selector-plugins.d.ts +2 -2
  169. package/dist/engine/extensions/escape-hatch-usage.d.ts +1 -1
  170. package/dist/engine/extensions/storage-provider.d.ts +1 -1
  171. package/dist/engine/extensions/tenant-data.d.ts +3 -3
  172. package/dist/engine/extensions/tenant-resource.d.ts +2 -2
  173. package/dist/engine/extensions/user-data.d.ts +2 -2
  174. package/dist/engine/factories.d.ts +1 -1
  175. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +2 -2
  176. package/dist/engine/feature-ast/extractors/events.d.ts +2 -2
  177. package/dist/engine/feature-ast/extractors/handlers.d.ts +4 -4
  178. package/dist/engine/feature-ast/extractors/hooks.d.ts +5 -5
  179. package/dist/engine/feature-ast/extractors/index.d.ts +14 -14
  180. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +3 -3
  181. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +3 -3
  182. package/dist/engine/feature-ast/extractors/round1.d.ts +2 -2
  183. package/dist/engine/feature-ast/extractors/round2.d.ts +2 -2
  184. package/dist/engine/feature-ast/extractors/round3.d.ts +4 -4
  185. package/dist/engine/feature-ast/extractors/round5.d.ts +2 -2
  186. package/dist/engine/feature-ast/extractors/round6.d.ts +2 -2
  187. package/dist/engine/feature-ast/extractors/shared.d.ts +2 -2
  188. package/dist/engine/feature-ast/index.d.ts +16 -16
  189. package/dist/engine/feature-ast/parse.d.ts +2 -2
  190. package/dist/engine/feature-ast/patch.d.ts +1 -1
  191. package/dist/engine/feature-ast/patcher.d.ts +15 -15
  192. package/dist/engine/feature-ast/pattern-change-schema.d.ts +10 -10
  193. package/dist/engine/feature-ast/patterns.d.ts +15 -15
  194. package/dist/engine/feature-ast/render.d.ts +1 -1
  195. package/dist/engine/feature-builder-state.d.ts +5 -5
  196. package/dist/engine/feature-config-events-jobs.d.ts +3 -3
  197. package/dist/engine/feature-config-events-jobs.js +8 -130
  198. package/dist/engine/feature-entity-handlers.d.ts +4 -4
  199. package/dist/engine/feature-entity-handlers.js +11 -5
  200. package/dist/engine/feature-manifest.d.ts +1 -1
  201. package/dist/engine/feature-ui-extensions.d.ts +7 -7
  202. package/dist/engine/feature-ui-extensions.js +2 -2
  203. package/dist/engine/field-access.d.ts +1 -1
  204. package/dist/engine/field-helpers.d.ts +1 -1
  205. package/dist/engine/handler-helpers.d.ts +1 -1
  206. package/dist/engine/index.d.ts +89 -88
  207. package/dist/engine/index.js +1 -0
  208. package/dist/engine/instruction-fields.d.ts +1 -1
  209. package/dist/engine/object-form.d.ts +1 -1
  210. package/dist/engine/object-form.js +5 -6
  211. package/dist/engine/ownership.d.ts +3 -3
  212. package/dist/engine/pattern-library/index.d.ts +2 -2
  213. package/dist/engine/pattern-library/library.d.ts +2 -2
  214. package/dist/engine/pattern-library/mixed-schemas.d.ts +1 -1
  215. package/dist/engine/pattern-library/opaque-schemas.d.ts +1 -1
  216. package/dist/engine/pattern-library/shared-fields.d.ts +1 -1
  217. package/dist/engine/pattern-library/static-schemas.d.ts +1 -1
  218. package/dist/engine/pattern-library/types.d.ts +1 -1
  219. package/dist/engine/personal-data-fields.d.ts +2 -2
  220. package/dist/engine/pipeline.d.ts +2 -2
  221. package/dist/engine/project-app-schema-for-roles.d.ts +1 -1
  222. package/dist/engine/projection-helpers.d.ts +4 -4
  223. package/dist/engine/read-claim.d.ts +1 -1
  224. package/dist/engine/registry-facade.d.ts +2 -2
  225. package/dist/engine/registry-ingest.d.ts +2 -2
  226. package/dist/engine/registry-state.d.ts +2 -2
  227. package/dist/engine/registry-validate.d.ts +3 -3
  228. package/dist/engine/registry.d.ts +1 -1
  229. package/dist/engine/resolve-config-or-param.d.ts +2 -2
  230. package/dist/engine/role-assignment.d.ts +1 -1
  231. package/dist/engine/run-in.d.ts +1 -1
  232. package/dist/engine/run-pipeline.d.ts +3 -3
  233. package/dist/engine/schema-builder.d.ts +1 -1
  234. package/dist/engine/screen-filter-ops.d.ts +1 -1
  235. package/dist/engine/screen-helpers.d.ts +2 -2
  236. package/dist/engine/soft-delete-cleanup.d.ts +2 -2
  237. package/dist/engine/steps/_event-match.d.ts +1 -1
  238. package/dist/engine/steps/_no-return-guard.d.ts +1 -1
  239. package/dist/engine/steps/_read-source.d.ts +4 -4
  240. package/dist/engine/steps/_resolver-utils.d.ts +1 -1
  241. package/dist/engine/steps/aggregate-append-event.d.ts +1 -1
  242. package/dist/engine/steps/aggregate-create.d.ts +2 -2
  243. package/dist/engine/steps/aggregate-update.d.ts +3 -3
  244. package/dist/engine/steps/branch.d.ts +1 -1
  245. package/dist/engine/steps/call-feature.d.ts +2 -2
  246. package/dist/engine/steps/compute.d.ts +1 -1
  247. package/dist/engine/steps/for-each.d.ts +1 -1
  248. package/dist/engine/steps/mail-send.d.ts +1 -1
  249. package/dist/engine/steps/read-find-many.d.ts +2 -2
  250. package/dist/engine/steps/read-find-one.d.ts +2 -2
  251. package/dist/engine/steps/retry.d.ts +1 -1
  252. package/dist/engine/steps/return.d.ts +2 -2
  253. package/dist/engine/steps/unsafe-projection-delete.d.ts +2 -2
  254. package/dist/engine/steps/unsafe-projection-upsert.d.ts +1 -1
  255. package/dist/engine/steps/wait-for-event.d.ts +1 -1
  256. package/dist/engine/steps/wait.d.ts +1 -1
  257. package/dist/engine/steps/webhook-send.d.ts +1 -1
  258. package/dist/engine/strip-disabled-features-from-app-schema.d.ts +4 -4
  259. package/dist/engine/system-user.d.ts +2 -2
  260. package/dist/engine/template-variables.d.ts +1 -1
  261. package/dist/engine/tier-resolver-extension.d.ts +4 -4
  262. package/dist/engine/transfer-adjacency.d.ts +1 -1
  263. package/dist/engine/types/index.d.ts +6 -6
  264. package/dist/engine/validate-projection-allowlist.d.ts +1 -1
  265. package/dist/engine/validation.d.ts +1 -1
  266. package/dist/entrypoint/index.d.ts +12 -12
  267. package/dist/env/dry-run.d.ts +14 -1
  268. package/dist/env/dry-run.js +50 -0
  269. package/dist/env/index.d.ts +54 -16
  270. package/dist/env/index.js +76 -7
  271. package/dist/errors/classes.d.ts +3 -3
  272. package/dist/errors/docs-url.d.ts +1 -1
  273. package/dist/errors/index.d.ts +18 -18
  274. package/dist/errors/member-resolution.d.ts +1 -1
  275. package/dist/errors/serialize.d.ts +2 -2
  276. package/dist/errors/subject-erased.d.ts +1 -1
  277. package/dist/errors/to-kumiko-error.d.ts +1 -1
  278. package/dist/errors/write-error-info.d.ts +1 -1
  279. package/dist/errors/zod-bridge.d.ts +1 -1
  280. package/dist/es-ops/context.d.ts +4 -4
  281. package/dist/es-ops/index.d.ts +4 -4
  282. package/dist/es-ops/operations-schema.d.ts +1 -1
  283. package/dist/es-ops/runner.d.ts +3 -3
  284. package/dist/es-ops/runner.js +9 -1
  285. package/dist/es-ops/types.d.ts +2 -2
  286. package/dist/event-store/admin-api.d.ts +3 -3
  287. package/dist/event-store/archive.d.ts +2 -2
  288. package/dist/event-store/event-store.d.ts +2 -2
  289. package/dist/event-store/events-schema.d.ts +1 -1
  290. package/dist/event-store/index.d.ts +15 -15
  291. package/dist/event-store/provenance-append.d.ts +3 -3
  292. package/dist/event-store/rebuild-dead-letter.d.ts +2 -2
  293. package/dist/event-store/row-to-stored-event.d.ts +2 -2
  294. package/dist/event-store/snapshot.d.ts +2 -2
  295. package/dist/event-store/tenant-db-append.d.ts +2 -2
  296. package/dist/event-store/transfer.d.ts +3 -3
  297. package/dist/event-store/upcaster-dead-letter.d.ts +2 -2
  298. package/dist/event-store/upcaster.d.ts +3 -3
  299. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -2
  300. package/dist/files/bind-pending-file-refs.d.ts +3 -3
  301. package/dist/files/create-file-ref-from-bytes.d.ts +4 -4
  302. package/dist/files/create-file-ref.d.ts +3 -3
  303. package/dist/files/dispose-removed-file-refs.d.ts +2 -2
  304. package/dist/files/feature.d.ts +3 -3
  305. package/dist/files/file-handle.d.ts +1 -1
  306. package/dist/files/file-ref-entity.d.ts +1 -1
  307. package/dist/files/file-ref-table.d.ts +1 -1
  308. package/dist/files/file-routes.d.ts +5 -5
  309. package/dist/files/in-memory-provider.d.ts +1 -1
  310. package/dist/files/index.d.ts +20 -20
  311. package/dist/files/load-save-file-refs.d.ts +2 -2
  312. package/dist/files/local-provider.d.ts +1 -1
  313. package/dist/files/provider-resolver.d.ts +5 -5
  314. package/dist/files/purge-expired-file-ref-bytes.d.ts +2 -2
  315. package/dist/files/record-read-check.d.ts +1 -1
  316. package/dist/files/record-write-check.d.ts +3 -3
  317. package/dist/files/storage-tracking.d.ts +2 -2
  318. package/dist/files/types.d.ts +1 -1
  319. package/dist/files/zip-stream.d.ts +1 -1
  320. package/dist/i18n/index.d.ts +4 -4
  321. package/dist/i18n/mail-registry.d.ts +1 -1
  322. package/dist/i18n/required-surface-keys.d.ts +1 -1
  323. package/dist/i18n/settings-hub-keys.d.ts +1 -1
  324. package/dist/internal/stack-support.d.ts +12 -12
  325. package/dist/internal/testing.d.ts +4 -4
  326. package/dist/jobs/index.d.ts +2 -2
  327. package/dist/jobs/job-runner.d.ts +1 -1
  328. package/dist/jobs/max-per-tenant.d.ts +1 -1
  329. package/dist/lifecycle/index.d.ts +2 -2
  330. package/dist/lifecycle/lifecycle.d.ts +1 -1
  331. package/dist/lifecycle/signal-handlers.d.ts +1 -1
  332. package/dist/logging/index.d.ts +4 -4
  333. package/dist/logging/pino-logger.d.ts +1 -1
  334. package/dist/logging/utils.d.ts +1 -1
  335. package/dist/migrations/index.d.ts +4 -4
  336. package/dist/migrations/kumiko-drift.d.ts +1 -1
  337. package/dist/migrations/pending-rebuilds.d.ts +5 -5
  338. package/dist/migrations/pii-event-backfill.d.ts +4 -4
  339. package/dist/migrations/projection-table-index.d.ts +1 -1
  340. package/dist/observability/console-provider.d.ts +1 -1
  341. package/dist/observability/context.d.ts +1 -1
  342. package/dist/observability/escape-hatch-report.d.ts +3 -3
  343. package/dist/observability/fallback.d.ts +1 -1
  344. package/dist/observability/index.d.ts +16 -16
  345. package/dist/observability/metric-validator.d.ts +1 -1
  346. package/dist/observability/metrics-handle.d.ts +1 -1
  347. package/dist/observability/metrics-wiring.d.ts +2 -2
  348. package/dist/observability/noop-provider.d.ts +1 -1
  349. package/dist/observability/prometheus-meter.d.ts +1 -1
  350. package/dist/observability/recording-meter.d.ts +1 -1
  351. package/dist/observability/recording-tracer.d.ts +1 -1
  352. package/dist/observability/redis-wrapper.d.ts +1 -1
  353. package/dist/observability/sensitive-filter.d.ts +1 -1
  354. package/dist/observability/standard-metrics.d.ts +1 -1
  355. package/dist/pipeline/active-membership.d.ts +4 -4
  356. package/dist/pipeline/append-event-core.d.ts +3 -3
  357. package/dist/pipeline/auth-claims-resolver.d.ts +2 -2
  358. package/dist/pipeline/cascade-handler.d.ts +3 -3
  359. package/dist/pipeline/dispatch-batch.d.ts +2 -2
  360. package/dist/pipeline/dispatch-query.d.ts +4 -4
  361. package/dist/pipeline/dispatch-shared.d.ts +17 -17
  362. package/dist/pipeline/dispatch-stream.d.ts +2 -2
  363. package/dist/pipeline/dispatch-write.d.ts +4 -4
  364. package/dist/pipeline/dispatcher-utils.d.ts +2 -2
  365. package/dist/pipeline/dispatcher.d.ts +12 -12
  366. package/dist/pipeline/event-consumer-state.d.ts +1 -1
  367. package/dist/pipeline/event-dispatcher-admin.d.ts +1 -1
  368. package/dist/pipeline/event-dispatcher-delivery.d.ts +7 -7
  369. package/dist/pipeline/event-dispatcher.d.ts +7 -7
  370. package/dist/pipeline/event-retention.d.ts +1 -1
  371. package/dist/pipeline/handler-access-error.d.ts +2 -2
  372. package/dist/pipeline/index.d.ts +42 -42
  373. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  374. package/dist/pipeline/lifecycle-pipeline.d.ts +2 -2
  375. package/dist/pipeline/member-read-only-transaction.d.ts +2 -2
  376. package/dist/pipeline/member-reader.d.ts +5 -5
  377. package/dist/pipeline/msp-rebuild.d.ts +4 -4
  378. package/dist/pipeline/multi-stream-apply-context.d.ts +3 -3
  379. package/dist/pipeline/notify-scope.d.ts +3 -3
  380. package/dist/pipeline/pending-gap-ranges.d.ts +2 -2
  381. package/dist/pipeline/pre-handler-gates.d.ts +3 -3
  382. package/dist/pipeline/pre-transaction-reservations.d.ts +4 -4
  383. package/dist/pipeline/projection-rebuild.d.ts +3 -3
  384. package/dist/pipeline/projection-state.d.ts +1 -1
  385. package/dist/pipeline/projections-runner.d.ts +3 -3
  386. package/dist/pipeline/projections-runner.js +3 -4
  387. package/dist/pipeline/system-hooks.d.ts +4 -4
  388. package/dist/pipeline/system-identity-switch.d.ts +3 -3
  389. package/dist/pipeline/tenant-timezone-cache.d.ts +1 -1
  390. package/dist/pipeline/write-origin.d.ts +3 -3
  391. package/dist/pipeline/write-result-masking.d.ts +2 -2
  392. package/dist/random/index.d.ts +2 -2
  393. package/dist/rate-limit/bucket.d.ts +1 -1
  394. package/dist/rate-limit/index.d.ts +3 -3
  395. package/dist/rate-limit/middleware.d.ts +3 -3
  396. package/dist/redis/cache-sync-bus.d.ts +2 -2
  397. package/dist/redis/cache-sync-topics.d.ts +1 -1
  398. package/dist/redis/index.d.ts +8 -8
  399. package/dist/redis/pubsub-signal.d.ts +1 -1
  400. package/dist/schema-cli.d.ts +1 -1
  401. package/dist/schema-cli.js +21 -2
  402. package/dist/search/derive-search-adapter-config.d.ts +2 -2
  403. package/dist/search/in-memory-adapter.d.ts +1 -1
  404. package/dist/search/index.d.ts +6 -6
  405. package/dist/search/meilisearch-adapter.d.ts +2 -2
  406. package/dist/search/purge-subject.d.ts +4 -4
  407. package/dist/search/reindex-entity.d.ts +3 -3
  408. package/dist/secrets/dek-cache.d.ts +1 -1
  409. package/dist/secrets/env-master-key-provider.d.ts +1 -1
  410. package/dist/secrets/env-master-key-provider.js +26 -11
  411. package/dist/secrets/envelope-cipher.d.ts +2 -2
  412. package/dist/secrets/envelope.d.ts +1 -1
  413. package/dist/secrets/index.d.ts +9 -9
  414. package/dist/secrets/rotation.d.ts +1 -1
  415. package/dist/secrets/stored-envelope.d.ts +1 -1
  416. package/dist/seeding/entity-seed.d.ts +1 -1
  417. package/dist/seeding/index.d.ts +3 -3
  418. package/dist/seeding/seed-users.d.ts +1 -1
  419. package/dist/time/index.d.ts +6 -6
  420. package/dist/ui-types/app-schema.d.ts +5 -5
  421. package/dist/ui-types/index.d.ts +23 -23
  422. package/dist/upgrade-cli.js +13 -3
  423. package/dist/utils/index.d.ts +9 -9
  424. package/package.json +19 -66
  425. package/presets/biome-app.json +80 -0
  426. package/presets/tsconfig.app.json +19 -0
  427. package/src/changes.json +84 -2
  428. package/src/scripts/codemod/README.md +18 -0
  429. package/src/scripts/codemod/codemod-support.ts +1 -1
  430. package/src/scripts/codemod/db-factory.ts +1 -1
  431. package/src/scripts/codemod/feature-factory.ts +1 -1
  432. package/src/scripts/codemod/import-extensions.ts +118 -0
  433. package/src/scripts/codemod/migrate-cross-tenant.ts +2 -2
  434. package/src/scripts/codemod/migrate-db-raw.ts +1 -1
  435. package/src/scripts/codemod/migrate-open-to-all.ts +1 -1
  436. package/src/scripts/codemod/object-form.ts +1 -1
  437. package/src/scripts/codemod/s3-imports.ts +1 -1
  438. package/src/scripts/codemod/tenant-db-options.ts +1 -1
  439. package/src/scripts/codemod/testing-move.ts +2 -2
  440. package/dist/db/bun-db-deprecated.d.ts +0 -10
  441. package/dist/db/bun-db-deprecated.js +0 -5
  442. package/dist/stack/index.d.ts +0 -10
  443. package/dist/stack/index.js +0 -11
  444. package/dist/testing/e2e-generator.d.ts +0 -5
  445. package/dist/testing/e2e-generator.js +0 -5
  446. package/dist/testing/handler-context.d.ts +0 -5
  447. package/dist/testing/handler-context.js +0 -5
  448. package/dist/testing/index.d.ts +0 -10
  449. package/dist/testing/index.js +0 -10
  450. package/dist/testing/real-providers.d.ts +0 -5
  451. package/dist/testing/real-providers.js +0 -5
@@ -3,6 +3,7 @@
3
3
  // without a maintenance window. See loadKeyring + resolveCurrentVersion at
4
4
  // the bottom for the env contract.
5
5
  import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
6
+ import { isDryRunEnvActive } from "../env/dry-run.js";
6
7
  import { InternalError } from "../errors/index.js";
7
8
  const ALGORITHM = "aes-256-gcm";
8
9
  const KEK_LENGTH = 32; // AES-256
@@ -10,21 +11,22 @@ const IV_LENGTH = 12;
10
11
  const TAG_LENGTH = 16;
11
12
  export function createEnvMasterKeyProvider(opts = {}) {
12
13
  const env = opts.env ?? process.env;
13
- const keyring = loadKeyring(env);
14
- const current = resolveCurrentVersion(env);
15
- // --- Boot validation (after keyring + current are known) -------------
16
- if (!keyring.has(current)) {
17
- throw new InternalError({
18
- message: `[secrets] currentVersion=${current} not present in keyring ` +
19
- `(have versions: ${[...keyring.keys()].sort().join(",")}). ` +
20
- `Check KUMIKO_SECRETS_MASTER_KEY_V${current} is set.`,
21
- });
22
- }
14
+ let loaded;
15
+ const keyringState = () => {
16
+ loaded ??= loadValidatedKeyring(env);
17
+ return loaded;
18
+ };
19
+ // Apps build this provider at module load, before runProdApp runs. A dry
20
+ // run inspects an env that may hold no key yet, so the check moves to the
21
+ // first key operation there; a real boot still fails here, at construction.
22
+ if (!isDryRunEnvActive(env) && !isDryRunEnvActive(process.env))
23
+ keyringState();
23
24
  // --- KEK-wrap / unwrap boilerplate (AES-256-GCM) ---------------------
24
25
  // The DEK is the plaintext here; we encrypt it with the KEK. Same
25
26
  // algorithm as the value encryption, just a different role.
26
27
  return {
27
28
  async wrapDek(dek) {
29
+ const { keyring, current } = keyringState();
28
30
  const kek = keyring.get(current);
29
31
  if (!kek) {
30
32
  // Should never reach here — boot validation above guarantees the
@@ -47,6 +49,7 @@ export function createEnvMasterKeyProvider(opts = {}) {
47
49
  };
48
50
  },
49
51
  async unwrapDek(encryptedDek, kekVersion) {
52
+ const { keyring } = keyringState();
50
53
  const kek = keyring.get(kekVersion);
51
54
  if (!kek) {
52
55
  throw new InternalError({
@@ -63,7 +66,7 @@ export function createEnvMasterKeyProvider(opts = {}) {
63
66
  return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
64
67
  },
65
68
  currentVersion() {
66
- return current;
69
+ return keyringState().current;
67
70
  },
68
71
  async isAvailable() {
69
72
  // Env-backed provider is always "available" once boot passed — the
@@ -73,6 +76,18 @@ export function createEnvMasterKeyProvider(opts = {}) {
73
76
  },
74
77
  };
75
78
  }
79
+ function loadValidatedKeyring(env) {
80
+ const keyring = loadKeyring(env);
81
+ const current = resolveCurrentVersion(env);
82
+ if (!keyring.has(current)) {
83
+ throw new InternalError({
84
+ message: `[secrets] currentVersion=${current} not present in keyring ` +
85
+ `(have versions: ${[...keyring.keys()].sort().join(",")}). ` +
86
+ `Check KUMIKO_SECRETS_MASTER_KEY_V${current} is set.`,
87
+ });
88
+ }
89
+ return { keyring, current };
90
+ }
76
91
  // ENV schema (Decision 1 — per-version variables):
77
92
  // KUMIKO_SECRETS_MASTER_KEY_V1=<base64 32 bytes>
78
93
  // KUMIKO_SECRETS_MASTER_KEY_V2=<base64 32 bytes>
@@ -1,6 +1,6 @@
1
1
  import type { EnvelopeCipher } from "@cosmicdrift/kumiko-types/envelope-cipher-types";
2
- import type { DekCache } from "./dek-cache.js";
3
- import type { MasterKeyProvider } from "./types.js";
2
+ import type { DekCache } from "./dek-cache.ts";
3
+ import type { MasterKeyProvider } from "./types.ts";
4
4
  export type { EnvelopeCipher } from "@cosmicdrift/kumiko-types/envelope-cipher-types";
5
5
  export type EnvelopeCipherOptions = {
6
6
  readonly dekCache?: DekCache;
@@ -1,3 +1,3 @@
1
- import type { Envelope, KeyScope, MasterKeyProvider } from "./types.js";
1
+ import type { Envelope, KeyScope, MasterKeyProvider } from "./types.ts";
2
2
  export declare function encryptValue(plaintext: string, provider: MasterKeyProvider, scope?: KeyScope): Promise<Envelope>;
3
3
  export declare function decryptValue(envelope: Envelope, provider: MasterKeyProvider, scope?: KeyScope): Promise<string>;
@@ -1,9 +1,9 @@
1
- export { createDekCache, type DekCache, type DekCacheOptions, withDekCache } from "./dek-cache.js";
2
- export { derivePurposeSecret } from "./derive-purpose-secret.js";
3
- export { createEnvMasterKeyProvider, type EnvMasterKeyProviderOptions, type Keyring, } from "./env-master-key-provider.js";
4
- export { decryptValue, encryptValue } from "./envelope.js";
5
- export { createEnvelopeCipher, type EnvelopeCipher, type EnvelopeCipherOptions, } from "./envelope-cipher.js";
6
- export { assertNoSecretLeak } from "./leak-guard.js";
7
- export { rewrapDek } from "./rotation.js";
8
- export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, type StoredEnvelope, } from "./stored-envelope.js";
9
- export { type ContainsSecret, createSecret, type Envelope, isSecret, type KeyScope, type MasterKeyProvider, type Secret, type SecretAuditContext, type SecretKeyRef, type SecretsContext, } from "./types.js";
1
+ export { createDekCache, type DekCache, type DekCacheOptions, withDekCache } from "./dek-cache.ts";
2
+ export { derivePurposeSecret } from "./derive-purpose-secret.ts";
3
+ export { createEnvMasterKeyProvider, type EnvMasterKeyProviderOptions, type Keyring, } from "./env-master-key-provider.ts";
4
+ export { decryptValue, encryptValue } from "./envelope.ts";
5
+ export { createEnvelopeCipher, type EnvelopeCipher, type EnvelopeCipherOptions, } from "./envelope-cipher.ts";
6
+ export { assertNoSecretLeak } from "./leak-guard.ts";
7
+ export { rewrapDek } from "./rotation.ts";
8
+ export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, type StoredEnvelope, } from "./stored-envelope.ts";
9
+ export { type ContainsSecret, createSecret, type Envelope, isSecret, type KeyScope, type MasterKeyProvider, type Secret, type SecretAuditContext, type SecretKeyRef, type SecretsContext, } from "./types.ts";
@@ -1,2 +1,2 @@
1
- import type { Envelope, MasterKeyProvider } from "./types.js";
1
+ import type { Envelope, MasterKeyProvider } from "./types.ts";
2
2
  export declare function rewrapDek(envelope: Envelope, provider: MasterKeyProvider): Promise<Envelope>;
@@ -1,4 +1,4 @@
1
- import type { Envelope } from "./types.js";
1
+ import type { Envelope } from "./types.ts";
2
2
  export type StoredEnvelope = {
3
3
  readonly ciphertext: string;
4
4
  readonly iv: string;
@@ -1,4 +1,4 @@
1
- import { type SeedIfExists } from "./types.js";
1
+ import { type SeedIfExists } from "./types.ts";
2
2
  export type EventStoreSeedExisting<TId extends string | number = string> = {
3
3
  readonly id: TId;
4
4
  readonly version: number;
@@ -1,3 +1,3 @@
1
- export { type EventStoreSeedExisting, type RunEventStoreSeedOptions, runEventStoreSeed, } from "./entity-seed.js";
2
- export { createTestUser, TestUsers, testTenantId, testUserId } from "./seed-users.js";
3
- export { DEFAULT_SEED_IF_EXISTS, type SeedIfExists } from "./types.js";
1
+ export { type EventStoreSeedExisting, type RunEventStoreSeedOptions, runEventStoreSeed, } from "./entity-seed.ts";
2
+ export { createTestUser, TestUsers, testTenantId, testUserId } from "./seed-users.ts";
3
+ export { DEFAULT_SEED_IF_EXISTS, type SeedIfExists } from "./types.ts";
@@ -1,4 +1,4 @@
1
- import type { SessionUser, TenantId } from "../engine/types/index.js";
1
+ import type { SessionUser, TenantId } from "../engine/types/index.ts";
2
2
  export declare function testTenantId(n: number): TenantId;
3
3
  export declare function testUserId(n: number): string;
4
4
  export declare const TestUsers: {
@@ -1,6 +1,6 @@
1
- export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.js";
2
- export type { GeoAddress, GeoCoordinates, GeoTzProvider } from "./geo-tz.js";
3
- export { isValidIanaTimeZone } from "./iana.js";
4
- export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.js";
5
- export { ensureTemporalPolyfill, getTemporal } from "./polyfill.js";
6
- export { type Clock, createTzContext, createTzContextAsync, type LocatedTimestampJson, type TzContext, type TzContextOptions, } from "./tz-context.js";
1
+ export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.ts";
2
+ export type { GeoAddress, GeoCoordinates, GeoTzProvider } from "./geo-tz.ts";
3
+ export { isValidIanaTimeZone } from "./iana.ts";
4
+ export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.ts";
5
+ export { ensureTemporalPolyfill, getTemporal } from "./polyfill.ts";
6
+ export { type Clock, createTzContext, createTzContextAsync, type LocatedTimestampJson, type TzContext, type TzContextOptions, } from "./tz-context.ts";
@@ -1,8 +1,8 @@
1
- import type { TranslationKeys } from "../engine/types/config.js";
2
- import type { EntityDefinition } from "../engine/types/fields.js";
3
- import type { ContentCollectionDefinition, NavDefinition } from "../engine/types/nav.js";
4
- import type { ScreenDefinition } from "../engine/types/screen.js";
5
- import type { WorkspaceDefinition } from "../engine/types/workspace.js";
1
+ import type { TranslationKeys } from "../engine/types/config.ts";
2
+ import type { EntityDefinition } from "../engine/types/fields.ts";
3
+ import type { ContentCollectionDefinition, NavDefinition } from "../engine/types/nav.ts";
4
+ import type { ScreenDefinition } from "../engine/types/screen.ts";
5
+ import type { WorkspaceDefinition } from "../engine/types/workspace.ts";
6
6
  export type FeatureSchema = {
7
7
  readonly featureName: string;
8
8
  readonly entities: Readonly<Record<string, EntityDefinition>>;
@@ -1,24 +1,24 @@
1
1
  export { NO_WIDGET_FIELD_TYPES } from "@cosmicdrift/kumiko-types/fields";
2
- export type { DerivedCellRoundingTarget } from "../engine/embedded-derived.js";
3
- export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived.js";
4
- export type { ParsedRefTarget } from "../engine/parse-ref-target.js";
5
- export { parseRefTarget } from "../engine/parse-ref-target.js";
6
- export type { FieldsOrGroupsSection, UnavailableSelectOption } from "../engine/screen-helpers.js";
7
- export { availableSelectOptions, evalFieldCondition, explicitListScreenId, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.js";
8
- export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.js";
9
- export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.js";
10
- export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.js";
11
- export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.js";
12
- export type { ActionFormFooterAction, ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, EntityWriteExcludedFields, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListGroupBy, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.js";
13
- export { metricField, relatedListGroupHeaderLabel, relatedListGroupKey, } from "../engine/types/screen.js";
14
- export type { TargetRef } from "../engine/types/target-ref.js";
15
- export type { TreeAction, TreeNode, TreeNodeState } from "../engine/types/tree-node.js";
16
- export type { WorkspaceDefinition } from "../engine/types/workspace.js";
17
- export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.js";
18
- export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app-schema.js";
19
- export type { CardColumnRoles, CardRoleColumn } from "./card-column-roles.js";
20
- export { CARD_META_MAX, cardColumnRoles, cardFileDisplayKind } from "./card-column-roles.js";
21
- export { type Formality, formalLocaleTag } from "./formality.js";
22
- export type { ListRowMetaColumnType, ListRowMetaReference, ReferenceLookupSource, SystemReferenceLabel, } from "./list-row-meta.js";
23
- export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, } from "./list-row-meta.js";
24
- export { type PluralForms, resolveTranslationValue, type TranslationValue, translationValueOtherText, } from "./plural.js";
2
+ export type { DerivedCellRoundingTarget } from "../engine/embedded-derived.ts";
3
+ export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived.ts";
4
+ export type { ParsedRefTarget } from "../engine/parse-ref-target.ts";
5
+ export { parseRefTarget } from "../engine/parse-ref-target.ts";
6
+ export type { FieldsOrGroupsSection, UnavailableSelectOption } from "../engine/screen-helpers.ts";
7
+ export { availableSelectOptions, evalFieldCondition, explicitListScreenId, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.ts";
8
+ export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.ts";
9
+ export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.ts";
10
+ export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.ts";
11
+ export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.ts";
12
+ export type { ActionFormFooterAction, ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, EntityWriteExcludedFields, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListGroupBy, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.ts";
13
+ export { metricField, relatedListGroupHeaderLabel, relatedListGroupKey, } from "../engine/types/screen.ts";
14
+ export type { TargetRef } from "../engine/types/target-ref.ts";
15
+ export type { TreeAction, TreeNode, TreeNodeState } from "../engine/types/tree-node.ts";
16
+ export type { WorkspaceDefinition } from "../engine/types/workspace.ts";
17
+ export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.ts";
18
+ export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app-schema.ts";
19
+ export type { CardColumnRoles, CardRoleColumn } from "./card-column-roles.ts";
20
+ export { CARD_META_MAX, cardColumnRoles, cardFileDisplayKind } from "./card-column-roles.ts";
21
+ export { type Formality, formalLocaleTag } from "./formality.ts";
22
+ export type { ListRowMetaColumnType, ListRowMetaReference, ReferenceLookupSource, SystemReferenceLabel, } from "./list-row-meta.ts";
23
+ export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, } from "./list-row-meta.ts";
24
+ export { type PluralForms, resolveTranslationValue, type TranslationValue, translationValueOtherText, } from "./plural.ts";
@@ -284,6 +284,18 @@ async function runCodemodScript(scriptPath, targetDir, repoRoot, dryRun) {
284
284
  ]);
285
285
  return { ok: exitCode === 0, output: `${stdout}${stderr}`.trim() };
286
286
  }
287
+ // One codemod can back the breaking entries of many features in the same release
288
+ // (each feature's changelog names its own removed export); it runs once per version.
289
+ function uniqueCodemodRunsPerVersion(entries) {
290
+ const seenRuns = new Set();
291
+ return entries.filter((e) => {
292
+ const runKey = `${e.version}\0${e.codemod}`;
293
+ if (seenRuns.has(runKey))
294
+ return false;
295
+ seenRuns.add(runKey);
296
+ return true;
297
+ });
298
+ }
287
299
  function hasCodemod(e) {
288
300
  return typeof e.codemod === "string" && e.codemod.length > 0;
289
301
  }
@@ -476,9 +488,7 @@ markerVersion, previous) {
476
488
  const breaking = pending.filter((e) => e.type === "breaking");
477
489
  // A codemod is worth running whatever the entry's type: an improvement that
478
490
  // moves a module ships one too, and skipping it leaves the deprecated path in place.
479
- const codemodEntries = pending
480
- .filter(hasCodemod)
481
- .sort((a, b) => compareVersions(a.version, b.version));
491
+ const codemodEntries = uniqueCodemodRunsPerVersion(pending.filter(hasCodemod).sort((a, b) => compareVersions(a.version, b.version)));
482
492
  const manualEntries = breaking.filter(needsManualMigration);
483
493
  for (const e of manualEntries) {
484
494
  out.log(hasCodemod(e)
@@ -1,9 +1,9 @@
1
- export { assertUnreachable } from "./assert.js";
2
- export { toSnakeCase } from "./case.js";
3
- export { compareByCodepoint } from "./compare.js";
4
- export { readPositiveIntEnv } from "./env-parse.js";
5
- export { generateDeterministicId, generateId } from "./ids.js";
6
- export { isPlainObject } from "./is-plain-object.js";
7
- export { parseStringArrayJson } from "./parse-string-array-json.js";
8
- export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.js";
9
- export { parseRoles } from "./serialization.js";
1
+ export { assertUnreachable } from "./assert.ts";
2
+ export { toSnakeCase } from "./case.ts";
3
+ export { compareByCodepoint } from "./compare.ts";
4
+ export { readPositiveIntEnv } from "./env-parse.ts";
5
+ export { generateDeterministicId, generateId } from "./ids.ts";
6
+ export { isPlainObject } from "./is-plain-object.ts";
7
+ export { parseStringArrayJson } from "./parse-string-array-json.ts";
8
+ export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.ts";
9
+ export { parseRoles } from "./serialization.ts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-framework",
3
- "version": "0.369.0",
3
+ "version": "0.371.0",
4
4
  "description": "Framework core — engine, pipeline, API, DB, and every other bit that makes Kumiko go.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -26,11 +26,7 @@
26
26
  "kumiko": {
27
27
  "runtime": "runtime",
28
28
  "bunOnlyExports": [
29
- "./engine/codemod",
30
- "./stack",
31
- "./testing",
32
- "./testing/e2e-generator",
33
- "./testing/real-providers"
29
+ "./engine/codemod"
34
30
  ]
35
31
  },
36
32
  "exports": {
@@ -38,6 +34,12 @@
38
34
  "types": "./dist/compliance/index.d.ts",
39
35
  "default": "./dist/compliance/index.js"
40
36
  },
37
+ "./config": {
38
+ "types": "./dist/config/index.d.ts",
39
+ "default": "./dist/config/index.js"
40
+ },
41
+ "./biome": "./presets/biome-app.json",
42
+ "./tsconfig.app.json": "./presets/tsconfig.app.json",
41
43
  "./es-ops": {
42
44
  "types": "./dist/es-ops/index.d.ts",
43
45
  "default": "./dist/es-ops/index.js"
@@ -66,10 +68,6 @@
66
68
  "types": "./dist/errors/index.d.ts",
67
69
  "default": "./dist/errors/index.js"
68
70
  },
69
- "./bun-db": {
70
- "types": "./dist/db/bun-db-deprecated.d.ts",
71
- "default": "./dist/db/bun-db-deprecated.js"
72
- },
73
71
  "./db": {
74
72
  "types": "./dist/db/index.d.ts",
75
73
  "default": "./dist/db/index.js"
@@ -174,22 +172,6 @@
174
172
  "types": "./dist/arg-parser.d.ts",
175
173
  "default": "./dist/arg-parser.js"
176
174
  },
177
- "./stack": {
178
- "types": "./dist/stack/index.d.ts",
179
- "default": "./dist/stack/index.js"
180
- },
181
- "./testing": {
182
- "types": "./dist/testing/index.d.ts",
183
- "default": "./dist/testing/index.js"
184
- },
185
- "./testing/handler-context": {
186
- "types": "./dist/testing/handler-context.d.ts",
187
- "default": "./dist/testing/handler-context.js"
188
- },
189
- "./testing/real-providers": {
190
- "types": "./dist/testing/real-providers.d.ts",
191
- "default": "./dist/testing/real-providers.js"
192
- },
193
175
  "./internal/request-context": {
194
176
  "types": "./dist/api/request-context.d.ts",
195
177
  "default": "./dist/api/request-context.js"
@@ -202,10 +184,6 @@
202
184
  "types": "./dist/internal/testing.d.ts",
203
185
  "default": "./dist/internal/testing.js"
204
186
  },
205
- "./testing/e2e-generator": {
206
- "types": "./dist/testing/e2e-generator.d.ts",
207
- "default": "./dist/testing/e2e-generator.js"
208
- },
209
187
  "./time": {
210
188
  "types": "./dist/time/index.d.ts",
211
189
  "default": "./dist/time/index.js"
@@ -221,8 +199,8 @@
221
199
  "./package.json": "./package.json"
222
200
  },
223
201
  "dependencies": {
224
- "@cosmicdrift/kumiko-http": "0.369.0",
225
- "@cosmicdrift/kumiko-types": "0.369.0",
202
+ "@cosmicdrift/kumiko-http": "0.371.0",
203
+ "@cosmicdrift/kumiko-types": "0.371.0",
226
204
  "bullmq": "^5.76.7",
227
205
  "bun-types": "^1.3.13",
228
206
  "hono": "^4.13.1",
@@ -238,19 +216,11 @@
238
216
  "zod": "^4.4.3"
239
217
  },
240
218
  "devDependencies": {
241
- "@cosmicdrift/kumiko-dispatcher-live": "0.369.0",
242
- "@cosmicdrift/kumiko-testing": "0.369.0",
219
+ "@cosmicdrift/kumiko-dispatcher-live": "0.371.0",
220
+ "@cosmicdrift/kumiko-testing": "0.371.0",
243
221
  "bun-types": "^1.3.13",
244
222
  "pino-pretty": "^13.1.3"
245
223
  },
246
- "peerDependencies": {
247
- "@cosmicdrift/kumiko-testing": ">=0.366.0 <1.0.0"
248
- },
249
- "peerDependenciesMeta": {
250
- "@cosmicdrift/kumiko-testing": {
251
- "optional": true
252
- }
253
- },
254
224
  "publishConfig": {
255
225
  "registry": "https://registry.npmjs.org",
256
226
  "access": "public",
@@ -259,6 +229,12 @@
259
229
  "types": "./dist/compliance/index.d.ts",
260
230
  "default": "./dist/compliance/index.js"
261
231
  },
232
+ "./config": {
233
+ "types": "./dist/config/index.d.ts",
234
+ "default": "./dist/config/index.js"
235
+ },
236
+ "./biome": "./presets/biome-app.json",
237
+ "./tsconfig.app.json": "./presets/tsconfig.app.json",
262
238
  "./es-ops": {
263
239
  "types": "./dist/es-ops/index.d.ts",
264
240
  "default": "./dist/es-ops/index.js"
@@ -287,10 +263,6 @@
287
263
  "types": "./dist/errors/index.d.ts",
288
264
  "default": "./dist/errors/index.js"
289
265
  },
290
- "./bun-db": {
291
- "types": "./dist/db/bun-db-deprecated.d.ts",
292
- "default": "./dist/db/bun-db-deprecated.js"
293
- },
294
266
  "./db": {
295
267
  "types": "./dist/db/index.d.ts",
296
268
  "default": "./dist/db/index.js"
@@ -395,22 +367,6 @@
395
367
  "types": "./dist/arg-parser.d.ts",
396
368
  "default": "./dist/arg-parser.js"
397
369
  },
398
- "./stack": {
399
- "types": "./dist/stack/index.d.ts",
400
- "default": "./dist/stack/index.js"
401
- },
402
- "./testing": {
403
- "types": "./dist/testing/index.d.ts",
404
- "default": "./dist/testing/index.js"
405
- },
406
- "./testing/handler-context": {
407
- "types": "./dist/testing/handler-context.d.ts",
408
- "default": "./dist/testing/handler-context.js"
409
- },
410
- "./testing/real-providers": {
411
- "types": "./dist/testing/real-providers.d.ts",
412
- "default": "./dist/testing/real-providers.js"
413
- },
414
370
  "./internal/request-context": {
415
371
  "types": "./dist/api/request-context.d.ts",
416
372
  "default": "./dist/api/request-context.js"
@@ -423,10 +379,6 @@
423
379
  "types": "./dist/internal/testing.d.ts",
424
380
  "default": "./dist/internal/testing.js"
425
381
  },
426
- "./testing/e2e-generator": {
427
- "types": "./dist/testing/e2e-generator.d.ts",
428
- "default": "./dist/testing/e2e-generator.js"
429
- },
430
382
  "./time": {
431
383
  "types": "./dist/time/index.d.ts",
432
384
  "default": "./dist/time/index.js"
@@ -444,6 +396,7 @@
444
396
  },
445
397
  "files": [
446
398
  "dist",
399
+ "presets",
447
400
  "src/changes.json",
448
401
  "src/scripts/codemod",
449
402
  "README.md",
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.5.7/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": false,
7
+ "defaultBranch": "main"
8
+ },
9
+ "files": {
10
+ "includes": [
11
+ "src/**",
12
+ "bin/**",
13
+ "kumiko/**",
14
+ "e2e/**",
15
+ "scripts/**",
16
+ "kumiko.config.ts",
17
+ "playwright.config.ts",
18
+ "!**/node_modules",
19
+ "!**/dist",
20
+ "!**/dist-server",
21
+ "!kumiko/migrations",
22
+ "!test-results",
23
+ "!playwright-report"
24
+ ]
25
+ },
26
+ "formatter": {
27
+ "enabled": true,
28
+ "indentStyle": "space",
29
+ "indentWidth": 2,
30
+ "lineWidth": 100,
31
+ "lineEnding": "lf"
32
+ },
33
+ "css": {
34
+ "parser": { "cssModules": false, "tailwindDirectives": true }
35
+ },
36
+ "javascript": {
37
+ "formatter": {
38
+ "quoteStyle": "double",
39
+ "jsxQuoteStyle": "double",
40
+ "semicolons": "always",
41
+ "trailingCommas": "all",
42
+ "arrowParentheses": "always"
43
+ }
44
+ },
45
+ "json": { "formatter": { "indentWidth": 2, "lineWidth": 80 } },
46
+ "linter": {
47
+ "enabled": true,
48
+ "rules": {
49
+ "preset": "recommended",
50
+ "correctness": {
51
+ "noUnusedVariables": "error",
52
+ "noUnusedImports": "error"
53
+ },
54
+ "suspicious": {
55
+ "noExplicitAny": "error",
56
+ "noDebugger": "error",
57
+ "noConsole": "warn"
58
+ },
59
+ "complexity": { "useLiteralKeys": "off" },
60
+ "style": { "useConst": "error" },
61
+ "nursery": { "noFloatingPromises": "error" }
62
+ }
63
+ },
64
+ "overrides": [
65
+ {
66
+ "includes": [
67
+ "**/*.test.ts",
68
+ "**/*.spec.ts",
69
+ "**/*.integration.ts",
70
+ "**/*.e2e.ts"
71
+ ],
72
+ "linter": {
73
+ "rules": {
74
+ "suspicious": { "noConsole": "off" },
75
+ "style": { "noNonNullAssertion": "off" }
76
+ }
77
+ }
78
+ }
79
+ ]
80
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "noUncheckedIndexedAccess": true,
5
+ "forceConsistentCasingInFileNames": true,
6
+ "verbatimModuleSyntax": true,
7
+ "target": "ESNext",
8
+ "module": "ESNext",
9
+ "moduleResolution": "bundler",
10
+ "allowImportingTsExtensions": true,
11
+ "esModuleInterop": true,
12
+ "skipLibCheck": true,
13
+ "resolveJsonModule": true,
14
+ "lib": ["ESNext", "DOM"],
15
+ "types": ["bun-types"],
16
+ "jsx": "react-jsx",
17
+ "noEmit": true
18
+ }
19
+ }