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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web 服务模块
|
|
3
|
+
*
|
|
4
|
+
* 本模块提供 TXCode 的 Web 服务功能,使用 Express 框架构建
|
|
5
|
+
*
|
|
6
|
+
* 主要功能:
|
|
7
|
+
* 1. HTTP 服务器 - 监听指定端口,接受客户端请求
|
|
8
|
+
* 2. 中间件配置 - CORS、JSON 解析、URL 编码
|
|
9
|
+
* 3. API 路由 - 提供聊天、会话、配置、技能等 RESTful API
|
|
10
|
+
* 4. 静态文件服务 - 提供 Vue 前端构建产物
|
|
11
|
+
* 5. SPA 路由支持 - 所有非 API 路由返回 index.html (支持前端路由)
|
|
12
|
+
* 6. 健康检查 - /health 端点用于服务健康检测
|
|
13
|
+
* 7. 优雅关闭 - 处理 SIGTERM/SIGINT 信号,正确关闭数据库连接
|
|
14
|
+
*
|
|
15
|
+
* 端口配置:默认 40000,可通过命令行参数 --port 指定
|
|
16
|
+
*/
|
|
17
|
+
import { Express } from 'express';
|
|
18
|
+
/**
|
|
19
|
+
* WebService 类
|
|
20
|
+
*
|
|
21
|
+
* 封装 Express Web 服务器的创建、配置和启动逻辑
|
|
22
|
+
*
|
|
23
|
+
* 使用示例:
|
|
24
|
+
* const webService = new WebService(40000);
|
|
25
|
+
* await webService.start();
|
|
26
|
+
*/
|
|
27
|
+
export declare class WebService {
|
|
28
|
+
private app;
|
|
29
|
+
private port;
|
|
30
|
+
private server;
|
|
31
|
+
private wss;
|
|
32
|
+
private wsClients;
|
|
33
|
+
/**
|
|
34
|
+
* 构造函数
|
|
35
|
+
*
|
|
36
|
+
* @param port - 服务监听端口,默认 40000
|
|
37
|
+
*
|
|
38
|
+
* 初始化流程:
|
|
39
|
+
* 1. 保存端口号
|
|
40
|
+
* 2. 创建 Express 应用实例
|
|
41
|
+
* 3. 调用 setupMiddleware() 配置中间件
|
|
42
|
+
* 4. 调用 setupRoutes() 配置路由
|
|
43
|
+
*/
|
|
44
|
+
constructor(port?: number);
|
|
45
|
+
/**
|
|
46
|
+
* 配置中间件
|
|
47
|
+
*
|
|
48
|
+
* 中间件是在请求处理管道中执行的函数,可以在请求到达路由之前进行预处理
|
|
49
|
+
*
|
|
50
|
+
* 配置的中间件:
|
|
51
|
+
* 1. cors() - 跨域资源共享,允许浏览器访问不同域名的资源
|
|
52
|
+
* - 用于开发环境,前端可能运行在不同的端口
|
|
53
|
+
* - 生产环境应配置具体的允许域名
|
|
54
|
+
*
|
|
55
|
+
* 2. express.json() - JSON 请求体解析
|
|
56
|
+
* - limit: '10mb' - 允许最大 10MB 的请求体
|
|
57
|
+
* - 用于解析 POST 请求中的 JSON 数据
|
|
58
|
+
*
|
|
59
|
+
* 3. express.urlencoded() - URL 编码请求体解析
|
|
60
|
+
* - extended: true - 允许使用高级 URL 编码
|
|
61
|
+
* - 用于解析表单提交的数据
|
|
62
|
+
*/
|
|
63
|
+
private setupMiddleware;
|
|
64
|
+
/**
|
|
65
|
+
* 配置路由
|
|
66
|
+
*
|
|
67
|
+
* 路由是请求路径与处理函数之间的映射
|
|
68
|
+
*
|
|
69
|
+
* 路由结构:
|
|
70
|
+
* - GET /health -> 健康检查 (返回服务状态和时间戳)
|
|
71
|
+
* - /api/* -> API 路由 (见 apiRouter)
|
|
72
|
+
* - 静态文件 -> Vue 前端构建产物
|
|
73
|
+
* - GET /{*splat} -> SPA fallback (所有非 API 路由返回 index.html)
|
|
74
|
+
*/
|
|
75
|
+
private setupRoutes;
|
|
76
|
+
/**
|
|
77
|
+
* 启动 Web 服务
|
|
78
|
+
*
|
|
79
|
+
* 启动流程:
|
|
80
|
+
* 1. 初始化数据库 (dbService.init())
|
|
81
|
+
* 2. 启动 Express 服务器监听指定端口
|
|
82
|
+
* 3. 打印服务信息 (URL、API 文档)
|
|
83
|
+
* 4. 注册信号处理器 (优雅关闭)
|
|
84
|
+
*
|
|
85
|
+
* @returns {Promise<void>} 服务启动完成后 resolve
|
|
86
|
+
*
|
|
87
|
+
* @throws {Error} 如果端口已被占用或其他网络错误
|
|
88
|
+
*/
|
|
89
|
+
start(): Promise<void>;
|
|
90
|
+
private handleWsMessage;
|
|
91
|
+
private handleChat;
|
|
92
|
+
broadcast(message: any): void;
|
|
93
|
+
getApp(): Express;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=web.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.service.d.ts","sourceRoot":"","sources":["../../src/web/web.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAa9D;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,SAAS,CAA6B;IAE9C;;;;;;;;;;OAUG;gBACS,IAAI,GAAE,MAAc;IAOhC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAqInB;;;;;;;;;;;;OAYG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA2Fd,eAAe;YAef,UAAU;IA+DjB,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IASpC,MAAM,IAAI,OAAO;CAGlB"}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web 服务模块
|
|
3
|
+
*
|
|
4
|
+
* 本模块提供 TXCode 的 Web 服务功能,使用 Express 框架构建
|
|
5
|
+
*
|
|
6
|
+
* 主要功能:
|
|
7
|
+
* 1. HTTP 服务器 - 监听指定端口,接受客户端请求
|
|
8
|
+
* 2. 中间件配置 - CORS、JSON 解析、URL 编码
|
|
9
|
+
* 3. API 路由 - 提供聊天、会话、配置、技能等 RESTful API
|
|
10
|
+
* 4. 静态文件服务 - 提供 Vue 前端构建产物
|
|
11
|
+
* 5. SPA 路由支持 - 所有非 API 路由返回 index.html (支持前端路由)
|
|
12
|
+
* 6. 健康检查 - /health 端点用于服务健康检测
|
|
13
|
+
* 7. 优雅关闭 - 处理 SIGTERM/SIGINT 信号,正确关闭数据库连接
|
|
14
|
+
*
|
|
15
|
+
* 端口配置:默认 40000,可通过命令行参数 --port 指定
|
|
16
|
+
*/
|
|
17
|
+
import express from 'express';
|
|
18
|
+
import cors from 'cors';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
import * as fs from 'fs';
|
|
21
|
+
import * as readline from 'readline';
|
|
22
|
+
import * as http from 'http';
|
|
23
|
+
import { WebSocketServer, WebSocket } from 'ws';
|
|
24
|
+
import { apiRouter } from '../api/index.js';
|
|
25
|
+
import { dbService } from '../modules/db/db.service.js';
|
|
26
|
+
import { aiService } from '../modules/ai/index.js';
|
|
27
|
+
import { sessionService } from '../modules/session/index.js';
|
|
28
|
+
import { memoryService } from '../modules/memory/index.js';
|
|
29
|
+
/**
|
|
30
|
+
* WebService 类
|
|
31
|
+
*
|
|
32
|
+
* 封装 Express Web 服务器的创建、配置和启动逻辑
|
|
33
|
+
*
|
|
34
|
+
* 使用示例:
|
|
35
|
+
* const webService = new WebService(40000);
|
|
36
|
+
* await webService.start();
|
|
37
|
+
*/
|
|
38
|
+
export class WebService {
|
|
39
|
+
/**
|
|
40
|
+
* 构造函数
|
|
41
|
+
*
|
|
42
|
+
* @param port - 服务监听端口,默认 40000
|
|
43
|
+
*
|
|
44
|
+
* 初始化流程:
|
|
45
|
+
* 1. 保存端口号
|
|
46
|
+
* 2. 创建 Express 应用实例
|
|
47
|
+
* 3. 调用 setupMiddleware() 配置中间件
|
|
48
|
+
* 4. 调用 setupRoutes() 配置路由
|
|
49
|
+
*/
|
|
50
|
+
constructor(port = 40000) {
|
|
51
|
+
this.server = null;
|
|
52
|
+
this.wss = null;
|
|
53
|
+
this.wsClients = new Set();
|
|
54
|
+
this.port = port;
|
|
55
|
+
this.app = express();
|
|
56
|
+
this.setupMiddleware(); // 配置中间件
|
|
57
|
+
this.setupRoutes(); // 配置路由
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 配置中间件
|
|
61
|
+
*
|
|
62
|
+
* 中间件是在请求处理管道中执行的函数,可以在请求到达路由之前进行预处理
|
|
63
|
+
*
|
|
64
|
+
* 配置的中间件:
|
|
65
|
+
* 1. cors() - 跨域资源共享,允许浏览器访问不同域名的资源
|
|
66
|
+
* - 用于开发环境,前端可能运行在不同的端口
|
|
67
|
+
* - 生产环境应配置具体的允许域名
|
|
68
|
+
*
|
|
69
|
+
* 2. express.json() - JSON 请求体解析
|
|
70
|
+
* - limit: '10mb' - 允许最大 10MB 的请求体
|
|
71
|
+
* - 用于解析 POST 请求中的 JSON 数据
|
|
72
|
+
*
|
|
73
|
+
* 3. express.urlencoded() - URL 编码请求体解析
|
|
74
|
+
* - extended: true - 允许使用高级 URL 编码
|
|
75
|
+
* - 用于解析表单提交的数据
|
|
76
|
+
*/
|
|
77
|
+
setupMiddleware() {
|
|
78
|
+
// CORS 中间件 - 允许跨域请求
|
|
79
|
+
this.app.use(cors());
|
|
80
|
+
// JSON 解析中间件 - 解析 JSON 请求体
|
|
81
|
+
this.app.use(express.json({ limit: '10mb' }));
|
|
82
|
+
// URL 编码解析中间件 - 解析表单数据
|
|
83
|
+
this.app.use(express.urlencoded({ extended: true }));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 配置路由
|
|
87
|
+
*
|
|
88
|
+
* 路由是请求路径与处理函数之间的映射
|
|
89
|
+
*
|
|
90
|
+
* 路由结构:
|
|
91
|
+
* - GET /health -> 健康检查 (返回服务状态和时间戳)
|
|
92
|
+
* - /api/* -> API 路由 (见 apiRouter)
|
|
93
|
+
* - 静态文件 -> Vue 前端构建产物
|
|
94
|
+
* - GET /{*splat} -> SPA fallback (所有非 API 路由返回 index.html)
|
|
95
|
+
*/
|
|
96
|
+
setupRoutes() {
|
|
97
|
+
/**
|
|
98
|
+
* 健康检查端点
|
|
99
|
+
*
|
|
100
|
+
* 用途:
|
|
101
|
+
* 1. Kubernetes/负载均衡器 健康探测
|
|
102
|
+
* 2. 监控服务是否正常运行
|
|
103
|
+
* 3. 获取服务启动时间
|
|
104
|
+
*
|
|
105
|
+
* 响应示例:
|
|
106
|
+
* {
|
|
107
|
+
* "status": "ok",
|
|
108
|
+
* "timestamp": "2024-01-01T00:00:00.000Z"
|
|
109
|
+
* }
|
|
110
|
+
*/
|
|
111
|
+
this.app.get('/health', (req, res) => {
|
|
112
|
+
res.json({
|
|
113
|
+
status: 'ok',
|
|
114
|
+
timestamp: new Date().toISOString()
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* API 路由注册
|
|
119
|
+
*
|
|
120
|
+
* 所有 /api/* 路径的请求都会路由到 apiRouter
|
|
121
|
+
* apiRouter 在 src/api/index.ts 中定义,包含:
|
|
122
|
+
* - /api/chat -> 聊天 API (发送消息、流式响应、历史记录)
|
|
123
|
+
* - /api/sessions -> 会话管理 API (CRUD)
|
|
124
|
+
* - /api/config -> 配置管理 API (AI 提供商、模型)
|
|
125
|
+
* - /api/skills -> 技能管理 API
|
|
126
|
+
*/
|
|
127
|
+
this.app.use('/api', apiRouter);
|
|
128
|
+
/**
|
|
129
|
+
* 静态文件服务与 SPA fallback
|
|
130
|
+
*
|
|
131
|
+
* 检查前端是否已构建:
|
|
132
|
+
* - 如果 web/dist 目录存在,提供静态文件服务
|
|
133
|
+
* - 如果不存在,返回提示信息
|
|
134
|
+
*
|
|
135
|
+
* 静态文件服务配置:
|
|
136
|
+
* - express.static() 会自动处理静态文件的 MIME 类型、缓存等
|
|
137
|
+
* - 访问 http://localhost:40000/ 会返回 index.html
|
|
138
|
+
*
|
|
139
|
+
* SPA 路由支持:
|
|
140
|
+
* - 使用通配符路由 /{*splat} 捕获所有未匹配的请求
|
|
141
|
+
* - 将请求重定向到 index.html,让前端路由处理
|
|
142
|
+
* - 这样前端可以处理 /chat、/settings 等前端路由
|
|
143
|
+
* - 跳过以 /api 开头的请求,返回 404
|
|
144
|
+
*/
|
|
145
|
+
const webDistPath = path.join(process.cwd(), 'web', 'dist');
|
|
146
|
+
if (fs.existsSync(webDistPath)) {
|
|
147
|
+
// ========== 静态文件服务模式 ==========
|
|
148
|
+
// 前端已构建,提供静态文件服务
|
|
149
|
+
this.app.use(express.static(webDistPath));
|
|
150
|
+
/**
|
|
151
|
+
* SPA Fallback 路由
|
|
152
|
+
*
|
|
153
|
+
* 捕获所有非 API 请求,返回 index.html
|
|
154
|
+
* 这样前端路由 (Vue Router) 可以处理路径
|
|
155
|
+
*
|
|
156
|
+
* 处理逻辑:
|
|
157
|
+
* 1. 检查请求路径是否以 /api 开头
|
|
158
|
+
* 2. 如果是 API 请求,返回 404 (让 API 路由处理)
|
|
159
|
+
* 3. 如果不是,返回 index.html
|
|
160
|
+
*/
|
|
161
|
+
this.app.get('/{*splat}', (req, res) => {
|
|
162
|
+
// 跳过 API 路由请求
|
|
163
|
+
if (req.path.startsWith('/api')) {
|
|
164
|
+
return res.status(404).json({
|
|
165
|
+
success: false,
|
|
166
|
+
error: 'Not Found',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// 返回 index.html 让前端处理路由
|
|
170
|
+
res.sendFile(path.join(webDistPath, 'index.html'));
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// ========== 前端未构建模式 ==========
|
|
175
|
+
// 返回提示信息,指导用户构建前端
|
|
176
|
+
this.app.use('/{*splat}', (req, res) => {
|
|
177
|
+
if (req.path.startsWith('/api')) {
|
|
178
|
+
return res.status(404).json({
|
|
179
|
+
success: false,
|
|
180
|
+
error: 'Not Found',
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
res.send(`
|
|
184
|
+
<h1>TXCode Web</h1>
|
|
185
|
+
<p>前端未构建。请运行以下命令:</p>
|
|
186
|
+
<pre>
|
|
187
|
+
cd web
|
|
188
|
+
npm install
|
|
189
|
+
npm run build
|
|
190
|
+
</pre>
|
|
191
|
+
<p>或者使用开发模式:</p>
|
|
192
|
+
<pre>
|
|
193
|
+
cd web
|
|
194
|
+
npm install
|
|
195
|
+
npm run dev
|
|
196
|
+
</pre>
|
|
197
|
+
<h2>API 文档</h2>
|
|
198
|
+
<ul>
|
|
199
|
+
<li>GET /api/config/providers - 获取提供商列表</li>
|
|
200
|
+
<li>POST /api/config/providers - 添加提供商</li>
|
|
201
|
+
<li>GET /api/config/models - 获取模型列表</li>
|
|
202
|
+
<li>GET /api/sessions - 获取会话列表</li>
|
|
203
|
+
<li>POST /api/chat - 发送聊天消息</li>
|
|
204
|
+
</ul>
|
|
205
|
+
`);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 错误处理中间件
|
|
210
|
+
*
|
|
211
|
+
* 捕获所有未处理的错误,统一返回 JSON 格式的错误响应
|
|
212
|
+
*
|
|
213
|
+
* 注意:Express 的错误处理中间件需要 4 个参数
|
|
214
|
+
* 这样 Express 会识别它为错误处理中间件
|
|
215
|
+
*/
|
|
216
|
+
this.app.use((err, req, res, next) => {
|
|
217
|
+
console.error('Error:', err.message);
|
|
218
|
+
res.status(500).json({
|
|
219
|
+
success: false,
|
|
220
|
+
error: err.message,
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* 启动 Web 服务
|
|
226
|
+
*
|
|
227
|
+
* 启动流程:
|
|
228
|
+
* 1. 初始化数据库 (dbService.init())
|
|
229
|
+
* 2. 启动 Express 服务器监听指定端口
|
|
230
|
+
* 3. 打印服务信息 (URL、API 文档)
|
|
231
|
+
* 4. 注册信号处理器 (优雅关闭)
|
|
232
|
+
*
|
|
233
|
+
* @returns {Promise<void>} 服务启动完成后 resolve
|
|
234
|
+
*
|
|
235
|
+
* @throws {Error} 如果端口已被占用或其他网络错误
|
|
236
|
+
*/
|
|
237
|
+
async start() {
|
|
238
|
+
dbService.init();
|
|
239
|
+
return new Promise((resolve, reject) => {
|
|
240
|
+
this.server = http.createServer(this.app);
|
|
241
|
+
this.wss = new WebSocketServer({ server: this.server });
|
|
242
|
+
this.wss.on('connection', (ws) => {
|
|
243
|
+
this.wsClients.add(ws);
|
|
244
|
+
ws.send(JSON.stringify({ type: 'connected', message: 'WebSocket connected' }));
|
|
245
|
+
ws.on('message', async (data) => {
|
|
246
|
+
try {
|
|
247
|
+
const msg = JSON.parse(data.toString());
|
|
248
|
+
await this.handleWsMessage(ws, msg);
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
ws.send(JSON.stringify({ type: 'error', error: 'Invalid message format' }));
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
ws.on('close', () => {
|
|
255
|
+
this.wsClients.delete(ws);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
this.server.listen(this.port, () => {
|
|
259
|
+
// ========== 步骤 3: 打印服务信息 ==========
|
|
260
|
+
console.log(`TXCode Web 服务已启动: http://localhost:${this.port}`);
|
|
261
|
+
const webDistPath = path.join(process.cwd(), 'web', 'dist');
|
|
262
|
+
if (fs.existsSync(webDistPath)) {
|
|
263
|
+
console.log(`Web 界面: http://localhost:${this.port}`);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
console.log(`提示: 前端未构建,请 cd web && npm install && npm run build`);
|
|
267
|
+
}
|
|
268
|
+
console.log(`API 文档: http://localhost:${this.port}/api`);
|
|
269
|
+
console.log(`按 Ctrl+C 停止服务\n`);
|
|
270
|
+
/**
|
|
271
|
+
* 优雅关闭处理器
|
|
272
|
+
*
|
|
273
|
+
* 处理流程:
|
|
274
|
+
* 1. 接收 SIGTERM (Docker/Kubernetes) 或 SIGINT (Ctrl+C) 信号
|
|
275
|
+
* 2. 打印关闭提示
|
|
276
|
+
* 3. 关闭 HTTP 服务器 (停止接受新请求)
|
|
277
|
+
* 4. 关闭数据库连接
|
|
278
|
+
* 5. 退出进程
|
|
279
|
+
*
|
|
280
|
+
* 超时机制:
|
|
281
|
+
* - 如果 3 秒内未正常关闭,强制退出进程
|
|
282
|
+
* - 防止服务挂起无法退出
|
|
283
|
+
*/
|
|
284
|
+
const shutdown = () => {
|
|
285
|
+
console.log('\n正在关闭服务...');
|
|
286
|
+
this.wss?.close();
|
|
287
|
+
this.server?.close(() => {
|
|
288
|
+
dbService.close();
|
|
289
|
+
console.log('服务已关闭');
|
|
290
|
+
process.exit(0);
|
|
291
|
+
});
|
|
292
|
+
setTimeout(() => {
|
|
293
|
+
console.log('强制退出');
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}, 3000);
|
|
296
|
+
};
|
|
297
|
+
// 注册信号处理器
|
|
298
|
+
process.on('SIGTERM', shutdown); // Docker/K8s 发送的终止信号
|
|
299
|
+
process.on('SIGINT', shutdown); // Ctrl+C 发送的中断信号
|
|
300
|
+
// ========== Windows 平台特殊处理 ==========
|
|
301
|
+
// Windows 上使用 readline 处理 Ctrl+C 事件
|
|
302
|
+
// 注意:仅在 stdin 是 TTY 时添加 readline 处理
|
|
303
|
+
// 否则在非交互模式下会立即触发 close 事件
|
|
304
|
+
if (process.platform === 'win32' && process.stdin.isTTY) {
|
|
305
|
+
const rl = readline.createInterface({
|
|
306
|
+
input: process.stdin,
|
|
307
|
+
output: process.stdout,
|
|
308
|
+
});
|
|
309
|
+
rl.on('close', () => {
|
|
310
|
+
shutdown();
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
resolve();
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
async handleWsMessage(ws, msg) {
|
|
318
|
+
const { type, data } = msg;
|
|
319
|
+
switch (type) {
|
|
320
|
+
case 'chat':
|
|
321
|
+
await this.handleChat(ws, data);
|
|
322
|
+
break;
|
|
323
|
+
case 'ping':
|
|
324
|
+
ws.send(JSON.stringify({ type: 'pong' }));
|
|
325
|
+
break;
|
|
326
|
+
default:
|
|
327
|
+
ws.send(JSON.stringify({ type: 'error', error: 'Unknown message type' }));
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async handleChat(ws, data) {
|
|
331
|
+
const { message, sessionId, projectPath } = data;
|
|
332
|
+
try {
|
|
333
|
+
let session = sessionId ? sessionService.get(sessionId) : null;
|
|
334
|
+
if (!session) {
|
|
335
|
+
session = sessionService.create('New Chat', projectPath);
|
|
336
|
+
}
|
|
337
|
+
sessionService.switchTo(session.id);
|
|
338
|
+
ws.send(JSON.stringify({ type: 'session', data: { sessionId: session.id } }));
|
|
339
|
+
const reactSteps = [];
|
|
340
|
+
console.log('[WebSocket] Chat message:', message);
|
|
341
|
+
console.log('[handleChat] calling chatWithReAct, sessionId:', session.id, 'message:', message.substring(0, 20));
|
|
342
|
+
const result = await aiService.chatWithReAct(message, {
|
|
343
|
+
sessionId: session.id,
|
|
344
|
+
projectPath: session.projectPath || undefined,
|
|
345
|
+
memoryService,
|
|
346
|
+
onStep: (step, iteration) => {
|
|
347
|
+
const stepData = {
|
|
348
|
+
iteration,
|
|
349
|
+
thought: step.thought,
|
|
350
|
+
action: step.action,
|
|
351
|
+
input: typeof step.actionInput === 'string'
|
|
352
|
+
? step.actionInput
|
|
353
|
+
: JSON.stringify(step.actionInput),
|
|
354
|
+
success: step.observation && !step.observation.error,
|
|
355
|
+
};
|
|
356
|
+
ws.send(JSON.stringify({ type: 'step', data: stepData }));
|
|
357
|
+
if (step.action === 'todowrite' && step.observation?.metadata?.todos) {
|
|
358
|
+
const todos = step.observation.metadata.todos;
|
|
359
|
+
const formattedTodos = todos.map((t) => ({
|
|
360
|
+
name: t.content || t.name || '',
|
|
361
|
+
status: t.status || 'pending'
|
|
362
|
+
}));
|
|
363
|
+
ws.send(JSON.stringify({ type: 'todos', data: { todos: formattedTodos } }));
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
});
|
|
367
|
+
ws.send(JSON.stringify({
|
|
368
|
+
type: 'done',
|
|
369
|
+
data: {
|
|
370
|
+
sessionId: session.id,
|
|
371
|
+
response: result.answer || result.steps[result.steps.length - 1]?.thought,
|
|
372
|
+
iterations: result.iterations,
|
|
373
|
+
success: result.success,
|
|
374
|
+
}
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
ws.send(JSON.stringify({
|
|
379
|
+
type: 'error',
|
|
380
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
381
|
+
}));
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
broadcast(message) {
|
|
385
|
+
const data = JSON.stringify(message);
|
|
386
|
+
this.wsClients.forEach(client => {
|
|
387
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
388
|
+
client.send(data);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
getApp() {
|
|
393
|
+
return this.app;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=web.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.service.js","sourceRoot":"","sources":["../../src/web/web.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tianxincode",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "AI Coding Assistant",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"txcode": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc && npm run copy-txt",
|
|
13
|
+
"copy-txt": "node -e \"const fs=require('fs');const path=require('path');const src='src/modules/tools/builtin';const dst='dist/modules/tools/builtin';fs.readdirSync(src).filter(f=>f.endsWith('.txt')).forEach(f=>fs.copyFileSync(path.join(src,f),path.join(dst,f)));const skillSrc='src/modules/skill';const skillDst='dist/modules/skill';fs.mkdirSync(skillDst,{recursive:true});fs.copyFileSync(path.join(skillSrc,'skill.txt'),path.join(skillDst,'skill.txt'));const promptSrc='src/modules/ai/react/prompt';const promptDst='dist/modules/ai/react/prompt';fs.mkdirSync(promptDst,{recursive:true});fs.copyFileSync(path.join(promptSrc,'role.txt'),path.join(promptDst,'role.txt'));console.log('Copied .txt files to dist')\"",
|
|
14
|
+
"dev": "tsx src/index.ts",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"start:web": "node dist/index.js web",
|
|
17
|
+
"web:dev": "cd web && npm run dev",
|
|
18
|
+
"web:build": "cd web && npm install && npm run build",
|
|
19
|
+
"test": "jest",
|
|
20
|
+
"test:coverage": "jest --coverage"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"ai",
|
|
24
|
+
"coding",
|
|
25
|
+
"assistant"
|
|
26
|
+
],
|
|
27
|
+
"author": "",
|
|
28
|
+
"license": "ISC",
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
31
|
+
"@types/cors": "^2.8.19",
|
|
32
|
+
"@types/express": "^5.0.6",
|
|
33
|
+
"@types/jest": "^30.0.0",
|
|
34
|
+
"@types/js-yaml": "^4.0.9",
|
|
35
|
+
"@types/node": "^25.5.0",
|
|
36
|
+
"@types/react": "^18.3.28",
|
|
37
|
+
"@types/react-dom": "^18.3.7",
|
|
38
|
+
"@types/uuid": "^10.0.0",
|
|
39
|
+
"@types/ws": "^8.18.1",
|
|
40
|
+
"better-sqlite3": "^12.8.0",
|
|
41
|
+
"cors": "^2.8.6",
|
|
42
|
+
"express": "^5.2.1",
|
|
43
|
+
"ink": "^5.1.1",
|
|
44
|
+
"jest": "^30.3.0",
|
|
45
|
+
"js-yaml": "^4.1.1",
|
|
46
|
+
"react": "^18.3.1",
|
|
47
|
+
"ts-jest": "^29.4.6",
|
|
48
|
+
"ts-node": "^10.9.2",
|
|
49
|
+
"tsx": "^4.21.0",
|
|
50
|
+
"typescript": "^5.9.3",
|
|
51
|
+
"uuid": "^9.0.1",
|
|
52
|
+
"yaml": "^2.8.3"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"ws": "^8.20.0"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as r,a}from"./index-DQRR0ggU.js";const o={name:"Layout",data(){return{sidebarVisible:!0,showSessionDropdown:!1,sessions:[],currentSessionId:null,currentSessionName:""}},methods:{toggleSidebar(){this.sidebarVisible=!this.sidebarVisible},toggleSessionDropdown(){this.showSessionDropdown=!this.showSessionDropdown},async switchSession(s){this.currentSessionId=s.id,this.currentSessionName=s.title,this.showSessionDropdown=!1,this.$route.params.id!==s.id&&this.$router.push({name:"chat-session",params:{id:s.id}}).catch(()=>{})},async createNewSession(){try{const s=await a.createSession("新会话");this.sessions.unshift(s.data),this.switchSession(s.data),this.showSessionDropdown=!1}catch(s){this.$message.error("创建会话失败: "+s.message)}},async loadSessions(){try{const s=await a.getSessions();this.sessions=s.data||[],this.sessions.length>0&&!this.currentSessionId&&(this.currentSessionId=this.sessions[0].id,this.currentSessionName=this.sessions[0].title)}catch(s){console.error("加载会话失败:",s)}}},async created(){await this.loadSessions(),document.addEventListener("click",s=>{this.$el.contains(s.target)||(this.showSessionDropdown=!1)})}};var n=function(){var e=this,t=e._self._c;return t("div",{staticClass:"flex flex-col h-screen overflow-hidden"},[t("header",{staticClass:"h-10 bg-sidebar border-b border-black flex items-center justify-between px-4 shrink-0 z-20"},[t("div",{staticClass:"flex items-center gap-4"},[e._m(0),t("div",{staticClass:"relative"},[t("div",{staticClass:"bg-black/20 px-2 py-0.5 rounded text-xs text-textMuted border border-white/10 cursor-pointer hover:bg-black/40 flex items-center gap-2 select-none",on:{click:e.toggleSessionDropdown}},[t("i",{staticClass:"fa-solid fa-comment"}),e._v(" "),t("span",[e._v(e._s(e.currentSessionName||"选择会话"))]),e._v(" "),t("i",{staticClass:"fa-solid fa-chevron-down text-[10px] transition-transform",class:{"rotate-180":e.showSessionDropdown}})]),t("div",{directives:[{name:"show",rawName:"v-show",value:e.showSessionDropdown,expression:"showSessionDropdown"}],staticClass:"absolute top-full left-0 mt-1 w-56 bg-sidebar border border-border rounded shadow-lg py-1 z-50"},[t("div",{staticClass:"px-3 py-1.5 text-xs text-textMuted uppercase font-bold"},[e._v("最近会话")]),e._l(e.sessions,function(i){return t("button",{key:i.id,staticClass:"w-full text-left px-3 py-2 text-sm hover:bg-active flex items-center gap-2",class:i.id===e.currentSessionId?"text-white bg-active":"text-textMuted hover:text-white",on:{click:function(d){return e.switchSession(i)}}},[t("i",{staticClass:"fa-regular fa-comment text-xs"}),e._v(" "+e._s(i.title)+" ")])}),t("div",{staticClass:"border-t border-border my-1"}),t("button",{staticClass:"w-full text-left px-3 py-2 text-sm text-textMuted hover:bg-active hover:text-white flex items-center gap-2",on:{click:e.createNewSession}},[t("i",{staticClass:"fa-solid fa-plus text-xs"}),e._v(" 新建会话... ")])],2)])]),t("div",{staticClass:"flex items-center gap-3"},[e._m(1),t("button",{directives:[{name:"show",rawName:"v-show",value:e.$route.name==="chat",expression:"$route.name === 'chat'"}],staticClass:"hover:text-white",attrs:{title:e.sidebarVisible?"关闭侧栏":"显示侧栏"},on:{click:e.toggleSidebar}},[t("i",{staticClass:"fa-solid fa-columns"})]),t("router-link",{staticClass:"hover:text-white",attrs:{to:"/settings",title:"设置"}},[t("i",{staticClass:"fa-solid fa-gear"})])],1)]),t("div",{staticClass:"flex-1 flex overflow-hidden"},[t("nav",{staticClass:"w-12 bg-activityBar flex flex-col items-center py-2 shrink-0 border-r border-black z-10 justify-between"},[t("div",{staticClass:"flex flex-col items-center w-full"},[t("router-link",{staticClass:"w-10 h-10 mb-2 rounded flex items-center justify-center relative",class:e.$route.name==="codeView"||e.$route.name==="codeView-session"?"text-white border-l-2 border-accent bg-sidebar":"text-textMuted hover:text-white border-l-2 border-transparent",attrs:{to:"/codeView",title:"工作台"}},[t("i",{staticClass:"fa-regular fa-comments text-xl"})]),t("router-link",{staticClass:"w-10 h-10 mb-2 rounded flex items-center justify-center",class:e.$route.name==="files"?"text-white border-l-2 border-accent bg-sidebar":"text-textMuted hover:text-white border-l-2 border-transparent",attrs:{to:"/files",title:"文件"}},[t("i",{staticClass:"fa-solid fa-folder-open text-xl"})]),t("router-link",{staticClass:"w-10 h-10 mb-2 rounded flex items-center justify-center relative",class:e.$route.name==="skills"?"text-white border-l-2 border-accent bg-sidebar":"text-textMuted hover:text-white border-l-2 border-transparent",attrs:{to:"/skills",title:"Skill 管理"}},[t("i",{staticClass:"fa-solid fa-shapes text-xl"})]),t("router-link",{staticClass:"w-10 h-10 mb-2 rounded flex items-center justify-center",class:e.$route.name==="db"?"text-white border-l-2 border-accent bg-sidebar":"text-textMuted hover:text-white border-l-2 border-transparent",attrs:{to:"/db",title:"数据库"}},[t("i",{staticClass:"fa-solid fa-database text-xl"})])],1),t("div",{staticClass:"flex flex-col items-center w-full mb-2"},[t("router-link",{staticClass:"w-10 h-10 mb-2 rounded flex items-center justify-center",class:e.$route.name==="settings"?"text-white border-l-2 border-accent bg-sidebar":"text-textMuted hover:text-white border-l-2 border-transparent hover:bg-white/5",attrs:{to:"/settings",title:"设置"}},[t("i",{staticClass:"fa-solid fa-gear text-xl"})])],1)]),t("router-view",{staticClass:"flex-1 flex overflow-hidden",attrs:{"sidebar-visible":e.sidebarVisible},on:{"toggle-sidebar":e.toggleSidebar}})],1),e._m(2)])},l=[function(){var s=this,e=s._self._c;return e("div",{staticClass:"font-bold text-white flex items-center gap-2"},[e("i",{staticClass:"fa-solid fa-robot text-accent"}),e("span",[s._v("TXCode Agent")])])},function(){var s=this,e=s._self._c;return e("span",{staticClass:"text-xs text-textMuted mr-2"},[e("i",{staticClass:"fa-solid fa-circle text-green-500 text-[8px]"}),s._v(" Server Connected")])},function(){var s=this,e=s._self._c;return e("footer",{staticClass:"h-6 bg-accent text-white text-xs flex items-center justify-between px-3 shrink-0 z-20"},[e("div",{staticClass:"flex items-center gap-4"},[e("span",[e("i",{staticClass:"fa-solid fa-code-branch"}),s._v(" main")])]),e("div",{staticClass:"flex items-center gap-4"},[e("span",[s._v("TXCode")]),e("span",[s._v("UTF-8")])])])}],c=r(o,n,l,!1,null,null);const f=c.exports;export{f as default};
|
|
Binary file
|
|
Binary file
|