@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,70 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Permission catalog (flat dotted strings, code-side registered)
3
+ // ---------------------------------------------------------------------------
4
+ /**
5
+ * The `admin.menus.*` permission strings (renamed
6
+ * from the flat `navigation.manage` to the frozen `admin.<section>.<action>`
7
+ * convention, and split by action so force-purge no longer shares a
8
+ * permission with ordinary edits). `assign` is split from `update` because
9
+ * changing where a menu appears on the live site is higher-trust than
10
+ * editing an item label (mirrors the media library's `media.delete.force` /
11
+ * `media.upload_svg` splits); `delete.force` is split from `delete` for the
12
+ * same reason. The legacy `navigation.manage` string
13
+ * stays registered (deprecated, not deleted) in the host's identity permission
14
+ * registry until the Point of No Return — it
15
+ * is not part of this catalog. See `docs/decisions/permission-catalog-migration.md`
16
+ * for the migration's completion criteria.
17
+ */
18
+ export const NAVIGATION_PERMISSIONS = [
19
+ "admin.menus.read",
20
+ "admin.menus.create",
21
+ "admin.menus.update",
22
+ "admin.menus.delete",
23
+ "admin.menus.delete.force",
24
+ "admin.menus.assign",
25
+ "admin.menus.manage",
26
+ ];
27
+ // ---------------------------------------------------------------------------
28
+ // Domain events (outbox, async, workspace-scoped)
29
+ // ---------------------------------------------------------------------------
30
+ /** Stable event names emitted on the outbox for async consumers. */
31
+ export const NAVIGATION_EVENTS = [
32
+ "navigation.menu.created",
33
+ "navigation.menu.updated",
34
+ "navigation.menu.deleted",
35
+ "navigation.location.assigned",
36
+ "navigation.location.unassigned",
37
+ ];
38
+ // ---------------------------------------------------------------------------
39
+ // Hook points (synchronous, ordered, declared-before-attached)
40
+ // ---------------------------------------------------------------------------
41
+ /**
42
+ * Typed navigation hook points. Filters transform a value in-line (events
43
+ * cannot); the action lets extensions register locations. Declared here so the
44
+ * SDK/type system can enforce "declared points only" (the anti-hook-rot rule,
45
+ * the platform's v2 design doc §7).
46
+ */
47
+ export const NAVIGATION_HOOKS = [
48
+ /** filter: transform a single resolved item (badge/count/dynamic label). */
49
+ "navigation.item.resolve",
50
+ /** filter: transform the whole resolved tree before render (visibility). */
51
+ "navigation.tree.filter",
52
+ /** action: register additional theme/plugin location keys. */
53
+ "navigation.locations.register",
54
+ ];
55
+ // ---------------------------------------------------------------------------
56
+ // AI tool surface (clients of the SAME gateway handlers — dogfooding the media library's pattern)
57
+ // ---------------------------------------------------------------------------
58
+ /**
59
+ * AI tools are thin clients of the same command/read handlers admins use (no
60
+ * back door). Agents are delegated principals (`grant ∩ delegator`);
61
+ * `update`/`assign`/`delete` are HITL through the change-set review layer.
62
+ */
63
+ export const NAVIGATION_AI_TOOLS = [
64
+ "navigation.search",
65
+ "navigation.get",
66
+ "navigation.where_used",
67
+ "navigation.update", // HITL
68
+ "navigation.assign", // HITL
69
+ ];
70
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/navigation/contracts.ts"],"names":[],"mappings":"AAmBA,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,0BAA0B;IAC1B,oBAAoB;IACpB,oBAAoB;CACZ,CAAC;AAgDX,8EAA8E;AAC9E,kDAAkD;AAClD,8EAA8E;AAE9E,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,8BAA8B;IAC9B,gCAAgC;CACxB,CAAC;AAeX,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,4EAA4E;IAC5E,yBAAyB;IACzB,4EAA4E;IAC5E,wBAAwB;IACxB,8DAA8D;IAC9D,+BAA+B;CACvB,CAAC;AAIX,8EAA8E;AAC9E,kGAAkG;AAClG,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB,EAAE,OAAO;IAC5B,mBAAmB,EAAE,OAAO;CACpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `navigation` library.
3
+ *
4
+ * A module's public contract is its `index.ts` — deep imports
5
+ * from outside this directory should go through here.
6
+ */
7
+ export type { NavTargetKind, ReservedNavTargetKind, NavTarget, NavEntryTarget, NavTermTarget, NavUrlTarget, NavRouteTarget, NavItemAttrs, NavItemNode, NavMenuDoc, NavMenuEntry, MenuStatus, NavLocationKey, NavLocationBindingRow, NavLocationDescriptor, ResolvedNavItem, ResolvedNav, } from "./types.js";
8
+ export { NAV_MENU_CONTENT_TYPE, NAV_FIELD_NAMESPACE, NAV_DOC_TYPE } from "./types.js";
9
+ export type { NavLocationBindingRepoPort, NavResolveContext, NavTargetResolver, NavMenuReadModel, NavLocationRegistry, } from "./ports.js";
10
+ export type { NavigationPermission, CreateMenuInput, UpdateMenuInput, AssignLocationInput, UnassignLocationInput, DeleteMenuInput, NavigationEventName, NavMenuChangedPayload, NavLocationChangedPayload, NavigationHookName, NavigationAiTool, NavWhereUsedResult, } from "./contracts.js";
11
+ export { NAVIGATION_PERMISSIONS, NAVIGATION_EVENTS, NAVIGATION_HOOKS, NAVIGATION_AI_TOOLS, } from "./contracts.js";
12
+ export { createNavMenuReadModel, type NavMenuReadModelDeps } from "./read-model.js";
13
+ /**
14
+ * `MenuRepoPort` is navigation-owned (not part of the frozen `ports.ts` ADR surface — see
15
+ * `repo.memory.ts`'s file header for why) but is a real public contract: a host's own SQLite
16
+ * adapter implements it directly, the same way it implements `NavLocationBindingRepoPort`.
17
+ */
18
+ export { InMemoryMenuRepo, InMemoryNavLocationBindingRepo, type MenuRepoPort, } from "./repo.memory.js";
19
+ export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, type TreeValidationLimits, type CreateMenuDeps, type CreateMenuServiceInput, type CreateMenuRequired, type CreateMenuOptional, type UpdateMenuTreeDeps, type UpdateMenuTreeServiceInput, type UpdateMenuTreeRequired, type UpdateMenuTreeOptional, type AssignLocationDeps, type AssignLocationServiceInput, type AssignLocationRequired, type AssignLocationOptional, type DeleteMenuDeps, type DeleteMenuServiceInput, type DeleteMenuRequired, type DeleteMenuOptional, } from "./menu-service.js";
20
+ export { resolveForLocation, resolveMenuDoc, type ResolveTargetHrefFn, type ResolvedTargetHref, type ResolveForLocationDeps, type ResolveForLocationServiceInput, type ResolveForLocationRequired, type ResolveForLocationOptional, } from "./resolver.js";
21
+ export { rebuildNavLocationBindings, type RebuildNavLocationBindingsDeps, type RebuildNavLocationBindingsResult, } from "./reconcile.js";
22
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
23
+ export { menusAgentToolCatalog, type AgentToolDefinition as NavigationAgentToolDefinition, type AgentToolSideEffect as NavigationAgentToolSideEffect, type AgentToolActorClassRule as NavigationAgentToolActorClassRule, } from "./agent-tools.js";
24
+ /**
25
+ * The agent-tool wiring for this domain.
26
+ *
27
+ * `MenusToolDeps` is declared structurally rather than derived from any host's request-scoped
28
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
29
+ * the shape is the contract, so no host type needs to be named here.
30
+ */
31
+ export { buildMenusRegistrations, menusDerivedRisk, type MenusToolDeps, } from "./tool-registrations.js";
32
+ /**
33
+ * There is no wiring/composition export here, deliberately. Assembling a concrete `MenuRepoPort`/
34
+ * `NavLocationBindingRepoPort` pair over a specific database handle would put one host's persistence
35
+ * choice on this library's public contract and drag that host's schema into every consumer's
36
+ * dependency closure. Hosts compose their own; this entry point exports the ports they compose
37
+ * against.
38
+ */
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAC1B,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,GACtC,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,uBAAuB,IAAI,iCAAiC,GAClE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
@@ -0,0 +1,30 @@
1
+ export { NAV_MENU_CONTENT_TYPE, NAV_FIELD_NAMESPACE, NAV_DOC_TYPE } from "./types.js";
2
+ export { NAVIGATION_PERMISSIONS, NAVIGATION_EVENTS, NAVIGATION_HOOKS, NAVIGATION_AI_TOOLS, } from "./contracts.js";
3
+ export { createNavMenuReadModel } from "./read-model.js";
4
+ /**
5
+ * `MenuRepoPort` is navigation-owned (not part of the frozen `ports.ts` ADR surface — see
6
+ * `repo.memory.ts`'s file header for why) but is a real public contract: a host's own SQLite
7
+ * adapter implements it directly, the same way it implements `NavLocationBindingRepoPort`.
8
+ */
9
+ export { InMemoryMenuRepo, InMemoryNavLocationBindingRepo, } from "./repo.memory.js";
10
+ export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, } from "./menu-service.js";
11
+ export { resolveForLocation, resolveMenuDoc, } from "./resolver.js";
12
+ export { rebuildNavLocationBindings, } from "./reconcile.js";
13
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
14
+ export { menusAgentToolCatalog, } from "./agent-tools.js";
15
+ /**
16
+ * The agent-tool wiring for this domain.
17
+ *
18
+ * `MenusToolDeps` is declared structurally rather than derived from any host's request-scoped
19
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
20
+ * the shape is the contract, so no host type needs to be named here.
21
+ */
22
+ export { buildMenusRegistrations, menusDerivedRisk, } from "./tool-registrations.js";
23
+ /**
24
+ * There is no wiring/composition export here, deliberately. Assembling a concrete `MenuRepoPort`/
25
+ * `NavLocationBindingRepoPort` pair over a specific database handle would put one host's persistence
26
+ * choice on this library's public contract and drag that host's schema into every consumer's
27
+ * dependency closure. Hosts compose their own; this entry point exports the ports they compose
28
+ * against.
29
+ */
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBtF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAA6B,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,GAE/B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GAkBvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,GAOf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * @file Write-service for the `navigation` library.
3
+ *
4
+ * Purpose:
5
+ * Implements the menu mutation slice: create, whole-tree update (OCC), soft
6
+ * delete → hard purge, and location assignment. Mirrors the host's `post`
7
+ * feature style (required/optional param objects, typed errors, OCC via
8
+ * `version`).
9
+ *
10
+ * How it relates to the project:
11
+ * - Storage is `MenuRepoPort` (`repo.memory.ts`) — a self-contained repo, not
12
+ * the generic entries repo (see `repo.memory.ts`'s file header for why).
13
+ * - Location assignment additionally writes `NavLocationBindingRepoPort`
14
+ * (`ports.ts`), the one real port this library declares.
15
+ * - In production this whole module runs inside the command
16
+ * gateway/write chokepoint (same-transaction revision, attribution,
17
+ * `entry_refs` extraction). That gateway is not implemented as running code
18
+ * yet, so these functions are the chokepoint's future *contents*, called
19
+ * directly for now.
20
+ *
21
+ * Architectural role:
22
+ * Feature logic only. No Express/route code, no direct SQL — everything goes
23
+ * through the injected repo ports (`deps`).
24
+ */
25
+ import type { ClockPort, IdGeneratorPort, OutboxPort, UUID } from "../core/ports.js";
26
+ import type { MenuRepoPort } from "./repo.memory.js";
27
+ import type { NavLocationBindingRepoPort } from "./ports.js";
28
+ import { type NavItemNode, type NavLocationBindingRow, type NavLocationKey, type NavMenuEntry } from "./types.js";
29
+ export declare class MenuNotFoundError extends Error {
30
+ }
31
+ export declare class MenuValidationError extends Error {
32
+ }
33
+ export declare class MenuConflictError extends Error {
34
+ }
35
+ /**
36
+ * The 409-style purge rejection: hard delete is blocked while the menu is
37
+ * still bound to at least one theme location (deletion ladder).
38
+ * Carries the offending location keys so a caller can render "unassign these
39
+ * first" without a second lookup.
40
+ */
41
+ export declare class MenuLocationBoundError extends MenuConflictError {
42
+ readonly boundLocations: readonly NavLocationKey[];
43
+ constructor(message: string, boundLocations: readonly NavLocationKey[]);
44
+ }
45
+ /** Default max nesting depth (root = depth 1). Configurable. */
46
+ export declare const DEFAULT_MAX_TREE_DEPTH = 5;
47
+ /** Default max total item count across the whole tree. */
48
+ export declare const DEFAULT_MAX_ITEM_COUNT = 500;
49
+ export interface TreeValidationLimits {
50
+ maxDepth?: number | undefined;
51
+ maxItemCount?: number | undefined;
52
+ }
53
+ /**
54
+ * Validates a candidate item tree and returns a defensively-cloned copy.
55
+ *
56
+ * Checks (total/bounded validation + target integrity):
57
+ * - every node has a non-empty `id`, unique across the whole tree (id
58
+ * stability is a caller responsibility — see `updateMenuTree` doc for the
59
+ * simplification this build accepts);
60
+ * - nesting depth stays within `maxDepth`;
61
+ * - total item count stays within `maxItemCount`;
62
+ * - every target's `kind` is one of the four v1 kinds — reserved kinds
63
+ * (`dynamicQuery`, `content`) are rejected with a clear "not yet" error
64
+ * rather than silently accepted;
65
+ * - `url` targets reject a scheme denylist (`javascript:`, `data:`, `vbscript:`).
66
+ *
67
+ * @complexity O(n) over total node count for one full walk; no per-node
68
+ * backtracking. Space is O(n) for the cloned tree plus O(n) for the id set.
69
+ * @overallScore 100
70
+ */
71
+ export declare function validateAndCloneTree(items: readonly NavItemNode[], limits?: TreeValidationLimits): NavItemNode[];
72
+ export interface CreateMenuDeps {
73
+ repo: MenuRepoPort;
74
+ clock: ClockPort;
75
+ idGen: IdGeneratorPort;
76
+ /** Enqueues `navigation.menu.created` after a successful save. */
77
+ outbox: OutboxPort;
78
+ }
79
+ export interface CreateMenuServiceInput {
80
+ workspaceId: UUID;
81
+ title: string;
82
+ slug: string;
83
+ /** Optional initial tree; defaults to an empty menu. Items must carry ids. */
84
+ items?: readonly NavItemNode[] | undefined;
85
+ }
86
+ export interface CreateMenuRequired {
87
+ deps: CreateMenuDeps;
88
+ input: CreateMenuServiceInput;
89
+ }
90
+ export interface CreateMenuOptional {
91
+ limits?: TreeValidationLimits | undefined;
92
+ }
93
+ /**
94
+ * Creates a new `menu` entry in `published` status with no location
95
+ * assignments. Rejects a duplicate slug within the workspace.
96
+ *
97
+ * Was `draft` originally (mirroring `posts`), changed 2026-08-09 on explicit product direction: a
98
+ * menu has no separate review/approval workflow the way a post does, and `resolveForLocation`
99
+ * (`resolver.ts`) never actually branched on `status` — the field only ever gated the trash/purge
100
+ * lifecycle. Landing a new menu in `draft` produced a status label at odds with its real behavior
101
+ * (already fully live wherever it gets bound to a location) rather than gating anything real, so
102
+ * the default now matches the actual behavior instead of implying a workflow that doesn't exist.
103
+ *
104
+ * @complexity O(n) in the initial tree size for validation; O(m) in existing
105
+ * menu count for the slug-uniqueness scan (repo-dependent).
106
+ * @overallScore 100
107
+ */
108
+ export declare function createMenu(required: CreateMenuRequired, optional?: CreateMenuOptional): Promise<{
109
+ menu: NavMenuEntry;
110
+ }>;
111
+ export interface UpdateMenuTreeDeps {
112
+ repo: MenuRepoPort;
113
+ clock: ClockPort;
114
+ /** Not previously present on this deps bag — needed to mint the outbox event's id. */
115
+ idGen: IdGeneratorPort;
116
+ /** Enqueues `navigation.menu.updated` after a successful save. */
117
+ outbox: OutboxPort;
118
+ }
119
+ export interface UpdateMenuTreeServiceInput {
120
+ workspaceId: UUID;
121
+ id: UUID;
122
+ /** The entry `version` this edit was based on — OCC guard. */
123
+ expectedVersion: number;
124
+ title?: string | undefined;
125
+ slug?: string | undefined;
126
+ /** The full replacement tree (whole-tree edit). */
127
+ items: readonly NavItemNode[];
128
+ }
129
+ export interface UpdateMenuTreeRequired {
130
+ deps: UpdateMenuTreeDeps;
131
+ input: UpdateMenuTreeServiceInput;
132
+ }
133
+ export interface UpdateMenuTreeOptional {
134
+ limits?: TreeValidationLimits | undefined;
135
+ }
136
+ /**
137
+ * Replaces a menu's whole item tree, guarded by optimistic concurrency on the
138
+ * entry `version` (matches the host's `updatePost` pattern).
139
+ *
140
+ * Id-stability note ("an update may not renumber surviving items"):
141
+ * this build enforces only that ids are present and unique within the
142
+ * submitted tree (`validateAndCloneTree`). Detecting whether a *specific*
143
+ * surviving node kept its original id would require diffing against the
144
+ * previous tree and is deferred — a caller-discipline requirement for now,
145
+ * not a runtime-enforced invariant.
146
+ *
147
+ * @complexity O(n) in the new tree size for validation; O(1) additional repo
148
+ * calls (one read, at most one slug-uniqueness read, one write).
149
+ * @overallScore 90
150
+ * @findings Medium: id-stability across edits (ids not renumbered on survive)
151
+ * is documented but not runtime-enforced — see doc comment above. Deferred
152
+ * pending a tree-diff mechanism; would need the previous tree's id set passed
153
+ * in to check "no id vanished and reappeared elsewhere," which is more than
154
+ * this slice's scope calls for.
155
+ */
156
+ export declare function updateMenuTree(required: UpdateMenuTreeRequired, optional?: UpdateMenuTreeOptional): Promise<{
157
+ menu: NavMenuEntry;
158
+ }>;
159
+ export interface AssignLocationDeps {
160
+ repo: MenuRepoPort;
161
+ bindingRepo: NavLocationBindingRepoPort;
162
+ clock: ClockPort;
163
+ /** Not previously present on this deps bag — needed to mint outbox event ids. */
164
+ idGen: IdGeneratorPort;
165
+ /** Enqueues `navigation.location.assigned` (+ `.unassigned` on reassignment). */
166
+ outbox: OutboxPort;
167
+ }
168
+ export interface AssignLocationServiceInput {
169
+ workspaceId: UUID;
170
+ menuId: UUID;
171
+ locationKey: NavLocationKey;
172
+ }
173
+ export interface AssignLocationRequired {
174
+ deps: AssignLocationDeps;
175
+ input: AssignLocationServiceInput;
176
+ }
177
+ export interface AssignLocationOptional {
178
+ }
179
+ /**
180
+ * Assigns a menu to a theme location. This writes two
181
+ * representations that must stay in lockstep:
182
+ * 1. the menu's own `locations` field (source of truth, revisioned), and
183
+ * 2. the derived `nav_location_bindings` row (uniqueness index).
184
+ *
185
+ * If the location was already bound to a *different* menu, that menu is
186
+ * **reassigned away** (last-writer-wins, the chosen
187
+ * default) and its `locations` field is updated to drop the key — recorded as
188
+ * its own revision-worthy write.
189
+ *
190
+ * Atomicity note: these writes are
191
+ * logically ONE transaction — the binding-index write is a second in-tx
192
+ * participant alongside a slug-change-capture slot in the host's routing
193
+ * layer. Neither real cross-write transactions nor that routing layer exist
194
+ * as running code yet anywhere this library has shipped, so this function
195
+ * performs the writes sequentially with no rollback if a later step throws.
196
+ * This is an accepted, documented gap pending the command gateway's
197
+ * transaction machinery — do not copy this sequencing pattern into code that
198
+ * has real transactions available.
199
+ *
200
+ * @complexity O(1) repo calls (bounded: at most two menu reads/writes plus one
201
+ * binding upsert), independent of workspace size.
202
+ * @overallScore 90
203
+ * @findings Medium: no rollback across the two writes (menu save, then
204
+ * binding upsert) if the second fails, leaving the derived index stale until
205
+ * a rebuild. Acceptable because the index is declared rebuildable-by-definition;
206
+ * flagged as tech debt for when transactions
207
+ * exist.
208
+ */
209
+ export declare function assignLocation(required: AssignLocationRequired, _optional?: AssignLocationOptional): Promise<{
210
+ menu: NavMenuEntry;
211
+ binding: NavLocationBindingRow;
212
+ displacedMenu: NavMenuEntry | null;
213
+ }>;
214
+ export interface DeleteMenuDeps {
215
+ repo: MenuRepoPort;
216
+ bindingRepo: NavLocationBindingRepoPort;
217
+ clock: ClockPort;
218
+ /** Not previously present on this deps bag — needed to mint outbox event ids. */
219
+ idGen: IdGeneratorPort;
220
+ /** Enqueues `navigation.menu.updated` (trash) or `navigation.menu.deleted` (purge); nothing on a blocked purge. */
221
+ outbox: OutboxPort;
222
+ }
223
+ export interface DeleteMenuServiceInput {
224
+ workspaceId: UUID;
225
+ id: UUID;
226
+ /** Force past the 409 dangling-location guard (needs `navigation.delete.force`). */
227
+ force?: boolean | undefined;
228
+ }
229
+ export interface DeleteMenuRequired {
230
+ deps: DeleteMenuDeps;
231
+ input: DeleteMenuServiceInput;
232
+ }
233
+ export interface DeleteMenuOptional {
234
+ }
235
+ /**
236
+ * Deletion ladder (mirrors the media library's):
237
+ * 1. First call on a non-trashed menu **soft-deletes** it (`status: 'trash'`,
238
+ * revisioned) and returns — no purge yet.
239
+ * 2. A second call on an already-trashed menu attempts the **hard purge**. If
240
+ * the menu is still bound to any location, purge is rejected with
241
+ * `MenuLocationBoundError` (409-style) listing the bound keys, unless
242
+ * `force` is set — permission-gating that error behind
243
+ * `navigation.delete.force` is the caller's (gateway's) job, not this
244
+ * function's; this function only enforces the *shape* of the guard.
245
+ * 3. On a successful purge, the menu row and all of its location bindings are
246
+ * removed.
247
+ *
248
+ * @complexity O(1) repo calls; O(k) bindings scanned where k = locations this
249
+ * menu holds (small, bounded by registered locations).
250
+ * @overallScore 100
251
+ */
252
+ export declare function deleteMenu(required: DeleteMenuRequired, _optional?: DeleteMenuOptional): Promise<{
253
+ menu: NavMenuEntry | null;
254
+ purged: boolean;
255
+ }>;
256
+ //# sourceMappingURL=menu-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-service.d.ts","sourceRoot":"","sources":["../../src/navigation/menu-service.ts"],"names":[],"mappings":"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"}