@saluzi/saluzi-edu 0.7.4 → 0.7.6

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 (165) hide show
  1. package/dist/cli.js +93 -61
  2. package/dist/rcs-schema.sql +42 -0
  3. package/dist/rcs-web/assets/{AdminPanel-B9YWaqlO.js → AdminPanel-D0i_28O2.js} +1 -1
  4. package/dist/rcs-web/assets/{ArtifactView-B8lAeS5B.js → ArtifactView-Dd6d3O3z.js} +1 -1
  5. package/{packages/remote-control-server/web/dist/assets/ArtifactsGallery-CNd9-Awp.js → dist/rcs-web/assets/ArtifactsGallery-BTVS7sar.js} +1 -1
  6. package/{packages/remote-control-server/web/dist/assets/Claim-Dq08pl4W.js → dist/rcs-web/assets/Claim-CkuDG_ay.js} +1 -1
  7. package/dist/rcs-web/assets/{Dashboard-JZcrtByh.js → Dashboard-BBZHnmut.js} +2 -2
  8. package/dist/rcs-web/assets/{Join-DgvRnpyb.js → Join-DbBj-5mj.js} +1 -1
  9. package/{packages/remote-control-server/web/dist/assets/Login-CZbz6Wms.js → dist/rcs-web/assets/Login-Csvt3wvz.js} +1 -1
  10. package/dist/rcs-web/assets/MemoriesGallery-C5cT73hA.js +1 -0
  11. package/dist/rcs-web/assets/{Register-DD7uiwEj.js → Register-Cmp7ogoN.js} +1 -1
  12. package/dist/rcs-web/assets/{RegisterEmpty-BrBfeQXp.js → RegisterEmpty-BoIy42g_.js} +2 -2
  13. package/dist/rcs-web/assets/SessionDetail-CocGah-8.js +83 -0
  14. package/dist/rcs-web/assets/{SessionVisibilityBadge-kSo9esvT.js → SessionVisibilityBadge-C873QvnC.js} +2 -2
  15. package/dist/rcs-web/assets/{Setup-Ca30VUSF.js → Setup-DOU0qTNX.js} +1 -1
  16. package/dist/rcs-web/assets/{ShareLanding-C_vlxFAM.js → ShareLanding-DMR9eh0F.js} +1 -1
  17. package/{packages/remote-control-server/web/dist/assets/TeamDetail-8T_kKUcX.js → dist/rcs-web/assets/TeamDetail-MPfqesJf.js} +2 -2
  18. package/dist/rcs-web/assets/{TeamList-DRXGQCJi.js → TeamList-CgWVmdPU.js} +1 -1
  19. package/dist/rcs-web/assets/{TeamSettings-Byhon5C1.js → TeamSettings-V3L0H8Nb.js} +1 -1
  20. package/dist/rcs-web/assets/{UserSearchInput-wixyd_8w.js → UserSearchInput-xqtDX6Bz.js} +2 -2
  21. package/dist/rcs-web/assets/{UserSettings-Ds2retFk.js → UserSettings-Cfqs_5af.js} +1 -1
  22. package/dist/rcs-web/assets/{arc-CThS8KNL.js → arc-Bl97za3P.js} +1 -1
  23. package/dist/rcs-web/assets/{architectureDiagram-3BPJPVTR-Bko99SuX.js → architectureDiagram-3BPJPVTR-B8IQfxi6.js} +1 -1
  24. package/{packages/remote-control-server/web/dist/assets/blockDiagram-GPEHLZMM-CqCAgp0i.js → dist/rcs-web/assets/blockDiagram-GPEHLZMM-DNfBHM8J.js} +1 -1
  25. package/{packages/remote-control-server/web/dist/assets/c4Diagram-AAUBKEIU-C1pGDG-L.js → dist/rcs-web/assets/c4Diagram-AAUBKEIU-CO4HDUF2.js} +1 -1
  26. package/dist/rcs-web/assets/channel-DcTKV8fL.js +1 -0
  27. package/dist/rcs-web/assets/{chunk-2J33WTMH-Bz0kJwEY.js → chunk-2J33WTMH-4CBnqzb3.js} +1 -1
  28. package/dist/rcs-web/assets/{chunk-4BX2VUAB-DYnlidI7.js → chunk-4BX2VUAB-ClbIGQlY.js} +1 -1
  29. package/dist/rcs-web/assets/{chunk-55IACEB6-cMV4HRvm.js → chunk-55IACEB6-BnrTfmFM.js} +1 -1
  30. package/{packages/remote-control-server/web/dist/assets/chunk-727SXJPM-Bgz9JRYO.js → dist/rcs-web/assets/chunk-727SXJPM-C17NZOQL.js} +1 -1
  31. package/{packages/remote-control-server/web/dist/assets/chunk-AQP2D5EJ-DIFGJlEF.js → dist/rcs-web/assets/chunk-AQP2D5EJ-CljirtnS.js} +1 -1
  32. package/dist/rcs-web/assets/{chunk-FMBD7UC4-BUC7O7T0.js → chunk-FMBD7UC4-Bb20ipZI.js} +1 -1
  33. package/dist/rcs-web/assets/{chunk-ND2GUHAM-kGqgVnBZ.js → chunk-ND2GUHAM-L3q9_xAn.js} +1 -1
  34. package/dist/rcs-web/assets/{chunk-QZHKN3VN-B01O0qXh.js → chunk-QZHKN3VN-FyYNxzak.js} +1 -1
  35. package/dist/rcs-web/assets/classDiagram-4FO5ZUOK-5DsQRSDS.js +1 -0
  36. package/dist/rcs-web/assets/classDiagram-v2-Q7XG4LA2-5DsQRSDS.js +1 -0
  37. package/dist/rcs-web/assets/{code-block-IT6T5CEO-CscK0pCh.js → code-block-IT6T5CEO-CQVTEZwg.js} +1 -1
  38. package/dist/rcs-web/assets/{copy-CvmA5P_Q.js → copy-CFZBXuu9.js} +1 -1
  39. package/dist/rcs-web/assets/{cose-bilkent-S5V4N54A-BsBsVccW.js → cose-bilkent-S5V4N54A-Cs2MVxlS.js} +1 -1
  40. package/{packages/remote-control-server/web/dist/assets/dagre-BM42HDAG-Bn4B33S-.js → dist/rcs-web/assets/dagre-BM42HDAG-CWZcIIf5.js} +1 -1
  41. package/dist/rcs-web/assets/{diagram-2AECGRRQ-DAuAIPR6.js → diagram-2AECGRRQ-DpumSk2d.js} +1 -1
  42. package/dist/rcs-web/assets/{diagram-5GNKFQAL-w3k2b4gC.js → diagram-5GNKFQAL-DcF2qwdh.js} +1 -1
  43. package/{packages/remote-control-server/web/dist/assets/diagram-KO2AKTUF-CMLav2KT.js → dist/rcs-web/assets/diagram-KO2AKTUF-BGnqGSPz.js} +1 -1
  44. package/dist/rcs-web/assets/{diagram-LMA3HP47-D14sXWdh.js → diagram-LMA3HP47-k-UxYOZ9.js} +1 -1
  45. package/{packages/remote-control-server/web/dist/assets/diagram-OG6HWLK6-BexFwBQa.js → dist/rcs-web/assets/diagram-OG6HWLK6-BMPzmD6S.js} +1 -1
  46. package/dist/rcs-web/assets/{dialog-B4hKrd7w.js → dialog-DKk230y5.js} +1 -1
  47. package/dist/rcs-web/assets/{erDiagram-TEJ5UH35-BA8ANmoV.js → erDiagram-TEJ5UH35-BvmA6W9Z.js} +1 -1
  48. package/{packages/remote-control-server/web/dist/assets/flowDiagram-I6XJVG4X-dTQIvKsj.js → dist/rcs-web/assets/flowDiagram-I6XJVG4X-ptAnksiF.js} +1 -1
  49. package/dist/rcs-web/assets/{ganttDiagram-6RSMTGT7-8SDHYxXc.js → ganttDiagram-6RSMTGT7-Bhgrzcs3.js} +1 -1
  50. package/dist/rcs-web/assets/{gitGraphDiagram-PVQCEYII-Bu7LyvTG.js → gitGraphDiagram-PVQCEYII-B8-vcbF-.js} +1 -1
  51. package/dist/rcs-web/assets/{infoDiagram-5YYISTIA-BuQuDvuX.js → infoDiagram-5YYISTIA-DaW0unc2.js} +1 -1
  52. package/dist/rcs-web/assets/{ishikawaDiagram-YF4QCWOH-QjafGk8V.js → ishikawaDiagram-YF4QCWOH-4oYGuWP6.js} +1 -1
  53. package/{packages/remote-control-server/web/dist/assets/journeyDiagram-JHISSGLW-_FOXjXDF.js → dist/rcs-web/assets/journeyDiagram-JHISSGLW-B9YXpw0W.js} +1 -1
  54. package/dist/rcs-web/assets/{kanban-definition-UN3LZRKU-CbqJqyY6.js → kanban-definition-UN3LZRKU-Cglus7wI.js} +1 -1
  55. package/dist/rcs-web/assets/{linear-H6F41eb2.js → linear-CRTJd3_G.js} +1 -1
  56. package/dist/rcs-web/assets/{main-BopVSHhX.js → main-BKbA2ddo.js} +65 -65
  57. package/dist/rcs-web/assets/main-CP31AzxJ.css +1 -0
  58. package/{packages/remote-control-server/web/dist/assets/mermaid-VLURNSYL-5FH_DIq9.js → dist/rcs-web/assets/mermaid-VLURNSYL-D0JeVL0B.js} +4 -4
  59. package/dist/rcs-web/assets/{mermaid.core-C004NitB.js → mermaid.core-CobUk_K5.js} +5 -5
  60. package/dist/rcs-web/assets/{mindmap-definition-RKZ34NQL-utqEJ2a8.js → mindmap-definition-RKZ34NQL-B1s-et_p.js} +1 -1
  61. package/dist/rcs-web/assets/{notifications-DOBs9HVf.js → notifications-BrgRJuzQ.js} +1 -1
  62. package/dist/rcs-web/assets/{pieDiagram-4H26LBE5-OlbTwDZQ.js → pieDiagram-4H26LBE5-PcBs9RT_.js} +1 -1
  63. package/dist/rcs-web/assets/{quadrantDiagram-W4KKPZXB-BOe2DhrU.js → quadrantDiagram-W4KKPZXB-B2GxITjv.js} +1 -1
  64. package/dist/rcs-web/assets/{refresh-cw-BSwpDl-7.js → refresh-cw-BwmFF3kw.js} +1 -1
  65. package/{packages/remote-control-server/web/dist/assets/requirementDiagram-4Y6WPE33-s6V1yWUG.js → dist/rcs-web/assets/requirementDiagram-4Y6WPE33-BfyZiasB.js} +1 -1
  66. package/{packages/remote-control-server/web/dist/assets/sankeyDiagram-5OEKKPKP-CdJD78Mx.js → dist/rcs-web/assets/sankeyDiagram-5OEKKPKP-Br7tRtmq.js} +1 -1
  67. package/{packages/remote-control-server/web/dist/assets/sequenceDiagram-3UESZ5HK-DvGV6Dhl.js → dist/rcs-web/assets/sequenceDiagram-3UESZ5HK-CN1NSfHS.js} +1 -1
  68. package/{packages/remote-control-server/web/dist/assets/stateDiagram-AJRCARHV-Bj-_Ulcn.js → dist/rcs-web/assets/stateDiagram-AJRCARHV-C4S8hKUx.js} +1 -1
  69. package/dist/rcs-web/assets/{stateDiagram-v2-BHNVJYJU-BLGWynk-.js → stateDiagram-v2-BHNVJYJU-CbEMz-jf.js} +1 -1
  70. package/dist/rcs-web/assets/{timeline-definition-PNZ67QCA-B6VAH6Ka.js → timeline-definition-PNZ67QCA-mTiK0HwD.js} +1 -1
  71. package/dist/rcs-web/assets/{vennDiagram-CIIHVFJN-DUwaLI6R.js → vennDiagram-CIIHVFJN-DCe95URb.js} +1 -1
  72. package/dist/rcs-web/assets/{wardleyDiagram-YWT4CUSO-CBetJore.js → wardleyDiagram-YWT4CUSO-Cct1r0Ax.js} +1 -1
  73. package/dist/rcs-web/assets/{workerType-BF4aY_R_.js → workerType-DW9l12WG.js} +1 -1
  74. package/dist/rcs-web/assets/{xychartDiagram-2RQKCTM6-BBnx6V66.js → xychartDiagram-2RQKCTM6-CVc0eQYa.js} +1 -1
  75. package/dist/rcs-web/index.html +2 -2
  76. package/package.json +1 -1
  77. package/packages/remote-control-server/src/__tests__/memories.test.ts +654 -0
  78. package/packages/remote-control-server/src/db/rcs-schema.sql +42 -0
  79. package/packages/remote-control-server/src/registerRoutes.ts +6 -0
  80. package/packages/remote-control-server/src/routes/v1/memories.ts +132 -0
  81. package/packages/remote-control-server/src/routes/web/memories.ts +321 -0
  82. package/packages/remote-control-server/src/services/memories.ts +747 -0
  83. package/packages/remote-control-server/web/dist/assets/{AdminPanel-B9YWaqlO.js → AdminPanel-D0i_28O2.js} +1 -1
  84. package/packages/remote-control-server/web/dist/assets/{ArtifactView-B8lAeS5B.js → ArtifactView-Dd6d3O3z.js} +1 -1
  85. package/{dist/rcs-web/assets/ArtifactsGallery-CNd9-Awp.js → packages/remote-control-server/web/dist/assets/ArtifactsGallery-BTVS7sar.js} +1 -1
  86. package/{dist/rcs-web/assets/Claim-Dq08pl4W.js → packages/remote-control-server/web/dist/assets/Claim-CkuDG_ay.js} +1 -1
  87. package/packages/remote-control-server/web/dist/assets/{Dashboard-JZcrtByh.js → Dashboard-BBZHnmut.js} +2 -2
  88. package/packages/remote-control-server/web/dist/assets/{Join-DgvRnpyb.js → Join-DbBj-5mj.js} +1 -1
  89. package/{dist/rcs-web/assets/Login-CZbz6Wms.js → packages/remote-control-server/web/dist/assets/Login-Csvt3wvz.js} +1 -1
  90. package/packages/remote-control-server/web/dist/assets/MemoriesGallery-C5cT73hA.js +1 -0
  91. package/packages/remote-control-server/web/dist/assets/{Register-DD7uiwEj.js → Register-Cmp7ogoN.js} +1 -1
  92. package/packages/remote-control-server/web/dist/assets/{RegisterEmpty-BrBfeQXp.js → RegisterEmpty-BoIy42g_.js} +2 -2
  93. package/packages/remote-control-server/web/dist/assets/SessionDetail-CocGah-8.js +83 -0
  94. package/packages/remote-control-server/web/dist/assets/{SessionVisibilityBadge-kSo9esvT.js → SessionVisibilityBadge-C873QvnC.js} +2 -2
  95. package/packages/remote-control-server/web/dist/assets/{Setup-Ca30VUSF.js → Setup-DOU0qTNX.js} +1 -1
  96. package/packages/remote-control-server/web/dist/assets/{ShareLanding-C_vlxFAM.js → ShareLanding-DMR9eh0F.js} +1 -1
  97. package/{dist/rcs-web/assets/TeamDetail-8T_kKUcX.js → packages/remote-control-server/web/dist/assets/TeamDetail-MPfqesJf.js} +2 -2
  98. package/packages/remote-control-server/web/dist/assets/{TeamList-DRXGQCJi.js → TeamList-CgWVmdPU.js} +1 -1
  99. package/packages/remote-control-server/web/dist/assets/{TeamSettings-Byhon5C1.js → TeamSettings-V3L0H8Nb.js} +1 -1
  100. package/packages/remote-control-server/web/dist/assets/{UserSearchInput-wixyd_8w.js → UserSearchInput-xqtDX6Bz.js} +2 -2
  101. package/packages/remote-control-server/web/dist/assets/{UserSettings-Ds2retFk.js → UserSettings-Cfqs_5af.js} +1 -1
  102. package/packages/remote-control-server/web/dist/assets/{arc-CThS8KNL.js → arc-Bl97za3P.js} +1 -1
  103. package/packages/remote-control-server/web/dist/assets/{architectureDiagram-3BPJPVTR-Bko99SuX.js → architectureDiagram-3BPJPVTR-B8IQfxi6.js} +1 -1
  104. package/{dist/rcs-web/assets/blockDiagram-GPEHLZMM-CqCAgp0i.js → packages/remote-control-server/web/dist/assets/blockDiagram-GPEHLZMM-DNfBHM8J.js} +1 -1
  105. package/{dist/rcs-web/assets/c4Diagram-AAUBKEIU-C1pGDG-L.js → packages/remote-control-server/web/dist/assets/c4Diagram-AAUBKEIU-CO4HDUF2.js} +1 -1
  106. package/packages/remote-control-server/web/dist/assets/channel-DcTKV8fL.js +1 -0
  107. package/packages/remote-control-server/web/dist/assets/{chunk-2J33WTMH-Bz0kJwEY.js → chunk-2J33WTMH-4CBnqzb3.js} +1 -1
  108. package/packages/remote-control-server/web/dist/assets/{chunk-4BX2VUAB-DYnlidI7.js → chunk-4BX2VUAB-ClbIGQlY.js} +1 -1
  109. package/packages/remote-control-server/web/dist/assets/{chunk-55IACEB6-cMV4HRvm.js → chunk-55IACEB6-BnrTfmFM.js} +1 -1
  110. package/{dist/rcs-web/assets/chunk-727SXJPM-Bgz9JRYO.js → packages/remote-control-server/web/dist/assets/chunk-727SXJPM-C17NZOQL.js} +1 -1
  111. package/{dist/rcs-web/assets/chunk-AQP2D5EJ-DIFGJlEF.js → packages/remote-control-server/web/dist/assets/chunk-AQP2D5EJ-CljirtnS.js} +1 -1
  112. package/packages/remote-control-server/web/dist/assets/{chunk-FMBD7UC4-BUC7O7T0.js → chunk-FMBD7UC4-Bb20ipZI.js} +1 -1
  113. package/packages/remote-control-server/web/dist/assets/{chunk-ND2GUHAM-kGqgVnBZ.js → chunk-ND2GUHAM-L3q9_xAn.js} +1 -1
  114. package/packages/remote-control-server/web/dist/assets/{chunk-QZHKN3VN-B01O0qXh.js → chunk-QZHKN3VN-FyYNxzak.js} +1 -1
  115. package/packages/remote-control-server/web/dist/assets/classDiagram-4FO5ZUOK-5DsQRSDS.js +1 -0
  116. package/packages/remote-control-server/web/dist/assets/classDiagram-v2-Q7XG4LA2-5DsQRSDS.js +1 -0
  117. package/packages/remote-control-server/web/dist/assets/{code-block-IT6T5CEO-CscK0pCh.js → code-block-IT6T5CEO-CQVTEZwg.js} +1 -1
  118. package/packages/remote-control-server/web/dist/assets/{copy-CvmA5P_Q.js → copy-CFZBXuu9.js} +1 -1
  119. package/packages/remote-control-server/web/dist/assets/{cose-bilkent-S5V4N54A-BsBsVccW.js → cose-bilkent-S5V4N54A-Cs2MVxlS.js} +1 -1
  120. package/{dist/rcs-web/assets/dagre-BM42HDAG-Bn4B33S-.js → packages/remote-control-server/web/dist/assets/dagre-BM42HDAG-CWZcIIf5.js} +1 -1
  121. package/packages/remote-control-server/web/dist/assets/{diagram-2AECGRRQ-DAuAIPR6.js → diagram-2AECGRRQ-DpumSk2d.js} +1 -1
  122. package/packages/remote-control-server/web/dist/assets/{diagram-5GNKFQAL-w3k2b4gC.js → diagram-5GNKFQAL-DcF2qwdh.js} +1 -1
  123. package/{dist/rcs-web/assets/diagram-KO2AKTUF-CMLav2KT.js → packages/remote-control-server/web/dist/assets/diagram-KO2AKTUF-BGnqGSPz.js} +1 -1
  124. package/packages/remote-control-server/web/dist/assets/{diagram-LMA3HP47-D14sXWdh.js → diagram-LMA3HP47-k-UxYOZ9.js} +1 -1
  125. package/{dist/rcs-web/assets/diagram-OG6HWLK6-BexFwBQa.js → packages/remote-control-server/web/dist/assets/diagram-OG6HWLK6-BMPzmD6S.js} +1 -1
  126. package/packages/remote-control-server/web/dist/assets/{dialog-B4hKrd7w.js → dialog-DKk230y5.js} +1 -1
  127. package/packages/remote-control-server/web/dist/assets/{erDiagram-TEJ5UH35-BA8ANmoV.js → erDiagram-TEJ5UH35-BvmA6W9Z.js} +1 -1
  128. package/{dist/rcs-web/assets/flowDiagram-I6XJVG4X-dTQIvKsj.js → packages/remote-control-server/web/dist/assets/flowDiagram-I6XJVG4X-ptAnksiF.js} +1 -1
  129. package/packages/remote-control-server/web/dist/assets/{ganttDiagram-6RSMTGT7-8SDHYxXc.js → ganttDiagram-6RSMTGT7-Bhgrzcs3.js} +1 -1
  130. package/packages/remote-control-server/web/dist/assets/{gitGraphDiagram-PVQCEYII-Bu7LyvTG.js → gitGraphDiagram-PVQCEYII-B8-vcbF-.js} +1 -1
  131. package/packages/remote-control-server/web/dist/assets/{infoDiagram-5YYISTIA-BuQuDvuX.js → infoDiagram-5YYISTIA-DaW0unc2.js} +1 -1
  132. package/packages/remote-control-server/web/dist/assets/{ishikawaDiagram-YF4QCWOH-QjafGk8V.js → ishikawaDiagram-YF4QCWOH-4oYGuWP6.js} +1 -1
  133. package/{dist/rcs-web/assets/journeyDiagram-JHISSGLW-_FOXjXDF.js → packages/remote-control-server/web/dist/assets/journeyDiagram-JHISSGLW-B9YXpw0W.js} +1 -1
  134. package/packages/remote-control-server/web/dist/assets/{kanban-definition-UN3LZRKU-CbqJqyY6.js → kanban-definition-UN3LZRKU-Cglus7wI.js} +1 -1
  135. package/packages/remote-control-server/web/dist/assets/{linear-H6F41eb2.js → linear-CRTJd3_G.js} +1 -1
  136. package/packages/remote-control-server/web/dist/assets/{main-BopVSHhX.js → main-BKbA2ddo.js} +65 -65
  137. package/packages/remote-control-server/web/dist/assets/main-CP31AzxJ.css +1 -0
  138. package/{dist/rcs-web/assets/mermaid-VLURNSYL-5FH_DIq9.js → packages/remote-control-server/web/dist/assets/mermaid-VLURNSYL-D0JeVL0B.js} +4 -4
  139. package/packages/remote-control-server/web/dist/assets/{mermaid.core-C004NitB.js → mermaid.core-CobUk_K5.js} +5 -5
  140. package/packages/remote-control-server/web/dist/assets/{mindmap-definition-RKZ34NQL-utqEJ2a8.js → mindmap-definition-RKZ34NQL-B1s-et_p.js} +1 -1
  141. package/packages/remote-control-server/web/dist/assets/{notifications-DOBs9HVf.js → notifications-BrgRJuzQ.js} +1 -1
  142. package/packages/remote-control-server/web/dist/assets/{pieDiagram-4H26LBE5-OlbTwDZQ.js → pieDiagram-4H26LBE5-PcBs9RT_.js} +1 -1
  143. package/packages/remote-control-server/web/dist/assets/{quadrantDiagram-W4KKPZXB-BOe2DhrU.js → quadrantDiagram-W4KKPZXB-B2GxITjv.js} +1 -1
  144. package/packages/remote-control-server/web/dist/assets/{refresh-cw-BSwpDl-7.js → refresh-cw-BwmFF3kw.js} +1 -1
  145. package/{dist/rcs-web/assets/requirementDiagram-4Y6WPE33-s6V1yWUG.js → packages/remote-control-server/web/dist/assets/requirementDiagram-4Y6WPE33-BfyZiasB.js} +1 -1
  146. package/{dist/rcs-web/assets/sankeyDiagram-5OEKKPKP-CdJD78Mx.js → packages/remote-control-server/web/dist/assets/sankeyDiagram-5OEKKPKP-Br7tRtmq.js} +1 -1
  147. package/{dist/rcs-web/assets/sequenceDiagram-3UESZ5HK-DvGV6Dhl.js → packages/remote-control-server/web/dist/assets/sequenceDiagram-3UESZ5HK-CN1NSfHS.js} +1 -1
  148. package/{dist/rcs-web/assets/stateDiagram-AJRCARHV-Bj-_Ulcn.js → packages/remote-control-server/web/dist/assets/stateDiagram-AJRCARHV-C4S8hKUx.js} +1 -1
  149. package/packages/remote-control-server/web/dist/assets/{stateDiagram-v2-BHNVJYJU-BLGWynk-.js → stateDiagram-v2-BHNVJYJU-CbEMz-jf.js} +1 -1
  150. package/packages/remote-control-server/web/dist/assets/{timeline-definition-PNZ67QCA-B6VAH6Ka.js → timeline-definition-PNZ67QCA-mTiK0HwD.js} +1 -1
  151. package/packages/remote-control-server/web/dist/assets/{vennDiagram-CIIHVFJN-DUwaLI6R.js → vennDiagram-CIIHVFJN-DCe95URb.js} +1 -1
  152. package/packages/remote-control-server/web/dist/assets/{wardleyDiagram-YWT4CUSO-CBetJore.js → wardleyDiagram-YWT4CUSO-Cct1r0Ax.js} +1 -1
  153. package/packages/remote-control-server/web/dist/assets/{workerType-BF4aY_R_.js → workerType-DW9l12WG.js} +1 -1
  154. package/packages/remote-control-server/web/dist/assets/{xychartDiagram-2RQKCTM6-BBnx6V66.js → xychartDiagram-2RQKCTM6-CVc0eQYa.js} +1 -1
  155. package/packages/remote-control-server/web/dist/index.html +2 -2
  156. package/dist/rcs-web/assets/SessionDetail-BbnQBjP1.js +0 -78
  157. package/dist/rcs-web/assets/channel-D6RbJTfV.js +0 -1
  158. package/dist/rcs-web/assets/classDiagram-4FO5ZUOK-BlCPk6aR.js +0 -1
  159. package/dist/rcs-web/assets/classDiagram-v2-Q7XG4LA2-BlCPk6aR.js +0 -1
  160. package/dist/rcs-web/assets/main-C0n90aVY.css +0 -1
  161. package/packages/remote-control-server/web/dist/assets/SessionDetail-BbnQBjP1.js +0 -78
  162. package/packages/remote-control-server/web/dist/assets/channel-D6RbJTfV.js +0 -1
  163. package/packages/remote-control-server/web/dist/assets/classDiagram-4FO5ZUOK-BlCPk6aR.js +0 -1
  164. package/packages/remote-control-server/web/dist/assets/classDiagram-v2-Q7XG4LA2-BlCPk6aR.js +0 -1
  165. package/packages/remote-control-server/web/dist/assets/main-C0n90aVY.css +0 -1
@@ -16,6 +16,7 @@ import { consumeWebLoginCode } from './services/web-login'
16
16
 
17
17
  // Routes
18
18
  import v1Artifacts from './routes/v1/artifacts'
19
+ import v1Memories from './routes/v1/memories'
19
20
  import v1Environments from './routes/v1/environments'
20
21
  import v1EnvironmentsWork from './routes/v1/environments.work'
21
22
  import v1Sessions from './routes/v1/sessions'
@@ -29,6 +30,7 @@ import webAuthRoutes from './routes/web/auth-routes'
29
30
  import webSessions from './routes/web/sessions'
30
31
  import webControl from './routes/web/control'
31
32
  import webEnvironments from './routes/web/environments'
33
+ import webMemories from './routes/web/memories'
32
34
  import webShares from './routes/web/shares'
33
35
  import webTeams from './routes/web/teams'
34
36
 
@@ -103,6 +105,9 @@ export function registerRoutes(
103
105
  // v1 Artifacts — CLI worker upload + public content read
104
106
  app.route('/v1', v1Artifacts)
105
107
 
108
+ // v1 Memories — CLI worker injection pack + write-back sync
109
+ app.route('/v1', v1Memories)
110
+
106
111
  // v1 Session routes
107
112
  app.route('/v1/sessions', v1Sessions)
108
113
 
@@ -128,6 +133,7 @@ export function registerRoutes(
128
133
  app.route('/web', webSessions)
129
134
  app.route('/web', webControl)
130
135
  app.route('/web', webEnvironments)
136
+ app.route('/web', webMemories)
131
137
 
132
138
  // ACP protocol routes — created via factory with upgradeWebSocket
133
139
  console.log('[RCS] ACP support enabled')
@@ -0,0 +1,132 @@
1
+ import { Hono } from 'hono'
2
+ import type { Context } from 'hono'
3
+ import { validateApiKey } from '../../auth/api-key'
4
+ import { verifyWorkerJwt } from '../../auth/jwt'
5
+ import { extractBearerToken } from '../../auth/middleware'
6
+ import { resolveExistingSessionId } from '../../services/session'
7
+ import {
8
+ MemoryError,
9
+ buildMemoryPack,
10
+ syncMemories,
11
+ type MemoryWriteBackEntry,
12
+ } from '../../services/memories'
13
+
14
+ const app = new Hono()
15
+
16
+ /**
17
+ * CLI/worker memory endpoints (API key or worker JWT auth — same credential
18
+ * surface as the v1 artifact upload route).
19
+ *
20
+ * - GET /v1/memories/pack?session_id= — the injection pack for a session:
21
+ * { files: { "<rel path>": "<file content>" } }. Empty pack for unknown
22
+ * sessions; the bridge treats an empty pack as "no memory override".
23
+ * - POST /v1/memories/sync — write-back from the bridge: { session_id,
24
+ * files: [{rel_path, content}] }. Identity is derived server-side from
25
+ * the session's owners; any owner/team fields in the body are ignored
26
+ * (anti-forgery). Entries land in the session owner's personal scope.
27
+ */
28
+
29
+ function authenticateWorker(c: Context): boolean {
30
+ const token = extractBearerToken(c)
31
+ if (!token) return false
32
+ if (validateApiKey(token)) return true
33
+ return verifyWorkerJwt(token) !== null
34
+ }
35
+
36
+ app.get('/memories/pack', async c => {
37
+ if (!authenticateWorker(c)) {
38
+ return c.json(
39
+ { error: { type: 'unauthorized', message: 'Invalid auth token' } },
40
+ 401,
41
+ )
42
+ }
43
+
44
+ const requested = c.req.query('session_id')
45
+ if (!requested) {
46
+ return c.json(
47
+ { error: { type: 'bad_request', message: 'session_id is required' } },
48
+ 400,
49
+ )
50
+ }
51
+ const sessionId = resolveExistingSessionId(requested)
52
+ if (!sessionId) {
53
+ // Unknown session → empty pack; the bridge proceeds without memory
54
+ // injection rather than failing the spawn.
55
+ return c.json({ files: {} }, 200)
56
+ }
57
+
58
+ return c.json(buildMemoryPack(sessionId), 200)
59
+ })
60
+
61
+ app.post('/memories/sync', async c => {
62
+ if (!authenticateWorker(c)) {
63
+ return c.json(
64
+ { error: { type: 'unauthorized', message: 'Invalid auth token' } },
65
+ 401,
66
+ )
67
+ }
68
+
69
+ let body: Record<string, unknown>
70
+ try {
71
+ body = await c.req.json()
72
+ } catch {
73
+ return c.json(
74
+ { error: { type: 'bad_request', message: 'Invalid JSON body' } },
75
+ 400,
76
+ )
77
+ }
78
+
79
+ const requestedSessionId =
80
+ typeof body.session_id === 'string' ? body.session_id : ''
81
+ if (!requestedSessionId) {
82
+ return c.json(
83
+ { error: { type: 'bad_request', message: 'session_id is required' } },
84
+ 400,
85
+ )
86
+ }
87
+ const sessionId = resolveExistingSessionId(requestedSessionId)
88
+ if (!sessionId) {
89
+ return c.json(
90
+ { error: { type: 'not_found', message: 'Unknown session' } },
91
+ 404,
92
+ )
93
+ }
94
+
95
+ const rawFiles = body.files
96
+ if (!Array.isArray(rawFiles)) {
97
+ return c.json(
98
+ { error: { type: 'bad_request', message: 'files must be an array' } },
99
+ 400,
100
+ )
101
+ }
102
+ const entries: MemoryWriteBackEntry[] = []
103
+ for (const item of rawFiles) {
104
+ if (
105
+ item &&
106
+ typeof item === 'object' &&
107
+ typeof (item as Record<string, unknown>).rel_path === 'string' &&
108
+ typeof (item as Record<string, unknown>).content === 'string'
109
+ ) {
110
+ entries.push({
111
+ rel_path: (item as Record<string, unknown>).rel_path as string,
112
+ content: (item as Record<string, unknown>).content as string,
113
+ })
114
+ }
115
+ }
116
+ if (entries.length === 0) {
117
+ return c.json({ created: 0, updated: 0, skipped: 0 }, 200)
118
+ }
119
+
120
+ try {
121
+ const result = syncMemories(sessionId, entries)
122
+ return c.json(result, 200)
123
+ } catch (err) {
124
+ if (err instanceof MemoryError) {
125
+ const status = err.code === 'no_owner' ? 409 : 400
126
+ return c.json({ error: { type: err.code, message: err.message } }, status)
127
+ }
128
+ throw err
129
+ }
130
+ })
131
+
132
+ export default app
@@ -0,0 +1,321 @@
1
+ import { Hono } from 'hono'
2
+ import { getDb } from '../../db/sqlite'
3
+ import { sessionAuth } from '../../auth/middleware'
4
+ import { SYSTEM_USER_ID } from '../../auth/constants'
5
+ import { isSessionVisibleToUser } from '../../services/session'
6
+ import {
7
+ MemoryError,
8
+ MEMORY_TYPES,
9
+ archiveMemory,
10
+ canManageMemory,
11
+ createMemory,
12
+ getMemoryRow,
13
+ isMemoryVisibleToUser,
14
+ listMemoriesForUser,
15
+ promoteMemoryToTeam,
16
+ updateMemory,
17
+ type MemoryType,
18
+ } from '../../services/memories'
19
+
20
+ const app = new Hono()
21
+
22
+ /**
23
+ * Web-UI memory routes (mounted under /web with CSRF protection).
24
+ *
25
+ * - GET /web/memories — memories visible to the caller
26
+ * (?team_id= / ?scope=personal /
27
+ * ?session_id= / ?type=)
28
+ * - POST /web/memories — create (personal for self, or team)
29
+ * - GET /web/memories/:id — metadata + content + can_manage
30
+ * - PATCH /web/memories/:id — edit (manage permission)
31
+ * - DELETE /web/memories/:id — soft delete (manage permission)
32
+ * - POST /web/memories/:id/promote — personal → team (owner-initiated)
33
+ */
34
+
35
+ function isTeamMember(
36
+ userId: string,
37
+ teamId: string,
38
+ db: ReturnType<typeof getDb>,
39
+ ): boolean {
40
+ const row = db
41
+ .query(
42
+ 'SELECT 1 FROM team_members WHERE team_id = $teamId AND user_id = $userId',
43
+ )
44
+ .get({ $teamId: teamId, $userId: userId })
45
+ return !!row
46
+ }
47
+
48
+ function forbidden(
49
+ c: { json: (body: unknown, status: number) => Response },
50
+ message: string,
51
+ ) {
52
+ return c.json({ error: { type: 'forbidden', message } }, 403)
53
+ }
54
+
55
+ app.get('/memories', sessionAuth, async c => {
56
+ const userId = c.get('userId') as string
57
+ const isAdmin = (c.get('isAdmin') as boolean) || userId === SYSTEM_USER_ID
58
+ const db = getDb()
59
+
60
+ const teamId = c.req.query('team_id')
61
+ const personalScope = c.req.query('scope') === 'personal'
62
+ const sessionId = c.req.query('session_id')
63
+ const type = c.req.query('type') as MemoryType | undefined
64
+
65
+ if (personalScope && teamId) {
66
+ return c.json(
67
+ {
68
+ error: {
69
+ type: 'bad_request',
70
+ message: 'scope=personal cannot be combined with team_id',
71
+ },
72
+ },
73
+ 400,
74
+ )
75
+ }
76
+ if (teamId && !isAdmin && !isTeamMember(userId, teamId, db)) {
77
+ return forbidden(c, 'Not a member of this team')
78
+ }
79
+ if (sessionId && !isAdmin && !isSessionVisibleToUser(sessionId, userId, db)) {
80
+ return forbidden(c, 'Not authorized for this session')
81
+ }
82
+ if (type && !MEMORY_TYPES.includes(type)) {
83
+ return c.json(
84
+ { error: { type: 'bad_request', message: 'invalid type filter' } },
85
+ 400,
86
+ )
87
+ }
88
+
89
+ const rows = listMemoriesForUser(
90
+ userId,
91
+ { teamId, personalScope, sessionId, type },
92
+ isAdmin,
93
+ )
94
+ return c.json(
95
+ rows.map(row => ({
96
+ ...row,
97
+ can_manage: canManageMemory(row.id, userId, isAdmin),
98
+ })),
99
+ 200,
100
+ )
101
+ })
102
+
103
+ app.get('/memories/:id', sessionAuth, async c => {
104
+ const userId = c.get('userId') as string
105
+ const isAdmin = (c.get('isAdmin') as boolean) || userId === SYSTEM_USER_ID
106
+ const id = c.req.param('id')!
107
+
108
+ const row = getMemoryRow(id)
109
+ if (!row) {
110
+ return c.json(
111
+ { error: { type: 'not_found', message: 'Memory not found' } },
112
+ 404,
113
+ )
114
+ }
115
+ // Single-fetch returns 404 (not 403) on no access — same existence-hiding
116
+ // convention as the caller-scoped artifact routes.
117
+ if (!isMemoryVisibleToUser(id, userId, isAdmin)) {
118
+ return c.json(
119
+ { error: { type: 'not_found', message: 'Memory not found' } },
120
+ 404,
121
+ )
122
+ }
123
+ return c.json(
124
+ { ...row, can_manage: canManageMemory(id, userId, isAdmin) },
125
+ 200,
126
+ )
127
+ })
128
+
129
+ app.post('/memories', sessionAuth, async c => {
130
+ const userId = c.get('userId') as string
131
+ const isAdmin = (c.get('isAdmin') as boolean) || userId === SYSTEM_USER_ID
132
+ const db = getDb()
133
+
134
+ let body: Record<string, unknown>
135
+ try {
136
+ body = await c.req.json()
137
+ } catch {
138
+ return c.json(
139
+ { error: { type: 'bad_request', message: 'Invalid JSON' } },
140
+ 400,
141
+ )
142
+ }
143
+
144
+ const name = typeof body.name === 'string' ? body.name.trim() : ''
145
+ const content = typeof body.content === 'string' ? body.content : ''
146
+ const type = typeof body.type === 'string' ? body.type : ''
147
+ const description =
148
+ typeof body.description === 'string' && body.description.trim()
149
+ ? body.description.trim()
150
+ : undefined
151
+ if (!name || !content.trim()) {
152
+ return c.json(
153
+ {
154
+ error: {
155
+ type: 'bad_request',
156
+ message: 'name and content are required',
157
+ },
158
+ },
159
+ 400,
160
+ )
161
+ }
162
+ if (!MEMORY_TYPES.includes(type as MemoryType)) {
163
+ return c.json(
164
+ {
165
+ error: {
166
+ type: 'bad_request',
167
+ message: `type must be one of ${MEMORY_TYPES.join(', ')}`,
168
+ },
169
+ },
170
+ 400,
171
+ )
172
+ }
173
+
174
+ // Scope: team_id → team memory (membership required); otherwise personal.
175
+ const teamId =
176
+ typeof body.team_id === 'string' && body.team_id ? body.team_id : undefined
177
+ if (teamId && !isAdmin && !isTeamMember(userId, teamId, db)) {
178
+ return forbidden(c, 'Not a member of this team')
179
+ }
180
+
181
+ // Optional session provenance — caller must see the session.
182
+ const sourceSessionId =
183
+ typeof body.source_session_id === 'string' && body.source_session_id
184
+ ? body.source_session_id
185
+ : undefined
186
+ if (sourceSessionId && !isSessionVisibleToUser(sourceSessionId, userId, db)) {
187
+ return forbidden(c, 'Not authorized for this session')
188
+ }
189
+
190
+ try {
191
+ const row = createMemory({
192
+ scopeKind: teamId ? 'team' : 'personal',
193
+ ownerUserId: teamId ? undefined : userId,
194
+ teamId,
195
+ name,
196
+ description,
197
+ type: type as MemoryType,
198
+ content,
199
+ sourceSessionId,
200
+ createdBy: userId,
201
+ })
202
+ const { content: _c, ...meta } = row
203
+ return c.json({ ...meta, can_manage: true }, 201)
204
+ } catch (err) {
205
+ if (err instanceof MemoryError) {
206
+ return c.json({ error: { type: err.code, message: err.message } }, 400)
207
+ }
208
+ throw err
209
+ }
210
+ })
211
+
212
+ app.patch('/memories/:id', sessionAuth, async c => {
213
+ const userId = c.get('userId') as string
214
+ const isAdmin = (c.get('isAdmin') as boolean) || userId === SYSTEM_USER_ID
215
+ const id = c.req.param('id')!
216
+
217
+ if (!getMemoryRow(id)) {
218
+ return c.json(
219
+ { error: { type: 'not_found', message: 'Memory not found' } },
220
+ 404,
221
+ )
222
+ }
223
+ if (!canManageMemory(id, userId, isAdmin)) {
224
+ return forbidden(c, 'Not authorized to edit this memory')
225
+ }
226
+
227
+ let body: Record<string, unknown>
228
+ try {
229
+ body = await c.req.json()
230
+ } catch {
231
+ return c.json(
232
+ { error: { type: 'bad_request', message: 'Invalid JSON' } },
233
+ 400,
234
+ )
235
+ }
236
+
237
+ const params: {
238
+ name?: string
239
+ description?: string
240
+ content?: string
241
+ type?: MemoryType
242
+ } = {}
243
+ if (typeof body.name === 'string') params.name = body.name
244
+ if (typeof body.description === 'string')
245
+ params.description = body.description
246
+ if (typeof body.content === 'string') params.content = body.content
247
+ if (typeof body.type === 'string') params.type = body.type as MemoryType
248
+
249
+ try {
250
+ const updated = updateMemory(id, params)
251
+ if (!updated) {
252
+ return c.json(
253
+ { error: { type: 'not_found', message: 'Memory not found' } },
254
+ 404,
255
+ )
256
+ }
257
+ const { content: _c, ...meta } = updated
258
+ return c.json({ ...meta, can_manage: true }, 200)
259
+ } catch (err) {
260
+ if (err instanceof MemoryError) {
261
+ return c.json({ error: { type: err.code, message: err.message } }, 400)
262
+ }
263
+ throw err
264
+ }
265
+ })
266
+
267
+ app.delete('/memories/:id', sessionAuth, async c => {
268
+ const userId = c.get('userId') as string
269
+ const isAdmin = (c.get('isAdmin') as boolean) || userId === SYSTEM_USER_ID
270
+ const id = c.req.param('id')!
271
+
272
+ if (!getMemoryRow(id)) {
273
+ return c.json(
274
+ { error: { type: 'not_found', message: 'Memory not found' } },
275
+ 404,
276
+ )
277
+ }
278
+ if (!canManageMemory(id, userId, isAdmin)) {
279
+ return forbidden(c, 'Not authorized to delete this memory')
280
+ }
281
+
282
+ archiveMemory(id)
283
+ return c.json({ ok: true }, 200)
284
+ })
285
+
286
+ app.post('/memories/:id/promote', sessionAuth, async c => {
287
+ const userId = c.get('userId') as string
288
+ const id = c.req.param('id')!
289
+
290
+ let body: Record<string, unknown>
291
+ try {
292
+ body = await c.req.json()
293
+ } catch {
294
+ return c.json(
295
+ { error: { type: 'bad_request', message: 'Invalid JSON' } },
296
+ 400,
297
+ )
298
+ }
299
+ const teamId = typeof body.team_id === 'string' ? body.team_id : ''
300
+ if (!teamId) {
301
+ return c.json(
302
+ { error: { type: 'bad_request', message: 'team_id is required' } },
303
+ 400,
304
+ )
305
+ }
306
+
307
+ try {
308
+ const row = promoteMemoryToTeam(id, userId, teamId)
309
+ const { content: _c, ...meta } = row
310
+ return c.json({ ...meta, can_manage: true }, 200)
311
+ } catch (err) {
312
+ if (err instanceof MemoryError) {
313
+ const status =
314
+ err.code === 'not_found' ? 404 : err.code === 'forbidden' ? 403 : 400
315
+ return c.json({ error: { type: err.code, message: err.message } }, status)
316
+ }
317
+ throw err
318
+ }
319
+ })
320
+
321
+ export default app