@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.
- package/README.md +125 -22
- package/README.zh.md +96 -19
- package/dist/index.js +123 -119
- package/dist/task-prompts/init_agents.md +40 -0
- package/dist/task-prompts/review_pull_request.md +53 -0
- package/dist/web/server/app.controller.d.ts +6 -0
- package/dist/web/server/app.controller.js +33 -0
- package/dist/web/server/app.module.d.ts +4 -0
- package/dist/web/server/app.module.js +61 -0
- package/dist/web/server/auth/access-token.guard.d.ts +9 -0
- package/dist/web/server/auth/access-token.guard.js +53 -0
- package/dist/web/server/auth/auth.controller.d.ts +18 -0
- package/dist/web/server/auth/auth.controller.js +75 -0
- package/dist/web/server/auth/auth.module.d.ts +2 -0
- package/dist/web/server/auth/auth.module.js +24 -0
- package/dist/web/server/auth/auth.service.d.ts +15 -0
- package/dist/web/server/auth/auth.service.js +146 -0
- package/dist/web/server/auth/auth.types.d.ts +26 -0
- package/dist/web/server/auth/auth.types.js +2 -0
- package/dist/web/server/auth/public.decorator.d.ts +2 -0
- package/dist/web/server/auth/public.decorator.js +7 -0
- package/dist/web/server/chat/chat.controller.d.ts +30 -0
- package/dist/web/server/chat/chat.controller.js +150 -0
- package/dist/web/server/chat/chat.module.d.ts +2 -0
- package/dist/web/server/chat/chat.module.js +26 -0
- package/dist/web/server/chat/chat.service.d.ts +61 -0
- package/dist/web/server/chat/chat.service.js +847 -0
- package/dist/web/server/chat/chat.types.d.ts +38 -0
- package/dist/web/server/chat/chat.types.js +2 -0
- package/dist/web/server/common/constants.d.ts +1 -0
- package/dist/web/server/common/constants.js +4 -0
- package/dist/web/server/common/filters/api-error.filter.d.ts +7 -0
- package/dist/web/server/common/filters/api-error.filter.js +95 -0
- package/dist/web/server/common/interceptors/api-response.interceptor.d.ts +15 -0
- package/dist/web/server/common/interceptors/api-response.interceptor.js +51 -0
- package/dist/web/server/common/middleware/request-logging.middleware.d.ts +7 -0
- package/dist/web/server/common/middleware/request-logging.middleware.js +42 -0
- package/dist/web/server/config/memo-config.service.d.ts +7 -0
- package/dist/web/server/config/memo-config.service.js +106 -0
- package/dist/web/server/config/memo-config.types.d.ts +6 -0
- package/dist/web/server/config/memo-config.types.js +2 -0
- package/dist/web/server/config/server-config.module.d.ts +2 -0
- package/dist/web/server/config/server-config.module.js +22 -0
- package/dist/web/server/config/server-config.service.d.ts +14 -0
- package/dist/web/server/config/server-config.service.js +326 -0
- package/dist/web/server/config/server-config.service.test.d.ts +1 -0
- package/dist/web/server/config/server-config.service.test.js +193 -0
- package/dist/web/server/config/server-config.types.d.ts +27 -0
- package/dist/web/server/config/server-config.types.js +2 -0
- package/dist/web/server/main.d.ts +1 -0
- package/dist/web/server/main.js +19 -0
- package/dist/web/server/mcp/mcp.controller.d.ts +38 -0
- package/dist/web/server/mcp/mcp.controller.js +126 -0
- package/dist/web/server/mcp/mcp.module.d.ts +2 -0
- package/dist/web/server/mcp/mcp.module.js +22 -0
- package/dist/web/server/mcp/mcp.service.d.ts +25 -0
- package/dist/web/server/mcp/mcp.service.js +56 -0
- package/dist/web/server/package.json +3 -0
- package/dist/web/server/server.d.ts +18 -0
- package/dist/web/server/server.js +142 -0
- package/dist/web/server/sessions/sessions.controller.d.ts +8 -0
- package/dist/web/server/sessions/sessions.controller.js +59 -0
- package/dist/web/server/sessions/sessions.module.d.ts +2 -0
- package/dist/web/server/sessions/sessions.module.js +24 -0
- package/dist/web/server/sessions/sessions.service.d.ts +22 -0
- package/dist/web/server/sessions/sessions.service.js +217 -0
- package/dist/web/server/sessions/sessions.types.d.ts +18 -0
- package/dist/web/server/sessions/sessions.types.js +2 -0
- package/dist/web/server/skills/skills.controller.d.ts +31 -0
- package/dist/web/server/skills/skills.controller.js +86 -0
- package/dist/web/server/skills/skills.module.d.ts +2 -0
- package/dist/web/server/skills/skills.module.js +24 -0
- package/dist/web/server/skills/skills.service.d.ts +38 -0
- package/dist/web/server/skills/skills.service.js +97 -0
- package/dist/web/server/stream/stream.module.d.ts +2 -0
- package/dist/web/server/stream/stream.module.js +20 -0
- package/dist/web/server/stream/stream.service.d.ts +26 -0
- package/dist/web/server/stream/stream.service.js +166 -0
- package/dist/web/server/tsconfig.build.tsbuildinfo +1 -0
- package/dist/web/server/workspaces/workspaces.module.d.ts +2 -0
- package/dist/web/server/workspaces/workspaces.module.js +20 -0
- package/dist/web/server/workspaces/workspaces.service.d.ts +38 -0
- package/dist/web/server/workspaces/workspaces.service.js +378 -0
- package/dist/web/server/workspaces/workspaces.types.d.ts +1 -0
- package/dist/web/server/workspaces/workspaces.types.js +2 -0
- package/dist/web/server/workspaces/workspaces.utils.d.ts +1 -0
- package/dist/web/server/workspaces/workspaces.utils.js +9 -0
- package/dist/web/server/ws/rpc-router.service.d.ts +20 -0
- package/dist/web/server/ws/rpc-router.service.js +275 -0
- package/dist/web/server/ws/session-runtime-registry.service.d.ts +37 -0
- package/dist/web/server/ws/session-runtime-registry.service.js +118 -0
- package/dist/web/server/ws/ws-event-bus.service.d.ts +5 -0
- package/dist/web/server/ws/ws-event-bus.service.js +27 -0
- package/dist/web/server/ws/ws-gateway.module.d.ts +2 -0
- package/dist/web/server/ws/ws-gateway.module.js +42 -0
- package/dist/web/server/ws/ws-gateway.service.d.ts +42 -0
- package/dist/web/server/ws/ws-gateway.service.js +473 -0
- package/dist/web/server/ws/ws.errors.d.ts +8 -0
- package/dist/web/server/ws/ws.errors.js +16 -0
- package/dist/web/server/ws/ws.types.d.ts +34 -0
- package/dist/web/server/ws/ws.types.js +2 -0
- package/dist/web/ui/assets/_baseUniq-kMerwpPq.js +1 -0
- package/dist/web/ui/assets/abap-BdImnpbu.js +1 -0
- package/dist/web/ui/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/web/ui/assets/ada-bCR0ucgS.js +1 -0
- package/dist/web/ui/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/web/ui/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/web/ui/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/web/ui/assets/apache-Pmp26Uib.js +1 -0
- package/dist/web/ui/assets/apex-D8_7TLub.js +1 -0
- package/dist/web/ui/assets/apl-dKokRX4l.js +1 -0
- package/dist/web/ui/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/web/ui/assets/ara-BRHolxvo.js +1 -0
- package/dist/web/ui/assets/arc-BulUmzON.js +1 -0
- package/dist/web/ui/assets/architectureDiagram-VXUJARFQ-CkXEUKP9.js +36 -0
- package/dist/web/ui/assets/asciidoc-Dv7Oe6Be.js +1 -0
- package/dist/web/ui/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/web/ui/assets/astro-CbQHKStN.js +1 -0
- package/dist/web/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/web/ui/assets/awk-DMzUqQB5.js +1 -0
- package/dist/web/ui/assets/ayu-dark-CMjwMIkn.js +1 -0
- package/dist/web/ui/assets/ayu-light-C47S-Tmv.js +1 -0
- package/dist/web/ui/assets/ayu-mirage-CjoLj4QM.js +1 -0
- package/dist/web/ui/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/web/ui/assets/bat-BkioyH1T.js +1 -0
- package/dist/web/ui/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/web/ui/assets/berry-uYugtg8r.js +1 -0
- package/dist/web/ui/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/web/ui/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/web/ui/assets/blade-D4QpJJKB.js +1 -0
- package/dist/web/ui/assets/blockDiagram-VD42YOAC-DXcW7NDi.js +122 -0
- package/dist/web/ui/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/web/ui/assets/c-BIGW1oBm.js +1 -0
- package/dist/web/ui/assets/c3-VCDPK7BO.js +1 -0
- package/dist/web/ui/assets/c4Diagram-YG6GDRKO-QrajWDN7.js +10 -0
- package/dist/web/ui/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/web/ui/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/web/ui/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/web/ui/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/web/ui/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/web/ui/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/web/ui/assets/channel-DcFyxfzD.js +1 -0
- package/dist/web/ui/assets/chunk-4BX2VUAB-CzB06K-m.js +1 -0
- package/dist/web/ui/assets/chunk-55IACEB6-e5LXEkOB.js +1 -0
- package/dist/web/ui/assets/chunk-B4BG7PRW-YVg5pH4D.js +165 -0
- package/dist/web/ui/assets/chunk-DI55MBZ5-Carl7-xm.js +220 -0
- package/dist/web/ui/assets/chunk-FMBD7UC4-06dN5sRQ.js +15 -0
- package/dist/web/ui/assets/chunk-QN33PNHL-Cl3zdZ7K.js +1 -0
- package/dist/web/ui/assets/chunk-QZHKN3VN-CDOQBeOx.js +1 -0
- package/dist/web/ui/assets/chunk-TZMSLE5B-DWeaVk_X.js +1 -0
- package/dist/web/ui/assets/clarity-D53aC0YG.js +1 -0
- package/dist/web/ui/assets/classDiagram-2ON5EDUG-DmyEwwBr.js +1 -0
- package/dist/web/ui/assets/classDiagram-v2-WZHVMYZB-DmyEwwBr.js +1 -0
- package/dist/web/ui/assets/clojure-P80f7IUj.js +1 -0
- package/dist/web/ui/assets/clone-DZ5SCP6k.js +1 -0
- package/dist/web/ui/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/web/ui/assets/cobol-nwyudZeR.js +1 -0
- package/dist/web/ui/assets/code-block-OCS4YCEC-DmdcLUqO.js +2 -0
- package/dist/web/ui/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/web/ui/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/web/ui/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/web/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/web/ui/assets/coq-DkFqJrB1.js +1 -0
- package/dist/web/ui/assets/cose-bilkent-S5V4N54A-CDHjR7aY.js +1 -0
- package/dist/web/ui/assets/cpp-CofmeUqb.js +1 -0
- package/dist/web/ui/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/web/ui/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/web/ui/assets/css-DPfMkruS.js +1 -0
- package/dist/web/ui/assets/csv-fuZLfV_i.js +1 -0
- package/dist/web/ui/assets/cue-D82EKSYY.js +1 -0
- package/dist/web/ui/assets/cypher-COkxafJQ.js +1 -0
- package/dist/web/ui/assets/cytoscape.esm-5J0xJHOV.js +321 -0
- package/dist/web/ui/assets/d-85-TOEBH.js +1 -0
- package/dist/web/ui/assets/dagre-6UL2VRFP-BvAH8ysH.js +4 -0
- package/dist/web/ui/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/web/ui/assets/dart-CF10PKvl.js +1 -0
- package/dist/web/ui/assets/dax-CEL-wOlO.js +1 -0
- package/dist/web/ui/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/web/ui/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/web/ui/assets/diagram-PSM6KHXK-CKk6ZAaV.js +24 -0
- package/dist/web/ui/assets/diagram-QEK2KX5R-Ewj4cQfm.js +43 -0
- package/dist/web/ui/assets/diagram-S2PKOQOG-B-i75ELR.js +24 -0
- package/dist/web/ui/assets/diff-D97Zzqfu.js +1 -0
- package/dist/web/ui/assets/docker-BcOcwvcX.js +1 -0
- package/dist/web/ui/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/web/ui/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/web/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/web/ui/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/web/ui/assets/edge-BkV0erSs.js +1 -0
- package/dist/web/ui/assets/elixir-CDX3lj18.js +1 -0
- package/dist/web/ui/assets/elm-DbKCFpqz.js +1 -0
- package/dist/web/ui/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/web/ui/assets/erDiagram-Q2GNP2WA-BMe1fyY7.js +60 -0
- package/dist/web/ui/assets/erb-CgJxNhIT.js +1 -0
- package/dist/web/ui/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/web/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/web/ui/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/web/ui/assets/fennel-BYunw83y.js +1 -0
- package/dist/web/ui/assets/fish-BvzEVeQv.js +1 -0
- package/dist/web/ui/assets/flowDiagram-NV44I4VS-DTOpgGDg.js +162 -0
- package/dist/web/ui/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/web/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/web/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/web/ui/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/web/ui/assets/ganttDiagram-JELNMOA3-DdrlqPr-.js +267 -0
- package/dist/web/ui/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/web/ui/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/web/ui/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/web/ui/assets/genie-D0YGMca9.js +1 -0
- package/dist/web/ui/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/web/ui/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/web/ui/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/web/ui/assets/gitGraphDiagram-NY62KEGX-DOpYoqH8.js +65 -0
- package/dist/web/ui/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/web/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/web/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/web/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/web/ui/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/web/ui/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/web/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/web/ui/assets/gleam-BspZqrRM.js +1 -0
- package/dist/web/ui/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/web/ui/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/web/ui/assets/glsl-DplSGwfg.js +1 -0
- package/dist/web/ui/assets/gn-n2N0HUVH.js +1 -0
- package/dist/web/ui/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/web/ui/assets/go-CxLEBnE3.js +1 -0
- package/dist/web/ui/assets/graph-DNq5-vTB.js +1 -0
- package/dist/web/ui/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/web/ui/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/web/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/web/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/web/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/web/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/web/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/web/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/web/ui/assets/hack-CaT9iCJl.js +1 -0
- package/dist/web/ui/assets/haml-B8DHNrY2.js +1 -0
- package/dist/web/ui/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/web/ui/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/web/ui/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/web/ui/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/web/ui/assets/hjson-D5-asLiD.js +1 -0
- package/dist/web/ui/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/web/ui/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/web/ui/assets/houston-DnULxvSX.js +1 -0
- package/dist/web/ui/assets/html-GMplVEZG.js +1 -0
- package/dist/web/ui/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/web/ui/assets/http-jrhK8wxY.js +1 -0
- package/dist/web/ui/assets/hurl-irOxFIW8.js +1 -0
- package/dist/web/ui/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/web/ui/assets/hy-DFXneXwc.js +1 -0
- package/dist/web/ui/assets/imba-DGztddWO.js +1 -0
- package/dist/web/ui/assets/index-B3TLzmaO.js +441 -0
- package/dist/web/ui/assets/index-BSSBc2rS.css +1 -0
- package/dist/web/ui/assets/infoDiagram-WHAUD3N6-D3Wwcqmd.js +2 -0
- package/dist/web/ui/assets/ini-BEwlwnbL.js +1 -0
- package/dist/web/ui/assets/init-Gi6I4Gst.js +1 -0
- package/dist/web/ui/assets/java-CylS5w8V.js +1 -0
- package/dist/web/ui/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/web/ui/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/web/ui/assets/jison-wvAkD_A8.js +1 -0
- package/dist/web/ui/assets/journeyDiagram-XKPGCS4Q-BKDrlvIB.js +139 -0
- package/dist/web/ui/assets/json-Cp-IABpG.js +1 -0
- package/dist/web/ui/assets/json5-C9tS-k6U.js +1 -0
- package/dist/web/ui/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/web/ui/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/web/ui/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/web/ui/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/web/ui/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/web/ui/assets/julia-CxzCAyBv.js +1 -0
- package/dist/web/ui/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/web/ui/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/web/ui/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/web/ui/assets/kanban-definition-3W4ZIXB7-Dj6sXTJI.js +89 -0
- package/dist/web/ui/assets/katex-DhXJpUyf.js +261 -0
- package/dist/web/ui/assets/kdl-DV7GczEv.js +1 -0
- package/dist/web/ui/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/web/ui/assets/kusto-DZf3V79B.js +1 -0
- package/dist/web/ui/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/web/ui/assets/latex-DGMBWnxU.js +1 -0
- package/dist/web/ui/assets/layout-4XvXY0m8.js +1 -0
- package/dist/web/ui/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/web/ui/assets/less-B1dDrJ26.js +1 -0
- package/dist/web/ui/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/web/ui/assets/linear-CUPS720l.js +1 -0
- package/dist/web/ui/assets/liquid-DYVedYrR.js +1 -0
- package/dist/web/ui/assets/llvm-BtvRca6l.js +1 -0
- package/dist/web/ui/assets/log-2UxHyX5q.js +1 -0
- package/dist/web/ui/assets/logo-BtOb2qkB.js +1 -0
- package/dist/web/ui/assets/lua-BaeVxFsk.js +1 -0
- package/dist/web/ui/assets/luau-C-HG3fhB.js +1 -0
- package/dist/web/ui/assets/make-CHLpvVh8.js +1 -0
- package/dist/web/ui/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/web/ui/assets/marko-DZsq8hO1.js +1 -0
- package/dist/web/ui/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/web/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/web/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/web/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/web/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/web/ui/assets/matlab-D7o27uSR.js +1 -0
- package/dist/web/ui/assets/mdc-DUICxH0z.js +1 -0
- package/dist/web/ui/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/web/ui/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/web/ui/assets/min-KWXImKVx.js +1 -0
- package/dist/web/ui/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/web/ui/assets/min-light-CTRr51gU.js +1 -0
- package/dist/web/ui/assets/mindmap-definition-VGOIOE7T-D9ty43l7.js +68 -0
- package/dist/web/ui/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/web/ui/assets/mojo-B93PlW-d.js +1 -0
- package/dist/web/ui/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/web/ui/assets/moonbit-Ba13S78F.js +1 -0
- package/dist/web/ui/assets/move-IF9eRakj.js +1 -0
- package/dist/web/ui/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/web/ui/assets/nextflow-BrzmwbiE.js +1 -0
- package/dist/web/ui/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/web/ui/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/web/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/web/ui/assets/nim-CVrawwO9.js +1 -0
- package/dist/web/ui/assets/nix-CwoSXNpI.js +1 -0
- package/dist/web/ui/assets/nord-Ddv68eIx.js +1 -0
- package/dist/web/ui/assets/nushell-C-sUppwS.js +1 -0
- package/dist/web/ui/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/web/ui/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/web/ui/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/web/ui/assets/odin-BBf5iR-q.js +1 -0
- package/dist/web/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/web/ui/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/web/ui/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/web/ui/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/web/ui/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/web/ui/assets/perl-C0TMdlhV.js +1 -0
- package/dist/web/ui/assets/php-Dhbhpdrm.js +1 -0
- package/dist/web/ui/assets/pieDiagram-ADFJNKIX-BlMxxSdO.js +30 -0
- package/dist/web/ui/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/web/ui/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/web/ui/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/web/ui/assets/po-BTJTHyun.js +1 -0
- package/dist/web/ui/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/web/ui/assets/polar-C0HS_06l.js +1 -0
- package/dist/web/ui/assets/postcss-CXtECtnM.js +1 -0
- package/dist/web/ui/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/web/ui/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/web/ui/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/web/ui/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/web/ui/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/web/ui/assets/pug-CGlum2m_.js +1 -0
- package/dist/web/ui/assets/puppet-BMWR74SV.js +1 -0
- package/dist/web/ui/assets/purescript-CklMAg4u.js +1 -0
- package/dist/web/ui/assets/python-B6aJPvgy.js +1 -0
- package/dist/web/ui/assets/qml-3beO22l8.js +1 -0
- package/dist/web/ui/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/web/ui/assets/qss-IeuSbFQv.js +1 -0
- package/dist/web/ui/assets/quadrantDiagram-AYHSOK5B-Cam0yXvU.js +7 -0
- package/dist/web/ui/assets/r-Dspwwk_N.js +1 -0
- package/dist/web/ui/assets/racket-BqYA7rlc.js +1 -0
- package/dist/web/ui/assets/raku-DXvB9xmW.js +1 -0
- package/dist/web/ui/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/web/ui/assets/red-bN70gL4F.js +1 -0
- package/dist/web/ui/assets/reg-C-SQnVFl.js +1 -0
- package/dist/web/ui/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/web/ui/assets/rel-C3B-1QV4.js +1 -0
- package/dist/web/ui/assets/requirementDiagram-UZGBJVZJ-D_yH3UAt.js +64 -0
- package/dist/web/ui/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/web/ui/assets/ron-BhRPY-oY.js +1 -0
- package/dist/web/ui/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/web/ui/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/web/ui/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/web/ui/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/web/ui/assets/rst-D5oM4XIm.js +1 -0
- package/dist/web/ui/assets/ruby-Cw6WdidG.js +1 -0
- package/dist/web/ui/assets/rust-B1yitclQ.js +1 -0
- package/dist/web/ui/assets/sankeyDiagram-TZEHDZUN-Dm93-uJ1.js +10 -0
- package/dist/web/ui/assets/sas-cz2c8ADy.js +1 -0
- package/dist/web/ui/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/web/ui/assets/scala-C151Ov-r.js +1 -0
- package/dist/web/ui/assets/scheme-C98Dy4si.js +1 -0
- package/dist/web/ui/assets/scss-OYdSNvt2.js +1 -0
- package/dist/web/ui/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/web/ui/assets/sequenceDiagram-WL72ISMW-D6C4PHTO.js +145 -0
- package/dist/web/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/web/ui/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/web/ui/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/web/ui/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/web/ui/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/web/ui/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/web/ui/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/web/ui/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/web/ui/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/web/ui/assets/solidity-rGO070M0.js +1 -0
- package/dist/web/ui/assets/soy-Brmx7dQM.js +1 -0
- package/dist/web/ui/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/web/ui/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/web/ui/assets/sql-BLtJtn59.js +1 -0
- package/dist/web/ui/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/web/ui/assets/stata-BH5u7GGu.js +1 -0
- package/dist/web/ui/assets/stateDiagram-FKZM4ZOC-msXCFM-o.js +1 -0
- package/dist/web/ui/assets/stateDiagram-v2-4FDKWEC3-BxRi32Am.js +1 -0
- package/dist/web/ui/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/web/ui/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/web/ui/assets/svelte-zxCyuUbr.js +1 -0
- package/dist/web/ui/assets/swift-Dg5xB15N.js +1 -0
- package/dist/web/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/web/ui/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/web/ui/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/web/ui/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/web/ui/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/web/ui/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/web/ui/assets/templ-P3uqSqPl.js +1 -0
- package/dist/web/ui/assets/terraform-BETggiCN.js +1 -0
- package/dist/web/ui/assets/tex-CvyZ59Mk.js +1 -0
- package/dist/web/ui/assets/timeline-definition-IT6M3QCI-OhdHqGpr.js +61 -0
- package/dist/web/ui/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/web/ui/assets/toml-vGWfd6FD.js +1 -0
- package/dist/web/ui/assets/treemap-KMMF4GRG-BBa7Tuyx.js +128 -0
- package/dist/web/ui/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/web/ui/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/web/ui/assets/tsx-COt5Ahok.js +1 -0
- package/dist/web/ui/assets/turtle-BsS91CYL.js +1 -0
- package/dist/web/ui/assets/twig-ChbOoGGc.js +1 -0
- package/dist/web/ui/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/web/ui/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/web/ui/assets/typst-DHCkPAjA.js +1 -0
- package/dist/web/ui/assets/v-BcVCzyr7.js +1 -0
- package/dist/web/ui/assets/vala-CsfeWuGM.js +1 -0
- package/dist/web/ui/assets/vb-D17OF-Vu.js +1 -0
- package/dist/web/ui/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/web/ui/assets/vesper-DU1UobuO.js +1 -0
- package/dist/web/ui/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/web/ui/assets/viml-CJc9bBzg.js +1 -0
- package/dist/web/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/web/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/web/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/web/ui/assets/vue-DN_0RTcg.js +1 -0
- package/dist/web/ui/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/web/ui/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/web/ui/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/web/ui/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/web/ui/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/web/ui/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/web/ui/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/web/ui/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/web/ui/assets/wit-5i3qLPDT.js +1 -0
- package/dist/web/ui/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/web/ui/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/web/ui/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/web/ui/assets/xychartDiagram-PRI3JC2R-CwWrUftO.js +7 -0
- package/dist/web/ui/assets/yaml-Buea-lGh.js +1 -0
- package/dist/web/ui/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/web/ui/assets/zig-VOosw3JB.js +1 -0
- package/dist/web/ui/index.html +19 -0
- package/dist/web/ui/logo-dark.svg +10 -0
- package/dist/web/ui/logo.svg +10 -0
- 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="
|
|
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="
|
|
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.
|
|
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
|
|
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
|
-
-
|
|
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 = "
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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-
|
|
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
|
|
204
|
-
- `/
|
|
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.
|
|
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="
|
|
9
|
-
<img src="https://
|
|
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
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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 = "
|
|
91
|
+
current_provider = "openai_compatible"
|
|
66
92
|
|
|
67
|
-
[[providers.
|
|
68
|
-
name = "
|
|
69
|
-
env_api_key = "
|
|
70
|
-
model = "
|
|
71
|
-
base_url = "https://api.
|
|
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 #
|
|
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-
|
|
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
|
|
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
|
-
- [
|
|
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) - 贡献指南
|