tianxincode 1.0.11 → 1.0.13
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/dist/api/api.types.d.ts +1 -0
- package/dist/api/api.types.d.ts.map +1 -1
- package/dist/api/chat.routes.js +108 -139
- package/dist/api/chat.routes.js.map +1 -1
- package/dist/api/db.routes.js +8 -4
- package/dist/api/db.routes.js.map +1 -1
- package/dist/api/email.routes.d.ts +2 -0
- package/dist/api/email.routes.d.ts.map +1 -0
- package/dist/api/email.routes.js +78 -0
- package/dist/api/email.routes.js.map +1 -0
- package/dist/api/files.routes.js +54 -0
- package/dist/api/files.routes.js.map +1 -1
- package/dist/api/filesystem.routes.js +0 -2
- package/dist/api/filesystem.routes.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +6 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/scheduler.routes.d.ts +2 -0
- package/dist/api/scheduler.routes.d.ts.map +1 -0
- package/dist/api/scheduler.routes.js +127 -0
- package/dist/api/scheduler.routes.js.map +1 -0
- package/dist/api/terminal.routes.d.ts +13 -0
- package/dist/api/terminal.routes.d.ts.map +1 -0
- package/dist/api/terminal.routes.js +77 -0
- package/dist/api/terminal.routes.js.map +1 -0
- package/dist/cli/commands.js +5 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +125 -100
- package/dist/components/App.js.map +1 -1
- package/dist/config/tx.config.d.ts +0 -1
- package/dist/config/tx.config.d.ts.map +1 -1
- package/dist/config/tx.config.js +1 -1
- package/dist/config/tx.config.js.map +1 -1
- package/dist/modules/ai/agents/chat/agent_tool.d.ts +2 -0
- package/dist/modules/ai/agents/chat/agent_tool.d.ts.map +1 -0
- package/dist/modules/ai/agents/chat/agent_tool.js +15 -0
- package/dist/modules/ai/agents/chat/agent_tool.js.map +1 -0
- package/dist/modules/ai/agents/chat/chat.agent.d.ts +32 -0
- package/dist/modules/ai/agents/chat/chat.agent.d.ts.map +1 -0
- package/dist/modules/ai/agents/chat/chat.agent.js +255 -0
- package/dist/modules/ai/agents/chat/chat.agent.js.map +1 -0
- package/dist/modules/ai/agents/chat/prompts/role.txt +31 -0
- package/dist/modules/ai/agents/code/agent_tool.d.ts +2 -0
- package/dist/modules/ai/agents/code/agent_tool.d.ts.map +1 -0
- package/dist/modules/ai/agents/code/agent_tool.js +17 -0
- package/dist/modules/ai/agents/code/agent_tool.js.map +1 -0
- package/dist/modules/ai/agents/code/code.agent.d.ts +32 -0
- package/dist/modules/ai/agents/code/code.agent.d.ts.map +1 -0
- package/dist/modules/ai/agents/code/code.agent.js +255 -0
- package/dist/modules/ai/agents/code/code.agent.js.map +1 -0
- package/dist/modules/ai/agents/code/prompts/role.txt +51 -0
- package/dist/modules/ai/agents/index.d.ts +7 -0
- package/dist/modules/ai/agents/index.d.ts.map +1 -0
- package/dist/modules/ai/agents/index.js +7 -0
- package/dist/modules/ai/agents/index.js.map +1 -0
- package/dist/modules/ai/agents/task/agent_tool.d.ts +2 -0
- package/dist/modules/ai/agents/task/agent_tool.d.ts.map +1 -0
- package/dist/modules/ai/agents/task/agent_tool.js +14 -0
- package/dist/modules/ai/agents/task/agent_tool.js.map +1 -0
- package/dist/modules/ai/agents/task/prompts/role.txt +51 -0
- package/dist/modules/ai/agents/task/task.agent.d.ts +31 -0
- package/dist/modules/ai/agents/task/task.agent.d.ts.map +1 -0
- package/dist/modules/ai/agents/task/task.agent.js +226 -0
- package/dist/modules/ai/agents/task/task.agent.js.map +1 -0
- package/dist/modules/ai/ai.service.d.ts +13 -18
- package/dist/modules/ai/ai.service.d.ts.map +1 -1
- package/dist/modules/ai/ai.service.js +40 -105
- package/dist/modules/ai/ai.service.js.map +1 -1
- package/dist/modules/ai/ai.types.d.ts +8 -5
- package/dist/modules/ai/ai.types.d.ts.map +1 -1
- package/dist/modules/ai/index.d.ts +1 -3
- package/dist/modules/ai/index.d.ts.map +1 -1
- package/dist/modules/ai/index.js +0 -2
- package/dist/modules/ai/index.js.map +1 -1
- package/dist/modules/ai/openai.provider.d.ts.map +1 -1
- package/dist/modules/ai/openai.provider.js +3 -0
- package/dist/modules/ai/openai.provider.js.map +1 -1
- package/dist/modules/ai/provider/base.d.ts +5 -0
- package/dist/modules/ai/provider/base.d.ts.map +1 -1
- package/dist/modules/ai/provider/openai/openai-agent.d.ts +8 -0
- package/dist/modules/ai/provider/openai/openai-agent.d.ts.map +1 -1
- package/dist/modules/ai/provider/openai/openai-agent.js +50 -5
- package/dist/modules/ai/provider/openai/openai-agent.js.map +1 -1
- package/dist/modules/ai/react/provider.parser.d.ts +20 -0
- package/dist/modules/ai/react/provider.parser.d.ts.map +1 -0
- package/dist/modules/ai/react/provider.parser.js +88 -0
- package/dist/modules/ai/react/provider.parser.js.map +1 -0
- package/dist/modules/ai/summarizer/summarizer.prompts.d.ts +1 -1
- package/dist/modules/ai/summarizer/summarizer.prompts.d.ts.map +1 -1
- package/dist/modules/ai/summarizer/summarizer.prompts.js +19 -19
- package/dist/modules/ai/summarizer/summarizer.prompts.js.map +1 -1
- package/dist/modules/ai/summarizer/summarizer.service.d.ts.map +1 -1
- package/dist/modules/ai/summarizer/summarizer.service.js +33 -7
- package/dist/modules/ai/summarizer/summarizer.service.js.map +1 -1
- package/dist/modules/ai/summarizer/summarizer.types.d.ts +1 -0
- package/dist/modules/ai/summarizer/summarizer.types.d.ts.map +1 -1
- package/dist/modules/config/config.service.d.ts +3 -0
- package/dist/modules/config/config.service.d.ts.map +1 -1
- package/dist/modules/config/config.service.js +33 -0
- package/dist/modules/config/config.service.js.map +1 -1
- package/dist/modules/db/db.service.d.ts +3 -0
- package/dist/modules/db/db.service.d.ts.map +1 -1
- package/dist/modules/db/db.service.js +79 -0
- package/dist/modules/db/db.service.js.map +1 -1
- package/dist/modules/email/email.config.repository.d.ts +14 -0
- package/dist/modules/email/email.config.repository.d.ts.map +1 -0
- package/dist/modules/email/email.config.repository.js +70 -0
- package/dist/modules/email/email.config.repository.js.map +1 -0
- package/dist/modules/email/email.service.d.ts +14 -0
- package/dist/modules/email/email.service.d.ts.map +1 -0
- package/dist/modules/email/email.service.js +54 -0
- package/dist/modules/email/email.service.js.map +1 -0
- package/dist/modules/email/email.types.d.ts +20 -0
- package/dist/modules/email/email.types.d.ts.map +1 -0
- package/dist/modules/email/email.types.js +2 -0
- package/dist/modules/email/email.types.js.map +1 -0
- package/dist/modules/email/index.d.ts +4 -0
- package/dist/modules/email/index.d.ts.map +1 -0
- package/dist/modules/email/index.js +3 -0
- package/dist/modules/email/index.js.map +1 -0
- package/dist/modules/gateway/adapters/dingtalk.adapter.d.ts +7 -0
- package/dist/modules/gateway/adapters/dingtalk.adapter.d.ts.map +1 -1
- package/dist/modules/gateway/adapters/dingtalk.adapter.js +62 -2
- package/dist/modules/gateway/adapters/dingtalk.adapter.js.map +1 -1
- package/dist/modules/gateway/gateway.service.d.ts +1 -0
- package/dist/modules/gateway/gateway.service.d.ts.map +1 -1
- package/dist/modules/gateway/gateway.service.js +61 -18
- package/dist/modules/gateway/gateway.service.js.map +1 -1
- package/dist/modules/gateway/index.d.ts +1 -1
- package/dist/modules/gateway/index.d.ts.map +1 -1
- package/dist/modules/gateway/index.js +0 -1
- package/dist/modules/gateway/index.js.map +1 -1
- package/dist/modules/scheduler/index.d.ts +4 -0
- package/dist/modules/scheduler/index.d.ts.map +1 -0
- package/dist/modules/scheduler/index.js +4 -0
- package/dist/modules/scheduler/index.js.map +1 -0
- package/dist/modules/scheduler/notify.service.d.ts +12 -0
- package/dist/modules/scheduler/notify.service.d.ts.map +1 -0
- package/dist/modules/scheduler/notify.service.js +20 -0
- package/dist/modules/scheduler/notify.service.js.map +1 -0
- package/dist/modules/scheduler/scheduler.service.d.ts +35 -0
- package/dist/modules/scheduler/scheduler.service.d.ts.map +1 -0
- package/dist/modules/scheduler/scheduler.service.js +258 -0
- package/dist/modules/scheduler/scheduler.service.js.map +1 -0
- package/dist/modules/scheduler/task-log.service.d.ts +20 -0
- package/dist/modules/scheduler/task-log.service.d.ts.map +1 -0
- package/dist/modules/scheduler/task-log.service.js +44 -0
- package/dist/modules/scheduler/task-log.service.js.map +1 -0
- package/dist/modules/terminal/index.d.ts +3 -0
- package/dist/modules/terminal/index.d.ts.map +1 -0
- package/dist/modules/terminal/index.js +2 -0
- package/dist/modules/terminal/index.js.map +1 -0
- package/dist/modules/terminal/terminal.service.d.ts +48 -0
- package/dist/modules/terminal/terminal.service.d.ts.map +1 -0
- package/dist/modules/terminal/terminal.service.js +284 -0
- package/dist/modules/terminal/terminal.service.js.map +1 -0
- package/dist/modules/tools/index.d.ts +0 -1
- package/dist/modules/tools/index.d.ts.map +1 -1
- package/dist/modules/tools/index.js +0 -1
- package/dist/modules/tools/index.js.map +1 -1
- package/dist/modules/tools/provider/email.tool.d.ts +3 -0
- package/dist/modules/tools/provider/email.tool.d.ts.map +1 -0
- package/dist/modules/tools/provider/email.tool.js +50 -0
- package/dist/modules/tools/provider/email.tool.js.map +1 -0
- package/dist/modules/tools/provider/index.d.ts.map +1 -1
- package/dist/modules/tools/provider/index.js +2 -0
- package/dist/modules/tools/provider/index.js.map +1 -1
- package/dist/modules/tools/tool.service.d.ts +1 -1
- package/dist/modules/tools/tool.service.js +4 -4
- package/dist/modules/tools/tool.service.js.map +1 -1
- package/dist/repository/aiLog.repository.d.ts +17 -0
- package/dist/repository/aiLog.repository.d.ts.map +1 -0
- package/dist/repository/aiLog.repository.js +39 -0
- package/dist/repository/aiLog.repository.js.map +1 -0
- package/dist/repository/base.repository.d.ts +6 -0
- package/dist/repository/base.repository.d.ts.map +1 -0
- package/dist/repository/base.repository.js +14 -0
- package/dist/repository/base.repository.js.map +1 -0
- package/dist/repository/index.d.ts +5 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/repository/index.js +5 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/message.repository.d.ts +9 -0
- package/dist/repository/message.repository.d.ts.map +1 -0
- package/dist/repository/message.repository.js +35 -0
- package/dist/repository/message.repository.js.map +1 -0
- package/dist/repository/session.repository.d.ts +15 -0
- package/dist/repository/session.repository.d.ts.map +1 -0
- package/dist/repository/session.repository.js +33 -0
- package/dist/repository/session.repository.js.map +1 -0
- package/dist/services/codeChat/codeChat.service.d.ts +7 -0
- package/dist/services/codeChat/codeChat.service.d.ts.map +1 -0
- package/dist/services/codeChat/codeChat.service.js +53 -0
- package/dist/services/codeChat/codeChat.service.js.map +1 -0
- package/dist/services/codeChat/codeChat.types.d.ts +47 -0
- package/dist/services/codeChat/codeChat.types.d.ts.map +1 -0
- package/dist/services/codeChat/codeChat.types.js +2 -0
- package/dist/services/codeChat/codeChat.types.js.map +1 -0
- package/dist/services/codeChat/index.d.ts +5 -0
- package/dist/services/codeChat/index.d.ts.map +1 -0
- package/dist/services/codeChat/index.js +4 -0
- package/dist/services/codeChat/index.js.map +1 -0
- package/dist/services/commandChat/commandChat.service.d.ts +15 -0
- package/dist/services/commandChat/commandChat.service.d.ts.map +1 -0
- package/dist/services/commandChat/commandChat.service.js +18 -0
- package/dist/services/commandChat/commandChat.service.js.map +1 -0
- package/dist/services/commandChat/index.d.ts +3 -0
- package/dist/services/commandChat/index.d.ts.map +1 -0
- package/dist/services/commandChat/index.js +2 -0
- package/dist/services/commandChat/index.js.map +1 -0
- package/dist/web/web.service.d.ts +1 -0
- package/dist/web/web.service.d.ts.map +1 -1
- package/dist/web/web.service.js +107 -54
- package/dist/web/web.service.js.map +1 -1
- package/package.json +7 -2
- package/test-email.ts +95 -0
- package/web/dist/assets/{AiLogsView-2O9Szm8G.js → AiLogsView-D_SQ6qo4.js} +1 -1
- package/web/dist/assets/DevWorkflowView-C5VnPngb.css +1 -0
- package/web/dist/assets/DevWorkflowView-iHAv9LC0.js +16 -0
- package/web/dist/assets/Layout-CQhbIJxB.js +1 -0
- package/web/dist/assets/TasksView-B9B2H3-S.js +1 -0
- package/web/dist/assets/TerminalView-BKhdi5UF.js +24 -0
- package/web/dist/assets/TerminalView-BU5wZZv4.css +32 -0
- package/web/dist/assets/abap-BrgZPUOV.js +6 -0
- package/web/dist/assets/apex-DyP6w7ZV.js +6 -0
- package/web/dist/assets/azcli-BaLxmfj-.js +6 -0
- package/web/dist/assets/bat-CFOPXBzS.js +6 -0
- package/web/dist/assets/bicep-BfEKNvv3.js +7 -0
- package/web/dist/assets/cameligo-BFG1Mk7z.js +6 -0
- package/web/dist/assets/clojure-DTECt2xU.js +6 -0
- package/web/dist/assets/codicon-DCmgc-ay.ttf +0 -0
- package/web/dist/assets/coffee-CDGzqUPQ.js +6 -0
- package/web/dist/assets/cpp-CLLBncYj.js +6 -0
- package/web/dist/assets/csharp-dUCx_-0o.js +6 -0
- package/web/dist/assets/csp-5Rap-vPy.js +6 -0
- package/web/dist/assets/css-D3h14YRZ.js +8 -0
- package/web/dist/assets/cssMode-C_gwipb0.js +9 -0
- package/web/dist/assets/cypher-DrQuvNYM.js +6 -0
- package/web/dist/assets/dart-CFKIUWau.js +6 -0
- package/web/dist/assets/dockerfile-Zznr-cwX.js +6 -0
- package/web/dist/assets/ecl-Ce3n6wWz.js +6 -0
- package/web/dist/assets/elixir-deUWdS0T.js +6 -0
- package/web/dist/assets/flow9-i9-g7ZhI.js +6 -0
- package/web/dist/assets/freemarker2-WCA_pR0J.js +8 -0
- package/web/dist/assets/fsharp-CzKuDChf.js +6 -0
- package/web/dist/assets/go-Cphgjts3.js +6 -0
- package/web/dist/assets/graphql-Cg7bfA9N.js +6 -0
- package/web/dist/assets/handlebars-fzVGzXHj.js +6 -0
- package/web/dist/assets/hcl-0cvrggvQ.js +6 -0
- package/web/dist/assets/html-C4Rga6DD.js +6 -0
- package/web/dist/assets/htmlMode-BvrJ57rW.js +9 -0
- package/web/dist/assets/index-9RP8PAfk.js +949 -0
- package/web/dist/assets/{index-37FqBzBn.css → index-BhjlwJCp.css} +1 -1
- package/web/dist/assets/ini-Drc7WvVn.js +6 -0
- package/web/dist/assets/java-B_fMsGYe.js +6 -0
- package/web/dist/assets/javascript-cXKyuP98.js +6 -0
- package/web/dist/assets/jsonMode-Q4CMzwiX.js +15 -0
- package/web/dist/assets/julia-Bqgm2twL.js +6 -0
- package/web/dist/assets/kotlin-BSkB5QuD.js +6 -0
- package/web/dist/assets/less-BsTHnhdd.js +7 -0
- package/web/dist/assets/lexon-YWi4-JPR.js +6 -0
- package/web/dist/assets/liquid-CrbU0gmK.js +6 -0
- package/web/dist/assets/lua-nf6ki56Z.js +6 -0
- package/web/dist/assets/m3-Cpb6xl2v.js +6 -0
- package/web/dist/assets/markdown-DSZPf7rp.js +6 -0
- package/web/dist/assets/mdx-D72Dcs66.js +6 -0
- package/web/dist/assets/mips-B_c3zf-v.js +6 -0
- package/web/dist/assets/msdax-rUNN04Wq.js +6 -0
- package/web/dist/assets/mysql-DDwshQtU.js +6 -0
- package/web/dist/assets/objective-c-B5zXfXm9.js +6 -0
- package/web/dist/assets/pascal-CXOwvkN_.js +6 -0
- package/web/dist/assets/pascaligo-Bc-ZgV77.js +6 -0
- package/web/dist/assets/perl-CwNk8-XU.js +6 -0
- package/web/dist/assets/pgsql-tGk8EFnU.js +6 -0
- package/web/dist/assets/php-CpIb_Oan.js +6 -0
- package/web/dist/assets/pla-B03wrqEc.js +6 -0
- package/web/dist/assets/postiats-BKlk5iyT.js +6 -0
- package/web/dist/assets/powerquery-Bhzvs7bI.js +6 -0
- package/web/dist/assets/powershell-Dd3NCNK9.js +6 -0
- package/web/dist/assets/protobuf-COyEY5Pt.js +7 -0
- package/web/dist/assets/pug-BaJupSGV.js +6 -0
- package/web/dist/assets/python-DPqkZ_Xm.js +6 -0
- package/web/dist/assets/qsharp-DXyYeYxl.js +6 -0
- package/web/dist/assets/r-CdQndTaG.js +6 -0
- package/web/dist/assets/razor-DknXaqXN.js +6 -0
- package/web/dist/assets/redis-CVwtpugi.js +6 -0
- package/web/dist/assets/redshift-25W9uPmb.js +6 -0
- package/web/dist/assets/restructuredtext-DfzH4Xui.js +6 -0
- package/web/dist/assets/ruby-Cp1zYvxS.js +6 -0
- package/web/dist/assets/rust-D5C2fndG.js +6 -0
- package/web/dist/assets/sb-CDntyWJ8.js +6 -0
- package/web/dist/assets/scala-BoFRg7Ot.js +6 -0
- package/web/dist/assets/scheme-Bio4gycK.js +6 -0
- package/web/dist/assets/scss-4Ik7cdeQ.js +8 -0
- package/web/dist/assets/shell-CX-rkNHf.js +6 -0
- package/web/dist/assets/solidity-Tw7wswEv.js +6 -0
- package/web/dist/assets/sophia-C5WLch3f.js +6 -0
- package/web/dist/assets/sparql-DHaeiCBh.js +6 -0
- package/web/dist/assets/sql-CCSDG5nI.js +6 -0
- package/web/dist/assets/st-pnP8ivHi.js +6 -0
- package/web/dist/assets/swift-DwJ7jVG9.js +8 -0
- package/web/dist/assets/systemverilog-B9Xyijhd.js +6 -0
- package/web/dist/assets/tcl-DnHyzjbg.js +6 -0
- package/web/dist/assets/tsMode-DZAV3Wgo.js +16 -0
- package/web/dist/assets/twig-CPajHgWi.js +6 -0
- package/web/dist/assets/typescript-DenKTmW3.js +6 -0
- package/web/dist/assets/typespec-D-MeaMDU.js +6 -0
- package/web/dist/assets/vb-DgyLZaXg.js +6 -0
- package/web/dist/assets/wgsl-BIv9DU6q.js +303 -0
- package/web/dist/assets/xml-C_uqJta0.js +6 -0
- package/web/dist/assets/yaml-vwb3U7d7.js +6 -0
- package/web/dist/index.html +2 -2
- package/web/package.json +5 -1
- package/@.txcode/req//351/241/265/351/235/242/345/270/203/345/261/200/AI/346/234/215/345/212/241/345/225/206/345/222/214/346/250/241/345/236/213/351/205/215/347/275/256.html +0 -241
- package/web/dist/assets/Layout-C3GGWAI1.js +0 -1
- package/web/dist/assets/index-LvJQilK_.js +0 -199
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 终端服务模块
|
|
3
|
+
*
|
|
4
|
+
* 提供跨平台终端会话管理功能:
|
|
5
|
+
* - 创建/删除终端会话
|
|
6
|
+
* - PTY 进程管理
|
|
7
|
+
* - WebSocket 实时通信
|
|
8
|
+
*
|
|
9
|
+
* 降级策略:
|
|
10
|
+
* 1. 优先使用 node-pty (完整终端功能)
|
|
11
|
+
* 2. 不可用时降级到 child_process.spawn (基本功能)
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'child_process';
|
|
14
|
+
import * as os from 'os';
|
|
15
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
16
|
+
let nodePty = null;
|
|
17
|
+
let nodePtyLoadFailed = false;
|
|
18
|
+
export function isNodePtyAvailable() {
|
|
19
|
+
return !nodePtyLoadFailed && nodePty !== null;
|
|
20
|
+
}
|
|
21
|
+
async function loadNodePty() {
|
|
22
|
+
if (nodePtyLoadFailed) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (nodePty)
|
|
26
|
+
return nodePty;
|
|
27
|
+
try {
|
|
28
|
+
nodePty = await import('node-pty');
|
|
29
|
+
return nodePty;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
nodePtyLoadFailed = true;
|
|
33
|
+
console.warn('[Terminal] node-pty not available, falling back to basic spawn');
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function getShell() {
|
|
38
|
+
const platform = os.platform();
|
|
39
|
+
if (platform === 'win32') {
|
|
40
|
+
return process.env.COMSPEC || 'cmd.exe';
|
|
41
|
+
}
|
|
42
|
+
const shell = process.env.SHELL;
|
|
43
|
+
if (shell)
|
|
44
|
+
return shell;
|
|
45
|
+
if (platform === 'darwin') {
|
|
46
|
+
return '/bin/zsh';
|
|
47
|
+
}
|
|
48
|
+
return '/bin/bash';
|
|
49
|
+
}
|
|
50
|
+
function getPlatformType() {
|
|
51
|
+
const platform = os.platform();
|
|
52
|
+
if (platform === 'win32')
|
|
53
|
+
return 'windows';
|
|
54
|
+
if (platform === 'darwin')
|
|
55
|
+
return 'darwin';
|
|
56
|
+
return 'linux';
|
|
57
|
+
}
|
|
58
|
+
class TerminalService {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.ptySessions = new Map();
|
|
61
|
+
this.spawnSessions = new Map();
|
|
62
|
+
this.pendingBuffers = new Map();
|
|
63
|
+
this.sessions = new Map();
|
|
64
|
+
}
|
|
65
|
+
async createSession(options = {}) {
|
|
66
|
+
const id = uuidv4();
|
|
67
|
+
const shell = getShell();
|
|
68
|
+
const platform = getPlatformType();
|
|
69
|
+
const cwd = options.cwd || process.cwd();
|
|
70
|
+
const cols = options.cols || 80;
|
|
71
|
+
const rows = options.rows || 24;
|
|
72
|
+
const session = {
|
|
73
|
+
id,
|
|
74
|
+
title: `终端 ${id.slice(0, 8)}`,
|
|
75
|
+
platform,
|
|
76
|
+
shell,
|
|
77
|
+
createdAt: new Date(),
|
|
78
|
+
isPty: false,
|
|
79
|
+
};
|
|
80
|
+
const pty = await loadNodePty();
|
|
81
|
+
if (pty) {
|
|
82
|
+
try {
|
|
83
|
+
const ptyProcess = pty.spawn(shell, [], {
|
|
84
|
+
name: 'xterm-256color',
|
|
85
|
+
cols,
|
|
86
|
+
rows,
|
|
87
|
+
cwd,
|
|
88
|
+
env: {
|
|
89
|
+
...process.env,
|
|
90
|
+
TERM: 'xterm-256color',
|
|
91
|
+
COLORTERM: 'truecolor',
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
this.ptySessions.set(id, {
|
|
95
|
+
pty: ptyProcess,
|
|
96
|
+
session,
|
|
97
|
+
onOutput: () => { },
|
|
98
|
+
onExit: () => { },
|
|
99
|
+
});
|
|
100
|
+
this.pendingBuffers.set(id, []);
|
|
101
|
+
ptyProcess.onData((data) => {
|
|
102
|
+
const entry = this.ptySessions.get(id);
|
|
103
|
+
const buffers = this.pendingBuffers.get(id);
|
|
104
|
+
if (buffers) {
|
|
105
|
+
buffers.push(data);
|
|
106
|
+
}
|
|
107
|
+
if (entry?.onOutput) {
|
|
108
|
+
entry.onOutput(data);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
ptyProcess.onExit(({ exitCode }) => {
|
|
112
|
+
const entry = this.ptySessions.get(id);
|
|
113
|
+
if (entry?.onExit) {
|
|
114
|
+
entry.onExit(exitCode);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
session.isPty = true;
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
console.warn(`[Terminal] Failed to spawn PTY, falling back to basic spawn:`, e);
|
|
121
|
+
this.createSpawnSession(session, cwd, cols, rows);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.createSpawnSession(session, cwd, cols, rows);
|
|
126
|
+
}
|
|
127
|
+
this.sessions.set(id, session);
|
|
128
|
+
return session;
|
|
129
|
+
}
|
|
130
|
+
createSpawnSession(session, cwd, cols, rows) {
|
|
131
|
+
const isWindows = session.platform === 'windows';
|
|
132
|
+
let proc;
|
|
133
|
+
if (isWindows) {
|
|
134
|
+
proc = spawn('cmd.exe', ['/c'], {
|
|
135
|
+
cwd,
|
|
136
|
+
env: {
|
|
137
|
+
...process.env,
|
|
138
|
+
TERM: 'xterm-256color',
|
|
139
|
+
},
|
|
140
|
+
shell: false,
|
|
141
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
proc = spawn('/bin/sh', ['-c', ''], {
|
|
146
|
+
cwd,
|
|
147
|
+
env: {
|
|
148
|
+
...process.env,
|
|
149
|
+
TERM: 'xterm-256color',
|
|
150
|
+
},
|
|
151
|
+
shell: false,
|
|
152
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
this.spawnSessions.set(session.id, {
|
|
156
|
+
proc,
|
|
157
|
+
session,
|
|
158
|
+
onOutput: () => { },
|
|
159
|
+
onExit: () => { },
|
|
160
|
+
});
|
|
161
|
+
proc.stdout?.on('data', (data) => {
|
|
162
|
+
const entry = this.spawnSessions.get(session.id);
|
|
163
|
+
if (entry) {
|
|
164
|
+
entry.onOutput(data.toString());
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
proc.stderr?.on('data', (data) => {
|
|
168
|
+
const entry = this.spawnSessions.get(session.id);
|
|
169
|
+
if (entry) {
|
|
170
|
+
entry.onOutput(data.toString());
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
proc.on('exit', (code) => {
|
|
174
|
+
const entry = this.spawnSessions.get(session.id);
|
|
175
|
+
if (entry) {
|
|
176
|
+
entry.onExit(code || 0);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
console.log(`[Terminal] Created basic spawn session ${session.id}`);
|
|
180
|
+
}
|
|
181
|
+
getSession(id) {
|
|
182
|
+
return this.sessions.get(id) || null;
|
|
183
|
+
}
|
|
184
|
+
getAllSessions() {
|
|
185
|
+
return Array.from(this.sessions.values());
|
|
186
|
+
}
|
|
187
|
+
deleteSession(id) {
|
|
188
|
+
const ptyEntry = this.ptySessions.get(id);
|
|
189
|
+
if (ptyEntry) {
|
|
190
|
+
try {
|
|
191
|
+
ptyEntry.pty.kill();
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
console.error(`Failed to kill PTY for session ${id}:`, e);
|
|
195
|
+
}
|
|
196
|
+
this.ptySessions.delete(id);
|
|
197
|
+
}
|
|
198
|
+
const spawnEntry = this.spawnSessions.get(id);
|
|
199
|
+
if (spawnEntry) {
|
|
200
|
+
try {
|
|
201
|
+
spawnEntry.proc.kill();
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
console.error(`Failed to kill spawn for session ${id}:`, e);
|
|
205
|
+
}
|
|
206
|
+
this.spawnSessions.delete(id);
|
|
207
|
+
}
|
|
208
|
+
this.sessions.delete(id);
|
|
209
|
+
}
|
|
210
|
+
write(id, data) {
|
|
211
|
+
const ptyEntry = this.ptySessions.get(id);
|
|
212
|
+
if (ptyEntry) {
|
|
213
|
+
ptyEntry.pty.write(data);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const spawnEntry = this.spawnSessions.get(id);
|
|
217
|
+
if (spawnEntry) {
|
|
218
|
+
if (data === '\x03') {
|
|
219
|
+
spawnEntry.proc.kill('SIGINT');
|
|
220
|
+
}
|
|
221
|
+
else if (data === '\x04') {
|
|
222
|
+
spawnEntry.proc.stdin?.end();
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (spawnEntry.session.platform === 'windows') {
|
|
226
|
+
const normalized = data.replace(/\n/g, '\r\n');
|
|
227
|
+
spawnEntry.proc.stdin?.write(normalized);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
spawnEntry.proc.stdin?.write(data);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
resize(id, cols, rows) {
|
|
236
|
+
const ptyEntry = this.ptySessions.get(id);
|
|
237
|
+
if (ptyEntry) {
|
|
238
|
+
try {
|
|
239
|
+
ptyEntry.pty.resize(cols, rows);
|
|
240
|
+
}
|
|
241
|
+
catch (e) {
|
|
242
|
+
console.error(`Failed to resize PTY for session ${id}:`, e);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
setCallbacks(id, onOutput, onExit) {
|
|
247
|
+
const ptyEntry = this.ptySessions.get(id);
|
|
248
|
+
if (ptyEntry) {
|
|
249
|
+
ptyEntry.onOutput = onOutput;
|
|
250
|
+
ptyEntry.onExit = onExit;
|
|
251
|
+
const buffers = this.pendingBuffers.get(id) || [];
|
|
252
|
+
this.pendingBuffers.delete(id);
|
|
253
|
+
return buffers;
|
|
254
|
+
}
|
|
255
|
+
const spawnEntry = this.spawnSessions.get(id);
|
|
256
|
+
if (spawnEntry) {
|
|
257
|
+
spawnEntry.onOutput = onOutput;
|
|
258
|
+
spawnEntry.onExit = onExit;
|
|
259
|
+
spawnEntry.proc.stdout?.on('data', (data) => {
|
|
260
|
+
onOutput(data.toString());
|
|
261
|
+
});
|
|
262
|
+
spawnEntry.proc.stderr?.on('data', (data) => {
|
|
263
|
+
onOutput(data.toString());
|
|
264
|
+
});
|
|
265
|
+
spawnEntry.proc.on('exit', (code) => {
|
|
266
|
+
onExit(code || 0);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
isSessionAlive(id) {
|
|
272
|
+
return this.sessions.has(id);
|
|
273
|
+
}
|
|
274
|
+
getPlatform(id) {
|
|
275
|
+
const session = this.sessions.get(id);
|
|
276
|
+
return session ? session.platform : 'unknown';
|
|
277
|
+
}
|
|
278
|
+
isPtyMode(id) {
|
|
279
|
+
const ptyEntry = this.ptySessions.get(id);
|
|
280
|
+
return !!ptyEntry;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
export const terminalService = new TerminalService();
|
|
284
|
+
//# sourceMappingURL=terminal.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.service.js","sourceRoot":"","sources":["../../../src/modules/terminal/terminal.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.tool.d.ts","sourceRoot":"","sources":["../../../../src/modules/tools/provider/email.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA2B,MAAM,kBAAkB,CAAA;AAKhE,eAAO,MAAM,SAAS,EAAE,IA8CvB,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { emailService } from '../../email/index.js';
|
|
2
|
+
const description = '发送邮件工具。用于向指定邮箱发送邮件,支持 HTML 格式内容。\n\n参数说明:\n- to: 收件人邮箱地址\n- subject: 邮件主题\n- html: 邮件内容(支持 HTML 格式)\n- configId: 邮件配置 ID(可选,默认使用系统默认配置)';
|
|
3
|
+
export const emailTool = {
|
|
4
|
+
name: 'sendEmail',
|
|
5
|
+
description,
|
|
6
|
+
parameters: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
to: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: '收件人邮箱地址'
|
|
12
|
+
},
|
|
13
|
+
subject: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: '邮件主题'
|
|
16
|
+
},
|
|
17
|
+
html: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
description: '邮件内容(支持 HTML 格式)'
|
|
20
|
+
},
|
|
21
|
+
configId: {
|
|
22
|
+
type: 'number',
|
|
23
|
+
description: '邮件配置 ID(可选,默认使用系统默认配置)'
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
required: ['to', 'subject', 'html']
|
|
27
|
+
},
|
|
28
|
+
execute: async (params, _context) => {
|
|
29
|
+
const result = await emailService.sendEmail({
|
|
30
|
+
configId: params.configId,
|
|
31
|
+
to: params.to,
|
|
32
|
+
subject: params.subject,
|
|
33
|
+
html: params.html,
|
|
34
|
+
});
|
|
35
|
+
if (result.success) {
|
|
36
|
+
return {
|
|
37
|
+
success: true,
|
|
38
|
+
output: `邮件已成功发送至 ${params.to}`
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
output: '',
|
|
45
|
+
error: result.error
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=email.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.tool.js","sourceRoot":"","sources":["../../../../src/modules/tools/provider/email.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,GAAG,yIAAyI,CAAA;AAE7J,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,IAAI,EAAE,WAAW;IACjB,WAAW;IACX,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,SAAS;aACvB;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kBAAkB;aAChC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC;KACpC;IACD,OAAO,EAAE,KAAK,EAAE,MAAwE,EAAE,QAAqB,EAAuB,EAAE;QACtI,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;YAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY,MAAM,CAAC,EAAE,EAAE;aAChC,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/tools/provider/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/tools/provider/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAiBvC,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAkBxD"}
|
|
@@ -16,6 +16,7 @@ import { webFetchTool } from './web_fetch.js';
|
|
|
16
16
|
import { codeSearchTool } from './code_search.js';
|
|
17
17
|
import { memoryTool } from './memory.js';
|
|
18
18
|
import { skillTool } from './skill.js';
|
|
19
|
+
import { emailTool } from './email.tool.js';
|
|
19
20
|
export async function getProviderTools() {
|
|
20
21
|
return [
|
|
21
22
|
readFileTool,
|
|
@@ -32,6 +33,7 @@ export async function getProviderTools() {
|
|
|
32
33
|
codeSearchTool,
|
|
33
34
|
memoryTool,
|
|
34
35
|
skillTool,
|
|
36
|
+
emailTool,
|
|
35
37
|
];
|
|
36
38
|
}
|
|
37
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/tools/provider/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/tools/provider/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO;QACL,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,OAAO;QACP,aAAa;QACb,YAAY;QACZ,cAAc;QACd,UAAU;QACV,SAAS;QACT,SAAS;KACV,CAAA;AACH,CAAC"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* - grep: 内容搜索
|
|
20
20
|
* - loadSkill: 加载技能
|
|
21
21
|
*/
|
|
22
|
-
import {
|
|
22
|
+
import { getProviderTools } from './provider/index.js';
|
|
23
23
|
/**
|
|
24
24
|
* ToolService 类
|
|
25
25
|
*
|
|
@@ -72,12 +72,12 @@ export class ToolService {
|
|
|
72
72
|
* 内置工具包括文件操作、命令执行、搜索等功能
|
|
73
73
|
*
|
|
74
74
|
* 注册流程:
|
|
75
|
-
* 1. 调用
|
|
75
|
+
* 1. 调用 getProviderTools() 获取内置工具
|
|
76
76
|
* 2. 遍历工具数组
|
|
77
77
|
* 3. 将每个工具的名称作为 key,工具对象作为 value 存入 Map
|
|
78
78
|
*/
|
|
79
79
|
async registerBuiltinTools() {
|
|
80
|
-
const builtinTools = await
|
|
80
|
+
const builtinTools = await getProviderTools();
|
|
81
81
|
for (const tool of builtinTools) {
|
|
82
82
|
this.tools.set(tool.name, tool);
|
|
83
83
|
}
|
|
@@ -309,7 +309,7 @@ export class ToolService {
|
|
|
309
309
|
* - 清除临时添加的工具
|
|
310
310
|
*/
|
|
311
311
|
async clearCustom() {
|
|
312
|
-
const builtinTools = await
|
|
312
|
+
const builtinTools = await getProviderTools();
|
|
313
313
|
const builtinNames = new Set(builtinTools.map(t => t.name));
|
|
314
314
|
for (const name of this.tools.keys()) {
|
|
315
315
|
if (!builtinNames.has(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.service.js","sourceRoot":"","sources":["../../../src/modules/tools/tool.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tool.service.js","sourceRoot":"","sources":["../../../src/modules/tools/tool.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseRepository } from './base.repository.js';
|
|
2
|
+
export declare class AiLogRepository extends BaseRepository {
|
|
3
|
+
save(log: {
|
|
4
|
+
sessionId: string;
|
|
5
|
+
modelName: string;
|
|
6
|
+
inputTokens: number;
|
|
7
|
+
outputTokens: number;
|
|
8
|
+
totalTokens: number;
|
|
9
|
+
latency: number;
|
|
10
|
+
success: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
getBySessionId(sessionId: string): Promise<any[]>;
|
|
14
|
+
getStats(sessionId: string): Promise<any | null>;
|
|
15
|
+
}
|
|
16
|
+
export declare const aiLogRepository: AiLogRepository;
|
|
17
|
+
//# sourceMappingURL=aiLog.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiLog.repository.d.ts","sourceRoot":"","sources":["../../src/repository/aiLog.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,eAAgB,SAAQ,cAAc;IAE3C,IAAI,CAAC,GAAG,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBX,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAKjD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;CAavD;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BaseRepository } from './base.repository.js';
|
|
2
|
+
export class AiLogRepository extends BaseRepository {
|
|
3
|
+
async save(log) {
|
|
4
|
+
const sql = `
|
|
5
|
+
INSERT INTO ai_logs
|
|
6
|
+
(session_id, model_name, input_tokens, output_tokens, total_tokens, latency, success, error, created_at)
|
|
7
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))
|
|
8
|
+
`;
|
|
9
|
+
await this.execute(sql, [
|
|
10
|
+
log.sessionId,
|
|
11
|
+
log.modelName,
|
|
12
|
+
log.inputTokens,
|
|
13
|
+
log.outputTokens,
|
|
14
|
+
log.totalTokens,
|
|
15
|
+
log.latency,
|
|
16
|
+
log.success ? 1 : 0,
|
|
17
|
+
log.error || null
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
async getBySessionId(sessionId) {
|
|
21
|
+
const sql = `SELECT * FROM ai_logs WHERE session_id = ? ORDER BY created_at DESC`;
|
|
22
|
+
return this.query(sql, [sessionId]);
|
|
23
|
+
}
|
|
24
|
+
async getStats(sessionId) {
|
|
25
|
+
const sql = `
|
|
26
|
+
SELECT
|
|
27
|
+
COUNT(*) as total_calls,
|
|
28
|
+
SUM(input_tokens) as total_input,
|
|
29
|
+
SUM(output_tokens) as total_output,
|
|
30
|
+
SUM(total_tokens) as total_tokens,
|
|
31
|
+
AVG(latency) as avg_latency
|
|
32
|
+
FROM ai_logs
|
|
33
|
+
WHERE session_id = ?
|
|
34
|
+
`;
|
|
35
|
+
return this.queryOne(sql, [sessionId]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export const aiLogRepository = new AiLogRepository();
|
|
39
|
+
//# sourceMappingURL=aiLog.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiLog.repository.js","sourceRoot":"","sources":["../../src/repository/aiLog.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAEjD,KAAK,CAAC,IAAI,CAAC,GASV;QACC,MAAM,GAAG,GAAG;;;;KAIX,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACtB,GAAG,CAAC,SAAS;YACb,GAAG,CAAC,SAAS;YACb,GAAG,CAAC,WAAW;YACf,GAAG,CAAC,YAAY;YAChB,GAAG,CAAC,WAAW;YACf,GAAG,CAAC,OAAO;YACX,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,CAAC,KAAK,IAAI,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,GAAG,GAAG,qEAAqE,CAAC;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,GAAG,GAAG;;;;;;;;;KASX,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class BaseRepository {
|
|
2
|
+
protected execute(sql: string, params?: unknown[]): Promise<void>;
|
|
3
|
+
protected query<T>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
4
|
+
protected queryOne<T>(sql: string, params?: unknown[]): Promise<T | null>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=base.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.repository.d.ts","sourceRoot":"","sources":["../../src/repository/base.repository.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;cAET,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;cAI3D,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;cAI3D,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAIpF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { dbService } from '../modules/db/db.service.js';
|
|
2
|
+
export class BaseRepository {
|
|
3
|
+
async execute(sql, params = []) {
|
|
4
|
+
dbService.run(sql, params);
|
|
5
|
+
}
|
|
6
|
+
async query(sql, params = []) {
|
|
7
|
+
return dbService.all(sql, params);
|
|
8
|
+
}
|
|
9
|
+
async queryOne(sql, params = []) {
|
|
10
|
+
const results = await this.query(sql, params);
|
|
11
|
+
return results[0] || null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=base.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../../src/repository/base.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,MAAM,OAAO,cAAc;IAEf,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QACzD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,KAAK,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC1D,OAAO,SAAS,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAES,KAAK,CAAC,QAAQ,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BaseRepository } from './base.repository.js';
|
|
2
|
+
export { MessageRepository, messageRepository } from './message.repository.js';
|
|
3
|
+
export { SessionRepository, sessionRepository } from './session.repository.js';
|
|
4
|
+
export { AiLogRepository, aiLogRepository } from './aiLog.repository.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BaseRepository } from './base.repository.js';
|
|
2
|
+
export { MessageRepository, messageRepository } from './message.repository.js';
|
|
3
|
+
export { SessionRepository, sessionRepository } from './session.repository.js';
|
|
4
|
+
export { AiLogRepository, aiLogRepository } from './aiLog.repository.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseRepository } from './base.repository.js';
|
|
2
|
+
export declare class MessageRepository extends BaseRepository {
|
|
3
|
+
save(sessionId: string, role: string, content: string): Promise<void>;
|
|
4
|
+
getHistory(sessionId: string, limit?: number): Promise<any[]>;
|
|
5
|
+
getBySessionId(sessionId: string): Promise<any[]>;
|
|
6
|
+
deleteBySessionId(sessionId: string): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare const messageRepository: MessageRepository;
|
|
9
|
+
//# sourceMappingURL=message.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.repository.d.ts","sourceRoot":"","sources":["../../src/repository/message.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,iBAAkB,SAAQ,cAAc;IAE7C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAW1D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAUjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1D;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|