@myassis/gateway 1.0.19 → 1.0.20
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/index.js +27 -19
- package/dist/cli.js +10 -5
- package/dist/config/index.js +34 -11
- package/dist/index.js +1 -2
- package/dist/main.js +76 -71
- package/dist/middleware/auth.js +9 -5
- package/dist/middleware/errorHandler.js +9 -4
- package/dist/routes/agent.js +39 -37
- package/dist/routes/auth.js +32 -30
- package/dist/routes/chat.js +7 -5
- package/dist/routes/config.js +5 -3
- package/dist/routes/models.js +28 -23
- package/dist/routes/service.js +29 -24
- package/dist/routes/settings.js +26 -21
- package/dist/routes/skillHub.js +22 -17
- package/dist/routes/skills.js +25 -20
- package/dist/routes/tasks.js +24 -19
- package/dist/routes/upload.js +24 -17
- package/dist/routes/version.js +20 -19
- package/dist/services/HMSPushService.js +4 -1
- package/dist/services/LocalTaskService.js +12 -9
- package/dist/services/NotificationService.js +14 -11
- package/dist/services/ServiceManager.js +77 -65
- package/dist/services/TaskSchedulerService.js +33 -30
- package/dist/services/TaskService.js +27 -24
- package/dist/services/WebSocketService.js +14 -11
- package/dist/services/agent/Agent.js +13 -9
- package/dist/services/agent/AgentManager.js +32 -24
- package/dist/services/agent/AgentStore.js +7 -3
- package/dist/services/dataService.js +72 -69
- package/dist/services/index.js +25 -9
- package/dist/services/llm/LLMClient.js +17 -9
- package/dist/services/memory/MemoryManager.js +22 -18
- package/dist/services/model/ModelCapabilities.js +11 -7
- package/dist/services/model/index.js +17 -1
- package/dist/services/models.js +5 -1
- package/dist/services/session/MigrationManager.js +18 -11
- package/dist/services/session/Session.js +33 -29
- package/dist/services/session/SessionManager.js +26 -21
- package/dist/services/session/SessionStore.js +32 -25
- package/dist/services/session/index.js +8 -2
- package/dist/services/skills.js +4 -1
- package/dist/services/systemPrompt.js +23 -16
- package/dist/services/task/PushTokenStore.js +9 -5
- package/dist/services/task/TaskStore.js +10 -6
- package/dist/services/tools/calculator.js +4 -1
- package/dist/services/tools/edit.js +16 -10
- package/dist/services/tools/exec.js +25 -16
- package/dist/services/tools/fetch.js +30 -4
- package/dist/services/tools/file.js +41 -35
- package/dist/services/tools/index.js +44 -24
- package/dist/services/tools/keyboard.js +41 -38
- package/dist/services/tools/model.js +12 -9
- package/dist/services/tools/mouse.js +12 -9
- package/dist/services/tools/screenshot.js +9 -3
- package/dist/services/tools/search.js +34 -4
- package/dist/services/tools/sessionsSpawn.js +11 -8
- package/dist/services/tools/skill.js +19 -16
- package/dist/services/tools/task.js +12 -9
- package/dist/services/tools/types.js +2 -1
- package/dist/services/tools/webFetch.js +34 -4
- package/dist/stores/authStore.js +25 -19
- package/dist/stores/index.js +9 -3
- package/dist/stores/memoryStore.js +5 -2
- package/dist/stores/persistStore.js +20 -14
- package/package.json +11 -20
package/dist/routes/service.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = require("express");
|
|
7
|
+
const shared_1 = require("@myassis/shared");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const ServiceManager_js_1 = require("../services/ServiceManager.js");
|
|
10
|
+
const WebSocketService_js_1 = require("../services/WebSocketService.js");
|
|
11
|
+
const router = (0, express_1.Router)();
|
|
12
|
+
const logger = (0, shared_1.getLogger)('service');
|
|
8
13
|
/**
|
|
9
14
|
* 获取服务状态
|
|
10
15
|
* GET /api/v1/service
|
|
11
16
|
*/
|
|
12
17
|
router.get('/', async (_req, res) => {
|
|
13
18
|
try {
|
|
14
|
-
const info = await getServiceInfo();
|
|
19
|
+
const info = await (0, ServiceManager_js_1.getServiceInfo)();
|
|
15
20
|
res.json({ success: true, data: info });
|
|
16
21
|
}
|
|
17
22
|
catch (err) {
|
|
@@ -25,7 +30,7 @@ router.get('/', async (_req, res) => {
|
|
|
25
30
|
*/
|
|
26
31
|
router.post('/install', async (_req, res) => {
|
|
27
32
|
try {
|
|
28
|
-
const result = await installService();
|
|
33
|
+
const result = await (0, ServiceManager_js_1.installService)();
|
|
29
34
|
if (result.success) {
|
|
30
35
|
res.json(result);
|
|
31
36
|
}
|
|
@@ -44,7 +49,7 @@ router.post('/install', async (_req, res) => {
|
|
|
44
49
|
*/
|
|
45
50
|
router.delete('/', async (_req, res) => {
|
|
46
51
|
try {
|
|
47
|
-
const result = await uninstallService();
|
|
52
|
+
const result = await (0, ServiceManager_js_1.uninstallService)();
|
|
48
53
|
if (result.success) {
|
|
49
54
|
res.json(result);
|
|
50
55
|
}
|
|
@@ -63,7 +68,7 @@ router.delete('/', async (_req, res) => {
|
|
|
63
68
|
*/
|
|
64
69
|
router.post('/start', async (_req, res) => {
|
|
65
70
|
try {
|
|
66
|
-
const result = await startService();
|
|
71
|
+
const result = await (0, ServiceManager_js_1.startService)();
|
|
67
72
|
if (result.success) {
|
|
68
73
|
res.json(result);
|
|
69
74
|
}
|
|
@@ -82,7 +87,7 @@ router.post('/start', async (_req, res) => {
|
|
|
82
87
|
*/
|
|
83
88
|
router.post('/stop', async (_req, res) => {
|
|
84
89
|
try {
|
|
85
|
-
const result = await stopService();
|
|
90
|
+
const result = await (0, ServiceManager_js_1.stopService)();
|
|
86
91
|
if (result.success) {
|
|
87
92
|
res.json(result);
|
|
88
93
|
}
|
|
@@ -101,7 +106,7 @@ router.post('/stop', async (_req, res) => {
|
|
|
101
106
|
*/
|
|
102
107
|
router.post('/restart', async (_req, res) => {
|
|
103
108
|
try {
|
|
104
|
-
const result = await restartService();
|
|
109
|
+
const result = await (0, ServiceManager_js_1.restartService)();
|
|
105
110
|
if (result.success) {
|
|
106
111
|
res.json(result);
|
|
107
112
|
}
|
|
@@ -120,7 +125,7 @@ router.post('/restart', async (_req, res) => {
|
|
|
120
125
|
*/
|
|
121
126
|
router.get('/check-update', async (_req, res) => {
|
|
122
127
|
try {
|
|
123
|
-
const result = await checkForUpdates();
|
|
128
|
+
const result = await (0, ServiceManager_js_1.checkForUpdates)();
|
|
124
129
|
res.json({ success: true, data: result });
|
|
125
130
|
}
|
|
126
131
|
catch (err) {
|
|
@@ -135,7 +140,7 @@ router.get('/check-update', async (_req, res) => {
|
|
|
135
140
|
router.post('/update', async (_req, res) => {
|
|
136
141
|
try {
|
|
137
142
|
// 先检查版本
|
|
138
|
-
const check = await checkForUpdates();
|
|
143
|
+
const check = await (0, ServiceManager_js_1.checkForUpdates)();
|
|
139
144
|
if (check.error) {
|
|
140
145
|
res.status(500).json({ success: false, message: `检查更新失败: ${check.error}` });
|
|
141
146
|
return;
|
|
@@ -145,14 +150,14 @@ router.post('/update', async (_req, res) => {
|
|
|
145
150
|
return;
|
|
146
151
|
}
|
|
147
152
|
// 尝试自动更新(有 nssm 时会成功)
|
|
148
|
-
const result = await updateService();
|
|
153
|
+
const result = await (0, ServiceManager_js_1.updateService)();
|
|
149
154
|
if (result.success) {
|
|
150
155
|
res.json(result);
|
|
151
156
|
return;
|
|
152
157
|
}
|
|
153
158
|
// 自动更新失败,推送手动更新提示给 Desktop
|
|
154
159
|
const userId = 'default';
|
|
155
|
-
const pushed = webSocketService.sendUpdateRequired(userId, result.message);
|
|
160
|
+
const pushed = WebSocketService_js_1.webSocketService.sendUpdateRequired(userId, result.message);
|
|
156
161
|
if (pushed) {
|
|
157
162
|
res.json({ success: true, message: '已推送手动更新提示到桌面端', manual: true });
|
|
158
163
|
}
|
|
@@ -172,7 +177,7 @@ router.post('/update', async (_req, res) => {
|
|
|
172
177
|
*/
|
|
173
178
|
router.get('/latest-exe-url', async (_req, res) => {
|
|
174
179
|
try {
|
|
175
|
-
const check = await checkForUpdates();
|
|
180
|
+
const check = await (0, ServiceManager_js_1.checkForUpdates)();
|
|
176
181
|
if (check.error) {
|
|
177
182
|
res.status(500).json({ success: false, message: check.error });
|
|
178
183
|
return;
|
|
@@ -210,7 +215,7 @@ router.post('/update-exe', async (_req, res) => {
|
|
|
210
215
|
return;
|
|
211
216
|
}
|
|
212
217
|
// 获取最新版本信息
|
|
213
|
-
const check = await checkForUpdates();
|
|
218
|
+
const check = await (0, ServiceManager_js_1.checkForUpdates)();
|
|
214
219
|
if (check.error) {
|
|
215
220
|
res.status(500).json({ success: false, message: `检查更新失败: ${check.error}` });
|
|
216
221
|
return;
|
|
@@ -221,10 +226,10 @@ router.post('/update-exe', async (_req, res) => {
|
|
|
221
226
|
}
|
|
222
227
|
// 获取当前 exe 路径
|
|
223
228
|
const currentExePath = process.execPath;
|
|
224
|
-
const exeDir =
|
|
225
|
-
const exeName =
|
|
226
|
-
const backupPath =
|
|
227
|
-
const downloadPath =
|
|
229
|
+
const exeDir = path_1.default.dirname(currentExePath);
|
|
230
|
+
const exeName = path_1.default.basename(currentExePath);
|
|
231
|
+
const backupPath = path_1.default.join(exeDir, `${exeName}.backup`);
|
|
232
|
+
const downloadPath = path_1.default.join(exeDir, `${exeName}.new`);
|
|
228
233
|
// TODO: 从 GitHub Releases 或自有 CDN 下载最新 exe
|
|
229
234
|
// 这里需要实现下载逻辑
|
|
230
235
|
res.status(501).json({ success: false, message: 'EXE 更新功能尚未实现' });
|
|
@@ -234,4 +239,4 @@ router.post('/update-exe', async (_req, res) => {
|
|
|
234
239
|
res.status(500).json({ success: false, message: err?.message });
|
|
235
240
|
}
|
|
236
241
|
});
|
|
237
|
-
|
|
242
|
+
exports.default = router;
|
package/dist/routes/settings.js
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = __importDefault(require("express"));
|
|
7
|
+
const shared_1 = require("@myassis/shared");
|
|
8
|
+
const index_js_1 = require("../services/index.js");
|
|
9
|
+
const index_js_2 = require("../stores/index.js");
|
|
10
|
+
const index_js_3 = require("../api/index.js");
|
|
11
|
+
const auth_js_1 = require("../middleware/auth.js");
|
|
12
|
+
const logger = (0, shared_1.getLogger)('settings');
|
|
13
|
+
const router = express_1.default.Router();
|
|
14
|
+
router.use(auth_js_1.requireAuth);
|
|
10
15
|
/**
|
|
11
16
|
* 获取用户设置
|
|
12
17
|
* GET /api/v1/settings
|
|
13
18
|
*/
|
|
14
19
|
router.get('/', async (req, res) => {
|
|
15
20
|
try {
|
|
16
|
-
const result = await settingsService.get(req.token);
|
|
21
|
+
const result = await index_js_1.settingsService.get(req.token);
|
|
17
22
|
res.json(result);
|
|
18
23
|
}
|
|
19
24
|
catch (error) {
|
|
@@ -25,9 +30,9 @@ router.get('/', async (req, res) => {
|
|
|
25
30
|
* 更新用户设置
|
|
26
31
|
* PUT /api/v1/settings
|
|
27
32
|
*/
|
|
28
|
-
router.put('/', requireAuth, async (req, res) => {
|
|
33
|
+
router.put('/', auth_js_1.requireAuth, async (req, res) => {
|
|
29
34
|
try {
|
|
30
|
-
const result = await runWithToken(req.token, () => settingsService.update(req.body, req.token));
|
|
35
|
+
const result = await (0, index_js_3.runWithToken)(req.token, () => index_js_1.settingsService.update(req.body, req.token));
|
|
31
36
|
res.json(result);
|
|
32
37
|
}
|
|
33
38
|
catch (error) {
|
|
@@ -39,14 +44,14 @@ router.put('/', requireAuth, async (req, res) => {
|
|
|
39
44
|
* 修改密码
|
|
40
45
|
* PUT /api/v1/settings/password
|
|
41
46
|
*/
|
|
42
|
-
router.put('/password', requireAuth, async (req, res) => {
|
|
47
|
+
router.put('/password', auth_js_1.requireAuth, async (req, res) => {
|
|
43
48
|
try {
|
|
44
49
|
const { oldPassword, newPassword } = req.body;
|
|
45
50
|
if (!oldPassword || !newPassword) {
|
|
46
51
|
res.status(400).json({ success: false, error: 'Missing required fields' });
|
|
47
52
|
return;
|
|
48
53
|
}
|
|
49
|
-
const result = await authApi.changePassword({ oldPassword, newPassword }, req.token);
|
|
54
|
+
const result = await index_js_3.authApi.changePassword({ oldPassword, newPassword }, req.token);
|
|
50
55
|
res.json(result);
|
|
51
56
|
}
|
|
52
57
|
catch (error) {
|
|
@@ -60,7 +65,7 @@ router.put('/password', requireAuth, async (req, res) => {
|
|
|
60
65
|
*/
|
|
61
66
|
router.get('/local', async (req, res) => {
|
|
62
67
|
try {
|
|
63
|
-
const settings = persistStore.getAllLocalUserSettings();
|
|
68
|
+
const settings = index_js_2.persistStore.getAllLocalUserSettings();
|
|
64
69
|
res.json({ success: true, data: settings });
|
|
65
70
|
}
|
|
66
71
|
catch (error) {
|
|
@@ -74,8 +79,8 @@ router.get('/local', async (req, res) => {
|
|
|
74
79
|
*/
|
|
75
80
|
router.put('/local', async (req, res) => {
|
|
76
81
|
try {
|
|
77
|
-
persistStore.setLocalUserSettings(req.body);
|
|
78
|
-
const settings = persistStore.getAllLocalUserSettings();
|
|
82
|
+
index_js_2.persistStore.setLocalUserSettings(req.body);
|
|
83
|
+
const settings = index_js_2.persistStore.getAllLocalUserSettings();
|
|
79
84
|
res.json({ success: true, data: settings });
|
|
80
85
|
}
|
|
81
86
|
catch (error) {
|
|
@@ -87,11 +92,11 @@ router.put('/local', async (req, res) => {
|
|
|
87
92
|
* 删除账号
|
|
88
93
|
* DELETE /api/v1/settings/account
|
|
89
94
|
*/
|
|
90
|
-
router.delete('/account', requireAuth, async (req, res) => {
|
|
95
|
+
router.delete('/account', auth_js_1.requireAuth, async (req, res) => {
|
|
91
96
|
try {
|
|
92
|
-
const result = await authApi.deleteAccount({ password: req.params.password }, req.token);
|
|
97
|
+
const result = await index_js_3.authApi.deleteAccount({ password: req.params.password }, req.token);
|
|
93
98
|
if (result.success) {
|
|
94
|
-
authStore.clear();
|
|
99
|
+
index_js_2.authStore.clear();
|
|
95
100
|
}
|
|
96
101
|
res.json(result);
|
|
97
102
|
}
|
|
@@ -100,4 +105,4 @@ router.delete('/account', requireAuth, async (req, res) => {
|
|
|
100
105
|
res.status(500).json({ success: false, error: '删除账号失败' });
|
|
101
106
|
}
|
|
102
107
|
});
|
|
103
|
-
|
|
108
|
+
exports.default = router;
|
package/dist/routes/skillHub.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Gateway SkillHub 路由
|
|
3
4
|
* 技能库(可安装的技能)
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const express_1 = __importDefault(require("express"));
|
|
11
|
+
const index_js_1 = require("../services/index.js");
|
|
12
|
+
const auth_js_1 = require("../middleware/auth.js");
|
|
13
|
+
const index_js_2 = require("../api/index.js");
|
|
14
|
+
const shared_1 = require("@myassis/shared");
|
|
15
|
+
const logger = (0, shared_1.getLogger)('skillHub');
|
|
16
|
+
const router = express_1.default.Router();
|
|
17
|
+
router.use(auth_js_1.requireAuth, (req, _res, next) => {
|
|
18
|
+
void (0, index_js_2.runWithToken)(req.token, async () => { next(); });
|
|
14
19
|
});
|
|
15
20
|
/**
|
|
16
21
|
* 获取技能库列表
|
|
@@ -28,7 +33,7 @@ router.get('/', async (req, res) => {
|
|
|
28
33
|
params.keyword = search;
|
|
29
34
|
if (category)
|
|
30
35
|
params.category = category;
|
|
31
|
-
const result = await skillHubService.list(params);
|
|
36
|
+
const result = await index_js_1.skillHubService.list(params);
|
|
32
37
|
res.json(result);
|
|
33
38
|
}
|
|
34
39
|
catch (error) {
|
|
@@ -46,7 +51,7 @@ router.get('/:id', async (req, res) => {
|
|
|
46
51
|
if (!hubId) {
|
|
47
52
|
return res.status(400).json({ success: false, error: '无效的技能库ID' });
|
|
48
53
|
}
|
|
49
|
-
const result = await skillHubService.get(hubId, req.token);
|
|
54
|
+
const result = await index_js_1.skillHubService.get(hubId, req.token);
|
|
50
55
|
res.json(result);
|
|
51
56
|
}
|
|
52
57
|
catch (error) {
|
|
@@ -64,7 +69,7 @@ router.get('/:id/used', async (req, res) => {
|
|
|
64
69
|
if (!hubId) {
|
|
65
70
|
return res.status(400).json({ success: false, error: '无效的技能库ID' });
|
|
66
71
|
}
|
|
67
|
-
const result = await skillHubService.checkUsed(hubId, req.token);
|
|
72
|
+
const result = await index_js_1.skillHubService.checkUsed(hubId, req.token);
|
|
68
73
|
res.json(result);
|
|
69
74
|
}
|
|
70
75
|
catch (error) {
|
|
@@ -82,7 +87,7 @@ router.get('/:id/user-rating', async (req, res) => {
|
|
|
82
87
|
if (!hubId) {
|
|
83
88
|
return res.status(400).json({ success: false, error: '无效的技能库ID' });
|
|
84
89
|
}
|
|
85
|
-
const result = await skillHubService.userRating(hubId, req.token);
|
|
90
|
+
const result = await index_js_1.skillHubService.userRating(hubId, req.token);
|
|
86
91
|
res.json(result);
|
|
87
92
|
}
|
|
88
93
|
catch (error) {
|
|
@@ -96,7 +101,7 @@ router.get('/:id/user-rating', async (req, res) => {
|
|
|
96
101
|
*/
|
|
97
102
|
router.get('/categories/list', async (req, res) => {
|
|
98
103
|
try {
|
|
99
|
-
const result = await skillHubService.categories(req.token);
|
|
104
|
+
const result = await index_js_1.skillHubService.categories(req.token);
|
|
100
105
|
res.json(result);
|
|
101
106
|
}
|
|
102
107
|
catch (error) {
|
|
@@ -108,7 +113,7 @@ router.get('/categories/list', async (req, res) => {
|
|
|
108
113
|
* 技能库评分
|
|
109
114
|
* POST /api/v1/skill-hub/:id/rate
|
|
110
115
|
*/
|
|
111
|
-
router.post('/:id/rate', requireAuth, async (req, res) => {
|
|
116
|
+
router.post('/:id/rate', auth_js_1.requireAuth, async (req, res) => {
|
|
112
117
|
try {
|
|
113
118
|
const hubId = req.params.id;
|
|
114
119
|
const { rating } = req.body;
|
|
@@ -119,7 +124,7 @@ router.post('/:id/rate', requireAuth, async (req, res) => {
|
|
|
119
124
|
if (rating === undefined || rating < 1 || rating > 5) {
|
|
120
125
|
return res.status(400).json({ success: false, error: '评分必须是1-5的数字' });
|
|
121
126
|
}
|
|
122
|
-
const result = await runWithToken(req.token, () => skillHubService.rate(hubId, rating, req.token));
|
|
127
|
+
const result = await (0, index_js_2.runWithToken)(req.token, () => index_js_1.skillHubService.rate(hubId, rating, req.token));
|
|
123
128
|
res.json(result);
|
|
124
129
|
}
|
|
125
130
|
catch (error) {
|
|
@@ -127,4 +132,4 @@ router.post('/:id/rate', requireAuth, async (req, res) => {
|
|
|
127
132
|
res.status(500).json({ success: false, error: error?.message });
|
|
128
133
|
}
|
|
129
134
|
});
|
|
130
|
-
|
|
135
|
+
exports.default = router;
|
package/dist/routes/skills.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Gateway Skills 路由
|
|
3
4
|
* 用户已安装技能管理
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const express_1 = __importDefault(require("express"));
|
|
11
|
+
const index_js_1 = require("../services/index.js");
|
|
12
|
+
const persistStore_js_1 = require("../stores/persistStore.js");
|
|
13
|
+
const shared_1 = require("@myassis/shared");
|
|
14
|
+
const auth_js_1 = require("../middleware/auth.js");
|
|
15
|
+
const index_js_2 = require("../api/index.js");
|
|
16
|
+
const logger = (0, shared_1.getLogger)('skills');
|
|
17
|
+
const router = express_1.default.Router();
|
|
18
|
+
router.use(auth_js_1.requireAuth, (req, _res, next) => {
|
|
19
|
+
void (0, index_js_2.runWithToken)(req.token, async () => { next(); });
|
|
15
20
|
});
|
|
16
21
|
/**
|
|
17
22
|
* 获取用户已安装的技能列表
|
|
@@ -19,7 +24,7 @@ router.use(requireAuth, (req, _res, next) => {
|
|
|
19
24
|
*/
|
|
20
25
|
router.get('/', async (req, res) => {
|
|
21
26
|
try {
|
|
22
|
-
const result = await skillsService.list(req.token);
|
|
27
|
+
const result = await index_js_1.skillsService.list(req.token);
|
|
23
28
|
res.json(result);
|
|
24
29
|
}
|
|
25
30
|
catch (error) {
|
|
@@ -37,7 +42,7 @@ router.post('/parse', async (req, res) => {
|
|
|
37
42
|
if (!content) {
|
|
38
43
|
return res.status(400).json({ success: false, error: '缺少 content 参数' });
|
|
39
44
|
}
|
|
40
|
-
const result = await skillsService.parse(content, req.token);
|
|
45
|
+
const result = await index_js_1.skillsService.parse(content, req.token);
|
|
41
46
|
res.json(result);
|
|
42
47
|
}
|
|
43
48
|
catch (error) {
|
|
@@ -52,7 +57,7 @@ router.post('/parse', async (req, res) => {
|
|
|
52
57
|
router.get('/:id', async (req, res) => {
|
|
53
58
|
try {
|
|
54
59
|
const skillId = req.params.id;
|
|
55
|
-
const result = await skillsService.get(skillId, req.token);
|
|
60
|
+
const result = await index_js_1.skillsService.get(skillId, req.token);
|
|
56
61
|
res.json(result);
|
|
57
62
|
}
|
|
58
63
|
catch (error) {
|
|
@@ -72,7 +77,7 @@ router.post('/', async (req, res) => {
|
|
|
72
77
|
if (skillHubId) {
|
|
73
78
|
// 从技能库安装
|
|
74
79
|
const hubId = String(skillHubId);
|
|
75
|
-
const result = await skillsService.install(hubId, req.token);
|
|
80
|
+
const result = await index_js_1.skillsService.install(hubId, req.token);
|
|
76
81
|
res.json(result);
|
|
77
82
|
}
|
|
78
83
|
else {
|
|
@@ -80,7 +85,7 @@ router.post('/', async (req, res) => {
|
|
|
80
85
|
if (!req.body.name) {
|
|
81
86
|
return res.status(400).json({ success: false, error: '自定义技能必须提供 name' });
|
|
82
87
|
}
|
|
83
|
-
const result = await skillsService.create(req.body, req.token);
|
|
88
|
+
const result = await index_js_1.skillsService.create(req.body, req.token);
|
|
84
89
|
res.json(result);
|
|
85
90
|
}
|
|
86
91
|
}
|
|
@@ -96,7 +101,7 @@ router.post('/', async (req, res) => {
|
|
|
96
101
|
router.put('/:id', async (req, res) => {
|
|
97
102
|
try {
|
|
98
103
|
const skillId = req.params.id;
|
|
99
|
-
const result = await skillsService.update(skillId, req.body, req.token);
|
|
104
|
+
const result = await index_js_1.skillsService.update(skillId, req.body, req.token);
|
|
100
105
|
res.json(result);
|
|
101
106
|
}
|
|
102
107
|
catch (error) {
|
|
@@ -111,7 +116,7 @@ router.put('/:id', async (req, res) => {
|
|
|
111
116
|
router.delete('/:id', async (req, res) => {
|
|
112
117
|
try {
|
|
113
118
|
const skillId = req.params.id;
|
|
114
|
-
const result = await skillsService.uninstall(skillId, req.token);
|
|
119
|
+
const result = await index_js_1.skillsService.uninstall(skillId, req.token);
|
|
115
120
|
res.json(result);
|
|
116
121
|
}
|
|
117
122
|
catch (error) {
|
|
@@ -131,7 +136,7 @@ router.post('/:id/api-key', async (req, res) => {
|
|
|
131
136
|
return res.status(400).json({ success: false, error: '缺少 apiKey 参数' });
|
|
132
137
|
}
|
|
133
138
|
// 只存储到本地,不发送到服务端
|
|
134
|
-
persistStore.setSkillApiKey(skillId, apiKey);
|
|
139
|
+
persistStore_js_1.persistStore.setSkillApiKey(skillId, apiKey);
|
|
135
140
|
logger.info(`Skill API Key stored locally for skill: ${skillId}`);
|
|
136
141
|
res.json({ success: true, message: 'API Key 已保存到本地' });
|
|
137
142
|
}
|
|
@@ -151,7 +156,7 @@ router.post('/:id/rating', async (req, res) => {
|
|
|
151
156
|
if (!score || score < 1 || score > 5) {
|
|
152
157
|
return res.status(400).json({ success: false, error: '评分必须在 1-5 之间' });
|
|
153
158
|
}
|
|
154
|
-
const result = await skillsService.rate(skillId, score, req.token);
|
|
159
|
+
const result = await index_js_1.skillsService.rate(skillId, score, req.token);
|
|
155
160
|
res.json(result);
|
|
156
161
|
}
|
|
157
162
|
catch (error) {
|
|
@@ -159,4 +164,4 @@ router.post('/:id/rating', async (req, res) => {
|
|
|
159
164
|
res.status(500).json({ success: false, error: '评分失败' });
|
|
160
165
|
}
|
|
161
166
|
});
|
|
162
|
-
|
|
167
|
+
exports.default = router;
|
package/dist/routes/tasks.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Gateway Tasks 路由
|
|
3
4
|
* 任务管理
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const express_1 = __importDefault(require("express"));
|
|
11
|
+
const index_js_1 = require("../services/index.js");
|
|
12
|
+
const shared_1 = require("@myassis/shared");
|
|
13
|
+
const auth_js_1 = require("../middleware/auth.js");
|
|
14
|
+
const index_js_2 = require("../api/index.js");
|
|
15
|
+
const logger = (0, shared_1.getLogger)('tasks');
|
|
16
|
+
const router = express_1.default.Router();
|
|
17
|
+
router.use(auth_js_1.requireAuth, (req, _res, next) => {
|
|
18
|
+
void (0, index_js_2.runWithToken)(req.token, async () => { next(); });
|
|
14
19
|
});
|
|
15
20
|
/**
|
|
16
21
|
* 获取任务列表
|
|
@@ -20,7 +25,7 @@ router.get('/', async (req, res) => {
|
|
|
20
25
|
try {
|
|
21
26
|
const { status, page, pageSize } = req.query;
|
|
22
27
|
const userId = req.userId;
|
|
23
|
-
const result = await tasksService.list(userId, { status, page, pageSize });
|
|
28
|
+
const result = await index_js_1.tasksService.list(userId, { status, page, pageSize });
|
|
24
29
|
res.json(result);
|
|
25
30
|
}
|
|
26
31
|
catch (error) {
|
|
@@ -35,7 +40,7 @@ router.get('/', async (req, res) => {
|
|
|
35
40
|
router.get('/:id', async (req, res) => {
|
|
36
41
|
try {
|
|
37
42
|
const taskId = req.params.id;
|
|
38
|
-
const result = await tasksService.get(taskId);
|
|
43
|
+
const result = await index_js_1.tasksService.get(taskId);
|
|
39
44
|
res.json(result);
|
|
40
45
|
}
|
|
41
46
|
catch (error) {
|
|
@@ -50,7 +55,7 @@ router.get('/:id', async (req, res) => {
|
|
|
50
55
|
router.post('/', async (req, res) => {
|
|
51
56
|
try {
|
|
52
57
|
const userId = req.userId;
|
|
53
|
-
const result = await tasksService.create(req.body, String(userId));
|
|
58
|
+
const result = await index_js_1.tasksService.create(req.body, String(userId));
|
|
54
59
|
res.json(result);
|
|
55
60
|
}
|
|
56
61
|
catch (error) {
|
|
@@ -65,7 +70,7 @@ router.post('/', async (req, res) => {
|
|
|
65
70
|
router.put('/:id', async (req, res) => {
|
|
66
71
|
try {
|
|
67
72
|
const taskId = req.params.id;
|
|
68
|
-
const result = await tasksService.update(taskId, req.body);
|
|
73
|
+
const result = await index_js_1.tasksService.update(taskId, req.body);
|
|
69
74
|
res.json(result);
|
|
70
75
|
}
|
|
71
76
|
catch (error) {
|
|
@@ -80,7 +85,7 @@ router.put('/:id', async (req, res) => {
|
|
|
80
85
|
router.delete('/:id', async (req, res) => {
|
|
81
86
|
try {
|
|
82
87
|
const taskId = req.params.id;
|
|
83
|
-
const result = await tasksService.delete(taskId);
|
|
88
|
+
const result = await index_js_1.tasksService.delete(taskId);
|
|
84
89
|
res.json(result);
|
|
85
90
|
}
|
|
86
91
|
catch (error) {
|
|
@@ -95,7 +100,7 @@ router.delete('/:id', async (req, res) => {
|
|
|
95
100
|
router.post('/:id/start', async (req, res) => {
|
|
96
101
|
try {
|
|
97
102
|
const taskId = req.params.id;
|
|
98
|
-
const result = await tasksService.updateStatus(taskId, 'running');
|
|
103
|
+
const result = await index_js_1.tasksService.updateStatus(taskId, 'running');
|
|
99
104
|
res.json(result);
|
|
100
105
|
}
|
|
101
106
|
catch (error) {
|
|
@@ -110,7 +115,7 @@ router.post('/:id/start', async (req, res) => {
|
|
|
110
115
|
router.post('/:id/complete', async (req, res) => {
|
|
111
116
|
try {
|
|
112
117
|
const taskId = req.params.id;
|
|
113
|
-
const result = await tasksService.updateStatus(taskId, 'completed');
|
|
118
|
+
const result = await index_js_1.tasksService.updateStatus(taskId, 'completed');
|
|
114
119
|
res.json(result);
|
|
115
120
|
}
|
|
116
121
|
catch (error) {
|
|
@@ -125,7 +130,7 @@ router.post('/:id/complete', async (req, res) => {
|
|
|
125
130
|
router.post('/:id/cancel', async (req, res) => {
|
|
126
131
|
try {
|
|
127
132
|
const taskId = req.params.id;
|
|
128
|
-
const result = await tasksService.cancel(taskId);
|
|
133
|
+
const result = await index_js_1.tasksService.cancel(taskId);
|
|
129
134
|
res.json(result);
|
|
130
135
|
}
|
|
131
136
|
catch (error) {
|
|
@@ -141,7 +146,7 @@ router.post('/:id/status', async (req, res) => {
|
|
|
141
146
|
try {
|
|
142
147
|
const taskId = req.params.id;
|
|
143
148
|
const { status } = req.body;
|
|
144
|
-
const result = await tasksService.updateStatus(taskId, status);
|
|
149
|
+
const result = await index_js_1.tasksService.updateStatus(taskId, status);
|
|
145
150
|
res.json(result);
|
|
146
151
|
}
|
|
147
152
|
catch (error) {
|
|
@@ -149,4 +154,4 @@ router.post('/:id/status', async (req, res) => {
|
|
|
149
154
|
res.status(500).json({ success: false, error: '更新任务状态失败' });
|
|
150
155
|
}
|
|
151
156
|
});
|
|
152
|
-
|
|
157
|
+
exports.default = router;
|
package/dist/routes/upload.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deleteFile = void 0;
|
|
7
|
+
const express_1 = require("express");
|
|
8
|
+
const multer_1 = __importDefault(require("multer"));
|
|
9
|
+
const index_js_1 = require("../config/index.js");
|
|
10
|
+
const auth_js_1 = require("../middleware/auth.js");
|
|
11
|
+
const index_js_2 = require("../api/index.js");
|
|
12
|
+
const shared_1 = require("@myassis/shared");
|
|
13
|
+
const logger = (0, shared_1.getLogger)('UploadRoutes');
|
|
14
|
+
const router = (0, express_1.Router)();
|
|
15
|
+
router.use(auth_js_1.requireAuth, (req, _res, next) => {
|
|
16
|
+
void (0, index_js_2.runWithToken)(req.token, async () => { next(); });
|
|
11
17
|
});
|
|
12
18
|
// 配置 multer 用于解析 multipart/form-data
|
|
13
|
-
const upload =
|
|
14
|
-
storage:
|
|
19
|
+
const upload = (0, multer_1.default)({
|
|
20
|
+
storage: multer_1.default.memoryStorage(),
|
|
15
21
|
limits: {
|
|
16
22
|
fileSize: 50 * 1024 * 1024, // 50MB
|
|
17
23
|
},
|
|
@@ -56,7 +62,7 @@ router.post('/', upload.single('file'), async (req, res) => {
|
|
|
56
62
|
// 创建 FormData 并转发到 Server
|
|
57
63
|
const formData = new FormData();
|
|
58
64
|
formData.append('file', new Blob([req.file.buffer], { type: req.file.mimetype }), req.file.originalname);
|
|
59
|
-
const response = await fetch(`${appConfig.serverBaseUrl}/api/v1/upload`, {
|
|
65
|
+
const response = await fetch(`${index_js_1.appConfig.serverBaseUrl}/api/v1/upload`, {
|
|
60
66
|
method: 'POST',
|
|
61
67
|
headers: {
|
|
62
68
|
'Authorization': `Bearer ${req.token}`,
|
|
@@ -93,7 +99,7 @@ router.delete('/', async (req, res) => {
|
|
|
93
99
|
return;
|
|
94
100
|
}
|
|
95
101
|
// 转发到 Server
|
|
96
|
-
const response = await fetch(`${appConfig.serverBaseUrl}/api/v1/upload?keys=${encodeURIComponent(keysParam)}`, {
|
|
102
|
+
const response = await fetch(`${index_js_1.appConfig.serverBaseUrl}/api/v1/upload?keys=${encodeURIComponent(keysParam)}`, {
|
|
97
103
|
method: 'DELETE',
|
|
98
104
|
headers: {
|
|
99
105
|
'Authorization': `Bearer ${req.token}`,
|
|
@@ -116,8 +122,8 @@ router.delete('/', async (req, res) => {
|
|
|
116
122
|
res.status(500).json({ success: false, error: 'Delete failed' });
|
|
117
123
|
}
|
|
118
124
|
});
|
|
119
|
-
|
|
120
|
-
const response = await fetch(`${appConfig.serverBaseUrl}/api/v1/upload`, {
|
|
125
|
+
async function deleteFile(url, token) {
|
|
126
|
+
const response = await fetch(`${index_js_1.appConfig.serverBaseUrl}/api/v1/upload`, {
|
|
121
127
|
method: 'DELETE',
|
|
122
128
|
headers: {
|
|
123
129
|
'Content-Type': 'application/json',
|
|
@@ -129,4 +135,5 @@ export async function deleteFile(url, token) {
|
|
|
129
135
|
throw new Error(`Delete failed: ${response.status}`);
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
|
-
|
|
138
|
+
exports.deleteFile = deleteFile;
|
|
139
|
+
exports.default = router;
|