tianxincode 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +57 -0
- package/dist/api/api.types.d.ts +350 -0
- package/dist/api/api.types.d.ts.map +1 -0
- package/dist/api/api.types.js +12 -0
- package/dist/api/api.types.js.map +1 -0
- package/dist/api/chat.routes.d.ts +26 -0
- package/dist/api/chat.routes.d.ts.map +1 -0
- package/dist/api/chat.routes.js +275 -0
- package/dist/api/chat.routes.js.map +1 -0
- package/dist/api/config.routes.d.ts +10 -0
- package/dist/api/config.routes.d.ts.map +1 -0
- package/dist/api/config.routes.js +150 -0
- package/dist/api/config.routes.js.map +1 -0
- package/dist/api/db.routes.d.ts +12 -0
- package/dist/api/db.routes.d.ts.map +1 -0
- package/dist/api/db.routes.js +108 -0
- package/dist/api/db.routes.js.map +1 -0
- package/dist/api/files.routes.d.ts +14 -0
- package/dist/api/files.routes.d.ts.map +1 -0
- package/dist/api/files.routes.js +220 -0
- package/dist/api/files.routes.js.map +1 -0
- package/dist/api/filesystem.routes.d.ts +10 -0
- package/dist/api/filesystem.routes.d.ts.map +1 -0
- package/dist/api/filesystem.routes.js +181 -0
- package/dist/api/filesystem.routes.js.map +1 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +25 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/lsp.d.ts +5 -0
- package/dist/api/lsp.d.ts.map +1 -0
- package/dist/api/lsp.js +103 -0
- package/dist/api/lsp.js.map +1 -0
- package/dist/api/projects.routes.d.ts +18 -0
- package/dist/api/projects.routes.d.ts.map +1 -0
- package/dist/api/projects.routes.js +306 -0
- package/dist/api/projects.routes.js.map +1 -0
- package/dist/api/session.routes.d.ts +18 -0
- package/dist/api/session.routes.d.ts.map +1 -0
- package/dist/api/session.routes.js +186 -0
- package/dist/api/session.routes.js.map +1 -0
- package/dist/api/skills.routes.d.ts +6 -0
- package/dist/api/skills.routes.d.ts.map +1 -0
- package/dist/api/skills.routes.js +54 -0
- package/dist/api/skills.routes.js.map +1 -0
- package/dist/cli/args.d.ts +49 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +77 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/cli.types.d.ts +22 -0
- package/dist/cli/cli.types.d.ts.map +1 -0
- package/dist/cli/cli.types.js +5 -0
- package/dist/cli/cli.types.js.map +1 -0
- package/dist/cli/commands.d.ts +30 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +263 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components/App.d.ts +34 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +639 -0
- package/dist/components/App.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/tx.config.d.ts +31 -0
- package/dist/config/tx.config.d.ts.map +1 -0
- package/dist/config/tx.config.js +29 -0
- package/dist/config/tx.config.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/lsp/client.d.ts +55 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +252 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/downloader.d.ts +17 -0
- package/dist/lsp/downloader.d.ts.map +1 -0
- package/dist/lsp/downloader.js +302 -0
- package/dist/lsp/downloader.js.map +1 -0
- package/dist/lsp/index.d.ts +13 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +30 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/launch.d.ts +17 -0
- package/dist/lsp/launch.d.ts.map +1 -0
- package/dist/lsp/launch.js +69 -0
- package/dist/lsp/launch.js.map +1 -0
- package/dist/lsp/manager.d.ts +19 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +251 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +11 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +302 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/sql.d.ts +11 -0
- package/dist/lsp/sql.d.ts.map +1 -0
- package/dist/lsp/sql.js +23 -0
- package/dist/lsp/sql.js.map +1 -0
- package/dist/lsp/types.d.ts +58 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +13 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/modules/ai/ai.service.d.ts +182 -0
- package/dist/modules/ai/ai.service.d.ts.map +1 -0
- package/dist/modules/ai/ai.service.js +280 -0
- package/dist/modules/ai/ai.service.js.map +1 -0
- package/dist/modules/ai/ai.types.d.ts +54 -0
- package/dist/modules/ai/ai.types.d.ts.map +1 -0
- package/dist/modules/ai/ai.types.js +2 -0
- package/dist/modules/ai/ai.types.js.map +1 -0
- package/dist/modules/ai/index.d.ts +6 -0
- package/dist/modules/ai/index.d.ts.map +1 -0
- package/dist/modules/ai/index.js +5 -0
- package/dist/modules/ai/index.js.map +1 -0
- package/dist/modules/ai/openai.provider.d.ts +138 -0
- package/dist/modules/ai/openai.provider.d.ts.map +1 -0
- package/dist/modules/ai/openai.provider.js +279 -0
- package/dist/modules/ai/openai.provider.js.map +1 -0
- package/dist/modules/ai/react/index.d.ts +5 -0
- package/dist/modules/ai/react/index.d.ts.map +1 -0
- package/dist/modules/ai/react/index.js +4 -0
- package/dist/modules/ai/react/index.js.map +1 -0
- package/dist/modules/ai/react/prompt/role.txt +51 -0
- package/dist/modules/ai/react/react.parser.d.ts +75 -0
- package/dist/modules/ai/react/react.parser.d.ts.map +1 -0
- package/dist/modules/ai/react/react.parser.js +278 -0
- package/dist/modules/ai/react/react.parser.js.map +1 -0
- package/dist/modules/ai/react/react.prompts.d.ts +26 -0
- package/dist/modules/ai/react/react.prompts.d.ts.map +1 -0
- package/dist/modules/ai/react/react.prompts.js +180 -0
- package/dist/modules/ai/react/react.prompts.js.map +1 -0
- package/dist/modules/ai/react/react.types.d.ts +47 -0
- package/dist/modules/ai/react/react.types.d.ts.map +1 -0
- package/dist/modules/ai/react/react.types.js +2 -0
- package/dist/modules/ai/react/react.types.js.map +1 -0
- package/dist/modules/ai/react.agent.d.ts +40 -0
- package/dist/modules/ai/react.agent.d.ts.map +1 -0
- package/dist/modules/ai/react.agent.js +136 -0
- package/dist/modules/ai/react.agent.js.map +1 -0
- package/dist/modules/ai/summarizer/index.d.ts +4 -0
- package/dist/modules/ai/summarizer/index.d.ts.map +1 -0
- package/dist/modules/ai/summarizer/index.js +3 -0
- package/dist/modules/ai/summarizer/index.js.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.prompts.d.ts +15 -0
- package/dist/modules/ai/summarizer/summarizer.prompts.d.ts.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.prompts.js +47 -0
- package/dist/modules/ai/summarizer/summarizer.prompts.js.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.service.d.ts +24 -0
- package/dist/modules/ai/summarizer/summarizer.service.d.ts.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.service.js +153 -0
- package/dist/modules/ai/summarizer/summarizer.service.js.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.types.d.ts +21 -0
- package/dist/modules/ai/summarizer/summarizer.types.d.ts.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.types.js +5 -0
- package/dist/modules/ai/summarizer/summarizer.types.js.map +1 -0
- package/dist/modules/config/config.service.d.ts +32 -0
- package/dist/modules/config/config.service.d.ts.map +1 -0
- package/dist/modules/config/config.service.js +163 -0
- package/dist/modules/config/config.service.js.map +1 -0
- package/dist/modules/config/config.types.d.ts +44 -0
- package/dist/modules/config/config.types.d.ts.map +1 -0
- package/dist/modules/config/config.types.js +21 -0
- package/dist/modules/config/config.types.js.map +1 -0
- package/dist/modules/config/index.d.ts +10 -0
- package/dist/modules/config/index.d.ts.map +1 -0
- package/dist/modules/config/index.js +10 -0
- package/dist/modules/config/index.js.map +1 -0
- package/dist/modules/context/context.service.d.ts +46 -0
- package/dist/modules/context/context.service.d.ts.map +1 -0
- package/dist/modules/context/context.service.js +216 -0
- package/dist/modules/context/context.service.js.map +1 -0
- package/dist/modules/context/context.types.d.ts +30 -0
- package/dist/modules/context/context.types.d.ts.map +1 -0
- package/dist/modules/context/context.types.js +5 -0
- package/dist/modules/context/context.types.js.map +1 -0
- package/dist/modules/context/index.d.ts +10 -0
- package/dist/modules/context/index.d.ts.map +1 -0
- package/dist/modules/context/index.js +10 -0
- package/dist/modules/context/index.js.map +1 -0
- package/dist/modules/db/db.service.d.ts +97 -0
- package/dist/modules/db/db.service.d.ts.map +1 -0
- package/dist/modules/db/db.service.js +387 -0
- package/dist/modules/db/db.service.js.map +1 -0
- package/dist/modules/db/db.types.d.ts +8 -0
- package/dist/modules/db/db.types.d.ts.map +1 -0
- package/dist/modules/db/db.types.js +7 -0
- package/dist/modules/db/db.types.js.map +1 -0
- package/dist/modules/db/index.d.ts +10 -0
- package/dist/modules/db/index.d.ts.map +1 -0
- package/dist/modules/db/index.js +9 -0
- package/dist/modules/db/index.js.map +1 -0
- package/dist/modules/logger/index.d.ts +2 -0
- package/dist/modules/logger/index.d.ts.map +1 -0
- package/dist/modules/logger/index.js +2 -0
- package/dist/modules/logger/index.js.map +1 -0
- package/dist/modules/logger/logger.d.ts +26 -0
- package/dist/modules/logger/logger.d.ts.map +1 -0
- package/dist/modules/logger/logger.js +57 -0
- package/dist/modules/logger/logger.js.map +1 -0
- package/dist/modules/memory/index.d.ts +9 -0
- package/dist/modules/memory/index.d.ts.map +1 -0
- package/dist/modules/memory/index.js +9 -0
- package/dist/modules/memory/index.js.map +1 -0
- package/dist/modules/memory/memory.service.d.ts +191 -0
- package/dist/modules/memory/memory.service.d.ts.map +1 -0
- package/dist/modules/memory/memory.service.js +282 -0
- package/dist/modules/memory/memory.service.js.map +1 -0
- package/dist/modules/memory/memory.types.d.ts +13 -0
- package/dist/modules/memory/memory.types.d.ts.map +1 -0
- package/dist/modules/memory/memory.types.js +5 -0
- package/dist/modules/memory/memory.types.js.map +1 -0
- package/dist/modules/session/index.d.ts +9 -0
- package/dist/modules/session/index.d.ts.map +1 -0
- package/dist/modules/session/index.js +9 -0
- package/dist/modules/session/index.js.map +1 -0
- package/dist/modules/session/session.service.d.ts +252 -0
- package/dist/modules/session/session.service.d.ts.map +1 -0
- package/dist/modules/session/session.service.js +406 -0
- package/dist/modules/session/session.service.js.map +1 -0
- package/dist/modules/session/session.types.d.ts +34 -0
- package/dist/modules/session/session.types.d.ts.map +1 -0
- package/dist/modules/session/session.types.js +5 -0
- package/dist/modules/session/session.types.js.map +1 -0
- package/dist/modules/skill/index.d.ts +8 -0
- package/dist/modules/skill/index.d.ts.map +1 -0
- package/dist/modules/skill/index.js +7 -0
- package/dist/modules/skill/index.js.map +1 -0
- package/dist/modules/skill/skill.service.d.ts +72 -0
- package/dist/modules/skill/skill.service.d.ts.map +1 -0
- package/dist/modules/skill/skill.service.js +283 -0
- package/dist/modules/skill/skill.service.js.map +1 -0
- package/dist/modules/skill/skill.tool.d.ts +19 -0
- package/dist/modules/skill/skill.tool.d.ts.map +1 -0
- package/dist/modules/skill/skill.tool.js +92 -0
- package/dist/modules/skill/skill.tool.js.map +1 -0
- package/dist/modules/skill/skill.txt +18 -0
- package/dist/modules/skill/skill.types.d.ts +40 -0
- package/dist/modules/skill/skill.types.d.ts.map +1 -0
- package/dist/modules/skill/skill.types.js +6 -0
- package/dist/modules/skill/skill.types.js.map +1 -0
- package/dist/modules/skill/skills.manager.d.ts +30 -0
- package/dist/modules/skill/skills.manager.d.ts.map +1 -0
- package/dist/modules/skill/skills.manager.js +182 -0
- package/dist/modules/skill/skills.manager.js.map +1 -0
- package/dist/modules/tools/builtin/bash.d.ts +3 -0
- package/dist/modules/tools/builtin/bash.d.ts.map +1 -0
- package/dist/modules/tools/builtin/bash.js +124 -0
- package/dist/modules/tools/builtin/bash.js.map +1 -0
- package/dist/modules/tools/builtin/bash.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/bash.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/bash.tool.js +52 -0
- package/dist/modules/tools/builtin/bash.tool.js.map +1 -0
- package/dist/modules/tools/builtin/bash.txt +81 -0
- package/dist/modules/tools/builtin/code_search.d.ts +3 -0
- package/dist/modules/tools/builtin/code_search.d.ts.map +1 -0
- package/dist/modules/tools/builtin/code_search.js +85 -0
- package/dist/modules/tools/builtin/code_search.js.map +1 -0
- package/dist/modules/tools/builtin/code_search.txt +18 -0
- package/dist/modules/tools/builtin/edit-file.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/edit-file.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/edit-file.tool.js +58 -0
- package/dist/modules/tools/builtin/edit-file.tool.js.map +1 -0
- package/dist/modules/tools/builtin/edit_file.d.ts +3 -0
- package/dist/modules/tools/builtin/edit_file.d.ts.map +1 -0
- package/dist/modules/tools/builtin/edit_file.js +69 -0
- package/dist/modules/tools/builtin/edit_file.js.map +1 -0
- package/dist/modules/tools/builtin/edit_file.txt +10 -0
- package/dist/modules/tools/builtin/glob.d.ts +3 -0
- package/dist/modules/tools/builtin/glob.d.ts.map +1 -0
- package/dist/modules/tools/builtin/glob.js +84 -0
- package/dist/modules/tools/builtin/glob.js.map +1 -0
- package/dist/modules/tools/builtin/glob.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/glob.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/glob.tool.js +81 -0
- package/dist/modules/tools/builtin/glob.tool.js.map +1 -0
- package/dist/modules/tools/builtin/glob.txt +10 -0
- package/dist/modules/tools/builtin/grep.d.ts +3 -0
- package/dist/modules/tools/builtin/grep.d.ts.map +1 -0
- package/dist/modules/tools/builtin/grep.js +93 -0
- package/dist/modules/tools/builtin/grep.js.map +1 -0
- package/dist/modules/tools/builtin/grep.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/grep.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/grep.tool.js +96 -0
- package/dist/modules/tools/builtin/grep.tool.js.map +1 -0
- package/dist/modules/tools/builtin/grep.txt +12 -0
- package/dist/modules/tools/builtin/index.d.ts +8 -0
- package/dist/modules/tools/builtin/index.d.ts.map +1 -0
- package/dist/modules/tools/builtin/index.js +88 -0
- package/dist/modules/tools/builtin/index.js.map +1 -0
- package/dist/modules/tools/builtin/lsp.d.ts +7 -0
- package/dist/modules/tools/builtin/lsp.d.ts.map +1 -0
- package/dist/modules/tools/builtin/lsp.js +125 -0
- package/dist/modules/tools/builtin/lsp.js.map +1 -0
- package/dist/modules/tools/builtin/lsp.txt +19 -0
- package/dist/modules/tools/builtin/memory.d.ts +3 -0
- package/dist/modules/tools/builtin/memory.d.ts.map +1 -0
- package/dist/modules/tools/builtin/memory.js +76 -0
- package/dist/modules/tools/builtin/memory.js.map +1 -0
- package/dist/modules/tools/builtin/memory.txt +36 -0
- package/dist/modules/tools/builtin/read-file.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/read-file.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/read-file.tool.js +46 -0
- package/dist/modules/tools/builtin/read-file.tool.js.map +1 -0
- package/dist/modules/tools/builtin/read_file.d.ts +3 -0
- package/dist/modules/tools/builtin/read_file.d.ts.map +1 -0
- package/dist/modules/tools/builtin/read_file.js +99 -0
- package/dist/modules/tools/builtin/read_file.js.map +1 -0
- package/dist/modules/tools/builtin/read_file.txt +15 -0
- package/dist/modules/tools/builtin/todo_read.d.ts +6 -0
- package/dist/modules/tools/builtin/todo_read.d.ts.map +1 -0
- package/dist/modules/tools/builtin/todo_read.js +24 -0
- package/dist/modules/tools/builtin/todo_read.js.map +1 -0
- package/dist/modules/tools/builtin/todo_read.txt +14 -0
- package/dist/modules/tools/builtin/todo_write.d.ts +6 -0
- package/dist/modules/tools/builtin/todo_write.d.ts.map +1 -0
- package/dist/modules/tools/builtin/todo_write.js +45 -0
- package/dist/modules/tools/builtin/todo_write.js.map +1 -0
- package/dist/modules/tools/builtin/todo_write.txt +46 -0
- package/dist/modules/tools/builtin/web_fetch.d.ts +3 -0
- package/dist/modules/tools/builtin/web_fetch.d.ts.map +1 -0
- package/dist/modules/tools/builtin/web_fetch.js +51 -0
- package/dist/modules/tools/builtin/web_fetch.js.map +1 -0
- package/dist/modules/tools/builtin/web_fetch.txt +15 -0
- package/dist/modules/tools/builtin/web_search.d.ts +3 -0
- package/dist/modules/tools/builtin/web_search.d.ts.map +1 -0
- package/dist/modules/tools/builtin/web_search.js +99 -0
- package/dist/modules/tools/builtin/web_search.js.map +1 -0
- package/dist/modules/tools/builtin/web_search.txt +16 -0
- package/dist/modules/tools/builtin/write-file.tool.d.ts +6 -0
- package/dist/modules/tools/builtin/write-file.tool.d.ts.map +1 -0
- package/dist/modules/tools/builtin/write-file.tool.js +38 -0
- package/dist/modules/tools/builtin/write-file.tool.js.map +1 -0
- package/dist/modules/tools/builtin/write_file.d.ts +3 -0
- package/dist/modules/tools/builtin/write_file.d.ts.map +1 -0
- package/dist/modules/tools/builtin/write_file.js +46 -0
- package/dist/modules/tools/builtin/write_file.js.map +1 -0
- package/dist/modules/tools/builtin/write_file.txt +9 -0
- package/dist/modules/tools/index.d.ts +11 -0
- package/dist/modules/tools/index.d.ts.map +1 -0
- package/dist/modules/tools/index.js +10 -0
- package/dist/modules/tools/index.js.map +1 -0
- package/dist/modules/tools/tool.service.d.ts +207 -0
- package/dist/modules/tools/tool.service.d.ts.map +1 -0
- package/dist/modules/tools/tool.service.js +331 -0
- package/dist/modules/tools/tool.service.js.map +1 -0
- package/dist/modules/tools/tool.types.d.ts +39 -0
- package/dist/modules/tools/tool.types.d.ts.map +1 -0
- package/dist/modules/tools/tool.types.js +5 -0
- package/dist/modules/tools/tool.types.js.map +1 -0
- package/dist/web/index.d.ts +10 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +20 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/web.service.d.ts +95 -0
- package/dist/web/web.service.d.ts.map +1 -0
- package/dist/web/web.service.js +396 -0
- package/dist/web/web.service.js.map +1 -0
- package/package.json +57 -0
- package/web/dist/assets/Layout-Bb76CGAL.js +1 -0
- package/web/dist/assets/element-icons-B-tDfklg.woff +0 -0
- package/web/dist/assets/element-icons-_lZGOqcG.ttf +0 -0
- package/web/dist/assets/index-DQRR0ggU.js +199 -0
- package/web/dist/assets/index-KTH-myBB.css +1 -0
- package/web/dist/index.html +14 -0
- package/web/index.html +13 -0
- package/web/package.json +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 记忆服务模块
|
|
3
|
+
*
|
|
4
|
+
* 本模块负责会话消息 (Message) 的管理和操作
|
|
5
|
+
*
|
|
6
|
+
* 核心概念:
|
|
7
|
+
* 1. 永久消息 (keepContext = true)
|
|
8
|
+
* - 保留在会话历史中
|
|
9
|
+
* - 发送给 AI 作为上下文
|
|
10
|
+
* - 可以被压缩但不会被删除
|
|
11
|
+
*
|
|
12
|
+
* 2. 临时消息 (keepContext = false)
|
|
13
|
+
* - 仅用于当前对话轮次
|
|
14
|
+
* - 不会被发送给 AI
|
|
15
|
+
* - 压缩时会被删除
|
|
16
|
+
*
|
|
17
|
+
* 3. 摘要消息 (summaryMessageId)
|
|
18
|
+
* - 压缩会话时生成
|
|
19
|
+
* - 记录压缩点位置
|
|
20
|
+
* - 从该位置之后的消息才是有效的
|
|
21
|
+
*
|
|
22
|
+
* 典型使用场景:
|
|
23
|
+
* - 添加用户/助手消息到会话历史
|
|
24
|
+
* - 获取需要发送给 AI 的消息列表
|
|
25
|
+
* - 会话压缩时删除旧消息
|
|
26
|
+
* - 查询会话消息统计
|
|
27
|
+
*/
|
|
28
|
+
import { DbService } from '../db/db.service.js';
|
|
29
|
+
import { Message } from './memory.types.js';
|
|
30
|
+
/**
|
|
31
|
+
* MemoryService 类
|
|
32
|
+
*
|
|
33
|
+
* 记忆服务管理会话中的所有消息
|
|
34
|
+
* 提供消息的 CRUD 操作和查询功能
|
|
35
|
+
*
|
|
36
|
+
* 数据模型:
|
|
37
|
+
* - Message: 包含 id, sessionId, role, content, keepContext, createdAt
|
|
38
|
+
*
|
|
39
|
+
* 消息角色 (role):
|
|
40
|
+
* - user: 用户消息
|
|
41
|
+
* - assistant: AI 助手消息
|
|
42
|
+
* - system: 系统消息
|
|
43
|
+
* - tool: 工具执行结果
|
|
44
|
+
*/
|
|
45
|
+
export declare class MemoryService {
|
|
46
|
+
/** 数据库服务实例 */
|
|
47
|
+
private db;
|
|
48
|
+
/**
|
|
49
|
+
* 构造函数
|
|
50
|
+
*
|
|
51
|
+
* @param db - 数据库服务实例,如果未提供则使用默认实例
|
|
52
|
+
*/
|
|
53
|
+
constructor(db?: DbService);
|
|
54
|
+
/**
|
|
55
|
+
* 添加消息
|
|
56
|
+
*
|
|
57
|
+
* 将消息插入数据库
|
|
58
|
+
*
|
|
59
|
+
* @param sessionId - 所属会话 ID
|
|
60
|
+
* @param role - 消息角色 (user/assistant/system/tool)
|
|
61
|
+
* @param content - 消息内容
|
|
62
|
+
* @param keepContext - 是否保留到长期记忆,默认 true
|
|
63
|
+
* @returns {number} 插入消息的 ID
|
|
64
|
+
*/
|
|
65
|
+
addMessage(sessionId: string, role: 'user' | 'assistant' | 'system' | 'tool', content: string, keepContext?: boolean, isOriginal?: boolean): number;
|
|
66
|
+
/**
|
|
67
|
+
* 获取单条消息
|
|
68
|
+
*
|
|
69
|
+
* @param id - 消息 ID
|
|
70
|
+
* @returns {Message | undefined} 消息对象
|
|
71
|
+
*/
|
|
72
|
+
getMessage(id: number): Message | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* 获取所有消息
|
|
75
|
+
*
|
|
76
|
+
* 获取指定会话的所有消息 (永久 + 临时)
|
|
77
|
+
* 按创建时间排序
|
|
78
|
+
*
|
|
79
|
+
* @param sessionId - 会话 ID
|
|
80
|
+
* @returns {Message[]} 消息数组
|
|
81
|
+
*/
|
|
82
|
+
getAllMessages(sessionId: string): Message[];
|
|
83
|
+
/**
|
|
84
|
+
* 获取永久消息
|
|
85
|
+
*
|
|
86
|
+
* 只返回 keepContext = true 的消息
|
|
87
|
+
* 这些消息会被发送给 AI 作为上下文
|
|
88
|
+
*
|
|
89
|
+
* @param sessionId - 会话 ID
|
|
90
|
+
* @returns {Message[]} 永久消息数组
|
|
91
|
+
*/
|
|
92
|
+
getPermanentMessages(sessionId: string): Message[];
|
|
93
|
+
/**
|
|
94
|
+
* 获取临时消息
|
|
95
|
+
*
|
|
96
|
+
* 只返回 keepContext = false 的消息
|
|
97
|
+
* 这些消息不会发送给 AI
|
|
98
|
+
*
|
|
99
|
+
* @param sessionId - 会话 ID
|
|
100
|
+
* @returns {Message[]} 临时消息数组
|
|
101
|
+
*/
|
|
102
|
+
getTemporaryMessages(sessionId: string): Message[];
|
|
103
|
+
/**
|
|
104
|
+
* 从指定消息开始获取消息
|
|
105
|
+
*
|
|
106
|
+
* 用于会话压缩后从摘要点获取后续消息
|
|
107
|
+
*
|
|
108
|
+
* @param fromId - 起始消息 ID
|
|
109
|
+
* @param keepContextOnly - 是否只获取永久消息,默认 true
|
|
110
|
+
* @returns {Message[]} 消息数组
|
|
111
|
+
*/
|
|
112
|
+
getMessagesFrom(fromId: number, keepContextOnly?: boolean): Message[];
|
|
113
|
+
/**
|
|
114
|
+
* 获取发送给 AI 的消息
|
|
115
|
+
*
|
|
116
|
+
* 根据是否有摘要消息 ID 返回不同的消息列表:
|
|
117
|
+
* - 如果有摘要:从摘要消息之后获取
|
|
118
|
+
* - 如果没有摘要:获取所有永久消息
|
|
119
|
+
*
|
|
120
|
+
* @param sessionId - 会话 ID
|
|
121
|
+
* @param summaryMessageId - 摘要消息 ID (可选)
|
|
122
|
+
* @returns {Message[]} 发送给 AI 的消息列表
|
|
123
|
+
*/
|
|
124
|
+
getMessagesForAI(sessionId: string, summaryMessageId: number | null): Message[];
|
|
125
|
+
/**
|
|
126
|
+
* 删除单条消息
|
|
127
|
+
*
|
|
128
|
+
* @param id - 消息 ID
|
|
129
|
+
*/
|
|
130
|
+
deleteMessage(id: number): void;
|
|
131
|
+
/**
|
|
132
|
+
* 删除指定消息之前的所有消息
|
|
133
|
+
*
|
|
134
|
+
* 用于会话压缩前删除旧消息
|
|
135
|
+
*
|
|
136
|
+
* @param sessionId - 会话 ID
|
|
137
|
+
* @param beforeId - 截止消息 ID
|
|
138
|
+
*/
|
|
139
|
+
deleteMessagesBefore(sessionId: string, beforeId: number): void;
|
|
140
|
+
/**
|
|
141
|
+
* 压缩会话
|
|
142
|
+
*
|
|
143
|
+
* 删除多余的永久消息,只保留最近 N 条
|
|
144
|
+
*
|
|
145
|
+
* 压缩策略:
|
|
146
|
+
* - 获取所有永久消息,按时间降序
|
|
147
|
+
* - 删除超出保留数量的旧消息
|
|
148
|
+
* - 使用事务确保原子性
|
|
149
|
+
*
|
|
150
|
+
* @param sessionId - 会话 ID
|
|
151
|
+
* @param keepCount - 保留的消息数量
|
|
152
|
+
*/
|
|
153
|
+
compressSession(sessionId: string, keepCount: number): void;
|
|
154
|
+
/**
|
|
155
|
+
* 获取会话统计
|
|
156
|
+
*
|
|
157
|
+
* @param sessionId - 会话 ID
|
|
158
|
+
* @returns 统计对象
|
|
159
|
+
*/
|
|
160
|
+
getSessionStats(sessionId: string): {
|
|
161
|
+
totalMessages: number;
|
|
162
|
+
permanentMessages: number;
|
|
163
|
+
compressedCount: number;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* 将数据库行转换为 Message 对象
|
|
167
|
+
*
|
|
168
|
+
* 数据库字段使用下划线命名
|
|
169
|
+
* Message 对象使用驼峰命名
|
|
170
|
+
*
|
|
171
|
+
* @param row - 数据库行对象
|
|
172
|
+
* @returns {Message} Message 对象
|
|
173
|
+
*/
|
|
174
|
+
private rowToMessage;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 记忆服务单例实例
|
|
178
|
+
*
|
|
179
|
+
* 在整个应用中共享同一个 MemoryService 实例
|
|
180
|
+
*
|
|
181
|
+
* 使用方式:
|
|
182
|
+
* import { memoryService } from '../memory/index.js';
|
|
183
|
+
*
|
|
184
|
+
* // 添加消息
|
|
185
|
+
* memoryService.addMessage(sessionId, 'user', '你好', true);
|
|
186
|
+
*
|
|
187
|
+
* // 获取消息
|
|
188
|
+
* const messages = memoryService.getPermanentMessages(sessionId);
|
|
189
|
+
*/
|
|
190
|
+
export declare const memoryService: MemoryService;
|
|
191
|
+
//# sourceMappingURL=memory.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.service.d.ts","sourceRoot":"","sources":["../../../src/modules/memory/memory.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,SAAS,EAAiC,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAa;IACxB,cAAc;IACd,OAAO,CAAC,EAAE,CAAY;IAEtB;;;;OAIG;gBACS,EAAE,CAAC,EAAE,SAAS;IAI1B;;;;;;;;;;OAUG;IACH,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,EAC9C,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAc,EAC3B,UAAU,GAAE,OAAe,GAC1B,MAAM;IAST;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAK3C;;;;;;;;OAQG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAQ5C;;;;;;;;OAQG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAQlD;;;;;;;;OAQG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAQlD;;;;;;;;OAQG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,GAAE,OAAc,GAAG,OAAO,EAAE;IAwB3E;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE;IA0B/E;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;;;;OAOG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAc/D;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAuB3D;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG;QAClC,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB;IAmBD;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;CAWrB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 记忆服务模块
|
|
3
|
+
*
|
|
4
|
+
* 本模块负责会话消息 (Message) 的管理和操作
|
|
5
|
+
*
|
|
6
|
+
* 核心概念:
|
|
7
|
+
* 1. 永久消息 (keepContext = true)
|
|
8
|
+
* - 保留在会话历史中
|
|
9
|
+
* - 发送给 AI 作为上下文
|
|
10
|
+
* - 可以被压缩但不会被删除
|
|
11
|
+
*
|
|
12
|
+
* 2. 临时消息 (keepContext = false)
|
|
13
|
+
* - 仅用于当前对话轮次
|
|
14
|
+
* - 不会被发送给 AI
|
|
15
|
+
* - 压缩时会被删除
|
|
16
|
+
*
|
|
17
|
+
* 3. 摘要消息 (summaryMessageId)
|
|
18
|
+
* - 压缩会话时生成
|
|
19
|
+
* - 记录压缩点位置
|
|
20
|
+
* - 从该位置之后的消息才是有效的
|
|
21
|
+
*
|
|
22
|
+
* 典型使用场景:
|
|
23
|
+
* - 添加用户/助手消息到会话历史
|
|
24
|
+
* - 获取需要发送给 AI 的消息列表
|
|
25
|
+
* - 会话压缩时删除旧消息
|
|
26
|
+
* - 查询会话消息统计
|
|
27
|
+
*/
|
|
28
|
+
import { dbService as defaultDbService } from '../db/db.service.js';
|
|
29
|
+
/**
|
|
30
|
+
* MemoryService 类
|
|
31
|
+
*
|
|
32
|
+
* 记忆服务管理会话中的所有消息
|
|
33
|
+
* 提供消息的 CRUD 操作和查询功能
|
|
34
|
+
*
|
|
35
|
+
* 数据模型:
|
|
36
|
+
* - Message: 包含 id, sessionId, role, content, keepContext, createdAt
|
|
37
|
+
*
|
|
38
|
+
* 消息角色 (role):
|
|
39
|
+
* - user: 用户消息
|
|
40
|
+
* - assistant: AI 助手消息
|
|
41
|
+
* - system: 系统消息
|
|
42
|
+
* - tool: 工具执行结果
|
|
43
|
+
*/
|
|
44
|
+
export class MemoryService {
|
|
45
|
+
/**
|
|
46
|
+
* 构造函数
|
|
47
|
+
*
|
|
48
|
+
* @param db - 数据库服务实例,如果未提供则使用默认实例
|
|
49
|
+
*/
|
|
50
|
+
constructor(db) {
|
|
51
|
+
this.db = db || defaultDbService;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 添加消息
|
|
55
|
+
*
|
|
56
|
+
* 将消息插入数据库
|
|
57
|
+
*
|
|
58
|
+
* @param sessionId - 所属会话 ID
|
|
59
|
+
* @param role - 消息角色 (user/assistant/system/tool)
|
|
60
|
+
* @param content - 消息内容
|
|
61
|
+
* @param keepContext - 是否保留到长期记忆,默认 true
|
|
62
|
+
* @returns {number} 插入消息的 ID
|
|
63
|
+
*/
|
|
64
|
+
addMessage(sessionId, role, content, keepContext = true, isOriginal = false) {
|
|
65
|
+
console.log('[MemoryService.addMessage] role:', role, 'isOriginal:', isOriginal, 'content:', content.substring(0, 50));
|
|
66
|
+
const result = this.db.run('INSERT INTO messages (session_id, role, content, keep_context, is_original) VALUES (?, ?, ?, ?, ?)', [sessionId, role, content, keepContext ? 1 : 0, isOriginal ? 1 : 0]);
|
|
67
|
+
return Number(result.lastInsertRowid);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 获取单条消息
|
|
71
|
+
*
|
|
72
|
+
* @param id - 消息 ID
|
|
73
|
+
* @returns {Message | undefined} 消息对象
|
|
74
|
+
*/
|
|
75
|
+
getMessage(id) {
|
|
76
|
+
const row = this.db.get('SELECT * FROM messages WHERE id = ?', [id]);
|
|
77
|
+
return row ? this.rowToMessage(row) : undefined;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 获取所有消息
|
|
81
|
+
*
|
|
82
|
+
* 获取指定会话的所有消息 (永久 + 临时)
|
|
83
|
+
* 按创建时间排序
|
|
84
|
+
*
|
|
85
|
+
* @param sessionId - 会话 ID
|
|
86
|
+
* @returns {Message[]} 消息数组
|
|
87
|
+
*/
|
|
88
|
+
getAllMessages(sessionId) {
|
|
89
|
+
const rows = this.db.all('SELECT * FROM messages WHERE session_id = ? ORDER BY created_at', [sessionId]);
|
|
90
|
+
return rows.map(this.rowToMessage);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 获取永久消息
|
|
94
|
+
*
|
|
95
|
+
* 只返回 keepContext = true 的消息
|
|
96
|
+
* 这些消息会被发送给 AI 作为上下文
|
|
97
|
+
*
|
|
98
|
+
* @param sessionId - 会话 ID
|
|
99
|
+
* @returns {Message[]} 永久消息数组
|
|
100
|
+
*/
|
|
101
|
+
getPermanentMessages(sessionId) {
|
|
102
|
+
const rows = this.db.all('SELECT * FROM messages WHERE session_id = ? AND keep_context = 1 ORDER BY created_at', [sessionId]);
|
|
103
|
+
return rows.map(this.rowToMessage);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 获取临时消息
|
|
107
|
+
*
|
|
108
|
+
* 只返回 keepContext = false 的消息
|
|
109
|
+
* 这些消息不会发送给 AI
|
|
110
|
+
*
|
|
111
|
+
* @param sessionId - 会话 ID
|
|
112
|
+
* @returns {Message[]} 临时消息数组
|
|
113
|
+
*/
|
|
114
|
+
getTemporaryMessages(sessionId) {
|
|
115
|
+
const rows = this.db.all('SELECT * FROM messages WHERE session_id = ? AND keep_context = 0 ORDER BY created_at', [sessionId]);
|
|
116
|
+
return rows.map(this.rowToMessage);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 从指定消息开始获取消息
|
|
120
|
+
*
|
|
121
|
+
* 用于会话压缩后从摘要点获取后续消息
|
|
122
|
+
*
|
|
123
|
+
* @param fromId - 起始消息 ID
|
|
124
|
+
* @param keepContextOnly - 是否只获取永久消息,默认 true
|
|
125
|
+
* @returns {Message[]} 消息数组
|
|
126
|
+
*/
|
|
127
|
+
getMessagesFrom(fromId, keepContextOnly = true) {
|
|
128
|
+
// 先获取起始消息,获取 session_id
|
|
129
|
+
const message = this.db.get('SELECT * FROM messages WHERE id = ?', [fromId]);
|
|
130
|
+
if (!message)
|
|
131
|
+
return [];
|
|
132
|
+
// 构建查询语句
|
|
133
|
+
let sql = 'SELECT * FROM messages WHERE session_id = ? AND id >= ?';
|
|
134
|
+
const params = [message.session_id, fromId];
|
|
135
|
+
// 如果只获取永久消息
|
|
136
|
+
if (keepContextOnly) {
|
|
137
|
+
sql += ' AND keep_context = 1';
|
|
138
|
+
}
|
|
139
|
+
sql += ' ORDER BY id ASC';
|
|
140
|
+
const rows = this.db.all(sql, params);
|
|
141
|
+
return rows.map(this.rowToMessage);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 获取发送给 AI 的消息
|
|
145
|
+
*
|
|
146
|
+
* 根据是否有摘要消息 ID 返回不同的消息列表:
|
|
147
|
+
* - 如果有摘要:从摘要消息之后获取
|
|
148
|
+
* - 如果没有摘要:获取所有永久消息
|
|
149
|
+
*
|
|
150
|
+
* @param sessionId - 会话 ID
|
|
151
|
+
* @param summaryMessageId - 摘要消息 ID (可选)
|
|
152
|
+
* @returns {Message[]} 发送给 AI 的消息列表
|
|
153
|
+
*/
|
|
154
|
+
getMessagesForAI(sessionId, summaryMessageId) {
|
|
155
|
+
let messages;
|
|
156
|
+
// ========== 有摘要消息的情况 ==========
|
|
157
|
+
if (summaryMessageId) {
|
|
158
|
+
// 从摘要消息之后获取永久消息
|
|
159
|
+
messages = this.getMessagesFrom(summaryMessageId, true);
|
|
160
|
+
// 第一条消息的角色从 system 改为 user
|
|
161
|
+
// 因为摘要消息本身是 AI 生成的摘要,需要伪装成用户消息
|
|
162
|
+
if (messages.length > 0 && messages[0].id === summaryMessageId) {
|
|
163
|
+
messages[0] = {
|
|
164
|
+
...messages[0],
|
|
165
|
+
role: 'user',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// ========== 没有摘要消息的情况 ==========
|
|
170
|
+
else {
|
|
171
|
+
// 获取所有永久消息
|
|
172
|
+
messages = this.getPermanentMessages(sessionId);
|
|
173
|
+
}
|
|
174
|
+
return messages;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 删除单条消息
|
|
178
|
+
*
|
|
179
|
+
* @param id - 消息 ID
|
|
180
|
+
*/
|
|
181
|
+
deleteMessage(id) {
|
|
182
|
+
this.db.run('DELETE FROM messages WHERE id = ?', [id]);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* 删除指定消息之前的所有消息
|
|
186
|
+
*
|
|
187
|
+
* 用于会话压缩前删除旧消息
|
|
188
|
+
*
|
|
189
|
+
* @param sessionId - 会话 ID
|
|
190
|
+
* @param beforeId - 截止消息 ID
|
|
191
|
+
*/
|
|
192
|
+
deleteMessagesBefore(sessionId, beforeId) {
|
|
193
|
+
// 获取截止消息的创建时间
|
|
194
|
+
const message = this.db.get('SELECT created_at FROM messages WHERE id = ?', [beforeId]);
|
|
195
|
+
if (message) {
|
|
196
|
+
this.db.run('DELETE FROM messages WHERE session_id = ? AND created_at < ?', [sessionId, message.created_at]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 压缩会话
|
|
201
|
+
*
|
|
202
|
+
* 删除多余的永久消息,只保留最近 N 条
|
|
203
|
+
*
|
|
204
|
+
* 压缩策略:
|
|
205
|
+
* - 获取所有永久消息,按时间降序
|
|
206
|
+
* - 删除超出保留数量的旧消息
|
|
207
|
+
* - 使用事务确保原子性
|
|
208
|
+
*
|
|
209
|
+
* @param sessionId - 会话 ID
|
|
210
|
+
* @param keepCount - 保留的消息数量
|
|
211
|
+
*/
|
|
212
|
+
compressSession(sessionId, keepCount) {
|
|
213
|
+
// 使用事务确保操作的原子性
|
|
214
|
+
this.db.transaction(() => {
|
|
215
|
+
// 获取所有永久消息 ID,按时间降序
|
|
216
|
+
const messages = this.db.all('SELECT id FROM messages WHERE session_id = ? AND keep_context = 1 ORDER BY created_at DESC', [sessionId]);
|
|
217
|
+
// 如果消息数量超过保留数量
|
|
218
|
+
if (messages.length > keepCount) {
|
|
219
|
+
// 找出需要删除的消息 ID (跳过前 keepCount 条)
|
|
220
|
+
const toDelete = messages.slice(keepCount).map((m) => m.id);
|
|
221
|
+
if (toDelete.length > 0) {
|
|
222
|
+
// 批量删除
|
|
223
|
+
const placeholders = toDelete.map(() => '?').join(',');
|
|
224
|
+
this.db.run(`DELETE FROM messages WHERE id IN (${placeholders})`, toDelete);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 获取会话统计
|
|
231
|
+
*
|
|
232
|
+
* @param sessionId - 会话 ID
|
|
233
|
+
* @returns 统计对象
|
|
234
|
+
*/
|
|
235
|
+
getSessionStats(sessionId) {
|
|
236
|
+
// 获取总消息数
|
|
237
|
+
const total = this.db.get('SELECT COUNT(*) as count FROM messages WHERE session_id = ?', [sessionId]);
|
|
238
|
+
// 获取永久消息数
|
|
239
|
+
const permanent = this.db.get('SELECT COUNT(*) as count FROM messages WHERE session_id = ? AND keep_context = 1', [sessionId]);
|
|
240
|
+
return {
|
|
241
|
+
totalMessages: total?.count || 0,
|
|
242
|
+
permanentMessages: permanent?.count || 0,
|
|
243
|
+
compressedCount: (total?.count || 0) - (permanent?.count || 0),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* 将数据库行转换为 Message 对象
|
|
248
|
+
*
|
|
249
|
+
* 数据库字段使用下划线命名
|
|
250
|
+
* Message 对象使用驼峰命名
|
|
251
|
+
*
|
|
252
|
+
* @param row - 数据库行对象
|
|
253
|
+
* @returns {Message} Message 对象
|
|
254
|
+
*/
|
|
255
|
+
rowToMessage(row) {
|
|
256
|
+
return {
|
|
257
|
+
id: row.id,
|
|
258
|
+
sessionId: row.session_id,
|
|
259
|
+
role: row.role,
|
|
260
|
+
content: row.content,
|
|
261
|
+
keepContext: Boolean(row.keep_context),
|
|
262
|
+
isOriginal: Boolean(row.is_original),
|
|
263
|
+
createdAt: row.created_at,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* 记忆服务单例实例
|
|
269
|
+
*
|
|
270
|
+
* 在整个应用中共享同一个 MemoryService 实例
|
|
271
|
+
*
|
|
272
|
+
* 使用方式:
|
|
273
|
+
* import { memoryService } from '../memory/index.js';
|
|
274
|
+
*
|
|
275
|
+
* // 添加消息
|
|
276
|
+
* memoryService.addMessage(sessionId, 'user', '你好', true);
|
|
277
|
+
*
|
|
278
|
+
* // 获取消息
|
|
279
|
+
* const messages = memoryService.getPermanentMessages(sessionId);
|
|
280
|
+
*/
|
|
281
|
+
export const memoryService = new MemoryService();
|
|
282
|
+
//# sourceMappingURL=memory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/modules/memory/memory.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory 模块类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface Message {
|
|
5
|
+
id: number;
|
|
6
|
+
sessionId: string;
|
|
7
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
8
|
+
content: string;
|
|
9
|
+
keepContext: boolean;
|
|
10
|
+
isOriginal: boolean;
|
|
11
|
+
createdAt: string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=memory.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.types.d.ts","sourceRoot":"","sources":["../../../src/modules/memory/memory.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.types.js","sourceRoot":"","sources":["../../../src/modules/memory/memory.types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|