@adminiumjs/meta 0.1.0-rc.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 (194) hide show
  1. package/LICENSE +661 -0
  2. package/dist/bootstrap.d.ts +103 -0
  3. package/dist/bootstrap.d.ts.map +1 -0
  4. package/dist/bootstrap.js +225 -0
  5. package/dist/bootstrap.js.map +1 -0
  6. package/dist/columns.d.ts +44 -0
  7. package/dist/columns.d.ts.map +1 -0
  8. package/dist/columns.js +57 -0
  9. package/dist/columns.js.map +1 -0
  10. package/dist/connect.d.ts +38 -0
  11. package/dist/connect.d.ts.map +1 -0
  12. package/dist/connect.js +57 -0
  13. package/dist/connect.js.map +1 -0
  14. package/dist/ids.d.ts +79 -0
  15. package/dist/ids.d.ts.map +1 -0
  16. package/dist/ids.js +165 -0
  17. package/dist/ids.js.map +1 -0
  18. package/dist/index.d.ts +21 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +21 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/migrations/0001_core_auth.d.ts +9 -0
  23. package/dist/migrations/0001_core_auth.d.ts.map +1 -0
  24. package/dist/migrations/0001_core_auth.js +102 -0
  25. package/dist/migrations/0001_core_auth.js.map +1 -0
  26. package/dist/migrations/0002_rbac.d.ts +8 -0
  27. package/dist/migrations/0002_rbac.d.ts.map +1 -0
  28. package/dist/migrations/0002_rbac.js +75 -0
  29. package/dist/migrations/0002_rbac.js.map +1 -0
  30. package/dist/migrations/0003_connections_schema.d.ts +9 -0
  31. package/dist/migrations/0003_connections_schema.d.ts.map +1 -0
  32. package/dist/migrations/0003_connections_schema.js +100 -0
  33. package/dist/migrations/0003_connections_schema.js.map +1 -0
  34. package/dist/migrations/0004_pages_views.d.ts +8 -0
  35. package/dist/migrations/0004_pages_views.d.ts.map +1 -0
  36. package/dist/migrations/0004_pages_views.js +59 -0
  37. package/dist/migrations/0004_pages_views.js.map +1 -0
  38. package/dist/migrations/0005_ops.d.ts +9 -0
  39. package/dist/migrations/0005_ops.d.ts.map +1 -0
  40. package/dist/migrations/0005_ops.js +104 -0
  41. package/dist/migrations/0005_ops.js.map +1 -0
  42. package/dist/migrations/0006_platform.d.ts +11 -0
  43. package/dist/migrations/0006_platform.d.ts.map +1 -0
  44. package/dist/migrations/0006_platform.js +259 -0
  45. package/dist/migrations/0006_platform.js.map +1 -0
  46. package/dist/migrations/0007_llm_runs.d.ts +33 -0
  47. package/dist/migrations/0007_llm_runs.d.ts.map +1 -0
  48. package/dist/migrations/0007_llm_runs.js +62 -0
  49. package/dist/migrations/0007_llm_runs.js.map +1 -0
  50. package/dist/migrations/0008_llm_overrides.d.ts +18 -0
  51. package/dist/migrations/0008_llm_overrides.d.ts.map +1 -0
  52. package/dist/migrations/0008_llm_overrides.js +24 -0
  53. package/dist/migrations/0008_llm_overrides.js.map +1 -0
  54. package/dist/migrations/0009_views_kind.d.ts +20 -0
  55. package/dist/migrations/0009_views_kind.d.ts.map +1 -0
  56. package/dist/migrations/0009_views_kind.js +24 -0
  57. package/dist/migrations/0009_views_kind.js.map +1 -0
  58. package/dist/migrations/0010_llm_prompt_version_width.d.ts +19 -0
  59. package/dist/migrations/0010_llm_prompt_version_width.d.ts.map +1 -0
  60. package/dist/migrations/0010_llm_prompt_version_width.js +28 -0
  61. package/dist/migrations/0010_llm_prompt_version_width.js.map +1 -0
  62. package/dist/migrations/index.d.ts +29 -0
  63. package/dist/migrations/index.d.ts.map +1 -0
  64. package/dist/migrations/index.js +43 -0
  65. package/dist/migrations/index.js.map +1 -0
  66. package/dist/migrator.d.ts +83 -0
  67. package/dist/migrator.d.ts.map +1 -0
  68. package/dist/migrator.js +173 -0
  69. package/dist/migrator.js.map +1 -0
  70. package/dist/prefix.d.ts +19 -0
  71. package/dist/prefix.d.ts.map +1 -0
  72. package/dist/prefix.js +33 -0
  73. package/dist/prefix.js.map +1 -0
  74. package/dist/repos/api-keys.d.ts +31 -0
  75. package/dist/repos/api-keys.d.ts.map +1 -0
  76. package/dist/repos/api-keys.js +62 -0
  77. package/dist/repos/api-keys.js.map +1 -0
  78. package/dist/repos/audit.d.ts +51 -0
  79. package/dist/repos/audit.d.ts.map +1 -0
  80. package/dist/repos/audit.js +78 -0
  81. package/dist/repos/audit.js.map +1 -0
  82. package/dist/repos/connections.d.ts +90 -0
  83. package/dist/repos/connections.d.ts.map +1 -0
  84. package/dist/repos/connections.js +191 -0
  85. package/dist/repos/connections.js.map +1 -0
  86. package/dist/repos/email-templates.d.ts +47 -0
  87. package/dist/repos/email-templates.d.ts.map +1 -0
  88. package/dist/repos/email-templates.js +93 -0
  89. package/dist/repos/email-templates.js.map +1 -0
  90. package/dist/repos/exports.d.ts +67 -0
  91. package/dist/repos/exports.d.ts.map +1 -0
  92. package/dist/repos/exports.js +132 -0
  93. package/dist/repos/exports.js.map +1 -0
  94. package/dist/repos/files.d.ts +52 -0
  95. package/dist/repos/files.d.ts.map +1 -0
  96. package/dist/repos/files.js +86 -0
  97. package/dist/repos/files.js.map +1 -0
  98. package/dist/repos/imports.d.ts +71 -0
  99. package/dist/repos/imports.d.ts.map +1 -0
  100. package/dist/repos/imports.js +111 -0
  101. package/dist/repos/imports.js.map +1 -0
  102. package/dist/repos/index.d.ts +26 -0
  103. package/dist/repos/index.d.ts.map +1 -0
  104. package/dist/repos/index.js +26 -0
  105. package/dist/repos/index.js.map +1 -0
  106. package/dist/repos/jobs.d.ts +71 -0
  107. package/dist/repos/jobs.d.ts.map +1 -0
  108. package/dist/repos/jobs.js +187 -0
  109. package/dist/repos/jobs.js.map +1 -0
  110. package/dist/repos/llm-overrides.d.ts +89 -0
  111. package/dist/repos/llm-overrides.d.ts.map +1 -0
  112. package/dist/repos/llm-overrides.js +205 -0
  113. package/dist/repos/llm-overrides.js.map +1 -0
  114. package/dist/repos/llm-runs.d.ts +114 -0
  115. package/dist/repos/llm-runs.d.ts.map +1 -0
  116. package/dist/repos/llm-runs.js +214 -0
  117. package/dist/repos/llm-runs.js.map +1 -0
  118. package/dist/repos/notification-prefs.d.ts +34 -0
  119. package/dist/repos/notification-prefs.d.ts.map +1 -0
  120. package/dist/repos/notification-prefs.js +80 -0
  121. package/dist/repos/notification-prefs.js.map +1 -0
  122. package/dist/repos/notifications.d.ts +60 -0
  123. package/dist/repos/notifications.d.ts.map +1 -0
  124. package/dist/repos/notifications.js +107 -0
  125. package/dist/repos/notifications.js.map +1 -0
  126. package/dist/repos/overrides.d.ts +59 -0
  127. package/dist/repos/overrides.d.ts.map +1 -0
  128. package/dist/repos/overrides.js +143 -0
  129. package/dist/repos/overrides.js.map +1 -0
  130. package/dist/repos/pages.d.ts +192 -0
  131. package/dist/repos/pages.d.ts.map +1 -0
  132. package/dist/repos/pages.js +374 -0
  133. package/dist/repos/pages.js.map +1 -0
  134. package/dist/repos/password-resets.d.ts +32 -0
  135. package/dist/repos/password-resets.d.ts.map +1 -0
  136. package/dist/repos/password-resets.js +56 -0
  137. package/dist/repos/password-resets.js.map +1 -0
  138. package/dist/repos/permissions.d.ts +28 -0
  139. package/dist/repos/permissions.d.ts.map +1 -0
  140. package/dist/repos/permissions.js +100 -0
  141. package/dist/repos/permissions.js.map +1 -0
  142. package/dist/repos/roles.d.ts +33 -0
  143. package/dist/repos/roles.d.ts.map +1 -0
  144. package/dist/repos/roles.js +89 -0
  145. package/dist/repos/roles.js.map +1 -0
  146. package/dist/repos/scheduled-reports.d.ts +73 -0
  147. package/dist/repos/scheduled-reports.d.ts.map +1 -0
  148. package/dist/repos/scheduled-reports.js +132 -0
  149. package/dist/repos/scheduled-reports.js.map +1 -0
  150. package/dist/repos/sessions.d.ts +33 -0
  151. package/dist/repos/sessions.d.ts.map +1 -0
  152. package/dist/repos/sessions.js +79 -0
  153. package/dist/repos/sessions.js.map +1 -0
  154. package/dist/repos/settings.d.ts +25 -0
  155. package/dist/repos/settings.d.ts.map +1 -0
  156. package/dist/repos/settings.js +73 -0
  157. package/dist/repos/settings.js.map +1 -0
  158. package/dist/repos/snapshots.d.ts +79 -0
  159. package/dist/repos/snapshots.d.ts.map +1 -0
  160. package/dist/repos/snapshots.js +191 -0
  161. package/dist/repos/snapshots.js.map +1 -0
  162. package/dist/repos/user-prefs.d.ts +56 -0
  163. package/dist/repos/user-prefs.d.ts.map +1 -0
  164. package/dist/repos/user-prefs.js +147 -0
  165. package/dist/repos/user-prefs.js.map +1 -0
  166. package/dist/repos/users.d.ts +38 -0
  167. package/dist/repos/users.d.ts.map +1 -0
  168. package/dist/repos/users.js +103 -0
  169. package/dist/repos/users.js.map +1 -0
  170. package/dist/repos/util.d.ts +45 -0
  171. package/dist/repos/util.d.ts.map +1 -0
  172. package/dist/repos/util.js +81 -0
  173. package/dist/repos/util.js.map +1 -0
  174. package/dist/repos/views.d.ts +75 -0
  175. package/dist/repos/views.d.ts.map +1 -0
  176. package/dist/repos/views.js +180 -0
  177. package/dist/repos/views.js.map +1 -0
  178. package/dist/schema/index.d.ts +4 -0
  179. package/dist/schema/index.d.ts.map +1 -0
  180. package/dist/schema/index.js +4 -0
  181. package/dist/schema/index.js.map +1 -0
  182. package/dist/schema/json-payloads.d.ts +479 -0
  183. package/dist/schema/json-payloads.d.ts.map +1 -0
  184. package/dist/schema/json-payloads.js +340 -0
  185. package/dist/schema/json-payloads.js.map +1 -0
  186. package/dist/schema/settings-registry.d.ts +187 -0
  187. package/dist/schema/settings-registry.d.ts.map +1 -0
  188. package/dist/schema/settings-registry.js +183 -0
  189. package/dist/schema/settings-registry.js.map +1 -0
  190. package/dist/schema/tables.d.ts +568 -0
  191. package/dist/schema/tables.d.ts.map +1 -0
  192. package/dist/schema/tables.js +51 -0
  193. package/dist/schema/tables.js.map +1 -0
  194. package/package.json +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/repos/imports.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA8CzE,SAAS,MAAM,CAAC,GAAqC;IACnD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5C,KAAK,EAAE,CAAC,GAAuB,EAAE;YAC/B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE;QACJ,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,KAAK,UAAU,QAAQ,CAAC,EAAU;QAChC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACxG,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,OAAO;QACL,QAAQ;QAER,KAAK,CAAC,MAAM,CAAC,KAAwB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;YAC5D,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;gBAChB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3D,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3D,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,IAAI;gBACvB,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;aACjB,CAAC;YACF,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC,GAAuC,CAAC,CAAC;QACzD,CAAC;QAED,wEAAwE;QACxE,KAAK,CAAC,IAAI,CAAC,OAAiD,EAAE;YAC5D,IAAI,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9F,MAAM,IAAI,GAAG,MAAM,KAAK;iBACrB,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;iBAC5B,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;iBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;iBACvB,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAED,6EAA6E;QAC7E,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,KAAkB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;YACrE,KAAK,EAAE,CAAC;YACR,MAAM,GAAG,GAAG,MAAM,EAAE;iBACjB,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;iBACzE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;iBACpB,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC;iBAClC,gBAAgB,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,6EAA6E;QAC7E,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG,MAAM,EAAE;iBACjB,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;iBACzC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;iBACpB,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC;iBAC7B,gBAAgB,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,YAAY,CAChB,EAAU,EACV,OAIC,EACD,KAAa,IAAI,CAAC,GAAG,EAAE;YAEvB,MAAM,GAAG,GAAG,MAAM,EAAE;iBACjB,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,GAAG,CAAC;gBACH,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,EAAE;gBACd,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7F,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;oBACzC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;aACtD,CAAC;iBACD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;iBACpB,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;iBACzD,gBAAgB,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ export * from './util.js';
2
+ export * from './users.js';
3
+ export * from './sessions.js';
4
+ export * from './roles.js';
5
+ export * from './permissions.js';
6
+ export * from './settings.js';
7
+ export * from './user-prefs.js';
8
+ export * from './audit.js';
9
+ export * from './api-keys.js';
10
+ export * from './password-resets.js';
11
+ export * from './jobs.js';
12
+ export * from './connections.js';
13
+ export * from './snapshots.js';
14
+ export * from './overrides.js';
15
+ export * from './llm-overrides.js';
16
+ export * from './pages.js';
17
+ export * from './views.js';
18
+ export * from './llm-runs.js';
19
+ export * from './files.js';
20
+ export * from './exports.js';
21
+ export * from './imports.js';
22
+ export * from './notifications.js';
23
+ export * from './notification-prefs.js';
24
+ export * from './scheduled-reports.js';
25
+ export * from './email-templates.js';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repos/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export * from './util.js';
2
+ export * from './users.js';
3
+ export * from './sessions.js';
4
+ export * from './roles.js';
5
+ export * from './permissions.js';
6
+ export * from './settings.js';
7
+ export * from './user-prefs.js';
8
+ export * from './audit.js';
9
+ export * from './api-keys.js';
10
+ export * from './password-resets.js';
11
+ export * from './jobs.js';
12
+ export * from './connections.js';
13
+ export * from './snapshots.js';
14
+ export * from './overrides.js';
15
+ export * from './llm-overrides.js';
16
+ export * from './pages.js';
17
+ export * from './views.js';
18
+ export * from './llm-runs.js';
19
+ export * from './files.js';
20
+ export * from './exports.js';
21
+ export * from './imports.js';
22
+ export * from './notifications.js';
23
+ export * from './notification-prefs.js';
24
+ export * from './scheduled-reports.js';
25
+ export * from './email-templates.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repos/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * jobsRepo — adminium_jobs (07-meta-store.md §3.12), the table-backed queue.
3
+ *
4
+ * Portable claim (§3.12): a candidate SELECT followed by
5
+ * `UPDATE … WHERE id = ? AND status = 'pending'` — affected-rows 0 means
6
+ * another worker won; try the next candidate. No `SELECT … FOR UPDATE SKIP
7
+ * LOCKED` (not on SQLite), no `UPDATE … LIMIT` (not portable).
8
+ */
9
+ import type { MetaDb } from '../connect.js';
10
+ import { type JobStatus } from '../schema/json-payloads.js';
11
+ /** A running job whose lock is older than this is reclaimable (§3.12). */
12
+ export declare const JOB_STALE_LOCK_MS: number;
13
+ /** First-retry delay; retry n waits `backoffBaseMs * 2^(n-1)` (server backoff spec). */
14
+ export declare const JOB_BACKOFF_BASE_MS = 30000;
15
+ export interface Job {
16
+ id: string;
17
+ kind: string;
18
+ payload: Record<string, unknown>;
19
+ status: JobStatus;
20
+ priority: number;
21
+ runAt: number;
22
+ attempts: number;
23
+ maxAttempts: number;
24
+ lockedBy: string | null;
25
+ lockedAt: number | null;
26
+ dedupeKey: string | null;
27
+ lastError: string | null;
28
+ createdAt: number;
29
+ startedAt: number | null;
30
+ finishedAt: number | null;
31
+ }
32
+ export interface EnqueueJobInput {
33
+ kind: string;
34
+ payload: Record<string, unknown>;
35
+ runAt?: number;
36
+ priority?: number;
37
+ maxAttempts?: number;
38
+ /** Collapses duplicates while a job with the same key is pending/running. */
39
+ dedupeKey?: string | null;
40
+ }
41
+ export declare function jobsRepo(meta: MetaDb): {
42
+ findById: (id: string) => Promise<Job | null>;
43
+ /**
44
+ * Enqueue a job. With a `dedupeKey`, an existing pending/running job with
45
+ * the same key is returned instead of inserting (the unique index is the
46
+ * hard guarantee underneath).
47
+ */
48
+ enqueue(input: EnqueueJobInput, at?: number): Promise<Job>;
49
+ /**
50
+ * Claim the next due job for `workerId` using the portable UPDATE guard.
51
+ * Considers pending jobs due at `at` (priority desc, run_at asc, id asc)
52
+ * and stale running jobs (lock older than `staleLockMs`). Returns null
53
+ * when nothing is claimable.
54
+ */
55
+ claim(workerId: string, at?: number, staleLockMs?: number): Promise<Job | null>;
56
+ /** Success: terminal state; dedupe key released for reuse (§3.12). */
57
+ complete(id: string, at?: number): Promise<boolean>;
58
+ /**
59
+ * Failure: retries with exponential backoff until `max_attempts`, then
60
+ * lands in terminal `failed` (dedupe key released).
61
+ */
62
+ fail(id: string, error: string, at?: number, backoffBaseMs?: number): Promise<Job | null>;
63
+ cancel(id: string, at?: number): Promise<boolean>;
64
+ /**
65
+ * Retention §8 `jobs` policy: succeeded/cancelled past `retentionDays`,
66
+ * failed kept twice as long.
67
+ */
68
+ gc(at?: number, retentionDays?: number): Promise<number>;
69
+ };
70
+ export type JobsRepo = ReturnType<typeof jobsRepo>;
71
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/repos/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAI/F,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAE5C,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAsBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM;mBAGP,MAAM,KAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAQtD;;;;OAIG;mBACkB,eAAe,OAAM,MAAM,GAAgB,OAAO,CAAC,GAAG,CAAC;IAgC5E;;;;;OAKG;oBAES,MAAM,OACZ,MAAM,gBACG,MAAM,GAClB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAyCtB,sEAAsE;iBACnD,MAAM,OAAM,MAAM,GAAgB,OAAO,CAAC,OAAO,CAAC;IAUrE;;;OAGG;aAEG,MAAM,SACH,MAAM,OACT,MAAM,kBACK,MAAM,GACpB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;eAsBL,MAAM,OAAM,MAAM,GAAgB,OAAO,CAAC,OAAO,CAAC;IAUnE;;;OAGG;YACU,MAAM,2BAAoC,OAAO,CAAC,MAAM,CAAC;EAezE;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * jobsRepo — adminium_jobs (07-meta-store.md §3.12), the table-backed queue.
3
+ *
4
+ * Portable claim (§3.12): a candidate SELECT followed by
5
+ * `UPDATE … WHERE id = ? AND status = 'pending'` — affected-rows 0 means
6
+ * another worker won; try the next candidate. No `SELECT … FOR UPDATE SKIP
7
+ * LOCKED` (not on SQLite), no `UPDATE … LIMIT` (not portable).
8
+ */
9
+ import { newId } from '../ids.js';
10
+ import { jobPayloadSchema, jobStatusSchema } from '../schema/json-payloads.js';
11
+ import { DAY_MS, packJson, readJson } from './util.js';
12
+ /** A running job whose lock is older than this is reclaimable (§3.12). */
13
+ export const JOB_STALE_LOCK_MS = 5 * 60_000;
14
+ /** First-retry delay; retry n waits `backoffBaseMs * 2^(n-1)` (server backoff spec). */
15
+ export const JOB_BACKOFF_BASE_MS = 30_000;
16
+ function mapJob(row) {
17
+ return {
18
+ id: row.id,
19
+ kind: row.kind,
20
+ payload: readJson(row.payload),
21
+ status: jobStatusSchema.parse(row.status),
22
+ priority: row.priority,
23
+ runAt: row.runAt,
24
+ attempts: row.attempts,
25
+ maxAttempts: row.maxAttempts,
26
+ lockedBy: row.lockedBy,
27
+ lockedAt: row.lockedAt,
28
+ dedupeKey: row.dedupeKey,
29
+ lastError: row.lastError,
30
+ createdAt: row.createdAt,
31
+ startedAt: row.startedAt,
32
+ finishedAt: row.finishedAt,
33
+ };
34
+ }
35
+ export function jobsRepo(meta) {
36
+ const { db } = meta;
37
+ async function findById(id) {
38
+ const row = await db.selectFrom('adminium_jobs').selectAll().where('id', '=', id).executeTakeFirst();
39
+ return row ? mapJob(row) : null;
40
+ }
41
+ return {
42
+ findById,
43
+ /**
44
+ * Enqueue a job. With a `dedupeKey`, an existing pending/running job with
45
+ * the same key is returned instead of inserting (the unique index is the
46
+ * hard guarantee underneath).
47
+ */
48
+ async enqueue(input, at = Date.now()) {
49
+ const payload = jobPayloadSchema.parse(input.payload);
50
+ const dedupeKey = input.dedupeKey ?? null;
51
+ if (dedupeKey !== null) {
52
+ const existing = await db
53
+ .selectFrom('adminium_jobs')
54
+ .selectAll()
55
+ .where('dedupeKey', '=', dedupeKey)
56
+ .executeTakeFirst();
57
+ if (existing)
58
+ return mapJob(existing);
59
+ }
60
+ const row = {
61
+ id: newId('job'),
62
+ kind: input.kind,
63
+ payload: packJson(payload),
64
+ status: 'pending',
65
+ priority: input.priority ?? 0,
66
+ runAt: input.runAt ?? at,
67
+ attempts: 0,
68
+ maxAttempts: input.maxAttempts ?? 3,
69
+ lockedBy: null,
70
+ lockedAt: null,
71
+ dedupeKey,
72
+ lastError: null,
73
+ createdAt: at,
74
+ startedAt: null,
75
+ finishedAt: null,
76
+ };
77
+ await db.insertInto('adminium_jobs').values(row).execute();
78
+ return mapJob(row);
79
+ },
80
+ /**
81
+ * Claim the next due job for `workerId` using the portable UPDATE guard.
82
+ * Considers pending jobs due at `at` (priority desc, run_at asc, id asc)
83
+ * and stale running jobs (lock older than `staleLockMs`). Returns null
84
+ * when nothing is claimable.
85
+ */
86
+ async claim(workerId, at = Date.now(), staleLockMs = JOB_STALE_LOCK_MS) {
87
+ const candidates = await db
88
+ .selectFrom('adminium_jobs')
89
+ .selectAll()
90
+ .where((eb) => eb.or([
91
+ eb.and([eb('status', '=', 'pending'), eb('runAt', '<=', at)]),
92
+ eb.and([eb('status', '=', 'running'), eb('lockedAt', '<', at - staleLockMs)]),
93
+ ]))
94
+ .orderBy('priority', 'desc')
95
+ .orderBy('runAt', 'asc')
96
+ .orderBy('id', 'asc')
97
+ .limit(5)
98
+ .execute();
99
+ for (const candidate of candidates) {
100
+ let guard = db
101
+ .updateTable('adminium_jobs')
102
+ .set({
103
+ status: 'running',
104
+ lockedBy: workerId,
105
+ lockedAt: at,
106
+ startedAt: at,
107
+ attempts: candidate.attempts + 1,
108
+ })
109
+ .where('id', '=', candidate.id)
110
+ .where('status', '=', candidate.status);
111
+ // Reclaiming a stale lock: make sure nobody re-locked it meanwhile.
112
+ if (candidate.status === 'running') {
113
+ guard = guard.where('lockedAt', '=', candidate.lockedAt);
114
+ }
115
+ const res = await guard.executeTakeFirst();
116
+ if (Number(res.numUpdatedRows) === 1) {
117
+ return await findById(candidate.id);
118
+ }
119
+ // Affected-rows 0: another worker won this candidate — try the next.
120
+ }
121
+ return null;
122
+ },
123
+ /** Success: terminal state; dedupe key released for reuse (§3.12). */
124
+ async complete(id, at = Date.now()) {
125
+ const res = await db
126
+ .updateTable('adminium_jobs')
127
+ .set({ status: 'succeeded', finishedAt: at, dedupeKey: null, lockedBy: null, lockedAt: null })
128
+ .where('id', '=', id)
129
+ .where('status', '=', 'running')
130
+ .executeTakeFirst();
131
+ return Number(res.numUpdatedRows) === 1;
132
+ },
133
+ /**
134
+ * Failure: retries with exponential backoff until `max_attempts`, then
135
+ * lands in terminal `failed` (dedupe key released).
136
+ */
137
+ async fail(id, error, at = Date.now(), backoffBaseMs = JOB_BACKOFF_BASE_MS) {
138
+ const job = await findById(id);
139
+ if (!job || job.status !== 'running')
140
+ return null;
141
+ if (job.attempts >= job.maxAttempts) {
142
+ await db
143
+ .updateTable('adminium_jobs')
144
+ .set({ status: 'failed', finishedAt: at, lastError: error, dedupeKey: null, lockedBy: null, lockedAt: null })
145
+ .where('id', '=', id)
146
+ .where('status', '=', 'running')
147
+ .execute();
148
+ }
149
+ else {
150
+ const delay = backoffBaseMs * 2 ** Math.max(0, job.attempts - 1);
151
+ await db
152
+ .updateTable('adminium_jobs')
153
+ .set({ status: 'pending', runAt: at + delay, lastError: error, lockedBy: null, lockedAt: null })
154
+ .where('id', '=', id)
155
+ .where('status', '=', 'running')
156
+ .execute();
157
+ }
158
+ return await findById(id);
159
+ },
160
+ async cancel(id, at = Date.now()) {
161
+ const res = await db
162
+ .updateTable('adminium_jobs')
163
+ .set({ status: 'cancelled', finishedAt: at, dedupeKey: null, lockedBy: null, lockedAt: null })
164
+ .where('id', '=', id)
165
+ .where('status', '=', 'pending')
166
+ .executeTakeFirst();
167
+ return Number(res.numUpdatedRows) === 1;
168
+ },
169
+ /**
170
+ * Retention §8 `jobs` policy: succeeded/cancelled past `retentionDays`,
171
+ * failed kept twice as long.
172
+ */
173
+ async gc(at = Date.now(), retentionDays = 30) {
174
+ const cutoff = at - retentionDays * DAY_MS;
175
+ const failedCutoff = at - 2 * retentionDays * DAY_MS;
176
+ const res = await db
177
+ .deleteFrom('adminium_jobs')
178
+ .where((eb) => eb.or([
179
+ eb.and([eb('status', 'in', ['succeeded', 'cancelled']), eb('finishedAt', '<', cutoff)]),
180
+ eb.and([eb('status', '=', 'failed'), eb('finishedAt', '<', failedCutoff)]),
181
+ ]))
182
+ .executeTakeFirst();
183
+ return Number(res.numDeletedRows);
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/repos/jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * llmOverridesRepo — the LLM-sourced slice of `adminium_schema_overrides`
3
+ * (06-llm-assist.md §8.3).
4
+ *
5
+ * The user remap editor writes single-locale correction ops (`table.label`,
6
+ * `column.pii`, …) through {@link overridesRepo}; an LLM apply writes a
7
+ * different, richer set of fields — localized label/description bundles, key
8
+ * bundles, enum semantics, virtual relations and PII masks — whose values are
9
+ * localized maps, not plain strings. Those never fit the remap `op` vocabulary,
10
+ * so they live under their own namespaced ops (`llm.<field>`, {@link llmOverrideOp})
11
+ * carrying `origin: 'llm'` + `llm_run_id`. Keeping the two namespaces disjoint
12
+ * means the remap editor and the effective-schema resolver can tell a machine
13
+ * suggestion from a human edit, and an LLM write can never masquerade as (or
14
+ * silently clobber) a user edit.
15
+ *
16
+ * The repo is intentionally thin and transaction-friendly: every method operates
17
+ * on the {@link MetaDb} handle it is constructed with, so the apply-EXECUTOR
18
+ * (apps/server, T10b) can bind it to a Kysely transaction (`{ db: trx, dialect }`)
19
+ * and upsert overrides + write pages in ONE transaction. `upsert` is idempotent
20
+ * — keyed on `(connection, op, table, column)` it updates the existing `llm` row
21
+ * in place rather than inserting a duplicate, which is what makes re-applying the
22
+ * same run a no-op and re-applying a NEWER run supersede (new `llm_run_id`) the
23
+ * prior one (§8.3 idempotency + provenance).
24
+ */
25
+ import type { MetaDb } from '../connect.js';
26
+ /**
27
+ * §8.3 apply-target fields the LLM path writes to `adminium_schema_overrides`.
28
+ * Mirrors `@adminium/llm` `OverrideField` (the pure planner's descriptor field);
29
+ * kept as a local literal so `@adminium/meta` takes no dependency on the llm pkg.
30
+ */
31
+ export declare const LLM_OVERRIDE_FIELDS: readonly ["label", "key", "pii", "copy", "enum_semantics", "virtual_relation", "relation_suppressed"];
32
+ export type LlmOverrideField = (typeof LLM_OVERRIDE_FIELDS)[number];
33
+ /** The `adminium_schema_overrides.op` value persisted for an LLM `field`. */
34
+ export declare function llmOverrideOp(field: LlmOverrideField): string;
35
+ /** Parse an `op` string back to its `field`, or `null` when it is not an LLM op. */
36
+ export declare function llmOverrideField(op: string): LlmOverrideField | null;
37
+ export interface LlmOverride {
38
+ id: string;
39
+ connectionId: string;
40
+ field: LlmOverrideField;
41
+ /** Qualified source name, e.g. `public.customers`. */
42
+ tableName: string;
43
+ columnName: string | null;
44
+ /** Localized/structured value, or `null` for an explicit clear (a PII rejection). */
45
+ value: Record<string, unknown> | null;
46
+ /** Per-suggestion model confidence 0..1 (§8.3). */
47
+ confidence: number | null;
48
+ llmRunId: string | null;
49
+ status: 'active' | 'disabled';
50
+ createdBy: string | null;
51
+ createdAt: number;
52
+ updatedAt: number;
53
+ }
54
+ export interface UpsertLlmOverrideInput {
55
+ connectionId: string;
56
+ field: LlmOverrideField;
57
+ tableName: string;
58
+ columnName?: string | null;
59
+ /** Object value (localized maps where applicable) or `null` for a clear. */
60
+ value: Record<string, unknown> | null;
61
+ /** Per-suggestion model confidence 0..1 (§8.3). */
62
+ confidence?: number | null;
63
+ llmRunId?: string | null;
64
+ createdBy?: string | null;
65
+ }
66
+ export interface UpsertLlmOverrideResult {
67
+ override: LlmOverride;
68
+ /** `inserted` — no prior `llm` row for this target; `updated` — superseded one. */
69
+ action: 'inserted' | 'updated';
70
+ /** The row as it was BEFORE this upsert, for single-transaction undo (null on insert). */
71
+ before: LlmOverride | null;
72
+ }
73
+ export declare function llmOverridesRepo(meta: MetaDb): {
74
+ /**
75
+ * Idempotent upsert of one §8.3 LLM override, keyed on
76
+ * `(connection, op, table, column)`. Inserts a fresh `origin: 'llm'` row or
77
+ * updates the existing one in place (value + superseding `llm_run_id`),
78
+ * returning the prior state for undo. Never touches `origin: 'user'` rows.
79
+ */
80
+ upsert(input: UpsertLlmOverrideInput, at?: number): Promise<UpsertLlmOverrideResult>;
81
+ /** Restore a prior row image captured by {@link upsert} (undo of an `updated` write). */
82
+ restore(before: LlmOverride, at?: number): Promise<void>;
83
+ /** Delete a row inserted by this apply (undo of an `inserted` write). */
84
+ deleteById(id: string): Promise<void>;
85
+ /** All `origin: 'llm'` overrides for a connection, in application order. */
86
+ listForConnection(connectionId: string): Promise<LlmOverride[]>;
87
+ };
88
+ export type LlmOverridesRepo = ReturnType<typeof llmOverridesRepo>;
89
+ //# sourceMappingURL=llm-overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-overrides.d.ts","sourceRoot":"","sources":["../../src/repos/llm-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,uGAQtB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAapE,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAE7D;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAIpE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,WAAW,CAAC;IACtB,mFAAmF;IACnF,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAwCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAqBzC;;;;;OAKG;kBACiB,sBAAsB,OAAM,MAAM,GAAgB,OAAO,CAAC,uBAAuB,CAAC;IA4DtG,yFAAyF;oBACnE,WAAW,OAAM,MAAM,GAAgB,OAAO,CAAC,IAAI,CAAC;IAc1E,yEAAyE;mBACpD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,4EAA4E;oCACtC,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;EAYxE;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * llmOverridesRepo — the LLM-sourced slice of `adminium_schema_overrides`
3
+ * (06-llm-assist.md §8.3).
4
+ *
5
+ * The user remap editor writes single-locale correction ops (`table.label`,
6
+ * `column.pii`, …) through {@link overridesRepo}; an LLM apply writes a
7
+ * different, richer set of fields — localized label/description bundles, key
8
+ * bundles, enum semantics, virtual relations and PII masks — whose values are
9
+ * localized maps, not plain strings. Those never fit the remap `op` vocabulary,
10
+ * so they live under their own namespaced ops (`llm.<field>`, {@link llmOverrideOp})
11
+ * carrying `origin: 'llm'` + `llm_run_id`. Keeping the two namespaces disjoint
12
+ * means the remap editor and the effective-schema resolver can tell a machine
13
+ * suggestion from a human edit, and an LLM write can never masquerade as (or
14
+ * silently clobber) a user edit.
15
+ *
16
+ * The repo is intentionally thin and transaction-friendly: every method operates
17
+ * on the {@link MetaDb} handle it is constructed with, so the apply-EXECUTOR
18
+ * (apps/server, T10b) can bind it to a Kysely transaction (`{ db: trx, dialect }`)
19
+ * and upsert overrides + write pages in ONE transaction. `upsert` is idempotent
20
+ * — keyed on `(connection, op, table, column)` it updates the existing `llm` row
21
+ * in place rather than inserting a duplicate, which is what makes re-applying the
22
+ * same run a no-op and re-applying a NEWER run supersede (new `llm_run_id`) the
23
+ * prior one (§8.3 idempotency + provenance).
24
+ */
25
+ import { newId } from '../ids.js';
26
+ import { MetaValidationError, packJson, readJson } from './util.js';
27
+ /**
28
+ * §8.3 apply-target fields the LLM path writes to `adminium_schema_overrides`.
29
+ * Mirrors `@adminium/llm` `OverrideField` (the pure planner's descriptor field);
30
+ * kept as a local literal so `@adminium/meta` takes no dependency on the llm pkg.
31
+ */
32
+ export const LLM_OVERRIDE_FIELDS = [
33
+ 'label',
34
+ 'key',
35
+ 'pii',
36
+ 'copy',
37
+ 'enum_semantics',
38
+ 'virtual_relation',
39
+ 'relation_suppressed',
40
+ ];
41
+ const FIELD_SET = new Set(LLM_OVERRIDE_FIELDS);
42
+ /** Column-scoped fields require `columnName`; table-scoped fields forbid it. */
43
+ const COLUMN_FIELDS = new Set([
44
+ 'label', // a column label bundle is column-scoped; a table label bundle is not (columnName decides)
45
+ 'pii',
46
+ 'enum_semantics',
47
+ ]);
48
+ const OP_PREFIX = 'llm.';
49
+ /** The `adminium_schema_overrides.op` value persisted for an LLM `field`. */
50
+ export function llmOverrideOp(field) {
51
+ return `${OP_PREFIX}${field}`;
52
+ }
53
+ /** Parse an `op` string back to its `field`, or `null` when it is not an LLM op. */
54
+ export function llmOverrideField(op) {
55
+ if (!op.startsWith(OP_PREFIX))
56
+ return null;
57
+ const field = op.slice(OP_PREFIX.length);
58
+ return FIELD_SET.has(field) ? field : null;
59
+ }
60
+ function decode(row) {
61
+ const field = llmOverrideField(row.op);
62
+ if (field === null) {
63
+ throw new MetaValidationError(`not an llm override op: ${JSON.stringify(row.op)}`);
64
+ }
65
+ return {
66
+ id: row.id,
67
+ connectionId: row.connectionId,
68
+ field,
69
+ tableName: row.tableName,
70
+ columnName: row.columnName,
71
+ value: readJson(row.value),
72
+ confidence: row.confidence,
73
+ llmRunId: row.llmRunId,
74
+ status: row.status,
75
+ createdBy: row.createdBy,
76
+ createdAt: row.createdAt,
77
+ updatedAt: row.updatedAt,
78
+ };
79
+ }
80
+ /** Value must be a plain JSON object or `null` — a hallucinated scalar never reaches the DB. */
81
+ function assertValue(field, value) {
82
+ if (value === null)
83
+ return;
84
+ if (typeof value !== 'object' || Array.isArray(value)) {
85
+ throw new MetaValidationError(`llm override ${field} value must be an object or null`);
86
+ }
87
+ }
88
+ function assertColumnShape(field, columnName) {
89
+ const needsColumn = COLUMN_FIELDS.has(field);
90
+ // `label` is dual-scoped (table bundle OR column bundle); only the strictly
91
+ // column-only fields (pii, enum_semantics) demand a column here.
92
+ if (field !== 'label' && needsColumn && (columnName === null || columnName.length === 0)) {
93
+ throw new MetaValidationError(`llm override ${field} requires columnName`);
94
+ }
95
+ }
96
+ export function llmOverridesRepo(meta) {
97
+ const { db } = meta;
98
+ async function findLlmRow(connectionId, op, tableName, columnName) {
99
+ let q = db
100
+ .selectFrom('adminium_schema_overrides')
101
+ .selectAll()
102
+ .where('connectionId', '=', connectionId)
103
+ .where('origin', '=', 'llm')
104
+ .where('op', '=', op)
105
+ .where('tableName', '=', tableName);
106
+ q = columnName === null ? q.where('columnName', 'is', null) : q.where('columnName', '=', columnName);
107
+ return q.executeTakeFirst();
108
+ }
109
+ return {
110
+ /**
111
+ * Idempotent upsert of one §8.3 LLM override, keyed on
112
+ * `(connection, op, table, column)`. Inserts a fresh `origin: 'llm'` row or
113
+ * updates the existing one in place (value + superseding `llm_run_id`),
114
+ * returning the prior state for undo. Never touches `origin: 'user'` rows.
115
+ */
116
+ async upsert(input, at = Date.now()) {
117
+ if (!FIELD_SET.has(input.field)) {
118
+ throw new MetaValidationError(`unknown llm override field ${JSON.stringify(input.field)}`);
119
+ }
120
+ if (input.tableName.length === 0)
121
+ throw new MetaValidationError('tableName must not be empty');
122
+ const columnName = input.columnName ?? null;
123
+ assertColumnShape(input.field, columnName);
124
+ assertValue(input.field, input.value);
125
+ const op = llmOverrideOp(input.field);
126
+ const confidence = input.confidence ?? null;
127
+ const existing = await findLlmRow(input.connectionId, op, input.tableName, columnName);
128
+ const packed = packJson(input.value);
129
+ if (existing !== undefined) {
130
+ const before = decode(existing);
131
+ await db
132
+ .updateTable('adminium_schema_overrides')
133
+ .set({
134
+ value: packed,
135
+ confidence,
136
+ llmRunId: input.llmRunId ?? null,
137
+ status: 'active',
138
+ updatedAt: at,
139
+ })
140
+ .where('id', '=', existing.id)
141
+ .execute();
142
+ return {
143
+ override: {
144
+ ...before,
145
+ value: input.value,
146
+ confidence,
147
+ llmRunId: input.llmRunId ?? null,
148
+ status: 'active',
149
+ updatedAt: at,
150
+ },
151
+ action: 'updated',
152
+ before,
153
+ };
154
+ }
155
+ const row = {
156
+ id: newId('ovr'),
157
+ connectionId: input.connectionId,
158
+ op,
159
+ tableName: input.tableName,
160
+ columnName,
161
+ value: packed,
162
+ origin: 'llm',
163
+ confidence,
164
+ llmRunId: input.llmRunId ?? null,
165
+ status: 'active',
166
+ createdBy: input.createdBy ?? null,
167
+ createdAt: at,
168
+ updatedAt: at,
169
+ };
170
+ await db.insertInto('adminium_schema_overrides').values(row).execute();
171
+ return { override: decode(row), action: 'inserted', before: null };
172
+ },
173
+ /** Restore a prior row image captured by {@link upsert} (undo of an `updated` write). */
174
+ async restore(before, at = Date.now()) {
175
+ await db
176
+ .updateTable('adminium_schema_overrides')
177
+ .set({
178
+ value: packJson(before.value),
179
+ confidence: before.confidence,
180
+ llmRunId: before.llmRunId,
181
+ status: before.status,
182
+ updatedAt: at,
183
+ })
184
+ .where('id', '=', before.id)
185
+ .execute();
186
+ },
187
+ /** Delete a row inserted by this apply (undo of an `inserted` write). */
188
+ async deleteById(id) {
189
+ await db.deleteFrom('adminium_schema_overrides').where('id', '=', id).execute();
190
+ },
191
+ /** All `origin: 'llm'` overrides for a connection, in application order. */
192
+ async listForConnection(connectionId) {
193
+ const rows = await db
194
+ .selectFrom('adminium_schema_overrides')
195
+ .selectAll()
196
+ .where('connectionId', '=', connectionId)
197
+ .where('origin', '=', 'llm')
198
+ .orderBy('createdAt', 'asc')
199
+ .orderBy('id', 'asc')
200
+ .execute();
201
+ return rows.map(decode);
202
+ },
203
+ };
204
+ }
205
+ //# sourceMappingURL=llm-overrides.js.map