@cosmicdrift/kumiko-framework 0.389.0 → 0.390.1

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 (617) hide show
  1. package/AGENTS.md +9 -4
  2. package/README.md +1 -1
  3. package/agents/examples/apex-surface-auth.md +2 -3
  4. package/agents/examples/api-worker-split.md +9 -2
  5. package/agents/examples/auth-claims.md +1 -1
  6. package/agents/examples/cross-feature-events.md +12 -12
  7. package/agents/examples/crypto-shredding-hr.md +2 -2
  8. package/agents/examples/encrypted-tenant-config.md +1 -1
  9. package/agents/examples/error-contract.md +12 -7
  10. package/agents/examples/event-sourcing.md +29 -29
  11. package/agents/examples/files-post-processing.md +10 -8
  12. package/agents/examples/inbound-mail-triage.md +1 -0
  13. package/agents/examples/lane-routing.md +2 -1
  14. package/agents/examples/legal-pages.md +2 -2
  15. package/agents/examples/lifecycle-hooks.md +3 -3
  16. package/agents/examples/managed-config.md +4 -4
  17. package/agents/examples/managed-pages.md +1 -1
  18. package/agents/examples/relations.md +19 -4
  19. package/agents/examples/search.md +4 -4
  20. package/agents/examples/secrets-demo.md +9 -6
  21. package/agents/examples/state-machine.md +2 -2
  22. package/agents/examples/tenant-settings.md +1 -1
  23. package/agents/examples/user-data-rights.md +3 -6
  24. package/agents/examples/workflow-engine.md +53 -47
  25. package/agents/examples.md +4 -4
  26. package/agents/features.md +1 -1
  27. package/dist/api/auth-middleware.js +1 -1
  28. package/dist/api/auth-routes-invite.js +2 -1
  29. package/dist/api/entity-read-access.d.ts +3 -1
  30. package/dist/api/export/export-columns.d.ts +3 -1
  31. package/dist/api/export/export-route.js +3 -2
  32. package/dist/api/export/export-screen.d.ts +2 -1
  33. package/dist/api/extra-route.d.ts +3 -1
  34. package/dist/api/index.d.ts +23 -27
  35. package/dist/api/index.js +13 -15
  36. package/dist/api/jwt.js +1 -1
  37. package/dist/api/observability-middleware.d.ts +1 -1
  38. package/dist/api/observability-middleware.js +2 -1
  39. package/dist/api/request-context-internals.d.ts +31 -0
  40. package/dist/api/request-context-internals.js +11 -0
  41. package/dist/api/request-context-scopes.d.ts +14 -0
  42. package/dist/api/request-context-scopes.js +69 -0
  43. package/dist/api/request-context.d.ts +1 -40
  44. package/dist/api/request-context.js +22 -51
  45. package/dist/api/request-id-middleware.d.ts +1 -1
  46. package/dist/api/route-registrars.d.ts +2 -1
  47. package/dist/api/route-registrars.js +1 -1
  48. package/dist/api/routes.js +7 -3
  49. package/dist/api/server-boot-checks.d.ts +1 -1
  50. package/dist/api/server-boot-checks.js +2 -2
  51. package/dist/api/server-event-dispatcher.d.ts +6 -1
  52. package/dist/api/server-event-dispatcher.js +3 -4
  53. package/dist/api/server-extra-routes.d.ts +1 -1
  54. package/dist/api/server-extra-routes.js +2 -1
  55. package/dist/api/server-middleware.js +3 -1
  56. package/dist/api/server-routes.d.ts +2 -1
  57. package/dist/api/server-wiring.js +6 -4
  58. package/dist/api/server.d.ts +2 -1
  59. package/dist/api/sse-route.d.ts +2 -1
  60. package/dist/api/tenant-scoped-secrets.d.ts +2 -0
  61. package/dist/api/tenant-scoped-secrets.js +13 -0
  62. package/dist/api/websocket-route.d.ts +1 -1
  63. package/dist/auth/index.d.ts +0 -1
  64. package/dist/auth/roles.d.ts +0 -5
  65. package/dist/compliance/duration-spec.d.ts +0 -1
  66. package/dist/compliance/duration-spec.js +0 -5
  67. package/dist/compliance/index.d.ts +4 -4
  68. package/dist/compliance/index.js +2 -2
  69. package/dist/compliance/profiles.d.ts +0 -15
  70. package/dist/compliance/profiles.js +0 -23
  71. package/dist/config/index.d.ts +10 -10
  72. package/dist/config/index.js +13 -1
  73. package/dist/config/internals.d.ts +9 -0
  74. package/dist/config/internals.js +1 -0
  75. package/dist/consumer-cli-internals.d.ts +4 -0
  76. package/dist/consumer-cli-internals.js +1 -0
  77. package/dist/consumer-cli.d.ts +1 -4
  78. package/dist/consumer-cli.js +5 -1
  79. package/dist/crypto/event-pii.js +1 -1
  80. package/dist/crypto/index.d.ts +8 -9
  81. package/dist/crypto/index.js +7 -8
  82. package/dist/crypto/pg-kms-adapter.js +6 -1
  83. package/dist/db/apply-entity-event.d.ts +1 -1
  84. package/dist/db/apply-entity-event.js +15 -47
  85. package/dist/db/blind-index-cleanup.js +91 -77
  86. package/dist/db/collect-table-metas.js +1 -1
  87. package/dist/db/compound-types.d.ts +1 -1
  88. package/dist/db/compound-types.js +0 -7
  89. package/dist/db/config-seed.d.ts +2 -1
  90. package/dist/db/config-seed.js +6 -1
  91. package/dist/db/connection.d.ts +3 -1
  92. package/dist/db/connection.js +15 -5
  93. package/dist/db/cross-tenant-reads.d.ts +1 -1
  94. package/dist/db/cross-tenant-reads.js +1 -1
  95. package/dist/db/dialect.d.ts +0 -5
  96. package/dist/db/dialect.js +0 -3
  97. package/dist/db/driver-value-preparation.js +23 -2
  98. package/dist/db/eagerload.d.ts +2 -1
  99. package/dist/db/entity-field-encryption.d.ts +1 -1
  100. package/dist/db/entity-table-meta.d.ts +1 -1
  101. package/dist/db/event-store-executor-context.d.ts +3 -1
  102. package/dist/db/event-store-executor-context.js +4 -3
  103. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  104. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  105. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  106. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  107. package/dist/db/event-store-executor-read.js +2 -2
  108. package/dist/db/event-store-executor-write-atomic.js +8 -7
  109. package/dist/db/event-store-executor-write-steps.d.ts +3 -2
  110. package/dist/db/event-store-executor-write.js +7 -4
  111. package/dist/db/event-store-executor.d.ts +1 -1
  112. package/dist/db/executor-managed-tables.d.ts +7 -1
  113. package/dist/db/executor-managed-tables.js +11 -2
  114. package/dist/db/index.d.ts +29 -28
  115. package/dist/db/index.js +22 -20
  116. package/dist/db/known-table-names.d.ts +6 -0
  117. package/dist/db/known-table-names.js +21 -0
  118. package/dist/db/list-aggregate-labels.d.ts +1 -1
  119. package/dist/db/located-timestamp.d.ts +1 -1
  120. package/dist/db/located-timestamp.js +0 -5
  121. package/dist/db/migrate-generator.d.ts +17 -1
  122. package/dist/db/migrate-generator.js +50 -20
  123. package/dist/db/migrate-primary-key.d.ts +12 -0
  124. package/dist/db/migrate-primary-key.js +45 -0
  125. package/dist/db/migrate-rls-diff.d.ts +20 -0
  126. package/dist/db/migrate-rls-diff.js +61 -0
  127. package/dist/db/migrate-runner.js +4 -0
  128. package/dist/db/money.d.ts +1 -1
  129. package/dist/db/money.js +1 -1
  130. package/dist/db/parent-ref-clause.d.ts +2 -1
  131. package/dist/db/pg-error.d.ts +2 -0
  132. package/dist/db/pg-error.js +11 -0
  133. package/dist/db/queries/ddl.d.ts +3 -0
  134. package/dist/db/queries/ddl.js +34 -1
  135. package/dist/db/queries/event-store.js +4 -2
  136. package/dist/db/queries/event-tenants.d.ts +2 -0
  137. package/dist/db/queries/event-tenants.js +17 -0
  138. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  139. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  140. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  141. package/dist/db/queries/rls-boot-catalog.js +39 -0
  142. package/dist/db/queries/rls-catalog.d.ts +6 -0
  143. package/dist/db/queries/rls-catalog.js +82 -0
  144. package/dist/db/queries/rls-scope.d.ts +3 -0
  145. package/dist/db/queries/rls-scope.js +17 -0
  146. package/dist/db/queries/rls-shape.d.ts +10 -0
  147. package/dist/db/queries/rls-shape.js +42 -0
  148. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  149. package/dist/db/queries/session-advisory-lock.js +23 -0
  150. package/dist/db/queries/shadow-swap.d.ts +1 -2
  151. package/dist/db/queries/shadow-swap.js +9 -25
  152. package/dist/db/queries/test-stack.d.ts +4 -1
  153. package/dist/db/queries/test-stack.js +84 -2
  154. package/dist/db/query.js +11 -7
  155. package/dist/db/reference-data.d.ts +1 -1
  156. package/dist/db/reference-data.js +6 -1
  157. package/dist/db/render-ddl.d.ts +6 -2
  158. package/dist/db/render-ddl.js +7 -7
  159. package/dist/db/render-rls-ddl.d.ts +35 -0
  160. package/dist/db/render-rls-ddl.js +127 -0
  161. package/dist/db/replay-migration-sql.d.ts +3 -1
  162. package/dist/db/replay-migration-sql.js +22 -5
  163. package/dist/db/replay-rls.d.ts +25 -0
  164. package/dist/db/replay-rls.js +156 -0
  165. package/dist/db/row-level-security-boot-check.d.ts +6 -0
  166. package/dist/db/row-level-security-boot-check.js +86 -0
  167. package/dist/db/row-level-security-connection.d.ts +3 -0
  168. package/dist/db/row-level-security-connection.js +213 -0
  169. package/dist/db/row-level-security-scope.d.ts +33 -0
  170. package/dist/db/row-level-security-scope.js +127 -0
  171. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  172. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  173. package/dist/db/sql-identifier.d.ts +1 -0
  174. package/dist/db/sql-identifier.js +3 -0
  175. package/dist/db/table-builder.d.ts +2 -1
  176. package/dist/db/table-builder.js +1 -1
  177. package/dist/db/table-info.js +1 -1
  178. package/dist/db/table-push.d.ts +11 -2
  179. package/dist/db/table-push.js +15 -2
  180. package/dist/db/tenant-db-runner.d.ts +3 -1
  181. package/dist/db/tenant-db-runner.js +4 -3
  182. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  183. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  184. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  185. package/dist/db/tenant-db-statement-runner.js +48 -0
  186. package/dist/db/tenant-db.d.ts +17 -12
  187. package/dist/db/tenant-db.js +49 -120
  188. package/dist/db/tenant-id-filter.d.ts +3 -0
  189. package/dist/db/tenant-id-filter.js +30 -0
  190. package/dist/db/transaction-serialization.d.ts +6 -0
  191. package/dist/db/transaction-serialization.js +60 -0
  192. package/dist/derivatives/delete-stored-file.js +1 -1
  193. package/dist/derivatives/index.d.ts +2 -5
  194. package/dist/derivatives/index.js +2 -3
  195. package/dist/engine/access.d.ts +2 -1
  196. package/dist/engine/access.js +1 -1
  197. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  198. package/dist/engine/boot-validator/entity-handler.js +1 -1
  199. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +1 -1
  200. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
  201. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
  202. package/dist/engine/boot-validator/nav.d.ts +3 -1
  203. package/dist/engine/boot-validator/nav.js +1 -1
  204. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  205. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  206. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  207. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  208. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  209. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  210. package/dist/engine/boot-validator/screens.d.ts +2 -1
  211. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  212. package/dist/engine/bridge-stub.d.ts +5 -2
  213. package/dist/engine/bridge-stub.js +39 -24
  214. package/dist/engine/config-helpers.d.ts +2 -2
  215. package/dist/engine/config-helpers.js +0 -9
  216. package/dist/engine/constants.d.ts +0 -10
  217. package/dist/engine/constants.js +0 -8
  218. package/dist/engine/create-app.js +1 -1
  219. package/dist/engine/define-feature.d.ts +2 -1
  220. package/dist/engine/define-feature.js +1 -2
  221. package/dist/engine/define-handler.d.ts +1 -1
  222. package/dist/engine/define-step.d.ts +0 -1
  223. package/dist/engine/define-step.js +0 -3
  224. package/dist/engine/embedded-derived.d.ts +1 -1
  225. package/dist/engine/entity-handlers.d.ts +2 -1
  226. package/dist/engine/entity-handlers.js +7 -7
  227. package/dist/engine/entity-list-runtime-options.js +3 -1
  228. package/dist/engine/entity-list-searchability.d.ts +2 -1
  229. package/dist/engine/event-def.d.ts +2 -1
  230. package/dist/engine/event-helpers.d.ts +3 -1
  231. package/dist/engine/event-helpers.js +3 -3
  232. package/dist/engine/extension-names.d.ts +2 -8
  233. package/dist/engine/extension-names.js +2 -2
  234. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  235. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  236. package/dist/engine/extensions/user-data.d.ts +0 -8
  237. package/dist/engine/factories.d.ts +2 -1
  238. package/dist/engine/feature-builder-state.d.ts +8 -1
  239. package/dist/engine/feature-changelog.d.ts +1 -1
  240. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  241. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  242. package/dist/engine/feature-manifest.js +1 -1
  243. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  244. package/dist/engine/feature-ui-extensions.js +6 -4
  245. package/dist/engine/field-access.d.ts +2 -1
  246. package/dist/engine/handler-field-references.d.ts +0 -4
  247. package/dist/engine/index.d.ts +57 -54
  248. package/dist/engine/index.js +22 -27
  249. package/dist/engine/instruction-fields.d.ts +1 -1
  250. package/dist/engine/personal-data-fields.d.ts +1 -1
  251. package/dist/engine/qualified-name.d.ts +0 -1
  252. package/dist/engine/read-claim.d.ts +2 -1
  253. package/dist/engine/registry-facade.js +0 -3
  254. package/dist/engine/registry-ingest.d.ts +2 -1
  255. package/dist/engine/registry-ingest.js +1 -2
  256. package/dist/engine/registry-state.d.ts +12 -2
  257. package/dist/engine/registry-state.js +2 -3
  258. package/dist/engine/registry-validate.d.ts +3 -1
  259. package/dist/engine/registry-validate.js +7 -7
  260. package/dist/engine/run-in.d.ts +1 -1
  261. package/dist/engine/run-in.js +0 -1
  262. package/dist/engine/schema-builder.d.ts +1 -1
  263. package/dist/engine/schema-builder.js +1 -1
  264. package/dist/engine/screen-filter-ops.d.ts +2 -1
  265. package/dist/engine/screen-filter-ops.js +0 -5
  266. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  267. package/dist/engine/soft-delete-cleanup.js +4 -4
  268. package/dist/engine/state-machine.js +2 -1
  269. package/dist/engine/steps/_read-source.js +1 -1
  270. package/dist/engine/steps/aggregate-append-event.js +2 -2
  271. package/dist/engine/steps/call-feature.js +2 -2
  272. package/dist/engine/steps/mail-send.js +1 -1
  273. package/dist/engine/steps/retry.js +1 -1
  274. package/dist/engine/steps/wait-for-event.js +1 -1
  275. package/dist/engine/steps/wait.js +1 -1
  276. package/dist/engine/steps/webhook-send.js +1 -1
  277. package/dist/engine/template-variables.d.ts +2 -1
  278. package/dist/engine/transfer-adjacency.d.ts +1 -1
  279. package/dist/engine/types/index.d.ts +8 -31
  280. package/dist/engine/types/index.js +2 -10
  281. package/dist/engine/validation.d.ts +2 -1
  282. package/dist/entrypoint/index.d.ts +7 -35
  283. package/dist/entrypoint/index.js +7 -1
  284. package/dist/entrypoint/internals.d.ts +40 -0
  285. package/dist/entrypoint/internals.js +1 -0
  286. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  287. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  288. package/dist/env/dry-run-internals.d.ts +10 -0
  289. package/dist/env/dry-run-internals.js +1 -0
  290. package/dist/env/dry-run.d.ts +1 -10
  291. package/dist/env/dry-run.js +2 -1
  292. package/dist/env/index.d.ts +1 -85
  293. package/dist/env/index.js +6 -50
  294. package/dist/env/internals.d.ts +87 -0
  295. package/dist/env/internals.js +53 -0
  296. package/dist/errors/classes.js +2 -2
  297. package/dist/errors/index.d.ts +5 -14
  298. package/dist/errors/index.js +4 -9
  299. package/dist/errors/member-resolution.js +1 -1
  300. package/dist/errors/reasons.d.ts +0 -1
  301. package/dist/errors/reasons.js +7 -7
  302. package/dist/errors/serialize.d.ts +0 -18
  303. package/dist/errors/serialize.js +0 -27
  304. package/dist/es-ops/index.d.ts +4 -4
  305. package/dist/es-ops/index.js +2 -2
  306. package/dist/es-ops/operations-schema.d.ts +1 -1
  307. package/dist/es-ops/types.d.ts +4 -5
  308. package/dist/event-store/admin-api-internals.d.ts +14 -0
  309. package/dist/event-store/admin-api-internals.js +1 -0
  310. package/dist/event-store/admin-api.d.ts +1 -14
  311. package/dist/event-store/admin-api.js +11 -6
  312. package/dist/event-store/archive.js +4 -2
  313. package/dist/event-store/errors.js +2 -2
  314. package/dist/event-store/event-store.js +41 -34
  315. package/dist/event-store/events-schema.js +4 -1
  316. package/dist/event-store/index.d.ts +11 -13
  317. package/dist/event-store/index.js +7 -9
  318. package/dist/event-store/rebuild-dead-letter.js +4 -2
  319. package/dist/event-store/snapshot.js +4 -3
  320. package/dist/event-store/stream-scope.d.ts +2 -0
  321. package/dist/event-store/stream-scope.js +6 -0
  322. package/dist/event-store/upcaster-dead-letter.js +4 -2
  323. package/dist/event-store/upcaster.d.ts +2 -1
  324. package/dist/files/action-form-upload.d.ts +2 -1
  325. package/dist/files/action-form-upload.js +1 -1
  326. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  327. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  328. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  329. package/dist/files/bind-pending-file-refs.js +2 -1
  330. package/dist/files/bind-referenced-files.write.js +1 -1
  331. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  332. package/dist/files/create-file-ref-from-bytes.js +3 -3
  333. package/dist/files/create-file-ref.d.ts +3 -2
  334. package/dist/files/create-file-ref.js +2 -2
  335. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  336. package/dist/files/dispose-removed-file-refs.js +1 -1
  337. package/dist/files/feature.js +2 -2
  338. package/dist/files/file-handle.js +1 -1
  339. package/dist/files/file-routes.d.ts +1 -1
  340. package/dist/files/file-routes.js +12 -2
  341. package/dist/files/index.d.ts +11 -13
  342. package/dist/files/index.js +5 -7
  343. package/dist/files/load-save-file-refs.d.ts +2 -1
  344. package/dist/files/load-save-file-refs.js +1 -1
  345. package/dist/files/provider-resolver.d.ts +5 -4
  346. package/dist/files/provider-resolver.js +4 -4
  347. package/dist/files/storage-tracking.js +4 -2
  348. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  349. package/dist/files/sweep-orphaned-uploads.js +1 -1
  350. package/dist/i18n/index.d.ts +2 -8
  351. package/dist/i18n/index.js +1 -1
  352. package/dist/i18n/internals.d.ts +7 -0
  353. package/dist/i18n/internals.js +1 -0
  354. package/dist/i18n/required-surface-keys.d.ts +4 -1
  355. package/dist/internal/row-level-security.d.ts +3 -0
  356. package/dist/internal/row-level-security.js +3 -0
  357. package/dist/internal/stack-support.d.ts +1 -1
  358. package/dist/internal/stack-support.js +1 -1
  359. package/dist/internal/testing.d.ts +1 -0
  360. package/dist/internal/testing.js +9 -5
  361. package/dist/jobs/index.d.ts +1 -1
  362. package/dist/jobs/job-append-event.d.ts +12 -0
  363. package/dist/jobs/job-append-event.js +30 -0
  364. package/dist/jobs/job-runner-context.d.ts +2 -2
  365. package/dist/jobs/job-runner-context.js +46 -16
  366. package/dist/jobs/job-runner-execution.d.ts +1 -1
  367. package/dist/jobs/job-runner-execution.js +6 -4
  368. package/dist/jobs/job-runner-gates.d.ts +1 -1
  369. package/dist/jobs/job-runner-gates.js +0 -1
  370. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  371. package/dist/jobs/job-runner-helpers.js +10 -1
  372. package/dist/jobs/job-runner-scope.d.ts +5 -2
  373. package/dist/jobs/job-runner-types.d.ts +2 -1
  374. package/dist/jobs/job-runner.js +19 -6
  375. package/dist/jobs/max-per-tenant.d.ts +1 -1
  376. package/dist/logging/index.d.ts +1 -2
  377. package/dist/logging/index.js +1 -1
  378. package/dist/logging/pino-logger.js +1 -1
  379. package/dist/logging/utils.d.ts +1 -0
  380. package/dist/logging/utils.js +6 -0
  381. package/dist/migrations/index.d.ts +3 -3
  382. package/dist/migrations/index.js +3 -3
  383. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  384. package/dist/migrations/pending-rebuilds.js +1 -1
  385. package/dist/migrations/pii-event-backfill.js +4 -1
  386. package/dist/observability/escape-hatch-report.d.ts +2 -1
  387. package/dist/observability/index.d.ts +7 -15
  388. package/dist/observability/index.js +4 -12
  389. package/dist/observability/metric-validator.js +1 -1
  390. package/dist/observability/metrics-handle.d.ts +0 -1
  391. package/dist/observability/metrics-handle.js +2 -15
  392. package/dist/observability/recording-tracer.d.ts +1 -2
  393. package/dist/observability/recording-tracer.js +0 -6
  394. package/dist/observability/sensitive-filter.d.ts +0 -2
  395. package/dist/observability/sensitive-filter.js +0 -29
  396. package/dist/pipeline/active-membership.d.ts +2 -1
  397. package/dist/pipeline/active-membership.js +6 -2
  398. package/dist/pipeline/append-event-core.d.ts +2 -1
  399. package/dist/pipeline/append-event-core.js +2 -2
  400. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  401. package/dist/pipeline/attach-outside-transaction.js +13 -0
  402. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  403. package/dist/pipeline/cascade-handler.d.ts +2 -1
  404. package/dist/pipeline/cascade-handler.js +3 -2
  405. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  406. package/dist/pipeline/config-accessor-factory.js +1 -1
  407. package/dist/pipeline/context-services.d.ts +56 -0
  408. package/dist/pipeline/context-services.js +73 -0
  409. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  410. package/dist/pipeline/dispatch-batch.js +31 -18
  411. package/dist/pipeline/dispatch-query.js +5 -4
  412. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  413. package/dist/pipeline/dispatch-scope.js +27 -0
  414. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  415. package/dist/pipeline/dispatch-shared.js +75 -198
  416. package/dist/pipeline/dispatch-stream.js +8 -4
  417. package/dist/pipeline/dispatch-write.d.ts +2 -1
  418. package/dist/pipeline/dispatch-write.js +10 -8
  419. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  420. package/dist/pipeline/dispatcher-utils.js +8 -2
  421. package/dist/pipeline/dispatcher.d.ts +3 -2
  422. package/dist/pipeline/dispatcher.js +4 -3
  423. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  424. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  425. package/dist/pipeline/event-dispatcher-delivery.js +4 -2
  426. package/dist/pipeline/event-dispatcher.d.ts +2 -2
  427. package/dist/pipeline/event-dispatcher.js +7 -3
  428. package/dist/pipeline/event-retention.js +59 -56
  429. package/dist/pipeline/handler-access-error.js +2 -1
  430. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  431. package/dist/pipeline/handler-context-auth.js +7 -4
  432. package/dist/pipeline/handler-context-config.d.ts +2 -5
  433. package/dist/pipeline/handler-context-config.js +2 -2
  434. package/dist/pipeline/handler-context-db.d.ts +32 -7
  435. package/dist/pipeline/handler-context-db.js +26 -17
  436. package/dist/pipeline/handler-context-dispatch.d.ts +13 -7
  437. package/dist/pipeline/handler-context-dispatch.js +9 -8
  438. package/dist/pipeline/handler-context-events.d.ts +22 -36
  439. package/dist/pipeline/handler-context-events.js +36 -31
  440. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  441. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  442. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  443. package/dist/pipeline/handler-context-notify.js +1 -1
  444. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  445. package/dist/pipeline/handler-context-observability.js +7 -5
  446. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  447. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  448. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  449. package/dist/pipeline/handler-context-scope.js +18 -20
  450. package/dist/pipeline/index.d.ts +9 -21
  451. package/dist/pipeline/index.js +5 -7
  452. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  453. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  454. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  455. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  456. package/dist/pipeline/member-read-only-transaction.js +11 -3
  457. package/dist/pipeline/member-reader.d.ts +1 -1
  458. package/dist/pipeline/member-reader.js +2 -2
  459. package/dist/pipeline/msp-rebuild.js +5 -3
  460. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  461. package/dist/pipeline/notify-scope.d.ts +2 -1
  462. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  463. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  464. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  465. package/dist/pipeline/projection-rebuild.js +12 -5
  466. package/dist/pipeline/projection-state.d.ts +0 -6
  467. package/dist/pipeline/projection-state.js +0 -5
  468. package/dist/pipeline/projections-runner.d.ts +2 -1
  469. package/dist/pipeline/projections-runner.js +10 -6
  470. package/dist/pipeline/system-hooks.d.ts +3 -1
  471. package/dist/pipeline/system-hooks.js +6 -4
  472. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  473. package/dist/pipeline/system-identity-switch.js +51 -36
  474. package/dist/pipeline/typed-append-event.d.ts +2 -0
  475. package/dist/pipeline/typed-append-event.js +4 -0
  476. package/dist/pipeline/write-origin.js +2 -2
  477. package/dist/pipeline/write-result-masking.d.ts +1 -1
  478. package/dist/random/index.d.ts +1 -2
  479. package/dist/random/index.js +1 -2
  480. package/dist/rate-limit/bucket.d.ts +2 -1
  481. package/dist/rate-limit/middleware.js +2 -1
  482. package/dist/redis/index.d.ts +3 -4
  483. package/dist/redis/index.js +2 -2
  484. package/dist/schema-cli/apply-command.js +5 -2
  485. package/dist/schema-cli/baseline-command.js +7 -2
  486. package/dist/schema-cli/generate-command.js +7 -9
  487. package/dist/schema-cli/shared.d.ts +12 -2
  488. package/dist/schema-cli/shared.js +24 -2
  489. package/dist/schema-cli/status-command.js +8 -2
  490. package/dist/schema-cli/validate-command.js +48 -4
  491. package/dist/schema-cli.d.ts +0 -1
  492. package/dist/search/configure-tenant-index.d.ts +1 -3
  493. package/dist/search/configure-tenant-index.js +0 -4
  494. package/dist/search/index.d.ts +1 -4
  495. package/dist/search/index.js +0 -2
  496. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  497. package/dist/search/meilisearch-adapter-internals.js +9 -0
  498. package/dist/search/meilisearch-adapter.d.ts +1 -8
  499. package/dist/search/meilisearch-adapter.js +6 -7
  500. package/dist/search/meilisearch-peer.d.ts +2 -0
  501. package/dist/search/meilisearch-peer.js +5 -0
  502. package/dist/search/reindex-entity.js +93 -87
  503. package/dist/secrets/index.d.ts +3 -4
  504. package/dist/secrets/index.js +2 -3
  505. package/dist/seeding/index.d.ts +2 -2
  506. package/dist/seeding/index.js +1 -2
  507. package/dist/time/index.d.ts +2 -2
  508. package/dist/time/index.js +1 -1
  509. package/dist/time/tz-context.d.ts +0 -5
  510. package/dist/time/tz-context.js +0 -9
  511. package/dist/ui-types/index.d.ts +8 -11
  512. package/dist/ui-types/index.js +3 -3
  513. package/dist/upgrade-changelog.d.ts +3 -2
  514. package/dist/upgrade-changelog.js +12 -8
  515. package/dist/upgrade-cli-internals.d.ts +8 -0
  516. package/dist/upgrade-cli-internals.js +63 -0
  517. package/dist/upgrade-cli.d.ts +2 -9
  518. package/dist/upgrade-cli.js +28 -70
  519. package/dist/utils/import-optional-peer.d.ts +6 -0
  520. package/dist/utils/import-optional-peer.js +19 -0
  521. package/dist/utils/index.d.ts +1 -4
  522. package/dist/utils/index.js +1 -4
  523. package/package.json +23 -19
  524. package/src/changes.json +236 -0
  525. package/dist/crypto/request-kms-cache.d.ts +0 -8
  526. package/dist/crypto/request-kms-cache.js +0 -21
  527. package/dist/engine/codemod/index.d.ts +0 -2
  528. package/dist/engine/codemod/index.js +0 -1
  529. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  530. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  531. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  532. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  533. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  534. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  535. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  536. package/dist/engine/feature-ast/extractors/events.js +0 -275
  537. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  538. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  539. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  540. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  541. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  542. package/dist/engine/feature-ast/extractors/index.js +0 -13
  543. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  544. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  545. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  546. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  547. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  548. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  549. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -11
  550. package/dist/engine/feature-ast/extractors/round1.js +0 -87
  551. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  552. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  553. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  554. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  555. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  556. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  557. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  558. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  559. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  560. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  561. package/dist/engine/feature-ast/index.d.ts +0 -16
  562. package/dist/engine/feature-ast/index.js +0 -10
  563. package/dist/engine/feature-ast/parse.d.ts +0 -31
  564. package/dist/engine/feature-ast/parse.js +0 -485
  565. package/dist/engine/feature-ast/patch.d.ts +0 -212
  566. package/dist/engine/feature-ast/patch.js +0 -611
  567. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  568. package/dist/engine/feature-ast/patcher.js +0 -281
  569. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1238
  570. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
  571. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  572. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
  573. package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
  574. package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
  575. package/dist/engine/feature-ast/patterns.d.ts +0 -322
  576. package/dist/engine/feature-ast/patterns.js +0 -107
  577. package/dist/engine/feature-ast/render.d.ts +0 -47
  578. package/dist/engine/feature-ast/render.js +0 -666
  579. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  580. package/dist/engine/feature-ast/source-location.js +0 -27
  581. package/dist/engine/pattern-library/index.d.ts +0 -2
  582. package/dist/engine/pattern-library/index.js +0 -3
  583. package/dist/engine/pattern-library/library.d.ts +0 -14
  584. package/dist/engine/pattern-library/library.js +0 -94
  585. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  586. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  587. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  588. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  589. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  590. package/dist/engine/pattern-library/shared-fields.js +0 -88
  591. package/dist/engine/pattern-library/static-schemas.d.ts +0 -21
  592. package/dist/engine/pattern-library/static-schemas.js +0 -487
  593. package/dist/engine/pattern-library/types.d.ts +0 -158
  594. package/dist/engine/pattern-library/types.js +0 -36
  595. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  596. package/dist/engine/resolve-config-or-param.js +0 -76
  597. package/src/scripts/codemod/README.md +0 -187
  598. package/src/scripts/codemod/codemod-support.ts +0 -334
  599. package/src/scripts/codemod/collect-source-files.ts +0 -48
  600. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  601. package/src/scripts/codemod/db-factory.ts +0 -810
  602. package/src/scripts/codemod/feature-factory.ts +0 -429
  603. package/src/scripts/codemod/feature-layout.ts +0 -424
  604. package/src/scripts/codemod/import-extensions.ts +0 -118
  605. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  606. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  607. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  608. package/src/scripts/codemod/object-form.ts +0 -746
  609. package/src/scripts/codemod/package-merge.ts +0 -299
  610. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  611. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  612. package/src/scripts/codemod/s3-imports.ts +0 -236
  613. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  614. package/src/scripts/codemod/testing-injection.ts +0 -215
  615. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  616. package/src/scripts/codemod/testing-move.ts +0 -542
  617. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
@@ -0,0 +1,60 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const runnerProxyTargets = new WeakMap();
3
+ const savepointTransactionKeys = new WeakMap();
4
+ const rootChains = new WeakMap();
5
+ const nestedChainsInScope = new AsyncLocalStorage();
6
+ function isHandleKey(value) {
7
+ return typeof value === "function" || (typeof value === "object" && value !== null);
8
+ }
9
+ export function registerRunnerProxyTarget(proxy, target) {
10
+ runnerProxyTargets.set(proxy, target);
11
+ }
12
+ function driverHandleOf(handle) {
13
+ let current = handle;
14
+ let target = runnerProxyTargets.get(current);
15
+ while (target) {
16
+ current = target;
17
+ target = runnerProxyTargets.get(current);
18
+ }
19
+ return current;
20
+ }
21
+ function transactionKeyOf(handle) {
22
+ const driverHandle = driverHandleOf(handle);
23
+ return savepointTransactionKeys.get(driverHandle) ?? driverHandle;
24
+ }
25
+ function chainFor(transactionKey) {
26
+ const nested = nestedChainsInScope.getStore()?.get(transactionKey);
27
+ if (nested)
28
+ return nested;
29
+ const root = rootChains.get(transactionKey);
30
+ if (root)
31
+ return root;
32
+ const created = { tail: Promise.resolve() };
33
+ rootChains.set(transactionKey, created);
34
+ return created;
35
+ }
36
+ async function runOnChain(transactionKey, work) {
37
+ const chain = chainFor(transactionKey);
38
+ const previous = chain.tail;
39
+ let release = () => { };
40
+ chain.tail = new Promise((resolve) => {
41
+ release = resolve;
42
+ });
43
+ await previous;
44
+ try {
45
+ const scope = new Map(nestedChainsInScope.getStore());
46
+ scope.set(transactionKey, { tail: Promise.resolve() });
47
+ return await nestedChainsInScope.run(scope, work);
48
+ }
49
+ finally {
50
+ release();
51
+ }
52
+ }
53
+ export function openSerializedSavepoint(transactionHandle, fn) {
54
+ const transactionKey = transactionKeyOf(transactionHandle);
55
+ return runOnChain(transactionKey, () => transactionHandle.savepoint((sp) => {
56
+ if (isHandleKey(sp))
57
+ savepointTransactionKeys.set(driverHandleOf(sp), transactionKey);
58
+ return fn(sp);
59
+ }));
60
+ }
@@ -72,7 +72,7 @@ export async function deleteStoredFileAndDerivatives(originalKey, store, errorCo
72
72
  }
73
73
  return failedKeys;
74
74
  }
75
- // deleteStoredFileAndDerivatives through ctx.files for a key read from a tenant-filtered fileRef
75
+ // deleteStoredFileAndDerivatives through ctx.services.files for a key read from a tenant-filtered fileRef
76
76
  // row. After a tenant handover the key keeps the previous tenant's prefix, which ref() and list()
77
77
  // reject; every key the helper deletes is the original or one of its derivatives.
78
78
  export function deleteFileRefBytes(files, row, errorContext) {
@@ -1,6 +1,3 @@
1
- export type { StoredFileStore } from "./delete-stored-file.ts";
2
- export { deleteFileRefBytes, deleteStoredFileAndDerivatives, listDerivativeKeys, } from "./delete-stored-file.ts";
3
- export type { DerivativesContextDeps } from "./derivatives-context.ts";
4
- export { createDerivativesContext, resolveRenderer } from "./derivatives-context.ts";
1
+ export { deleteFileRefBytes, deleteStoredFileAndDerivatives, } from "./delete-stored-file.ts";
5
2
  export { resolveFieldVariant } from "./field-variants.ts";
6
- export { canonicalJson, derivativeListPrefix, isDerivativeKeyOf, parseDerivativeKey, specHash, VARIANT_NAME_PATTERN, variantSuffix, } from "./variant-key.ts";
3
+ export { derivativeListPrefix, parseDerivativeKey, variantSuffix, } from "./variant-key.ts";
@@ -1,4 +1,3 @@
1
- export { deleteFileRefBytes, deleteStoredFileAndDerivatives, listDerivativeKeys, } from "./delete-stored-file.js";
2
- export { createDerivativesContext, resolveRenderer } from "./derivatives-context.js";
1
+ export { deleteFileRefBytes, deleteStoredFileAndDerivatives, } from "./delete-stored-file.js";
3
2
  export { resolveFieldVariant } from "./field-variants.js";
4
- export { canonicalJson, derivativeListPrefix, isDerivativeKeyOf, parseDerivativeKey, specHash, VARIANT_NAME_PATTERN, variantSuffix, } from "./variant-key.js";
3
+ export { derivativeListPrefix, parseDerivativeKey, variantSuffix, } from "./variant-key.js";
@@ -1,2 +1,3 @@
1
- import type { AccessRule, SessionUser } from "./types/index.ts";
1
+ import type { AccessRule } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { SessionUser } from "./types/index.ts";
2
3
  export declare function hasAccess(user: Pick<SessionUser, "roles">, access: AccessRule | undefined): boolean;
@@ -1,5 +1,5 @@
1
+ import { isOpenToAllGranted } from "@cosmicdrift/kumiko-types/handlers";
1
2
  import { ANONYMOUS_ROLE } from "./system-user.js";
2
- import { isOpenToAllGranted } from "./types/index.js";
3
3
  // Default-deny: a handler without an explicit AccessRule is unreachable. To
4
4
  // grant access a handler must either list allowed roles or opt into
5
5
  // openToAll. Leaving access undefined now returns false (previously true) —
@@ -1,4 +1,5 @@
1
- import type { FeatureDefinition, QueryHandlerDef } from "../types/index.ts";
1
+ import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  export declare const FILE_FIELD_TYPES: Set<string>;
3
4
  export declare const PII_DIRECT_NAME_HINTS: ReadonlySet<string>;
4
5
  export declare const PII_USER_OWNED_NAME_HINTS: ReadonlySet<string>;
@@ -209,7 +209,7 @@ export function validatePerCommandTransaction(featureName, handlerName, handler)
209
209
  const conflicting = perCommandConflict(handler);
210
210
  if (conflicting !== undefined) {
211
211
  throw new Error(`write handler "${featureName}:write:${handlerName}" declares transaction: "perCommand" together with ${conflicting} — ` +
212
- "a perCommand handler holds no transaction, so move the phase into the commands it issues via ctx.write.");
212
+ "a perCommand handler holds no transaction, so move the phase into the commands it issues via ctx.dispatch.write.");
213
213
  }
214
214
  }
215
215
  const IP_SCOPED_RATE_LIMIT_PER = ["ip", "ip+handler"];
@@ -1,3 +1,3 @@
1
- import type { EntityDefinition } from "../types/index.ts";
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
2
2
  import type { EntityListScreenDefinition } from "../types/screen.ts";
3
3
  export declare function validateEntityListAggregateOptions(where: string, screen: EntityListScreenDefinition, entity: EntityDefinition): void;
@@ -1,4 +1,4 @@
1
- import type { EntityDefinition, FieldDefinition } from "../types/index.ts";
1
+ import type { EntityDefinition, FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
2
2
  import { type ListColumnSpec, type ListTableGrouping, type ListTableTotal } from "../types/screen.ts";
3
3
  type FieldType = FieldDefinition["type"];
4
4
  export type AggregateFieldInfo = {
@@ -1,4 +1,5 @@
1
- import type { FeatureDefinition, QueryHandlerDef } from "../types/index.ts";
1
+ import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  import type { ListColumnSpec, ListTableOptions } from "../types/screen.ts";
3
4
  export declare function validateListTableAggregateQuery(args: {
4
5
  readonly prefix: string;
@@ -1,4 +1,6 @@
1
- import type { FeatureDefinition, NavDefinition, WorkspaceDefinition } from "../types/index.ts";
1
+ import type { NavDefinition } from "@cosmicdrift/kumiko-types/nav";
2
+ import type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
3
+ import type { FeatureDefinition } from "../types/index.ts";
2
4
  export declare function collectWriteHandlerQns(features: readonly FeatureDefinition[]): Set<string>;
3
5
  export declare function collectNavQns(features: readonly FeatureDefinition[]): Map<string, NavDefinition & {
4
6
  readonly featureName: string;
@@ -1,9 +1,9 @@
1
1
  // Nav validation + collectKnownRoles (role synthesis for ownership
2
2
  // validation in index.ts — thematically adjacent to ownership.ts, kept
3
3
  // here since this is a structural move, not a semantic reorg).
4
+ import { isOpenToAllGranted } from "@cosmicdrift/kumiko-types/handlers";
4
5
  import { createFallbackLogger } from "../../logging/utils.js";
5
6
  import { qualifyEntityName } from "../qualified-name.js";
6
- import { isOpenToAllGranted } from "../types/index.js";
7
7
  const log = createFallbackLogger("kumiko:boot");
8
8
  export function collectWriteHandlerQns(features) {
9
9
  const set = new Set();
@@ -1,5 +1,6 @@
1
+ import type { ClaimKeyDefinition } from "@cosmicdrift/kumiko-types/handlers";
1
2
  import { type OwnershipMap, type WhereRule } from "../ownership.ts";
2
- import type { ClaimKeyDefinition, FeatureDefinition } from "../types/index.ts";
3
+ import type { FeatureDefinition } from "../types/index.ts";
3
4
  export type WhereRuleProbe = {
4
5
  readonly table: unknown;
5
6
  readonly tableName: string;
@@ -1,3 +1,4 @@
1
- import type { EntityDefinition, FeatureDefinition } from "../types/index.ts";
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  export declare function findEntity(featureMap: ReadonlyMap<string, FeatureDefinition>, entityName: string): EntityDefinition | undefined;
3
4
  export declare function validateParentRefs(feature: FeatureDefinition, featureMap: ReadonlyMap<string, FeatureDefinition>): void;
@@ -1,4 +1,5 @@
1
- import type { FeatureDefinition, QueryHandlerDef } from "../types/index.ts";
1
+ import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  export declare function buildQueryHandlerMap(features: readonly FeatureDefinition[]): ReadonlyMap<string, QueryHandlerDef>;
3
4
  export declare function validateProjectionListScreens(features: readonly FeatureDefinition[]): void;
4
5
  export declare function validateRelatedListSectionQueries(features: readonly FeatureDefinition[]): void;
@@ -1,3 +1,4 @@
1
- import type { FeatureDefinition, QueryHandlerDef } from "../types/index.ts";
1
+ import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  export declare function checkQueryRef(queryHandlers: ReadonlyMap<string, QueryHandlerDef>, query: string, buildPrefix: () => string): void;
3
4
  export declare function validateQueryRefs(features: readonly FeatureDefinition[]): void;
@@ -1,5 +1,6 @@
1
+ import type { EntityDefinition, FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
1
2
  import type { FieldsOrGroupsSection } from "../screen-helpers.ts";
2
- import type { EntityDefinition, FeatureDefinition, FieldDefinition } from "../types/index.ts";
3
+ import type { FeatureDefinition } from "../types/index.ts";
3
4
  import type { ActionFormScreenDefinition, ConfigEditScreenDefinition, EditFieldSpec, EditLayout, SecretMintScreenDefinition } from "../types/screen.ts";
4
5
  import type { NavigateTargetLookups } from "./screens-actions.ts";
5
6
  export declare function validateEditFieldExtras(featureName: string, screenId: string, entityDef: EntityDefinition, fieldSpec: Exclude<EditFieldSpec, string>): void;
@@ -1,5 +1,7 @@
1
+ import type { ConfigKeyDefinition } from "@cosmicdrift/kumiko-types/config";
2
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
1
3
  import { type normalizeListColumn } from "../screen-helpers.ts";
2
- import type { ConfigKeyDefinition, EntityDefinition, FeatureDefinition } from "../types/index.ts";
4
+ import type { FeatureDefinition } from "../types/index.ts";
3
5
  import type { EditExtensionSection, EditFieldsSection, EditSectionSpec, RowAction } from "../types/screen.ts";
4
6
  import type { NavigateSourceScreenType, NavigateTargetLookups } from "./screens-actions.ts";
5
7
  import { type resolveRowActionNavigateTarget } from "./screens-actions.ts";
@@ -1,4 +1,5 @@
1
- import type { ConfigKeyDefinition, FeatureDefinition } from "../types/index.ts";
1
+ import type { ConfigKeyDefinition } from "@cosmicdrift/kumiko-types/config";
2
+ import type { FeatureDefinition } from "../types/index.ts";
2
3
  import type { ScreenDefinition } from "../types/screen.ts";
3
4
  export { readsNavigateParamsAsFormPrefill, resolveScreenTargetQn, rowFieldExtractorKeys, validateActionFieldRefs, validateActionHasIcon, validateDrawerPrefillKeys, validateScreenShortIdCollisions, } from "./screens-actions.ts";
4
5
  export { validateDashboardCustomPanel, validateDashboardScreenPanel } from "./screens-dashboard.ts";
@@ -1,4 +1,6 @@
1
- import type { FeatureDefinition, NavDefinition, WorkspaceDefinition } from "../types/index.ts";
1
+ import type { NavDefinition } from "@cosmicdrift/kumiko-types/nav";
2
+ import type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
3
+ import type { FeatureDefinition } from "../types/index.ts";
2
4
  export declare function collectWorkspaceQns(features: readonly FeatureDefinition[]): Map<string, WorkspaceDefinition & {
3
5
  readonly featureName: string;
4
6
  }>;
@@ -1,4 +1,7 @@
1
- import type { HandlerContext, SessionUser } from "./types/index.ts";
1
+ import type { ContextServices, HandlerContext, HandlerDispatch, HandlerObservability, SessionUser } from "./types/index.ts";
2
2
  export declare function bridgeStub(opts?: {
3
3
  readonly user?: SessionUser;
4
- }): Pick<HandlerContext, "query" | "queryAs" | "write" | "writeAs" | "appendEvent" | "unsafeAppendEvent" | "tryAppendEvent" | "fetchForWriting" | "loadAggregate" | "archiveStream" | "restoreStream" | "isStreamArchived" | "snapshotAggregate" | "loadAggregateWithSnapshot" | "queryProjection" | "resolveAuthClaims" | "resolveActiveMembership" | "queryAsMember" | "hasFeature" | "metrics" | "metricsFor" | "tracer" | "tz" | "locale" | "user">;
4
+ readonly log?: HandlerObservability["log"];
5
+ readonly dispatch?: Partial<HandlerDispatch>;
6
+ readonly services?: Partial<ContextServices>;
7
+ }): Pick<HandlerContext, "dispatch" | "events" | "auth" | "obs" | "hasFeature" | "tz" | "locale" | "user" | "services" | "lifecycle" | "tenants">;
@@ -1,5 +1,7 @@
1
1
  import { DEFAULT_LOCALE } from "../i18n/request-locale.js";
2
- import { createNoopMetricsHandle, getFallbackTracer } from "../observability/index.js";
2
+ import { createFallbackFullLogger } from "../logging/utils.js";
3
+ import { getFallbackTracer } from "../observability/fallback.js";
4
+ import { createNoopMetricsHandle } from "../observability/index.js";
3
5
  import { createTzContext } from "../time/index.js";
4
6
  import { createAnonymousUser } from "./system-user.js";
5
7
  // Test/service helper: cross-feature bridge methods that throw on use.
@@ -7,7 +9,7 @@ import { createAnonymousUser } from "./system-user.js";
7
9
  // Production code always receives a full HandlerContext from the Dispatcher's
8
10
  // buildHandlerContext (with real query/write closures). Some internal services
9
11
  // and tests construct a mini-context manually (typically just `{ db, registry }`)
10
- // to invoke a single handler. Those call sites don't use ctx.query/write —
12
+ // to invoke a single handler. Those call sites don't use ctx.dispatch.query/write —
11
13
  // the stubs make the TypeScript shape match while still failing loudly if
12
14
  // anything downstream accidentally reaches for them.
13
15
  //
@@ -15,7 +17,7 @@ import { createAnonymousUser } from "./system-user.js";
15
17
  const notAvailable = (what) => async (..._args) => {
16
18
  throw new Error(`ctx.${what} not available in this context — use the dispatcher, not a stubbed handler context`);
17
19
  };
18
- // Noop observability — hand back the shared fallback tracer so ctx.tracer has
20
+ // Noop observability — hand back the shared fallback tracer so ctx.obs.tracer has
19
21
  // a valid Tracer shape. No allocations per call.
20
22
  const noopTracer = getFallbackTracer();
21
23
  export function bridgeStub(opts) {
@@ -27,35 +29,48 @@ export function bridgeStub(opts) {
27
29
  const stubUser = opts?.user ?? createAnonymousUser("00000000-0000-0000-0000-000000000000");
28
30
  return {
29
31
  user: stubUser,
30
- query: notAvailable("query"),
31
- queryAs: notAvailable("queryAs"),
32
- write: notAvailable("write"),
33
- writeAs: notAvailable("writeAs"),
34
- appendEvent: notAvailable("appendEvent"),
35
- unsafeAppendEvent: notAvailable("unsafeAppendEvent"),
36
- tryAppendEvent: notAvailable("tryAppendEvent"),
37
- fetchForWriting: notAvailable("fetchForWriting"),
38
- loadAggregate: notAvailable("loadAggregate"),
39
- archiveStream: notAvailable("archiveStream"),
40
- restoreStream: notAvailable("restoreStream"),
41
- isStreamArchived: notAvailable("isStreamArchived"),
42
- snapshotAggregate: notAvailable("snapshotAggregate"),
43
- loadAggregateWithSnapshot: notAvailable("loadAggregateWithSnapshot"),
44
- queryProjection: notAvailable("queryProjection"),
45
- resolveAuthClaims: notAvailable("resolveAuthClaims"),
46
- resolveActiveMembership: notAvailable("resolveActiveMembership"),
47
- queryAsMember: notAvailable("queryAsMember"),
32
+ dispatch: {
33
+ query: notAvailable("dispatch.query"),
34
+ queryAs: notAvailable("dispatch.queryAs"),
35
+ write: notAvailable("dispatch.write"),
36
+ writeAs: notAvailable("dispatch.writeAs"),
37
+ queryAsMember: notAvailable("dispatch.queryAsMember"),
38
+ queryProjection: notAvailable("dispatch.queryProjection"),
39
+ ...opts?.dispatch,
40
+ },
41
+ events: {
42
+ append: notAvailable("events.append"),
43
+ unsafeAppend: notAvailable("events.unsafeAppend"),
44
+ tryAppend: notAvailable("events.tryAppend"),
45
+ fetchForWriting: notAvailable("events.fetchForWriting"),
46
+ load: notAvailable("events.load"),
47
+ archive: notAvailable("events.archive"),
48
+ restore: notAvailable("events.restore"),
49
+ isArchived: notAvailable("events.isArchived"),
50
+ snapshot: notAvailable("events.snapshot"),
51
+ loadWithSnapshot: notAvailable("events.loadWithSnapshot"),
52
+ },
53
+ auth: {
54
+ resolveClaims: notAvailable("auth.resolveClaims"),
55
+ resolveActiveMembership: notAvailable("auth.resolveActiveMembership"),
56
+ },
48
57
  // Stub defaults to always-enabled — matches the dispatcher's behaviour
49
58
  // when no effectiveFeatures resolver is wired (tests without toggles).
50
59
  hasFeature: async () => true,
51
- metrics: createNoopMetricsHandle(),
52
- metricsFor: () => createNoopMetricsHandle(),
53
- tracer: noopTracer,
60
+ obs: {
61
+ log: opts?.log ?? createFallbackFullLogger("bridge-stub"),
62
+ tracer: noopTracer,
63
+ metrics: createNoopMetricsHandle(),
64
+ metricsFor: () => createNoopMetricsHandle(),
65
+ },
54
66
  // Real TzContext, not notAvailable — test code uses ctx.tz routinely,
55
67
  // it isn't a "bridge" concept. Defaults to UTC.
56
68
  tz: createTzContext(),
57
69
  // Same reasoning as tz above — ctx.locale is always-present, not a
58
70
  // bridge method. Defaults to DEFAULT_LOCALE.
59
71
  locale: DEFAULT_LOCALE,
72
+ services: { extensions: {}, ...opts?.services },
73
+ lifecycle: {},
74
+ tenants: {},
60
75
  };
61
76
  }
@@ -1,4 +1,5 @@
1
- import type { ConfigBacking, ConfigBounds, ConfigComputedFn, ConfigKeyDefinition, ConfigKeyType, ConfigMask, ConfigSeedDef, ConfigValidateFn, ConfigValue, CreateSeedOptions, CreateTenantSeedOptions, CreateUserSeedOptions, OptionsQueryPayload } from "./types/index.ts";
1
+ import type { ConfigBacking, ConfigBounds, ConfigComputedFn, ConfigKeyDefinition, ConfigKeyType, ConfigMask, ConfigSeedDef, ConfigValidateFn, ConfigValue, CreateSeedOptions, CreateTenantSeedOptions } from "@cosmicdrift/kumiko-types/config";
2
+ import type { OptionsQueryPayload } from "@cosmicdrift/kumiko-types/fields";
2
3
  export declare function isEncryptedAtRest(def: Pick<ConfigKeyDefinition, "encrypted" | "backing">): boolean;
3
4
  export declare const access: {
4
5
  readonly all: readonly string[];
@@ -41,5 +42,4 @@ export declare function createUserConfig<T extends ConfigKeyType>(type: T, opts?
41
42
  export declare function createSeed(opts: CreateSeedOptions): ConfigSeedDef;
42
43
  export declare function createSystemSeed(opts: CreateSeedOptions): ConfigSeedDef;
43
44
  export declare function createTenantSeed(opts: CreateSeedOptions, options?: CreateTenantSeedOptions): ConfigSeedDef;
44
- export declare function createUserSeed(opts: CreateSeedOptions, options: CreateUserSeedOptions): ConfigSeedDef;
45
45
  export {};
@@ -114,12 +114,3 @@ export function createTenantSeed(opts, options) {
114
114
  // User-scope seed. Both tenantId AND userId are required — the resolver
115
115
  // matches against the user's actual tenantId, so a seed under
116
116
  // SYSTEM_TENANT_ID would never resolve.
117
- export function createUserSeed(opts, options) {
118
- return {
119
- value: opts.value,
120
- scope: "user",
121
- key: "",
122
- tenantId: options.tenantId,
123
- userId: options.userId,
124
- };
125
- }
@@ -5,24 +5,14 @@ import type { TenantId } from "./types/identifiers.ts";
5
5
  export declare const SystemHookNames: {
6
6
  readonly cascadeDelete: "system:hook:cascade-delete";
7
7
  };
8
- export type SystemHookName = (typeof SystemHookNames)[keyof typeof SystemHookNames];
9
8
  export declare const SystemHookPriorities: {
10
9
  readonly cascadeDelete: 500;
11
10
  };
12
- export declare const MessageKind: {
13
- readonly write: "write";
14
- readonly query: "query";
15
- readonly command: "command";
16
- readonly shared: "shared";
17
- readonly broadcast: "broadcast";
18
- };
19
- export type MessageKind = (typeof MessageKind)[keyof typeof MessageKind];
20
11
  export declare const LifecycleHookTypes: {
21
12
  readonly preSave: "preSave";
22
13
  readonly postSave: "postSave";
23
14
  readonly preDelete: "preDelete";
24
15
  readonly postDelete: "postDelete";
25
- readonly preQuery: "preQuery";
26
16
  readonly postQuery: "postQuery";
27
17
  };
28
18
  export type LifecycleHookType = (typeof LifecycleHookTypes)[keyof typeof LifecycleHookTypes];
@@ -12,20 +12,12 @@ export const SystemHookPriorities = {
12
12
  cascadeDelete: 500,
13
13
  };
14
14
  // --- Message Kinds ---
15
- export const MessageKind = {
16
- write: "write",
17
- query: "query",
18
- command: "command",
19
- shared: "shared",
20
- broadcast: "broadcast",
21
- };
22
15
  // --- Lifecycle Hook Types ---
23
16
  export const LifecycleHookTypes = {
24
17
  preSave: "preSave",
25
18
  postSave: "postSave",
26
19
  preDelete: "preDelete",
27
20
  postDelete: "postDelete",
28
- preQuery: "preQuery",
29
21
  postQuery: "postQuery",
30
22
  };
31
23
  // --- Config Scopes ---
@@ -1,7 +1,7 @@
1
1
  import { validateBoot } from "./boot-validator.js";
2
2
  import { dedupeFeatures } from "./dedupe-features.js";
3
+ import { DEFAULT_CURRENCIES } from "./field-helpers.js";
3
4
  import { createRegistry } from "./registry.js";
4
- import { DEFAULT_CURRENCIES } from "./types/index.js";
5
5
  // Every field map an entity-less inline form screen renders: actionForm's and
6
6
  // secretMint's own fields, plus a secretMint's separate `confirm` step.
7
7
  function inlineFormFieldMaps(screen) {
@@ -1,4 +1,5 @@
1
- import type { FeatureDefinition, FeatureRegistrar } from "./types/index.ts";
1
+ import type { FeatureRegistrar } from "@cosmicdrift/kumiko-types/feature-registrar";
2
+ import type { FeatureDefinition } from "./types/index.ts";
2
3
  export type DefineFeatureSettings = {
3
4
  readonly dedupeOptions?: Readonly<Record<string, unknown>>;
4
5
  };
@@ -12,7 +12,7 @@ import { isObjectArgument, throwObjectArgumentRequired, unwrapArrayForm } from "
12
12
  // the call-site (`defineFeature("driverOrders", ...)` → TName="driverOrders").
13
13
  // The literal threads into the FeatureRegistrar so r.defineEvent's return
14
14
  // carries `name: "driver-orders:event:foo"` as a literal — strict-mode
15
- // for `ctx.appendEvent({ type: eventDef.name, ... })` lights up. Apps
15
+ // for `ctx.events.append({ type: eventDef.name, ... })` lights up. Apps
16
16
  // that don't care can keep the default-string and use the wrapper-based
17
17
  // strict-mode (string-literal types per call-site) like before.
18
18
  // optionalRequires accepts either variadic strings or a single `{ features }` object; requires
@@ -116,7 +116,6 @@ export function defineFeature(name, setup, settings) {
116
116
  postSave: state.phasedLifecycleHooks.postSave,
117
117
  preDelete: state.phasedLifecycleHooks.preDelete,
118
118
  postDelete: state.phasedLifecycleHooks.postDelete,
119
- preQuery: state.lifecycleHooks["preQuery"] ?? {},
120
119
  postQuery: state.lifecycleHooks["postQuery"] ?? {},
121
120
  // @cast-boundary engine-bridge — hook registration erases the per-slot
122
121
  // signatures to LifecycleHookFn (a union; see the cast in
@@ -1,8 +1,8 @@
1
1
  import type { CursorResult } from "@cosmicdrift/kumiko-types/cursor-types";
2
+ import type { KumikoEventTypeMap } from "@cosmicdrift/kumiko-types/event-type-map";
2
3
  import type { ZodType } from "zod";
3
4
  import type { ContainsSecret } from "../secrets/types.ts";
4
5
  import type { QueryHandlerDefinition, WriteHandlerDefinition, WriteHandlerInput } from "./types/define-handler.ts";
5
- import type { KumikoEventTypeMap } from "./types/index.ts";
6
6
  export type { QueryHandlerDefinition, StreamHandlerDefinition, WriteHandlerDefinition, WriteHandlerInput, } from "./types/define-handler.ts";
7
7
  export declare function defineWriteHandler<const TName extends string, TSchema extends ZodType, TData = unknown, TMap extends object = KumikoEventTypeMap, TPrepared = undefined>(def: WriteHandlerInput<TName, TSchema, TData, TMap, TPrepared>, ..._noSecretInResponse: true extends ContainsSecret<TData> ? [
8
8
  secretLeak: "A handler response must not contain a Secret<> — call .reveal() and return the plaintext, or drop the field."
@@ -1,4 +1,3 @@
1
1
  import type { StepDef, StepKind } from "./types/step.ts";
2
2
  export declare function defineStep<TArgs, TResult>(def: StepDef<TArgs, TResult>): StepDef<TArgs, TResult>;
3
3
  export declare function getStep(kind: StepKind): StepDef | undefined;
4
- export declare function listStepKinds(): readonly StepKind[];
@@ -17,6 +17,3 @@ export function defineStep(def) {
17
17
  export function getStep(kind) {
18
18
  return stepRegistry.get(kind);
19
19
  }
20
- export function listStepKinds() {
21
- return Array.from(stepRegistry.keys());
22
- }
@@ -1,4 +1,4 @@
1
- import type { EmbeddedDerivedCellDef, EmbeddedSubFieldDef } from "./types/index.ts";
1
+ import type { EmbeddedDerivedCellDef, EmbeddedSubFieldDef } from "@cosmicdrift/kumiko-types/fields";
2
2
  /** Computes a derived cell from its source values. Missing/non-numeric
3
3
  * sources: "multiply"/"percent" with any missing source → undefined; "sum"/"subtract"
4
4
  * treat missing as 0 only when at least one source is present — if every
@@ -1,8 +1,9 @@
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
2
+ import type { AccessRule, EscapeHatchDeclaration, QueryHandlerDef, WriteHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
1
3
  import * as z from "zod";
2
4
  import { type EventStoreExecutor } from "../db/event-store-executor.ts";
3
5
  import { type EntityRow, type EntityTable } from "../db/table-builder.ts";
4
6
  import type { EntityCrudRegistrar, EntityHandlerOptions, EntityQueryHandlerOptions, EntityWriteHandlerOptions, RegisterEntityCrudOptions } from "./types/entity-handlers.ts";
5
- import type { AccessRule, EntityDefinition, EscapeHatchDeclaration, QueryHandlerDef, WriteHandlerDef } from "./types/index.ts";
6
7
  export type { EntityCrudHandlerDefaults, EntityCrudRegistrar, EntityCrudVerb, EntityHandlerOptions, EntityQueryHandlerOptions, EntityWriteHandlerOptions, RegisterEntityCrudOptions, } from "./types/entity-handlers.ts";
7
8
  export declare function assertEscapeHatchAccessIsSystemAdminOnly(name: string, kind: "write" | "query", access: AccessRule): void;
8
9
  export declare const MAX_LIST_LIMIT = 200;
@@ -41,7 +41,7 @@ import { parseTenantId } from "./types/identifiers.js";
41
41
  // r.queryHandler(defineEntityDetailHandler("note", noteEntity, { access }))
42
42
  //
43
43
  // For custom logic (default values, business rules, side effects, custom
44
- // executors with ctx.searchAdapter, ...) write the handler explicitly with
44
+ // executors with ctx.services.searchAdapter, ...) write the handler explicitly with
45
45
  // r.writeHandler / r.queryHandler — these helpers cover the standard path only.
46
46
  //
47
47
  // Note on the `as` casts in the handler bodies: WriteHandlerDef.handler's
@@ -252,7 +252,7 @@ export function defineEntityWriteHandler(name, entity, options) {
252
252
  case "create":
253
253
  schema = buildInsertSchema(entity, undefined, excludedFields, { allowCallerId: true });
254
254
  handler = async (event, ctx) => {
255
- const { runPreSave } = ctx;
255
+ const { lifecycle: { runPreSave }, } = ctx;
256
256
  // A caller-chosen id (deterministic-id idempotent creates) is only
257
257
  // honored for a system-identity caller (jobs/hooks via
258
258
  // createSystemUser) — an HTTP-authenticated end user can never
@@ -273,7 +273,7 @@ export function defineEntityWriteHandler(name, entity, options) {
273
273
  changes: buildUpdateSchema(entity, undefined, excludedFields),
274
274
  });
275
275
  handler = async (event, ctx) => {
276
- const { runPreSave } = ctx;
276
+ const { lifecycle: { runPreSave }, } = ctx;
277
277
  const db = dbFor(ctx);
278
278
  const submitted = event.payload; // @cast-boundary engine-payload
279
279
  const payload = {
@@ -509,7 +509,7 @@ export function createEntityExecutor(entityName, entity) {
509
509
  // );
510
510
  //
511
511
  // For anything more involved (filters, joins, custom shaping), write the
512
- // query-handler explicitly with ctx.queryProjection or a raw select.
512
+ // query-handler explicitly with ctx.dispatch.queryProjection or a raw select.
513
513
  export function defineProjectionQueryHandler(name, projectionQualifiedName, options) {
514
514
  if (typeof options.unsafeAllTenants === "object") {
515
515
  assertReason(`"${name}": unsafeAllTenants`, options.unsafeAllTenants.reason);
@@ -521,11 +521,11 @@ export function defineProjectionQueryHandler(name, projectionQualifiedName, opti
521
521
  return {
522
522
  name,
523
523
  schema: z.object({}),
524
- // Returns the raw row array — matches ctx.queryProjection's shape so the
525
- // helper is a drop-in for the inline `async (_q, ctx) => ctx.queryProjection(...)`
524
+ // Returns the raw row array — matches ctx.dispatch.queryProjection's shape so the
525
+ // helper is a drop-in for the inline `async (_q, ctx) => ctx.dispatch.queryProjection(...)`
526
526
  // handler. Wrap the result in the caller's handler when you need
527
527
  // pagination envelopes or added metadata.
528
- handler: async (_query, ctx) => ctx.queryProjection(projectionQualifiedName, options.unsafeAllTenants ? { unsafeAllTenants: true } : undefined), // @wrapper-known semantic-alias
528
+ handler: async (_query, ctx) => ctx.dispatch.queryProjection(projectionQualifiedName, options.unsafeAllTenants ? { unsafeAllTenants: true } : undefined), // @wrapper-known semantic-alias
529
529
  access: options.access,
530
530
  ...(escapeHatch && { escapeHatch }),
531
531
  };
@@ -6,7 +6,9 @@ export function entityListRuntime(ctx, entityName, user) {
6
6
  const resolveEntity = (name) => ctx.registry.getEntity(name);
7
7
  return {
8
8
  runtimeOptions: {
9
- ...(ctx.searchAdapter !== undefined && { searchAdapter: ctx.searchAdapter }),
9
+ ...(ctx.services.searchAdapter !== undefined && {
10
+ searchAdapter: ctx.services.searchAdapter,
11
+ }),
10
12
  ...(ctx.includeDeleted === true && { includeDeleted: true }),
11
13
  referenceSearch: { fields: ctx.registry.getSearchableReferences(entityName), resolveEntity },
12
14
  referenceSort: { fields: ctx.registry.getSortableReferences(entityName), resolveEntity },
@@ -1,4 +1,5 @@
1
- import type { EntityDefinition, QueryHandlerDef } from "./types/index.ts";
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
2
+ import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
2
3
  export declare function resolveEntityBehindListQuery(queryQn: string, handler: QueryHandlerDef | undefined, lookupEntity: (entityName: string) => EntityDefinition | undefined): EntityDefinition | undefined;
3
4
  /** True when the list query is an entity-convention one over an entity with no
4
5
  * searchable field — a search box would never match anything. */
@@ -1,5 +1,6 @@
1
+ import type { EventDef, QualifiedEventName } from "@cosmicdrift/kumiko-types/handlers";
1
2
  import { type ZodType } from "zod";
2
- import type { EventDef, EventPiiStance, QualifiedEventName } from "./types/index.ts";
3
+ import type { EventPiiStance } from "./types/index.ts";
3
4
  export type CreateEventDefOptions<TFeature extends string, TInner extends string, TPayload> = {
4
5
  readonly feature: TFeature;
5
6
  readonly name: TInner;
@@ -1,5 +1,7 @@
1
1
  import type { AppendEventArgs, EventDef, HandlerContext } from "./types/handlers.ts";
2
- export type EmitCtx = Pick<HandlerContext, "unsafeAppendEvent">;
2
+ export type EmitCtx = {
3
+ readonly events: Pick<HandlerContext["events"], "unsafeAppend">;
4
+ };
3
5
  export declare function emitEvent<TPayload>(ctx: EmitCtx, eventDef: EventDef<TPayload>, args: {
4
6
  readonly aggregateId: string;
5
7
  readonly aggregateType: string;