@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.
- package/README.md +21 -0
- package/dist/app.d.ts +5 -15
- package/dist/app.js +46 -44
- package/dist/app.js.map +1 -1
- package/dist/auth/index.d.ts +1 -13
- package/dist/auth/index.js +3 -13
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keycloak.d.ts +2 -15
- package/dist/auth/keycloak.js +8 -12
- package/dist/auth/keycloak.js.map +1 -1
- package/dist/auth/mock.d.ts +12 -20
- package/dist/auth/mock.js +121 -43
- package/dist/auth/mock.js.map +1 -1
- package/dist/auth/types.d.ts +7 -13
- package/dist/auth/types.js +2 -12
- package/dist/auth/types.js.map +1 -1
- package/dist/common/errors.d.ts +12 -0
- package/dist/common/errors.js +31 -0
- package/dist/common/errors.js.map +1 -0
- package/dist/common/validationSchemas.d.ts +0 -12
- package/dist/common/validationSchemas.js +2 -12
- package/dist/common/validationSchemas.js.map +1 -1
- package/dist/domain/auth/index.d.ts +0 -12
- package/dist/domain/auth/index.js +2 -12
- package/dist/domain/auth/index.js.map +1 -1
- package/dist/domain/calculations/index.d.ts +0 -12
- package/dist/domain/calculations/index.js +4 -14
- package/dist/domain/calculations/index.js.map +1 -1
- package/dist/domain/calculations/schema.d.ts +0 -12
- package/dist/domain/calculations/schema.js +2 -12
- package/dist/domain/calculations/schema.js.map +1 -1
- package/dist/domain/calculations/service.d.ts +2 -14
- package/dist/domain/calculations/service.js +7 -17
- package/dist/domain/calculations/service.js.map +1 -1
- package/dist/domain/cardTypes/index.d.ts +0 -12
- package/dist/domain/cardTypes/index.js +10 -20
- package/dist/domain/cardTypes/index.js.map +1 -1
- package/dist/domain/cardTypes/schema.d.ts +0 -12
- package/dist/domain/cardTypes/schema.js +2 -12
- package/dist/domain/cardTypes/schema.js.map +1 -1
- package/dist/domain/cardTypes/service.d.ts +4 -16
- package/dist/domain/cardTypes/service.js +17 -25
- package/dist/domain/cardTypes/service.js.map +1 -1
- package/dist/domain/cards/index.d.ts +0 -12
- package/dist/domain/cards/index.js +120 -175
- package/dist/domain/cards/index.js.map +1 -1
- package/dist/domain/cards/lib.d.ts +6 -23
- package/dist/domain/cards/lib.js +7 -135
- package/dist/domain/cards/lib.js.map +1 -1
- package/dist/domain/cards/mermaid.d.ts +8 -0
- package/dist/domain/cards/mermaid.js +23 -0
- package/dist/domain/cards/mermaid.js.map +1 -0
- package/dist/domain/cards/schema.d.ts +6 -12
- package/dist/domain/cards/schema.js +15 -15
- package/dist/domain/cards/schema.js.map +1 -1
- package/dist/domain/cards/service.d.ts +29 -36
- package/dist/domain/cards/service.js +119 -90
- package/dist/domain/cards/service.js.map +1 -1
- package/dist/domain/connectors/index.d.ts +0 -12
- package/dist/domain/connectors/index.js +4 -14
- package/dist/domain/connectors/index.js.map +1 -1
- package/dist/domain/connectors/service.d.ts +2 -14
- package/dist/domain/connectors/service.js +4 -14
- package/dist/domain/connectors/service.js.map +1 -1
- package/dist/domain/events/events-by-project.d.ts +19 -0
- package/dist/domain/events/events-by-project.js +57 -0
- package/dist/domain/events/events-by-project.js.map +1 -0
- package/dist/domain/events/index.d.ts +3 -0
- package/dist/domain/events/index.js +84 -0
- package/dist/domain/events/index.js.map +1 -0
- package/dist/domain/events/lifetime.d.ts +2 -0
- package/dist/domain/events/lifetime.js +15 -0
- package/dist/domain/events/lifetime.js.map +1 -0
- package/dist/domain/events/project-events.d.ts +63 -0
- package/dist/domain/events/project-events.js +204 -0
- package/dist/domain/events/project-events.js.map +1 -0
- package/dist/domain/events/schema.d.ts +10 -0
- package/dist/domain/events/schema.js +10 -0
- package/dist/domain/events/schema.js.map +1 -0
- package/dist/domain/fieldTypes/index.d.ts +0 -12
- package/dist/domain/fieldTypes/index.js +6 -16
- package/dist/domain/fieldTypes/index.js.map +1 -1
- package/dist/domain/fieldTypes/schema.d.ts +0 -12
- package/dist/domain/fieldTypes/schema.js +2 -12
- package/dist/domain/fieldTypes/schema.js.map +1 -1
- package/dist/domain/fieldTypes/service.d.ts +4 -16
- package/dist/domain/fieldTypes/service.js +7 -17
- package/dist/domain/fieldTypes/service.js.map +1 -1
- package/dist/domain/graphModels/index.d.ts +0 -12
- package/dist/domain/graphModels/index.js +4 -14
- package/dist/domain/graphModels/index.js.map +1 -1
- package/dist/domain/graphModels/schema.d.ts +0 -12
- package/dist/domain/graphModels/schema.js +2 -12
- package/dist/domain/graphModels/schema.js.map +1 -1
- package/dist/domain/graphModels/service.d.ts +2 -14
- package/dist/domain/graphModels/service.js +4 -14
- package/dist/domain/graphModels/service.js.map +1 -1
- package/dist/domain/graphViews/index.d.ts +0 -12
- package/dist/domain/graphViews/index.js +4 -14
- package/dist/domain/graphViews/index.js.map +1 -1
- package/dist/domain/graphViews/schema.js +2 -0
- package/dist/domain/graphViews/schema.js.map +1 -1
- package/dist/domain/graphViews/service.d.ts +2 -14
- package/dist/domain/graphViews/service.js +4 -14
- package/dist/domain/graphViews/service.js.map +1 -1
- package/dist/domain/labels/index.d.ts +0 -12
- package/dist/domain/labels/index.js +4 -14
- package/dist/domain/labels/index.js.map +1 -1
- package/dist/domain/labels/service.d.ts +3 -15
- package/dist/domain/labels/service.js +5 -15
- package/dist/domain/labels/service.js.map +1 -1
- package/dist/domain/linkTypes/index.d.ts +0 -12
- package/dist/domain/linkTypes/index.js +6 -16
- package/dist/domain/linkTypes/index.js.map +1 -1
- package/dist/domain/linkTypes/schema.d.ts +0 -12
- package/dist/domain/linkTypes/schema.js +2 -12
- package/dist/domain/linkTypes/schema.js.map +1 -1
- package/dist/domain/linkTypes/service.d.ts +3 -15
- package/dist/domain/linkTypes/service.js +7 -17
- package/dist/domain/linkTypes/service.js.map +1 -1
- package/dist/domain/logicPrograms/index.d.ts +0 -12
- package/dist/domain/logicPrograms/index.js +4 -14
- package/dist/domain/logicPrograms/index.js.map +1 -1
- package/dist/domain/logicPrograms/service.d.ts +2 -14
- package/dist/domain/logicPrograms/service.js +5 -3
- package/dist/domain/logicPrograms/service.js.map +1 -1
- package/dist/domain/mcp/index.d.ts +3 -15
- package/dist/domain/mcp/index.js +27 -21
- package/dist/domain/mcp/index.js.map +1 -1
- package/dist/domain/project/index.d.ts +0 -12
- package/dist/domain/project/index.js +41 -39
- package/dist/domain/project/index.js.map +1 -1
- package/dist/domain/project/schema.d.ts +8 -12
- package/dist/domain/project/schema.js +36 -18
- package/dist/domain/project/schema.js.map +1 -1
- package/dist/domain/project/service.d.ts +20 -28
- package/dist/domain/project/service.js +56 -60
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/projects/index.d.ts +2 -14
- package/dist/domain/projects/index.js +23 -36
- package/dist/domain/projects/index.js.map +1 -1
- package/dist/domain/projects/schema.d.ts +1 -12
- package/dist/domain/projects/schema.js +3 -12
- package/dist/domain/projects/schema.js.map +1 -1
- package/dist/domain/projects/service.d.ts +9 -35
- package/dist/domain/projects/service.js +12 -48
- package/dist/domain/projects/service.js.map +1 -1
- package/dist/domain/reports/index.d.ts +0 -12
- package/dist/domain/reports/index.js +4 -14
- package/dist/domain/reports/index.js.map +1 -1
- package/dist/domain/reports/schema.d.ts +0 -12
- package/dist/domain/reports/schema.js +2 -12
- package/dist/domain/reports/schema.js.map +1 -1
- package/dist/domain/reports/service.d.ts +2 -14
- package/dist/domain/reports/service.js +4 -14
- package/dist/domain/reports/service.js.map +1 -1
- package/dist/domain/resources/index.d.ts +0 -12
- package/dist/domain/resources/index.js +91 -26
- package/dist/domain/resources/index.js.map +1 -1
- package/dist/domain/resources/schema.d.ts +8 -2
- package/dist/domain/resources/schema.js +8 -1
- package/dist/domain/resources/schema.js.map +1 -1
- package/dist/domain/resources/service.d.ts +23 -23
- package/dist/domain/resources/service.js +83 -51
- package/dist/domain/resources/service.js.map +1 -1
- package/dist/domain/skills/index.d.ts +3 -0
- package/dist/domain/skills/index.js +42 -0
- package/dist/domain/skills/index.js.map +1 -0
- package/dist/domain/skills/schema.d.ts +4 -0
- package/dist/domain/skills/schema.js +8 -0
- package/dist/domain/skills/schema.js.map +1 -0
- package/dist/domain/skills/service.d.ts +2 -0
- package/dist/domain/skills/service.js +6 -0
- package/dist/domain/skills/service.js.map +1 -0
- package/dist/domain/templates/index.d.ts +0 -12
- package/dist/domain/templates/index.js +8 -18
- package/dist/domain/templates/index.js.map +1 -1
- package/dist/domain/templates/schema.d.ts +0 -12
- package/dist/domain/templates/schema.js +2 -12
- package/dist/domain/templates/schema.js.map +1 -1
- package/dist/domain/templates/service.d.ts +4 -16
- package/dist/domain/templates/service.js +8 -18
- package/dist/domain/templates/service.js.map +1 -1
- package/dist/domain/tree/index.d.ts +0 -12
- package/dist/domain/tree/index.js +4 -14
- package/dist/domain/tree/index.js.map +1 -1
- package/dist/domain/tree/service.d.ts +3 -15
- package/dist/domain/tree/service.js +8 -15
- package/dist/domain/tree/service.js.map +1 -1
- package/dist/domain/workflows/index.d.ts +0 -12
- package/dist/domain/workflows/index.js +4 -14
- package/dist/domain/workflows/index.js.map +1 -1
- package/dist/domain/workflows/schema.d.ts +0 -12
- package/dist/domain/workflows/schema.js +2 -12
- package/dist/domain/workflows/schema.js.map +1 -1
- package/dist/domain/workflows/service.d.ts +2 -14
- package/dist/domain/workflows/service.js +4 -14
- package/dist/domain/workflows/service.js.map +1 -1
- package/dist/export.d.ts +8 -21
- package/dist/export.js +71 -66
- package/dist/export.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +20 -41
- package/dist/index.js.map +1 -1
- package/dist/main.js +36 -32
- package/dist/main.js.map +1 -1
- package/dist/middleware/auth.d.ts +5 -12
- package/dist/middleware/auth.js +22 -16
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/commandManager.d.ts +17 -20
- package/dist/middleware/commandManager.js +27 -35
- package/dist/middleware/commandManager.js.map +1 -1
- package/dist/middleware/tree.js +2 -0
- package/dist/middleware/tree.js.map +1 -1
- package/dist/middleware/zvalidator.js +2 -0
- package/dist/middleware/zvalidator.js.map +1 -1
- package/dist/overlay.d.ts +33 -0
- package/dist/overlay.js +162 -0
- package/dist/overlay.js.map +1 -0
- package/dist/public/THIRD-PARTY.txt +1892 -688
- package/dist/public/assets/__vite-browser-external-DGgK3jMU.js +1 -0
- package/dist/public/assets/abnfDiagram-WEYOIA3C-B3qq7PKv.js +1 -0
- package/dist/public/assets/architecture-WOLXFQ4H-Bzau2LI0.js +1 -0
- package/dist/public/assets/architectureDiagram-ZHVYKT53-Bg0cUwdb.js +36 -0
- package/dist/public/assets/blockDiagram-RJAE7QA3-0RJB-ra-.js +140 -0
- package/dist/public/assets/c4Diagram-XDPPPE54-BzoQcLvf.js +38 -0
- package/dist/public/assets/channel-6BNdw4Ax.js +1 -0
- package/dist/public/assets/{chunk-MOJQB5TN-D1shKbMs.js → chunk-2E7WHVMD-6aqPk-Hk.js} +4 -4
- package/dist/public/assets/chunk-4EMNKR2T-vovNSAaE.js +1 -0
- package/dist/public/assets/chunk-55XCU76K-DXkKnt2y.js +1 -0
- package/dist/public/assets/chunk-7S6XSTFO-B9bfO0l3.js +2 -0
- package/dist/public/assets/chunk-AQDTSKZB-ilLy_cYP.js +72 -0
- package/dist/public/assets/chunk-DSNLSHJZ-DAudglXu.js +129 -0
- package/dist/public/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
- package/dist/public/assets/chunk-HAGFOTED-CSKFgs6b.js +62 -0
- package/dist/public/assets/chunk-HNE4Q36P-Cu5gPBVk.js +1 -0
- package/dist/public/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
- package/dist/public/assets/chunk-NGNAAXSQ-DI_UYJZ4.js +136 -0
- package/dist/public/assets/chunk-NQOKRVIF-Bpcvhq1n.js +213 -0
- package/dist/public/assets/chunk-UHW7PFBP-BDjvOaTH.js +1 -0
- package/dist/public/assets/chunk-VQ5W62QI-DHTcO93W.js +1 -0
- package/dist/public/assets/chunk-WQQL4CDK-H6nAhuck.js +10 -0
- package/dist/public/assets/chunk-XXDRQBXY-BUghdEVl.js +1 -0
- package/dist/public/assets/chunk-YZO67HFG-D13E0_Yh.js +1 -0
- package/dist/public/assets/chunk-ZAUX2LTX-Dp5y-2wt.js +1 -0
- package/dist/public/assets/chunk-ZCHMQSOR-RJjlln1D.js +2 -0
- package/dist/public/assets/classDiagram-v2-4MYWR3UA-CAqiFCSv.js +217 -0
- package/dist/public/assets/cose-bilkent-JH36ORCC-C_VOHzoP.js +1 -0
- package/dist/public/assets/cynefin-EF2NZ3EQ-Dyk4ZPjK.js +1 -0
- package/dist/public/assets/cynefinDiagram-WF24UDRP-b_Ia8gQX.js +62 -0
- package/dist/public/assets/cytoscape.esm-GRKmfDkD.js +321 -0
- package/dist/public/assets/dagre-NK4GIZVX-CH1K1yF8.js +4 -0
- package/dist/public/assets/diagram-CBK3MWTC-OaKd5avy.js +24 -0
- package/dist/public/assets/diagram-I5XIIV2D-Cmu5z1ad.js +24 -0
- package/dist/public/assets/diagram-ODIL2UCW-Cz1kkDDX.js +30 -0
- package/dist/public/assets/diagram-PFBEJUXE-faMkmqUW.js +3 -0
- package/dist/public/assets/diagram-RJA3I4VV-nycvfte-.js +41 -0
- package/dist/public/assets/diagram-TYUNFSNR-CjEv5QCm.js +200 -0
- package/dist/public/assets/dist-DGs_yUrP.js +1 -0
- package/dist/public/assets/ebnfDiagram-V4P3TTPT-DN-IIxCy.js +1 -0
- package/dist/public/assets/elk-QONTBCTQ-Bsam88GP.js +27 -0
- package/dist/public/assets/erDiagram-KYQIGQAA-DEU_qqNK.js +99 -0
- package/dist/public/assets/eventmodeling-K75KTNOO-Bl6NCM9E.js +1 -0
- package/dist/public/assets/flowDiagram-IUGLLWBU-Cl4qZ-36.js +1 -0
- package/dist/public/assets/ganttDiagram-R7GPNTJY-BmMd4aGi.js +292 -0
- package/dist/public/assets/gitGraph-VSP46ZUC-Q0H2PWek.js +1 -0
- package/dist/public/assets/gitGraphDiagram-PDYL7XHY-BlCTBYTj.js +106 -0
- package/dist/public/assets/index-CuBJ0hof.css +1 -0
- package/dist/public/assets/index-D6WqGtsG.js +27876 -0
- package/dist/public/assets/index-D701BZPh.js +2219 -0
- package/dist/public/assets/info-OHQRW6UA-D0TMPJxW.js +1 -0
- package/dist/public/assets/infoDiagram-MVDRKAX5-CljbtJXu.js +2 -0
- package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-CiLpASIW.js → ishikawaDiagram-HPEHV2GE-_Y3Fr0hu.js} +6 -6
- package/dist/public/assets/journeyDiagram-BOSHW7O7-Bo55jJ4m.js +139 -0
- package/dist/public/assets/kanban-definition-FNSA4HC5-Cd-10MtF.js +89 -0
- package/dist/public/assets/katex-MEuSR36T.js +257 -0
- package/dist/public/assets/line-BDmh4sWC.js +1 -0
- package/dist/public/assets/linear-Dt7xjMrI.js +1 -0
- package/dist/public/assets/mermaid-parser.core-BJ1yyzvV.js +7 -0
- package/dist/public/assets/mindmap-definition-6OY57UG3-CRgumPuN.js +98 -0
- package/dist/public/assets/packet-JDAUHWVQ-DsTMT3Kw.js +1 -0
- package/dist/public/assets/path-B_0haWDX.js +1 -0
- package/dist/public/assets/pegDiagram-ECIUJNBX-BEGI5k3m.js +1 -0
- package/dist/public/assets/pie-XZMESJXO-COyqzA3N.js +1 -0
- package/dist/public/assets/pieDiagram-GNMPY74T-CrLJhZJJ.js +39 -0
- package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-B3czMbdS.js → quadrantDiagram-D57K4MC3-Fl7HMHxK.js} +6 -6
- package/dist/public/assets/radar-ABXABTNO-DeXHKowk.js +1 -0
- package/dist/public/assets/railroad-I3PHUGI6-CUjKUdPz.js +1 -0
- package/dist/public/assets/railroad-abnf-LNEFI6M7-B1aEgHE6.js +1 -0
- package/dist/public/assets/railroad-ebnf-DWYD2UWJ-DmmI3Voz.js +1 -0
- package/dist/public/assets/railroad-peg-JR7BVNR7-BHzi9m7r.js +1 -0
- package/dist/public/assets/railroadDiagram-Y72NRBL7-D1oeE5fy.js +1 -0
- package/dist/public/assets/requirementDiagram-EQYSW5RA-BJDKK1aS.js +84 -0
- package/dist/public/assets/rolldown-runtime-BCiCTKAo.js +1 -0
- package/dist/public/assets/{rough.esm-By172zw-.js → rough.esm-Dy-Kn_BL.js} +1 -1
- package/dist/public/assets/sankeyDiagram-SY24JHO5-C4g0OwZ9.js +40 -0
- package/dist/public/assets/sequenceDiagram-BLEHNHQU-CEvy4P-b.js +169 -0
- package/dist/public/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/dist/public/assets/src-MPsEqXxq.js +1 -0
- package/dist/public/assets/stateDiagram-v2-A6IESKWZ-BFhvw4Gl.js +291 -0
- package/dist/public/assets/swimlanes-B3ENRKFQ-BIl_Q-FM.js +1 -0
- package/dist/public/assets/swimlanesDiagram-AYQRV4AK-rvDbKEHQ.js +8 -0
- package/dist/public/assets/timeline-definition-JXYKGLGB-qAoWTH4N.js +120 -0
- package/dist/public/assets/treeView-D4JQ5SDB-vq16JKkJ.js +1 -0
- package/dist/public/assets/treemap-SAJKECNS-C0IZTaDk.js +1 -0
- package/dist/public/assets/usecaseDiagram-WPOLBNNX-Dq8iz49r.js +328 -0
- package/dist/public/assets/vennDiagram-Q3Y3IDCW-Br4JmRjM.js +34 -0
- package/dist/public/assets/wardley-7MLQ67FV-CEPlAQ79.js +1 -0
- package/dist/public/assets/wardleyDiagram-IVAIDKWA-DURB7Ue6.js +78 -0
- package/dist/public/assets/xychartDiagram-4URNHDU4-BiZywfhy.js +7 -0
- package/dist/public/index.html +27 -28
- package/dist/public/sbom.cdx.json +1 -0
- package/dist/types.d.ts +0 -12
- package/dist/types.js +2 -12
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +12 -5
- package/dist/utils.js +18 -43
- package/dist/utils.js.map +1 -1
- package/package.json +14 -14
- package/src/app.ts +51 -49
- package/src/auth/index.ts +3 -13
- package/src/auth/keycloak.ts +10 -15
- package/src/auth/mock.ts +144 -48
- package/src/auth/types.ts +10 -13
- package/src/common/errors.ts +45 -0
- package/src/common/validationSchemas.ts +3 -12
- package/src/domain/auth/index.ts +2 -12
- package/src/domain/calculations/index.ts +4 -14
- package/src/domain/calculations/schema.ts +2 -12
- package/src/domain/calculations/service.ts +8 -21
- package/src/domain/cardTypes/index.ts +10 -20
- package/src/domain/cardTypes/schema.ts +3 -12
- package/src/domain/cardTypes/service.ts +22 -29
- package/src/domain/cards/index.ts +158 -218
- package/src/domain/cards/lib.ts +9 -173
- package/src/domain/cards/mermaid.ts +25 -0
- package/src/domain/cards/schema.ts +19 -15
- package/src/domain/cards/service.ts +166 -134
- package/src/domain/connectors/index.ts +5 -14
- package/src/domain/connectors/service.ts +5 -20
- package/src/domain/events/events-by-project.ts +59 -0
- package/src/domain/events/index.ts +102 -0
- package/src/domain/events/lifetime.ts +17 -0
- package/src/domain/events/project-events.ts +266 -0
- package/src/domain/events/schema.ts +11 -0
- package/src/domain/fieldTypes/index.ts +6 -16
- package/src/domain/fieldTypes/schema.ts +3 -12
- package/src/domain/fieldTypes/service.ts +9 -21
- package/src/domain/graphModels/index.ts +4 -14
- package/src/domain/graphModels/schema.ts +3 -12
- package/src/domain/graphModels/service.ts +5 -18
- package/src/domain/graphViews/index.ts +4 -14
- package/src/domain/graphViews/schema.ts +3 -0
- package/src/domain/graphViews/service.ts +5 -18
- package/src/domain/labels/index.ts +4 -14
- package/src/domain/labels/service.ts +6 -16
- package/src/domain/linkTypes/index.ts +6 -16
- package/src/domain/linkTypes/schema.ts +2 -12
- package/src/domain/linkTypes/service.ts +8 -21
- package/src/domain/logicPrograms/index.ts +5 -17
- package/src/domain/logicPrograms/service.ts +7 -16
- package/src/domain/mcp/index.ts +33 -24
- package/src/domain/project/index.ts +59 -37
- package/src/domain/project/schema.ts +41 -18
- package/src/domain/project/service.ts +81 -71
- package/src/domain/projects/index.ts +38 -50
- package/src/domain/projects/schema.ts +3 -12
- package/src/domain/projects/service.ts +18 -88
- package/src/domain/reports/index.ts +4 -14
- package/src/domain/reports/schema.ts +2 -12
- package/src/domain/reports/service.ts +5 -18
- package/src/domain/resources/index.ts +102 -30
- package/src/domain/resources/schema.ts +15 -2
- package/src/domain/resources/service.ts +98 -81
- package/src/domain/skills/index.ts +51 -0
- package/src/domain/skills/schema.ts +9 -0
- package/src/domain/skills/service.ts +8 -0
- package/src/domain/templates/index.ts +8 -18
- package/src/domain/templates/schema.ts +2 -12
- package/src/domain/templates/service.ts +9 -22
- package/src/domain/tree/index.ts +4 -14
- package/src/domain/tree/service.ts +10 -21
- package/src/domain/workflows/index.ts +4 -14
- package/src/domain/workflows/schema.ts +2 -12
- package/src/domain/workflows/service.ts +5 -18
- package/src/export.ts +82 -73
- package/src/index.ts +30 -46
- package/src/main.ts +45 -37
- package/src/middleware/auth.ts +25 -16
- package/src/middleware/commandManager.ts +37 -49
- package/src/middleware/tree.ts +3 -0
- package/src/middleware/zvalidator.ts +3 -0
- package/src/overlay.ts +185 -0
- package/src/types.ts +2 -12
- package/src/utils.ts +26 -46
- package/dist/domain/cards/presence.d.ts +0 -50
- package/dist/domain/cards/presence.js +0 -93
- package/dist/domain/cards/presence.js.map +0 -1
- package/dist/project-registry.d.ts +0 -57
- package/dist/project-registry.js +0 -93
- package/dist/project-registry.js.map +0 -1
- package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +0 -1
- package/dist/public/assets/arc-DrR4k_H-.js +0 -1
- package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +0 -1
- package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +0 -36
- package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +0 -132
- package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +0 -10
- package/dist/public/assets/channel-D5fnImJy.js +0 -1
- package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +0 -1
- package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +0 -10
- package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +0 -1
- package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +0 -1
- package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +0 -1
- package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +0 -2
- package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
- package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +0 -1
- package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +0 -1
- package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +0 -1
- package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +0 -1
- package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +0 -1
- package/dist/public/assets/chunk-EX3LRPZG-Db0XYyxy.js +0 -231
- package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +0 -2
- package/dist/public/assets/chunk-HOUHSVGY-L35GPy9G.js +0 -1
- package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +0 -2
- package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +0 -2
- package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +0 -161
- package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +0 -1
- package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +0 -1
- package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +0 -1
- package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +0 -156
- package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +0 -70
- package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +0 -1
- package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +0 -1
- package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +0 -1
- package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +0 -2
- package/dist/public/assets/chunk-V7JOEXUC-71b0ABpv.js +0 -206
- package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +0 -1
- package/dist/public/assets/chunk-VR4S4FIN-tUhbELKr.js +0 -1
- package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +0 -127
- package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +0 -1
- package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +0 -1
- package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +0 -62
- package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +0 -32
- package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +0 -1
- package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +0 -1
- package/dist/public/assets/colors-Cg5Vh3br.js +0 -1
- package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +0 -1
- package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +0 -1
- package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +0 -62
- package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +0 -321
- package/dist/public/assets/dagre-Buvkdvvj.js +0 -1
- package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +0 -4
- package/dist/public/assets/diagram-FQU43EPY-DS-ryuRg.js +0 -3
- package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +0 -24
- package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +0 -24
- package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +0 -30
- package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +0 -41
- package/dist/public/assets/dist-BzwexiH1.js +0 -1
- package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +0 -1
- package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +0 -85
- package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +0 -1
- package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +0 -1
- package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +0 -292
- package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +0 -1
- package/dist/public/assets/gitGraphDiagram-IHSO6WYX-CksvJvsQ.js +0 -106
- package/dist/public/assets/index-COSSLZqt.css +0 -1
- package/dist/public/assets/index-Y8Ckwau7.js +0 -447
- package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +0 -1
- package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +0 -2
- package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +0 -139
- package/dist/public/assets/kanban-definition-HUTT4EX6-DYP_x6zD.js +0 -89
- package/dist/public/assets/katex-DolUETbr.js +0 -257
- package/dist/public/assets/line-C8Sfsgt8.js +0 -1
- package/dist/public/assets/linear-BWTvbP1l.js +0 -1
- package/dist/public/assets/map-BaFkSB1l.js +0 -1
- package/dist/public/assets/mermaid-parser.core--8614tkK.js +0 -4
- package/dist/public/assets/mindmap-definition-LN4V7U3C-3IAd4gp3.js +0 -96
- package/dist/public/assets/ordinal-BdBDtYTt.js +0 -1
- package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +0 -1
- package/dist/public/assets/path-HTXttWil.js +0 -1
- package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +0 -1
- package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +0 -1
- package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +0 -39
- package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +0 -1
- package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +0 -1
- package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +0 -1
- package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +0 -1
- package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +0 -1
- package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +0 -1
- package/dist/public/assets/range-EplFIxc7.js +0 -1
- package/dist/public/assets/requirementDiagram-TGXJPOKE-CmvJWy_S.js +0 -84
- package/dist/public/assets/sankeyDiagram-HTMAVEWB-tAeOzMTn.js +0 -40
- package/dist/public/assets/sequenceDiagram-DBY2YBRQ-r0pwijM4.js +0 -162
- package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +0 -1
- package/dist/public/assets/src-DOh7_en_.js +0 -1
- package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +0 -1
- package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +0 -1
- package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +0 -2
- package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +0 -8
- package/dist/public/assets/time-BM2d9MsQ.js +0 -1
- package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +0 -120
- package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +0 -1
- package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +0 -1
- package/dist/public/assets/treemap-BfjIY-m6.js +0 -1
- package/dist/public/assets/vennDiagram-L72KCM5P-ti2qNcvo.js +0 -34
- package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +0 -1
- package/dist/public/assets/wardleyDiagram-EHGQE667-C8lblm8x.js +0 -78
- package/dist/public/assets/xychartDiagram-FW5EYKEG-US-_k5eu.js +0 -7
- package/src/domain/cards/presence.ts +0 -124
- package/src/project-registry.ts +0 -130
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
|
35
|
+
const ws = c.get('ws');
|
|
45
36
|
|
|
46
37
|
try {
|
|
47
|
-
const tree = await resourceService.buildResourceTree(
|
|
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
|
|
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(
|
|
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
|
|
120
|
+
const ws = c.get('ws');
|
|
130
121
|
const resourceParams = c.req.valid('param');
|
|
131
|
-
await resourceService.deleteResource(
|
|
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
|
|
189
|
-
return resourceService.listWorkflowGraphParams(
|
|
179
|
+
const ws = c.get('ws');
|
|
180
|
+
return resourceService.listWorkflowGraphParams(ws);
|
|
190
181
|
}),
|
|
191
|
-
zValidator('param',
|
|
182
|
+
zValidator('param', prefixIdentifierParamsSchema),
|
|
192
183
|
zValidator('query', workflowGraphQuerySchema),
|
|
193
184
|
async (c) => {
|
|
194
|
-
const
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
|
11
|
+
export const prefixIdentifierParamsSchema = z.object({
|
|
9
12
|
prefix: z.string(),
|
|
10
13
|
identifier: identifierSchema,
|
|
11
14
|
});
|
|
12
15
|
|
|
13
|
-
export type
|
|
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
|
-
|
|
3
|
-
|
|
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
|
-
|
|
20
|
-
} from '@cyberismo/data-handler/interfaces/project-interfaces';
|
|
9
|
+
} from '@cyberismo/model';
|
|
21
10
|
import {
|
|
22
|
-
type
|
|
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 {
|
|
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(
|
|
39
|
+
async function getModules(ws: Workspace) {
|
|
44
40
|
try {
|
|
45
|
-
const modules = await
|
|
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
|
|
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(
|
|
80
|
-
return
|
|
81
|
-
const project = await
|
|
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(
|
|
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
|
-
|
|
111
|
+
ws,
|
|
116
112
|
project.prefix,
|
|
117
113
|
));
|
|
118
114
|
} else {
|
|
119
115
|
({ rootResources, moduleResources } = await groupResourcesByPrefix(
|
|
120
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
302
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
387
|
+
ws: Workspace,
|
|
407
388
|
resourceType: ResourceFolderType,
|
|
408
389
|
projectPrefix: string,
|
|
409
390
|
) {
|
|
410
|
-
const resourceNames = await
|
|
391
|
+
const resourceNames = await ws.resources.list(resourceType);
|
|
411
392
|
const resources = await Promise.all(
|
|
412
393
|
resourceNames.map((name: string) =>
|
|
413
|
-
createResourceNode(
|
|
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
|
|
418
|
+
* @param ws Command manager.
|
|
438
419
|
* @param resource Resource to delete.
|
|
439
420
|
*/
|
|
440
|
-
export async function deleteResource(
|
|
441
|
-
|
|
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
|
|
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
|
-
|
|
435
|
+
ws: Workspace,
|
|
461
436
|
resource: ValidateResourceParams,
|
|
462
437
|
) {
|
|
463
|
-
const errors = await
|
|
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
|
|
447
|
+
* @param ws Command manager.
|
|
475
448
|
* @returns One `{ prefix, identifier }` entry per workflow resource.
|
|
476
449
|
*/
|
|
477
450
|
export async function listWorkflowGraphParams(
|
|
478
|
-
|
|
451
|
+
ws: Workspace,
|
|
479
452
|
): Promise<{ prefix: string; identifier: string }[]> {
|
|
480
|
-
const workflows = await
|
|
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
|
-
|
|
472
|
+
ws: Workspace,
|
|
500
473
|
workflowName: string,
|
|
501
474
|
cardKey?: string,
|
|
502
475
|
): Promise<string> {
|
|
503
|
-
return
|
|
476
|
+
return ws.consistent(async () => {
|
|
504
477
|
try {
|
|
505
|
-
await
|
|
478
|
+
await ws.resources.show(workflowName, 'workflows');
|
|
506
479
|
} catch (error) {
|
|
507
|
-
if (error instanceof
|
|
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
|
|
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
|
|
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
|
-
|
|
555
|
+
ws: Workspace,
|
|
539
556
|
resource: ResourceParams,
|
|
540
557
|
body: UpdateOperationBody,
|
|
541
558
|
) {
|
|
542
559
|
const { updateKey, operation } = body;
|
|
543
|
-
await
|
|
560
|
+
await ws.atomic(
|
|
544
561
|
() =>
|
|
545
|
-
|
|
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
|
+
}
|