@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 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/workspace/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACpD;gDAC4C;IAC5C,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACnC;iDAC6C;IAC7C,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;yFACqF;IACrF,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAUA;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;CAAG;AAE3C,oDAAoD;AACpD,qBAAa,wBAAyB,SAAQ,KAAK;CAAG;AAEtD,uDAAuD;AACvD,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,8DAA8D;AAC9D,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;GAMG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,GAAE,uBAA4B,GACtC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAuBvB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Shared `name`/`slug` validation — used by both `createWorkspace` below
3
+ * and `updateWorkspace` (`update.ts`) so the two transitions can never drift on what counts as a
4
+ * valid name/slug. Returns the normalized (trimmed name, trimmed+lowercased slug) pair; throws
5
+ * `WorkspaceValidationError` on either being invalid.
6
+ *
7
+ * @complexity O(1) — two regex/trim checks.
8
+ * @overallScore 100
9
+ */
10
+ export function validateWorkspaceNameAndSlug(input) {
11
+ const name = input.name.trim();
12
+ const slug = input.slug.trim().toLowerCase();
13
+ if (!name)
14
+ throw new WorkspaceValidationError("name is required");
15
+ if (!slug.match(/^[a-z0-9-]+$/)) {
16
+ throw new WorkspaceValidationError("slug must use lowercase letters, numbers, and dashes");
17
+ }
18
+ return { name, slug };
19
+ }
20
+ /** Thrown when incoming command data is invalid. */
21
+ export class WorkspaceValidationError extends Error {
22
+ }
23
+ /** Thrown when uniqueness constraints are violated. */
24
+ export class WorkspaceConflictError extends Error {
25
+ }
26
+ /** Thrown when a `:workspaceId` does not resolve to a row. */
27
+ export class WorkspaceNotFoundError extends Error {
28
+ }
29
+ /**
30
+ * Thrown when `deleteWorkspace` (`delete.ts`) would remove the install's
31
+ * last remaining workspace row. Named distinctly from `WorkspaceConflictError` (a 409, same as this
32
+ * maps to) so a caller can tell "duplicate slug" apart from "would brick the install" without
33
+ * string-matching the message — mirrors this codebase's `GrantExceedsIssuerError` being kept distinct
34
+ * from `IdentityForbiddenError` for the identical reason (typed-reason clarity).
35
+ */
36
+ export class WorkspaceLastRemainingError extends Error {
37
+ }
38
+ /**
39
+ * Execute create-workspace command.
40
+ *
41
+ * Synchronous path:
42
+ * - validate input
43
+ * - check uniqueness
44
+ * - write workspace record
45
+ *
46
+ * Asynchronous path:
47
+ * - enqueue `workspace.created` domain event to outbox
48
+ */
49
+ export async function createWorkspace(required, _optional = {}) {
50
+ const { deps, input } = required;
51
+ const { name, slug } = validateWorkspaceNameAndSlug(input);
52
+ const existing = await deps.repo.findBySlug(slug);
53
+ if (existing)
54
+ throw new WorkspaceConflictError(`slug '${slug}' already exists`);
55
+ const now = deps.clock.nowIso();
56
+ const id = deps.idGen.newId();
57
+ await deps.repo.insert({ id, name, slug, createdAt: now });
58
+ const event = {
59
+ id: deps.idGen.newId(),
60
+ name: "workspace.created",
61
+ occurredAt: now,
62
+ aggregateId: id,
63
+ workspaceId: id,
64
+ payload: { workspaceId: id, slug },
65
+ };
66
+ await deps.outbox.enqueue(event);
67
+ return { id };
68
+ }
69
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/workspace/create.ts"],"names":[],"mappings":"AAkDA;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAqC;IAIhF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,wBAAwB,CAAC,sDAAsD,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAyBD,oDAAoD;AACpD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;CAAG;AAEtD,uDAAuD;AACvD,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,8DAA8D;AAC9D,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;GAMG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAiC,EACjC,YAAqC,EAAE;IAEvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;IAEhF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAE9B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAqD;QAC9D,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QACtB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;KACnC,CAAC;IAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { UUID } from "../core/ports.js";
2
+ import { type WorkspaceRepoPort } from "./create.js";
3
+ /**
4
+ * @file `DELETE_WORKSPACE` — hard-delete a workspace, guarded so the
5
+ * install is never left with zero workspace rows.
6
+ *
7
+ * Purpose:
8
+ * Because a v1 install always has exactly one workspace row (a host's `workspaceId` is fixed at
9
+ * process composition, so no request can ever address a second, even-if-present workspace row
10
+ * today), `deleteWorkspace` **always refuses in v1**. That is correct,
11
+ * guarded behavior, not a stub: the precondition, the atomicity, and the typed refusal all exist and
12
+ * are exercised by tests now, so the day a second, genuinely addressable workspace exists, delete
13
+ * works without further design.
14
+ *
15
+ * Architectural role:
16
+ * Ordinary slice function — not a port. `deps.repo.list()` is the count source; the guard
17
+ * check and the delete happen inside one `async` function body with no `await` yielded to another
18
+ * caller in between the count read and the delete write, which — under a single Node.js
19
+ * event-loop, no-concurrent-DB-transaction execution model (the same "atomic by construction"
20
+ * reasoning `identity/grant-service.ts`'s own header comment documents for its transitions, and the
21
+ * same model `DISABLE_PRINCIPAL`'s INV-08 count-check-then-disable already relies on) — is the
22
+ * atomicity INV-03 requires. A future multi-process/multi-connection deployment would need a real
23
+ * DB-level transaction here; flagged, not silently assumed away.
24
+ */
25
+ /** Command payload for `DELETE_WORKSPACE`. */
26
+ export interface DeleteWorkspaceInput {
27
+ id: UUID;
28
+ }
29
+ /** Dependencies required by the delete-workspace slice. */
30
+ export interface DeleteWorkspaceDeps {
31
+ repo: WorkspaceRepoPort;
32
+ }
33
+ /** Required parameters for `deleteWorkspace`. */
34
+ export interface DeleteWorkspaceRequired {
35
+ deps: DeleteWorkspaceDeps;
36
+ input: DeleteWorkspaceInput;
37
+ }
38
+ /**
39
+ * Execute `DELETE_WORKSPACE` (REQ-05). Throws `WorkspaceNotFoundError` if `input.id` does not
40
+ * resolve to a row, else `WorkspaceLastRemainingError` (INV-03) if it is the only workspace row —
41
+ * which is always true in v1, so this transition always refuses today. No row is deleted on either
42
+ * rejection.
43
+ *
44
+ * @complexity O(n) in the total workspace count (`repo.list()`) — bounded by the same
45
+ * operator-managed-roster assumption `identity`'s `PrincipalRepoPort.list()` already makes; not a
46
+ * caller-controlled collection.
47
+ * @overallScore 100
48
+ */
49
+ export declare function deleteWorkspace(required: DeleteWorkspaceRequired): Promise<void>;
50
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/workspace/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAuD,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1G;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;CACV;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CActF"}
@@ -0,0 +1,24 @@
1
+ import { WorkspaceLastRemainingError, WorkspaceNotFoundError } from "./create.js";
2
+ /**
3
+ * Execute `DELETE_WORKSPACE` (REQ-05). Throws `WorkspaceNotFoundError` if `input.id` does not
4
+ * resolve to a row, else `WorkspaceLastRemainingError` (INV-03) if it is the only workspace row —
5
+ * which is always true in v1, so this transition always refuses today. No row is deleted on either
6
+ * rejection.
7
+ *
8
+ * @complexity O(n) in the total workspace count (`repo.list()`) — bounded by the same
9
+ * operator-managed-roster assumption `identity`'s `PrincipalRepoPort.list()` already makes; not a
10
+ * caller-controlled collection.
11
+ * @overallScore 100
12
+ */
13
+ export async function deleteWorkspace(required) {
14
+ const { deps, input } = required;
15
+ const existing = await deps.repo.findById(input.id);
16
+ if (!existing)
17
+ throw new WorkspaceNotFoundError(`workspace '${input.id}' was not found`);
18
+ const all = await deps.repo.list();
19
+ if (all.length <= 1) {
20
+ throw new WorkspaceLastRemainingError("the install's last remaining workspace cannot be deleted (INV-03)");
21
+ }
22
+ await deps.repo.delete(input.id);
23
+ }
24
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/workspace/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAA0B,MAAM,aAAa,CAAC;AAyC1G;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiC;IACrE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,cAAc,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,2BAA2B,CACnC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `workspace` library.
3
+ *
4
+ * A module's public contract is its `index.ts` (module-boundary convention) — deep imports from
5
+ * outside this directory should go through here.
6
+ */
7
+ export { createWorkspace, validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceLastRemainingError, WorkspaceNotFoundError, WorkspaceValidationError, type CreateWorkspaceDeps, type CreateWorkspaceInput, type CreateWorkspaceRequired, type CreateWorkspaceOptional, type WorkspaceRecord, type WorkspaceRepoPort, } from "./create.js";
8
+ export { updateWorkspace, type UpdateWorkspaceDeps, type UpdateWorkspaceInput, type UpdateWorkspaceRequired, } from "./update.js";
9
+ export { deleteWorkspace, type DeleteWorkspaceDeps, type DeleteWorkspaceInput, type DeleteWorkspaceRequired, } from "./delete.js";
10
+ export { InMemoryWorkspaceRepo } from "./repo.memory.js";
11
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
12
+ export { getWorkspaceAgentToolCatalog, type AgentToolDefinition as WorkspaceAgentToolDefinition, type AgentToolSideEffect as WorkspaceAgentToolSideEffect, type AgentToolActorClassRule as WorkspaceAgentToolActorClassRule, } from "./agent-tools.js";
13
+ /**
14
+ * The agent-tool wiring for this domain.
15
+ *
16
+ * `WorkspaceToolDeps` is declared structurally rather than derived from any host's request-scoped
17
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
18
+ * the shape is the contract, so no host type needs to be named here.
19
+ */
20
+ export { buildWorkspaceRegistrations, workspaceDerivedRisk, type WorkspaceToolDeps, } from "./tool-registrations.js";
21
+ /**
22
+ * There is no SQLite adapter export here, deliberately. A concrete `WorkspaceRepoPort` over a
23
+ * specific database handle names that host's schema, which would put one host's persistence choice
24
+ * on this library's public contract and drag its schema into every consumer's dependency closure.
25
+ * Hosts compose their own; this entry point exports the port they compose against.
26
+ */
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,sGAAsG;AACtG,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,uBAAuB,IAAI,gCAAgC,GACjE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `workspace` library.
3
+ *
4
+ * A module's public contract is its `index.ts` (module-boundary convention) — deep imports from
5
+ * outside this directory should go through here.
6
+ */
7
+ export { createWorkspace, validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceLastRemainingError, WorkspaceNotFoundError, WorkspaceValidationError, } from "./create.js";
8
+ export { updateWorkspace, } from "./update.js";
9
+ export { deleteWorkspace, } from "./delete.js";
10
+ export { InMemoryWorkspaceRepo } from "./repo.memory.js";
11
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
12
+ export { getWorkspaceAgentToolCatalog, } from "./agent-tools.js";
13
+ /**
14
+ * The agent-tool wiring for this domain.
15
+ *
16
+ * `WorkspaceToolDeps` is declared structurally rather than derived from any host's request-scoped
17
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
18
+ * the shape is the contract, so no host type needs to be named here.
19
+ */
20
+ export { buildWorkspaceRegistrations, workspaceDerivedRisk, } from "./tool-registrations.js";
21
+ /**
22
+ * There is no SQLite adapter export here, deliberately. A concrete `WorkspaceRepoPort` over a
23
+ * specific database handle names that host's schema, which would put one host's persistence choice
24
+ * on this library's public contract and drag its schema into every consumer's dependency closure.
25
+ * Hosts compose their own; this entry point exports the port they compose against.
26
+ */
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,GAOzB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,sGAAsG;AACtG,OAAO,EACL,4BAA4B,GAI7B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
@@ -0,0 +1,34 @@
1
+ import type { WorkspaceRecord, WorkspaceRepoPort } from "./create.js";
2
+ /**
3
+ * @file In-memory workspace repository adapter.
4
+ *
5
+ * Purpose:
6
+ * Provides a local `WorkspaceRepoPort` implementation for development/tests.
7
+ *
8
+ * How it relates to the package:
9
+ * - Satisfies the repository contract defined in `./create.ts`.
10
+ * - Injected by a host during runtime composition.
11
+ * - Used by slice tests for database-free verification.
12
+ *
13
+ * Architectural role:
14
+ * Temporary/local adapter. A database-backed adapter (which a host owns, since it names that
15
+ * host's schema) implements the same interface so slice logic remains unchanged.
16
+ */
17
+ export declare class InMemoryWorkspaceRepo implements WorkspaceRepoPort {
18
+ /** Internal record storage. */
19
+ private rows;
20
+ constructor(initialRows?: WorkspaceRecord[]);
21
+ /** Insert one workspace record. */
22
+ insert(record: WorkspaceRecord): Promise<void>;
23
+ /** Find workspace by unique slug. */
24
+ findBySlug(slug: string): Promise<WorkspaceRecord | null>;
25
+ /** Find workspace by id. */
26
+ findById(id: string): Promise<WorkspaceRecord | null>;
27
+ /** All workspace rows (v1 always has exactly one — see `delete.ts`'s header). */
28
+ list(): Promise<WorkspaceRecord[]>;
29
+ /** Replace the row matching `record.id` in place. */
30
+ update(record: WorkspaceRecord): Promise<void>;
31
+ /** Remove the row matching `id`, if present (idempotent). */
32
+ delete(id: string): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=repo.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/workspace/repo.memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,+BAA+B;IAC/B,OAAO,CAAC,IAAI,CAAoB;gBAEpB,WAAW,GAAE,eAAe,EAAO;IAI/C,mCAAmC;IAC7B,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,qCAAqC;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI/D,4BAA4B;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI3D,iFAAiF;IAC3E,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,6DAA6D;IACvD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file In-memory workspace repository adapter.
3
+ *
4
+ * Purpose:
5
+ * Provides a local `WorkspaceRepoPort` implementation for development/tests.
6
+ *
7
+ * How it relates to the package:
8
+ * - Satisfies the repository contract defined in `./create.ts`.
9
+ * - Injected by a host during runtime composition.
10
+ * - Used by slice tests for database-free verification.
11
+ *
12
+ * Architectural role:
13
+ * Temporary/local adapter. A database-backed adapter (which a host owns, since it names that
14
+ * host's schema) implements the same interface so slice logic remains unchanged.
15
+ */
16
+ export class InMemoryWorkspaceRepo {
17
+ /** Internal record storage. */
18
+ rows;
19
+ constructor(initialRows = []) {
20
+ this.rows = [...initialRows];
21
+ }
22
+ /** Insert one workspace record. */
23
+ async insert(record) {
24
+ this.rows.push(record);
25
+ }
26
+ /** Find workspace by unique slug. */
27
+ async findBySlug(slug) {
28
+ return this.rows.find((row) => row.slug === slug) ?? null;
29
+ }
30
+ /** Find workspace by id. */
31
+ async findById(id) {
32
+ return this.rows.find((row) => row.id === id) ?? null;
33
+ }
34
+ /** All workspace rows (v1 always has exactly one — see `delete.ts`'s header). */
35
+ async list() {
36
+ return [...this.rows];
37
+ }
38
+ /** Replace the row matching `record.id` in place. */
39
+ async update(record) {
40
+ const index = this.rows.findIndex((row) => row.id === record.id);
41
+ if (index === -1)
42
+ return;
43
+ this.rows[index] = record;
44
+ }
45
+ /** Remove the row matching `id`, if present (idempotent). */
46
+ async delete(id) {
47
+ this.rows = this.rows.filter((row) => row.id !== id);
48
+ }
49
+ }
50
+ //# sourceMappingURL=repo.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/workspace/repo.memory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IAChC,+BAA+B;IACvB,IAAI,CAAoB;IAEhC,YAAY,cAAiC,EAAE;QAC7C,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,MAAM,CAAC,MAAuB;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAC5D,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,MAAM,CAAC,MAAuB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file Workspace's half of the cross-domain agent-tool wiring split: maps the wireable subset of
3
+ * `agent-tools.ts`'s four catalog entries onto the current-workspace read and the narrow rename
4
+ * write, as `ToolRegistration`s.
5
+ *
6
+ * Risk framing: this is the highest-stakes domain wired so far — `create` and `delete` are
7
+ * deliberately excluded, each with its reason recorded on {@link UNWIRED_WORKSPACE_TOOL_IDS}; see
8
+ * `./agent-tools.ts`'s own file header for the full reasoning. Only a plain rename (`update`) is
9
+ * wired, alongside a read.
10
+ *
11
+ * Authorization shape: neither `updateWorkspace` (`update.ts`) nor a direct `workspaceRepo.findById`
12
+ * read calls `authorize()` internally — a host's admin routes gate inline — so both handlers here
13
+ * call the kit's `requireToolPermission` themselves, mirroring those routes' identical
14
+ * `workspace.manage` check.
15
+ */
16
+ import type { AuthorizeFn } from "../core/commands/command.js";
17
+ import { type DerivedRiskByToolId, type ToolRegistration } from "../core/tools/registration-kit.js";
18
+ import type { WorkspaceRepoPort } from "./create.js";
19
+ /**
20
+ * The exact slice of a host's route-deps bag Workspace's tool handlers read. Declared structurally
21
+ * (rather than importing any host's `RouteDeps`) so this module carries no back-edge into a
22
+ * composition root. A host satisfies this structurally by passing its existing deps object;
23
+ * nothing there changes.
24
+ */
25
+ export interface WorkspaceToolDeps {
26
+ authorize: AuthorizeFn;
27
+ workspaceId: string;
28
+ workspaceRepo: WorkspaceRepoPort;
29
+ }
30
+ /**
31
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
32
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
33
+ * `sideEffects` declaration — and note that the two excluded tools appear NOWHERE here, which is
34
+ * itself the strongest of the guards: an unclassified id cannot be wired at all.
35
+ */
36
+ export declare const workspaceDerivedRisk: DerivedRiskByToolId;
37
+ export declare function buildWorkspaceRegistrations(routeDeps: WorkspaceToolDeps): ToolRegistration[];
38
+ //# sourceMappingURL=tool-registrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/workspace/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,mBAQjC,CAAC;AAcH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CA2C5F"}
@@ -0,0 +1,71 @@
1
+ import { buildDomainRegistrations, indexCatalogById, optionalString, requireInputRecord, requireNoInput, requireToolPermission, } from "../core/tools/registration-kit.js";
2
+ import { getWorkspaceAgentToolCatalog } from "./agent-tools.js";
3
+ import { updateWorkspace } from "./update.js";
4
+ const CATALOG_BY_ID = indexCatalogById(getWorkspaceAgentToolCatalog());
5
+ /**
6
+ * This wiring layer's OWN risk classification, authored from what each handler below actually
7
+ * calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
8
+ * `sideEffects` declaration — and note that the two excluded tools appear NOWHERE here, which is
9
+ * itself the strongest of the guards: an unclassified id cannot be wired at all.
10
+ */
11
+ export const workspaceDerivedRisk = new Map([
12
+ // -> routeDeps.workspaceRepo.findById(): one read, no domain function of its own (mirrors a
13
+ // host's own admin workspace-get route making the same direct repo call).
14
+ ["workspace_get", "none"],
15
+ // -> updateWorkspace (update.ts) -> repo.findById + repo.findBySlug + repo.update: validates,
16
+ // checks slug uniqueness excluding the row itself, writes. No domain event enqueued (matches
17
+ // update.ts's own header: REQ-04 doesn't ask for one).
18
+ ["workspace_update", "mutates-durable-state"],
19
+ ]);
20
+ /** Workspace catalog entries this pass does not wire, and why — see `./agent-tools.ts`'s own per-entry comments for the full reasoning. */
21
+ const UNWIRED_WORKSPACE_TOOL_IDS = new Set([
22
+ // EXCLUDED BY DESIGN: inserts a row no other route can ever address (every workspace route
23
+ // resolves strictly against the boot-wired `workspaceId`) — zero utility, non-zero
24
+ // orphaned-row/clutter surface.
25
+ "workspace_create",
26
+ // EXCLUDED BY DESIGN: INV-03-guarded to always refuse today, but the lever removes the only
27
+ // addressable workspace scope the moment that guard's precondition ever changes — whole-scope,
28
+ // no per-domain undo, same exclusion class as a forward database migration or a backup restore.
29
+ "workspace_delete",
30
+ ]);
31
+ export function buildWorkspaceRegistrations(routeDeps) {
32
+ const handlers = {
33
+ workspace_get: async (ctx) => {
34
+ requireNoInput(ctx.input);
35
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "workspace.manage", entityType: "workspace" });
36
+ const workspace = await routeDeps.workspaceRepo.findById(routeDeps.workspaceId);
37
+ if (!workspace) {
38
+ // Defensive: the boot-wired workspaceId always resolves to a real row by construction.
39
+ // Not an expected runtime path.
40
+ throw new Error(`workspace '${routeDeps.workspaceId}' was not found`);
41
+ }
42
+ return { workspace };
43
+ },
44
+ workspace_update: async (ctx) => {
45
+ const input = requireInputRecord(ctx.input);
46
+ await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "workspace.manage", entityType: "workspace" });
47
+ // WorkspaceValidationError/WorkspaceConflictError/WorkspaceNotFoundError (all real `Error`
48
+ // subclasses, see `create.ts`) propagate as-is — a `ToolExecutor` treats any thrown error as
49
+ // a failed execution, matching every other domain's handler convention of not rewrapping
50
+ // typed domain errors before letting them surface.
51
+ const { workspace } = await updateWorkspace({
52
+ deps: { repo: routeDeps.workspaceRepo },
53
+ input: {
54
+ id: routeDeps.workspaceId,
55
+ name: optionalString(input, "name"),
56
+ slug: optionalString(input, "slug"),
57
+ },
58
+ });
59
+ return { workspace };
60
+ },
61
+ };
62
+ return buildDomainRegistrations({
63
+ domain: "workspace",
64
+ catalogModule: "workspace/agent-tools.ts",
65
+ catalog: CATALOG_BY_ID,
66
+ handlers,
67
+ derivedRisk: workspaceDerivedRisk,
68
+ unwiredToolIds: UNWIRED_WORKSPACE_TOOL_IDS,
69
+ });
70
+ }
71
+ //# sourceMappingURL=tool-registrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/workspace/tool-registrations.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GAKtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,CAAC;AAcvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAA8B;IAC5F,4FAA4F;IAC5F,6EAA6E;IAC7E,CAAC,eAAe,EAAE,MAAM,CAAC;IACzB,8FAA8F;IAC9F,gGAAgG;IAChG,0DAA0D;IAC1D,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;CAC9C,CAAC,CAAC;AAEH,2IAA2I;AAC3I,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,2FAA2F;IAC3F,mFAAmF;IACnF,gCAAgC;IAChC,kBAAkB;IAClB,4FAA4F;IAC5F,+FAA+F;IAC/F,gGAAgG;IAChG,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,UAAU,2BAA2B,CAAC,SAA4B;IACtE,MAAM,QAAQ,GAAgC;QAC5C,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC3B,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,qBAAqB,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAEnI,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAChF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,uFAAuF;gBACvF,gCAAgC;gBAChC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,WAAW,iBAAiB,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,qBAAqB,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAEnI,2FAA2F;YAC3F,6FAA6F;YAC7F,yFAAyF;YACzF,mDAAmD;YACnD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,CAAC;gBAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,aAAa,EAAE;gBACvC,KAAK,EAAE;oBACL,EAAE,EAAE,SAAS,CAAC,WAAW;oBACzB,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;oBACnC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;iBACpC;aACF,CAAC,CAAC;YACH,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,wBAAwB,CAAC;QAC9B,MAAM,EAAE,WAAW;QACnB,aAAa,EAAE,0BAA0B;QACzC,OAAO,EAAE,aAAa;QACtB,QAAQ;QACR,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,0BAA0B;KAC3C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { UUID } from "../core/ports.js";
2
+ import { type WorkspaceRecord, type WorkspaceRepoPort } from "./create.js";
3
+ /**
4
+ * @file `UPDATE_WORKSPACE` — rename a workspace's `name` and/or `slug`.
5
+ *
6
+ * Purpose:
7
+ * The one mutating transition this feature adds beyond create/delete. Mirrors `create.ts`'s
8
+ * validate -> check-constraints -> persist shape (no domain event is enqueued here — the
9
+ * requirement doesn't ask for one, and no consumer subscribes to a workspace-renamed topic yet; add
10
+ * one the same way `createWorkspace` does if a real consumer appears, rather than emitting a
11
+ * speculative event now).
12
+ *
13
+ * Architectural role:
14
+ * Ordinary slice function, not a port — one implementation, the rule-of-two doesn't
15
+ * apply to business logic, only to the repo/outbox seams it calls through `WorkspaceRepoPort`.
16
+ */
17
+ /** Command payload for `UPDATE_WORKSPACE`. At least one of `name`/`slug` must be present (EC-01). */
18
+ export interface UpdateWorkspaceInput {
19
+ id: UUID;
20
+ name?: string | undefined;
21
+ slug?: string | undefined;
22
+ }
23
+ /** Dependencies required by the update-workspace slice. */
24
+ export interface UpdateWorkspaceDeps {
25
+ repo: WorkspaceRepoPort;
26
+ }
27
+ /** Required parameters for `updateWorkspace`. */
28
+ export interface UpdateWorkspaceRequired {
29
+ deps: UpdateWorkspaceDeps;
30
+ input: UpdateWorkspaceInput;
31
+ }
32
+ /**
33
+ * Execute `UPDATE_WORKSPACE` (REQ-04). At least one of `name`/`slug` must be present in the input
34
+ * (EC-01 — an empty-object update is rejected, not a silent no-op, so a client-side bug that drops
35
+ * both fields fails loudly instead of masquerading as a successful save). When only one field is
36
+ * given, the other keeps its current stored value; both are re-validated together through
37
+ * `validateWorkspaceNameAndSlug` either way, so a `slug`-only update still catches a blank stored
38
+ * `name` (defensive; `name` can never actually be blank in practice since `createWorkspace` already
39
+ * rejects that, but re-validating both together — rather than only the changed field — keeps this
40
+ * function's invariant identical to `createWorkspace`'s with no special-cased partial path).
41
+ *
42
+ * The slug-uniqueness check excludes the row being updated (EC-02 — a workspace is never "in
43
+ * conflict with itself"): `findBySlug` naturally excludes it whenever the row's own `id` matches,
44
+ * since that's a no-op rename, not a collision with a *different* row.
45
+ *
46
+ * @complexity O(1) — one lookup by id, one lookup by slug, one write.
47
+ * @overallScore 100
48
+ */
49
+ export declare function updateWorkspace(required: UpdateWorkspaceRequired): Promise<{
50
+ workspace: WorkspaceRecord;
51
+ }>;
52
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/workspace/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;GAaG;AAEH,qGAAqG;AACrG,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,eAAe,CAAA;CAAE,CAAC,CAyBhH"}
@@ -0,0 +1,41 @@
1
+ import { validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceNotFoundError, WorkspaceValidationError, } from "./create.js";
2
+ /**
3
+ * Execute `UPDATE_WORKSPACE` (REQ-04). At least one of `name`/`slug` must be present in the input
4
+ * (EC-01 — an empty-object update is rejected, not a silent no-op, so a client-side bug that drops
5
+ * both fields fails loudly instead of masquerading as a successful save). When only one field is
6
+ * given, the other keeps its current stored value; both are re-validated together through
7
+ * `validateWorkspaceNameAndSlug` either way, so a `slug`-only update still catches a blank stored
8
+ * `name` (defensive; `name` can never actually be blank in practice since `createWorkspace` already
9
+ * rejects that, but re-validating both together — rather than only the changed field — keeps this
10
+ * function's invariant identical to `createWorkspace`'s with no special-cased partial path).
11
+ *
12
+ * The slug-uniqueness check excludes the row being updated (EC-02 — a workspace is never "in
13
+ * conflict with itself"): `findBySlug` naturally excludes it whenever the row's own `id` matches,
14
+ * since that's a no-op rename, not a collision with a *different* row.
15
+ *
16
+ * @complexity O(1) — one lookup by id, one lookup by slug, one write.
17
+ * @overallScore 100
18
+ */
19
+ export async function updateWorkspace(required) {
20
+ const { deps, input } = required;
21
+ if (input.name === undefined && input.slug === undefined) {
22
+ throw new WorkspaceValidationError("at least one of name or slug is required");
23
+ }
24
+ const existing = await deps.repo.findById(input.id);
25
+ if (!existing)
26
+ throw new WorkspaceNotFoundError(`workspace '${input.id}' was not found`);
27
+ const { name, slug } = validateWorkspaceNameAndSlug({
28
+ name: input.name ?? existing.name,
29
+ slug: input.slug ?? existing.slug,
30
+ });
31
+ if (slug !== existing.slug) {
32
+ const collision = await deps.repo.findBySlug(slug);
33
+ if (collision && collision.id !== existing.id) {
34
+ throw new WorkspaceConflictError(`slug '${slug}' already exists`);
35
+ }
36
+ }
37
+ const updated = { ...existing, name, slug };
38
+ await deps.repo.update(updated);
39
+ return { workspace: updated };
40
+ }
41
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/workspace/update.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GAGzB,MAAM,aAAa,CAAC;AAmCrB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiC;IACrE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzD,MAAM,IAAI,wBAAwB,CAAC,0CAA0C,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,cAAc,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC;QAClD,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,sBAAsB,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}