@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
package/README.md CHANGED
@@ -5,20 +5,24 @@
5
5
  </div>
6
6
 
7
7
  <p align="center">
8
- <a href="README.zh.md">Chinese Documentation</a>
8
+ <a href="https://github.com/minorcell/memo-code/actions/workflows/ci.yml">
9
+ <img src="https://github.com/minorcell/memo-code/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI">
10
+ </a>
11
+ <a href="https://codecov.io/gh/minorcell/memo-code">
12
+ <img src="https://codecov.io/gh/minorcell/memo-code/graph/badge.svg" alt="Coverage">
13
+ </a>
14
+ <a href="https://www.npmjs.com/package/@memo-code/memo">
15
+ <img src="https://img.shields.io/npm/v/%40memo-code%2Fmemo" alt="npm version">
16
+ </a>
9
17
  </p>
10
18
 
11
19
  <p align="center">
12
- <a href="public/memo-code-cli-show-01.mp4">
13
- <img src="https://img.shields.io/badge/📹-Watch%20Demo%20Video-1a1a1a?style=for-the-badge" alt="Demo Video">
14
- </a>
20
+ <a href="README.zh.md">Chinese Documentation</a>
15
21
  </p>
16
22
 
17
- ---
18
-
19
- <video src="public/memo-code-cli-show-01.mp4" width="100%"></video>
23
+ <img src="public/demo.png" width="100%" alt="Memo Code demo">
20
24
 
21
- Built with Node.js + TypeScript. DeepSeek is the default provider, and OpenAI-compatible APIs are supported.
25
+ Built with Node.js + TypeScript. Memo works with OpenAI-compatible APIs.
22
26
 
23
27
  Memo Code is an open-source coding agent that lives in your terminal, understands repository context, and helps you move faster with natural-language commands.
24
28
 
@@ -36,10 +40,13 @@ yarn global add @memo-code/memo
36
40
  bun add -g @memo-code/memo
37
41
  ```
38
42
 
43
+ Note: npm distribution is prebuilt and already includes required runtime/web assets.
44
+ `pnpm run build` is only needed when you run Memo from source checkout in this repository.
45
+
39
46
  ### 2. Configure API Key
40
47
 
41
48
  ```bash
42
- export DEEPSEEK_API_KEY=your_key # or OPENAI_API_KEY
49
+ export OPENAI_API_KEY=your_key
43
50
  ```
44
51
 
45
52
  ### 3. Start
@@ -53,11 +60,30 @@ memo
53
60
 
54
61
  - Interactive mode: `memo` (default TUI; supports multi-turn chat, tool visualization, shortcuts).
55
62
  - Plain mode (non-TTY): `echo "your prompt" | memo` (plain text output; useful for scripts).
63
+ - One-shot mode: `memo --once "your prompt"` or `memo -once "your prompt"` (run one turn and exit; recommended with `--dangerous` in trusted repos).
64
+ - Continue latest local session: `memo --prev` or `memo -prev` (load latest session context for current directory).
56
65
  - Dangerous mode: `memo --dangerous` or `memo -d` (skip tool approvals; use carefully).
57
66
  - Version: `memo --version` or `memo -v`.
67
+ - Start web server: `memo web --host 127.0.0.1 --port 5494 --open` (npm package already includes web assets; source checkout needs `pnpm run build`).
58
68
  - Startup project guidance: if `AGENTS.md` exists in the startup root, Memo appends it to the system prompt automatically.
69
+ - Skills: Memo auto-discovers `SKILL.md` files and appends an available-skills section into the system prompt.
59
70
  - MCP activation selection: when MCP servers are configured, startup shows a multi-select to activate servers for this run.
60
- - Session titles: Memo generates a short title from the first user prompt and uses it in history/resume lists.
71
+ - Web app supports multi-workspace project management and concurrent live sessions (up to 20 per server process).
72
+
73
+ ## Web Console
74
+
75
+ ```bash
76
+ memo web --host 127.0.0.1 --port 5494 --open
77
+ ```
78
+
79
+ - npm distribution already bundles web server + web UI assets.
80
+ - if running from source checkout, build once with `pnpm run build`.
81
+ - Web auth config is stored in `~/.memo/server.yaml` by default (`MEMO_SERVER_CONFIG` can override path).
82
+ - On first startup, Memo creates this file with generated auth secrets and a random password.
83
+ - Login page uses `server.yaml` credentials (`auth.username` / `auth.password`).
84
+ - Sidebar includes dedicated entries for `MCP Servers` and `Skills`:
85
+ - MCP: create/edit/remove/login/logout and active toggles.
86
+ - Skills: create/delete, detail preview, and active toggles.
61
87
 
62
88
  ## Configuration
63
89
 
@@ -66,17 +92,42 @@ Location: `~/.memo/config.toml` (can be changed via `MEMO_HOME`).
66
92
  ### Provider Configuration
67
93
 
68
94
  ```toml
69
- current_provider = "deepseek"
70
-
71
- [[providers.deepseek]]
72
- name = "deepseek"
73
- env_api_key = "DEEPSEEK_API_KEY"
74
- model = "deepseek-chat"
75
- base_url = "https://api.deepseek.com"
95
+ current_provider = "openai_compatible"
96
+ auto_compact_threshold_percent = 80
97
+
98
+ [[providers.openai_compatible]]
99
+ name = "openai_compatible"
100
+ env_api_key = "OPENAI_API_KEY"
101
+ model = "gpt-4.1-mini"
102
+ base_url = "https://api.openai.com/v1"
76
103
  ```
77
104
 
78
105
  You can configure multiple providers and switch with `current_provider`.
79
106
 
107
+ Optional: override model capability profiles (local capability gating) without code changes:
108
+
109
+ ```toml
110
+ [model_profiles.gpt-5]
111
+ supports_parallel_tool_calls = true
112
+ supports_reasoning_content = true
113
+ context_window = 272000
114
+
115
+ [model_profiles."openai:gpt-5"]
116
+ supports_parallel_tool_calls = false # provider-specific override
117
+ ```
118
+
119
+ Context window policy:
120
+
121
+ - priority 1: `model_profiles."provider:model".context_window`
122
+ - priority 2: `model_profiles."<model>".context_window`
123
+ - fallback: `120000`
124
+
125
+ Auto compaction policy:
126
+
127
+ - threshold: `auto_compact_threshold_percent` (default `80`)
128
+ - trigger: estimated prompt tokens at step start reaches threshold
129
+ - frequency: at most once per turn
130
+
80
131
  ### MCP Tool Configuration
81
132
 
82
133
  Both local and remote MCP servers are supported:
@@ -96,6 +147,11 @@ url = "https://your-mcp-server.com/mcp"
96
147
  # Optional: default active MCP servers at startup
97
148
  active_mcp_servers = ["local_tools", "remote"]
98
149
  # Optional: use [] to start with no MCP servers active
150
+
151
+ # Optional: MCP OAuth credential storage mode: auto | keyring | file
152
+ mcp_oauth_credentials_store_mode = "auto"
153
+ # Optional: fixed localhost callback port for `memo mcp login`
154
+ # mcp_oauth_callback_port = 33333
99
155
  ```
100
156
 
101
157
  You can also manage MCP configs via CLI (aligned with Codex CLI style):
@@ -110,11 +166,54 @@ memo mcp add local_tools -- /path/to/mcp-server --flag
110
166
  # Add remote MCP server (streamable HTTP)
111
167
  memo mcp add remote --url https://your-mcp-server.com/mcp --bearer-token-env-var MCP_TOKEN
112
168
 
169
+ # OAuth login/logout for streamable_http servers
170
+ memo mcp login remote --scopes read,write
171
+ memo mcp logout remote
172
+
113
173
  # Show/remove
114
174
  memo mcp get remote
115
175
  memo mcp remove remote
116
176
  ```
117
177
 
178
+ `memo mcp list` includes `auth_status` for each server: `unsupported`, `not_logged_in`, `bearer_token`, or `oauth`.
179
+
180
+ ## Skills
181
+
182
+ Memo supports Agent Skills and auto-discovers `SKILL.md` files at startup.
183
+
184
+ ### Discovery Paths
185
+
186
+ - Project scope: project root `.<agent>/skills` directories (for example: `.agents/skills`, `.claude/skills`, `.codex/skills`)
187
+ - User scope: `$MEMO_HOME/skills` (or `~/.memo/skills`)
188
+ - Not scanned: `~/.xxx/skills` hidden directories outside Memo home
189
+
190
+ ### Minimal Skill File
191
+
192
+ ```md
193
+ ---
194
+ name: doc-writing
195
+ description: Generate and update technical documentation.
196
+ ---
197
+
198
+ # Doc Writing
199
+ ```
200
+
201
+ Memo reads `name` and `description` from frontmatter and injects each skill as metadata:
202
+
203
+ - `- <name>: <description> (file: <absolute-path-to-SKILL.md>)`
204
+
205
+ In prompts, users can explicitly mention a skill with `$skill-name` (for example, `$doc-writing`).
206
+
207
+ Optional: persist default active skills in `config.toml`:
208
+
209
+ ```toml
210
+ # Unset: all discovered skills are active by default.
211
+ # []: disable all skills by default.
212
+ active_skills = [
213
+ "/absolute/path/to/.codex/skills/doc-writing/SKILL.md"
214
+ ]
215
+ ```
216
+
118
217
  ## Built-in Tools
119
218
 
120
219
  - `exec_command` / `write_stdin`: execute shell commands (default shell family)
@@ -166,13 +265,14 @@ pnpm start
166
265
  ### Build
167
266
 
168
267
  ```bash
169
- pnpm run build # generates dist/index.js
268
+ pnpm run build # builds web-server/web-ui artifacts and generates dist/index.js
170
269
  ```
171
270
 
172
271
  ### Test
173
272
 
174
273
  ```bash
175
274
  pnpm test # all tests
275
+ pnpm run test:coverage # all tests with coverage (threshold: >=70%)
176
276
  pnpm run test:core # core package
177
277
  pnpm run test:tools # tools package
178
278
  pnpm run test:tui # tui package
@@ -188,7 +288,7 @@ npm run format:check # check format (CI)
188
288
  ## Project Structure
189
289
 
190
290
  ```text
191
- memo-cli/
291
+ memo-code/
192
292
  ├── packages/
193
293
  │ ├── core/ # core logic: Session, tool routing, config
194
294
  │ ├── tools/ # built-in tool implementations
@@ -200,13 +300,15 @@ memo-cli/
200
300
  ## CLI Shortcuts and Commands
201
301
 
202
302
  - `/help`: show help and shortcut guide.
203
- - `/models`: list available Provider/Model entries and switch with Enter; also supports direct selection like `/models deepseek`.
204
- - `/context`: open 80k/120k/150k/200k options and apply immediately.
303
+ - `/models`: list available Provider/Model entries and switch with Enter; also supports direct selection like `/models openai_compatible`.
304
+ - `/review <prNumber>`: run GitHub PR review and publish review comments (uses active GitHub MCP server first, then falls back to `gh` CLI).
305
+ - `/compact`: manually compact current session context.
205
306
  - `/mcp`: show configured MCP servers in current session.
206
307
  - `resume` history: type `resume` to list and load past sessions for current directory.
207
308
  - Exit and clear: `exit` / `/exit`, `Ctrl+L` for new session, `Esc Esc` to cancel current run or clear input.
208
309
  - **Tool approval**: risky operations open an approval dialog with `once`/`session`/`deny`.
209
310
  - **Approval reminder**: risky approval prompts ring a bell and attempt a desktop notification in interactive TUI.
311
+ - **Context percent**: footer updates on each step (not just turn end), based on next-step prompt token estimate.
210
312
 
211
313
  > Session logs are written only when a session contains user messages, to avoid empty files.
212
314
 
@@ -220,7 +322,8 @@ memo-cli/
220
322
 
221
323
  ## Related Docs
222
324
 
223
- - [User Guide](./site/content/docs/README.md) - User-facing docs by module
325
+ - [User Guide (EN)](./site/content/docs/en/README.mdx) - User-facing docs by module
326
+ - [用户指南 (ZH)](./site/content/docs/zh/README.mdx) - 中文文档入口
224
327
  - [Core Architecture](./docs/core.md) - Core implementation details
225
328
  - [CLI Adaptation History](./docs/cli-update.md) - Historical migration notes (Tool Use API)
226
329
  - [Contributing](./CONTRIBUTING.md) - Contribution guide
package/README.zh.md CHANGED
@@ -5,16 +5,20 @@
5
5
  </div>
6
6
 
7
7
  <p align="center">
8
- <a href="public/memo-code-cli-show-01.mp4">
9
- <img src="https://img.shields.io/badge/📹-观看演示视频-1a1a1a?style=for-the-badge" alt="Demo Video">
8
+ <a href="https://github.com/minorcell/memo-code/actions/workflows/ci.yml">
9
+ <img src="https://github.com/minorcell/memo-code/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI">
10
+ </a>
11
+ <a href="https://codecov.io/gh/minorcell/memo-code">
12
+ <img src="https://codecov.io/gh/minorcell/memo-code/graph/badge.svg" alt="Coverage">
13
+ </a>
14
+ <a href="https://www.npmjs.com/package/@memo-code/memo">
15
+ <img src="https://img.shields.io/npm/v/%40memo-code%2Fmemo" alt="npm version">
10
16
  </a>
11
17
  </p>
12
18
 
13
- ---
14
-
15
- <video src="public/memo-code-cli-show-01.mp4" width="100%"></video>
19
+ <img src="public/demo.png" width="100%" alt="Memo Code 演示图">
16
20
 
17
- 基于 Node.js + TypeScript,默认对接 DeepSeek,兼容 OpenAI API
21
+ 基于 Node.js + TypeScript,兼容 OpenAI API 格式。
18
22
 
19
23
  Memo Code 是一个开源的终端编码代理,能够理解项目上下文,并通过自然语言协助你更快完成编码、排障和日常开发任务。
20
24
 
@@ -32,28 +36,50 @@ yarn global add @memo-code/memo
32
36
  bun add -g @memo-code/memo
33
37
  ```
34
38
 
39
+ 说明:npm 分发包是预构建产物,已包含运行所需的 CLI/Web 资源。
40
+ 只有在直接运行本仓库源码时,才需要执行 `pnpm run build`。
41
+
35
42
  ### 2. 配置 API Key
36
43
 
37
44
  ```bash
38
- export DEEPSEEK_API_KEY=your_key # 或 OPENAI_API_KEY
45
+ export OPENAI_API_KEY=your_key
39
46
  ```
40
47
 
41
48
  ### 3. 启动使用
42
49
 
43
50
  ```bash
44
51
  memo
45
- # 首次运行会引导配置 provider/model,并(保存到 ~/.memo/config.toml
52
+ # 首次运行会引导配置 provider/model,并保存到 ~/.memo/config.toml
46
53
  ```
47
54
 
48
55
  ## 使用方式
49
56
 
50
57
  - 交互式:`memo`(默认 TUI,支持多轮、工具可视化、快捷键)。
51
58
  - 非交互纯文本模式(非 TTY):`echo "你的问题" | memo`(适合脚本)。
59
+ - 单次执行:`memo --once "你的问题"` 或 `memo -once "你的问题"`(执行一轮后退出;在可信仓库建议搭配 `--dangerous`)。
60
+ - 继续最近会话:`memo --prev` 或 `memo -prev`(加载当前目录最近会话上下文)。
52
61
  - 危险模式:`memo --dangerous` 或 `memo -d`(跳过工具审批,谨慎使用)。
53
62
  - 查看版本:`memo --version` 或 `memo -v`。
63
+ - 启动 Web 服务:`memo web --host 127.0.0.1 --port 5494 --open`(npm 分发包已包含 web 资源;源码运行需先 `pnpm run build`)。
54
64
  - 启动目录约定:若启动根目录存在 `AGENTS.md`,Memo 会自动将其拼接进系统提示词。
65
+ - Skills:Memo 会自动发现 `SKILL.md` 并把可用 skills 列表拼接进系统提示词。
55
66
  - MCP 启动选择:当配置了 MCP server 时,启动会弹出多选以决定本次会话激活哪些 server。
56
- - 会话标题:Memo 会基于首条用户输入生成简短标题,并在历史/恢复列表中展示。
67
+ - Web app 支持多 workspace 项目管理,并可并发运行多个会话(单个 server 进程上限 20)。
68
+
69
+ ## Web 控制台
70
+
71
+ ```bash
72
+ memo web --host 127.0.0.1 --port 5494 --open
73
+ ```
74
+
75
+ - npm 分发包已内置 web server 与 web UI 资源。
76
+ - 若从源码仓库运行,请先执行一次 `pnpm run build`。
77
+ - Web 认证配置默认存储在 `~/.memo/server.yaml`(可通过 `MEMO_SERVER_CONFIG` 覆盖路径)。
78
+ - 首次启动会自动生成该文件,包含认证密钥和随机初始密码。
79
+ - 登录页使用 `server.yaml` 中的 `auth.username` / `auth.password`。
80
+ - 侧边栏包含独立的 `MCP Servers` 与 `Skills` 入口:
81
+ - MCP:创建/编辑/删除/登录/登出与激活开关。
82
+ - Skills:创建/删除、详情预览与激活开关。
57
83
 
58
84
  ## 配置文件
59
85
 
@@ -62,13 +88,13 @@ memo
62
88
  ### Provider 配置
63
89
 
64
90
  ```toml
65
- current_provider = "deepseek"
91
+ current_provider = "openai_compatible"
66
92
 
67
- [[providers.deepseek]]
68
- name = "deepseek"
69
- env_api_key = "DEEPSEEK_API_KEY"
70
- model = "deepseek-chat"
71
- base_url = "https://api.deepseek.com"
93
+ [[providers.openai_compatible]]
94
+ name = "openai_compatible"
95
+ env_api_key = "OPENAI_API_KEY"
96
+ model = "gpt-4.1-mini"
97
+ base_url = "https://api.openai.com/v1"
72
98
  ```
73
99
 
74
100
  支持配置多个 Provider,通过 `current_provider` 切换。
@@ -92,6 +118,11 @@ url = "https://your-mcp-server.com/mcp"
92
118
  # 可选:启动时默认激活的 MCP server
93
119
  active_mcp_servers = ["local_tools", "remote"]
94
120
  # 可选:设为 [] 表示启动时不激活任何 MCP server
121
+
122
+ # 可选:MCP OAuth 凭据存储模式:auto | keyring | file
123
+ mcp_oauth_credentials_store_mode = "auto"
124
+ # 可选:为 `memo mcp login` 指定固定本地回调端口
125
+ # mcp_oauth_callback_port = 33333
95
126
  ```
96
127
 
97
128
  也可以通过 CLI 管理 MCP 配置(对齐 Codex CLI 风格):
@@ -106,11 +137,54 @@ memo mcp add local_tools -- /path/to/mcp-server --flag
106
137
  # 添加远程 MCP server(streamable HTTP)
107
138
  memo mcp add remote --url https://your-mcp-server.com/mcp --bearer-token-env-var MCP_TOKEN
108
139
 
140
+ # streamable_http server 的 OAuth 登录/登出
141
+ memo mcp login remote --scopes read,write
142
+ memo mcp logout remote
143
+
109
144
  # 查看/删除
110
145
  memo mcp get remote
111
146
  memo mcp remove remote
112
147
  ```
113
148
 
149
+ `memo mcp list` 会输出每个 server 的 `auth_status`:`unsupported`、`not_logged_in`、`bearer_token`、`oauth`。
150
+
151
+ ## Skills
152
+
153
+ Memo 支持 Agent Skills,并会在启动时自动发现 `SKILL.md`。
154
+
155
+ ### 发现路径
156
+
157
+ - 项目级:项目根目录下 `.<agent>/skills`(例如:`.agents/skills`、`.claude/skills`、`.codex/skills`)
158
+ - 用户级:`$MEMO_HOME/skills`(或 `~/.memo/skills`)
159
+ - 不扫描:Memo Home 之外的 `~/.xxx/skills` 隐藏目录
160
+
161
+ ### 最小 Skill 文件示例
162
+
163
+ ```md
164
+ ---
165
+ name: doc-writing
166
+ description: Generate and update technical documentation.
167
+ ---
168
+
169
+ # Doc Writing
170
+ ```
171
+
172
+ Memo 会读取 frontmatter 的 `name` 和 `description`,并以元数据形式注入:
173
+
174
+ - `- <name>: <description> (file: <absolute-path-to-SKILL.md>)`
175
+
176
+ 在对话里可通过 `$skill-name` 显式提及某个 skill(例如 `$doc-writing`)。
177
+
178
+ 可选:在 `config.toml` 中持久化默认激活 skills:
179
+
180
+ ```toml
181
+ # 未设置:默认激活所有已发现 skills
182
+ # []:默认不激活任何 skill
183
+ active_skills = [
184
+ "/absolute/path/to/.codex/skills/doc-writing/SKILL.md"
185
+ ]
186
+ ```
187
+
114
188
  ## 内置工具
115
189
 
116
190
  - `exec_command` / `write_stdin`:执行命令(默认执行工具族)
@@ -162,13 +236,14 @@ pnpm start
162
236
  ### 构建
163
237
 
164
238
  ```bash
165
- pnpm run build # 生成 dist/index.js
239
+ pnpm run build # 构建 web-server/web-ui 产物并生成 dist/index.js
166
240
  ```
167
241
 
168
242
  ### 测试
169
243
 
170
244
  ```bash
171
245
  pnpm test # 全量测试
246
+ pnpm run test:coverage # 带覆盖率测试(阈值:>=70%)
172
247
  pnpm run test:core # 测试 core 包
173
248
  pnpm run test:tools # 测试 tools 包
174
249
  pnpm run test:tui # 测试 tui 包
@@ -184,7 +259,7 @@ npm run format:check # 检查格式(CI)
184
259
  ## 项目结构
185
260
 
186
261
  ```
187
- memo-cli/
262
+ memo-code/
188
263
  ├── packages/
189
264
  │ ├── core/ # 核心逻辑:Session、工具路由、配置
190
265
  │ ├── tools/ # 内置工具实现
@@ -196,8 +271,9 @@ memo-cli/
196
271
  ## CLI 快捷键与命令
197
272
 
198
273
  - `/help`:显示帮助与快捷键说明。
199
- - `/models`:列出现有 Provider/Model,回车切换;支持直接 `/models deepseek` 精确选择。
274
+ - `/models`:列出现有 Provider/Model,回车切换;支持直接 `/models openai_compatible` 精确选择。
200
275
  - `/context`:弹出 80k/120k/150k/200k 选项并立即设置上限。
276
+ - `/review <prNumber>`:执行 GitHub PR 审查并直接发布评论(优先使用已激活的 GitHub MCP,失败时回退 `gh` CLI)。
201
277
  - `/mcp`:查看当前会话加载的 MCP 服务器配置。
202
278
  - `resume` 历史:输入 `resume` 查看并加载本目录的历史会话。
203
279
  - 退出与清屏:`exit` / `/exit`,`Ctrl+L` 新会话,`Esc Esc` 取消运行或清空输入。
@@ -216,7 +292,8 @@ memo-cli/
216
292
 
217
293
  ## 相关文档
218
294
 
219
- - [用户指南](./site/content/docs/README.md) - 面向使用者的分模块说明
295
+ - [User Guide (EN)](./site/content/docs/en/README.mdx) - 英文文档入口
296
+ - [用户指南 (ZH)](./site/content/docs/zh/README.mdx) - 中文文档入口
220
297
  - [Core 架构](./docs/core.md) - 核心实现详解
221
298
  - [CLI 适配更新](./docs/cli-update.md) - Tool Use API 迁移说明
222
299
  - [开发指南](./CONTRIBUTING.md) - 贡献指南