@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,57 @@
1
+ import type { ClockPort, UUID } from "../core/ports.js";
2
+ import type { MenuRepoPort } from "./repo.memory.js";
3
+ import type { NavLocationBindingRepoPort } from "./ports.js";
4
+ /**
5
+ * @file `rebuildNavLocationBindings` — the first real caller of the
6
+ * already-implemented-but-unused `NavLocationBindingRepoPort.rebuildForWorkspace`.
7
+ *
8
+ * Purpose:
9
+ * Reads every menu's `.locations` field (the source of truth,
10
+ * `NavMenuEntry.locations`), computes the resulting binding-index rows, and
11
+ * calls `rebuildForWorkspace` to replace the whole workspace's index in one
12
+ * shot. The index is derived + rebuildable by definition (same species as
13
+ * `entry_refs`) — a full
14
+ * rescan of menu entries can always reconstruct it, including dropping any
15
+ * orphan rows that drifted out of sync with the menus' own field.
16
+ *
17
+ * How it relates to the project:
18
+ * - Meant to be called once at boot from a host's SQLite composition root,
19
+ * after the SQLite db opens — the same
20
+ * per-row-failure-tolerant boot-time reconciliation pattern this library's
21
+ * first host uses elsewhere, though this rebuild has no per-row failure
22
+ * mode (a pure read-then-replace, not a fallible write-service call).
23
+ * - Also directly unit-testable against fixture repos, independent of which
24
+ * adapter (in-memory or a host's own SQLite adapter) is behind the ports.
25
+ *
26
+ * Architectural role:
27
+ * Feature logic only — no HTTP, no direct SQL. Read-then-replace, never a
28
+ * partial update (`rebuildForWorkspace` itself replaces the whole
29
+ * workspace's rows in one call, so there is no intermediate inconsistent
30
+ * state observable through the port).
31
+ */
32
+ export interface RebuildNavLocationBindingsDeps {
33
+ menuRepo: MenuRepoPort;
34
+ bindingRepo: NavLocationBindingRepoPort;
35
+ clock: ClockPort;
36
+ workspaceId: UUID;
37
+ }
38
+ export interface RebuildNavLocationBindingsResult {
39
+ /** Total binding rows written (the size of the rebuilt index). */
40
+ rebuiltCount: number;
41
+ }
42
+ /**
43
+ * Recompute the workspace's `nav_location_bindings` index from scratch from
44
+ * every menu's `.locations` field, and replace the stored index with it.
45
+ * Idempotent: re-running against unchanged menu data produces the same
46
+ * index every time. If more than one menu somehow lists the same location
47
+ * key (a data-drift edge case the invariant should otherwise prevent), the
48
+ * later menu in `MenuRepoPort.list`'s iteration order wins — consistent with
49
+ * `NavLocationBindingRepoPort.upsert`'s existing last-writer-wins semantics
50
+ * elsewhere in this library.
51
+ *
52
+ * @complexity O(n) over menus in the workspace, plus O(k) over each menu's
53
+ * `.locations` entries (small, bounded by registered locations).
54
+ * @overallScore 100
55
+ */
56
+ export declare function rebuildNavLocationBindings(deps: RebuildNavLocationBindingsDeps): Promise<RebuildNavLocationBindingsResult>;
57
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/navigation/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,0BAA0B,CAAC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,gCAAgC;IAC/C,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,gCAAgC,CAAC,CAoB3C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Recompute the workspace's `nav_location_bindings` index from scratch from
3
+ * every menu's `.locations` field, and replace the stored index with it.
4
+ * Idempotent: re-running against unchanged menu data produces the same
5
+ * index every time. If more than one menu somehow lists the same location
6
+ * key (a data-drift edge case the invariant should otherwise prevent), the
7
+ * later menu in `MenuRepoPort.list`'s iteration order wins — consistent with
8
+ * `NavLocationBindingRepoPort.upsert`'s existing last-writer-wins semantics
9
+ * elsewhere in this library.
10
+ *
11
+ * @complexity O(n) over menus in the workspace, plus O(k) over each menu's
12
+ * `.locations` entries (small, bounded by registered locations).
13
+ * @overallScore 100
14
+ */
15
+ export async function rebuildNavLocationBindings(deps) {
16
+ const menus = await deps.menuRepo.list({ workspaceId: deps.workspaceId });
17
+ const boundAt = deps.clock.nowIso();
18
+ const byLocation = new Map();
19
+ for (const menu of menus) {
20
+ for (const locationKey of menu.locations) {
21
+ byLocation.set(locationKey, {
22
+ workspaceId: deps.workspaceId,
23
+ locationKey,
24
+ menuId: menu.id,
25
+ boundAt,
26
+ });
27
+ }
28
+ }
29
+ const bindings = [...byLocation.values()];
30
+ await deps.bindingRepo.rebuildForWorkspace({ workspaceId: deps.workspaceId, bindings });
31
+ return { rebuiltCount: bindings.length };
32
+ }
33
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/navigation/reconcile.ts"],"names":[],"mappings":"AA8CA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAoC;IAEpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAEpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExF,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * @file In-memory adapters for the `navigation` library.
3
+ *
4
+ * Purpose:
5
+ * Provides the two dev/test persistence adapters this build needs:
6
+ *
7
+ * - `InMemoryNavLocationBindingRepo` — the real `NavLocationBindingRepoPort`
8
+ * adapter (`ports.ts`) for the derived `nav_location_bindings` index, honoring
9
+ * its `UNIQUE (workspace_id, location_key)` constraint via last-writer-wins
10
+ * `upsert`.
11
+ * - `InMemoryMenuRepo` — a **self-contained** menu store. The original design is explicit
12
+ * that a menu "adds NO new persistence port" because it should ride the
13
+ * generic entries repo. That generic entries system is not yet
14
+ * implemented as reusable code (only `post` exists as a concrete type in the
15
+ * host that first built this), so this build stores menu records directly
16
+ * instead of force-fitting the not-yet-generic entries system. `MenuRepoPort`
17
+ * below is a local, navigation-owned interface (not part of the frozen
18
+ * `ports.ts` surface) that exists only to make this simplification
19
+ * swappable later without touching `menu-service.ts` call sites. When the
20
+ * generic entries system ships, this repo should be deleted in favor of the
21
+ * entries repo, and `MenuRepoPort` should be deleted in favor of typed reads
22
+ * over it.
23
+ *
24
+ * How it relates to the project:
25
+ * - `menu-service.ts` and `resolver.ts` depend on `MenuRepoPort`, not this
26
+ * concrete class, so a host-supplied SQLite/entries-backed adapter is a
27
+ * drop-in.
28
+ *
29
+ * Architectural role:
30
+ * Adapters only. No validation or business rules live here (that is
31
+ * `menu-service.ts`'s job) — these classes are dumb, uniqueness-enforcing
32
+ * collections.
33
+ */
34
+ import type { UUID } from "../core/ports.js";
35
+ import type { NavLocationBindingRepoPort } from "./ports.js";
36
+ import type { NavLocationBindingRow, NavLocationKey, NavMenuEntry } from "./types.js";
37
+ /**
38
+ * Storage seam for menu records, standing in for the generic entries
39
+ * repo until that generic system exists as reusable code. Shape mirrors the
40
+ * `post` feature's own repo port plus a `remove` for hard purge, since menus
41
+ * have a real hard-delete step in their deletion ladder (mirrors the media
42
+ * library's).
43
+ */
44
+ export interface MenuRepoPort {
45
+ findById(required: {
46
+ workspaceId: UUID;
47
+ id: UUID;
48
+ }): Promise<NavMenuEntry | null>;
49
+ findBySlug(required: {
50
+ workspaceId: UUID;
51
+ slug: string;
52
+ }): Promise<NavMenuEntry | null>;
53
+ list(required: {
54
+ workspaceId: UUID;
55
+ }): Promise<NavMenuEntry[]>;
56
+ save(record: NavMenuEntry): Promise<void>;
57
+ /** Hard-remove a menu row. Only called after the trash step. */
58
+ remove(required: {
59
+ workspaceId: UUID;
60
+ id: UUID;
61
+ }): Promise<void>;
62
+ }
63
+ /**
64
+ * In-memory `MenuRepoPort` adapter for dev/tests. See file header for why a
65
+ * self-contained repo exists instead of an entries-backed one.
66
+ *
67
+ * @complexity Every operation is O(n) in the workspace's menu count via a
68
+ * linear scan; acceptable for the in-memory/dev-test adapter this library
69
+ * builds now. A SQLite adapter would index `(workspace_id, id)` /
70
+ * `(workspace_id, slug)` instead.
71
+ * @overallScore 100
72
+ */
73
+ export declare class InMemoryMenuRepo implements MenuRepoPort {
74
+ private rows;
75
+ constructor(initialRows?: NavMenuEntry[]);
76
+ findById(required: {
77
+ workspaceId: UUID;
78
+ id: UUID;
79
+ }): Promise<NavMenuEntry | null>;
80
+ findBySlug(required: {
81
+ workspaceId: UUID;
82
+ slug: string;
83
+ }): Promise<NavMenuEntry | null>;
84
+ list(required: {
85
+ workspaceId: UUID;
86
+ }): Promise<NavMenuEntry[]>;
87
+ save(record: NavMenuEntry): Promise<void>;
88
+ remove(required: {
89
+ workspaceId: UUID;
90
+ id: UUID;
91
+ }): Promise<void>;
92
+ }
93
+ /**
94
+ * In-memory `NavLocationBindingRepoPort` adapter for dev/tests. Enforces the
95
+ * derived index's `UNIQUE (workspace_id, location_key)` constraint by storing
96
+ * at most one row per `(workspaceId, locationKey)` pair: `upsert` replaces
97
+ * whatever row previously held that key (last-writer-wins).
98
+ *
99
+ * @complexity O(n) linear scan per operation over the workspace's binding
100
+ * count; `n` is bounded by the number of registered locations, which is small
101
+ * by construction (never a user-scale collection).
102
+ * @overallScore 100
103
+ */
104
+ export declare class InMemoryNavLocationBindingRepo implements NavLocationBindingRepoPort {
105
+ private rows;
106
+ constructor(initialRows?: NavLocationBindingRow[]);
107
+ findByLocation(required: {
108
+ workspaceId: UUID;
109
+ locationKey: NavLocationKey;
110
+ }): Promise<NavLocationBindingRow | null>;
111
+ listByMenu(required: {
112
+ workspaceId: UUID;
113
+ menuId: UUID;
114
+ }): Promise<NavLocationBindingRow[]>;
115
+ listByWorkspace(required: {
116
+ workspaceId: UUID;
117
+ }): Promise<NavLocationBindingRow[]>;
118
+ upsert(required: {
119
+ workspaceId: UUID;
120
+ locationKey: NavLocationKey;
121
+ menuId: UUID;
122
+ boundAt: string;
123
+ }): Promise<NavLocationBindingRow>;
124
+ remove(required: {
125
+ workspaceId: UUID;
126
+ locationKey: NavLocationKey;
127
+ }): Promise<void>;
128
+ removeByMenu(required: {
129
+ workspaceId: UUID;
130
+ menuId: UUID;
131
+ }): Promise<void>;
132
+ rebuildForWorkspace(required: {
133
+ workspaceId: UUID;
134
+ bindings: readonly NavLocationBindingRow[];
135
+ }): Promise<void>;
136
+ }
137
+ //# sourceMappingURL=repo.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/navigation/repo.memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * In-memory `MenuRepoPort` adapter for dev/tests. See file header for why a
3
+ * self-contained repo exists instead of an entries-backed one.
4
+ *
5
+ * @complexity Every operation is O(n) in the workspace's menu count via a
6
+ * linear scan; acceptable for the in-memory/dev-test adapter this library
7
+ * builds now. A SQLite adapter would index `(workspace_id, id)` /
8
+ * `(workspace_id, slug)` instead.
9
+ * @overallScore 100
10
+ */
11
+ export class InMemoryMenuRepo {
12
+ rows;
13
+ constructor(initialRows = []) {
14
+ this.rows = [...initialRows];
15
+ }
16
+ async findById(required) {
17
+ return (this.rows.find((row) => row.workspaceId === required.workspaceId && row.id === required.id) ?? null);
18
+ }
19
+ async findBySlug(required) {
20
+ return (this.rows.find((row) => row.workspaceId === required.workspaceId && row.slug === required.slug) ?? null);
21
+ }
22
+ async list(required) {
23
+ return this.rows.filter((row) => row.workspaceId === required.workspaceId);
24
+ }
25
+ async save(record) {
26
+ const index = this.rows.findIndex((row) => row.workspaceId === record.workspaceId && row.id === record.id);
27
+ if (index === -1) {
28
+ this.rows.push(record);
29
+ return;
30
+ }
31
+ this.rows[index] = record;
32
+ }
33
+ async remove(required) {
34
+ this.rows = this.rows.filter((row) => !(row.workspaceId === required.workspaceId && row.id === required.id));
35
+ }
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // NavLocationBindingRepoPort — the one real port this library declares
39
+ // ---------------------------------------------------------------------------
40
+ /**
41
+ * In-memory `NavLocationBindingRepoPort` adapter for dev/tests. Enforces the
42
+ * derived index's `UNIQUE (workspace_id, location_key)` constraint by storing
43
+ * at most one row per `(workspaceId, locationKey)` pair: `upsert` replaces
44
+ * whatever row previously held that key (last-writer-wins).
45
+ *
46
+ * @complexity O(n) linear scan per operation over the workspace's binding
47
+ * count; `n` is bounded by the number of registered locations, which is small
48
+ * by construction (never a user-scale collection).
49
+ * @overallScore 100
50
+ */
51
+ export class InMemoryNavLocationBindingRepo {
52
+ rows;
53
+ constructor(initialRows = []) {
54
+ this.rows = [...initialRows];
55
+ }
56
+ async findByLocation(required) {
57
+ return (this.rows.find((row) => row.workspaceId === required.workspaceId && row.locationKey === required.locationKey) ?? null);
58
+ }
59
+ async listByMenu(required) {
60
+ return this.rows.filter((row) => row.workspaceId === required.workspaceId && row.menuId === required.menuId);
61
+ }
62
+ async listByWorkspace(required) {
63
+ return this.rows.filter((row) => row.workspaceId === required.workspaceId);
64
+ }
65
+ async upsert(required) {
66
+ const row = {
67
+ workspaceId: required.workspaceId,
68
+ locationKey: required.locationKey,
69
+ menuId: required.menuId,
70
+ boundAt: required.boundAt,
71
+ };
72
+ const index = this.rows.findIndex((existing) => existing.workspaceId === required.workspaceId &&
73
+ existing.locationKey === required.locationKey);
74
+ if (index === -1) {
75
+ this.rows.push(row);
76
+ }
77
+ else {
78
+ // Last-writer-wins reassignment: the UNIQUE(workspace_id, location_key)
79
+ // constraint means there is never more than one row for this key.
80
+ this.rows[index] = row;
81
+ }
82
+ return row;
83
+ }
84
+ async remove(required) {
85
+ this.rows = this.rows.filter((row) => !(row.workspaceId === required.workspaceId && row.locationKey === required.locationKey));
86
+ }
87
+ async removeByMenu(required) {
88
+ this.rows = this.rows.filter((row) => !(row.workspaceId === required.workspaceId && row.menuId === required.menuId));
89
+ }
90
+ async rebuildForWorkspace(required) {
91
+ const others = this.rows.filter((row) => row.workspaceId !== required.workspaceId);
92
+ this.rows = [...others, ...required.bindings];
93
+ }
94
+ }
95
+ //# sourceMappingURL=repo.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/navigation/repo.memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @file Render-time read model for the `navigation` library.
3
+ *
4
+ * Purpose:
5
+ * `resolveForLocation` is the one typed call a theme renderer makes: look up
6
+ * the menu bound to a location, then walk its stored item tree into a
7
+ * `ResolvedNav` — concrete hrefs, `available` flags, active-state — so the
8
+ * theme "receives resolved data, never resolves refs".
9
+ *
10
+ * How it relates to the project:
11
+ * - `entryRef`/`termRef`/`route` targets need a resolver over entries/taxonomy/
12
+ * routing. Those are host-owned concerns and are not this library's running
13
+ * code, so this module does NOT import them. Instead it takes an injected
14
+ * `resolveTargetHref` function as a dependency — the exact seam a host's own
15
+ * routing layer later backs. This keeps `resolver.ts` compiling and testable
16
+ * today with a fake, and wiring a real routing implementation in later is a
17
+ * pure DI swap, not a rewrite.
18
+ * - `url` targets are already-resolved hrefs (validated at write time in
19
+ * `menu-service.ts`) and pass straight through.
20
+ * - `termRef` targets: term-link
21
+ * integrity has **no compatible schema yet** (`entry_refs` is
22
+ * entry-to-entry only) — this is a named blocker, not an oversight.
23
+ * This resolver does not special-case `termRef`; it is passed to the same
24
+ * injected `resolveTargetHref` as `entryRef`/`route`, and a fake/real
25
+ * resolver that has no term schema to consult should return `null`, which
26
+ * this module already turns into `available: false` on that node only (the
27
+ * rest of the tree still resolves).
28
+ *
29
+ * Architectural role:
30
+ * Pure read-side feature logic. No storage writes; no theme code reachable
31
+ * from here reads storage directly (render-IR boundary honored by
32
+ * returning only `ResolvedNav`/`ResolvedNavItem` data).
33
+ */
34
+ import type { MenuRepoPort } from "./repo.memory.js";
35
+ import type { NavLocationBindingRepoPort, NavResolveContext } from "./ports.js";
36
+ import type { NavLocationKey, NavMenuDoc, NavTarget, ResolvedNav, ResolvedNavItem } from "./types.js";
37
+ /**
38
+ * A resolved, already-known-available href for a `url` target, or the outcome
39
+ * of resolving a ref/route target: `path` plus whether it is currently
40
+ * reachable. `null` means "could not resolve at all" (unknown/deleted/no
41
+ * schema yet, e.g. `termRef` per the Round-3 fold) — distinct from
42
+ * `available: false`, which means "resolved to a real target that is
43
+ * currently unavailable" (e.g. trashed). Both cases end up `available: false`
44
+ * on the `ResolvedNavItem`; the distinction is for the resolver implementation's
45
+ * own diagnostics, not surfaced further.
46
+ */
47
+ export interface ResolvedTargetHref {
48
+ readonly path: string;
49
+ readonly available: boolean;
50
+ }
51
+ /**
52
+ * The injected seam standing in for a host's own routing library. Resolves
53
+ * one non-`url` target (`entryRef`, `termRef`, or `route`) to an href, or
54
+ * `null` if it cannot be resolved at all (deleted target, or — for `termRef`
55
+ * today — no schema yet to resolve against).
56
+ */
57
+ export type ResolveTargetHrefFn = (target: NavTarget, context: NavResolveContext) => Promise<ResolvedTargetHref | null>;
58
+ export interface ResolveForLocationDeps {
59
+ menuRepo: MenuRepoPort;
60
+ bindingRepo: NavLocationBindingRepoPort;
61
+ resolveTargetHref: ResolveTargetHrefFn;
62
+ }
63
+ export interface ResolveForLocationServiceInput {
64
+ workspaceId: string;
65
+ locationKey: NavLocationKey;
66
+ /** Current request path, for `isCurrent`/`isActive` computation. */
67
+ currentPath?: string | undefined;
68
+ }
69
+ export interface ResolveForLocationRequired {
70
+ deps: ResolveForLocationDeps;
71
+ input: ResolveForLocationServiceInput;
72
+ }
73
+ export interface ResolveForLocationOptional {
74
+ }
75
+ /**
76
+ * Resolves the menu bound to a theme location into a render-ready
77
+ * `ResolvedNav`, or `null` if the location has no menu bound.
78
+ *
79
+ * Defensive note: if the binding index points at a menu id the menu repo no
80
+ * longer has (a stale derived row — the index is declared rebuildable —
81
+ * this resolves to `null` rather than throwing, since a
82
+ * missing nav fragment is a theme-recoverable degradation and a hard error at
83
+ * render time is not.
84
+ *
85
+ * @complexity O(n) over the resolved menu's total node count — one
86
+ * `resolveTargetHref` call per non-`url` node, awaited depth-first. No bound
87
+ * on concurrency is applied since menu trees are bounded (
88
+ * `DEFAULT_MAX_ITEM_COUNT` in `menu-service.ts`) and are not a user-scale
89
+ * collection at render time.
90
+ * @overallScore 100
91
+ */
92
+ export declare function resolveForLocation(required: ResolveForLocationRequired, _optional?: ResolveForLocationOptional): Promise<ResolvedNav | null>;
93
+ export interface ResolveMenuDocRequired {
94
+ doc: NavMenuDoc;
95
+ context: NavResolveContext;
96
+ resolveTargetHref: ResolveTargetHrefFn;
97
+ }
98
+ /**
99
+ * Resolves a menu document's item tree into render-ready `ResolvedNavItem`s, independent of any
100
+ * location binding — the doc-level building block `resolveForLocation` composes on top of (menu
101
+ * lookup + location-binding lookup), and the seam a caller with a menu already in hand (e.g. a
102
+ * `widgets`-style `menu` widget type) needs to get real hrefs without duplicating the href-walking
103
+ * logic `resolveForLocation` already owns (`resolveItemList`/`resolveItem` below stay
104
+ * module-private; this is the one exported entry point to their behavior).
105
+ *
106
+ * @complexity O(n) over the doc's total node count — see `resolveItemList`.
107
+ * @overallScore 100
108
+ */
109
+ export declare function resolveMenuDoc(required: ResolveMenuDocRequired): Promise<ResolvedNavItem[]>;
110
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/navigation/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,iBAAiB,KACvB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAExC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,0BAA0B,CAAC;IACxC,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,8BAA8B,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;CAAG;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,0BAA0B,EACpC,SAAS,GAAE,0BAA+B,GACzC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAyB7B;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAGjG"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Resolves the menu bound to a theme location into a render-ready
3
+ * `ResolvedNav`, or `null` if the location has no menu bound.
4
+ *
5
+ * Defensive note: if the binding index points at a menu id the menu repo no
6
+ * longer has (a stale derived row — the index is declared rebuildable —
7
+ * this resolves to `null` rather than throwing, since a
8
+ * missing nav fragment is a theme-recoverable degradation and a hard error at
9
+ * render time is not.
10
+ *
11
+ * @complexity O(n) over the resolved menu's total node count — one
12
+ * `resolveTargetHref` call per non-`url` node, awaited depth-first. No bound
13
+ * on concurrency is applied since menu trees are bounded (
14
+ * `DEFAULT_MAX_ITEM_COUNT` in `menu-service.ts`) and are not a user-scale
15
+ * collection at render time.
16
+ * @overallScore 100
17
+ */
18
+ export async function resolveForLocation(required, _optional = {}) {
19
+ const { deps, input } = required;
20
+ const binding = await deps.bindingRepo.findByLocation({
21
+ workspaceId: input.workspaceId,
22
+ locationKey: input.locationKey,
23
+ });
24
+ if (!binding)
25
+ return null;
26
+ const menu = await deps.menuRepo.findById({ workspaceId: input.workspaceId, id: binding.menuId });
27
+ if (!menu)
28
+ return null;
29
+ const context = {
30
+ workspaceId: input.workspaceId,
31
+ currentPath: input.currentPath,
32
+ };
33
+ const items = await resolveMenuDoc({ doc: menu.doc, context, resolveTargetHref: deps.resolveTargetHref });
34
+ return {
35
+ menuId: menu.id,
36
+ locationKey: input.locationKey,
37
+ title: menu.title,
38
+ items,
39
+ };
40
+ }
41
+ /**
42
+ * Resolves a menu document's item tree into render-ready `ResolvedNavItem`s, independent of any
43
+ * location binding — the doc-level building block `resolveForLocation` composes on top of (menu
44
+ * lookup + location-binding lookup), and the seam a caller with a menu already in hand (e.g. a
45
+ * `widgets`-style `menu` widget type) needs to get real hrefs without duplicating the href-walking
46
+ * logic `resolveForLocation` already owns (`resolveItemList`/`resolveItem` below stay
47
+ * module-private; this is the one exported entry point to their behavior).
48
+ *
49
+ * @complexity O(n) over the doc's total node count — see `resolveItemList`.
50
+ * @overallScore 100
51
+ */
52
+ export async function resolveMenuDoc(required) {
53
+ const { doc, context, resolveTargetHref } = required;
54
+ return resolveItemList(doc.items, context, resolveTargetHref);
55
+ }
56
+ /**
57
+ * Resolves a sibling list of item nodes, depth-first, preserving order.
58
+ *
59
+ * @complexity O(n) over the subtree's node count.
60
+ * @overallScore 100
61
+ */
62
+ async function resolveItemList(nodes, context, resolveTargetHref) {
63
+ const resolved = [];
64
+ for (const node of nodes) {
65
+ resolved.push(await resolveItem(node, context, resolveTargetHref));
66
+ }
67
+ return resolved;
68
+ }
69
+ /**
70
+ * Resolves one node: `url` targets pass through directly (already validated
71
+ * hrefs, `menu-service.ts`); every other kind goes through the injected
72
+ * `resolveTargetHref` seam. A `null`/unavailable result never throws and never
73
+ * drops the node — it is returned with `available: false, href: null` so the
74
+ * rest of the tree keeps resolving (themes must omit unavailable
75
+ * links, never render dead ones, but core still hands back a full model for
76
+ * the theme to filter).
77
+ *
78
+ * Label-fallback simplification: `types.ts`'s `NavItemNode.label` doc says it
79
+ * "falls back to the target's title when absent." Deriving a target's title
80
+ * needs entry/taxonomy metadata that `ResolveTargetHrefFn` does not return
81
+ * (only `{ path, available }`); doing that fallback for real is deferred to
82
+ * whenever the injected resolver is widened to return a title alongside the
83
+ * href. For now an absent `label` resolves to `""`, which is a documented gap,
84
+ * not a silent behavior claim.
85
+ *
86
+ * @complexity O(1) at this node plus the cost of resolving its `children`
87
+ * subtree (accounted in the caller's overall O(n)).
88
+ * @overallScore 90
89
+ * @findings Low: label fallback to target title is not implemented (see note
90
+ * above) — deferred pending a richer `ResolveTargetHrefFn` return shape.
91
+ */
92
+ async function resolveItem(node, context, resolveTargetHref) {
93
+ const children = node.children
94
+ ? await resolveItemList(node.children, context, resolveTargetHref)
95
+ : [];
96
+ let href = null;
97
+ let available;
98
+ if (node.target.kind === "url") {
99
+ href = node.target.href;
100
+ available = true;
101
+ }
102
+ else {
103
+ // entryRef / termRef / route: resolved via the injected seam standing in
104
+ // for the host's own routing layer, which is not this library's running
105
+ // code. termRef in particular has no compatible entry_refs schema today
106
+ // — a resolver with no term schema to
107
+ // consult returns null here, same as any other "cannot resolve" outcome.
108
+ const result = await resolveTargetHref(node.target, context);
109
+ if (result === null) {
110
+ href = null;
111
+ available = false;
112
+ }
113
+ else {
114
+ href = result.path;
115
+ available = result.available;
116
+ }
117
+ }
118
+ const isCurrent = available && href !== null && context.currentPath !== undefined && href === context.currentPath;
119
+ const isActive = isCurrent || children.some((child) => child.isActive);
120
+ return {
121
+ id: node.id,
122
+ label: node.label ?? "",
123
+ href: available ? href : null,
124
+ available,
125
+ isCurrent,
126
+ isActive,
127
+ attrs: node.attrs,
128
+ children,
129
+ };
130
+ }
131
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/navigation/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file Navigation's (Menus') half of the agent-tool authorization wiring: maps `agent-tools.ts`'s five
3
+ * catalog entries onto `menu-service.ts`'s read/create/update/assign operations, as
4
+ * `ToolRegistration`s. The entire catalog is wired — `deleteMenu` is deliberately absent from the
5
+ * catalog rather than present-but-unwired; see `navigation/agent-tools.ts`'s own header.
6
+ *
7
+ * Authorization shape: like Media and unlike Forms/Identity/Widgets, `menu-service.ts`'s functions
8
+ * perform NO internal `authorize()` call of their own — every admin HTTP route a host builds gates
9
+ * inline. Every handler here does the same via the kit's `requireToolPermission`, which is the
10
+ * single evaluation for these tools, located where the real route locates it.
11
+ */
12
+ import type { AuthorizeFn } from "../core/commands/command.js";
13
+ import type { OutboxPort } from "../core/ports.js";
14
+ import { type DerivedRiskByToolId, type ToolRegistration } from "../core/tools/registration-kit.js";
15
+ import type { NavLocationBindingRepoPort } from "./ports.js";
16
+ import type { MenuRepoPort } from "./repo.memory.js";
17
+ /**
18
+ * The exact slice of the route-deps bag Menus' tool handlers read. Declared structurally (rather
19
+ * than importing a host's own `RouteDeps`) so this module carries no back-edge into any host's
20
+ * composition root. A host's `server/routes/*` satisfies this structurally by passing its existing
21
+ * route-deps object; nothing there needs to change shape.
22
+ */
23
+ export interface MenusToolDeps {
24
+ authorize: AuthorizeFn;
25
+ workspaceId: string;
26
+ clock: {
27
+ nowIso(): string;
28
+ };
29
+ idGen: {
30
+ newId(): string;
31
+ };
32
+ outbox: OutboxPort;
33
+ menuRepo: MenuRepoPort;
34
+ navLocationBindingRepo: NavLocationBindingRepoPort;
35
+ }
36
+ /**
37
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
38
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
39
+ * `sideEffects` declaration.
40
+ */
41
+ export declare const menusDerivedRisk: DerivedRiskByToolId;
42
+ export declare function buildMenusRegistrations(routeDeps: MenusToolDeps): ToolRegistration[];
43
+ //# sourceMappingURL=tool-registrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/navigation/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EASL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,MAAM,IAAI,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,sBAAsB,EAAE,0BAA0B,CAAC;CACpD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,mBAa7B,CAAC;AA0CH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB,EAAE,CA8EpF"}