tianxincode 1.0.36 → 1.0.37
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/deploy.routes.d.ts +2 -0
- package/dist/api/deploy.routes.d.ts.map +1 -0
- package/dist/api/deploy.routes.js +78 -0
- package/dist/api/deploy.routes.js.map +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +8 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/songbing.routes.d.ts +10 -0
- package/dist/api/songbing.routes.d.ts.map +1 -0
- package/dist/api/songbing.routes.js +259 -0
- package/dist/api/songbing.routes.js.map +1 -0
- package/dist/api/system.routes.d.ts +2 -0
- package/dist/api/system.routes.d.ts.map +1 -0
- package/dist/api/system.routes.js +12 -0
- package/dist/api/system.routes.js.map +1 -0
- package/dist/api/websocket/caller.websocket.d.ts +65 -0
- package/dist/api/websocket/caller.websocket.d.ts.map +1 -0
- package/dist/api/websocket/caller.websocket.js +271 -0
- package/dist/api/websocket/caller.websocket.js.map +1 -0
- package/dist/api/websocket/websocket.service.d.ts +1 -0
- package/dist/api/websocket/websocket.service.d.ts.map +1 -1
- package/dist/api/websocket/websocket.service.js +7 -0
- package/dist/api/websocket/websocket.service.js.map +1 -1
- package/dist/api/zihao.routes.d.ts +2 -0
- package/dist/api/zihao.routes.d.ts.map +1 -0
- package/dist/api/zihao.routes.js +231 -0
- package/dist/api/zihao.routes.js.map +1 -0
- package/dist/components/Header.d.ts.map +1 -1
- package/dist/components/Header.js +2 -2
- package/dist/components/Header.js.map +1 -1
- package/dist/config/tx.config.d.ts +4 -0
- package/dist/config/tx.config.d.ts.map +1 -1
- package/dist/config/tx.config.js +6 -0
- package/dist/config/tx.config.js.map +1 -1
- package/dist/modules/ai/agents/caller/agent_tool.d.ts +2 -0
- package/dist/modules/ai/agents/caller/agent_tool.d.ts.map +1 -0
- package/dist/modules/ai/agents/caller/agent_tool.js +11 -0
- package/dist/modules/ai/agents/caller/agent_tool.js.map +1 -0
- package/dist/modules/ai/agents/caller/caller.agent.d.ts +112 -0
- package/dist/modules/ai/agents/caller/caller.agent.d.ts.map +1 -0
- package/dist/modules/ai/agents/caller/caller.agent.js +357 -0
- package/dist/modules/ai/agents/caller/caller.agent.js.map +1 -0
- package/dist/modules/ai/agents/caller/prompts/role.txt +51 -0
- package/dist/modules/ai/agents/caller/types.d.ts +36 -0
- package/dist/modules/ai/agents/caller/types.d.ts.map +1 -0
- package/dist/modules/ai/agents/caller/types.js +2 -0
- package/dist/modules/ai/agents/caller/types.js.map +1 -0
- package/dist/modules/ai/agents/index.d.ts +2 -0
- package/dist/modules/ai/agents/index.d.ts.map +1 -1
- package/dist/modules/ai/agents/index.js +2 -0
- package/dist/modules/ai/agents/index.js.map +1 -1
- package/dist/modules/db/db.service.d.ts +3 -1
- package/dist/modules/db/db.service.d.ts.map +1 -1
- package/dist/modules/db/db.service.js +39 -9
- package/dist/modules/db/db.service.js.map +1 -1
- package/dist/modules/deploy/deploy.service.d.ts +20 -0
- package/dist/modules/deploy/deploy.service.d.ts.map +1 -0
- package/dist/modules/deploy/deploy.service.js +213 -0
- package/dist/modules/deploy/deploy.service.js.map +1 -0
- package/dist/repository/zihao-config.repository.d.ts +21 -0
- package/dist/repository/zihao-config.repository.d.ts.map +1 -0
- package/dist/repository/zihao-config.repository.js +57 -0
- package/dist/repository/zihao-config.repository.js.map +1 -0
- package/dist/service/config-export-import.service.d.ts +1 -1
- package/dist/service/config-export-import.service.d.ts.map +1 -1
- package/dist/service/config-export-import.service.js +21 -36
- package/dist/service/config-export-import.service.js.map +1 -1
- package/dist/services/callerChat/callerChat.service.d.ts +44 -0
- package/dist/services/callerChat/callerChat.service.d.ts.map +1 -0
- package/dist/services/callerChat/callerChat.service.js +241 -0
- package/dist/services/callerChat/callerChat.service.js.map +1 -0
- package/dist/services/callerChat/callerChat.types.d.ts +64 -0
- package/dist/services/callerChat/callerChat.types.d.ts.map +1 -0
- package/dist/services/callerChat/callerChat.types.js +2 -0
- package/dist/services/callerChat/callerChat.types.js.map +1 -0
- package/dist/services/callerChat/index.d.ts +5 -0
- package/dist/services/callerChat/index.d.ts.map +1 -0
- package/dist/services/callerChat/index.js +4 -0
- package/dist/services/callerChat/index.js.map +1 -0
- package/dist/services/zihao.service.d.ts +51 -0
- package/dist/services/zihao.service.d.ts.map +1 -0
- package/dist/services/zihao.service.js +241 -0
- package/dist/services/zihao.service.js.map +1 -0
- package/dist/utils/crypto.d.ts +3 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +24 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +14 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +2 -4
- package/scripts/copy-txt.js +29 -0
- package/txcode/release/release-zihao/node-zihao.js +291 -0
- package/txcode/release/release-zihao/package.json +3 -0
- package/web/dist/assets/{AiLogsView-Cv8w3JX1.js → AiLogsView-DyWYCMia.js} +1 -1
- package/web/dist/assets/{ConfirmDialog-B2yzQuvd.js → ConfirmDialog-B7xoYLNo.js} +1 -1
- package/web/dist/assets/{CustomActionsView-_hM0pRcy.js → CustomActionsView-Bz0FJhS4.js} +1 -1
- package/web/dist/assets/DevWorkflowView-CU2_o5uq.js +16 -0
- package/web/dist/assets/DevWorkflowView-Cc_t3ltj.css +1 -0
- package/web/dist/assets/DevWorkflowViewApp-CPTC7cf7.css +1 -0
- package/web/dist/assets/{DevWorkflowView-DohieDSf.js → DevWorkflowViewApp-pt4oKglX.js} +3 -3
- package/web/dist/assets/GitChanges-BUX-THfQ.css +1 -0
- package/web/dist/assets/{GitChanges-DDe_6u85.js → GitChanges-Y__3euKt.js} +1 -1
- package/web/dist/assets/GitChangesApp-CBXkCoKT.css +1 -0
- package/web/dist/assets/{GitChangesApp-CL1Thr5s.js → GitChangesApp-n1OxZEvL.js} +2 -2
- package/web/dist/assets/Layout-CilYY1KK.js +1 -0
- package/web/dist/assets/Layout-F1hcCAml.css +1 -0
- package/web/dist/assets/{TasksView-xMHsriK8.js → TasksView-CHnpwvyb.js} +1 -1
- package/web/dist/assets/{TerminalView-yAYSdJhK.js → TerminalView-C3s5BbKP.js} +2 -2
- package/web/dist/assets/{TerminalView-BU5wZZv4.css → TerminalView-aUwce7Dc.css} +1 -1
- package/web/dist/assets/{WikiView-WSmZSUD4.js → WikiView-B10BVOEI.js} +1 -1
- package/web/dist/assets/WikiView-DVYaOvoT.css +1 -0
- package/web/dist/assets/{cssMode-DAFBuufZ.js → cssMode-D518Vum_.js} +1 -1
- package/web/dist/assets/deployView-C1Cms1QG.css +1 -0
- package/web/dist/assets/deployView-D4BgJiy-.js +1 -0
- package/web/dist/assets/fileZihao-BQ2XDoAg.js +2 -0
- package/web/dist/assets/{freemarker2-DNjMoL3I.js → freemarker2-DRNJ6FYB.js} +1 -1
- package/web/dist/assets/{handlebars-CI6a8bmi.js → handlebars-mubTvOO1.js} +1 -1
- package/web/dist/assets/{html-BzDyi5Kp.js → html-DS4rz_hZ.js} +1 -1
- package/web/dist/assets/{htmlMode-DRFNvtRP.js → htmlMode-D87cKX8Z.js} +1 -1
- package/web/dist/assets/{index-C-t6olJL.css → index-BQkX4XfJ.css} +1 -1
- package/web/dist/assets/{index-CCrQqi2p.js → index-dOZe8hsN.js} +141 -141
- package/web/dist/assets/{javascript-BTgrYGeW.js → javascript-DyGvY_0Y.js} +1 -1
- package/web/dist/assets/{jsonMode-CWbUiI5N.js → jsonMode-ixGH1Eb2.js} +1 -1
- package/web/dist/assets/{liquid-BGY04Uf8.js → liquid-BgvfOJcH.js} +1 -1
- package/web/dist/assets/{mdx-D6dsdcdg.js → mdx-DUbMPmbc.js} +1 -1
- package/web/dist/assets/{python-CnHJvjfT.js → python-CYK0c6tb.js} +1 -1
- package/web/dist/assets/{razor-DhAzX9OF.js → razor-CC84D436.js} +1 -1
- package/web/dist/assets/{tsMode-LptgMcDM.js → tsMode-C-wonHgC.js} +1 -1
- package/web/dist/assets/{typescript-CRkTlUxm.js → typescript-DzuJLwji.js} +1 -1
- package/web/dist/assets/{xml-Cq77HlTB.js → xml-CMPFw__l.js} +1 -1
- package/web/dist/assets/{yaml-CvADBvr4.js → yaml-BYzkFta5.js} +1 -1
- package/web/dist/index.html +2 -2
- package/test-email.ts +0 -95
- package/test-ws.ts +0 -80
- package/web/dist/assets/DevWorkflowView-B0-9SCCJ.js +0 -16
- package/web/dist/assets/DevWorkflowView-DEua6ZP6.css +0 -1
- package/web/dist/assets/DevWorkflowView-Uh_DAlVd.css +0 -1
- package/web/dist/assets/GitChanges-4daAIVgB.css +0 -1
- package/web/dist/assets/GitChangesApp-D8TsaOlK.css +0 -1
- package/web/dist/assets/Layout-BC2y9QuA.js +0 -1
- package/web/dist/assets/Layout-Bdat6mEM.css +0 -1
- package/web/dist/assets/WikiView-OxwIcazz.css +0 -1
- package/web/dist/assets/fileOss-WFJXsHsR.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.routes.d.ts","sourceRoot":"","sources":["../../src/api/deploy.routes.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,4CAAW,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import multer from 'multer';
|
|
6
|
+
import { deployService } from '../modules/deploy/deploy.service.js';
|
|
7
|
+
export const deployRouter = Router();
|
|
8
|
+
const upload = multer({
|
|
9
|
+
storage: multer.diskStorage({
|
|
10
|
+
destination: (req, file, cb) => {
|
|
11
|
+
const dir = path.join(os.tmpdir(), 'txcode-deploy-uploads');
|
|
12
|
+
if (!fs.existsSync(dir))
|
|
13
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
14
|
+
cb(null, dir);
|
|
15
|
+
},
|
|
16
|
+
filename: (req, file, cb) => {
|
|
17
|
+
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
|
|
18
|
+
cb(null, uniqueSuffix + '-' + file.originalname);
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
limits: { fileSize: 2 * 1024 * 1024 * 1024 }
|
|
22
|
+
});
|
|
23
|
+
function getProjectPath(req) {
|
|
24
|
+
const projectPath = (req.query.projectPath || req.body?.projectPath);
|
|
25
|
+
if (projectPath)
|
|
26
|
+
return projectPath;
|
|
27
|
+
try {
|
|
28
|
+
const configPath = path.join(process.cwd(), '.txcode', 'config.json');
|
|
29
|
+
if (fs.existsSync(configPath)) {
|
|
30
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
31
|
+
return config.currentProjectPath || process.cwd();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch { }
|
|
35
|
+
return process.cwd();
|
|
36
|
+
}
|
|
37
|
+
deployRouter.get('/check-release', (req, res) => {
|
|
38
|
+
try {
|
|
39
|
+
const projectPath = getProjectPath(req);
|
|
40
|
+
const result = deployService.checkReleaseMd(projectPath);
|
|
41
|
+
res.json({ success: true, data: result });
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('[deploy.routes] check-release error:', error);
|
|
45
|
+
res.status(500).json({ success: false, error: '检查部署文档失败' });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
deployRouter.post('/download-url', async (req, res) => {
|
|
49
|
+
try {
|
|
50
|
+
const { url } = req.body;
|
|
51
|
+
if (!url) {
|
|
52
|
+
return res.status(400).json({ success: false, error: 'url必填' });
|
|
53
|
+
}
|
|
54
|
+
const projectPath = req.body.projectPath || getProjectPath(req);
|
|
55
|
+
const result = await deployService.downloadFromUrl(url, projectPath);
|
|
56
|
+
res.json({ success: true, data: result });
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('[deploy.routes] download-url error:', error);
|
|
60
|
+
res.status(500).json({ success: false, error: '下载失败' });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
deployRouter.post('/upload-archive', upload.single('file'), async (req, res) => {
|
|
64
|
+
try {
|
|
65
|
+
const file = req.file;
|
|
66
|
+
if (!file) {
|
|
67
|
+
return res.status(400).json({ success: false, error: '未上传文件' });
|
|
68
|
+
}
|
|
69
|
+
const projectPath = req.body.projectPath || getProjectPath(req);
|
|
70
|
+
const result = await deployService.uploadArchive(file.path, projectPath);
|
|
71
|
+
res.json({ success: true, data: result });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('[deploy.routes] upload-archive error:', error);
|
|
75
|
+
res.status(500).json({ success: false, error: '上传解压失败' });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=deploy.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.routes.js","sourceRoot":"","sources":["../../src/api/deploy.routes.ts"],"names":[],"mappings":"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"}
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH,eAAO,MAAM,SAAS,4CAAW,CAAC;AA+BlC,mBAAmB,gBAAgB,CAAC"}
|
package/dist/api/index.js
CHANGED
|
@@ -23,8 +23,11 @@ import { specsRouter } from './specs.routes.js';
|
|
|
23
23
|
import { wikiRouter } from './wiki.routes.js';
|
|
24
24
|
import { memoryRouter } from './memory.routes.js';
|
|
25
25
|
import { devlogRouter } from './devlog.routes.js';
|
|
26
|
-
import {
|
|
26
|
+
import { systemRouter } from './system.routes.js';
|
|
27
|
+
import { zihaoRouter } from './zihao.routes.js';
|
|
27
28
|
import { configExportImportRouter } from './config-export-import.routes.js';
|
|
29
|
+
import { deployRouter } from './deploy.routes.js';
|
|
30
|
+
import { songbingRouter } from './songbing.routes.js';
|
|
28
31
|
export const apiRouter = Router();
|
|
29
32
|
apiRouter.use('/chat', chatRouter);
|
|
30
33
|
apiRouter.use('/sessions', sessionRouter);
|
|
@@ -48,6 +51,9 @@ apiRouter.use('/specs', specsRouter);
|
|
|
48
51
|
apiRouter.use('/wiki', wikiRouter);
|
|
49
52
|
apiRouter.use('/memory', memoryRouter);
|
|
50
53
|
apiRouter.use('/devlog', devlogRouter);
|
|
51
|
-
apiRouter.use('/
|
|
54
|
+
apiRouter.use('/zihao', zihaoRouter);
|
|
55
|
+
apiRouter.use('/deploy', deployRouter);
|
|
52
56
|
apiRouter.use('/settings', configExportImportRouter);
|
|
57
|
+
apiRouter.use('/songbing', songbingRouter);
|
|
58
|
+
apiRouter.use('/system', systemRouter);
|
|
53
59
|
//# sourceMappingURL=index.js.map
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 松饼AI 认证 & 模型同步路由
|
|
3
|
+
*
|
|
4
|
+
* - GET /api/songbing/config -> 返回松饼平台配置
|
|
5
|
+
* - POST /api/songbing/auth/start -> 清理旧数据 + 生成临时Key
|
|
6
|
+
* - POST /api/songbing/auth/verify -> 轮询验证Key,active=true时自动写入providers/models
|
|
7
|
+
* - POST /api/songbing/sync-models -> 手动同步模型
|
|
8
|
+
*/
|
|
9
|
+
export declare const songbingRouter: import("express-serve-static-core").Router;
|
|
10
|
+
//# sourceMappingURL=songbing.routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"songbing.routes.d.ts","sourceRoot":"","sources":["../../src/api/songbing.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,eAAO,MAAM,cAAc,4CAAW,CAAC"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 松饼AI 认证 & 模型同步路由
|
|
3
|
+
*
|
|
4
|
+
* - GET /api/songbing/config -> 返回松饼平台配置
|
|
5
|
+
* - POST /api/songbing/auth/start -> 清理旧数据 + 生成临时Key
|
|
6
|
+
* - POST /api/songbing/auth/verify -> 轮询验证Key,active=true时自动写入providers/models
|
|
7
|
+
* - POST /api/songbing/sync-models -> 手动同步模型
|
|
8
|
+
*/
|
|
9
|
+
import { Router } from 'express';
|
|
10
|
+
import { dbService } from '../modules/db/db.service.js';
|
|
11
|
+
import { configService } from '../modules/config/config.service.js';
|
|
12
|
+
import config, { getSongbingApiBaseUrl } from '../config/tx.config.js';
|
|
13
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
14
|
+
export const songbingRouter = Router();
|
|
15
|
+
const OFFICIAL_PROVIDER_NAME = '自建AI平台';
|
|
16
|
+
const OFFICIAL_PROVIDER_ID = 'songbing-official-001';
|
|
17
|
+
const pendingAuthMap = new Map();
|
|
18
|
+
function getPlatformUrl(customUrl) {
|
|
19
|
+
return customUrl || config.songbing?.platformUrl;
|
|
20
|
+
}
|
|
21
|
+
function getApiBaseUrl(customUrl) {
|
|
22
|
+
if (customUrl) {
|
|
23
|
+
return customUrl.replace(/\/$/, '') + '/api/v1';
|
|
24
|
+
}
|
|
25
|
+
return getSongbingApiBaseUrl();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* GET /api/songbing/config
|
|
29
|
+
*/
|
|
30
|
+
songbingRouter.get('/config', (_req, res) => {
|
|
31
|
+
res.json({
|
|
32
|
+
success: true,
|
|
33
|
+
data: {
|
|
34
|
+
platformUrl: getPlatformUrl(),
|
|
35
|
+
apiBaseUrl: getApiBaseUrl(),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* POST /api/songbing/auth/start
|
|
41
|
+
*/
|
|
42
|
+
songbingRouter.post('/auth/start', async (req, res) => {
|
|
43
|
+
try {
|
|
44
|
+
const { platformUrl } = req.body || {};
|
|
45
|
+
const resolvedPlatformUrl = platformUrl || getPlatformUrl();
|
|
46
|
+
const resolvedApiBaseUrl = getApiBaseUrl(resolvedPlatformUrl);
|
|
47
|
+
const placeholderKey = `pending_${Date.now()}`;
|
|
48
|
+
const pendingAuthEntry = {
|
|
49
|
+
platformUrl: resolvedPlatformUrl,
|
|
50
|
+
apiBaseUrl: resolvedApiBaseUrl,
|
|
51
|
+
};
|
|
52
|
+
pendingAuthMap.set(placeholderKey, pendingAuthEntry);
|
|
53
|
+
const result = dbService.transaction(() => {
|
|
54
|
+
dbService.run(`DELETE FROM models WHERE provider_id = ? OR provider_id IN (SELECT id FROM providers WHERE name IN (?, ?))`, [OFFICIAL_PROVIDER_ID, '松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
55
|
+
dbService.run(`DELETE FROM providers WHERE name IN (?, ?)`, ['松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
56
|
+
dbService.run(`DELETE FROM provider_auth WHERE provider_name IN (?, ?)`, ['松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
57
|
+
configService.addProvider({
|
|
58
|
+
id: OFFICIAL_PROVIDER_ID,
|
|
59
|
+
name: OFFICIAL_PROVIDER_NAME,
|
|
60
|
+
apiKey: placeholderKey,
|
|
61
|
+
baseUrl: resolvedApiBaseUrl,
|
|
62
|
+
enabled: false,
|
|
63
|
+
isDefault: false,
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
const resp = await fetch(`${resolvedPlatformUrl}/api/appkey/generate_appkey`, {
|
|
67
|
+
method: 'POST',
|
|
68
|
+
headers: { 'Content-Type': 'application/json' },
|
|
69
|
+
body: '{}',
|
|
70
|
+
});
|
|
71
|
+
if (!resp.ok) {
|
|
72
|
+
return res.status(502).json({ success: false, error: `generate_appkey 失败: ${resp.status}` });
|
|
73
|
+
}
|
|
74
|
+
const body = await resp.json();
|
|
75
|
+
const { key, auth_url } = body.data || {};
|
|
76
|
+
if (!key) {
|
|
77
|
+
return res.status(502).json({ success: false, error: '响应缺少 key' });
|
|
78
|
+
}
|
|
79
|
+
pendingAuthEntry.realKey = key;
|
|
80
|
+
const authId = uuidv4();
|
|
81
|
+
const storedAuthUrl = auth_url || '';
|
|
82
|
+
const storedPlatformUrl = resolvedPlatformUrl;
|
|
83
|
+
dbService.run(`INSERT INTO provider_auth (id, provider_name, key, auth_url, active) VALUES (?, ?, ?, ?, 0)`, [authId, OFFICIAL_PROVIDER_NAME, key, storedAuthUrl]);
|
|
84
|
+
res.json({
|
|
85
|
+
success: true,
|
|
86
|
+
data: { key, auth_url },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
res.status(500).json({ success: false, error: e.message || String(e) });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* POST /api/songbing/auth/verify
|
|
95
|
+
*/
|
|
96
|
+
songbingRouter.post('/auth/verify', async (req, res) => {
|
|
97
|
+
try {
|
|
98
|
+
const { key } = req.body;
|
|
99
|
+
if (!key) {
|
|
100
|
+
return res.status(400).json({ success: false, error: 'key 必填' });
|
|
101
|
+
}
|
|
102
|
+
const provider = dbService.get('SELECT base_url FROM providers WHERE api_key = ?', [key]);
|
|
103
|
+
let platformUrl = getPlatformUrl();
|
|
104
|
+
let resolvedApiBaseUrl = '';
|
|
105
|
+
let pendingAuth = pendingAuthMap.get(key);
|
|
106
|
+
if (!pendingAuth) {
|
|
107
|
+
for (const auth of pendingAuthMap.values()) {
|
|
108
|
+
if (auth.realKey === key) {
|
|
109
|
+
pendingAuth = auth;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (pendingAuth) {
|
|
115
|
+
platformUrl = pendingAuth.platformUrl;
|
|
116
|
+
resolvedApiBaseUrl = pendingAuth.apiBaseUrl;
|
|
117
|
+
}
|
|
118
|
+
else if (provider?.base_url) {
|
|
119
|
+
platformUrl = provider.base_url.replace(/\/api\/v1$/, '');
|
|
120
|
+
resolvedApiBaseUrl = provider.base_url;
|
|
121
|
+
}
|
|
122
|
+
const resp = await fetch(`${platformUrl}/api/appkey/verify_appkey`, {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: { 'Content-Type': 'application/json' },
|
|
125
|
+
body: JSON.stringify({ key }),
|
|
126
|
+
});
|
|
127
|
+
if (!resp.ok) {
|
|
128
|
+
return res.status(502).json({ success: false, error: `verify_appkey 失败: ${resp.status}` });
|
|
129
|
+
}
|
|
130
|
+
const body = await resp.json();
|
|
131
|
+
const active = body?.data?.active === true;
|
|
132
|
+
if (active) {
|
|
133
|
+
dbService.run(`UPDATE provider_auth SET active = 1, updated_at = CURRENT_TIMESTAMP WHERE key = ? AND provider_name IN (?, ?)`, [key, '松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
134
|
+
const existing = dbService.get('SELECT id FROM providers WHERE name IN (?, ?)', ['松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
135
|
+
if (!existing) {
|
|
136
|
+
configService.addProvider({
|
|
137
|
+
id: OFFICIAL_PROVIDER_ID,
|
|
138
|
+
name: OFFICIAL_PROVIDER_NAME,
|
|
139
|
+
apiKey: key,
|
|
140
|
+
baseUrl: resolvedApiBaseUrl || getApiBaseUrl(platformUrl),
|
|
141
|
+
enabled: true,
|
|
142
|
+
isDefault: false,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
configService.updateProvider(OFFICIAL_PROVIDER_ID, {
|
|
147
|
+
apiKey: key,
|
|
148
|
+
baseUrl: resolvedApiBaseUrl || provider?.base_url,
|
|
149
|
+
enabled: true,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const syncResult = await syncModelsFromSongbing();
|
|
153
|
+
pendingAuthMap.delete(key);
|
|
154
|
+
res.json({
|
|
155
|
+
success: true,
|
|
156
|
+
data: {
|
|
157
|
+
active: true,
|
|
158
|
+
providerId: OFFICIAL_PROVIDER_ID,
|
|
159
|
+
syncedModels: syncResult.count,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
res.json({
|
|
165
|
+
success: true,
|
|
166
|
+
data: { active: false },
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
res.status(500).json({ success: false, error: e.message || String(e) });
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* POST /api/songbing/sync-models
|
|
176
|
+
*/
|
|
177
|
+
songbingRouter.post('/sync-models', async (_req, res) => {
|
|
178
|
+
try {
|
|
179
|
+
const provider = dbService.get('SELECT id FROM providers WHERE name = ?', [OFFICIAL_PROVIDER_NAME]);
|
|
180
|
+
if (!provider) {
|
|
181
|
+
return res.status(400).json({ success: false, error: '请先完成认证' });
|
|
182
|
+
}
|
|
183
|
+
const result = await syncModelsFromSongbing();
|
|
184
|
+
res.json({
|
|
185
|
+
success: true,
|
|
186
|
+
data: { count: result.count, models: result.models },
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
res.status(500).json({ success: false, error: e.message || String(e) });
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
/**
|
|
194
|
+
* POST /api/songbing/auth/cancel
|
|
195
|
+
*/
|
|
196
|
+
songbingRouter.post('/auth/cancel', async (_req, res) => {
|
|
197
|
+
try {
|
|
198
|
+
dbService.transaction(() => {
|
|
199
|
+
dbService.run(`DELETE FROM models WHERE provider_id = ? OR provider_id IN (SELECT id FROM providers WHERE name IN (?, ?))`, [OFFICIAL_PROVIDER_ID, '松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
200
|
+
dbService.run(`DELETE FROM providers WHERE name IN (?, ?)`, ['松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
201
|
+
dbService.run(`DELETE FROM provider_auth WHERE provider_name IN (?, ?)`, ['松饼AI', OFFICIAL_PROVIDER_NAME]);
|
|
202
|
+
});
|
|
203
|
+
res.json({
|
|
204
|
+
success: true,
|
|
205
|
+
data: { message: '已取消认证' },
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
res.status(500).json({ success: false, error: e.message || String(e) });
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
/**
|
|
213
|
+
* 从松饼平台拉取模型列表并写入 models 表
|
|
214
|
+
*/
|
|
215
|
+
async function syncModelsFromSongbing() {
|
|
216
|
+
const provider = dbService.get('SELECT base_url FROM providers WHERE name = ?', [OFFICIAL_PROVIDER_NAME]);
|
|
217
|
+
let platformUrl = getPlatformUrl();
|
|
218
|
+
if (provider?.base_url) {
|
|
219
|
+
platformUrl = provider.base_url.replace(/\/api\/v1$/, '');
|
|
220
|
+
}
|
|
221
|
+
dbService.run(`DELETE FROM models WHERE provider_id = ?`, [OFFICIAL_PROVIDER_ID]);
|
|
222
|
+
const resp = await fetch(`${platformUrl}/api/common/scene_models?scene_code=txcode`);
|
|
223
|
+
if (!resp.ok) {
|
|
224
|
+
throw new Error(`scene_models 请求失败: ${resp.status}`);
|
|
225
|
+
}
|
|
226
|
+
const result = await resp.json();
|
|
227
|
+
const scenes = result.data || [];
|
|
228
|
+
const modelCodes = [];
|
|
229
|
+
const modelNames = {};
|
|
230
|
+
for (const scene of scenes) {
|
|
231
|
+
const models = scene.models || [];
|
|
232
|
+
for (const m of models) {
|
|
233
|
+
if (m.model_code && !modelCodes.includes(m.model_code)) {
|
|
234
|
+
modelCodes.push(m.model_code);
|
|
235
|
+
modelNames[m.model_code] = m.model_name || m.model_code;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const syncedModels = [];
|
|
240
|
+
for (const modelCode of modelCodes) {
|
|
241
|
+
const existing = dbService.get('SELECT id FROM models WHERE provider_id = ? AND id = ?', [OFFICIAL_PROVIDER_ID, `songbing-${modelCode}`]);
|
|
242
|
+
if (!existing) {
|
|
243
|
+
const modelId = `songbing-${modelCode}`;
|
|
244
|
+
configService.addModel({
|
|
245
|
+
id: modelId,
|
|
246
|
+
providerId: OFFICIAL_PROVIDER_ID,
|
|
247
|
+
name: modelNames[modelCode],
|
|
248
|
+
contextWindow: 4096,
|
|
249
|
+
maxOutputTokens: 4096,
|
|
250
|
+
supportsVision: false,
|
|
251
|
+
supportsTools: true,
|
|
252
|
+
enabled: true,
|
|
253
|
+
});
|
|
254
|
+
syncedModels.push(modelNames[modelCode]);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return { count: syncedModels.length, models: syncedModels };
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=songbing.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"songbing.routes.js","sourceRoot":"","sources":["../../src/api/songbing.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,MAAM,EAAE,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC;AAEvC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AACxC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAQrD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEtD,SAAS,cAAc,CAAC,SAAkB;IACxC,OAAO,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,SAAkB;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;IAClD,CAAC;IACD,OAAO,qBAAqB,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC7D,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,WAAW,EAAE,cAAc,EAAE;YAC7B,UAAU,EAAE,aAAa,EAAE;SAC5B;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,mBAAmB,GAAG,WAAW,IAAI,cAAc,EAAE,CAAC;QAC5D,MAAM,kBAAkB,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/C,MAAM,gBAAgB,GAAgB;YACpC,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,kBAAkB;SAC/B,CAAC;QACF,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC,SAAS,CAAC,GAAG,CACX,4GAA4G,EAC5G,CAAC,oBAAoB,EAAE,MAAM,EAAE,sBAAsB,CAAC,CACvD,CAAC;YACF,SAAS,CAAC,GAAG,CACX,4CAA4C,EAC5C,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACjC,CAAC;YACF,SAAS,CAAC,GAAG,CACX,yDAAyD,EACzD,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACjC,CAAC;YAEF,aAAa,CAAC,WAAW,CAAC;gBACxB,EAAE,EAAE,oBAAoB;gBACxB,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,mBAAmB,6BAA6B,EAAE;YAC5E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,gBAAgB,CAAC,OAAO,GAAG,GAAG,CAAC;QAE/B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,QAAQ,IAAI,EAAE,CAAC;QACrC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;QAC9C,SAAS,CAAC,GAAG,CACX,6FAA6F,EAC7F,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,EAAE,aAAa,CAAC,CACrD,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACxE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAEzB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAC5B,kDAAkD,EAClD,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,IAAI,WAAW,GAAG,cAAc,EAAE,CAAC;QACnC,IAAI,kBAAkB,GAAG,EAAE,CAAC;QAE5B,IAAI,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;oBACzB,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACtC,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC;QAC9C,CAAC;aAAM,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC9B,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC1D,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,2BAA2B,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAE3C,IAAI,MAAM,EAAE,CAAC;YACX,SAAS,CAAC,GAAG,CACX,+GAA+G,EAC/G,CAAC,GAAG,EAAE,MAAM,EAAE,sBAAsB,CAAC,CACtC,CAAC;YAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAC5B,+CAA+C,EAC/C,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACjC,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,aAAa,CAAC,WAAW,CAAC;oBACxB,EAAE,EAAE,oBAAoB;oBACxB,IAAI,EAAE,sBAAsB;oBAC5B,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,kBAAkB,IAAI,aAAa,CAAC,WAAW,CAAC;oBACzD,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,cAAc,CAAC,oBAAoB,EAAE;oBACjD,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,QAAQ;oBACjD,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAElD,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE3B,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE,oBAAoB;oBAChC,YAAY,EAAE,UAAU,CAAC,KAAK;iBAC/B;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAC5B,yCAAyC,EACzC,CAAC,sBAAsB,CAAC,CACzB,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE9C,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IACzE,IAAI,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE;YACzB,SAAS,CAAC,GAAG,CACX,4GAA4G,EAC5G,CAAC,oBAAoB,EAAE,MAAM,EAAE,sBAAsB,CAAC,CACvD,CAAC;YACF,SAAS,CAAC,GAAG,CACX,4CAA4C,EAC5C,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACjC,CAAC;YACF,SAAS,CAAC,GAAG,CACX,yDAAyD,EACzD,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,KAAK,UAAU,sBAAsB;IACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAC5B,+CAA+C,EAC/C,CAAC,sBAAsB,CAAC,CACzB,CAAC;IAEF,IAAI,WAAW,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACvB,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,GAAG,CACX,0CAA0C,EAC1C,CAAC,oBAAoB,CAAC,CACvB,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,4CAA4C,CAAC,CAAC;IACrF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC9B,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAC5B,wDAAwD,EACxD,CAAC,oBAAoB,EAAE,YAAY,SAAS,EAAE,CAAC,CAChD,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,YAAY,SAAS,EAAE,CAAC;YACxC,aAAa,CAAC,QAAQ,CAAC;gBACrB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,oBAAoB;gBAChC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;gBAC3B,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.routes.d.ts","sourceRoot":"","sources":["../../src/api/system.routes.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,4CAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { getVersion } from '../utils/version.js';
|
|
3
|
+
export const systemRouter = Router();
|
|
4
|
+
systemRouter.get('/info', (_req, res) => {
|
|
5
|
+
res.json({
|
|
6
|
+
success: true,
|
|
7
|
+
data: {
|
|
8
|
+
version: getVersion(),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=system.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.routes.js","sourceRoot":"","sources":["../../src/api/system.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;AAErC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACzD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,OAAO,EAAE,UAAU,EAAE;SACtB;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caller WebSocket 处理器
|
|
3
|
+
*
|
|
4
|
+
* 处理 /ws/caller 路径的 WebSocket 消息
|
|
5
|
+
* 供外部系统(A系统)接入,将 txcode 作为 AI 编码底层服务使用
|
|
6
|
+
*
|
|
7
|
+
* 协议流程:
|
|
8
|
+
* 1. 客户端连接 → 广播 connected
|
|
9
|
+
* 2. 客户端发送 init(callbackUrl + projectPath + 扩展工具)→ 注册项目 → 创建会话 → 广播 init_ready
|
|
10
|
+
* 3. 客户端发送 chat → 创建 CallerAgent → AI 推理循环 → 广播 step/done
|
|
11
|
+
* 4. 内置工具本地执行,扩展工具 HTTP POST 到 callbackUrl
|
|
12
|
+
* 5. 所有 S→C 消息广播给所有 /ws/caller 客户端,客户端根据 sessionId 过滤
|
|
13
|
+
*/
|
|
14
|
+
import { WebSocket } from 'ws';
|
|
15
|
+
export declare class CallerWebSocketHandler {
|
|
16
|
+
private wsClients;
|
|
17
|
+
private abortControllers;
|
|
18
|
+
/**
|
|
19
|
+
* 处理新的 WebSocket 连接
|
|
20
|
+
* 注册消息/关闭事件,发送 connected 消息
|
|
21
|
+
*/
|
|
22
|
+
handle(ws: WebSocket): void;
|
|
23
|
+
/**
|
|
24
|
+
* 广播消息给所有已连接的 /ws/caller 客户端
|
|
25
|
+
* 每条消息携带 sessionId,客户端自行过滤
|
|
26
|
+
*/
|
|
27
|
+
private broadcast;
|
|
28
|
+
/** 消息路由:根据 type 分发到对应处理方法 */
|
|
29
|
+
private handleMessage;
|
|
30
|
+
/**
|
|
31
|
+
* 处理 init 消息
|
|
32
|
+
*
|
|
33
|
+
* 校验项:
|
|
34
|
+
* - callbackUrl 必填且仅允许 http/https 协议
|
|
35
|
+
* - projectPath 必填,目录不存在则自动创建
|
|
36
|
+
*
|
|
37
|
+
* 执行:
|
|
38
|
+
* 1. 解析 projectPath 为绝对路径,目录不存在则 mkdir
|
|
39
|
+
* 2. 通过 projectService.createProject 注册项目(已存在则复用)
|
|
40
|
+
* 3. 调用 callerChatService.initAgent 创建会话 + 注册扩展工具
|
|
41
|
+
* 4. 广播 init_ready(含 sessionId, toolsCount)
|
|
42
|
+
*/
|
|
43
|
+
private handleInit;
|
|
44
|
+
/**
|
|
45
|
+
* 处理 stop 消息
|
|
46
|
+
* 通过 AbortController 中断正在进行的 AI 任务
|
|
47
|
+
* 同时将 session 状态重置为 idle
|
|
48
|
+
*/
|
|
49
|
+
private handleStop;
|
|
50
|
+
/**
|
|
51
|
+
* 处理 chat 消息
|
|
52
|
+
*
|
|
53
|
+
* 流程:
|
|
54
|
+
* 1. 校验 sessionId / message
|
|
55
|
+
* 2. 获取或创建 session(断线重连时复用已有 session)
|
|
56
|
+
* 3. 如果已有运行中任务则先 abort
|
|
57
|
+
* 4. 创建 AbortController 注册到 abortControllers
|
|
58
|
+
* 5. 调用 callerChatService.handleChat 执行 AI 对话
|
|
59
|
+
* 6. 通过 onStep 回调广播 step 和 tool_call(扩展工具)
|
|
60
|
+
* 7. 广播 done 或 error / stopped
|
|
61
|
+
*/
|
|
62
|
+
private handleChat;
|
|
63
|
+
}
|
|
64
|
+
export declare const callerWebSocketHandler: CallerWebSocketHandler;
|
|
65
|
+
//# sourceMappingURL=caller.websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caller.websocket.d.ts","sourceRoot":"","sources":["../../../src/api/websocket/caller.websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAS9B,qBAAa,sBAAsB;IACjC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,gBAAgB,CAA0C;IAElE;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAkB3B;;;OAGG;IACH,OAAO,CAAC,SAAS;IASjB,6BAA6B;YACf,aAAa;IAqB3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU;IAqDlB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAYlB;;;;;;;;;;;OAWG;YACW,UAAU;CA8GzB;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAA"}
|