@cyberismo/backend 1.1.2 → 1.3.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 (510) hide show
  1. package/README.md +21 -0
  2. package/dist/app.d.ts +5 -15
  3. package/dist/app.js +46 -44
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/index.d.ts +1 -13
  6. package/dist/auth/index.js +3 -13
  7. package/dist/auth/index.js.map +1 -1
  8. package/dist/auth/keycloak.d.ts +2 -15
  9. package/dist/auth/keycloak.js +8 -12
  10. package/dist/auth/keycloak.js.map +1 -1
  11. package/dist/auth/mock.d.ts +12 -20
  12. package/dist/auth/mock.js +121 -43
  13. package/dist/auth/mock.js.map +1 -1
  14. package/dist/auth/types.d.ts +7 -13
  15. package/dist/auth/types.js +2 -12
  16. package/dist/auth/types.js.map +1 -1
  17. package/dist/common/errors.d.ts +12 -0
  18. package/dist/common/errors.js +31 -0
  19. package/dist/common/errors.js.map +1 -0
  20. package/dist/common/validationSchemas.d.ts +0 -12
  21. package/dist/common/validationSchemas.js +2 -12
  22. package/dist/common/validationSchemas.js.map +1 -1
  23. package/dist/domain/auth/index.d.ts +0 -12
  24. package/dist/domain/auth/index.js +2 -12
  25. package/dist/domain/auth/index.js.map +1 -1
  26. package/dist/domain/calculations/index.d.ts +0 -12
  27. package/dist/domain/calculations/index.js +4 -14
  28. package/dist/domain/calculations/index.js.map +1 -1
  29. package/dist/domain/calculations/schema.d.ts +0 -12
  30. package/dist/domain/calculations/schema.js +2 -12
  31. package/dist/domain/calculations/schema.js.map +1 -1
  32. package/dist/domain/calculations/service.d.ts +2 -14
  33. package/dist/domain/calculations/service.js +7 -17
  34. package/dist/domain/calculations/service.js.map +1 -1
  35. package/dist/domain/cardTypes/index.d.ts +0 -12
  36. package/dist/domain/cardTypes/index.js +10 -20
  37. package/dist/domain/cardTypes/index.js.map +1 -1
  38. package/dist/domain/cardTypes/schema.d.ts +0 -12
  39. package/dist/domain/cardTypes/schema.js +2 -12
  40. package/dist/domain/cardTypes/schema.js.map +1 -1
  41. package/dist/domain/cardTypes/service.d.ts +4 -16
  42. package/dist/domain/cardTypes/service.js +17 -25
  43. package/dist/domain/cardTypes/service.js.map +1 -1
  44. package/dist/domain/cards/index.d.ts +0 -12
  45. package/dist/domain/cards/index.js +120 -175
  46. package/dist/domain/cards/index.js.map +1 -1
  47. package/dist/domain/cards/lib.d.ts +6 -23
  48. package/dist/domain/cards/lib.js +7 -135
  49. package/dist/domain/cards/lib.js.map +1 -1
  50. package/dist/domain/cards/mermaid.d.ts +8 -0
  51. package/dist/domain/cards/mermaid.js +23 -0
  52. package/dist/domain/cards/mermaid.js.map +1 -0
  53. package/dist/domain/cards/schema.d.ts +6 -12
  54. package/dist/domain/cards/schema.js +15 -15
  55. package/dist/domain/cards/schema.js.map +1 -1
  56. package/dist/domain/cards/service.d.ts +29 -36
  57. package/dist/domain/cards/service.js +119 -90
  58. package/dist/domain/cards/service.js.map +1 -1
  59. package/dist/domain/connectors/index.d.ts +0 -12
  60. package/dist/domain/connectors/index.js +4 -14
  61. package/dist/domain/connectors/index.js.map +1 -1
  62. package/dist/domain/connectors/service.d.ts +2 -14
  63. package/dist/domain/connectors/service.js +4 -14
  64. package/dist/domain/connectors/service.js.map +1 -1
  65. package/dist/domain/events/events-by-project.d.ts +19 -0
  66. package/dist/domain/events/events-by-project.js +57 -0
  67. package/dist/domain/events/events-by-project.js.map +1 -0
  68. package/dist/domain/events/index.d.ts +3 -0
  69. package/dist/domain/events/index.js +84 -0
  70. package/dist/domain/events/index.js.map +1 -0
  71. package/dist/domain/events/lifetime.d.ts +2 -0
  72. package/dist/domain/events/lifetime.js +15 -0
  73. package/dist/domain/events/lifetime.js.map +1 -0
  74. package/dist/domain/events/project-events.d.ts +63 -0
  75. package/dist/domain/events/project-events.js +204 -0
  76. package/dist/domain/events/project-events.js.map +1 -0
  77. package/dist/domain/events/schema.d.ts +10 -0
  78. package/dist/domain/events/schema.js +10 -0
  79. package/dist/domain/events/schema.js.map +1 -0
  80. package/dist/domain/fieldTypes/index.d.ts +0 -12
  81. package/dist/domain/fieldTypes/index.js +6 -16
  82. package/dist/domain/fieldTypes/index.js.map +1 -1
  83. package/dist/domain/fieldTypes/schema.d.ts +0 -12
  84. package/dist/domain/fieldTypes/schema.js +2 -12
  85. package/dist/domain/fieldTypes/schema.js.map +1 -1
  86. package/dist/domain/fieldTypes/service.d.ts +4 -16
  87. package/dist/domain/fieldTypes/service.js +7 -17
  88. package/dist/domain/fieldTypes/service.js.map +1 -1
  89. package/dist/domain/graphModels/index.d.ts +0 -12
  90. package/dist/domain/graphModels/index.js +4 -14
  91. package/dist/domain/graphModels/index.js.map +1 -1
  92. package/dist/domain/graphModels/schema.d.ts +0 -12
  93. package/dist/domain/graphModels/schema.js +2 -12
  94. package/dist/domain/graphModels/schema.js.map +1 -1
  95. package/dist/domain/graphModels/service.d.ts +2 -14
  96. package/dist/domain/graphModels/service.js +4 -14
  97. package/dist/domain/graphModels/service.js.map +1 -1
  98. package/dist/domain/graphViews/index.d.ts +0 -12
  99. package/dist/domain/graphViews/index.js +4 -14
  100. package/dist/domain/graphViews/index.js.map +1 -1
  101. package/dist/domain/graphViews/schema.js +2 -0
  102. package/dist/domain/graphViews/schema.js.map +1 -1
  103. package/dist/domain/graphViews/service.d.ts +2 -14
  104. package/dist/domain/graphViews/service.js +4 -14
  105. package/dist/domain/graphViews/service.js.map +1 -1
  106. package/dist/domain/labels/index.d.ts +0 -12
  107. package/dist/domain/labels/index.js +4 -14
  108. package/dist/domain/labels/index.js.map +1 -1
  109. package/dist/domain/labels/service.d.ts +3 -15
  110. package/dist/domain/labels/service.js +5 -15
  111. package/dist/domain/labels/service.js.map +1 -1
  112. package/dist/domain/linkTypes/index.d.ts +0 -12
  113. package/dist/domain/linkTypes/index.js +6 -16
  114. package/dist/domain/linkTypes/index.js.map +1 -1
  115. package/dist/domain/linkTypes/schema.d.ts +0 -12
  116. package/dist/domain/linkTypes/schema.js +2 -12
  117. package/dist/domain/linkTypes/schema.js.map +1 -1
  118. package/dist/domain/linkTypes/service.d.ts +3 -15
  119. package/dist/domain/linkTypes/service.js +7 -17
  120. package/dist/domain/linkTypes/service.js.map +1 -1
  121. package/dist/domain/logicPrograms/index.d.ts +0 -12
  122. package/dist/domain/logicPrograms/index.js +4 -14
  123. package/dist/domain/logicPrograms/index.js.map +1 -1
  124. package/dist/domain/logicPrograms/service.d.ts +2 -14
  125. package/dist/domain/logicPrograms/service.js +5 -3
  126. package/dist/domain/logicPrograms/service.js.map +1 -1
  127. package/dist/domain/mcp/index.d.ts +3 -15
  128. package/dist/domain/mcp/index.js +27 -21
  129. package/dist/domain/mcp/index.js.map +1 -1
  130. package/dist/domain/project/index.d.ts +0 -12
  131. package/dist/domain/project/index.js +41 -39
  132. package/dist/domain/project/index.js.map +1 -1
  133. package/dist/domain/project/schema.d.ts +8 -12
  134. package/dist/domain/project/schema.js +36 -18
  135. package/dist/domain/project/schema.js.map +1 -1
  136. package/dist/domain/project/service.d.ts +20 -28
  137. package/dist/domain/project/service.js +56 -60
  138. package/dist/domain/project/service.js.map +1 -1
  139. package/dist/domain/projects/index.d.ts +2 -14
  140. package/dist/domain/projects/index.js +23 -36
  141. package/dist/domain/projects/index.js.map +1 -1
  142. package/dist/domain/projects/schema.d.ts +1 -12
  143. package/dist/domain/projects/schema.js +3 -12
  144. package/dist/domain/projects/schema.js.map +1 -1
  145. package/dist/domain/projects/service.d.ts +9 -35
  146. package/dist/domain/projects/service.js +12 -48
  147. package/dist/domain/projects/service.js.map +1 -1
  148. package/dist/domain/reports/index.d.ts +0 -12
  149. package/dist/domain/reports/index.js +4 -14
  150. package/dist/domain/reports/index.js.map +1 -1
  151. package/dist/domain/reports/schema.d.ts +0 -12
  152. package/dist/domain/reports/schema.js +2 -12
  153. package/dist/domain/reports/schema.js.map +1 -1
  154. package/dist/domain/reports/service.d.ts +2 -14
  155. package/dist/domain/reports/service.js +4 -14
  156. package/dist/domain/reports/service.js.map +1 -1
  157. package/dist/domain/resources/index.d.ts +0 -12
  158. package/dist/domain/resources/index.js +91 -26
  159. package/dist/domain/resources/index.js.map +1 -1
  160. package/dist/domain/resources/schema.d.ts +8 -2
  161. package/dist/domain/resources/schema.js +8 -1
  162. package/dist/domain/resources/schema.js.map +1 -1
  163. package/dist/domain/resources/service.d.ts +23 -23
  164. package/dist/domain/resources/service.js +83 -51
  165. package/dist/domain/resources/service.js.map +1 -1
  166. package/dist/domain/skills/index.d.ts +3 -0
  167. package/dist/domain/skills/index.js +42 -0
  168. package/dist/domain/skills/index.js.map +1 -0
  169. package/dist/domain/skills/schema.d.ts +4 -0
  170. package/dist/domain/skills/schema.js +8 -0
  171. package/dist/domain/skills/schema.js.map +1 -0
  172. package/dist/domain/skills/service.d.ts +2 -0
  173. package/dist/domain/skills/service.js +6 -0
  174. package/dist/domain/skills/service.js.map +1 -0
  175. package/dist/domain/templates/index.d.ts +0 -12
  176. package/dist/domain/templates/index.js +8 -18
  177. package/dist/domain/templates/index.js.map +1 -1
  178. package/dist/domain/templates/schema.d.ts +0 -12
  179. package/dist/domain/templates/schema.js +2 -12
  180. package/dist/domain/templates/schema.js.map +1 -1
  181. package/dist/domain/templates/service.d.ts +4 -16
  182. package/dist/domain/templates/service.js +8 -18
  183. package/dist/domain/templates/service.js.map +1 -1
  184. package/dist/domain/tree/index.d.ts +0 -12
  185. package/dist/domain/tree/index.js +4 -14
  186. package/dist/domain/tree/index.js.map +1 -1
  187. package/dist/domain/tree/service.d.ts +3 -15
  188. package/dist/domain/tree/service.js +8 -15
  189. package/dist/domain/tree/service.js.map +1 -1
  190. package/dist/domain/workflows/index.d.ts +0 -12
  191. package/dist/domain/workflows/index.js +4 -14
  192. package/dist/domain/workflows/index.js.map +1 -1
  193. package/dist/domain/workflows/schema.d.ts +0 -12
  194. package/dist/domain/workflows/schema.js +2 -12
  195. package/dist/domain/workflows/schema.js.map +1 -1
  196. package/dist/domain/workflows/service.d.ts +2 -14
  197. package/dist/domain/workflows/service.js +4 -14
  198. package/dist/domain/workflows/service.js.map +1 -1
  199. package/dist/export.d.ts +8 -21
  200. package/dist/export.js +71 -66
  201. package/dist/export.js.map +1 -1
  202. package/dist/index.d.ts +3 -4
  203. package/dist/index.js +20 -41
  204. package/dist/index.js.map +1 -1
  205. package/dist/main.js +36 -32
  206. package/dist/main.js.map +1 -1
  207. package/dist/middleware/auth.d.ts +5 -12
  208. package/dist/middleware/auth.js +22 -16
  209. package/dist/middleware/auth.js.map +1 -1
  210. package/dist/middleware/commandManager.d.ts +17 -20
  211. package/dist/middleware/commandManager.js +27 -35
  212. package/dist/middleware/commandManager.js.map +1 -1
  213. package/dist/middleware/tree.js +2 -0
  214. package/dist/middleware/tree.js.map +1 -1
  215. package/dist/middleware/zvalidator.js +2 -0
  216. package/dist/middleware/zvalidator.js.map +1 -1
  217. package/dist/overlay.d.ts +33 -0
  218. package/dist/overlay.js +162 -0
  219. package/dist/overlay.js.map +1 -0
  220. package/dist/public/THIRD-PARTY.txt +1892 -688
  221. package/dist/public/assets/__vite-browser-external-DGgK3jMU.js +1 -0
  222. package/dist/public/assets/abnfDiagram-WEYOIA3C-B3qq7PKv.js +1 -0
  223. package/dist/public/assets/architecture-WOLXFQ4H-Bzau2LI0.js +1 -0
  224. package/dist/public/assets/architectureDiagram-ZHVYKT53-Bg0cUwdb.js +36 -0
  225. package/dist/public/assets/blockDiagram-RJAE7QA3-0RJB-ra-.js +140 -0
  226. package/dist/public/assets/c4Diagram-XDPPPE54-BzoQcLvf.js +38 -0
  227. package/dist/public/assets/channel-6BNdw4Ax.js +1 -0
  228. package/dist/public/assets/{chunk-MOJQB5TN-D1shKbMs.js → chunk-2E7WHVMD-6aqPk-Hk.js} +4 -4
  229. package/dist/public/assets/chunk-4EMNKR2T-vovNSAaE.js +1 -0
  230. package/dist/public/assets/chunk-55XCU76K-DXkKnt2y.js +1 -0
  231. package/dist/public/assets/chunk-7S6XSTFO-B9bfO0l3.js +2 -0
  232. package/dist/public/assets/chunk-AQDTSKZB-ilLy_cYP.js +72 -0
  233. package/dist/public/assets/chunk-DSNLSHJZ-DAudglXu.js +129 -0
  234. package/dist/public/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  235. package/dist/public/assets/chunk-HAGFOTED-CSKFgs6b.js +62 -0
  236. package/dist/public/assets/chunk-HNE4Q36P-Cu5gPBVk.js +1 -0
  237. package/dist/public/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  238. package/dist/public/assets/chunk-NGNAAXSQ-DI_UYJZ4.js +136 -0
  239. package/dist/public/assets/chunk-NQOKRVIF-Bpcvhq1n.js +213 -0
  240. package/dist/public/assets/chunk-UHW7PFBP-BDjvOaTH.js +1 -0
  241. package/dist/public/assets/chunk-VQ5W62QI-DHTcO93W.js +1 -0
  242. package/dist/public/assets/chunk-WQQL4CDK-H6nAhuck.js +10 -0
  243. package/dist/public/assets/chunk-XXDRQBXY-BUghdEVl.js +1 -0
  244. package/dist/public/assets/chunk-YZO67HFG-D13E0_Yh.js +1 -0
  245. package/dist/public/assets/chunk-ZAUX2LTX-Dp5y-2wt.js +1 -0
  246. package/dist/public/assets/chunk-ZCHMQSOR-RJjlln1D.js +2 -0
  247. package/dist/public/assets/classDiagram-v2-4MYWR3UA-CAqiFCSv.js +217 -0
  248. package/dist/public/assets/cose-bilkent-JH36ORCC-C_VOHzoP.js +1 -0
  249. package/dist/public/assets/cynefin-EF2NZ3EQ-Dyk4ZPjK.js +1 -0
  250. package/dist/public/assets/cynefinDiagram-WF24UDRP-b_Ia8gQX.js +62 -0
  251. package/dist/public/assets/cytoscape.esm-GRKmfDkD.js +321 -0
  252. package/dist/public/assets/dagre-NK4GIZVX-CH1K1yF8.js +4 -0
  253. package/dist/public/assets/diagram-CBK3MWTC-OaKd5avy.js +24 -0
  254. package/dist/public/assets/diagram-I5XIIV2D-Cmu5z1ad.js +24 -0
  255. package/dist/public/assets/diagram-ODIL2UCW-Cz1kkDDX.js +30 -0
  256. package/dist/public/assets/diagram-PFBEJUXE-faMkmqUW.js +3 -0
  257. package/dist/public/assets/diagram-RJA3I4VV-nycvfte-.js +41 -0
  258. package/dist/public/assets/diagram-TYUNFSNR-CjEv5QCm.js +200 -0
  259. package/dist/public/assets/dist-DGs_yUrP.js +1 -0
  260. package/dist/public/assets/ebnfDiagram-V4P3TTPT-DN-IIxCy.js +1 -0
  261. package/dist/public/assets/elk-QONTBCTQ-Bsam88GP.js +27 -0
  262. package/dist/public/assets/erDiagram-KYQIGQAA-DEU_qqNK.js +99 -0
  263. package/dist/public/assets/eventmodeling-K75KTNOO-Bl6NCM9E.js +1 -0
  264. package/dist/public/assets/flowDiagram-IUGLLWBU-Cl4qZ-36.js +1 -0
  265. package/dist/public/assets/ganttDiagram-R7GPNTJY-BmMd4aGi.js +292 -0
  266. package/dist/public/assets/gitGraph-VSP46ZUC-Q0H2PWek.js +1 -0
  267. package/dist/public/assets/gitGraphDiagram-PDYL7XHY-BlCTBYTj.js +106 -0
  268. package/dist/public/assets/index-CuBJ0hof.css +1 -0
  269. package/dist/public/assets/index-D6WqGtsG.js +27876 -0
  270. package/dist/public/assets/index-D701BZPh.js +2219 -0
  271. package/dist/public/assets/info-OHQRW6UA-D0TMPJxW.js +1 -0
  272. package/dist/public/assets/infoDiagram-MVDRKAX5-CljbtJXu.js +2 -0
  273. package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-CiLpASIW.js → ishikawaDiagram-HPEHV2GE-_Y3Fr0hu.js} +6 -6
  274. package/dist/public/assets/journeyDiagram-BOSHW7O7-Bo55jJ4m.js +139 -0
  275. package/dist/public/assets/kanban-definition-FNSA4HC5-Cd-10MtF.js +89 -0
  276. package/dist/public/assets/katex-MEuSR36T.js +257 -0
  277. package/dist/public/assets/line-BDmh4sWC.js +1 -0
  278. package/dist/public/assets/linear-Dt7xjMrI.js +1 -0
  279. package/dist/public/assets/mermaid-parser.core-BJ1yyzvV.js +7 -0
  280. package/dist/public/assets/mindmap-definition-6OY57UG3-CRgumPuN.js +98 -0
  281. package/dist/public/assets/packet-JDAUHWVQ-DsTMT3Kw.js +1 -0
  282. package/dist/public/assets/path-B_0haWDX.js +1 -0
  283. package/dist/public/assets/pegDiagram-ECIUJNBX-BEGI5k3m.js +1 -0
  284. package/dist/public/assets/pie-XZMESJXO-COyqzA3N.js +1 -0
  285. package/dist/public/assets/pieDiagram-GNMPY74T-CrLJhZJJ.js +39 -0
  286. package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-B3czMbdS.js → quadrantDiagram-D57K4MC3-Fl7HMHxK.js} +6 -6
  287. package/dist/public/assets/radar-ABXABTNO-DeXHKowk.js +1 -0
  288. package/dist/public/assets/railroad-I3PHUGI6-CUjKUdPz.js +1 -0
  289. package/dist/public/assets/railroad-abnf-LNEFI6M7-B1aEgHE6.js +1 -0
  290. package/dist/public/assets/railroad-ebnf-DWYD2UWJ-DmmI3Voz.js +1 -0
  291. package/dist/public/assets/railroad-peg-JR7BVNR7-BHzi9m7r.js +1 -0
  292. package/dist/public/assets/railroadDiagram-Y72NRBL7-D1oeE5fy.js +1 -0
  293. package/dist/public/assets/requirementDiagram-EQYSW5RA-BJDKK1aS.js +84 -0
  294. package/dist/public/assets/rolldown-runtime-BCiCTKAo.js +1 -0
  295. package/dist/public/assets/{rough.esm-By172zw-.js → rough.esm-Dy-Kn_BL.js} +1 -1
  296. package/dist/public/assets/sankeyDiagram-SY24JHO5-C4g0OwZ9.js +40 -0
  297. package/dist/public/assets/sequenceDiagram-BLEHNHQU-CEvy4P-b.js +169 -0
  298. package/dist/public/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  299. package/dist/public/assets/src-MPsEqXxq.js +1 -0
  300. package/dist/public/assets/stateDiagram-v2-A6IESKWZ-BFhvw4Gl.js +291 -0
  301. package/dist/public/assets/swimlanes-B3ENRKFQ-BIl_Q-FM.js +1 -0
  302. package/dist/public/assets/swimlanesDiagram-AYQRV4AK-rvDbKEHQ.js +8 -0
  303. package/dist/public/assets/timeline-definition-JXYKGLGB-qAoWTH4N.js +120 -0
  304. package/dist/public/assets/treeView-D4JQ5SDB-vq16JKkJ.js +1 -0
  305. package/dist/public/assets/treemap-SAJKECNS-C0IZTaDk.js +1 -0
  306. package/dist/public/assets/usecaseDiagram-WPOLBNNX-Dq8iz49r.js +328 -0
  307. package/dist/public/assets/vennDiagram-Q3Y3IDCW-Br4JmRjM.js +34 -0
  308. package/dist/public/assets/wardley-7MLQ67FV-CEPlAQ79.js +1 -0
  309. package/dist/public/assets/wardleyDiagram-IVAIDKWA-DURB7Ue6.js +78 -0
  310. package/dist/public/assets/xychartDiagram-4URNHDU4-BiZywfhy.js +7 -0
  311. package/dist/public/index.html +27 -28
  312. package/dist/public/sbom.cdx.json +1 -0
  313. package/dist/types.d.ts +0 -12
  314. package/dist/types.js +2 -12
  315. package/dist/types.js.map +1 -1
  316. package/dist/utils.d.ts +12 -5
  317. package/dist/utils.js +18 -43
  318. package/dist/utils.js.map +1 -1
  319. package/package.json +14 -14
  320. package/src/app.ts +51 -49
  321. package/src/auth/index.ts +3 -13
  322. package/src/auth/keycloak.ts +10 -15
  323. package/src/auth/mock.ts +144 -48
  324. package/src/auth/types.ts +10 -13
  325. package/src/common/errors.ts +45 -0
  326. package/src/common/validationSchemas.ts +3 -12
  327. package/src/domain/auth/index.ts +2 -12
  328. package/src/domain/calculations/index.ts +4 -14
  329. package/src/domain/calculations/schema.ts +2 -12
  330. package/src/domain/calculations/service.ts +8 -21
  331. package/src/domain/cardTypes/index.ts +10 -20
  332. package/src/domain/cardTypes/schema.ts +3 -12
  333. package/src/domain/cardTypes/service.ts +22 -29
  334. package/src/domain/cards/index.ts +158 -218
  335. package/src/domain/cards/lib.ts +9 -173
  336. package/src/domain/cards/mermaid.ts +25 -0
  337. package/src/domain/cards/schema.ts +19 -15
  338. package/src/domain/cards/service.ts +166 -134
  339. package/src/domain/connectors/index.ts +5 -14
  340. package/src/domain/connectors/service.ts +5 -20
  341. package/src/domain/events/events-by-project.ts +59 -0
  342. package/src/domain/events/index.ts +102 -0
  343. package/src/domain/events/lifetime.ts +17 -0
  344. package/src/domain/events/project-events.ts +266 -0
  345. package/src/domain/events/schema.ts +11 -0
  346. package/src/domain/fieldTypes/index.ts +6 -16
  347. package/src/domain/fieldTypes/schema.ts +3 -12
  348. package/src/domain/fieldTypes/service.ts +9 -21
  349. package/src/domain/graphModels/index.ts +4 -14
  350. package/src/domain/graphModels/schema.ts +3 -12
  351. package/src/domain/graphModels/service.ts +5 -18
  352. package/src/domain/graphViews/index.ts +4 -14
  353. package/src/domain/graphViews/schema.ts +3 -0
  354. package/src/domain/graphViews/service.ts +5 -18
  355. package/src/domain/labels/index.ts +4 -14
  356. package/src/domain/labels/service.ts +6 -16
  357. package/src/domain/linkTypes/index.ts +6 -16
  358. package/src/domain/linkTypes/schema.ts +2 -12
  359. package/src/domain/linkTypes/service.ts +8 -21
  360. package/src/domain/logicPrograms/index.ts +5 -17
  361. package/src/domain/logicPrograms/service.ts +7 -16
  362. package/src/domain/mcp/index.ts +33 -24
  363. package/src/domain/project/index.ts +59 -37
  364. package/src/domain/project/schema.ts +41 -18
  365. package/src/domain/project/service.ts +81 -71
  366. package/src/domain/projects/index.ts +38 -50
  367. package/src/domain/projects/schema.ts +3 -12
  368. package/src/domain/projects/service.ts +18 -88
  369. package/src/domain/reports/index.ts +4 -14
  370. package/src/domain/reports/schema.ts +2 -12
  371. package/src/domain/reports/service.ts +5 -18
  372. package/src/domain/resources/index.ts +102 -30
  373. package/src/domain/resources/schema.ts +15 -2
  374. package/src/domain/resources/service.ts +98 -81
  375. package/src/domain/skills/index.ts +51 -0
  376. package/src/domain/skills/schema.ts +9 -0
  377. package/src/domain/skills/service.ts +8 -0
  378. package/src/domain/templates/index.ts +8 -18
  379. package/src/domain/templates/schema.ts +2 -12
  380. package/src/domain/templates/service.ts +9 -22
  381. package/src/domain/tree/index.ts +4 -14
  382. package/src/domain/tree/service.ts +10 -21
  383. package/src/domain/workflows/index.ts +4 -14
  384. package/src/domain/workflows/schema.ts +2 -12
  385. package/src/domain/workflows/service.ts +5 -18
  386. package/src/export.ts +82 -73
  387. package/src/index.ts +30 -46
  388. package/src/main.ts +45 -37
  389. package/src/middleware/auth.ts +25 -16
  390. package/src/middleware/commandManager.ts +37 -49
  391. package/src/middleware/tree.ts +3 -0
  392. package/src/middleware/zvalidator.ts +3 -0
  393. package/src/overlay.ts +185 -0
  394. package/src/types.ts +2 -12
  395. package/src/utils.ts +26 -46
  396. package/dist/domain/cards/presence.d.ts +0 -50
  397. package/dist/domain/cards/presence.js +0 -93
  398. package/dist/domain/cards/presence.js.map +0 -1
  399. package/dist/project-registry.d.ts +0 -57
  400. package/dist/project-registry.js +0 -93
  401. package/dist/project-registry.js.map +0 -1
  402. package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +0 -1
  403. package/dist/public/assets/arc-DrR4k_H-.js +0 -1
  404. package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +0 -1
  405. package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +0 -36
  406. package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +0 -132
  407. package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +0 -10
  408. package/dist/public/assets/channel-D5fnImJy.js +0 -1
  409. package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +0 -1
  410. package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +0 -10
  411. package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +0 -1
  412. package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +0 -1
  413. package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +0 -1
  414. package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +0 -2
  415. package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
  416. package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +0 -1
  417. package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +0 -1
  418. package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +0 -1
  419. package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +0 -1
  420. package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +0 -1
  421. package/dist/public/assets/chunk-EX3LRPZG-Db0XYyxy.js +0 -231
  422. package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +0 -2
  423. package/dist/public/assets/chunk-HOUHSVGY-L35GPy9G.js +0 -1
  424. package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +0 -2
  425. package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +0 -2
  426. package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +0 -161
  427. package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +0 -1
  428. package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +0 -1
  429. package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +0 -1
  430. package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +0 -156
  431. package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +0 -70
  432. package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +0 -1
  433. package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +0 -1
  434. package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +0 -1
  435. package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +0 -2
  436. package/dist/public/assets/chunk-V7JOEXUC-71b0ABpv.js +0 -206
  437. package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +0 -1
  438. package/dist/public/assets/chunk-VR4S4FIN-tUhbELKr.js +0 -1
  439. package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +0 -127
  440. package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +0 -1
  441. package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +0 -1
  442. package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +0 -62
  443. package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +0 -32
  444. package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +0 -1
  445. package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +0 -1
  446. package/dist/public/assets/colors-Cg5Vh3br.js +0 -1
  447. package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +0 -1
  448. package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +0 -1
  449. package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +0 -62
  450. package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +0 -321
  451. package/dist/public/assets/dagre-Buvkdvvj.js +0 -1
  452. package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +0 -4
  453. package/dist/public/assets/diagram-FQU43EPY-DS-ryuRg.js +0 -3
  454. package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +0 -24
  455. package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +0 -24
  456. package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +0 -30
  457. package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +0 -41
  458. package/dist/public/assets/dist-BzwexiH1.js +0 -1
  459. package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +0 -1
  460. package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +0 -85
  461. package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +0 -1
  462. package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +0 -1
  463. package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +0 -292
  464. package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +0 -1
  465. package/dist/public/assets/gitGraphDiagram-IHSO6WYX-CksvJvsQ.js +0 -106
  466. package/dist/public/assets/index-COSSLZqt.css +0 -1
  467. package/dist/public/assets/index-Y8Ckwau7.js +0 -447
  468. package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +0 -1
  469. package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +0 -2
  470. package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +0 -139
  471. package/dist/public/assets/kanban-definition-HUTT4EX6-DYP_x6zD.js +0 -89
  472. package/dist/public/assets/katex-DolUETbr.js +0 -257
  473. package/dist/public/assets/line-C8Sfsgt8.js +0 -1
  474. package/dist/public/assets/linear-BWTvbP1l.js +0 -1
  475. package/dist/public/assets/map-BaFkSB1l.js +0 -1
  476. package/dist/public/assets/mermaid-parser.core--8614tkK.js +0 -4
  477. package/dist/public/assets/mindmap-definition-LN4V7U3C-3IAd4gp3.js +0 -96
  478. package/dist/public/assets/ordinal-BdBDtYTt.js +0 -1
  479. package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +0 -1
  480. package/dist/public/assets/path-HTXttWil.js +0 -1
  481. package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +0 -1
  482. package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +0 -1
  483. package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +0 -39
  484. package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +0 -1
  485. package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +0 -1
  486. package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +0 -1
  487. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +0 -1
  488. package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +0 -1
  489. package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +0 -1
  490. package/dist/public/assets/range-EplFIxc7.js +0 -1
  491. package/dist/public/assets/requirementDiagram-TGXJPOKE-CmvJWy_S.js +0 -84
  492. package/dist/public/assets/sankeyDiagram-HTMAVEWB-tAeOzMTn.js +0 -40
  493. package/dist/public/assets/sequenceDiagram-DBY2YBRQ-r0pwijM4.js +0 -162
  494. package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +0 -1
  495. package/dist/public/assets/src-DOh7_en_.js +0 -1
  496. package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +0 -1
  497. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +0 -1
  498. package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +0 -2
  499. package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +0 -8
  500. package/dist/public/assets/time-BM2d9MsQ.js +0 -1
  501. package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +0 -120
  502. package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +0 -1
  503. package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +0 -1
  504. package/dist/public/assets/treemap-BfjIY-m6.js +0 -1
  505. package/dist/public/assets/vennDiagram-L72KCM5P-ti2qNcvo.js +0 -34
  506. package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +0 -1
  507. package/dist/public/assets/wardleyDiagram-EHGQE667-C8lblm8x.js +0 -78
  508. package/dist/public/assets/xychartDiagram-FW5EYKEG-US-_k5eu.js +0 -7
  509. package/src/domain/cards/presence.ts +0 -124
  510. package/src/project-registry.ts +0 -130
@@ -1,15 +1,5 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2025
4
- This program is free software: you can redistribute it and/or modify it under
5
- the terms of the GNU Affero General Public License version 3 as published by
6
- the Free Software Foundation.
7
- This program is distributed in the hope that it will be useful, but WITHOUT
8
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
- details. You should have received a copy of the GNU Affero General Public
11
- License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
- */
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
13
3
 
14
4
  import { Hono } from 'hono';
15
5
  import { ssgParams } from 'hono/ssg';
@@ -20,8 +10,9 @@ import { resourceParamsSchema } from '../../common/validationSchemas.js';
20
10
  import { zValidator } from '../../middleware/zvalidator.js';
21
11
  import {
22
12
  validateResourceParamsSchema,
13
+ prefixIdentifierParamsSchema,
14
+ skillPreviewBodySchema,
23
15
  updateOperationBodySchema,
24
- workflowGraphParamsSchema,
25
16
  workflowGraphQuerySchema,
26
17
  } from './schema.js';
27
18
  import { requireRole } from '../../middleware/auth.js';
@@ -41,10 +32,10 @@ const router = new Hono();
41
32
  * description: project_path not set or other internal error
42
33
  */
43
34
  router.get('/tree', requireRole(UserRole.Reader), async (c) => {
44
- const commands = c.get('commands');
35
+ const ws = c.get('ws');
45
36
 
46
37
  try {
47
- const tree = await resourceService.buildResourceTree(commands);
38
+ const tree = await resourceService.buildResourceTree(ws);
48
39
  return c.json(tree);
49
40
  } catch (error) {
50
41
  return c.json(
@@ -105,12 +96,12 @@ router.get(
105
96
  requireRole(UserRole.Reader),
106
97
  zValidator('param', validateResourceParamsSchema),
107
98
  async (c) => {
108
- const commands = c.get('commands');
99
+ const ws = c.get('ws');
109
100
  const resourceParams = c.req.valid('param');
110
101
 
111
102
  try {
112
103
  const response: ResourceValidationResponse =
113
- await resourceService.validateResource(commands, resourceParams);
104
+ await resourceService.validateResource(ws, resourceParams);
114
105
  return c.json(response);
115
106
  } catch (error) {
116
107
  if (error instanceof Error && error.message.includes('not found')) {
@@ -126,9 +117,9 @@ router.delete(
126
117
  requireRole(UserRole.Admin),
127
118
  zValidator('param', resourceParamsSchema),
128
119
  async (c) => {
129
- const commands = c.get('commands');
120
+ const ws = c.get('ws');
130
121
  const resourceParams = c.req.valid('param');
131
- await resourceService.deleteResource(commands, resourceParams);
122
+ await resourceService.deleteResource(ws, resourceParams);
132
123
  return c.json({
133
124
  message: 'Resource deleted',
134
125
  });
@@ -185,19 +176,19 @@ router.get(
185
176
  '/:prefix/workflows/:identifier/graph',
186
177
  requireRole(UserRole.Reader),
187
178
  ssgParams(async (c: AppContext) => {
188
- const commands = c.get('commands');
189
- return resourceService.listWorkflowGraphParams(commands);
179
+ const ws = c.get('ws');
180
+ return resourceService.listWorkflowGraphParams(ws);
190
181
  }),
191
- zValidator('param', workflowGraphParamsSchema),
182
+ zValidator('param', prefixIdentifierParamsSchema),
192
183
  zValidator('query', workflowGraphQuerySchema),
193
184
  async (c) => {
194
- const commands = c.get('commands');
185
+ const ws = c.get('ws');
195
186
  const { prefix, identifier } = c.req.valid('param');
196
187
  const { card } = c.req.valid('query');
197
188
  const workflowName = `${prefix}/workflows/${identifier}`;
198
189
  try {
199
190
  const svg = await resourceService.getWorkflowGraph(
200
- commands,
191
+ ws,
201
192
  workflowName,
202
193
  card,
203
194
  );
@@ -211,21 +202,102 @@ router.get(
211
202
  },
212
203
  );
213
204
 
205
+ /**
206
+ * @swagger
207
+ * /api/resources/{prefix}/skills/{identifier}/preview:
208
+ * post:
209
+ * summary: Render a skill's instructions for the configuration editor
210
+ * description: Applies Handlebars templating to the skill content and
211
+ * returns the rendered markdown. For template skills the
212
+ * logic program in query.lp is executed first and its result
213
+ * is used as the template context. Unlike the MCP get_skill
214
+ * tool, the skill does not need to be enabled by the logic
215
+ * programs. Pass skillContent and/or skillQuery to render
216
+ * unsaved editor content instead of what is stored on disk.
217
+ * parameters:
218
+ * - in: path
219
+ * name: prefix
220
+ * required: true
221
+ * schema:
222
+ * type: string
223
+ * - in: path
224
+ * name: identifier
225
+ * required: true
226
+ * schema:
227
+ * type: string
228
+ * requestBody:
229
+ * required: false
230
+ * content:
231
+ * application/json:
232
+ * schema:
233
+ * type: object
234
+ * properties:
235
+ * skillContent:
236
+ * type: string
237
+ * description: Unsaved skill.md content to render.
238
+ * skillQuery:
239
+ * type: string
240
+ * description: Unsaved query.lp content to run.
241
+ * cardKey:
242
+ * type: string
243
+ * description: Card context for a card-specific skill.
244
+ * responses:
245
+ * 200:
246
+ * description: Rendered instructions
247
+ * content:
248
+ * application/json:
249
+ * schema:
250
+ * type: object
251
+ * properties:
252
+ * instructions:
253
+ * type: string
254
+ * description: The rendered skill content as markdown.
255
+ * 400:
256
+ * description: Invalid path parameters, or the query or template failed
257
+ * 404:
258
+ * description: Skill or card not found
259
+ */
260
+ router.post(
261
+ '/:prefix/skills/:identifier/preview',
262
+ requireRole(UserRole.Admin),
263
+ zValidator('param', prefixIdentifierParamsSchema),
264
+ zValidator('json', skillPreviewBodySchema),
265
+ async (c) => {
266
+ const ws = c.get('ws');
267
+ const { prefix, identifier } = c.req.valid('param');
268
+ const body = c.req.valid('json');
269
+ const skillName = `${prefix}/skills/${identifier}`;
270
+ try {
271
+ const instructions = await resourceService.previewSkill(
272
+ ws,
273
+ skillName,
274
+ body,
275
+ );
276
+ return c.json({ instructions });
277
+ } catch (error) {
278
+ const message = error instanceof Error ? error.message : 'Unknown error';
279
+ if (message.includes('not found')) {
280
+ return c.json({ error: message }, 404);
281
+ }
282
+ return c.json({ error: message }, 400);
283
+ }
284
+ },
285
+ );
286
+
214
287
  router.post(
215
288
  '/:prefix/:type/:identifier/operation',
216
289
  requireRole(UserRole.Admin, [UserRole.Connector]),
217
290
  zValidator('param', resourceParamsSchema),
218
291
  zValidator('json', updateOperationBodySchema),
219
292
  async (c) => {
220
- const commands = c.get('commands');
293
+ const ws = c.get('ws');
221
294
  const resourceParams = c.req.valid('param');
222
295
  const { updateKey, operation } = c.req.valid('json');
223
296
 
224
- await resourceService.updateResourceWithOperation(
225
- commands,
226
- resourceParams,
227
- { updateKey, operation },
228
- );
297
+ await resourceService.updateResourceWithOperation(ws, resourceParams, {
298
+ updateKey,
299
+ operation,
300
+ });
229
301
  return c.json({ message: 'Updated' });
230
302
  },
231
303
  );
@@ -1,3 +1,6 @@
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
1
4
  import { z } from 'zod';
2
5
  import {
3
6
  identifierSchema,
@@ -5,12 +8,14 @@ import {
5
8
  resourceTypes,
6
9
  } from '../../common/validationSchemas.js';
7
10
 
8
- export const workflowGraphParamsSchema = z.object({
11
+ export const prefixIdentifierParamsSchema = z.object({
9
12
  prefix: z.string(),
10
13
  identifier: identifierSchema,
11
14
  });
12
15
 
13
- export type WorkflowGraphParams = z.infer<typeof workflowGraphParamsSchema>;
16
+ export type PrefixIdentifierParams = z.infer<
17
+ typeof prefixIdentifierParamsSchema
18
+ >;
14
19
 
15
20
  export const workflowGraphQuerySchema = z.object({
16
21
  card: z.string().optional(),
@@ -18,6 +23,14 @@ export const workflowGraphQuerySchema = z.object({
18
23
 
19
24
  export type WorkflowGraphQuery = z.infer<typeof workflowGraphQuerySchema>;
20
25
 
26
+ export const skillPreviewBodySchema = z.object({
27
+ skillContent: z.string().optional(),
28
+ skillQuery: z.string().optional(),
29
+ cardKey: z.string().optional(),
30
+ });
31
+
32
+ export type SkillPreviewBody = z.infer<typeof skillPreviewBodySchema>;
33
+
21
34
  export const resourceFileParamsSchema = resourceParamsSchema.extend({
22
35
  file: z.string(),
23
36
  });
@@ -1,32 +1,27 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2025
4
- This program is free software: you can redistribute it and/or modify it under
5
- the terms of the GNU Affero General Public License version 3 as published by
6
- the Free Software Foundation.
7
- This program is distributed in the hope that it will be useful, but WITHOUT
8
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
- details. You should have received a copy of the GNU Affero General Public
11
- License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
- */
13
-
14
- import type { AnyResourceContent } from '@cyberismo/data-handler/interfaces/resource-interfaces';
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
15
4
  import type {
5
+ AnyResourceContent,
16
6
  Card,
17
7
  CardWithChildrenCards,
18
8
  ResourceFolderType,
19
- RemovableResourceTypes,
20
- } from '@cyberismo/data-handler/interfaces/project-interfaces';
9
+ } from '@cyberismo/model';
21
10
  import {
22
- type CommandManager,
11
+ type Workspace,
12
+ CardNotFoundError,
23
13
  isResourceFolderType,
24
14
  moduleNameFromCardKey,
25
15
  resourceName,
26
16
  resourceNameToString,
17
+ ResourceNotFoundError,
27
18
  } from '@cyberismo/data-handler';
28
19
  import type { ResourceParams } from '../../common/validationSchemas.js';
29
- import type { ValidateResourceParams, UpdateOperationBody } from './schema.js';
20
+ import type {
21
+ SkillPreviewBody,
22
+ UpdateOperationBody,
23
+ ValidateResourceParams,
24
+ } from './schema.js';
30
25
 
31
26
  const resourceTypes: ResourceFolderType[] = [
32
27
  'calculations',
@@ -36,17 +31,18 @@ const resourceTypes: ResourceFolderType[] = [
36
31
  'graphViews',
37
32
  'linkTypes',
38
33
  'reports',
34
+ 'skills',
39
35
  'templates',
40
36
  'workflows',
41
37
  ];
42
38
 
43
- async function getModules(commands: CommandManager) {
39
+ async function getModules(ws: Workspace) {
44
40
  try {
45
- const modules = await commands.showCmd.showModules();
41
+ const modules = await ws.modules.list();
46
42
  return Promise.all(
47
43
  modules.map(async (mod) => {
48
44
  try {
49
- const module = await commands.showCmd.showModule(mod.name);
45
+ const module = await ws.modules.show(mod.name);
50
46
  return { name: module.name, cardKeyPrefix: module.cardKeyPrefix };
51
47
  } catch {
52
48
  return { name: mod.name, cardKeyPrefix: mod.name };
@@ -76,9 +72,9 @@ function sortTemplateCardsByRank(
76
72
  }));
77
73
  }
78
74
 
79
- export async function buildResourceTree(commands: CommandManager) {
80
- return commands.consistent(async () => {
81
- const project = await commands.showCmd.showProject();
75
+ export async function buildResourceTree(ws: Workspace) {
76
+ return ws.consistent(async () => {
77
+ const project = await ws.settings.info();
82
78
  const tree: unknown[] = [];
83
79
 
84
80
  const sortByDisplayName = (
@@ -90,7 +86,7 @@ export async function buildResourceTree(commands: CommandManager) {
90
86
  ),
91
87
  );
92
88
 
93
- const modules = await getModules(commands);
89
+ const modules = await getModules(ws);
94
90
 
95
91
  // General section first (single node with project + modules metadata)
96
92
  tree.push({
@@ -112,12 +108,12 @@ export async function buildResourceTree(commands: CommandManager) {
112
108
 
113
109
  if (resourceType === 'templates') {
114
110
  ({ rootResources, moduleResources } = await processTemplates(
115
- commands,
111
+ ws,
116
112
  project.prefix,
117
113
  ));
118
114
  } else {
119
115
  ({ rootResources, moduleResources } = await groupResourcesByPrefix(
120
- commands,
116
+ ws,
121
117
  resourceType,
122
118
  project.prefix,
123
119
  ));
@@ -195,7 +191,7 @@ function parseResourcePrefix(resource: string): {
195
191
  // Helper function to create resource node with all data from showResource
196
192
  // TODO: The types should be shared between backend and frontend
197
193
  async function createResourceNode(
198
- commands: CommandManager,
194
+ ws: Workspace,
199
195
  resourceType: ResourceFolderType,
200
196
  name: string,
201
197
  projectPrefix: string,
@@ -208,7 +204,7 @@ async function createResourceNode(
208
204
  children?: unknown[];
209
205
  readOnly?: boolean;
210
206
  }> {
211
- const resourceData = await commands.showCmd.showResource(name);
207
+ const resourceData = await ws.resources.show(name);
212
208
  const node: {
213
209
  id: string;
214
210
  type: ResourceFolderType;
@@ -297,12 +293,9 @@ function createCardNode(
297
293
  }
298
294
 
299
295
  // Helper function to process templates using templateTree query
300
- async function processTemplates(
301
- commands: CommandManager,
302
- projectPrefix: string,
303
- ) {
304
- const templates = await commands.showCmd.showResources('templates');
305
- const templateTree = await commands.showCmd.showAllTemplateCards();
296
+ async function processTemplates(ws: Workspace, projectPrefix: string) {
297
+ const templates = await ws.resources.list('templates');
298
+ const templateTree = await ws.cards.templateCards();
306
299
 
307
300
  const rootTemplates: { [templateName: string]: unknown[] } = {};
308
301
  const moduleTemplates: {
@@ -336,13 +329,7 @@ async function processTemplates(
336
329
 
337
330
  const rootResources = await Promise.all(
338
331
  Object.entries(rootTemplates).map(([templateName, cards]) =>
339
- createResourceNode(
340
- commands,
341
- 'templates',
342
- templateName,
343
- projectPrefix,
344
- cards,
345
- ),
332
+ createResourceNode(ws, 'templates', templateName, projectPrefix, cards),
346
333
  ),
347
334
  );
348
335
 
@@ -350,13 +337,7 @@ async function processTemplates(
350
337
  for (const [prefix, templates] of Object.entries(moduleTemplates)) {
351
338
  moduleResources[prefix] = await Promise.all(
352
339
  Object.entries(templates).map(([templateName, cards]) =>
353
- createResourceNode(
354
- commands,
355
- 'templates',
356
- templateName,
357
- projectPrefix,
358
- cards,
359
- ),
340
+ createResourceNode(ws, 'templates', templateName, projectPrefix, cards),
360
341
  ),
361
342
  );
362
343
  }
@@ -368,7 +349,7 @@ async function processTemplates(
368
349
  if (!rootResources.find((resource) => resource.name === template)) {
369
350
  rootResources.push(
370
351
  await createResourceNode(
371
- commands,
352
+ ws,
372
353
  'templates',
373
354
  template,
374
355
  projectPrefix,
@@ -387,7 +368,7 @@ async function processTemplates(
387
368
  ) {
388
369
  moduleResources[prefix].push(
389
370
  await createResourceNode(
390
- commands,
371
+ ws,
391
372
  'templates',
392
373
  template,
393
374
  projectPrefix,
@@ -403,14 +384,14 @@ async function processTemplates(
403
384
 
404
385
  // Helper function to group regular resources by prefix
405
386
  async function groupResourcesByPrefix(
406
- commands: CommandManager,
387
+ ws: Workspace,
407
388
  resourceType: ResourceFolderType,
408
389
  projectPrefix: string,
409
390
  ) {
410
- const resourceNames = await commands.showCmd.showResources(resourceType);
391
+ const resourceNames = await ws.resources.list(resourceType);
411
392
  const resources = await Promise.all(
412
393
  resourceNames.map((name: string) =>
413
- createResourceNode(commands, resourceType, name, projectPrefix),
394
+ createResourceNode(ws, resourceType, name, projectPrefix),
414
395
  ),
415
396
  );
416
397
 
@@ -434,35 +415,27 @@ async function groupResourcesByPrefix(
434
415
 
435
416
  /**
436
417
  * Delete a resource.
437
- * @param commands Command manager.
418
+ * @param ws Command manager.
438
419
  * @param resource Resource to delete.
439
420
  */
440
- export async function deleteResource(
441
- commands: CommandManager,
442
- resource: ResourceParams,
443
- ) {
444
- return commands.removeCmd.remove(
445
- resource.type.substring(
446
- 0,
447
- resource.type.length - 1,
448
- ) as RemovableResourceTypes,
421
+ export async function deleteResource(ws: Workspace, resource: ResourceParams) {
422
+ return ws.resources.remove(
449
423
  resourceNameToString(resource),
424
+ resource.type.substring(0, resource.type.length - 1),
450
425
  );
451
426
  }
452
427
 
453
428
  /**
454
429
  * Validate a single resource.
455
- * @param commands Command manager.
430
+ * @param ws Command manager.
456
431
  * @param resource Resource to validate.
457
432
  * @returns Validation result with errors and validity status.
458
433
  */
459
434
  export async function validateResource(
460
- commands: CommandManager,
435
+ ws: Workspace,
461
436
  resource: ValidateResourceParams,
462
437
  ) {
463
- const errors = await commands.consistent(() =>
464
- commands.validateCmd.validateResource(resource, commands.project),
465
- );
438
+ const errors = await ws.resources.validate(resource);
466
439
 
467
440
  return {
468
441
  errors: errors.split('\n\n').filter((error) => error !== ''),
@@ -471,13 +444,13 @@ export async function validateResource(
471
444
 
472
445
  /**
473
446
  * Lists the path params for every workflow resource in the project.
474
- * @param commands Command manager.
447
+ * @param ws Command manager.
475
448
  * @returns One `{ prefix, identifier }` entry per workflow resource.
476
449
  */
477
450
  export async function listWorkflowGraphParams(
478
- commands: CommandManager,
451
+ ws: Workspace,
479
452
  ): Promise<{ prefix: string; identifier: string }[]> {
480
- const workflows = await commands.showCmd.showResources('workflows');
453
+ const workflows = await ws.resources.list('workflows');
481
454
  return workflows.map((name) => {
482
455
  const { prefix, identifier } = resourceName(name);
483
456
  return { prefix, identifier };
@@ -496,15 +469,15 @@ export async function listWorkflowGraphParams(
496
469
  * card cannot be resolved.
497
470
  */
498
471
  export async function getWorkflowGraph(
499
- commands: CommandManager,
472
+ ws: Workspace,
500
473
  workflowName: string,
501
474
  cardKey?: string,
502
475
  ): Promise<string> {
503
- return commands.consistent(async () => {
476
+ return ws.consistent(async () => {
504
477
  try {
505
- await commands.showCmd.showResource(workflowName, 'workflows');
478
+ await ws.resources.show(workflowName, 'workflows');
506
479
  } catch (error) {
507
- if (error instanceof Error && error.message.includes('does not exist')) {
480
+ if (error instanceof ResourceNotFoundError) {
508
481
  throw new Error(`Workflow '${workflowName}' not found`, {
509
482
  cause: error,
510
483
  });
@@ -515,7 +488,7 @@ export async function getWorkflowGraph(
515
488
  if (cardKey) {
516
489
  let card;
517
490
  try {
518
- card = await commands.showCmd.showCardDetails(cardKey);
491
+ card = await ws.cards.details(cardKey);
519
492
  } catch (error) {
520
493
  throw new Error(`Card '${cardKey}' not found`, { cause: error });
521
494
  }
@@ -524,25 +497,69 @@ export async function getWorkflowGraph(
524
497
  }
525
498
  currentState = card.metadata.workflowState;
526
499
  }
527
- return commands.calculateCmd.runWorkflowGraph(workflowName, {
500
+ return ws.queries.runWorkflowGraph(workflowName, {
528
501
  currentState,
529
502
  });
530
503
  });
531
504
  }
532
505
 
506
+ /**
507
+ * Renders a skill's instructions for the configuration editor preview.
508
+ * Unlike the MCP `get_skill` tool, this does not require the skill to be
509
+ * enabled by the logic programs — the author is still working on it. When
510
+ * `skillContent` or `skillQuery` is given, that unsaved editor content is
511
+ * rendered instead of what is stored on disk. The lookups and the rendering
512
+ * share one consistency window so the preview matches a single project state.
513
+ * @returns the rendered instructions as markdown.
514
+ * @throws Error with 'not found' in the message when the skill or card cannot
515
+ * be resolved; any other error means the template or query failed to render.
516
+ */
517
+ export async function previewSkill(
518
+ ws: Workspace,
519
+ skillName: string,
520
+ body: SkillPreviewBody,
521
+ ): Promise<string> {
522
+ const { cardKey, skillContent, skillQuery } = body;
523
+ return ws.consistent(async () => {
524
+ try {
525
+ await ws.resources.show(skillName, 'skills');
526
+ } catch (error) {
527
+ if (error instanceof ResourceNotFoundError) {
528
+ throw new Error(`Skill '${skillName}' not found`, { cause: error });
529
+ }
530
+ throw error;
531
+ }
532
+ if (cardKey) {
533
+ try {
534
+ await ws.cards.details(cardKey);
535
+ } catch (error) {
536
+ if (error instanceof CardNotFoundError) {
537
+ throw new Error(`Card '${cardKey}' not found`, { cause: error });
538
+ }
539
+ throw error;
540
+ }
541
+ }
542
+ return ws.resources.skillPreview(skillName, {
543
+ cardKey,
544
+ skillContent,
545
+ skillQuery,
546
+ });
547
+ });
548
+ }
549
+
533
550
  /**
534
551
  * Perform an updateOperation on a resource key.
535
552
  * This delegates to the data-handler mutation engine.
536
553
  */
537
554
  export async function updateResourceWithOperation(
538
- commands: CommandManager,
555
+ ws: Workspace,
539
556
  resource: ResourceParams,
540
557
  body: UpdateOperationBody,
541
558
  ) {
542
559
  const { updateKey, operation } = body;
543
- await commands.atomic(
560
+ await ws.atomic(
544
561
  () =>
545
- commands.updateCmd.apply({
562
+ ws.changes.apply({
546
563
  kind: 'edit',
547
564
  target: resource,
548
565
  updateKey,
@@ -0,0 +1,51 @@
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ import { Hono } from 'hono';
5
+ import * as skillService from './service.js';
6
+ import { createSkillSchema } from './schema.js';
7
+ import { zValidator } from '../../middleware/zvalidator.js';
8
+ import { UserRole } from '../../types.js';
9
+ import { requireRole } from '../../middleware/auth.js';
10
+
11
+ const router = new Hono();
12
+
13
+ /**
14
+ * @swagger
15
+ * /api/skills:
16
+ * post:
17
+ * summary: Create a new skill
18
+ * description: Creates a new skill with the specified identifier
19
+ * requestBody:
20
+ * required: true
21
+ * content:
22
+ * application/json:
23
+ * schema:
24
+ * type: object
25
+ * properties:
26
+ * identifier:
27
+ * type: string
28
+ * required:
29
+ * - identifier
30
+ * responses:
31
+ * 200:
32
+ * description: Skill created successfully
33
+ * 400:
34
+ * description: Invalid request body
35
+ * 500:
36
+ * description: Server error
37
+ */
38
+ router.post(
39
+ '/',
40
+ requireRole(UserRole.Admin),
41
+ zValidator('json', createSkillSchema),
42
+ async (c) => {
43
+ const ws = c.get('ws');
44
+ const { identifier } = c.req.valid('json');
45
+
46
+ await skillService.createSkill(ws, identifier);
47
+ return c.json({ message: 'Skill created successfully' });
48
+ },
49
+ );
50
+
51
+ export default router;
@@ -0,0 +1,9 @@
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ import { z } from 'zod';
5
+ import { identifierSchema } from '../../common/validationSchemas.js';
6
+
7
+ export const createSkillSchema = z.object({
8
+ identifier: identifierSchema,
9
+ });
@@ -0,0 +1,8 @@
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ import type { Workspace } from '@cyberismo/data-handler';
5
+
6
+ export async function createSkill(ws: Workspace, skillName: string) {
7
+ await ws.resources.create(skillName, 'skills', {});
8
+ }