@jini-ai/cms 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +84 -0
  3. package/dist/content-types/agent-tools.d.ts +65 -0
  4. package/dist/content-types/agent-tools.d.ts.map +1 -0
  5. package/dist/content-types/agent-tools.js +172 -0
  6. package/dist/content-types/agent-tools.js.map +1 -0
  7. package/dist/content-types/cleanup.d.ts +118 -0
  8. package/dist/content-types/cleanup.d.ts.map +1 -0
  9. package/dist/content-types/cleanup.js +65 -0
  10. package/dist/content-types/cleanup.js.map +1 -0
  11. package/dist/content-types/errors.d.ts +90 -0
  12. package/dist/content-types/errors.d.ts.map +1 -0
  13. package/dist/content-types/errors.js +119 -0
  14. package/dist/content-types/errors.js.map +1 -0
  15. package/dist/content-types/field-defs.d.ts +25 -0
  16. package/dist/content-types/field-defs.d.ts.map +1 -0
  17. package/dist/content-types/field-defs.js +155 -0
  18. package/dist/content-types/field-defs.js.map +1 -0
  19. package/dist/content-types/index-provisioning.d.ts +94 -0
  20. package/dist/content-types/index-provisioning.d.ts.map +1 -0
  21. package/dist/content-types/index-provisioning.js +133 -0
  22. package/dist/content-types/index-provisioning.js.map +1 -0
  23. package/dist/content-types/index.d.ts +63 -0
  24. package/dist/content-types/index.d.ts.map +1 -0
  25. package/dist/content-types/index.js +36 -0
  26. package/dist/content-types/index.js.map +1 -0
  27. package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
  28. package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
  29. package/dist/content-types/lifecycle-dispatch.js +28 -0
  30. package/dist/content-types/lifecycle-dispatch.js.map +1 -0
  31. package/dist/content-types/lifecycle.d.ts +104 -0
  32. package/dist/content-types/lifecycle.d.ts.map +1 -0
  33. package/dist/content-types/lifecycle.js +143 -0
  34. package/dist/content-types/lifecycle.js.map +1 -0
  35. package/dist/content-types/list.d.ts +44 -0
  36. package/dist/content-types/list.d.ts.map +1 -0
  37. package/dist/content-types/list.js +13 -0
  38. package/dist/content-types/list.js.map +1 -0
  39. package/dist/content-types/repo.memory.d.ts +72 -0
  40. package/dist/content-types/repo.memory.d.ts.map +1 -0
  41. package/dist/content-types/repo.memory.js +71 -0
  42. package/dist/content-types/repo.memory.js.map +1 -0
  43. package/dist/content-types/tool-registrations.d.ts +65 -0
  44. package/dist/content-types/tool-registrations.d.ts.map +1 -0
  45. package/dist/content-types/tool-registrations.js +180 -0
  46. package/dist/content-types/tool-registrations.js.map +1 -0
  47. package/dist/content-types/types.d.ts +78 -0
  48. package/dist/content-types/types.d.ts.map +1 -0
  49. package/dist/content-types/types.js +32 -0
  50. package/dist/content-types/types.js.map +1 -0
  51. package/dist/content-types/write-service.d.ts +141 -0
  52. package/dist/content-types/write-service.d.ts.map +1 -0
  53. package/dist/content-types/write-service.js +180 -0
  54. package/dist/content-types/write-service.js.map +1 -0
  55. package/dist/core/commands/change-set.d.ts +98 -0
  56. package/dist/core/commands/change-set.d.ts.map +1 -0
  57. package/dist/core/commands/change-set.js +2 -0
  58. package/dist/core/commands/change-set.js.map +1 -0
  59. package/dist/core/commands/command.d.ts +168 -0
  60. package/dist/core/commands/command.d.ts.map +1 -0
  61. package/dist/core/commands/command.js +173 -0
  62. package/dist/core/commands/command.js.map +1 -0
  63. package/dist/core/index.d.ts +45 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +43 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/ports.d.ts +139 -0
  68. package/dist/core/ports.d.ts.map +1 -0
  69. package/dist/core/ports.js +2 -0
  70. package/dist/core/ports.js.map +1 -0
  71. package/dist/core/tools/registration-kit.d.ts +308 -0
  72. package/dist/core/tools/registration-kit.d.ts.map +1 -0
  73. package/dist/core/tools/registration-kit.js +381 -0
  74. package/dist/core/tools/registration-kit.js.map +1 -0
  75. package/dist/entries/agent-tools.d.ts +78 -0
  76. package/dist/entries/agent-tools.d.ts.map +1 -0
  77. package/dist/entries/agent-tools.js +158 -0
  78. package/dist/entries/agent-tools.js.map +1 -0
  79. package/dist/entries/errors.d.ts +43 -0
  80. package/dist/entries/errors.d.ts.map +1 -0
  81. package/dist/entries/errors.js +59 -0
  82. package/dist/entries/errors.js.map +1 -0
  83. package/dist/entries/field-validation.d.ts +70 -0
  84. package/dist/entries/field-validation.d.ts.map +1 -0
  85. package/dist/entries/field-validation.js +87 -0
  86. package/dist/entries/field-validation.js.map +1 -0
  87. package/dist/entries/index.d.ts +55 -0
  88. package/dist/entries/index.d.ts.map +1 -0
  89. package/dist/entries/index.js +38 -0
  90. package/dist/entries/index.js.map +1 -0
  91. package/dist/entries/lifecycle-dispatch.d.ts +15 -0
  92. package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
  93. package/dist/entries/lifecycle-dispatch.js +16 -0
  94. package/dist/entries/lifecycle-dispatch.js.map +1 -0
  95. package/dist/entries/list.d.ts +47 -0
  96. package/dist/entries/list.d.ts.map +1 -0
  97. package/dist/entries/list.js +12 -0
  98. package/dist/entries/list.js.map +1 -0
  99. package/dist/entries/repo.memory.d.ts +64 -0
  100. package/dist/entries/repo.memory.d.ts.map +1 -0
  101. package/dist/entries/repo.memory.js +73 -0
  102. package/dist/entries/repo.memory.js.map +1 -0
  103. package/dist/entries/tool-registrations.d.ts +52 -0
  104. package/dist/entries/tool-registrations.d.ts.map +1 -0
  105. package/dist/entries/tool-registrations.js +141 -0
  106. package/dist/entries/tool-registrations.js.map +1 -0
  107. package/dist/entries/types.d.ts +55 -0
  108. package/dist/entries/types.d.ts.map +1 -0
  109. package/dist/entries/types.js +2 -0
  110. package/dist/entries/types.js.map +1 -0
  111. package/dist/entries/write-service.d.ts +202 -0
  112. package/dist/entries/write-service.d.ts.map +1 -0
  113. package/dist/entries/write-service.js +204 -0
  114. package/dist/entries/write-service.js.map +1 -0
  115. package/dist/identity/admin-crud-service.d.ts +252 -0
  116. package/dist/identity/admin-crud-service.d.ts.map +1 -0
  117. package/dist/identity/admin-crud-service.js +437 -0
  118. package/dist/identity/admin-crud-service.js.map +1 -0
  119. package/dist/identity/agent-tool-input.d.ts +58 -0
  120. package/dist/identity/agent-tool-input.d.ts.map +1 -0
  121. package/dist/identity/agent-tool-input.js +126 -0
  122. package/dist/identity/agent-tool-input.js.map +1 -0
  123. package/dist/identity/agent-tools.d.ts +101 -0
  124. package/dist/identity/agent-tools.d.ts.map +1 -0
  125. package/dist/identity/agent-tools.js +290 -0
  126. package/dist/identity/agent-tools.js.map +1 -0
  127. package/dist/identity/auth-service.d.ts +87 -0
  128. package/dist/identity/auth-service.d.ts.map +1 -0
  129. package/dist/identity/auth-service.js +141 -0
  130. package/dist/identity/auth-service.js.map +1 -0
  131. package/dist/identity/authorize.d.ts +90 -0
  132. package/dist/identity/authorize.d.ts.map +1 -0
  133. package/dist/identity/authorize.js +94 -0
  134. package/dist/identity/authorize.js.map +1 -0
  135. package/dist/identity/grant-service.d.ts +198 -0
  136. package/dist/identity/grant-service.d.ts.map +1 -0
  137. package/dist/identity/grant-service.js +361 -0
  138. package/dist/identity/grant-service.js.map +1 -0
  139. package/dist/identity/hasher.d.ts +39 -0
  140. package/dist/identity/hasher.d.ts.map +1 -0
  141. package/dist/identity/hasher.js +39 -0
  142. package/dist/identity/hasher.js.map +1 -0
  143. package/dist/identity/index.d.ts +59 -0
  144. package/dist/identity/index.d.ts.map +1 -0
  145. package/dist/identity/index.js +51 -0
  146. package/dist/identity/index.js.map +1 -0
  147. package/dist/identity/password-policy.d.ts +58 -0
  148. package/dist/identity/password-policy.d.ts.map +1 -0
  149. package/dist/identity/password-policy.js +67 -0
  150. package/dist/identity/password-policy.js.map +1 -0
  151. package/dist/identity/permission-migrations.d.ts +86 -0
  152. package/dist/identity/permission-migrations.d.ts.map +1 -0
  153. package/dist/identity/permission-migrations.js +67 -0
  154. package/dist/identity/permission-migrations.js.map +1 -0
  155. package/dist/identity/permissions.d.ts +35 -0
  156. package/dist/identity/permissions.d.ts.map +1 -0
  157. package/dist/identity/permissions.js +603 -0
  158. package/dist/identity/permissions.js.map +1 -0
  159. package/dist/identity/ports.d.ts +201 -0
  160. package/dist/identity/ports.d.ts.map +1 -0
  161. package/dist/identity/ports.js +2 -0
  162. package/dist/identity/ports.js.map +1 -0
  163. package/dist/identity/repo.memory.d.ts +164 -0
  164. package/dist/identity/repo.memory.d.ts.map +1 -0
  165. package/dist/identity/repo.memory.js +224 -0
  166. package/dist/identity/repo.memory.js.map +1 -0
  167. package/dist/identity/seed.d.ts +42 -0
  168. package/dist/identity/seed.d.ts.map +1 -0
  169. package/dist/identity/seed.js +277 -0
  170. package/dist/identity/seed.js.map +1 -0
  171. package/dist/identity/tool-registrations.d.ts +50 -0
  172. package/dist/identity/tool-registrations.d.ts.map +1 -0
  173. package/dist/identity/tool-registrations.js +419 -0
  174. package/dist/identity/tool-registrations.js.map +1 -0
  175. package/dist/identity/types.d.ts +185 -0
  176. package/dist/identity/types.d.ts.map +1 -0
  177. package/dist/identity/types.js +64 -0
  178. package/dist/identity/types.js.map +1 -0
  179. package/dist/identity/username.d.ts +12 -0
  180. package/dist/identity/username.d.ts.map +1 -0
  181. package/dist/identity/username.js +14 -0
  182. package/dist/identity/username.js.map +1 -0
  183. package/dist/media/agent-tools.d.ts +66 -0
  184. package/dist/media/agent-tools.d.ts.map +1 -0
  185. package/dist/media/agent-tools.js +131 -0
  186. package/dist/media/agent-tools.js.map +1 -0
  187. package/dist/media/blob-gc-lock.d.ts +37 -0
  188. package/dist/media/blob-gc-lock.d.ts.map +1 -0
  189. package/dist/media/blob-gc-lock.js +55 -0
  190. package/dist/media/blob-gc-lock.js.map +1 -0
  191. package/dist/media/blob-gc.d.ts +246 -0
  192. package/dist/media/blob-gc.d.ts.map +1 -0
  193. package/dist/media/blob-gc.js +254 -0
  194. package/dist/media/blob-gc.js.map +1 -0
  195. package/dist/media/blob-key.d.ts +28 -0
  196. package/dist/media/blob-key.d.ts.map +1 -0
  197. package/dist/media/blob-key.js +11 -0
  198. package/dist/media/blob-key.js.map +1 -0
  199. package/dist/media/blob-store.fs.d.ts +23 -0
  200. package/dist/media/blob-store.fs.d.ts.map +1 -0
  201. package/dist/media/blob-store.fs.js +48 -0
  202. package/dist/media/blob-store.fs.js.map +1 -0
  203. package/dist/media/blob-store.memory.d.ts +22 -0
  204. package/dist/media/blob-store.memory.d.ts.map +1 -0
  205. package/dist/media/blob-store.memory.js +23 -0
  206. package/dist/media/blob-store.memory.js.map +1 -0
  207. package/dist/media/content-type-sniffer.d.ts +49 -0
  208. package/dist/media/content-type-sniffer.d.ts.map +1 -0
  209. package/dist/media/content-type-sniffer.js +141 -0
  210. package/dist/media/content-type-sniffer.js.map +1 -0
  211. package/dist/media/image-transformer.d.ts +45 -0
  212. package/dist/media/image-transformer.d.ts.map +1 -0
  213. package/dist/media/image-transformer.js +23 -0
  214. package/dist/media/image-transformer.js.map +1 -0
  215. package/dist/media/image-transformer.sharp.d.ts +26 -0
  216. package/dist/media/image-transformer.sharp.d.ts.map +1 -0
  217. package/dist/media/image-transformer.sharp.js +91 -0
  218. package/dist/media/image-transformer.sharp.js.map +1 -0
  219. package/dist/media/index.d.ts +43 -0
  220. package/dist/media/index.d.ts.map +1 -0
  221. package/dist/media/index.js +31 -0
  222. package/dist/media/index.js.map +1 -0
  223. package/dist/media/media-service.d.ts +244 -0
  224. package/dist/media/media-service.d.ts.map +1 -0
  225. package/dist/media/media-service.js +345 -0
  226. package/dist/media/media-service.js.map +1 -0
  227. package/dist/media/ports.d.ts +142 -0
  228. package/dist/media/ports.d.ts.map +1 -0
  229. package/dist/media/ports.js +2 -0
  230. package/dist/media/ports.js.map +1 -0
  231. package/dist/media/rendition-service.d.ts +66 -0
  232. package/dist/media/rendition-service.d.ts.map +1 -0
  233. package/dist/media/rendition-service.js +135 -0
  234. package/dist/media/rendition-service.js.map +1 -0
  235. package/dist/media/repo.memory.d.ts +107 -0
  236. package/dist/media/repo.memory.d.ts.map +1 -0
  237. package/dist/media/repo.memory.js +131 -0
  238. package/dist/media/repo.memory.js.map +1 -0
  239. package/dist/media/tool-registrations.d.ts +42 -0
  240. package/dist/media/tool-registrations.d.ts.map +1 -0
  241. package/dist/media/tool-registrations.js +121 -0
  242. package/dist/media/tool-registrations.js.map +1 -0
  243. package/dist/media/transform-lock.d.ts +36 -0
  244. package/dist/media/transform-lock.d.ts.map +1 -0
  245. package/dist/media/transform-lock.js +50 -0
  246. package/dist/media/transform-lock.js.map +1 -0
  247. package/dist/media/transform-registry.d.ts +103 -0
  248. package/dist/media/transform-registry.d.ts.map +1 -0
  249. package/dist/media/transform-registry.js +87 -0
  250. package/dist/media/transform-registry.js.map +1 -0
  251. package/dist/media/transform-types.d.ts +82 -0
  252. package/dist/media/transform-types.d.ts.map +1 -0
  253. package/dist/media/transform-types.js +47 -0
  254. package/dist/media/transform-types.js.map +1 -0
  255. package/dist/media/types.d.ts +150 -0
  256. package/dist/media/types.d.ts.map +1 -0
  257. package/dist/media/types.js +26 -0
  258. package/dist/media/types.js.map +1 -0
  259. package/dist/navigation/agent-tools.d.ts +90 -0
  260. package/dist/navigation/agent-tools.d.ts.map +1 -0
  261. package/dist/navigation/agent-tools.js +225 -0
  262. package/dist/navigation/agent-tools.js.map +1 -0
  263. package/dist/navigation/contracts.d.ts +98 -0
  264. package/dist/navigation/contracts.d.ts.map +1 -0
  265. package/dist/navigation/contracts.js +70 -0
  266. package/dist/navigation/contracts.js.map +1 -0
  267. package/dist/navigation/index.d.ts +39 -0
  268. package/dist/navigation/index.d.ts.map +1 -0
  269. package/dist/navigation/index.js +30 -0
  270. package/dist/navigation/index.js.map +1 -0
  271. package/dist/navigation/menu-service.d.ts +256 -0
  272. package/dist/navigation/menu-service.d.ts.map +1 -0
  273. package/dist/navigation/menu-service.js +382 -0
  274. package/dist/navigation/menu-service.js.map +1 -0
  275. package/dist/navigation/ports.d.ts +147 -0
  276. package/dist/navigation/ports.d.ts.map +1 -0
  277. package/dist/navigation/ports.js +2 -0
  278. package/dist/navigation/ports.js.map +1 -0
  279. package/dist/navigation/read-model.d.ts +11 -0
  280. package/dist/navigation/read-model.d.ts.map +1 -0
  281. package/dist/navigation/read-model.js +27 -0
  282. package/dist/navigation/read-model.js.map +1 -0
  283. package/dist/navigation/reconcile.d.ts +57 -0
  284. package/dist/navigation/reconcile.d.ts.map +1 -0
  285. package/dist/navigation/reconcile.js +33 -0
  286. package/dist/navigation/reconcile.js.map +1 -0
  287. package/dist/navigation/repo.memory.d.ts +137 -0
  288. package/dist/navigation/repo.memory.d.ts.map +1 -0
  289. package/dist/navigation/repo.memory.js +95 -0
  290. package/dist/navigation/repo.memory.js.map +1 -0
  291. package/dist/navigation/resolver.d.ts +110 -0
  292. package/dist/navigation/resolver.d.ts.map +1 -0
  293. package/dist/navigation/resolver.js +131 -0
  294. package/dist/navigation/resolver.js.map +1 -0
  295. package/dist/navigation/tool-registrations.d.ts +43 -0
  296. package/dist/navigation/tool-registrations.d.ts.map +1 -0
  297. package/dist/navigation/tool-registrations.js +126 -0
  298. package/dist/navigation/tool-registrations.js.map +1 -0
  299. package/dist/navigation/types.d.ts +207 -0
  300. package/dist/navigation/types.d.ts.map +1 -0
  301. package/dist/navigation/types.js +14 -0
  302. package/dist/navigation/types.js.map +1 -0
  303. package/dist/presentation/index.d.ts +15 -0
  304. package/dist/presentation/index.d.ts.map +1 -0
  305. package/dist/presentation/index.js +15 -0
  306. package/dist/presentation/index.js.map +1 -0
  307. package/dist/presentation/presentation.d.ts +72 -0
  308. package/dist/presentation/presentation.d.ts.map +1 -0
  309. package/dist/presentation/presentation.js +51 -0
  310. package/dist/presentation/presentation.js.map +1 -0
  311. package/dist/presentation/repo.memory.d.ts +9 -0
  312. package/dist/presentation/repo.memory.d.ts.map +1 -0
  313. package/dist/presentation/repo.memory.js +21 -0
  314. package/dist/presentation/repo.memory.js.map +1 -0
  315. package/dist/server/index.d.ts +28 -0
  316. package/dist/server/index.d.ts.map +1 -0
  317. package/dist/server/index.js +28 -0
  318. package/dist/server/index.js.map +1 -0
  319. package/dist/settings/agent-tools.d.ts +83 -0
  320. package/dist/settings/agent-tools.d.ts.map +1 -0
  321. package/dist/settings/agent-tools.js +200 -0
  322. package/dist/settings/agent-tools.js.map +1 -0
  323. package/dist/settings/agent-writable-preferences.d.ts +67 -0
  324. package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
  325. package/dist/settings/agent-writable-preferences.js +144 -0
  326. package/dist/settings/agent-writable-preferences.js.map +1 -0
  327. package/dist/settings/change-feed.d.ts +74 -0
  328. package/dist/settings/change-feed.d.ts.map +1 -0
  329. package/dist/settings/change-feed.js +61 -0
  330. package/dist/settings/change-feed.js.map +1 -0
  331. package/dist/settings/definitions-dispatch.d.ts +51 -0
  332. package/dist/settings/definitions-dispatch.d.ts.map +1 -0
  333. package/dist/settings/definitions-dispatch.js +86 -0
  334. package/dist/settings/definitions-dispatch.js.map +1 -0
  335. package/dist/settings/dictionaries/index.d.ts +45 -0
  336. package/dist/settings/dictionaries/index.d.ts.map +1 -0
  337. package/dist/settings/dictionaries/index.js +69 -0
  338. package/dist/settings/dictionaries/index.js.map +1 -0
  339. package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
  340. package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
  341. package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
  342. package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
  343. package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
  344. package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
  345. package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
  346. package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
  347. package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
  348. package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
  349. package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
  350. package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
  351. package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
  352. package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
  353. package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
  354. package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
  355. package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
  356. package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
  357. package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
  358. package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
  359. package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
  360. package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
  361. package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
  362. package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
  363. package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
  364. package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
  365. package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
  366. package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
  367. package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
  368. package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
  369. package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
  370. package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
  371. package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
  372. package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
  373. package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
  374. package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
  375. package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
  376. package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
  377. package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
  378. package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
  379. package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
  380. package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
  381. package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
  382. package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
  383. package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
  384. package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
  385. package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
  386. package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
  387. package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
  388. package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
  389. package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
  390. package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
  391. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
  392. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
  393. package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
  394. package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
  395. package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
  396. package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
  397. package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
  398. package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
  399. package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
  400. package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
  401. package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
  402. package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
  403. package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
  404. package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
  405. package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
  406. package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
  407. package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
  408. package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
  409. package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
  410. package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
  411. package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
  412. package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
  413. package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
  414. package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
  415. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
  416. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
  417. package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
  418. package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
  419. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
  420. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
  421. package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
  422. package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
  423. package/dist/settings/ensure-definitions.d.ts +88 -0
  424. package/dist/settings/ensure-definitions.d.ts.map +1 -0
  425. package/dist/settings/ensure-definitions.js +91 -0
  426. package/dist/settings/ensure-definitions.js.map +1 -0
  427. package/dist/settings/errors.d.ts +36 -0
  428. package/dist/settings/errors.d.ts.map +1 -0
  429. package/dist/settings/errors.js +40 -0
  430. package/dist/settings/errors.js.map +1 -0
  431. package/dist/settings/index.d.ts +37 -0
  432. package/dist/settings/index.d.ts.map +1 -0
  433. package/dist/settings/index.js +36 -0
  434. package/dist/settings/index.js.map +1 -0
  435. package/dist/settings/ports.d.ts +117 -0
  436. package/dist/settings/ports.d.ts.map +1 -0
  437. package/dist/settings/ports.js +2 -0
  438. package/dist/settings/ports.js.map +1 -0
  439. package/dist/settings/purge-service.d.ts +53 -0
  440. package/dist/settings/purge-service.d.ts.map +1 -0
  441. package/dist/settings/purge-service.js +105 -0
  442. package/dist/settings/purge-service.js.map +1 -0
  443. package/dist/settings/repo.memory.d.ts +119 -0
  444. package/dist/settings/repo.memory.d.ts.map +1 -0
  445. package/dist/settings/repo.memory.js +199 -0
  446. package/dist/settings/repo.memory.js.map +1 -0
  447. package/dist/settings/settings.d.ts +124 -0
  448. package/dist/settings/settings.d.ts.map +1 -0
  449. package/dist/settings/settings.js +238 -0
  450. package/dist/settings/settings.js.map +1 -0
  451. package/dist/settings/tool-registrations.d.ts +56 -0
  452. package/dist/settings/tool-registrations.d.ts.map +1 -0
  453. package/dist/settings/tool-registrations.js +240 -0
  454. package/dist/settings/tool-registrations.js.map +1 -0
  455. package/dist/settings/types.d.ts +125 -0
  456. package/dist/settings/types.d.ts.map +1 -0
  457. package/dist/settings/types.js +3 -0
  458. package/dist/settings/types.js.map +1 -0
  459. package/dist/settings/ui-tab-definitions.d.ts +41 -0
  460. package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
  461. package/dist/settings/ui-tab-definitions.js +148 -0
  462. package/dist/settings/ui-tab-definitions.js.map +1 -0
  463. package/dist/settings/write-service.d.ts +314 -0
  464. package/dist/settings/write-service.d.ts.map +1 -0
  465. package/dist/settings/write-service.js +677 -0
  466. package/dist/settings/write-service.js.map +1 -0
  467. package/dist/taxonomy/agent-tools.d.ts +76 -0
  468. package/dist/taxonomy/agent-tools.d.ts.map +1 -0
  469. package/dist/taxonomy/agent-tools.js +178 -0
  470. package/dist/taxonomy/agent-tools.js.map +1 -0
  471. package/dist/taxonomy/content-lookup.d.ts +45 -0
  472. package/dist/taxonomy/content-lookup.d.ts.map +1 -0
  473. package/dist/taxonomy/content-lookup.js +9 -0
  474. package/dist/taxonomy/content-lookup.js.map +1 -0
  475. package/dist/taxonomy/index.d.ts +38 -0
  476. package/dist/taxonomy/index.d.ts.map +1 -0
  477. package/dist/taxonomy/index.js +38 -0
  478. package/dist/taxonomy/index.js.map +1 -0
  479. package/dist/taxonomy/list.d.ts +39 -0
  480. package/dist/taxonomy/list.d.ts.map +1 -0
  481. package/dist/taxonomy/list.js +19 -0
  482. package/dist/taxonomy/list.js.map +1 -0
  483. package/dist/taxonomy/merge-term.d.ts +94 -0
  484. package/dist/taxonomy/merge-term.d.ts.map +1 -0
  485. package/dist/taxonomy/merge-term.js +65 -0
  486. package/dist/taxonomy/merge-term.js.map +1 -0
  487. package/dist/taxonomy/repo.memory.d.ts +160 -0
  488. package/dist/taxonomy/repo.memory.d.ts.map +1 -0
  489. package/dist/taxonomy/repo.memory.js +171 -0
  490. package/dist/taxonomy/repo.memory.js.map +1 -0
  491. package/dist/taxonomy/validation-chain.d.ts +114 -0
  492. package/dist/taxonomy/validation-chain.d.ts.map +1 -0
  493. package/dist/taxonomy/validation-chain.js +152 -0
  494. package/dist/taxonomy/validation-chain.js.map +1 -0
  495. package/dist/taxonomy/write-service.d.ts +387 -0
  496. package/dist/taxonomy/write-service.d.ts.map +1 -0
  497. package/dist/taxonomy/write-service.js +350 -0
  498. package/dist/taxonomy/write-service.js.map +1 -0
  499. package/dist/workspace/agent-tools.d.ts +67 -0
  500. package/dist/workspace/agent-tools.d.ts.map +1 -0
  501. package/dist/workspace/agent-tools.js +103 -0
  502. package/dist/workspace/agent-tools.js.map +1 -0
  503. package/dist/workspace/create.d.ts +116 -0
  504. package/dist/workspace/create.d.ts.map +1 -0
  505. package/dist/workspace/create.js +69 -0
  506. package/dist/workspace/create.js.map +1 -0
  507. package/dist/workspace/delete.d.ts +50 -0
  508. package/dist/workspace/delete.d.ts.map +1 -0
  509. package/dist/workspace/delete.js +24 -0
  510. package/dist/workspace/delete.js.map +1 -0
  511. package/dist/workspace/index.d.ts +27 -0
  512. package/dist/workspace/index.d.ts.map +1 -0
  513. package/dist/workspace/index.js +27 -0
  514. package/dist/workspace/index.js.map +1 -0
  515. package/dist/workspace/repo.memory.d.ts +34 -0
  516. package/dist/workspace/repo.memory.d.ts.map +1 -0
  517. package/dist/workspace/repo.memory.js +50 -0
  518. package/dist/workspace/repo.memory.js.map +1 -0
  519. package/dist/workspace/tool-registrations.d.ts +38 -0
  520. package/dist/workspace/tool-registrations.d.ts.map +1 -0
  521. package/dist/workspace/tool-registrations.js +71 -0
  522. package/dist/workspace/tool-registrations.js.map +1 -0
  523. package/dist/workspace/update.d.ts +52 -0
  524. package/dist/workspace/update.d.ts.map +1 -0
  525. package/dist/workspace/update.js +41 -0
  526. package/dist/workspace/update.js.map +1 -0
  527. package/package.json +149 -0
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Thrown when a command's idempotency key was already used in the workspace.
3
+ * Callers should re-read current state instead of retrying the mutation.
4
+ */
5
+ export class DuplicateCommandError extends Error {
6
+ changeSetId;
7
+ constructor(message, changeSetId) {
8
+ super(message);
9
+ this.changeSetId = changeSetId;
10
+ }
11
+ }
12
+ /**
13
+ * Thrown when `authorize()` denies the caller. Routes map
14
+ * this to 403 `FORBIDDEN`. Raised before the idempotency check (INV-04) — a
15
+ * replayed command id from a denied caller therefore never produces
16
+ * `DuplicateCommandError` either (EC-08).
17
+ */
18
+ export class ForbiddenError extends Error {
19
+ permission;
20
+ reason;
21
+ constructor(message, permission, reason) {
22
+ super(message);
23
+ this.permission = permission;
24
+ this.reason = reason;
25
+ }
26
+ }
27
+ /**
28
+ * Detects a UNIQUE-constraint violation on `changeSets.insert()`'s idempotency-key index —
29
+ * the losing side of the TOCTOU race between the pre-execute `findByIdempotencyKey` check and
30
+ * this same key's insert (two concurrent requests can both pass the check before either inserts;
31
+ * the DB's real unique index then rejects the second write). Duck-typed on `.code` rather than an
32
+ * `instanceof` class check: `core/commands` stays storage-agnostic (see this file's header — it
33
+ * never imports a SQLite adapter), and `better-sqlite3`'s `SqliteError` is not a dependency here.
34
+ * `SQLITE_CONSTRAINT_UNIQUE` is deliberately not treated as conclusive on its own — a caller must
35
+ * still re-query for the winning row (see `executeCommand`'s catch block) before trusting this,
36
+ * since an adapter could throw the same code for an unrelated UNIQUE index.
37
+ */
38
+ function isIdempotencyKeyConflict(error) {
39
+ return (typeof error === "object" &&
40
+ error !== null &&
41
+ error.code === "SQLITE_CONSTRAINT_UNIQUE");
42
+ }
43
+ /**
44
+ * Execute a mutation through the command gateway.
45
+ *
46
+ * Order matters: idempotency check → inverse capture → execute → record.
47
+ * If execute throws, nothing is recorded; if inverse capture throws, the
48
+ * mutation never runs.
49
+ *
50
+ * The feature mutation and its change-set record commit as one unit of work
51
+ * (REQ-01): if `changeSets.insert` fails after `execute` has applied the
52
+ * mutation, the gateway rolls the mutation back via `mutation.rollback` and
53
+ * re-throws, so no change set and no outbox event survive (EC-08 / AC-17,
54
+ * INV-01).
55
+ *
56
+ * The `change-set.applied` event is passed as `changeSets.insert()`'s third argument, not a
57
+ * separate `deps.outbox.enqueue()` call afterward — a durable adapter co-persists it inside the
58
+ * same transaction as the change-set record, so it can never land without a durable delivery
59
+ * record (or vice versa). This still does NOT cover the domain mutation itself
60
+ * (`mutation.execute()` stays outside any shared transaction, covered only by the compensating
61
+ * rollback above), and it covers only this producer. See
62
+ * `docs/decisions/change-set-outbox-transaction-boundary.md` for the full rationale, including the
63
+ * other direct `OutboxPort.enqueue()` producers this decision deliberately leaves untouched.
64
+ */
65
+ export async function executeCommand(required, _optional = {}) {
66
+ const { deps, command, mutation } = required;
67
+ // authorize() runs BEFORE the idempotency check, so
68
+ // a denied caller never learns whether a replayed command id previously
69
+ // succeeded (no DUPLICATE_COMMAND / changeSetId leak, EC-08). `permission`
70
+ // and `authorize` are wired together or not at all (see ExecuteCommandDeps
71
+ // doc) — partial wiring is a programming error, not a silent allow/skip.
72
+ if (Boolean(deps.authorize) !== Boolean(command.permission)) {
73
+ throw new Error("executeCommand: command.permission and deps.authorize must be supplied together " +
74
+ "— partial wiring would silently skip or misapply authorization");
75
+ }
76
+ if (deps.authorize && command.permission) {
77
+ const authResult = await deps.authorize({
78
+ principalId: command.actor.id,
79
+ permission: command.permission,
80
+ workspaceId: command.workspaceId,
81
+ entityType: mutation.entityType,
82
+ entityId: mutation.entityId,
83
+ });
84
+ if (!authResult.allowed) {
85
+ throw new ForbiddenError(`principal '${command.actor.id}' is not authorized for '${command.permission}' (${authResult.reason})`, command.permission, authResult.reason);
86
+ }
87
+ }
88
+ if (command.idempotencyKey) {
89
+ const existing = await deps.changeSets.findByIdempotencyKey({
90
+ workspaceId: command.workspaceId,
91
+ idempotencyKey: command.idempotencyKey,
92
+ });
93
+ if (existing) {
94
+ throw new DuplicateCommandError(`command with idempotency key '${command.idempotencyKey}' was already executed`, existing.id);
95
+ }
96
+ }
97
+ const inversePayload = await mutation.captureInverse();
98
+ const result = await mutation.execute();
99
+ const entityVersionAtApply = mutation.captureEntityVersion?.(result) ?? undefined;
100
+ const now = deps.clock.nowIso();
101
+ const changeSetId = deps.idGen.newId();
102
+ // BR-04: the event rides into insert()'s third argument (see this function's doc comment) so a
103
+ // durable adapter co-persists it atomically with the record it belongs to. Built unconditionally
104
+ // (cheap, pure data) but only passed through when an outbox is actually wired.
105
+ const event = {
106
+ id: deps.idGen.newId(),
107
+ name: "change-set.applied",
108
+ occurredAt: now,
109
+ aggregateId: changeSetId,
110
+ workspaceId: command.workspaceId,
111
+ actorId: command.actor.id,
112
+ changeSetId,
113
+ payload: {
114
+ changeSetId,
115
+ entityType: mutation.entityType,
116
+ entityId: mutation.entityId,
117
+ },
118
+ };
119
+ // Unit of work: the change-set record (and, when an outbox is wired, its delivery event) must
120
+ // land together, or the feature mutation is rolled back (REQ-01 / EC-08). On the in-memory
121
+ // adapter this is a compensating restore via `mutation.rollback`; the SQLite adapter does this
122
+ // as one real transaction and the rollback becomes a no-op for this step.
123
+ try {
124
+ await deps.changeSets.insert({
125
+ id: changeSetId,
126
+ workspaceId: command.workspaceId,
127
+ actorId: command.actor.id,
128
+ status: "applied",
129
+ summary: command.summary,
130
+ idempotencyKey: command.idempotencyKey,
131
+ intentRef: command.intentRef,
132
+ createdAt: now,
133
+ appliedAt: now,
134
+ }, [
135
+ {
136
+ id: deps.idGen.newId(),
137
+ changeSetId,
138
+ entityType: mutation.entityType,
139
+ entityId: mutation.entityId,
140
+ operation: mutation.operation,
141
+ inversePayload: inversePayload ?? undefined,
142
+ entityVersionAtApply,
143
+ position: 0,
144
+ },
145
+ ], deps.outbox ? event : undefined);
146
+ }
147
+ catch (recordError) {
148
+ // AC-17 / EC-08: the mutation applied but its record did not. Undo the
149
+ // mutation so INV-01 holds (no mutation without a record). We surface the
150
+ // original persist error; a rollback that itself throws is a harder failure
151
+ // that the SQLite transaction path is designed to remove.
152
+ await mutation.rollback?.();
153
+ // TOCTOU: the idempotency check above and this insert are separated by
154
+ // `captureInverse`/`execute`, so two concurrent requests on the same key can both pass the
155
+ // check before either inserts — the DB's unique index then rejects the loser here instead of
156
+ // at the check. Re-throw as the intended `DuplicateCommandError` (referencing the WINNING
157
+ // change set) rather than letting the raw driver error escape, so callers' existing
158
+ // `instanceof DuplicateCommandError` handling (409) catches this race the same as the
159
+ // already-covered non-racing replay.
160
+ if (command.idempotencyKey && isIdempotencyKeyConflict(recordError)) {
161
+ const winner = await deps.changeSets.findByIdempotencyKey({
162
+ workspaceId: command.workspaceId,
163
+ idempotencyKey: command.idempotencyKey,
164
+ });
165
+ if (winner) {
166
+ throw new DuplicateCommandError(`command with idempotency key '${command.idempotencyKey}' was already executed`, winner.id);
167
+ }
168
+ }
169
+ throw recordError;
170
+ }
171
+ return { result, changeSetId };
172
+ }
173
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/core/commands/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @file `@jini-ai/cms/core` — the framework-free kernel of the CMS capability.
3
+ *
4
+ * ## What belongs here
5
+ *
6
+ * Everything that must run in any JavaScript runtime: the shared runtime ports (clock, id
7
+ * generation, outbox, domain events), the auditable mutation write path, and the tool-registration
8
+ * kit every domain's agent-tool layer builds on. No Express, no `node:*`, no DOM, no concrete
9
+ * adapters.
10
+ *
11
+ * ## What belongs in `../server`
12
+ *
13
+ * Only the Node-bound half: concrete repository implementations (SQLite/Postgres), filesystem blob
14
+ * stores, and anything importing `node:*`.
15
+ *
16
+ * ## Why the split is drawn here, and why it is enforced by `exports` rather than convention
17
+ *
18
+ * This mirrors a defect measured in the CMS runtime this is ported from. There, the content model
19
+ * and its HTTP composition root lived in one `src/` tree with no enforced boundary, and 53 import
20
+ * edges ended up pointing *into* the composition root — including 22 domain modules importing a
21
+ * 454-line route-deps type whose first line was `import type { Express } from "express"`. The
22
+ * consequence, visible in git history, was that no content module could be changed without also
23
+ * changing the server: its theme module and its server co-changed in 71% of commits touching the
24
+ * former.
25
+ *
26
+ * A package's `exports` map is exactly the enforcement a single `src/` tree cannot provide: a
27
+ * consumer of `@jini-ai/cms/core` physically cannot reach a Node adapter, and `/core` physically
28
+ * cannot import a transport type, because the module resolver refuses it. Keep it that way — if a
29
+ * core module wants something from `/server`, the dependency is pointing the wrong way and the fix
30
+ * is a port (interface) in core, not a widened export.
31
+ *
32
+ * ## Why the barrel does not re-export `./commands/appliers`
33
+ *
34
+ * There is no `appliers` module here, and that is deliberate rather than an oversight. In the
35
+ * source repo the equivalent barrel re-exported an inverse-applier registry that named two specific
36
+ * content features by import. Because every domain's tool layer reaches the kernel, that single
37
+ * re-export put a dependency on those two features into every domain module in the tree — the
38
+ * measured reason no domain could be extracted on its own. A per-entity applier registry belongs
39
+ * behind a registration call the host makes, not behind a kernel barrel.
40
+ */
41
+ export type { UUID, ISODateTime, JsonPrimitive, JsonValue, JsonObject, JsonArray, DomainEvent, EventBusPort, OutboxRecord, OutboxPort, ClockPort, IdGeneratorPort, } from './ports.js';
42
+ export type { ChangeSetStatus, ChangeSetOperation, ChangeSetRecord, ChangeSetItemRecord, ChangeSetWithItems, ChangeSetRepoPort, } from './commands/change-set.js';
43
+ export * from './commands/command.js';
44
+ export * from './tools/registration-kit.js';
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,YAAY,EACV,IAAI,EACJ,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file `@jini-ai/cms/core` — the framework-free kernel of the CMS capability.
3
+ *
4
+ * ## What belongs here
5
+ *
6
+ * Everything that must run in any JavaScript runtime: the shared runtime ports (clock, id
7
+ * generation, outbox, domain events), the auditable mutation write path, and the tool-registration
8
+ * kit every domain's agent-tool layer builds on. No Express, no `node:*`, no DOM, no concrete
9
+ * adapters.
10
+ *
11
+ * ## What belongs in `../server`
12
+ *
13
+ * Only the Node-bound half: concrete repository implementations (SQLite/Postgres), filesystem blob
14
+ * stores, and anything importing `node:*`.
15
+ *
16
+ * ## Why the split is drawn here, and why it is enforced by `exports` rather than convention
17
+ *
18
+ * This mirrors a defect measured in the CMS runtime this is ported from. There, the content model
19
+ * and its HTTP composition root lived in one `src/` tree with no enforced boundary, and 53 import
20
+ * edges ended up pointing *into* the composition root — including 22 domain modules importing a
21
+ * 454-line route-deps type whose first line was `import type { Express } from "express"`. The
22
+ * consequence, visible in git history, was that no content module could be changed without also
23
+ * changing the server: its theme module and its server co-changed in 71% of commits touching the
24
+ * former.
25
+ *
26
+ * A package's `exports` map is exactly the enforcement a single `src/` tree cannot provide: a
27
+ * consumer of `@jini-ai/cms/core` physically cannot reach a Node adapter, and `/core` physically
28
+ * cannot import a transport type, because the module resolver refuses it. Keep it that way — if a
29
+ * core module wants something from `/server`, the dependency is pointing the wrong way and the fix
30
+ * is a port (interface) in core, not a widened export.
31
+ *
32
+ * ## Why the barrel does not re-export `./commands/appliers`
33
+ *
34
+ * There is no `appliers` module here, and that is deliberate rather than an oversight. In the
35
+ * source repo the equivalent barrel re-exported an inverse-applier registry that named two specific
36
+ * content features by import. Because every domain's tool layer reaches the kernel, that single
37
+ * re-export put a dependency on those two features into every domain module in the tree — the
38
+ * measured reason no domain could be extracted on its own. A per-entity applier registry belongs
39
+ * behind a registration call the host makes, not behind a kernel barrel.
40
+ */
41
+ export * from './commands/command.js';
42
+ export * from './tools/registration-kit.js';
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AA0BH,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @file Core port contracts for the CMS runtime.
3
+ *
4
+ * Purpose:
5
+ * Defines the stable interfaces that domain/application code depends on.
6
+ *
7
+ * How it relates to the project:
8
+ * - `features/*` import these contracts to stay framework/provider-agnostic.
9
+ * - `core/memory-bus.ts` provides in-memory implementations for local dev/tests.
10
+ * - `core/outbox-worker.ts` orchestrates reliable async delivery using these ports.
11
+ * - `server/app.ts` composes concrete implementations and runs the slice.
12
+ *
13
+ * Architectural role:
14
+ * This file is the dependency inversion seam. Concrete infrastructure can change
15
+ * without changing feature logic as long as implementations satisfy these types.
16
+ */
17
+ /**
18
+ * Shared primitives and runtime ports used by the CMS core.
19
+ *
20
+ * Design goal:
21
+ * Core/domain code depends on interfaces from this file only, never on concrete
22
+ * infrastructure SDKs or framework-specific implementations.
23
+ */
24
+ export type UUID = string;
25
+ export type ISODateTime = string;
26
+ export type JsonPrimitive = string | number | boolean | null;
27
+ export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
28
+ export interface JsonObject {
29
+ [key: string]: JsonValue;
30
+ }
31
+ export type JsonArray = JsonValue[];
32
+ /**
33
+ * Immutable domain event emitted by synchronous command handlers and delivered
34
+ * asynchronously via the outbox pipeline.
35
+ */
36
+ export interface DomainEvent<TPayload = Record<string, unknown>> {
37
+ /** Unique identifier for the event record. */
38
+ id: UUID;
39
+ /** Stable event name, e.g. `workspace.created`. */
40
+ name: string;
41
+ /** ISO timestamp describing when the event was produced. */
42
+ occurredAt: ISODateTime;
43
+ /** Optional aggregate root identifier related to this event. */
44
+ aggregateId?: UUID;
45
+ /**
46
+ * Tenant/workspace boundary. Required: every domain event belongs to a
47
+ * workspace. Platform-level events must be a deliberate future
48
+ * decision, not an omission.
49
+ */
50
+ workspaceId: UUID;
51
+ /**
52
+ * Principal (user or AI agent) that caused this event. Reserved change-set
53
+ * vocabulary; optional until the identity library lands.
54
+ */
55
+ actorId?: UUID;
56
+ /**
57
+ * Change set this event belongs to, enabling propose/preview/apply/revert
58
+ * grouping. Reserved change-set vocabulary.
59
+ */
60
+ changeSetId?: UUID;
61
+ /** Event-specific payload. */
62
+ payload: TPayload;
63
+ /** Free-form metadata (trace IDs, source, etc.). */
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ /**
67
+ * Event bus abstraction used by the application layer.
68
+ *
69
+ * This is intentionally generic so implementations can be in-memory, queue-based,
70
+ * broker-based, or provider-managed without changing domain logic.
71
+ */
72
+ export interface EventBusPort {
73
+ /** Publish a single event to subscribers. */
74
+ publish<TPayload>(event: DomainEvent<TPayload>): Promise<void>;
75
+ /** Publish multiple events in order. */
76
+ publishBatch<TPayload>(events: Array<DomainEvent<TPayload>>): Promise<void>;
77
+ /**
78
+ * Subscribe a handler to an event name.
79
+ * Returns an async unsubscriber function.
80
+ */
81
+ subscribe<TPayload>(eventName: string, handler: (event: DomainEvent<TPayload>) => Promise<void>): Promise<() => Promise<void>>;
82
+ /**
83
+ * Subscribe a handler to every event published on this bus, regardless of name. Additive to
84
+ * `subscribe` — existing per-name callers are unaffected.
85
+ * The Integrations fan-out (`registerWebhookFanout`) is the first real consumer: it narrows
86
+ * by topic itself rather than requiring a fixed list of event names up front.
87
+ */
88
+ subscribeAll(handler: (event: DomainEvent) => Promise<void>): Promise<() => Promise<void>>;
89
+ }
90
+ /**
91
+ * Persisted outbox row used for reliable async event delivery.
92
+ */
93
+ export interface OutboxRecord {
94
+ /** Primary key for the outbox row (same as `event.id`). */
95
+ id: UUID;
96
+ /**
97
+ * The full event envelope. The outbox must preserve everything the producer
98
+ * emitted (workspaceId, aggregateId, actorId, occurredAt, metadata) so
99
+ * delivery replays the original event, not a reconstruction.
100
+ */
101
+ event: DomainEvent;
102
+ /** Delivery lifecycle state. */
103
+ status: "pending" | "processing" | "delivered" | "failed";
104
+ /** Number of delivery attempts so far. */
105
+ attempts: number;
106
+ /** Retry eligibility timestamp. */
107
+ nextAttemptAt: ISODateTime;
108
+ /** Most recent delivery failure reason. */
109
+ lastError?: string;
110
+ /** Row creation timestamp. */
111
+ createdAt: ISODateTime;
112
+ }
113
+ /**
114
+ * Reliable outbox contract.
115
+ *
116
+ * Command handlers enqueue events here in the same unit of work as the write.
117
+ * A worker later claims and delivers rows to the event bus.
118
+ */
119
+ export interface OutboxPort {
120
+ /** Append an event for later delivery. */
121
+ enqueue(event: DomainEvent): Promise<void>;
122
+ /** Claim pending rows for processing. */
123
+ claimPending(batchSize: number, nowIso: ISODateTime): Promise<OutboxRecord[]>;
124
+ /** Mark a row as delivered. */
125
+ markDelivered(id: UUID): Promise<void>;
126
+ /** Mark a row as failed and set next retry time. */
127
+ markFailed(id: UUID, error: string, nextAttemptAt: ISODateTime): Promise<void>;
128
+ }
129
+ /** Clock abstraction to make time deterministic in tests. */
130
+ export interface ClockPort {
131
+ /** Current wall-clock time as ISO string. */
132
+ nowIso(): ISODateTime;
133
+ }
134
+ /** ID generator abstraction to keep ID strategy swappable and testable. */
135
+ export interface IdGeneratorPort {
136
+ /** Create a new globally unique ID. */
137
+ newId(): UUID;
138
+ }
139
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":""}