aws-runtime-bridge 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/adapter.test.js +4 -4
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +0 -7
- package/dist/adapter/types.test.js +5 -53
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +4 -0
- package/dist/routes/instance.d.ts.map +1 -1
- package/dist/routes/instance.js +88 -34
- package/dist/routes/runtime-binding.d.ts.map +1 -1
- package/dist/routes/runtime-binding.js +59 -2
- package/dist/routes/sessions.js +1 -1
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +48 -14
- package/dist/routes/terminal.test.js +6 -2
- package/dist/services/agent-process-manager.js +4 -4
- package/dist/services/auto-register.d.ts +12 -1
- package/dist/services/auto-register.d.ts.map +1 -1
- package/dist/services/auto-register.js +206 -42
- package/dist/services/aws-client-agent-mcp.test.js +3 -0
- package/dist/services/mcp-launch-binding-queue.d.ts +36 -0
- package/dist/services/mcp-launch-binding-queue.d.ts.map +1 -0
- package/dist/services/mcp-launch-binding-queue.js +92 -0
- package/dist/services/mcp-launch-binding-queue.test.d.ts +2 -0
- package/dist/services/mcp-launch-binding-queue.test.d.ts.map +1 -0
- package/dist/services/mcp-launch-binding-queue.test.js +107 -0
- package/dist/services/orphan-monitor.js +1 -1
- package/dist/services/process-detector.d.ts +1 -1
- package/dist/services/process-detector.d.ts.map +1 -1
- package/dist/services/process-detector.js +2 -11
- package/dist/services/process-registry.d.ts +1 -0
- package/dist/services/process-registry.d.ts.map +1 -1
- package/dist/services/process-registry.js +129 -108
- package/dist/services/runtime-binding.d.ts +11 -1
- package/dist/services/runtime-binding.d.ts.map +1 -1
- package/dist/services/runtime-binding.js +130 -4
- package/dist/services/terminal-persistence.d.ts.map +1 -1
- package/dist/services/terminal-persistence.js +47 -37
- package/dist/services/terminal-persistence.test.js +47 -1
- package/dist/utils/file-utils.d.ts +3 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +32 -0
- package/package/aws-client-agent-mcp/README.md +288 -288
- package/package.json +76 -76
- package/dist/routes/aws-mcp.d.ts +0 -10
- package/dist/routes/aws-mcp.d.ts.map +0 -1
- package/dist/routes/aws-mcp.js +0 -74
- package/dist/routes/aws-mcp.test.d.ts +0 -2
- package/dist/routes/aws-mcp.test.d.ts.map +0 -1
- package/dist/routes/aws-mcp.test.js +0 -42
- package/dist/routes/memory.d.ts +0 -13
- package/dist/routes/memory.d.ts.map +0 -1
- package/dist/routes/memory.js +0 -429
- package/dist/services/aws-mcp-http.d.ts +0 -11
- package/dist/services/aws-mcp-http.d.ts.map +0 -1
- package/dist/services/aws-mcp-http.js +0 -225
- package/dist/services/aws-mcp-http.test.d.ts +0 -2
- package/dist/services/aws-mcp-http.test.d.ts.map +0 -1
- package/dist/services/aws-mcp-http.test.js +0 -27
- package/dist/services/easytier-manager.d.ts +0 -106
- package/dist/services/easytier-manager.d.ts.map +0 -1
- package/dist/services/easytier-manager.js +0 -331
- package/dist/services/easytier-manager.test.d.ts +0 -5
- package/dist/services/easytier-manager.test.d.ts.map +0 -1
- package/dist/services/easytier-manager.test.js +0 -98
- package/dist/services/memory-service.d.ts +0 -195
- package/dist/services/memory-service.d.ts.map +0 -1
- package/dist/services/memory-service.js +0 -650
- package/dist/services/session-lookup.d.ts +0 -20
- package/dist/services/session-lookup.d.ts.map +0 -1
- package/dist/services/session-lookup.js +0 -43
- package/dist/services/user-api-key-service.d.ts +0 -28
- package/dist/services/user-api-key-service.d.ts.map +0 -1
- package/dist/services/user-api-key-service.js +0 -75
- package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts +0 -38
- package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/common.js +0 -47
- package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts +0 -5
- package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/index.js +0 -28
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.js +0 -39
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.js +0 -40
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts +0 -18
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.js +0 -63
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.js +0 -86
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.js +0 -14
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts +0 -9
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.js +0 -14
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts +0 -78
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.js +0 -180
- package/package/cc-switch-sdk/dist/adapters/common.d.ts +0 -38
- package/package/cc-switch-sdk/dist/adapters/common.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/common.js +0 -47
- package/package/cc-switch-sdk/dist/adapters/index.d.ts +0 -5
- package/package/cc-switch-sdk/dist/adapters/index.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/index.js +0 -28
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.js +0 -39
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.js +0 -40
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts +0 -18
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.js +0 -63
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.js +0 -86
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.js +0 -14
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-claude.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts +0 -9
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.js +0 -14
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts +0 -78
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/instance-service.js +0 -180
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Adapter 类型定义测试
|
|
3
3
|
*/
|
|
4
|
-
import { describe,
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
5
|
import { getToolActionInfo } from '../adapter/types.js';
|
|
6
6
|
describe('Adapter Types', () => {
|
|
7
7
|
it('should define valid SessionStatus values', () => {
|
|
@@ -172,9 +172,9 @@ describe('Adapter Types', () => {
|
|
|
172
172
|
actionDetail: 'aws-mcp/send_group',
|
|
173
173
|
});
|
|
174
174
|
expect(getToolActionInfo('poll_message', {})).toEqual({
|
|
175
|
-
actionType: '
|
|
176
|
-
actionLabel: '
|
|
177
|
-
actionDetail: '
|
|
175
|
+
actionType: 'mcp',
|
|
176
|
+
actionLabel: '调用MCP',
|
|
177
|
+
actionDetail: 'aws-mcp/poll_message',
|
|
178
178
|
});
|
|
179
179
|
});
|
|
180
180
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,CAAC;AAIZ,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,OAAO,CAAC;AAIZ;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,KAAK,GACL,MAAM,GACN,WAAW,GACX,YAAY,GACZ,WAAW,GACX,MAAM,GACN,QAAQ,GACR,KAAK,GACL,KAAK,GACL,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA6BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,CAAC,EAAE,YAAY,GACtB,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/types.js
CHANGED
|
@@ -78,13 +78,6 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
|
|
|
78
78
|
// 调试日志:记录工具名
|
|
79
79
|
console.log(`[getToolActionInfo] toolName="${toolName}", name="${name}"`);
|
|
80
80
|
const loadSkills = normalizeSkillList(toolInput?.load_skills);
|
|
81
|
-
if (matchesToolName('poll_message')) {
|
|
82
|
-
return {
|
|
83
|
-
actionType: 'idle',
|
|
84
|
-
actionLabel: '空闲等待消息',
|
|
85
|
-
actionDetail: 'Agent 正在等待新消息',
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
81
|
if ((name === 'task' || name === 'task()') && loadSkills.length > 0) {
|
|
89
82
|
return {
|
|
90
83
|
actionType: 'skill',
|
|
@@ -1,59 +1,11 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
2
|
import { getToolActionInfo } from './types.js';
|
|
3
3
|
describe('getToolActionInfo', () => {
|
|
4
|
-
it('
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
it('reports poll_message as a normal MCP tool call', () => {
|
|
5
|
+
expect(getToolActionInfo('poll_message')).toEqual({
|
|
6
|
+
actionType: 'mcp',
|
|
7
|
+
actionLabel: '调用MCP',
|
|
8
|
+
actionDetail: 'aws-mcp/poll_message',
|
|
7
9
|
});
|
|
8
|
-
expect(info).toEqual({
|
|
9
|
-
actionType: 'skill',
|
|
10
|
-
actionLabel: '调用Skill',
|
|
11
|
-
actionDetail: 'frontend-design'
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
it('classifies slashcommand skill invocations as skill actions', () => {
|
|
15
|
-
const info = getToolActionInfo('slashcommand', {
|
|
16
|
-
command: 'frontend-design',
|
|
17
|
-
user_message: 'build a polished page'
|
|
18
|
-
});
|
|
19
|
-
expect(info).toEqual({
|
|
20
|
-
actionType: 'skill',
|
|
21
|
-
actionLabel: '调用Skill',
|
|
22
|
-
actionDetail: 'frontend-design'
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('classifies camelCase loadSkills invocations as skill actions', () => {
|
|
26
|
-
const info = getToolActionInfo('loadSkills', {
|
|
27
|
-
skills: ['brainstorming', 'writing-plans']
|
|
28
|
-
});
|
|
29
|
-
expect(info).toEqual({
|
|
30
|
-
actionType: 'skill',
|
|
31
|
-
actionLabel: '调用Skill',
|
|
32
|
-
actionDetail: 'brainstorming, writing-plans'
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it('classifies explicit skill loading as skill actions', () => {
|
|
36
|
-
const info = getToolActionInfo('load_skills', {
|
|
37
|
-
skills: ['brainstorming', 'writing-plans']
|
|
38
|
-
});
|
|
39
|
-
expect(info).toEqual({
|
|
40
|
-
actionType: 'skill',
|
|
41
|
-
actionLabel: '调用Skill',
|
|
42
|
-
actionDetail: 'brainstorming, writing-plans'
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('keeps mcp tools classified as mcp actions', () => {
|
|
46
|
-
const info = getToolActionInfo('mcp__aws__send_private', {
|
|
47
|
-
targetId: 'agent-1'
|
|
48
|
-
});
|
|
49
|
-
expect(info.actionType).toBe('mcp');
|
|
50
|
-
expect(info.actionLabel).toBe('调用MCP');
|
|
51
|
-
expect(info.actionDetail).toBe('aws__send_private');
|
|
52
|
-
});
|
|
53
|
-
it('does not misclassify mcp-related skill strings as skill actions', () => {
|
|
54
|
-
const info = getToolActionInfo('mcp_skill_bridge', {
|
|
55
|
-
name: 'bridge'
|
|
56
|
-
});
|
|
57
|
-
expect(info.actionType).not.toBe('skill');
|
|
58
10
|
});
|
|
59
11
|
});
|
package/dist/config.d.ts
CHANGED
|
@@ -67,7 +67,7 @@ export declare const AUTO_REGISTER_PROJECT_NAME: string;
|
|
|
67
67
|
export declare const AUTO_REGISTER_ROLE_NAME: string;
|
|
68
68
|
/** 工作空间路径 */
|
|
69
69
|
export declare const AUTO_REGISTER_WORKSPACE_PATH: string;
|
|
70
|
-
/**
|
|
70
|
+
/** 注册 IP(优先),兼容 EasyTier 虚拟 IP */
|
|
71
71
|
export declare const AUTO_REGISTER_VIRTUAL_IP: string;
|
|
72
72
|
/** 注册重试次数 */
|
|
73
73
|
export declare const AUTO_REGISTER_MAX_RETRIES: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,WAAW;AACX,eAAO,MAAM,IAAI,EAAE,MAElB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,EAAE,MACwC,CAAC;AAExE,oBAAoB;AACpB,eAAO,MAAM,8BAA8B,gCAAgC,CAAC;AAE5E,cAAc;AACd,eAAO,MAAM,OAAO,EAAE,MAA8C,CAAC;AAErE,kBAAkB;AAClB,eAAO,MAAM,YAAY,EAAE,MAC+C,CAAC;AAE3E,2BAA2B;AAC3B,eAAO,MAAM,wBAAwB,EAAE,OACiB,CAAC;AAEzD,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,EAAE,OACiB,CAAC;AAErD,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAMC,CAAC;AAEzC,uBAAuB;AACvB,wBAAgB,uBAAuB,IAAI,IAAI,CAc9C;AAED,eAAe;AACf,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,2BAA2B;AAC3B,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,0BAA0B;AAC1B,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,yBAAyB;AACzB,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,sBAAsB;AACtB,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,4BAA4B;AAC5B,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED;;GAEG;AAEH,yBAAyB;AACzB,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,EACrB,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C,eAAe;AACf,eAAO,MAAM,mBAAmB,SACiB,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,2BAA2B,QAEvC,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,uBAAuB,QAEnC,CAAC;AAEF;;GAEG;AAEH,eAAe;AACf,eAAO,MAAM,qBAAqB,SAA2C,CAAC;AAE9E,YAAY;AACZ,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAEvE,iBAAiB;AACjB,eAAO,MAAM,sBAAsB,QAAiC,CAAC;AAErE,oBAAoB;AACpB,eAAO,MAAM,2BAA2B,QAAsC,CAAC;AAE/E,WAAW;AACX,eAAO,MAAM,0BAA0B,QAAqC,CAAC;AAE7E,WAAW;AACX,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAEvE,aAAa;AACb,eAAO,MAAM,4BAA4B,QACH,CAAC;AAEvC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,WAAW;AACX,eAAO,MAAM,IAAI,EAAE,MAElB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,EAAE,MACwC,CAAC;AAExE,oBAAoB;AACpB,eAAO,MAAM,8BAA8B,gCAAgC,CAAC;AAE5E,cAAc;AACd,eAAO,MAAM,OAAO,EAAE,MAA8C,CAAC;AAErE,kBAAkB;AAClB,eAAO,MAAM,YAAY,EAAE,MAC+C,CAAC;AAE3E,2BAA2B;AAC3B,eAAO,MAAM,wBAAwB,EAAE,OACiB,CAAC;AAEzD,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,EAAE,OACiB,CAAC;AAErD,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAMC,CAAC;AAEzC,uBAAuB;AACvB,wBAAgB,uBAAuB,IAAI,IAAI,CAc9C;AAED,eAAe;AACf,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,2BAA2B;AAC3B,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,0BAA0B;AAC1B,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,yBAAyB;AACzB,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,sBAAsB;AACtB,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,4BAA4B;AAC5B,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED;;GAEG;AAEH,yBAAyB;AACzB,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,EACrB,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C,eAAe;AACf,eAAO,MAAM,mBAAmB,SACiB,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,2BAA2B,QAEvC,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,uBAAuB,QAEnC,CAAC;AAEF;;GAEG;AAEH,eAAe;AACf,eAAO,MAAM,qBAAqB,SAA2C,CAAC;AAE9E,YAAY;AACZ,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAEvE,iBAAiB;AACjB,eAAO,MAAM,sBAAsB,QAAiC,CAAC;AAErE,oBAAoB;AACpB,eAAO,MAAM,2BAA2B,QAAsC,CAAC;AAE/E,WAAW;AACX,eAAO,MAAM,0BAA0B,QAAqC,CAAC;AAE7E,WAAW;AACX,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAEvE,aAAa;AACb,eAAO,MAAM,4BAA4B,QACH,CAAC;AAEvC,kCAAkC;AAClC,eAAO,MAAM,wBAAwB,QAC4B,CAAC;AAElE,aAAa;AACb,eAAO,MAAM,yBAAyB,QAErC,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,4BAA4B,QAExC,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -104,8 +104,8 @@ export const AUTO_REGISTER_PROJECT_NAME = process.env.AWS_PROJECT_NAME || "";
|
|
|
104
104
|
export const AUTO_REGISTER_ROLE_NAME = process.env.AWS_ROLE_NAME || "";
|
|
105
105
|
/** 工作空间路径 */
|
|
106
106
|
export const AUTO_REGISTER_WORKSPACE_PATH = process.env.AWS_WORKSPACE_PATH || "";
|
|
107
|
-
/**
|
|
108
|
-
export const AUTO_REGISTER_VIRTUAL_IP = process.env.AWS_VIRTUAL_IP || "";
|
|
107
|
+
/** 注册 IP(优先),兼容 EasyTier 虚拟 IP */
|
|
108
|
+
export const AUTO_REGISTER_VIRTUAL_IP = process.env.AWS_REGISTER_IP || process.env.AWS_VIRTUAL_IP || "";
|
|
109
109
|
/** 注册重试次数 */
|
|
110
110
|
export const AUTO_REGISTER_MAX_RETRIES = Number(process.env.AWS_REGISTER_MAX_RETRIES || 5);
|
|
111
111
|
/** 注册重试间隔(毫秒) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmC/D;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAqBN"}
|
package/dist/middleware/auth.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { allowDefaultRuntimeToken, runtimeToken } from "../config.js";
|
|
7
7
|
import { hasRuntimeBinding, validateRuntimeBindingToken, } from "../services/runtime-binding.js";
|
|
8
|
+
import { getConfiguredConnectionKeys } from "../services/auto-register.js";
|
|
8
9
|
function extractRuntimeToken(req) {
|
|
9
10
|
const headerToken = req.header("X-Runtime-Token");
|
|
10
11
|
if (headerToken) {
|
|
@@ -18,6 +19,9 @@ function validateConfiguredToken(token) {
|
|
|
18
19
|
if (!token) {
|
|
19
20
|
return false;
|
|
20
21
|
}
|
|
22
|
+
if (getConfiguredConnectionKeys().includes(token)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
21
25
|
if (process.env.AWS_RUNTIME_CALLBACK_TOKEN) {
|
|
22
26
|
return token === runtimeToken;
|
|
23
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/routes/instance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/routes/instance.ts"],"names":[],"mappings":"AA0BA,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/D,IAAI,CAEN;AAED,eAAO,MAAM,cAAc,4CAAW,CAAC"}
|
package/dist/routes/instance.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { Router } from
|
|
2
|
-
import axios from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
import { createHash, timingSafeEqual } from "node:crypto";
|
|
4
|
+
import { validateToken } from "../middleware/auth.js";
|
|
5
|
+
import { schedulerBaseUrl, runtimeToken } from "../config.js";
|
|
6
|
+
import { loadInstanceState, saveInstanceState, } from "../services/instance-state.js";
|
|
7
|
+
import { initInstance } from "../services/instance-init-service.js";
|
|
8
|
+
import { detectToolStatuses, ensureToolsInstalled, SUPPORTED_INSTALLABLE_TOOLS, } from "../services/tool-installer.js";
|
|
9
|
+
import { getConfiguredConnectionKeys } from "../services/auto-register.js";
|
|
10
|
+
import { createLogger } from "../utils/logger.js";
|
|
11
|
+
const log = createLogger("instance");
|
|
10
12
|
// ★★★ 导出 gracefulShutdown 的触发函数
|
|
11
13
|
// 用于 aws-mcp-server 通知 bridge 保留会话状态关闭
|
|
12
14
|
let gracefulShutdownFn = null;
|
|
@@ -14,12 +16,52 @@ export function setGracefulShutdownFn(fn) {
|
|
|
14
16
|
gracefulShutdownFn = fn;
|
|
15
17
|
}
|
|
16
18
|
export const instanceRouter = Router();
|
|
17
|
-
|
|
19
|
+
function md5Hex(value) {
|
|
20
|
+
return createHash("md5").update(value, "utf8").digest("hex");
|
|
21
|
+
}
|
|
22
|
+
function hasMatchingConnectionKeyDigest(connectionKeyMd5) {
|
|
23
|
+
const provided = connectionKeyMd5.trim().toLowerCase();
|
|
24
|
+
if (!/^[a-f0-9]{32}$/.test(provided)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const providedBuffer = Buffer.from(provided, "hex");
|
|
28
|
+
return getConfiguredConnectionKeys()
|
|
29
|
+
.map((key) => key.trim())
|
|
30
|
+
.filter(Boolean)
|
|
31
|
+
.some((key) => {
|
|
32
|
+
const configuredBuffer = Buffer.from(md5Hex(key), "hex");
|
|
33
|
+
return (configuredBuffer.length === providedBuffer.length &&
|
|
34
|
+
timingSafeEqual(configuredBuffer, providedBuffer));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
instanceRouter.get("/healthz", (_req, res) => {
|
|
38
|
+
res.json({
|
|
39
|
+
ok: true,
|
|
40
|
+
runtimeBridge: "healthy",
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
instanceRouter.get("/connection-check", (req, res) => {
|
|
44
|
+
const connectionKeyMd5 = String(req.header("X-Bridge-Connection-Key-MD5") || "");
|
|
45
|
+
if (hasMatchingConnectionKeyDigest(connectionKeyMd5)) {
|
|
46
|
+
res.json({
|
|
47
|
+
ok: true,
|
|
48
|
+
runtimeBridge: "healthy",
|
|
49
|
+
connectionKeyMatched: true,
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
res.status(401).json({
|
|
54
|
+
ok: false,
|
|
55
|
+
error: "connection_key_mismatch",
|
|
56
|
+
connectionKeyMatched: false,
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
instanceRouter.get("/ping", validateToken, async (_req, res) => {
|
|
18
60
|
try {
|
|
19
|
-
const schedulerResponse = await axios.get(`${schedulerBaseUrl}/api/runtime/ping`, { headers: {
|
|
61
|
+
const schedulerResponse = await axios.get(`${schedulerBaseUrl}/api/runtime/ping`, { headers: { "X-Runtime-Token": runtimeToken } });
|
|
20
62
|
res.json({
|
|
21
63
|
ok: true,
|
|
22
|
-
runtimeBridge:
|
|
64
|
+
runtimeBridge: "healthy",
|
|
23
65
|
schedulerReachable: schedulerResponse.status >= 200 && schedulerResponse.status < 300,
|
|
24
66
|
schedulerBaseUrl,
|
|
25
67
|
});
|
|
@@ -28,15 +70,15 @@ instanceRouter.get('/ping', validateToken, async (_req, res) => {
|
|
|
28
70
|
const err = error;
|
|
29
71
|
res.status(502).json({
|
|
30
72
|
ok: false,
|
|
31
|
-
error: err?.message ||
|
|
73
|
+
error: err?.message || "scheduler ping failed",
|
|
32
74
|
schedulerBaseUrl,
|
|
33
75
|
});
|
|
34
76
|
}
|
|
35
77
|
});
|
|
36
|
-
instanceRouter.post(
|
|
78
|
+
instanceRouter.post("/init-instance", validateToken, async (req, res) => {
|
|
37
79
|
const { agentId, workspacePath, skillEnabled, mcpEnabled, ccSwitchEnabledTools, skillPackage, skillPackages, mcpServers, } = req.body || {};
|
|
38
80
|
if (!agentId || !workspacePath) {
|
|
39
|
-
res.status(400).json({ error:
|
|
81
|
+
res.status(400).json({ error: "agentId and workspacePath are required" });
|
|
40
82
|
return;
|
|
41
83
|
}
|
|
42
84
|
try {
|
|
@@ -53,39 +95,51 @@ instanceRouter.post('/init-instance', validateToken, async (req, res) => {
|
|
|
53
95
|
catch (error) {
|
|
54
96
|
const err = error;
|
|
55
97
|
res.status(400).json({
|
|
56
|
-
error: err?.message ||
|
|
98
|
+
error: err?.message || "initialize instance failed",
|
|
57
99
|
});
|
|
58
100
|
}
|
|
59
101
|
});
|
|
60
|
-
instanceRouter.post(
|
|
102
|
+
instanceRouter.post("/cc-switch/state", validateToken, async (req, res) => {
|
|
61
103
|
const { agentId } = req.body || {};
|
|
62
104
|
if (!agentId) {
|
|
63
|
-
res.status(400).json({ error:
|
|
105
|
+
res.status(400).json({ error: "agentId is required" });
|
|
64
106
|
return;
|
|
65
107
|
}
|
|
66
108
|
try {
|
|
67
109
|
const state = await loadInstanceState(agentId);
|
|
68
110
|
const toolStatus = await detectToolStatuses(state.enabledTools || []);
|
|
69
|
-
res.json({
|
|
111
|
+
res.json({
|
|
112
|
+
ok: true,
|
|
113
|
+
agentId: String(agentId),
|
|
114
|
+
state: { ...state, toolStatus },
|
|
115
|
+
});
|
|
70
116
|
}
|
|
71
117
|
catch (error) {
|
|
72
118
|
const err = error;
|
|
73
|
-
res.status(400).json({ error: err?.message ||
|
|
119
|
+
res.status(400).json({ error: err?.message || "load state failed" });
|
|
74
120
|
}
|
|
75
121
|
});
|
|
76
|
-
instanceRouter.post(
|
|
122
|
+
instanceRouter.post("/cc-switch/install-tools", validateToken, async (req, res) => {
|
|
77
123
|
const { agentId, tools } = req.body || {};
|
|
78
124
|
if (!agentId) {
|
|
79
|
-
res.status(400).json({ error:
|
|
125
|
+
res.status(400).json({ error: "agentId is required" });
|
|
80
126
|
return;
|
|
81
127
|
}
|
|
82
128
|
const requestedTools = Array.isArray(tools)
|
|
83
|
-
? tools
|
|
129
|
+
? tools
|
|
130
|
+
.map((tool) => String(tool || "")
|
|
131
|
+
.trim()
|
|
132
|
+
.toLowerCase())
|
|
133
|
+
.filter(Boolean)
|
|
84
134
|
: [];
|
|
85
135
|
const supportedInstallableTools = new Set(SUPPORTED_INSTALLABLE_TOOLS);
|
|
86
136
|
const installableTools = requestedTools.filter((tool) => supportedInstallableTools.has(tool));
|
|
87
137
|
if (installableTools.length === 0) {
|
|
88
|
-
res
|
|
138
|
+
res
|
|
139
|
+
.status(400)
|
|
140
|
+
.json({
|
|
141
|
+
error: `tools must include ${SUPPORTED_INSTALLABLE_TOOLS.join(", ")}`,
|
|
142
|
+
});
|
|
89
143
|
return;
|
|
90
144
|
}
|
|
91
145
|
try {
|
|
@@ -111,7 +165,7 @@ instanceRouter.post('/cc-switch/install-tools', validateToken, async (req, res)
|
|
|
111
165
|
}
|
|
112
166
|
catch (error) {
|
|
113
167
|
const err = error;
|
|
114
|
-
res.status(400).json({ error: err?.message ||
|
|
168
|
+
res.status(400).json({ error: err?.message || "install tools failed" });
|
|
115
169
|
}
|
|
116
170
|
});
|
|
117
171
|
/**
|
|
@@ -126,22 +180,22 @@ instanceRouter.post('/cc-switch/install-tools', validateToken, async (req, res)
|
|
|
126
180
|
* - preserveSessions: true = 保留会话(aws-mcp-server 重启)
|
|
127
181
|
* false = 清理会话(bridge 自己关闭)
|
|
128
182
|
*/
|
|
129
|
-
instanceRouter.post(
|
|
183
|
+
instanceRouter.post("/prepare-restart", validateToken, async (req, res) => {
|
|
130
184
|
const { preserveSessions = true } = req.body || {};
|
|
131
185
|
try {
|
|
132
186
|
log.info(`[prepare-restart] 收到准备重启通知,preserveSessions=${preserveSessions}`);
|
|
133
187
|
// 记录重启模式到文件,供下次启动时判断
|
|
134
|
-
const fs = await import(
|
|
135
|
-
const path = await import(
|
|
136
|
-
const os = await import(
|
|
137
|
-
const restartFlagFile = path.join(os.tmpdir(),
|
|
188
|
+
const fs = await import("fs/promises");
|
|
189
|
+
const path = await import("path");
|
|
190
|
+
const os = await import("os");
|
|
191
|
+
const restartFlagFile = path.join(os.tmpdir(), "agentswork-runtime-bridge", ".preserve-sessions");
|
|
138
192
|
if (preserveSessions) {
|
|
139
193
|
// 创建标记文件,表示 aws-mcp-server 重启,需要保留会话
|
|
140
194
|
await fs.mkdir(path.dirname(restartFlagFile), { recursive: true });
|
|
141
195
|
await fs.writeFile(restartFlagFile, JSON.stringify({
|
|
142
196
|
preserveSessions: true,
|
|
143
197
|
timestamp: new Date().toISOString(),
|
|
144
|
-
}),
|
|
198
|
+
}), "utf-8");
|
|
145
199
|
log.info(`[prepare-restart] 已创建保留会话标记文件: ${restartFlagFile}`);
|
|
146
200
|
}
|
|
147
201
|
else {
|
|
@@ -158,13 +212,13 @@ instanceRouter.post('/prepare-restart', validateToken, async (req, res) => {
|
|
|
158
212
|
ok: true,
|
|
159
213
|
preserveSessions,
|
|
160
214
|
message: preserveSessions
|
|
161
|
-
?
|
|
162
|
-
:
|
|
215
|
+
? "Bridge will preserve sessions for aws-mcp-server restart"
|
|
216
|
+
: "Bridge will clean up sessions on shutdown",
|
|
163
217
|
});
|
|
164
218
|
}
|
|
165
219
|
catch (error) {
|
|
166
220
|
const err = error;
|
|
167
|
-
log.error(
|
|
221
|
+
log.error("[prepare-restart] Error:", err);
|
|
168
222
|
res.status(500).json({ error: err.message });
|
|
169
223
|
}
|
|
170
224
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-binding.d.ts","sourceRoot":"","sources":["../../src/routes/runtime-binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-binding.d.ts","sourceRoot":"","sources":["../../src/routes/runtime-binding.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,oBAAoB,4CAAW,CAAC;AAqO7C,wBAAgB,6BAA6B,IAAI,IAAI,CAapD"}
|
|
@@ -3,6 +3,7 @@ import { clearRuntimeBinding, getRuntimeAccessToken, getRuntimeBindingPublicStat
|
|
|
3
3
|
import { validateToken } from "../middleware/auth.js";
|
|
4
4
|
import { runtimeToken } from "../config.js";
|
|
5
5
|
import { requestRuntimeAccessTokenRefresh } from "../services/auto-register.js";
|
|
6
|
+
import { claimMcpLaunchBinding, getMcpLaunchQueueSize } from "../services/mcp-launch-binding-queue.js";
|
|
6
7
|
import { createLogger } from "../utils/logger.js";
|
|
7
8
|
const log = createLogger("runtime-binding-route");
|
|
8
9
|
export const runtimeBindingRouter = Router();
|
|
@@ -24,7 +25,7 @@ runtimeBindingRouter.get("/binding/status", (_req, res) => {
|
|
|
24
25
|
});
|
|
25
26
|
});
|
|
26
27
|
runtimeBindingRouter.post("/binding/pair", (req, res) => {
|
|
27
|
-
const { accessToken, instanceId, schedulerBaseUrl, pairingCode } = req.body || {};
|
|
28
|
+
const { accessToken, instanceId, userId, schedulerBaseUrl, pairingCode } = req.body || {};
|
|
28
29
|
const existingBinding = hasRuntimeBinding();
|
|
29
30
|
const currentRuntimeToken = extractRuntimeToken(req);
|
|
30
31
|
if (existingBinding) {
|
|
@@ -48,6 +49,7 @@ runtimeBindingRouter.post("/binding/pair", (req, res) => {
|
|
|
48
49
|
saveRuntimeBinding({
|
|
49
50
|
accessToken: String(accessToken || ""),
|
|
50
51
|
instanceId: instanceId ? String(instanceId) : undefined,
|
|
52
|
+
userId: userId ? String(userId) : undefined,
|
|
51
53
|
schedulerBaseUrl: schedulerBaseUrl ? String(schedulerBaseUrl) : undefined,
|
|
52
54
|
});
|
|
53
55
|
log.info(`[runtime-bridge] paired with instanceId=${instanceId || "unknown"}`);
|
|
@@ -72,6 +74,16 @@ runtimeBindingRouter.post("/binding/request-token", async (req, res) => {
|
|
|
72
74
|
res.status(403).json({ ok: false, error: "loopback request required" });
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
77
|
+
const { userId, serverUrl, schedulerBaseUrl } = req.body || {};
|
|
78
|
+
const scopedToken = getRuntimeAccessToken(userId, serverUrl || schedulerBaseUrl);
|
|
79
|
+
if (scopedToken) {
|
|
80
|
+
res.json({
|
|
81
|
+
ok: true,
|
|
82
|
+
runtimeAccessToken: scopedToken,
|
|
83
|
+
updated: false,
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
75
87
|
const result = await requestRuntimeAccessTokenRefresh();
|
|
76
88
|
if (!result.success || !result.runtimeAccessToken) {
|
|
77
89
|
res.status(400).json({
|
|
@@ -86,6 +98,50 @@ runtimeBindingRouter.post("/binding/request-token", async (req, res) => {
|
|
|
86
98
|
updated: result.updated,
|
|
87
99
|
});
|
|
88
100
|
});
|
|
101
|
+
runtimeBindingRouter.post("/binding/claim-agent", (req, res) => {
|
|
102
|
+
if (!isLoopbackRequest(req)) {
|
|
103
|
+
res.status(403).json({ ok: false, error: "loopback request required" });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const { agentId, bindingId, workspacePath, serverUrl } = req.body || {};
|
|
107
|
+
if (!agentId || !String(agentId).trim()) {
|
|
108
|
+
res.status(400).json({ ok: false, error: "agentId is required" });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (!bindingId || !String(bindingId).trim()) {
|
|
112
|
+
res.status(400).json({ ok: false, error: "bindingId is required" });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!workspacePath || !String(workspacePath).trim()) {
|
|
116
|
+
res.status(400).json({ ok: false, error: "workspacePath is required" });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (!serverUrl || !String(serverUrl).trim()) {
|
|
120
|
+
res.status(400).json({ ok: false, error: "serverUrl is required" });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const claimed = claimMcpLaunchBinding({ agentId, bindingId, workspacePath, serverUrl });
|
|
124
|
+
if (!claimed) {
|
|
125
|
+
res.status(404).json({
|
|
126
|
+
ok: false,
|
|
127
|
+
error: "launch binding not found",
|
|
128
|
+
queueSize: getMcpLaunchQueueSize(workspacePath),
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
res.json({
|
|
133
|
+
ok: true,
|
|
134
|
+
agentId: claimed.agentId,
|
|
135
|
+
workspacePath: claimed.workspacePath,
|
|
136
|
+
runtimeAccessToken: claimed.runtimeAccessToken,
|
|
137
|
+
userId: claimed.userId,
|
|
138
|
+
schedulerBaseUrl: claimed.schedulerBaseUrl,
|
|
139
|
+
serverUrl: claimed.serverUrl,
|
|
140
|
+
mcpHttpUrl: claimed.mcpHttpUrl,
|
|
141
|
+
bindingId: claimed.id,
|
|
142
|
+
remainingQueueSize: getMcpLaunchQueueSize(workspacePath),
|
|
143
|
+
});
|
|
144
|
+
});
|
|
89
145
|
runtimeBindingRouter.post("/binding/issue", (req, res) => {
|
|
90
146
|
const currentRuntimeToken = extractRuntimeToken(req);
|
|
91
147
|
const authorizedByScheduler = currentRuntimeToken === runtimeToken;
|
|
@@ -94,7 +150,7 @@ runtimeBindingRouter.post("/binding/issue", (req, res) => {
|
|
|
94
150
|
res.status(401).json({ error: "unauthorized" });
|
|
95
151
|
return;
|
|
96
152
|
}
|
|
97
|
-
const { accessToken, instanceId, schedulerBaseUrl } = req.body || {};
|
|
153
|
+
const { accessToken, instanceId, userId, schedulerBaseUrl } = req.body || {};
|
|
98
154
|
const nextToken = String(accessToken || "").trim();
|
|
99
155
|
if (!nextToken) {
|
|
100
156
|
res.status(400).json({ error: "accessToken is required" });
|
|
@@ -107,6 +163,7 @@ runtimeBindingRouter.post("/binding/issue", (req, res) => {
|
|
|
107
163
|
saveRuntimeBinding({
|
|
108
164
|
accessToken: nextToken,
|
|
109
165
|
instanceId: instanceId ? String(instanceId) : undefined,
|
|
166
|
+
userId: userId ? String(userId) : undefined,
|
|
110
167
|
schedulerBaseUrl: schedulerBaseUrl
|
|
111
168
|
? String(schedulerBaseUrl)
|
|
112
169
|
: undefined,
|
package/dist/routes/sessions.js
CHANGED
|
@@ -721,7 +721,7 @@ sessionsRouter.post('/terminate-tree', validateToken, async (req, res) => {
|
|
|
721
721
|
}
|
|
722
722
|
const result = terminateProcessTree(pid);
|
|
723
723
|
// 4. 等待进程完全终止(最多 5 秒)
|
|
724
|
-
const exited = waitForProcessExit(pid, 5000);
|
|
724
|
+
const exited = await waitForProcessExit(pid, 5000);
|
|
725
725
|
// 5. 清理持久化状�?
|
|
726
726
|
await import('../services/terminal-persistence.js').then(m => m.removePersistedSession(targetSessionId));
|
|
727
727
|
log.info(`[terminate-tree] Terminated process tree for agentId=${agentId}, pid=${pid}, mode=${mode}, terminated=${result.terminated}, failed=${result.failed}, exited=${exited}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAEL,KAAK,oBAAoB,EAM1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAEL,KAAK,oBAAoB,EAM1B,MAAM,qBAAqB,CAAC;AAc7B,eAAO,MAAM,cAAc,4CAAW,CAAC;AAIvC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,eAAO,MAAM,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAa,CAAC;AAEnE,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|