@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,238 @@
1
+ import { DefinitionInvalidError, SecretNotSupportedError } from "./errors.js";
2
+ import { SCOPE_BIT, } from "./types.js";
3
+ const NAMESPACE_FENCE = {
4
+ core: (input) => input.namespace.startsWith("core.") && input.workspaceId === null,
5
+ theme: (input) => input.namespace.startsWith("theme.") && input.workspaceId === null,
6
+ site: (input) => input.namespace.startsWith("site.") && input.workspaceId !== null,
7
+ };
8
+ /**
9
+ * REQ-02/REQ-09/INV-05/INV-08 — the pure half of `registerDefinitions`.
10
+ * Never throws; returns a discriminated result so the chokepoint decides how
11
+ * to surface the failure (matches `ValueValidationFailedError`'s pattern of
12
+ * keeping I/O out of validation).
13
+ *
14
+ * @complexity O(1) per definition.
15
+ * @overallScore 100
16
+ */
17
+ export function validateDefinitionInput(input) {
18
+ if (input.secret) {
19
+ return {
20
+ valid: false,
21
+ error: new SecretNotSupportedError("secret:true definitions are not supported in the core-only subset (REQ-09/INV-08)"),
22
+ };
23
+ }
24
+ if (!NAMESPACE_FENCE[input.ownerKind](input)) {
25
+ return {
26
+ valid: false,
27
+ error: new DefinitionInvalidError(`namespace '${input.namespace}' does not match the owner fence for owner_kind '${input.ownerKind}' (REQ-02)`),
28
+ };
29
+ }
30
+ if (input.scopes < 1 || input.scopes > 7) {
31
+ return {
32
+ valid: false,
33
+ error: new DefinitionInvalidError(`scopes bitmask ${input.scopes} is out of range 1..7`),
34
+ };
35
+ }
36
+ // INV-05: a site-owned def (workspace_id NOT NULL) may never declare the global scope bit.
37
+ if (input.workspaceId !== null && (input.scopes & SCOPE_BIT.global) !== 0) {
38
+ return {
39
+ valid: false,
40
+ error: new DefinitionInvalidError("a site-owned definition may not declare the global scope bit (INV-05)"),
41
+ };
42
+ }
43
+ // Totality (behavior.spec §3): every non-secret def needs a non-null default so
44
+ // getEffective is always total (INV-02) and factory-reset is provably bootable.
45
+ if (input.defaultValue === null) {
46
+ return {
47
+ valid: false,
48
+ error: new DefinitionInvalidError("non-secret definitions require a non-null default_json (totality, INV-02)"),
49
+ };
50
+ }
51
+ return { valid: true };
52
+ }
53
+ export function validateValueAgainstSchema(schema, value) {
54
+ if (value === null)
55
+ return schema.nullable === true;
56
+ switch (schema.type) {
57
+ case "string":
58
+ return typeof value === "string";
59
+ case "number":
60
+ return typeof value === "number";
61
+ case "boolean":
62
+ return typeof value === "boolean";
63
+ case "enum":
64
+ return typeof value === "string" && schema.values.includes(value);
65
+ case "json":
66
+ // Any JSON value is accepted; internal shape/length validation is the
67
+ // registering feature's own write-path job — see
68
+ // docs/decisions/settings-json-schema-variant.md.
69
+ return true;
70
+ }
71
+ }
72
+ /** Identity-registry of total coercers keyed by `coercionTag` (EC-08). `"identity"` is always registered. */
73
+ const coercers = new Map([["identity", (v) => v]]);
74
+ export function registerCoercer(tag, fn) {
75
+ coercers.set(tag, fn);
76
+ }
77
+ const cacheByRepo = new WeakMap();
78
+ function getCacheStore(repo) {
79
+ let store = cacheByRepo.get(repo);
80
+ if (!store) {
81
+ store = { definitions: new Map(), epoch: new Map() };
82
+ cacheByRepo.set(repo, store);
83
+ }
84
+ return store;
85
+ }
86
+ function namespaceEpoch(store, namespace) {
87
+ return store.epoch.get(namespace) ?? 0;
88
+ }
89
+ function workspaceCachePart(workspaceId) {
90
+ return workspaceId ?? "platform";
91
+ }
92
+ function definitionCacheKey(workspaceId, namespace, key, epoch) {
93
+ return `def:${workspaceCachePart(workspaceId)}:${namespace}:${key}:e${epoch}`;
94
+ }
95
+ /**
96
+ * Bumps the namespace's definition-cache epoch (lazy invalidation) — every
97
+ * previously-cached definition-cache entry for this
98
+ * namespace (across every workspace) becomes unreachable on the next read,
99
+ * without needing to enumerate tenants. Call after any write that changes a
100
+ * definition's identity/shape/status in this namespace: register, rename
101
+ * (both the old and new namespace), retype, deprecate, tombstone.
102
+ */
103
+ export function invalidateDefinitionNamespaceCache(repo, namespace) {
104
+ const store = getCacheStore(repo);
105
+ store.epoch.set(namespace, namespaceEpoch(store, namespace) + 1);
106
+ }
107
+ /**
108
+ * Purge support — now a no-op, deliberately kept rather than deleted.
109
+ *
110
+ * This cleared the workspace- and user-scope layer-cache entries a tenant/principal teardown
111
+ * invalidated, because a purge deletes an unbounded number of value rows across an unknown set of
112
+ * namespaces and per-namespace single-key invalidation was not practical for it. With the layer
113
+ * cache gone (see this module's cache header) there is nothing left to clear: the rows are deleted,
114
+ * and the next read goes to the repo and sees them gone.
115
+ *
116
+ * Kept as an explicit no-op instead of removed because of what it guards. `purge-service.ts` calls
117
+ * it as the last step of deleting a tenant's settings, and its correctness question — "can a purged
118
+ * value still be read back?" — is exactly the kind that must be answered again if anyone
119
+ * reintroduces caching. Deleting the call site would remove the place that question is asked. A
120
+ * cache added without restoring a purge hook is a tenant-teardown leak, so this stays as the seam.
121
+ */
122
+ export function invalidateWorkspaceSettingsCache(_repo, _workspaceId, _principalId) {
123
+ // Intentionally empty — see doc above. Do not delete without re-reading `purge-service.ts`.
124
+ }
125
+ /**
126
+ * Follows an alias marker (depth <=1) to the current row and returns it as
127
+ * stored — status intact, including `tombstone`. `resolveDefinition` (below)
128
+ * is the read-path wrapper that collapses tombstone to typed-absent (EC-10);
129
+ * `write-service.ts` uses this raw form directly so it can report
130
+ * `DEFINITION_TOMBSTONED` distinctly from "not found".
131
+ */
132
+ export async function resolveDefinitionRaw(deps, input) {
133
+ // Namespace fencing (REQ-02) makes `site.*` (non-null workspace_id) and
134
+ // `core.*`/`theme.*` (null workspace_id) disjoint by construction, so a
135
+ // caller resolving inside a workspace context may still be asking for a
136
+ // platform definition. Try the caller's own partition first, then fall
137
+ // back to the platform (null) partition.
138
+ const found = (await deps.repo.findActiveDefinition(input)) ??
139
+ (input.workspaceId !== null
140
+ ? await deps.repo.findActiveDefinition({ ...input, workspaceId: null })
141
+ : null);
142
+ if (!found)
143
+ return null;
144
+ if (found.status === "alias") {
145
+ if (found.aliasOfNamespace == null || found.aliasOfKey == null)
146
+ return null;
147
+ return resolveDefinitionRaw(deps, {
148
+ namespace: found.aliasOfNamespace,
149
+ key: found.aliasOfKey,
150
+ workspaceId: input.workspaceId,
151
+ });
152
+ }
153
+ return found;
154
+ }
155
+ /**
156
+ * The read-path resolver: typed-absent (`null`) for a tombstoned or
157
+ * missing key. Cached — keyed by
158
+ * `(workspaceId, namespace, key, namespace-epoch)`, so it is workspace-
159
+ * qualified by construction and invalidated wholesale by
160
+ * `invalidateDefinitionNamespaceCache` on any definition-lifecycle write
161
+ * (register/rename/retype/deprecate/tombstone). `resolveDefinitionRaw`
162
+ * itself stays uncached — the write chokepoint (`write-service.ts`) calls it
163
+ * directly so authorization/validation decisions are always made against
164
+ * live data, never a cached read.
165
+ */
166
+ export async function resolveDefinition(deps, input) {
167
+ const store = getCacheStore(deps.repo);
168
+ const epoch = namespaceEpoch(store, input.namespace);
169
+ const cacheKey = definitionCacheKey(input.workspaceId, input.namespace, input.key, epoch);
170
+ if (store.definitions.has(cacheKey))
171
+ return store.definitions.get(cacheKey);
172
+ const found = await resolveDefinitionRaw(deps, input);
173
+ const resolved = !found || found.status === "tombstone" ? null : found;
174
+ store.definitions.set(cacheKey, resolved);
175
+ return resolved;
176
+ }
177
+ /**
178
+ * REQ-03/INV-02 — total for a live key: never throws, never returns
179
+ * undefined. Precedence `user ?? workspace ?? global ?? default`. A
180
+ * `cleared` row is treated as absent at that layer (behavior.spec §1.2).
181
+ *
182
+ * Per-layer reads go straight to the repo (see this module's cache header for
183
+ * why the per-layer value cache that used to wrap these three calls does not
184
+ * exist here).
185
+ *
186
+ * @complexity O(1) — up to 3 layer reads + 1 definition read.
187
+ * @overallScore 100
188
+ */
189
+ export async function getEffective(deps, input) {
190
+ const definition = await resolveDefinition(deps, {
191
+ namespace: input.namespace,
192
+ key: input.key,
193
+ workspaceId: input.scopeContext.workspaceId ?? null,
194
+ });
195
+ if (!definition)
196
+ return null;
197
+ const coerce = (value, defVersion) => {
198
+ if (defVersion === definition.version)
199
+ return value;
200
+ const coercer = coercers.get(definition.coercionTag ?? "identity") ?? coercers.get("identity");
201
+ return coercer(value);
202
+ };
203
+ // Every layer read below goes straight to the repo. See this module's cache header for why there
204
+ // is no per-layer cache wrapping these three calls.
205
+ if (input.scopeContext.workspaceId && input.scopeContext.principalId) {
206
+ const workspaceId = input.scopeContext.workspaceId;
207
+ const principalId = input.scopeContext.principalId;
208
+ const userValue = await deps.repo.getUserValue({ workspaceId, principalId, settingId: definition.settingId });
209
+ if (userValue && userValue.state === "set") {
210
+ return {
211
+ value: coerce(userValue.valueJson, userValue.defVersion),
212
+ sourceLayer: "user",
213
+ defVersion: definition.version,
214
+ };
215
+ }
216
+ }
217
+ if (input.scopeContext.workspaceId) {
218
+ const workspaceId = input.scopeContext.workspaceId;
219
+ const workspaceValue = await deps.repo.getWorkspaceValue({ workspaceId, settingId: definition.settingId });
220
+ if (workspaceValue && workspaceValue.state === "set") {
221
+ return {
222
+ value: coerce(workspaceValue.valueJson, workspaceValue.defVersion),
223
+ sourceLayer: "workspace",
224
+ defVersion: definition.version,
225
+ };
226
+ }
227
+ }
228
+ const globalValue = await deps.repo.getGlobalValue(definition.settingId);
229
+ if (globalValue && globalValue.state === "set") {
230
+ return {
231
+ value: coerce(globalValue.valueJson, globalValue.defVersion),
232
+ sourceLayer: "global",
233
+ defVersion: definition.version,
234
+ };
235
+ }
236
+ return { value: definition.defaultValue, sourceLayer: "default", defVersion: definition.version };
237
+ }
238
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/settings/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @file Settings' tool-registration wiring: maps the wireable subset of `agent-tools.ts`'s eight
3
+ * catalog entries onto three reads and one curated write, as `ToolRegistration`s. See
4
+ * `agent-tools.ts`'s own file header for why the four GENERIC write entries are documented but
5
+ * deliberately never wired ({@link UNWIRED_SETTINGS_TOOL_IDS}), and why `settings_set_ui_preference`
6
+ * is not one of them.
7
+ *
8
+ * The one write here is shaped so that its blast radius is a property of the code rather than of
9
+ * the caller's restraint: its target key comes from a fixed enum
10
+ * (`agent-writable-preferences.ts`), its scope is a constant, and it never names a principal — so
11
+ * "write another operator's settings" and "write a key outside the list" are unrepresentable
12
+ * inputs, not merely unauthorized ones.
13
+ *
14
+ * Authorization shape: `getEffective`/`resolveDefinition` (`settings.ts`) and a direct
15
+ * `settingsRepo.listActiveDefinitions`/`getGlobalValue`/`getWorkspaceValue`/`getUserValue` read
16
+ * carry no `authorize()` call of their own — a host's admin routes gate inline — so every handler
17
+ * here calls the kit's `requireToolPermission` itself, mirroring those routes' identical checks.
18
+ * `resolveOwnOrOtherPrincipalRead` below deliberately duplicates (rather than imports) any HTTP
19
+ * admin layer's read-target resolution logic — this file is domain-owned wiring, and importing
20
+ * logic from a host's HTTP admin layer would invert this library's ports/adapters direction
21
+ * (features must not depend on a host's server/routes layer); the two are kept behaviorally
22
+ * identical by inspection, the same discipline that logic's own host-side callers should apply.
23
+ */
24
+ import type { AuthorizeFn } from "../core/commands/command.js";
25
+ import { type DerivedRiskByToolId, type ToolRegistration } from "../core/tools/registration-kit.js";
26
+ import type { PrincipalRepoPort } from "../identity/index.js";
27
+ import type { SettingsRepoPort } from "./ports.js";
28
+ /**
29
+ * The exact slice of a host's route-deps bag Settings' tool handlers read. Declared structurally
30
+ * (rather than importing any host's own route-deps type) so this module carries no back-edge into
31
+ * a host's composition root. A host satisfies this structurally by passing its existing route deps
32
+ * object; nothing there needs to change shape.
33
+ */
34
+ export interface SettingsToolDeps {
35
+ authorize: AuthorizeFn;
36
+ workspaceId: string;
37
+ clock: {
38
+ nowIso(): string;
39
+ };
40
+ idGen: {
41
+ newId(): string;
42
+ };
43
+ settingsReady: Promise<void>;
44
+ settingsUiTabsReady: Promise<void>;
45
+ settingsRepo: SettingsRepoPort;
46
+ principalRepo: PrincipalRepoPort;
47
+ }
48
+ /**
49
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
50
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
51
+ * `sideEffects` declaration — and note that the four excluded writes appear NOWHERE here, which is
52
+ * itself the strongest of the guards: an unclassified id cannot be wired at all.
53
+ */
54
+ export declare const settingsDerivedRisk: DerivedRiskByToolId;
55
+ export declare function buildSettingsRegistrations(routeDeps: SettingsToolDeps): ToolRegistration[];
56
+ //# sourceMappingURL=tool-registrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/settings/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAUL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAa9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOnD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,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,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAmFD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBAYhC,CAAC;AAkBH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAsJ1F"}
@@ -0,0 +1,240 @@
1
+ import { buildDomainRegistrations, indexCatalogById, optionalString, requireInputRecord, requireNoInput, requireString, requireToolPermission, withSchemaOnRejection, } from "../core/tools/registration-kit.js";
2
+ import { getSettingsAgentToolCatalog } from "./agent-tools.js";
3
+ import { AGENT_PREFERENCE_WRITE_SCOPE, AGENT_WRITABLE_PREFERENCE_IDS, resolveAgentWritablePreference, } from "./agent-writable-preferences.js";
4
+ import { DefinitionNotFoundError, DefinitionTombstonedError, ScopeNotAllowedError, ValueValidationFailedError, } from "./errors.js";
5
+ import { getEffective, resolveDefinition } from "./settings.js";
6
+ import { set as setSettingValue } from "./write-service.js";
7
+ const CATALOG_BY_ID = indexCatalogById(getSettingsAgentToolCatalog());
8
+ /** Permission gating a read that names a DIFFERENT principal than the caller — mirrors a host's
9
+ * own HTTP admin layer's equivalent constant (kept as a literal here per this file's header; the
10
+ * two are data, not logic, so duplication carries no drift risk beyond a string comparison). */
11
+ const CROSS_PRINCIPAL_SETTINGS_READ_PERMISSION = "settings.user.read";
12
+ /**
13
+ * Decides which principal's user layer a settings read tool may target — the tool-wiring twin of
14
+ * a host's own HTTP admin layer's equivalent read-target resolver (see this file's header for why
15
+ * it is duplicated rather than imported).
16
+ *
17
+ * @throws {ForbiddenError} (`core/commands`, via `requireToolPermission`) If `requestedPrincipalId`
18
+ * names a different principal than the caller and the caller lacks `settings.user.read`.
19
+ * @returns The principal id to read (`undefined` = skip the user layer entirely).
20
+ * @complexity O(1); at most one `authorize()` call (none for a self-read or no-op read).
21
+ * @overallScore 100
22
+ */
23
+ async function resolveOwnOrOtherPrincipalRead(routeDeps, required) {
24
+ const { requestedPrincipalId, callerPrincipalId } = required;
25
+ // Defaults to the CALLER, never to `undefined`. `undefined` does not mean "the caller" to
26
+ // `getEffective` — it means "skip the user layer entirely" (`settings.ts`'s
27
+ // `if (workspaceId && principalId)` guard), so an omitted `principalId` would otherwise make
28
+ // every read tool report the workspace/global/default value while silently ignoring the
29
+ // operator's own — a read tool that cannot see the layer the operator is actually looking at
30
+ // does not fail loudly; it produces confident wrong answers.
31
+ const target = requestedPrincipalId ?? callerPrincipalId;
32
+ if (target === callerPrincipalId)
33
+ return target;
34
+ await requireToolPermission(routeDeps, {
35
+ principalId: callerPrincipalId,
36
+ permission: CROSS_PRINCIPAL_SETTINGS_READ_PERMISSION,
37
+ entityType: "setting-value",
38
+ });
39
+ return requestedPrincipalId;
40
+ }
41
+ function layerValueOf(record) {
42
+ return record && record.state === "set" ? record.valueJson : null;
43
+ }
44
+ /**
45
+ * Builds `write-service.ts`'s own five-field dep shape from `RouteDeps`.
46
+ *
47
+ * Deliberately duplicates a host's own HTTP admin layer's equivalent field-mapping helper rather
48
+ * than importing it, for the reason this file's header already gives about
49
+ * `resolveOwnOrOtherPrincipalRead`: this is domain-owned wiring, and importing from a host's HTTP
50
+ * admin layer would invert the ports/adapters direction. It is a field mapping, not logic, so the
51
+ * two copies carry no behavioral drift risk — and `write-service.ts` is the single chokepoint
52
+ * either way, so a divergence here could only produce a missing dependency, which fails loudly.
53
+ */
54
+ function toWriteDeps(routeDeps) {
55
+ return {
56
+ repo: routeDeps.settingsRepo,
57
+ clock: routeDeps.clock,
58
+ ids: routeDeps.idGen,
59
+ authorize: routeDeps.authorize,
60
+ principals: routeDeps.principalRepo,
61
+ };
62
+ }
63
+ /**
64
+ * Errors a DIFFERENT input would fix, for `withSchemaOnRejection`'s decoration.
65
+ *
66
+ * `ValueValidationFailedError` is the common one — the model sent a value of the wrong shape for
67
+ * the chosen setting, and republishing the schema (with its per-key value hints) lets it correct
68
+ * in one turn instead of guessing. The two definition errors are included because they are
69
+ * genuinely reachable from a bad `setting`: an id that passed the enum but names a definition this
70
+ * workspace has tombstoned. A `ForbiddenError` is deliberately absent — no input change fixes a
71
+ * missing grant, and decorating it would imply the call is worth retrying.
72
+ */
73
+ function isPreferenceShapeRejection(error) {
74
+ return (error instanceof ValueValidationFailedError ||
75
+ error instanceof DefinitionNotFoundError ||
76
+ error instanceof DefinitionTombstonedError ||
77
+ error instanceof ScopeNotAllowedError);
78
+ }
79
+ /**
80
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
81
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
82
+ * `sideEffects` declaration — and note that the four excluded writes appear NOWHERE here, which is
83
+ * itself the strongest of the guards: an unclassified id cannot be wired at all.
84
+ */
85
+ export const settingsDerivedRisk = new Map([
86
+ // -> settingsRepo.listActiveDefinitions() x2 (platform + this workspace): reads only.
87
+ ["settings_list_definitions", "none"],
88
+ // -> settingsRepo.listActiveDefinitions() x2 + getEffective() per key: reads only, no write path.
89
+ ["settings_get_effective", "none"],
90
+ // -> resolveDefinition() + settingsRepo.getGlobalValue/getWorkspaceValue/getUserValue: reads only.
91
+ ["settings_get_raw", "none"],
92
+ // -> write-service.set() at scope=user against the caller's own principal: writes a value row
93
+ // and a revision-ledger entry. Durable, and correctly classified as such even though every key
94
+ // it can reach is a reversible display preference — the classification describes what the
95
+ // handler DOES, not how much the operator would mind.
96
+ ["settings_set_ui_preference", "mutates-durable-state"],
97
+ ]);
98
+ /** Settings catalog entries this pass does not wire, and why — see `agent-tools.ts`'s own per-entry comments for the full reasoning. */
99
+ const UNWIRED_SETTINGS_TOOL_IDS = new Set([
100
+ // EXCLUDED BY DESIGN: generic "set any setting key" — a typical human admin UI for this domain
101
+ // is itself an uncurated free-text/raw-JSON editor, not a fixed named list (see agent-tools.ts
102
+ // file header).
103
+ "settings_set",
104
+ "settings_clear",
105
+ // EXCLUDED BY DESIGN: bulk variant — clears every value in an operator-named namespace at a
106
+ // scope in one call, irreversible.
107
+ "settings_reset",
108
+ // EXCLUDED BY DESIGN: schema-level, not value-level — can rename/retype/deprecate/tombstone the
109
+ // definition a key resolves through, reinterpreting every existing stored value for that key
110
+ // platform-wide.
111
+ "settings_register_definitions",
112
+ ]);
113
+ export function buildSettingsRegistrations(routeDeps) {
114
+ const handlers = {
115
+ settings_list_definitions: async (ctx) => {
116
+ requireNoInput(ctx.input);
117
+ await routeDeps.settingsReady;
118
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "settings.read.definitions", entityType: "setting-definition" });
119
+ const [platformDefs, siteDefs] = await Promise.all([
120
+ routeDeps.settingsRepo.listActiveDefinitions({ workspaceId: null }),
121
+ routeDeps.settingsRepo.listActiveDefinitions({ workspaceId: routeDeps.workspaceId }),
122
+ ]);
123
+ const data = [...platformDefs, ...siteDefs]
124
+ .map((def) => ({ namespace: def.namespace, key: def.key, ownerKind: def.ownerKind, scopes: def.scopes, status: def.status, version: def.version }))
125
+ .sort((a, b) => a.namespace.localeCompare(b.namespace) || a.key.localeCompare(b.key));
126
+ return { data };
127
+ },
128
+ settings_get_effective: async (ctx) => {
129
+ const input = requireInputRecord(ctx.input);
130
+ const namespace = requireString(input, "namespace");
131
+ await routeDeps.settingsReady;
132
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "settings.read", entityType: "setting-value" });
133
+ const workspaceId = routeDeps.workspaceId;
134
+ const principalId = await resolveOwnOrOtherPrincipalRead(routeDeps, {
135
+ requestedPrincipalId: optionalString(input, "principalId"),
136
+ callerPrincipalId: ctx.principal.id,
137
+ });
138
+ const [platformDefs, siteDefs] = await Promise.all([
139
+ routeDeps.settingsRepo.listActiveDefinitions({ workspaceId: null }),
140
+ routeDeps.settingsRepo.listActiveDefinitions({ workspaceId }),
141
+ ]);
142
+ const keys = new Set([...platformDefs, ...siteDefs].filter((d) => d.namespace === namespace).map((d) => d.key));
143
+ const data = [];
144
+ for (const key of keys) {
145
+ const resolved = await getEffective({ repo: routeDeps.settingsRepo }, { namespace, key, scopeContext: { workspaceId, principalId } });
146
+ if (resolved)
147
+ data.push({ key, value: resolved.value, sourceLayer: resolved.sourceLayer, defVersion: resolved.defVersion });
148
+ }
149
+ return { data };
150
+ },
151
+ settings_get_raw: async (ctx) => {
152
+ const input = requireInputRecord(ctx.input);
153
+ const namespace = requireString(input, "namespace");
154
+ const key = requireString(input, "key");
155
+ await routeDeps.settingsReady;
156
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "settings.read.raw", entityType: "setting-value" });
157
+ const workspaceId = routeDeps.workspaceId;
158
+ const principalId = await resolveOwnOrOtherPrincipalRead(routeDeps, {
159
+ requestedPrincipalId: optionalString(input, "principalId"),
160
+ callerPrincipalId: ctx.principal.id,
161
+ });
162
+ const definition = await resolveDefinition({ repo: routeDeps.settingsRepo }, { namespace, key, workspaceId });
163
+ if (!definition)
164
+ throw new Error(`definition '${namespace}.${key}' was not found`);
165
+ const [globalValue, workspaceValue, userValue] = await Promise.all([
166
+ routeDeps.settingsRepo.getGlobalValue(definition.settingId),
167
+ routeDeps.settingsRepo.getWorkspaceValue({ workspaceId, settingId: definition.settingId }),
168
+ principalId ? routeDeps.settingsRepo.getUserValue({ workspaceId, principalId, settingId: definition.settingId }) : Promise.resolve(null),
169
+ ]);
170
+ return {
171
+ key: `${namespace}.${key}`,
172
+ global: layerValueOf(globalValue),
173
+ workspace: layerValueOf(workspaceValue),
174
+ user: layerValueOf(userValue),
175
+ default: definition.defaultValue,
176
+ };
177
+ },
178
+ settings_set_ui_preference: async (ctx) => {
179
+ const input = requireInputRecord(ctx.input);
180
+ const settingId = requireString(input, "setting");
181
+ // Re-checked here even though the published schema carries the same enum. See
182
+ // `agent-writable-preferences.ts` on why: the enum is enforced by a caller's descriptor
183
+ // validation, and this is the check that still holds if a stale or bypassed descriptor lets
184
+ // an unlisted id through. Rejected BEFORE `settingsUiTabsReady` is awaited so an unlisted id
185
+ // cannot even be used to probe which definitions exist.
186
+ const preference = resolveAgentWritablePreference(settingId);
187
+ if (!preference) {
188
+ throw new Error(`'${settingId}' is not an agent-writable preference. Allowed: ${AGENT_WRITABLE_PREFERENCE_IDS.join(", ")}.`);
189
+ }
190
+ // `in` rather than a truthiness check: `false` and `0` are legitimate values here
191
+ // (`soundEnabled`, `desktopEnabled`), and rejecting them would make the two boolean
192
+ // preferences settable in one direction only.
193
+ if (!("value" in input)) {
194
+ throw new Error(`a 'value' is required to set '${settingId}'`);
195
+ }
196
+ const value = input.value;
197
+ // This tool's definitions are registered by `ensureSettingsUiTabDefinitions()` at boot, not
198
+ // by any legacy-migration promise a host might also cover — awaiting the wrong promise would
199
+ // make an early call fail with a spurious "definition was not found".
200
+ await routeDeps.settingsUiTabsReady;
201
+ // No `requireToolPermission` call here, unlike every read above. That is deliberate and is
202
+ // the opposite of the reads' situation: the read paths carry no `authorize()` of their own,
203
+ // so this layer must supply it, whereas `write-service.set()` IS the authorization
204
+ // chokepoint (INV-07) and derives the permission itself from the scope and target. Adding a
205
+ // pre-check would mean this file naming a permission string that the chokepoint might later
206
+ // derive differently — the exact fail-open drift `deriveRequiredPermission`'s own header
207
+ // (Red-Team RT-003) says must not be duplicated. Omitting `principalId` is what makes the
208
+ // derived permission `settings.user.self.write`.
209
+ const { value: stored, revisionSeq } = await withSchemaOnRejection({
210
+ toolId: "settings_set_ui_preference",
211
+ catalog: CATALOG_BY_ID,
212
+ isShapeRejection: isPreferenceShapeRejection,
213
+ }, () => setSettingValue({
214
+ deps: toWriteDeps(routeDeps),
215
+ input: {
216
+ namespace: preference.namespace,
217
+ key: preference.key,
218
+ scope: AGENT_PREFERENCE_WRITE_SCOPE,
219
+ value,
220
+ workspaceId: routeDeps.workspaceId,
221
+ // `principalId` is deliberately NOT passed. `write-service.set()` falls back to
222
+ // `callerPrincipalId` for a user-scoped write, so the caller's own layer is the only
223
+ // reachable target — and the self-vs-other permission derivation sees a self-write.
224
+ callerPrincipalId: ctx.principal.id,
225
+ authWorkspaceId: routeDeps.workspaceId,
226
+ },
227
+ }));
228
+ return { setting: settingId, value: stored, scope: AGENT_PREFERENCE_WRITE_SCOPE, revisionSeq };
229
+ },
230
+ };
231
+ return buildDomainRegistrations({
232
+ domain: "settings",
233
+ catalogModule: "settings/agent-tools.ts",
234
+ catalog: CATALOG_BY_ID,
235
+ handlers,
236
+ derivedRisk: settingsDerivedRisk,
237
+ unwiredToolIds: UNWIRED_SETTINGS_TOOL_IDS,
238
+ });
239
+ }
240
+ //# sourceMappingURL=tool-registrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/settings/tool-registrations.ts"],"names":[],"mappings":"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"}