@memo-code/memo 0.7.3 → 0.8.5

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 (454) hide show
  1. package/README.md +125 -22
  2. package/README.zh.md +96 -19
  3. package/dist/index.js +123 -119
  4. package/dist/task-prompts/init_agents.md +40 -0
  5. package/dist/task-prompts/review_pull_request.md +53 -0
  6. package/dist/web/server/app.controller.d.ts +6 -0
  7. package/dist/web/server/app.controller.js +33 -0
  8. package/dist/web/server/app.module.d.ts +4 -0
  9. package/dist/web/server/app.module.js +61 -0
  10. package/dist/web/server/auth/access-token.guard.d.ts +9 -0
  11. package/dist/web/server/auth/access-token.guard.js +53 -0
  12. package/dist/web/server/auth/auth.controller.d.ts +18 -0
  13. package/dist/web/server/auth/auth.controller.js +75 -0
  14. package/dist/web/server/auth/auth.module.d.ts +2 -0
  15. package/dist/web/server/auth/auth.module.js +24 -0
  16. package/dist/web/server/auth/auth.service.d.ts +15 -0
  17. package/dist/web/server/auth/auth.service.js +146 -0
  18. package/dist/web/server/auth/auth.types.d.ts +26 -0
  19. package/dist/web/server/auth/auth.types.js +2 -0
  20. package/dist/web/server/auth/public.decorator.d.ts +2 -0
  21. package/dist/web/server/auth/public.decorator.js +7 -0
  22. package/dist/web/server/chat/chat.controller.d.ts +30 -0
  23. package/dist/web/server/chat/chat.controller.js +150 -0
  24. package/dist/web/server/chat/chat.module.d.ts +2 -0
  25. package/dist/web/server/chat/chat.module.js +26 -0
  26. package/dist/web/server/chat/chat.service.d.ts +61 -0
  27. package/dist/web/server/chat/chat.service.js +847 -0
  28. package/dist/web/server/chat/chat.types.d.ts +38 -0
  29. package/dist/web/server/chat/chat.types.js +2 -0
  30. package/dist/web/server/common/constants.d.ts +1 -0
  31. package/dist/web/server/common/constants.js +4 -0
  32. package/dist/web/server/common/filters/api-error.filter.d.ts +7 -0
  33. package/dist/web/server/common/filters/api-error.filter.js +95 -0
  34. package/dist/web/server/common/interceptors/api-response.interceptor.d.ts +15 -0
  35. package/dist/web/server/common/interceptors/api-response.interceptor.js +51 -0
  36. package/dist/web/server/common/middleware/request-logging.middleware.d.ts +7 -0
  37. package/dist/web/server/common/middleware/request-logging.middleware.js +42 -0
  38. package/dist/web/server/config/memo-config.service.d.ts +7 -0
  39. package/dist/web/server/config/memo-config.service.js +106 -0
  40. package/dist/web/server/config/memo-config.types.d.ts +6 -0
  41. package/dist/web/server/config/memo-config.types.js +2 -0
  42. package/dist/web/server/config/server-config.module.d.ts +2 -0
  43. package/dist/web/server/config/server-config.module.js +22 -0
  44. package/dist/web/server/config/server-config.service.d.ts +14 -0
  45. package/dist/web/server/config/server-config.service.js +326 -0
  46. package/dist/web/server/config/server-config.service.test.d.ts +1 -0
  47. package/dist/web/server/config/server-config.service.test.js +193 -0
  48. package/dist/web/server/config/server-config.types.d.ts +27 -0
  49. package/dist/web/server/config/server-config.types.js +2 -0
  50. package/dist/web/server/main.d.ts +1 -0
  51. package/dist/web/server/main.js +19 -0
  52. package/dist/web/server/mcp/mcp.controller.d.ts +38 -0
  53. package/dist/web/server/mcp/mcp.controller.js +126 -0
  54. package/dist/web/server/mcp/mcp.module.d.ts +2 -0
  55. package/dist/web/server/mcp/mcp.module.js +22 -0
  56. package/dist/web/server/mcp/mcp.service.d.ts +25 -0
  57. package/dist/web/server/mcp/mcp.service.js +56 -0
  58. package/dist/web/server/package.json +3 -0
  59. package/dist/web/server/server.d.ts +18 -0
  60. package/dist/web/server/server.js +142 -0
  61. package/dist/web/server/sessions/sessions.controller.d.ts +8 -0
  62. package/dist/web/server/sessions/sessions.controller.js +59 -0
  63. package/dist/web/server/sessions/sessions.module.d.ts +2 -0
  64. package/dist/web/server/sessions/sessions.module.js +24 -0
  65. package/dist/web/server/sessions/sessions.service.d.ts +22 -0
  66. package/dist/web/server/sessions/sessions.service.js +217 -0
  67. package/dist/web/server/sessions/sessions.types.d.ts +18 -0
  68. package/dist/web/server/sessions/sessions.types.js +2 -0
  69. package/dist/web/server/skills/skills.controller.d.ts +31 -0
  70. package/dist/web/server/skills/skills.controller.js +86 -0
  71. package/dist/web/server/skills/skills.module.d.ts +2 -0
  72. package/dist/web/server/skills/skills.module.js +24 -0
  73. package/dist/web/server/skills/skills.service.d.ts +38 -0
  74. package/dist/web/server/skills/skills.service.js +97 -0
  75. package/dist/web/server/stream/stream.module.d.ts +2 -0
  76. package/dist/web/server/stream/stream.module.js +20 -0
  77. package/dist/web/server/stream/stream.service.d.ts +26 -0
  78. package/dist/web/server/stream/stream.service.js +166 -0
  79. package/dist/web/server/tsconfig.build.tsbuildinfo +1 -0
  80. package/dist/web/server/workspaces/workspaces.module.d.ts +2 -0
  81. package/dist/web/server/workspaces/workspaces.module.js +20 -0
  82. package/dist/web/server/workspaces/workspaces.service.d.ts +38 -0
  83. package/dist/web/server/workspaces/workspaces.service.js +378 -0
  84. package/dist/web/server/workspaces/workspaces.types.d.ts +1 -0
  85. package/dist/web/server/workspaces/workspaces.types.js +2 -0
  86. package/dist/web/server/workspaces/workspaces.utils.d.ts +1 -0
  87. package/dist/web/server/workspaces/workspaces.utils.js +9 -0
  88. package/dist/web/server/ws/rpc-router.service.d.ts +20 -0
  89. package/dist/web/server/ws/rpc-router.service.js +275 -0
  90. package/dist/web/server/ws/session-runtime-registry.service.d.ts +37 -0
  91. package/dist/web/server/ws/session-runtime-registry.service.js +118 -0
  92. package/dist/web/server/ws/ws-event-bus.service.d.ts +5 -0
  93. package/dist/web/server/ws/ws-event-bus.service.js +27 -0
  94. package/dist/web/server/ws/ws-gateway.module.d.ts +2 -0
  95. package/dist/web/server/ws/ws-gateway.module.js +42 -0
  96. package/dist/web/server/ws/ws-gateway.service.d.ts +42 -0
  97. package/dist/web/server/ws/ws-gateway.service.js +473 -0
  98. package/dist/web/server/ws/ws.errors.d.ts +8 -0
  99. package/dist/web/server/ws/ws.errors.js +16 -0
  100. package/dist/web/server/ws/ws.types.d.ts +34 -0
  101. package/dist/web/server/ws/ws.types.js +2 -0
  102. package/dist/web/ui/assets/_baseUniq-kMerwpPq.js +1 -0
  103. package/dist/web/ui/assets/abap-BdImnpbu.js +1 -0
  104. package/dist/web/ui/assets/actionscript-3-CoDkCxhg.js +1 -0
  105. package/dist/web/ui/assets/ada-bCR0ucgS.js +1 -0
  106. package/dist/web/ui/assets/andromeeda-C4gqWexZ.js +1 -0
  107. package/dist/web/ui/assets/angular-html-CU67Zn6k.js +1 -0
  108. package/dist/web/ui/assets/angular-ts-BwZT4LLn.js +1 -0
  109. package/dist/web/ui/assets/apache-Pmp26Uib.js +1 -0
  110. package/dist/web/ui/assets/apex-D8_7TLub.js +1 -0
  111. package/dist/web/ui/assets/apl-dKokRX4l.js +1 -0
  112. package/dist/web/ui/assets/applescript-Co6uUVPk.js +1 -0
  113. package/dist/web/ui/assets/ara-BRHolxvo.js +1 -0
  114. package/dist/web/ui/assets/arc-BulUmzON.js +1 -0
  115. package/dist/web/ui/assets/architectureDiagram-VXUJARFQ-CkXEUKP9.js +36 -0
  116. package/dist/web/ui/assets/asciidoc-Dv7Oe6Be.js +1 -0
  117. package/dist/web/ui/assets/asm-D_Q5rh1f.js +1 -0
  118. package/dist/web/ui/assets/astro-CbQHKStN.js +1 -0
  119. package/dist/web/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
  120. package/dist/web/ui/assets/awk-DMzUqQB5.js +1 -0
  121. package/dist/web/ui/assets/ayu-dark-CMjwMIkn.js +1 -0
  122. package/dist/web/ui/assets/ayu-light-C47S-Tmv.js +1 -0
  123. package/dist/web/ui/assets/ayu-mirage-CjoLj4QM.js +1 -0
  124. package/dist/web/ui/assets/ballerina-BFfxhgS-.js +1 -0
  125. package/dist/web/ui/assets/bat-BkioyH1T.js +1 -0
  126. package/dist/web/ui/assets/beancount-k_qm7-4y.js +1 -0
  127. package/dist/web/ui/assets/berry-uYugtg8r.js +1 -0
  128. package/dist/web/ui/assets/bibtex-CHM0blh-.js +1 -0
  129. package/dist/web/ui/assets/bicep-Bmn6On1c.js +1 -0
  130. package/dist/web/ui/assets/blade-D4QpJJKB.js +1 -0
  131. package/dist/web/ui/assets/blockDiagram-VD42YOAC-DXcW7NDi.js +122 -0
  132. package/dist/web/ui/assets/bsl-BO_Y6i37.js +1 -0
  133. package/dist/web/ui/assets/c-BIGW1oBm.js +1 -0
  134. package/dist/web/ui/assets/c3-VCDPK7BO.js +1 -0
  135. package/dist/web/ui/assets/c4Diagram-YG6GDRKO-QrajWDN7.js +10 -0
  136. package/dist/web/ui/assets/cadence-Bv_4Rxtq.js +1 -0
  137. package/dist/web/ui/assets/cairo-KRGpt6FW.js +1 -0
  138. package/dist/web/ui/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  139. package/dist/web/ui/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  140. package/dist/web/ui/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  141. package/dist/web/ui/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  142. package/dist/web/ui/assets/channel-DcFyxfzD.js +1 -0
  143. package/dist/web/ui/assets/chunk-4BX2VUAB-CzB06K-m.js +1 -0
  144. package/dist/web/ui/assets/chunk-55IACEB6-e5LXEkOB.js +1 -0
  145. package/dist/web/ui/assets/chunk-B4BG7PRW-YVg5pH4D.js +165 -0
  146. package/dist/web/ui/assets/chunk-DI55MBZ5-Carl7-xm.js +220 -0
  147. package/dist/web/ui/assets/chunk-FMBD7UC4-06dN5sRQ.js +15 -0
  148. package/dist/web/ui/assets/chunk-QN33PNHL-Cl3zdZ7K.js +1 -0
  149. package/dist/web/ui/assets/chunk-QZHKN3VN-CDOQBeOx.js +1 -0
  150. package/dist/web/ui/assets/chunk-TZMSLE5B-DWeaVk_X.js +1 -0
  151. package/dist/web/ui/assets/clarity-D53aC0YG.js +1 -0
  152. package/dist/web/ui/assets/classDiagram-2ON5EDUG-DmyEwwBr.js +1 -0
  153. package/dist/web/ui/assets/classDiagram-v2-WZHVMYZB-DmyEwwBr.js +1 -0
  154. package/dist/web/ui/assets/clojure-P80f7IUj.js +1 -0
  155. package/dist/web/ui/assets/clone-DZ5SCP6k.js +1 -0
  156. package/dist/web/ui/assets/cmake-D1j8_8rp.js +1 -0
  157. package/dist/web/ui/assets/cobol-nwyudZeR.js +1 -0
  158. package/dist/web/ui/assets/code-block-OCS4YCEC-DmdcLUqO.js +2 -0
  159. package/dist/web/ui/assets/codeowners-Bp6g37R7.js +1 -0
  160. package/dist/web/ui/assets/codeql-DsOJ9woJ.js +1 -0
  161. package/dist/web/ui/assets/coffee-Ch7k5sss.js +1 -0
  162. package/dist/web/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
  163. package/dist/web/ui/assets/coq-DkFqJrB1.js +1 -0
  164. package/dist/web/ui/assets/cose-bilkent-S5V4N54A-CDHjR7aY.js +1 -0
  165. package/dist/web/ui/assets/cpp-CofmeUqb.js +1 -0
  166. package/dist/web/ui/assets/crystal-tKQVLTB8.js +1 -0
  167. package/dist/web/ui/assets/csharp-COcwbKMJ.js +1 -0
  168. package/dist/web/ui/assets/css-DPfMkruS.js +1 -0
  169. package/dist/web/ui/assets/csv-fuZLfV_i.js +1 -0
  170. package/dist/web/ui/assets/cue-D82EKSYY.js +1 -0
  171. package/dist/web/ui/assets/cypher-COkxafJQ.js +1 -0
  172. package/dist/web/ui/assets/cytoscape.esm-5J0xJHOV.js +321 -0
  173. package/dist/web/ui/assets/d-85-TOEBH.js +1 -0
  174. package/dist/web/ui/assets/dagre-6UL2VRFP-BvAH8ysH.js +4 -0
  175. package/dist/web/ui/assets/dark-plus-C3mMm8J8.js +1 -0
  176. package/dist/web/ui/assets/dart-CF10PKvl.js +1 -0
  177. package/dist/web/ui/assets/dax-CEL-wOlO.js +1 -0
  178. package/dist/web/ui/assets/defaultLocale-DX6XiGOO.js +1 -0
  179. package/dist/web/ui/assets/desktop-BmXAJ9_W.js +1 -0
  180. package/dist/web/ui/assets/diagram-PSM6KHXK-CKk6ZAaV.js +24 -0
  181. package/dist/web/ui/assets/diagram-QEK2KX5R-Ewj4cQfm.js +43 -0
  182. package/dist/web/ui/assets/diagram-S2PKOQOG-B-i75ELR.js +24 -0
  183. package/dist/web/ui/assets/diff-D97Zzqfu.js +1 -0
  184. package/dist/web/ui/assets/docker-BcOcwvcX.js +1 -0
  185. package/dist/web/ui/assets/dotenv-Da5cRb03.js +1 -0
  186. package/dist/web/ui/assets/dracula-BzJJZx-M.js +1 -0
  187. package/dist/web/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
  188. package/dist/web/ui/assets/dream-maker-BtqSS_iP.js +1 -0
  189. package/dist/web/ui/assets/edge-BkV0erSs.js +1 -0
  190. package/dist/web/ui/assets/elixir-CDX3lj18.js +1 -0
  191. package/dist/web/ui/assets/elm-DbKCFpqz.js +1 -0
  192. package/dist/web/ui/assets/emacs-lisp-C9XAeP06.js +1 -0
  193. package/dist/web/ui/assets/erDiagram-Q2GNP2WA-BMe1fyY7.js +60 -0
  194. package/dist/web/ui/assets/erb-CgJxNhIT.js +1 -0
  195. package/dist/web/ui/assets/erlang-DsQrWhSR.js +1 -0
  196. package/dist/web/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
  197. package/dist/web/ui/assets/everforest-light-C8M2exoo.js +1 -0
  198. package/dist/web/ui/assets/fennel-BYunw83y.js +1 -0
  199. package/dist/web/ui/assets/fish-BvzEVeQv.js +1 -0
  200. package/dist/web/ui/assets/flowDiagram-NV44I4VS-DTOpgGDg.js +162 -0
  201. package/dist/web/ui/assets/fluent-C4IJs8-o.js +1 -0
  202. package/dist/web/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  203. package/dist/web/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
  204. package/dist/web/ui/assets/fsharp-CXgrBDvD.js +1 -0
  205. package/dist/web/ui/assets/ganttDiagram-JELNMOA3-DdrlqPr-.js +267 -0
  206. package/dist/web/ui/assets/gdresource-BOOCDP_w.js +1 -0
  207. package/dist/web/ui/assets/gdscript-C5YyOfLZ.js +1 -0
  208. package/dist/web/ui/assets/gdshader-DkwncUOv.js +1 -0
  209. package/dist/web/ui/assets/genie-D0YGMca9.js +1 -0
  210. package/dist/web/ui/assets/gherkin-DyxjwDmM.js +1 -0
  211. package/dist/web/ui/assets/git-commit-F4YmCXRG.js +1 -0
  212. package/dist/web/ui/assets/git-rebase-r7XF79zn.js +1 -0
  213. package/dist/web/ui/assets/gitGraphDiagram-NY62KEGX-DOpYoqH8.js +65 -0
  214. package/dist/web/ui/assets/github-dark-DHJKELXO.js +1 -0
  215. package/dist/web/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
  216. package/dist/web/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  217. package/dist/web/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  218. package/dist/web/ui/assets/github-light-DAi9KRSo.js +1 -0
  219. package/dist/web/ui/assets/github-light-default-D7oLnXFd.js +1 -0
  220. package/dist/web/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  221. package/dist/web/ui/assets/gleam-BspZqrRM.js +1 -0
  222. package/dist/web/ui/assets/glimmer-js-Rg0-pVw9.js +1 -0
  223. package/dist/web/ui/assets/glimmer-ts-U6CK756n.js +1 -0
  224. package/dist/web/ui/assets/glsl-DplSGwfg.js +1 -0
  225. package/dist/web/ui/assets/gn-n2N0HUVH.js +1 -0
  226. package/dist/web/ui/assets/gnuplot-DdkO51Og.js +1 -0
  227. package/dist/web/ui/assets/go-CxLEBnE3.js +1 -0
  228. package/dist/web/ui/assets/graph-DNq5-vTB.js +1 -0
  229. package/dist/web/ui/assets/graphql-ChdNCCLP.js +1 -0
  230. package/dist/web/ui/assets/groovy-gcz8RCvz.js +1 -0
  231. package/dist/web/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  232. package/dist/web/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  233. package/dist/web/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  234. package/dist/web/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  235. package/dist/web/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  236. package/dist/web/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  237. package/dist/web/ui/assets/hack-CaT9iCJl.js +1 -0
  238. package/dist/web/ui/assets/haml-B8DHNrY2.js +1 -0
  239. package/dist/web/ui/assets/handlebars-BL8al0AC.js +1 -0
  240. package/dist/web/ui/assets/haskell-Df6bDoY_.js +1 -0
  241. package/dist/web/ui/assets/haxe-CzTSHFRz.js +1 -0
  242. package/dist/web/ui/assets/hcl-BWvSN4gD.js +1 -0
  243. package/dist/web/ui/assets/hjson-D5-asLiD.js +1 -0
  244. package/dist/web/ui/assets/hlsl-D3lLCCz7.js +1 -0
  245. package/dist/web/ui/assets/horizon-BUw7H-hv.js +1 -0
  246. package/dist/web/ui/assets/houston-DnULxvSX.js +1 -0
  247. package/dist/web/ui/assets/html-GMplVEZG.js +1 -0
  248. package/dist/web/ui/assets/html-derivative-BFtXZ54Q.js +1 -0
  249. package/dist/web/ui/assets/http-jrhK8wxY.js +1 -0
  250. package/dist/web/ui/assets/hurl-irOxFIW8.js +1 -0
  251. package/dist/web/ui/assets/hxml-Bvhsp5Yf.js +1 -0
  252. package/dist/web/ui/assets/hy-DFXneXwc.js +1 -0
  253. package/dist/web/ui/assets/imba-DGztddWO.js +1 -0
  254. package/dist/web/ui/assets/index-B3TLzmaO.js +441 -0
  255. package/dist/web/ui/assets/index-BSSBc2rS.css +1 -0
  256. package/dist/web/ui/assets/infoDiagram-WHAUD3N6-D3Wwcqmd.js +2 -0
  257. package/dist/web/ui/assets/ini-BEwlwnbL.js +1 -0
  258. package/dist/web/ui/assets/init-Gi6I4Gst.js +1 -0
  259. package/dist/web/ui/assets/java-CylS5w8V.js +1 -0
  260. package/dist/web/ui/assets/javascript-wDzz0qaB.js +1 -0
  261. package/dist/web/ui/assets/jinja-4LBKfQ-Z.js +1 -0
  262. package/dist/web/ui/assets/jison-wvAkD_A8.js +1 -0
  263. package/dist/web/ui/assets/journeyDiagram-XKPGCS4Q-BKDrlvIB.js +139 -0
  264. package/dist/web/ui/assets/json-Cp-IABpG.js +1 -0
  265. package/dist/web/ui/assets/json5-C9tS-k6U.js +1 -0
  266. package/dist/web/ui/assets/jsonc-Des-eS-w.js +1 -0
  267. package/dist/web/ui/assets/jsonl-DcaNXYhu.js +1 -0
  268. package/dist/web/ui/assets/jsonnet-DFQXde-d.js +1 -0
  269. package/dist/web/ui/assets/jssm-C2t-YnRu.js +1 -0
  270. package/dist/web/ui/assets/jsx-g9-lgVsj.js +1 -0
  271. package/dist/web/ui/assets/julia-CxzCAyBv.js +1 -0
  272. package/dist/web/ui/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  273. package/dist/web/ui/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  274. package/dist/web/ui/assets/kanagawa-wave-DWedfzmr.js +1 -0
  275. package/dist/web/ui/assets/kanban-definition-3W4ZIXB7-Dj6sXTJI.js +89 -0
  276. package/dist/web/ui/assets/katex-DhXJpUyf.js +261 -0
  277. package/dist/web/ui/assets/kdl-DV7GczEv.js +1 -0
  278. package/dist/web/ui/assets/kotlin-BdnUsdx6.js +1 -0
  279. package/dist/web/ui/assets/kusto-DZf3V79B.js +1 -0
  280. package/dist/web/ui/assets/laserwave-DUszq2jm.js +1 -0
  281. package/dist/web/ui/assets/latex-DGMBWnxU.js +1 -0
  282. package/dist/web/ui/assets/layout-4XvXY0m8.js +1 -0
  283. package/dist/web/ui/assets/lean-BZvkOJ9d.js +1 -0
  284. package/dist/web/ui/assets/less-B1dDrJ26.js +1 -0
  285. package/dist/web/ui/assets/light-plus-B7mTdjB0.js +1 -0
  286. package/dist/web/ui/assets/linear-CUPS720l.js +1 -0
  287. package/dist/web/ui/assets/liquid-DYVedYrR.js +1 -0
  288. package/dist/web/ui/assets/llvm-BtvRca6l.js +1 -0
  289. package/dist/web/ui/assets/log-2UxHyX5q.js +1 -0
  290. package/dist/web/ui/assets/logo-BtOb2qkB.js +1 -0
  291. package/dist/web/ui/assets/lua-BaeVxFsk.js +1 -0
  292. package/dist/web/ui/assets/luau-C-HG3fhB.js +1 -0
  293. package/dist/web/ui/assets/make-CHLpvVh8.js +1 -0
  294. package/dist/web/ui/assets/markdown-Cvjx9yec.js +1 -0
  295. package/dist/web/ui/assets/marko-DZsq8hO1.js +1 -0
  296. package/dist/web/ui/assets/material-theme-D5KoaKCx.js +1 -0
  297. package/dist/web/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
  298. package/dist/web/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  299. package/dist/web/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
  300. package/dist/web/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  301. package/dist/web/ui/assets/matlab-D7o27uSR.js +1 -0
  302. package/dist/web/ui/assets/mdc-DUICxH0z.js +1 -0
  303. package/dist/web/ui/assets/mdx-Cmh6b_Ma.js +1 -0
  304. package/dist/web/ui/assets/mermaid-mWjccvbQ.js +1 -0
  305. package/dist/web/ui/assets/min-KWXImKVx.js +1 -0
  306. package/dist/web/ui/assets/min-dark-CafNBF8u.js +1 -0
  307. package/dist/web/ui/assets/min-light-CTRr51gU.js +1 -0
  308. package/dist/web/ui/assets/mindmap-definition-VGOIOE7T-D9ty43l7.js +68 -0
  309. package/dist/web/ui/assets/mipsasm-CKIfxQSi.js +1 -0
  310. package/dist/web/ui/assets/mojo-B93PlW-d.js +1 -0
  311. package/dist/web/ui/assets/monokai-D4h5O-jR.js +1 -0
  312. package/dist/web/ui/assets/moonbit-Ba13S78F.js +1 -0
  313. package/dist/web/ui/assets/move-IF9eRakj.js +1 -0
  314. package/dist/web/ui/assets/narrat-DRg8JJMk.js +1 -0
  315. package/dist/web/ui/assets/nextflow-BrzmwbiE.js +1 -0
  316. package/dist/web/ui/assets/nginx-BpAMiNFr.js +1 -0
  317. package/dist/web/ui/assets/night-owl-C39BiMTA.js +1 -0
  318. package/dist/web/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
  319. package/dist/web/ui/assets/nim-CVrawwO9.js +1 -0
  320. package/dist/web/ui/assets/nix-CwoSXNpI.js +1 -0
  321. package/dist/web/ui/assets/nord-Ddv68eIx.js +1 -0
  322. package/dist/web/ui/assets/nushell-C-sUppwS.js +1 -0
  323. package/dist/web/ui/assets/objective-c-DXmwc3jG.js +1 -0
  324. package/dist/web/ui/assets/objective-cpp-CLxacb5B.js +1 -0
  325. package/dist/web/ui/assets/ocaml-C0hk2d4L.js +1 -0
  326. package/dist/web/ui/assets/odin-BBf5iR-q.js +1 -0
  327. package/dist/web/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  328. package/dist/web/ui/assets/one-light-C3Wv6jpd.js +1 -0
  329. package/dist/web/ui/assets/openscad-C4EeE6gA.js +1 -0
  330. package/dist/web/ui/assets/ordinal-Cboi1Yqb.js +1 -0
  331. package/dist/web/ui/assets/pascal-D93ZcfNL.js +1 -0
  332. package/dist/web/ui/assets/perl-C0TMdlhV.js +1 -0
  333. package/dist/web/ui/assets/php-Dhbhpdrm.js +1 -0
  334. package/dist/web/ui/assets/pieDiagram-ADFJNKIX-BlMxxSdO.js +30 -0
  335. package/dist/web/ui/assets/pkl-u5AG7uiY.js +1 -0
  336. package/dist/web/ui/assets/plastic-3e1v2bzS.js +1 -0
  337. package/dist/web/ui/assets/plsql-ChMvpjG-.js +1 -0
  338. package/dist/web/ui/assets/po-BTJTHyun.js +1 -0
  339. package/dist/web/ui/assets/poimandres-CS3Unz2-.js +1 -0
  340. package/dist/web/ui/assets/polar-C0HS_06l.js +1 -0
  341. package/dist/web/ui/assets/postcss-CXtECtnM.js +1 -0
  342. package/dist/web/ui/assets/powerquery-CEu0bR-o.js +1 -0
  343. package/dist/web/ui/assets/powershell-Dpen1YoG.js +1 -0
  344. package/dist/web/ui/assets/prisma-Dd19v3D-.js +1 -0
  345. package/dist/web/ui/assets/prolog-CbFg5uaA.js +1 -0
  346. package/dist/web/ui/assets/proto-C7zT0LnQ.js +1 -0
  347. package/dist/web/ui/assets/pug-CGlum2m_.js +1 -0
  348. package/dist/web/ui/assets/puppet-BMWR74SV.js +1 -0
  349. package/dist/web/ui/assets/purescript-CklMAg4u.js +1 -0
  350. package/dist/web/ui/assets/python-B6aJPvgy.js +1 -0
  351. package/dist/web/ui/assets/qml-3beO22l8.js +1 -0
  352. package/dist/web/ui/assets/qmldir-C8lEn-DE.js +1 -0
  353. package/dist/web/ui/assets/qss-IeuSbFQv.js +1 -0
  354. package/dist/web/ui/assets/quadrantDiagram-AYHSOK5B-Cam0yXvU.js +7 -0
  355. package/dist/web/ui/assets/r-Dspwwk_N.js +1 -0
  356. package/dist/web/ui/assets/racket-BqYA7rlc.js +1 -0
  357. package/dist/web/ui/assets/raku-DXvB9xmW.js +1 -0
  358. package/dist/web/ui/assets/razor-Uh8Bk_45.js +1 -0
  359. package/dist/web/ui/assets/red-bN70gL4F.js +1 -0
  360. package/dist/web/ui/assets/reg-C-SQnVFl.js +1 -0
  361. package/dist/web/ui/assets/regexp-CDVJQ6XC.js +1 -0
  362. package/dist/web/ui/assets/rel-C3B-1QV4.js +1 -0
  363. package/dist/web/ui/assets/requirementDiagram-UZGBJVZJ-D_yH3UAt.js +64 -0
  364. package/dist/web/ui/assets/riscv-BM1_JUlF.js +1 -0
  365. package/dist/web/ui/assets/ron-BhRPY-oY.js +1 -0
  366. package/dist/web/ui/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  367. package/dist/web/ui/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  368. package/dist/web/ui/assets/rose-pine-qdsjHGoJ.js +1 -0
  369. package/dist/web/ui/assets/rosmsg-BJDFO7_C.js +1 -0
  370. package/dist/web/ui/assets/rst-D5oM4XIm.js +1 -0
  371. package/dist/web/ui/assets/ruby-Cw6WdidG.js +1 -0
  372. package/dist/web/ui/assets/rust-B1yitclQ.js +1 -0
  373. package/dist/web/ui/assets/sankeyDiagram-TZEHDZUN-Dm93-uJ1.js +10 -0
  374. package/dist/web/ui/assets/sas-cz2c8ADy.js +1 -0
  375. package/dist/web/ui/assets/sass-Cj5Yp3dK.js +1 -0
  376. package/dist/web/ui/assets/scala-C151Ov-r.js +1 -0
  377. package/dist/web/ui/assets/scheme-C98Dy4si.js +1 -0
  378. package/dist/web/ui/assets/scss-OYdSNvt2.js +1 -0
  379. package/dist/web/ui/assets/sdbl-DVxCFoDh.js +1 -0
  380. package/dist/web/ui/assets/sequenceDiagram-WL72ISMW-D6C4PHTO.js +145 -0
  381. package/dist/web/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
  382. package/dist/web/ui/assets/shellscript-Yzrsuije.js +1 -0
  383. package/dist/web/ui/assets/shellsession-BADoaaVG.js +1 -0
  384. package/dist/web/ui/assets/slack-dark-BthQWCQV.js +1 -0
  385. package/dist/web/ui/assets/slack-ochin-DqwNpetd.js +1 -0
  386. package/dist/web/ui/assets/smalltalk-BERRCDM3.js +1 -0
  387. package/dist/web/ui/assets/snazzy-light-Bw305WKR.js +1 -0
  388. package/dist/web/ui/assets/solarized-dark-DXbdFlpD.js +1 -0
  389. package/dist/web/ui/assets/solarized-light-L9t79GZl.js +1 -0
  390. package/dist/web/ui/assets/solidity-rGO070M0.js +1 -0
  391. package/dist/web/ui/assets/soy-Brmx7dQM.js +1 -0
  392. package/dist/web/ui/assets/sparql-rVzFXLq3.js +1 -0
  393. package/dist/web/ui/assets/splunk-BtCnVYZw.js +1 -0
  394. package/dist/web/ui/assets/sql-BLtJtn59.js +1 -0
  395. package/dist/web/ui/assets/ssh-config-_ykCGR6B.js +1 -0
  396. package/dist/web/ui/assets/stata-BH5u7GGu.js +1 -0
  397. package/dist/web/ui/assets/stateDiagram-FKZM4ZOC-msXCFM-o.js +1 -0
  398. package/dist/web/ui/assets/stateDiagram-v2-4FDKWEC3-BxRi32Am.js +1 -0
  399. package/dist/web/ui/assets/stylus-BEDo0Tqx.js +1 -0
  400. package/dist/web/ui/assets/surrealql-Bq5Q-fJD.js +1 -0
  401. package/dist/web/ui/assets/svelte-zxCyuUbr.js +1 -0
  402. package/dist/web/ui/assets/swift-Dg5xB15N.js +1 -0
  403. package/dist/web/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
  404. package/dist/web/ui/assets/system-verilog-CnnmHF94.js +1 -0
  405. package/dist/web/ui/assets/systemd-4A_iFExJ.js +1 -0
  406. package/dist/web/ui/assets/talonscript-CkByrt1z.js +1 -0
  407. package/dist/web/ui/assets/tasl-QIJgUcNo.js +1 -0
  408. package/dist/web/ui/assets/tcl-dwOrl1Do.js +1 -0
  409. package/dist/web/ui/assets/templ-P3uqSqPl.js +1 -0
  410. package/dist/web/ui/assets/terraform-BETggiCN.js +1 -0
  411. package/dist/web/ui/assets/tex-CvyZ59Mk.js +1 -0
  412. package/dist/web/ui/assets/timeline-definition-IT6M3QCI-OhdHqGpr.js +61 -0
  413. package/dist/web/ui/assets/tokyo-night-hegEt444.js +1 -0
  414. package/dist/web/ui/assets/toml-vGWfd6FD.js +1 -0
  415. package/dist/web/ui/assets/treemap-KMMF4GRG-BBa7Tuyx.js +128 -0
  416. package/dist/web/ui/assets/ts-tags-zn1MmPIZ.js +1 -0
  417. package/dist/web/ui/assets/tsv-B_m7g4N7.js +1 -0
  418. package/dist/web/ui/assets/tsx-COt5Ahok.js +1 -0
  419. package/dist/web/ui/assets/turtle-BsS91CYL.js +1 -0
  420. package/dist/web/ui/assets/twig-ChbOoGGc.js +1 -0
  421. package/dist/web/ui/assets/typescript-BPQ3VLAy.js +1 -0
  422. package/dist/web/ui/assets/typespec-BGHnOYBU.js +1 -0
  423. package/dist/web/ui/assets/typst-DHCkPAjA.js +1 -0
  424. package/dist/web/ui/assets/v-BcVCzyr7.js +1 -0
  425. package/dist/web/ui/assets/vala-CsfeWuGM.js +1 -0
  426. package/dist/web/ui/assets/vb-D17OF-Vu.js +1 -0
  427. package/dist/web/ui/assets/verilog-BQ8w6xss.js +1 -0
  428. package/dist/web/ui/assets/vesper-DU1UobuO.js +1 -0
  429. package/dist/web/ui/assets/vhdl-CeAyd5Ju.js +1 -0
  430. package/dist/web/ui/assets/viml-CJc9bBzg.js +1 -0
  431. package/dist/web/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
  432. package/dist/web/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
  433. package/dist/web/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
  434. package/dist/web/ui/assets/vue-DN_0RTcg.js +1 -0
  435. package/dist/web/ui/assets/vue-html-AaS7Mt5G.js +1 -0
  436. package/dist/web/ui/assets/vue-vine-CQOfvN7w.js +1 -0
  437. package/dist/web/ui/assets/vyper-CDx5xZoG.js +1 -0
  438. package/dist/web/ui/assets/wasm-CG6Dc4jp.js +1 -0
  439. package/dist/web/ui/assets/wasm-MzD3tlZU.js +1 -0
  440. package/dist/web/ui/assets/wenyan-BV7otONQ.js +1 -0
  441. package/dist/web/ui/assets/wgsl-Dx-B1_4e.js +1 -0
  442. package/dist/web/ui/assets/wikitext-BhOHFoWU.js +1 -0
  443. package/dist/web/ui/assets/wit-5i3qLPDT.js +1 -0
  444. package/dist/web/ui/assets/wolfram-lXgVvXCa.js +1 -0
  445. package/dist/web/ui/assets/xml-sdJ4AIDG.js +1 -0
  446. package/dist/web/ui/assets/xsl-CtQFsRM5.js +1 -0
  447. package/dist/web/ui/assets/xychartDiagram-PRI3JC2R-CwWrUftO.js +7 -0
  448. package/dist/web/ui/assets/yaml-Buea-lGh.js +1 -0
  449. package/dist/web/ui/assets/zenscript-DVFEvuxE.js +1 -0
  450. package/dist/web/ui/assets/zig-VOosw3JB.js +1 -0
  451. package/dist/web/ui/index.html +19 -0
  452. package/dist/web/ui/logo-dark.svg +10 -0
  453. package/dist/web/ui/logo.svg +10 -0
  454. package/package.json +21 -3
@@ -0,0 +1,40 @@
1
+ Generate a file named AGENTS.md that serves as a contributor guide for this repository.
2
+ Your goal is to produce a clear, concise, and well-structured document with descriptive headings and actionable explanations for each section.
3
+ Follow the outline below, but adapt as needed - add sections if relevant, and omit those that do not apply to this project.
4
+
5
+ Document Requirements
6
+
7
+ - Title the document "Repository Guidelines".
8
+ - Use Markdown headings (#, ##, etc.) for structure.
9
+ - Keep the document concise. 200-400 words is optimal.
10
+ - Keep explanations short, direct, and specific to this repository.
11
+ - Provide examples where helpful (commands, directory paths, naming patterns).
12
+ - Maintain a professional, instructional tone.
13
+
14
+ Recommended Sections
15
+
16
+ Project Structure & Module Organization
17
+
18
+ - Outline the project structure, including where the source code, tests, and assets are located.
19
+
20
+ Build, Test, and Development Commands
21
+
22
+ - List key commands for building, testing, and running locally (e.g., npm test, make build).
23
+ - Briefly explain what each command does.
24
+
25
+ Coding Style & Naming Conventions
26
+
27
+ - Specify indentation rules, language-specific style preferences, and naming patterns.
28
+ - Include any formatting or linting tools used.
29
+
30
+ Testing Guidelines
31
+
32
+ - Identify testing frameworks and coverage requirements.
33
+ - State test naming conventions and how to run tests.
34
+
35
+ Commit & Pull Request Guidelines
36
+
37
+ - Summarize commit message conventions found in the project's Git history.
38
+ - Outline pull request requirements (descriptions, linked issues, screenshots, etc.).
39
+
40
+ (Optional) Add other sections if relevant, such as Security & Configuration Tips, Architecture Overview, or Agent-Specific Instructions.
@@ -0,0 +1,53 @@
1
+ You are running Memo's dedicated GitHub pull request review workflow.
2
+
3
+ Target PR number: {{pr_number}}
4
+ Backend strategy (selected by runtime): {{backend_strategy}}
5
+ Backend details: {{backend_details}}
6
+
7
+ Your job is to perform an end-to-end PR review and publish results directly to GitHub.
8
+
9
+ Required workflow
10
+
11
+ 1. Connectivity preflight
12
+
13
+ - First verify the selected backend is usable for this PR operation.
14
+ - If backend preflight fails, stop and explain the exact failure and actionable fix.
15
+
16
+ 2. Load PR context
17
+
18
+ - Read PR metadata, title, body, changed files, and full diff.
19
+ - Include enough context to evaluate correctness and risk.
20
+
21
+ 3. Perform review
22
+
23
+ - Focus on: correctness regressions, potential bugs, security risks, API/behavior changes, missing edge-case handling, and maintainability issues.
24
+ - Ignore purely cosmetic style nits unless they hide a bug.
25
+ - Be specific and evidence-based; avoid speculative comments.
26
+
27
+ 4. Publish GitHub review comments
28
+
29
+ - Post inline review comments for each concrete issue you found.
30
+ - Keep each comment concise and actionable.
31
+ - Use one comment per distinct issue.
32
+
33
+ 5. Publish review summary
34
+
35
+ - Submit a final PR review summary comment.
36
+ - If no material issues were found, explicitly say so in the summary.
37
+
38
+ Backend policy
39
+
40
+ - If backend strategy is `github_mcp`:
41
+ - Prefer GitHub MCP tools for all GitHub operations.
42
+ - Prefer tools from the configured server prefix: `{{mcp_server_prefix}}_`.
43
+ - Do not switch to gh CLI unless MCP path is unavailable and you clearly explain why.
44
+
45
+ - If backend strategy is `gh_cli`:
46
+ - Use `exec_command` with GitHub CLI (`gh`) for all GitHub operations.
47
+ - Do not rely on GitHub MCP tools in this mode.
48
+
49
+ Result format to user
50
+
51
+ - Start with a short execution summary: backend used, PR inspected, and whether publishing succeeded.
52
+ - List key findings with file/line references.
53
+ - Confirm what was posted to GitHub (inline comments + final summary), or provide the exact failure reason.
@@ -0,0 +1,6 @@
1
+ export declare class AppController {
2
+ healthz(): {
3
+ status: string;
4
+ service: string;
5
+ };
6
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppController = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const public_decorator_1 = require("./auth/public.decorator");
15
+ let AppController = class AppController {
16
+ healthz() {
17
+ return {
18
+ status: 'ok',
19
+ service: 'memo-web-server',
20
+ };
21
+ }
22
+ };
23
+ exports.AppController = AppController;
24
+ __decorate([
25
+ (0, public_decorator_1.Public)(),
26
+ (0, common_1.Get)('healthz'),
27
+ __metadata("design:type", Function),
28
+ __metadata("design:paramtypes", []),
29
+ __metadata("design:returntype", void 0)
30
+ ], AppController.prototype, "healthz", null);
31
+ exports.AppController = AppController = __decorate([
32
+ (0, common_1.Controller)()
33
+ ], AppController);
@@ -0,0 +1,4 @@
1
+ import { MiddlewareConsumer, type NestModule } from '@nestjs/common';
2
+ export declare class AppModule implements NestModule {
3
+ configure(consumer: MiddlewareConsumer): void;
4
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AppModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const core_1 = require("@nestjs/core");
12
+ const access_token_guard_1 = require("./auth/access-token.guard");
13
+ const auth_module_1 = require("./auth/auth.module");
14
+ const app_controller_1 = require("./app.controller");
15
+ const api_error_filter_1 = require("./common/filters/api-error.filter");
16
+ const api_response_interceptor_1 = require("./common/interceptors/api-response.interceptor");
17
+ const request_logging_middleware_1 = require("./common/middleware/request-logging.middleware");
18
+ const server_config_module_1 = require("./config/server-config.module");
19
+ const chat_module_1 = require("./chat/chat.module");
20
+ const mcp_module_1 = require("./mcp/mcp.module");
21
+ const sessions_module_1 = require("./sessions/sessions.module");
22
+ const skills_module_1 = require("./skills/skills.module");
23
+ const stream_module_1 = require("./stream/stream.module");
24
+ const ws_gateway_module_1 = require("./ws/ws-gateway.module");
25
+ const workspaces_module_1 = require("./workspaces/workspaces.module");
26
+ let AppModule = class AppModule {
27
+ configure(consumer) {
28
+ consumer.apply(request_logging_middleware_1.RequestLoggingMiddleware).forRoutes('*');
29
+ }
30
+ };
31
+ exports.AppModule = AppModule;
32
+ exports.AppModule = AppModule = __decorate([
33
+ (0, common_1.Module)({
34
+ imports: [
35
+ server_config_module_1.ServerConfigModule,
36
+ workspaces_module_1.WorkspacesModule,
37
+ auth_module_1.AuthModule,
38
+ sessions_module_1.SessionsModule,
39
+ stream_module_1.StreamModule,
40
+ chat_module_1.ChatModule,
41
+ mcp_module_1.McpModule,
42
+ skills_module_1.SkillsModule,
43
+ ws_gateway_module_1.WsGatewayModule,
44
+ ],
45
+ controllers: [app_controller_1.AppController],
46
+ providers: [
47
+ {
48
+ provide: core_1.APP_GUARD,
49
+ useClass: access_token_guard_1.AccessTokenGuard,
50
+ },
51
+ {
52
+ provide: core_1.APP_INTERCEPTOR,
53
+ useClass: api_response_interceptor_1.ApiResponseInterceptor,
54
+ },
55
+ {
56
+ provide: core_1.APP_FILTER,
57
+ useClass: api_error_filter_1.ApiErrorFilter,
58
+ },
59
+ ],
60
+ })
61
+ ], AppModule);
@@ -0,0 +1,9 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { AuthService } from './auth.service';
4
+ export declare class AccessTokenGuard implements CanActivate {
5
+ private readonly reflector;
6
+ private readonly authService;
7
+ constructor(reflector: Reflector, authService: AuthService);
8
+ canActivate(context: ExecutionContext): Promise<boolean>;
9
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AccessTokenGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const public_decorator_1 = require("./public.decorator");
16
+ const auth_service_1 = require("./auth.service");
17
+ function extractBearerToken(authorization) {
18
+ if (!authorization) {
19
+ throw new common_1.UnauthorizedException('Missing Authorization header');
20
+ }
21
+ const [scheme, token] = authorization.split(' ');
22
+ if (scheme !== 'Bearer' || !token) {
23
+ throw new common_1.UnauthorizedException('Invalid Authorization header');
24
+ }
25
+ return token.trim();
26
+ }
27
+ let AccessTokenGuard = class AccessTokenGuard {
28
+ reflector;
29
+ authService;
30
+ constructor(reflector, authService) {
31
+ this.reflector = reflector;
32
+ this.authService = authService;
33
+ }
34
+ async canActivate(context) {
35
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_ROUTE, [context.getHandler(), context.getClass()]);
36
+ if (isPublic)
37
+ return true;
38
+ const request = context.switchToHttp().getRequest();
39
+ const token = extractBearerToken(request.headers.authorization);
40
+ const payload = await this.authService.verifyAccessToken(token);
41
+ request.user = {
42
+ username: payload.sub,
43
+ tokenId: payload.jti,
44
+ };
45
+ return true;
46
+ }
47
+ };
48
+ exports.AccessTokenGuard = AccessTokenGuard;
49
+ exports.AccessTokenGuard = AccessTokenGuard = __decorate([
50
+ (0, common_1.Injectable)(),
51
+ __metadata("design:paramtypes", [core_1.Reflector,
52
+ auth_service_1.AuthService])
53
+ ], AccessTokenGuard);
@@ -0,0 +1,18 @@
1
+ import { AuthService } from './auth.service';
2
+ type LoginBody = {
3
+ username?: unknown;
4
+ password?: unknown;
5
+ };
6
+ type RefreshBody = {
7
+ refreshToken?: unknown;
8
+ };
9
+ export declare class AuthController {
10
+ private readonly authService;
11
+ constructor(authService: AuthService);
12
+ login(body: LoginBody): Promise<import("./auth.types").AuthTokenPair>;
13
+ refresh(body: RefreshBody): Promise<import("./auth.types").AuthTokenPair>;
14
+ logout(body: RefreshBody): Promise<{
15
+ loggedOut: boolean;
16
+ }>;
17
+ }
18
+ export {};
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AuthController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const public_decorator_1 = require("./public.decorator");
18
+ const auth_service_1 = require("./auth.service");
19
+ function requiredString(value, field) {
20
+ if (typeof value !== 'string') {
21
+ throw new common_1.BadRequestException(`${field} is required`);
22
+ }
23
+ const trimmed = value.trim();
24
+ if (!trimmed) {
25
+ throw new common_1.BadRequestException(`${field} is required`);
26
+ }
27
+ return trimmed;
28
+ }
29
+ let AuthController = class AuthController {
30
+ authService;
31
+ constructor(authService) {
32
+ this.authService = authService;
33
+ }
34
+ async login(body) {
35
+ const username = requiredString(body.username, 'username');
36
+ const password = requiredString(body.password, 'password');
37
+ return this.authService.login(username, password);
38
+ }
39
+ async refresh(body) {
40
+ const refreshToken = requiredString(body.refreshToken, 'refreshToken');
41
+ return this.authService.refresh(refreshToken);
42
+ }
43
+ async logout(body) {
44
+ const refreshToken = requiredString(body.refreshToken, 'refreshToken');
45
+ await this.authService.revokeRefreshToken(refreshToken);
46
+ return { loggedOut: true };
47
+ }
48
+ };
49
+ exports.AuthController = AuthController;
50
+ __decorate([
51
+ (0, common_1.Post)('login'),
52
+ __param(0, (0, common_1.Body)()),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", [Object]),
55
+ __metadata("design:returntype", Promise)
56
+ ], AuthController.prototype, "login", null);
57
+ __decorate([
58
+ (0, common_1.Post)('refresh'),
59
+ __param(0, (0, common_1.Body)()),
60
+ __metadata("design:type", Function),
61
+ __metadata("design:paramtypes", [Object]),
62
+ __metadata("design:returntype", Promise)
63
+ ], AuthController.prototype, "refresh", null);
64
+ __decorate([
65
+ (0, common_1.Post)('logout'),
66
+ __param(0, (0, common_1.Body)()),
67
+ __metadata("design:type", Function),
68
+ __metadata("design:paramtypes", [Object]),
69
+ __metadata("design:returntype", Promise)
70
+ ], AuthController.prototype, "logout", null);
71
+ exports.AuthController = AuthController = __decorate([
72
+ (0, public_decorator_1.Public)(),
73
+ (0, common_1.Controller)('api/auth'),
74
+ __metadata("design:paramtypes", [auth_service_1.AuthService])
75
+ ], AuthController);
@@ -0,0 +1,2 @@
1
+ export declare class AuthModule {
2
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AuthModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const jwt_1 = require("@nestjs/jwt");
12
+ const auth_controller_1 = require("./auth.controller");
13
+ const auth_service_1 = require("./auth.service");
14
+ let AuthModule = class AuthModule {
15
+ };
16
+ exports.AuthModule = AuthModule;
17
+ exports.AuthModule = AuthModule = __decorate([
18
+ (0, common_1.Module)({
19
+ imports: [jwt_1.JwtModule.register({})],
20
+ controllers: [auth_controller_1.AuthController],
21
+ providers: [auth_service_1.AuthService],
22
+ exports: [auth_service_1.AuthService],
23
+ })
24
+ ], AuthModule);
@@ -0,0 +1,15 @@
1
+ import { JwtService } from '@nestjs/jwt';
2
+ import { ServerConfigService } from '../config/server-config.service';
3
+ import type { AccessTokenPayload, AuthTokenPair } from './auth.types';
4
+ export declare class AuthService {
5
+ private readonly jwtService;
6
+ private readonly serverConfigService;
7
+ private readonly refreshTokenStore;
8
+ constructor(jwtService: JwtService, serverConfigService: ServerConfigService);
9
+ login(username: string, password: string): Promise<AuthTokenPair>;
10
+ refresh(refreshToken: string): Promise<AuthTokenPair>;
11
+ revokeRefreshToken(refreshToken: string): Promise<void>;
12
+ verifyAccessToken(accessToken: string): Promise<AccessTokenPayload>;
13
+ private issueTokenPair;
14
+ private pruneExpiredRefreshTokens;
15
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AuthService = void 0;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const common_1 = require("@nestjs/common");
15
+ const jwt_1 = require("@nestjs/jwt");
16
+ const server_config_service_1 = require("../config/server-config.service");
17
+ function secureEqual(expected, actual) {
18
+ const expectedBuffer = Buffer.from(expected);
19
+ const actualBuffer = Buffer.from(actual);
20
+ if (expectedBuffer.length !== actualBuffer.length)
21
+ return false;
22
+ return (0, node_crypto_1.timingSafeEqual)(expectedBuffer, actualBuffer);
23
+ }
24
+ let AuthService = class AuthService {
25
+ jwtService;
26
+ serverConfigService;
27
+ refreshTokenStore = new Map();
28
+ constructor(jwtService, serverConfigService) {
29
+ this.jwtService = jwtService;
30
+ this.serverConfigService = serverConfigService;
31
+ }
32
+ async login(username, password) {
33
+ const config = await this.serverConfigService.load();
34
+ const auth = config.auth;
35
+ if (!secureEqual(auth.username, username) ||
36
+ !secureEqual(auth.password, password)) {
37
+ throw new common_1.UnauthorizedException('Invalid username or password');
38
+ }
39
+ return this.issueTokenPair(auth.username, auth);
40
+ }
41
+ async refresh(refreshToken) {
42
+ const config = await this.serverConfigService.load();
43
+ const auth = config.auth;
44
+ this.pruneExpiredRefreshTokens();
45
+ let payload;
46
+ try {
47
+ payload = this.jwtService.verify(refreshToken, {
48
+ secret: auth.refreshTokenSecret,
49
+ });
50
+ }
51
+ catch {
52
+ throw new common_1.UnauthorizedException('Invalid refresh token');
53
+ }
54
+ if (payload.type !== 'refresh' || !payload.sub || !payload.jti) {
55
+ throw new common_1.UnauthorizedException('Invalid refresh token');
56
+ }
57
+ const record = this.refreshTokenStore.get(payload.jti);
58
+ if (!record ||
59
+ record.username !== payload.sub ||
60
+ record.expiresAt <= Date.now()) {
61
+ this.refreshTokenStore.delete(payload.jti);
62
+ throw new common_1.UnauthorizedException('Refresh token expired or revoked');
63
+ }
64
+ this.refreshTokenStore.delete(payload.jti);
65
+ return this.issueTokenPair(payload.sub, auth);
66
+ }
67
+ async revokeRefreshToken(refreshToken) {
68
+ const config = await this.serverConfigService.load();
69
+ let payload = null;
70
+ try {
71
+ payload = this.jwtService.verify(refreshToken, {
72
+ secret: config.auth.refreshTokenSecret,
73
+ });
74
+ }
75
+ catch {
76
+ return;
77
+ }
78
+ if (payload?.jti) {
79
+ this.refreshTokenStore.delete(payload.jti);
80
+ }
81
+ }
82
+ async verifyAccessToken(accessToken) {
83
+ const config = await this.serverConfigService.load();
84
+ let payload;
85
+ try {
86
+ payload = this.jwtService.verify(accessToken, {
87
+ secret: config.auth.accessTokenSecret,
88
+ });
89
+ }
90
+ catch {
91
+ throw new common_1.UnauthorizedException('Invalid access token');
92
+ }
93
+ if (payload.type !== 'access' || !payload.sub || !payload.jti) {
94
+ throw new common_1.UnauthorizedException('Invalid access token');
95
+ }
96
+ return payload;
97
+ }
98
+ issueTokenPair(username, auth) {
99
+ this.pruneExpiredRefreshTokens();
100
+ const accessJti = (0, node_crypto_1.randomUUID)();
101
+ const refreshJti = (0, node_crypto_1.randomUUID)();
102
+ const now = Date.now();
103
+ const refreshExpiresAt = now + auth.refreshTokenTtlSeconds * 1000;
104
+ const accessToken = this.jwtService.sign({
105
+ sub: username,
106
+ type: 'access',
107
+ jti: accessJti,
108
+ }, {
109
+ secret: auth.accessTokenSecret,
110
+ expiresIn: auth.accessTokenTtlSeconds,
111
+ });
112
+ const refreshToken = this.jwtService.sign({
113
+ sub: username,
114
+ type: 'refresh',
115
+ jti: refreshJti,
116
+ }, {
117
+ secret: auth.refreshTokenSecret,
118
+ expiresIn: auth.refreshTokenTtlSeconds,
119
+ });
120
+ this.refreshTokenStore.set(refreshJti, {
121
+ username,
122
+ expiresAt: refreshExpiresAt,
123
+ });
124
+ return {
125
+ tokenType: 'Bearer',
126
+ accessToken,
127
+ refreshToken,
128
+ accessTokenExpiresIn: auth.accessTokenTtlSeconds,
129
+ refreshTokenExpiresIn: auth.refreshTokenTtlSeconds,
130
+ };
131
+ }
132
+ pruneExpiredRefreshTokens() {
133
+ const now = Date.now();
134
+ for (const [jti, record] of this.refreshTokenStore.entries()) {
135
+ if (record.expiresAt <= now) {
136
+ this.refreshTokenStore.delete(jti);
137
+ }
138
+ }
139
+ }
140
+ };
141
+ exports.AuthService = AuthService;
142
+ exports.AuthService = AuthService = __decorate([
143
+ (0, common_1.Injectable)(),
144
+ __metadata("design:paramtypes", [jwt_1.JwtService,
145
+ server_config_service_1.ServerConfigService])
146
+ ], AuthService);
@@ -0,0 +1,26 @@
1
+ import type { Request } from 'express';
2
+ export type AccessTokenPayload = {
3
+ sub: string;
4
+ type: 'access';
5
+ jti: string;
6
+ };
7
+ export type RefreshTokenPayload = {
8
+ sub: string;
9
+ type: 'refresh';
10
+ jti: string;
11
+ };
12
+ export type AuthTokenPair = {
13
+ tokenType: 'Bearer';
14
+ accessToken: string;
15
+ refreshToken: string;
16
+ accessTokenExpiresIn: number;
17
+ refreshTokenExpiresIn: number;
18
+ };
19
+ export type RequestUser = {
20
+ username: string;
21
+ tokenId: string;
22
+ };
23
+ export type AuthenticatedRequest = Request & {
24
+ requestId?: string;
25
+ user?: RequestUser;
26
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export declare const IS_PUBLIC_ROUTE = "isPublicRoute";
2
+ export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Public = exports.IS_PUBLIC_ROUTE = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.IS_PUBLIC_ROUTE = 'isPublicRoute';
6
+ const Public = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_ROUTE, true);
7
+ exports.Public = Public;
@@ -0,0 +1,30 @@
1
+ import { ChatService } from './chat.service';
2
+ type SubmitInputBody = {
3
+ input?: unknown;
4
+ };
5
+ type ApprovalBody = {
6
+ decision?: unknown;
7
+ };
8
+ export declare class ChatController {
9
+ private readonly chatService;
10
+ constructor(chatService: ChatService);
11
+ createSession(body: Record<string, unknown>): Promise<import("@memo-code/core", { with: { "resolution-mode": "import" } }).LiveSessionState>;
12
+ listProviders(): Promise<import("./chat.types").ChatProviderRecord[]>;
13
+ listRuntimes(query: Record<string, unknown>): Promise<import("./chat.types").ChatRuntimeListResponse>;
14
+ getSession(sessionId: string): Promise<import("@memo-code/core", { with: { "resolution-mode": "import" } }).LiveSessionState>;
15
+ deleteSession(sessionId: string): Promise<{
16
+ closed: true;
17
+ }>;
18
+ submitInput(sessionId: string, body: SubmitInputBody): Promise<import("./chat.types").SessionInputResult>;
19
+ cancel(sessionId: string): Promise<{
20
+ cancelled: boolean;
21
+ }>;
22
+ compact(sessionId: string): Promise<{
23
+ compacted: boolean;
24
+ keptMessages: number;
25
+ }>;
26
+ approvalDecision(sessionId: string, fingerprint: string, body: ApprovalBody): Promise<{
27
+ recorded: boolean;
28
+ }>;
29
+ }
30
+ export {};