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,10 +0,0 @@
|
|
|
1
|
-
import type { IMcpAdapter, McpServer } from "../types.js";
|
|
2
|
-
export declare class ClaudecodeMcpAdapter implements IMcpAdapter {
|
|
3
|
-
private readonly configPath;
|
|
4
|
-
readonly appId: "claudecode";
|
|
5
|
-
constructor(configPath: string);
|
|
6
|
-
importServers(): Promise<McpServer[]>;
|
|
7
|
-
syncServer(server: McpServer): Promise<void>;
|
|
8
|
-
removeServer(server: McpServer): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=mcp-claudecode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-claudecode.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-claudecode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM1D,qBAAa,oBAAqB,YAAW,WAAW;IAG1C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,SAAgB,KAAK,EAAG,YAAY,CAAU;gBAEjB,UAAU,EAAE,MAAM;IAEzC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBrC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CASrD"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { createId } from "../utils/id.js";
|
|
2
|
-
import { readJsonFile, writeJsonFile } from "../utils/fs.js";
|
|
3
|
-
import { toMcpSpecFromClaudecode, toClaudecodeServer } from "./common.js";
|
|
4
|
-
export class ClaudecodeMcpAdapter {
|
|
5
|
-
constructor(configPath) {
|
|
6
|
-
this.configPath = configPath;
|
|
7
|
-
this.appId = "claudecode";
|
|
8
|
-
}
|
|
9
|
-
async importServers() {
|
|
10
|
-
const config = await readJsonFile(this.configPath, {});
|
|
11
|
-
const entries = Object.entries(config.mcpServers ?? {});
|
|
12
|
-
return entries.map(([name, server]) => ({
|
|
13
|
-
id: createId("mcp"),
|
|
14
|
-
name,
|
|
15
|
-
server: toMcpSpecFromClaudecode(server),
|
|
16
|
-
apps: {
|
|
17
|
-
claude: false,
|
|
18
|
-
claudecode: true,
|
|
19
|
-
codex: false,
|
|
20
|
-
gemini: false,
|
|
21
|
-
opencode: false,
|
|
22
|
-
openclaw: false,
|
|
23
|
-
},
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
async syncServer(server) {
|
|
27
|
-
const config = await readJsonFile(this.configPath, {});
|
|
28
|
-
config.mcpServers = config.mcpServers ?? {};
|
|
29
|
-
config.mcpServers[server.name] = toClaudecodeServer(server.server);
|
|
30
|
-
await writeJsonFile(this.configPath, config);
|
|
31
|
-
}
|
|
32
|
-
async removeServer(server) {
|
|
33
|
-
const config = await readJsonFile(this.configPath, {});
|
|
34
|
-
if (!config.mcpServers) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
delete config.mcpServers[server.name];
|
|
38
|
-
await writeJsonFile(this.configPath, config);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { IMcpAdapter, McpServer } from "../types.js";
|
|
2
|
-
export declare class OpenCodeMcpAdapter implements IMcpAdapter {
|
|
3
|
-
private readonly configPath;
|
|
4
|
-
readonly appId: "opencode";
|
|
5
|
-
constructor(configPath: string);
|
|
6
|
-
/**
|
|
7
|
-
* 读取 OpenCode MCP 映射,优先使用合法的 mcp 字段,兼容历史错误写入的 mcpServers。
|
|
8
|
-
*/
|
|
9
|
-
private getMcpMap;
|
|
10
|
-
/**
|
|
11
|
-
* 将 MCP 服务器写回 OpenCode 配置,只保留合法的 mcp 字段并清理错误的 mcpServers。
|
|
12
|
-
*/
|
|
13
|
-
private saveMcpMap;
|
|
14
|
-
importServers(): Promise<McpServer[]>;
|
|
15
|
-
syncServer(server: McpServer): Promise<void>;
|
|
16
|
-
removeServer(server: McpServer): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=mcp-opencode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-opencode.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM1D,qBAAa,kBAAmB,YAAW,WAAW;IAGxC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,SAAgB,KAAK,EAAG,UAAU,CAAU;gBAEf,UAAU,EAAE,MAAM;IAE/C;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;YACW,UAAU;IAQlB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBrC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAUrD"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { createId } from "../utils/id.js";
|
|
2
|
-
import { readJsonFile, writeJsonFile } from "../utils/fs.js";
|
|
3
|
-
import { toMcpSpecFromOpenCode, toOpenCodeServer } from "./common.js";
|
|
4
|
-
export class OpenCodeMcpAdapter {
|
|
5
|
-
constructor(configPath) {
|
|
6
|
-
this.configPath = configPath;
|
|
7
|
-
this.appId = "opencode";
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 读取 OpenCode MCP 映射,优先使用合法的 mcp 字段,兼容历史错误写入的 mcpServers。
|
|
11
|
-
*/
|
|
12
|
-
getMcpMap(config) {
|
|
13
|
-
if (config.mcp && typeof config.mcp === "object") {
|
|
14
|
-
return config.mcp;
|
|
15
|
-
}
|
|
16
|
-
if (config.mcpServers && typeof config.mcpServers === "object") {
|
|
17
|
-
return config.mcpServers;
|
|
18
|
-
}
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 将 MCP 服务器写回 OpenCode 配置,只保留合法的 mcp 字段并清理错误的 mcpServers。
|
|
23
|
-
*/
|
|
24
|
-
async saveMcpMap(config, mcp) {
|
|
25
|
-
config.mcp = mcp;
|
|
26
|
-
if ("mcpServers" in config) {
|
|
27
|
-
delete config.mcpServers;
|
|
28
|
-
}
|
|
29
|
-
await writeJsonFile(this.configPath, config);
|
|
30
|
-
}
|
|
31
|
-
async importServers() {
|
|
32
|
-
const config = await readJsonFile(this.configPath, {});
|
|
33
|
-
const entries = Object.entries(this.getMcpMap(config));
|
|
34
|
-
return entries.map(([name, server]) => ({
|
|
35
|
-
id: createId("mcp"),
|
|
36
|
-
name,
|
|
37
|
-
server: toMcpSpecFromOpenCode(server),
|
|
38
|
-
apps: {
|
|
39
|
-
claude: false,
|
|
40
|
-
claudecode: false,
|
|
41
|
-
codex: false,
|
|
42
|
-
gemini: false,
|
|
43
|
-
opencode: true,
|
|
44
|
-
openclaw: false,
|
|
45
|
-
},
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
async syncServer(server) {
|
|
49
|
-
const config = await readJsonFile(this.configPath, {});
|
|
50
|
-
const mcp = this.getMcpMap(config);
|
|
51
|
-
mcp[server.name] = toOpenCodeServer(server.server);
|
|
52
|
-
await this.saveMcpMap(config, mcp);
|
|
53
|
-
}
|
|
54
|
-
async removeServer(server) {
|
|
55
|
-
const config = await readJsonFile(this.configPath, {});
|
|
56
|
-
const mcp = this.getMcpMap(config);
|
|
57
|
-
if (!mcp[server.name]) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
delete mcp[server.name];
|
|
61
|
-
await this.saveMcpMap(config, mcp);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-opencode.test.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-opencode.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { promises as fs } from "node:fs";
|
|
6
|
-
import { OpenCodeMcpAdapter } from "./mcp-opencode.js";
|
|
7
|
-
/**
|
|
8
|
-
* 创建隔离测试目录,避免污染真实用户配置。
|
|
9
|
-
*/
|
|
10
|
-
async function createTempConfigPath() {
|
|
11
|
-
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-mcp-adapter-"));
|
|
12
|
-
return path.join(tempDir, "opencode.json");
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* 读取测试配置文件内容,便于断言 OpenCode 实际写盘结构。
|
|
16
|
-
*/
|
|
17
|
-
async function readConfig(filePath) {
|
|
18
|
-
const content = await fs.readFile(filePath, "utf-8");
|
|
19
|
-
return JSON.parse(content);
|
|
20
|
-
}
|
|
21
|
-
function buildServer(name) {
|
|
22
|
-
return {
|
|
23
|
-
id: `mcp-${name}`,
|
|
24
|
-
name,
|
|
25
|
-
server: {
|
|
26
|
-
type: "stdio",
|
|
27
|
-
command: "node",
|
|
28
|
-
args: ["server.js"],
|
|
29
|
-
env: { DEMO: "1" },
|
|
30
|
-
},
|
|
31
|
-
apps: {
|
|
32
|
-
claude: false,
|
|
33
|
-
claudecode: false,
|
|
34
|
-
codex: false,
|
|
35
|
-
gemini: false,
|
|
36
|
-
opencode: true,
|
|
37
|
-
openclaw: false,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
describe("OpenCodeMcpAdapter", () => {
|
|
42
|
-
it("writes OpenCode MCP servers to the mcp key and removes legacy mcpServers", async () => {
|
|
43
|
-
const configPath = await createTempConfigPath();
|
|
44
|
-
await fs.writeFile(configPath, JSON.stringify({
|
|
45
|
-
$schema: "https://opencode.ai/config.json",
|
|
46
|
-
mcpServers: {
|
|
47
|
-
legacy: {
|
|
48
|
-
type: "local",
|
|
49
|
-
command: ["node", "legacy.js"],
|
|
50
|
-
enabled: true,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
}, null, 2), "utf-8");
|
|
54
|
-
const adapter = new OpenCodeMcpAdapter(configPath);
|
|
55
|
-
await adapter.syncServer(buildServer("aws-mcp"));
|
|
56
|
-
const saved = await readConfig(configPath);
|
|
57
|
-
assert.equal("mcpServers" in saved, false);
|
|
58
|
-
assert.ok(saved.mcp);
|
|
59
|
-
assert.deepEqual(saved.mcp["aws-mcp"], {
|
|
60
|
-
type: "local",
|
|
61
|
-
command: ["node", "server.js"],
|
|
62
|
-
environment: { DEMO: "1" },
|
|
63
|
-
enabled: true,
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
it("imports existing OpenCode MCP servers from the mcp key", async () => {
|
|
67
|
-
const configPath = await createTempConfigPath();
|
|
68
|
-
await fs.writeFile(configPath, JSON.stringify({
|
|
69
|
-
mcp: {
|
|
70
|
-
aws: {
|
|
71
|
-
type: "local",
|
|
72
|
-
command: ["node", "index.js"],
|
|
73
|
-
environment: { AWS_SERVER_URL: "ws://localhost:8080/ws/agent" },
|
|
74
|
-
enabled: true,
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
}, null, 2), "utf-8");
|
|
78
|
-
const adapter = new OpenCodeMcpAdapter(configPath);
|
|
79
|
-
const imported = await adapter.importServers();
|
|
80
|
-
assert.equal(imported.length, 1);
|
|
81
|
-
assert.equal(imported[0]?.name, "aws");
|
|
82
|
-
assert.equal(imported[0]?.server.command, "node");
|
|
83
|
-
assert.deepEqual(imported[0]?.server.args, ["index.js"]);
|
|
84
|
-
assert.deepEqual(imported[0]?.server.env, { AWS_SERVER_URL: "ws://localhost:8080/ws/agent" });
|
|
85
|
-
});
|
|
86
|
-
});
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { AppId, IMcpAdapter, McpServer } from "../types.js";
|
|
2
|
-
export declare class PlaceholderMcpAdapter implements IMcpAdapter {
|
|
3
|
-
readonly appId: AppId;
|
|
4
|
-
constructor(appId: AppId);
|
|
5
|
-
importServers(): Promise<McpServer[]>;
|
|
6
|
-
syncServer(): Promise<void>;
|
|
7
|
-
removeServer(): Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=mcp-placeholder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-placeholder.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjE,qBAAa,qBAAsB,YAAW,WAAW;aAC3B,KAAK,EAAE,KAAK;gBAAZ,KAAK,EAAE,KAAK;IAElC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ISkillAdapter, InstalledSkill, SkillSyncMethod } from "../types.js";
|
|
2
|
-
export declare class ClaudeSkillAdapter implements ISkillAdapter {
|
|
3
|
-
private readonly skillsDir;
|
|
4
|
-
readonly appId: "claude";
|
|
5
|
-
constructor(skillsDir: string);
|
|
6
|
-
importSkills(): Promise<Array<Pick<InstalledSkill, "id" | "name" | "directory" | "description">>>;
|
|
7
|
-
syncSkill(skill: InstalledSkill, sourceDir: string, method: SkillSyncMethod): Promise<void>;
|
|
8
|
-
removeSkill(skill: InstalledSkill): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=skill-claude.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-claude.d.ts","sourceRoot":"","sources":["../../src/adapters/skill-claude.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA6BlF,qBAAa,kBAAmB,YAAW,aAAa;IAG1C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,SAAgB,KAAK,EAAG,QAAQ,CAAU;gBAEb,SAAS,EAAE,MAAM;IAExC,YAAY,IAAI,OAAO,CAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,CACzE;IAgBK,SAAS,CACb,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxD"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { removeIfExists, copyDir, ensureDir } from "../utils/fs.js";
|
|
4
|
-
import { toNameFromPath } from "../utils/id.js";
|
|
5
|
-
async function materializeSkillDir(sourceDir, targetDir, method) {
|
|
6
|
-
await removeIfExists(targetDir);
|
|
7
|
-
await ensureDir(path.dirname(targetDir));
|
|
8
|
-
if (method === "copy") {
|
|
9
|
-
await copyDir(sourceDir, targetDir);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
if (method === "symlink") {
|
|
13
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
await copyDir(sourceDir, targetDir);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class ClaudeSkillAdapter {
|
|
24
|
-
constructor(skillsDir) {
|
|
25
|
-
this.skillsDir = skillsDir;
|
|
26
|
-
this.appId = "claude";
|
|
27
|
-
}
|
|
28
|
-
async importSkills() {
|
|
29
|
-
await ensureDir(this.skillsDir);
|
|
30
|
-
const entries = await fs.readdir(this.skillsDir, { withFileTypes: true });
|
|
31
|
-
return entries
|
|
32
|
-
.filter((entry) => entry.isDirectory() || entry.isSymbolicLink())
|
|
33
|
-
.map((entry) => {
|
|
34
|
-
const directory = path.join(this.skillsDir, entry.name);
|
|
35
|
-
return {
|
|
36
|
-
id: `skill_import_${entry.name}`,
|
|
37
|
-
name: toNameFromPath(entry.name),
|
|
38
|
-
directory,
|
|
39
|
-
description: undefined,
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
async syncSkill(skill, sourceDir, method) {
|
|
44
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
45
|
-
await materializeSkillDir(sourceDir, targetDir, method);
|
|
46
|
-
}
|
|
47
|
-
async removeSkill(skill) {
|
|
48
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
49
|
-
await removeIfExists(targetDir);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ISkillAdapter, InstalledSkill, SkillSyncMethod } from "../types.js";
|
|
2
|
-
export declare class ClaudecodeSkillAdapter implements ISkillAdapter {
|
|
3
|
-
private readonly skillsDir;
|
|
4
|
-
readonly appId: "claudecode";
|
|
5
|
-
constructor(skillsDir: string);
|
|
6
|
-
importSkills(): Promise<Array<Pick<InstalledSkill, "id" | "name" | "directory" | "description">>>;
|
|
7
|
-
syncSkill(skill: InstalledSkill, sourceDir: string, method: SkillSyncMethod): Promise<void>;
|
|
8
|
-
removeSkill(skill: InstalledSkill): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=skill-claudecode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-claudecode.d.ts","sourceRoot":"","sources":["../../src/adapters/skill-claudecode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA6BlF,qBAAa,sBAAuB,YAAW,aAAa;IAG9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,SAAgB,KAAK,EAAG,YAAY,CAAU;gBAEjB,SAAS,EAAE,MAAM;IAExC,YAAY,IAAI,OAAO,CAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,CACzE;IAgBK,SAAS,CACb,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxD"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { removeIfExists, copyDir, ensureDir } from "../utils/fs.js";
|
|
4
|
-
import { toNameFromPath } from "../utils/id.js";
|
|
5
|
-
async function materializeSkillDir(sourceDir, targetDir, method) {
|
|
6
|
-
await removeIfExists(targetDir);
|
|
7
|
-
await ensureDir(path.dirname(targetDir));
|
|
8
|
-
if (method === "copy") {
|
|
9
|
-
await copyDir(sourceDir, targetDir);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
if (method === "symlink") {
|
|
13
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
await copyDir(sourceDir, targetDir);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class ClaudecodeSkillAdapter {
|
|
24
|
-
constructor(skillsDir) {
|
|
25
|
-
this.skillsDir = skillsDir;
|
|
26
|
-
this.appId = "claudecode";
|
|
27
|
-
}
|
|
28
|
-
async importSkills() {
|
|
29
|
-
await ensureDir(this.skillsDir);
|
|
30
|
-
const entries = await fs.readdir(this.skillsDir, { withFileTypes: true });
|
|
31
|
-
return entries
|
|
32
|
-
.filter((entry) => entry.isDirectory() || entry.isSymbolicLink())
|
|
33
|
-
.map((entry) => {
|
|
34
|
-
const directory = path.join(this.skillsDir, entry.name);
|
|
35
|
-
return {
|
|
36
|
-
id: `skill_import_${entry.name}`,
|
|
37
|
-
name: toNameFromPath(entry.name),
|
|
38
|
-
directory,
|
|
39
|
-
description: undefined,
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
async syncSkill(skill, sourceDir, method) {
|
|
44
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
45
|
-
await materializeSkillDir(sourceDir, targetDir, method);
|
|
46
|
-
}
|
|
47
|
-
async removeSkill(skill) {
|
|
48
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
49
|
-
await removeIfExists(targetDir);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ISkillAdapter, InstalledSkill, SkillSyncMethod } from "../types.js";
|
|
2
|
-
export declare class OpenCodeSkillAdapter implements ISkillAdapter {
|
|
3
|
-
private readonly skillsDir;
|
|
4
|
-
readonly appId: "opencode";
|
|
5
|
-
constructor(skillsDir: string);
|
|
6
|
-
importSkills(): Promise<Array<Pick<InstalledSkill, "id" | "name" | "directory" | "description">>>;
|
|
7
|
-
syncSkill(skill: InstalledSkill, sourceDir: string, method: SkillSyncMethod): Promise<void>;
|
|
8
|
-
removeSkill(skill: InstalledSkill): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=skill-opencode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-opencode.d.ts","sourceRoot":"","sources":["../../src/adapters/skill-opencode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA6BlF,qBAAa,oBAAqB,YAAW,aAAa;IAG5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,SAAgB,KAAK,EAAG,UAAU,CAAU;gBAEf,SAAS,EAAE,MAAM;IAExC,YAAY,IAAI,OAAO,CAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,CACzE;IAgBK,SAAS,CACb,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxD"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { removeIfExists, copyDir, ensureDir } from "../utils/fs.js";
|
|
4
|
-
import { toNameFromPath } from "../utils/id.js";
|
|
5
|
-
async function materializeSkillDir(sourceDir, targetDir, method) {
|
|
6
|
-
await removeIfExists(targetDir);
|
|
7
|
-
await ensureDir(path.dirname(targetDir));
|
|
8
|
-
if (method === "copy") {
|
|
9
|
-
await copyDir(sourceDir, targetDir);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
if (method === "symlink") {
|
|
13
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
await fs.symlink(sourceDir, targetDir, "junction");
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
await copyDir(sourceDir, targetDir);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class OpenCodeSkillAdapter {
|
|
24
|
-
constructor(skillsDir) {
|
|
25
|
-
this.skillsDir = skillsDir;
|
|
26
|
-
this.appId = "opencode";
|
|
27
|
-
}
|
|
28
|
-
async importSkills() {
|
|
29
|
-
await ensureDir(this.skillsDir);
|
|
30
|
-
const entries = await fs.readdir(this.skillsDir, { withFileTypes: true });
|
|
31
|
-
return entries
|
|
32
|
-
.filter((entry) => entry.isDirectory() || entry.isSymbolicLink())
|
|
33
|
-
.map((entry) => {
|
|
34
|
-
const directory = path.join(this.skillsDir, entry.name);
|
|
35
|
-
return {
|
|
36
|
-
id: `skill_import_${entry.name}`,
|
|
37
|
-
name: toNameFromPath(entry.name),
|
|
38
|
-
directory,
|
|
39
|
-
description: undefined,
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
async syncSkill(skill, sourceDir, method) {
|
|
44
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
45
|
-
await materializeSkillDir(sourceDir, targetDir, method);
|
|
46
|
-
}
|
|
47
|
-
async removeSkill(skill) {
|
|
48
|
-
const targetDir = path.join(this.skillsDir, skill.name);
|
|
49
|
-
await removeIfExists(targetDir);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { AppId, ISkillAdapter, InstalledSkill, SkillSyncMethod } from "../types.js";
|
|
2
|
-
export declare class PlaceholderSkillAdapter implements ISkillAdapter {
|
|
3
|
-
readonly appId: AppId;
|
|
4
|
-
constructor(appId: AppId);
|
|
5
|
-
importSkills(): Promise<Array<Pick<InstalledSkill, "id" | "name" | "directory" | "description">>>;
|
|
6
|
-
syncSkill(_skill: InstalledSkill, _sourceDir: string, _method: SkillSyncMethod): Promise<void>;
|
|
7
|
-
removeSkill(_skill: InstalledSkill): Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=skill-placeholder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-placeholder.d.ts","sourceRoot":"","sources":["../../src/adapters/skill-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,qBAAa,uBAAwB,YAAW,aAAa;aAC/B,KAAK,EAAE,KAAK;gBAAZ,KAAK,EAAE,KAAK;IAElC,YAAY,IAAI,OAAO,CAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,CACzE;IAIK,SAAS,CACb,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC;IAIV,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import type { AppId, InstalledSkill, McpServer } from "../types.js";
|
|
2
|
-
import { CcSwitchSdk } from "../sdk.js";
|
|
3
|
-
export interface SkillPackage {
|
|
4
|
-
downloadUrl?: string;
|
|
5
|
-
fileName?: string;
|
|
6
|
-
sha256?: string;
|
|
7
|
-
skillName?: string;
|
|
8
|
-
localPath?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface McpServerInput {
|
|
11
|
-
id?: string;
|
|
12
|
-
name: string;
|
|
13
|
-
transport?: string;
|
|
14
|
-
command?: string;
|
|
15
|
-
url?: string;
|
|
16
|
-
args?: string[];
|
|
17
|
-
env?: Record<string, string>;
|
|
18
|
-
enabled?: boolean;
|
|
19
|
-
}
|
|
20
|
-
export interface InstanceOptions {
|
|
21
|
-
skillEnabled?: boolean;
|
|
22
|
-
mcpEnabled?: boolean;
|
|
23
|
-
enabledApps?: AppId[];
|
|
24
|
-
skillPackage?: SkillPackage;
|
|
25
|
-
skillPackages?: SkillPackage[];
|
|
26
|
-
mcpServers?: McpServerInput[];
|
|
27
|
-
}
|
|
28
|
-
export interface InstanceState {
|
|
29
|
-
initialized: boolean;
|
|
30
|
-
skills: InstalledSkill[];
|
|
31
|
-
mcpServers: McpServer[];
|
|
32
|
-
enabledApps: AppId[];
|
|
33
|
-
skillEnabled: boolean;
|
|
34
|
-
mcpEnabled: boolean;
|
|
35
|
-
updatedAt: string | null;
|
|
36
|
-
}
|
|
37
|
-
export interface InstanceInitResult {
|
|
38
|
-
ok: boolean;
|
|
39
|
-
instanceId: string;
|
|
40
|
-
workspacePath: string;
|
|
41
|
-
instanceRoot: string;
|
|
42
|
-
enabledApps: AppId[];
|
|
43
|
-
skill: {
|
|
44
|
-
enabled: boolean;
|
|
45
|
-
packagePresent: boolean;
|
|
46
|
-
installedCount?: number;
|
|
47
|
-
installed?: InstalledSkill[];
|
|
48
|
-
};
|
|
49
|
-
mcp: {
|
|
50
|
-
enabled: boolean;
|
|
51
|
-
installedCount?: number;
|
|
52
|
-
installed?: McpServer[];
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
export interface InstancePaths {
|
|
56
|
-
instanceRoot: string;
|
|
57
|
-
stateFile: string;
|
|
58
|
-
skillsDir: string;
|
|
59
|
-
mcpDir: string;
|
|
60
|
-
}
|
|
61
|
-
export declare class InstanceService {
|
|
62
|
-
private readonly sdk;
|
|
63
|
-
private readonly instanceRoot;
|
|
64
|
-
private readonly workspacePath;
|
|
65
|
-
constructor(sdk: CcSwitchSdk, instanceRoot: string, workspacePath: string);
|
|
66
|
-
private getPaths;
|
|
67
|
-
loadState(): Promise<InstanceState>;
|
|
68
|
-
saveState(state: InstanceState): Promise<InstanceState>;
|
|
69
|
-
private ensureInstanceRoot;
|
|
70
|
-
private toAppFlags;
|
|
71
|
-
initialize(options?: InstanceOptions): Promise<InstanceInitResult>;
|
|
72
|
-
private installSkillPackage;
|
|
73
|
-
private upsertMcpServer;
|
|
74
|
-
getState(): Promise<InstanceState>;
|
|
75
|
-
updateState(partial: Partial<InstanceState>): Promise<InstanceState>;
|
|
76
|
-
reset(): Promise<void>;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=instance-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instance-service.d.ts","sourceRoot":"","sources":["../../src/services/instance-service.ts"],"names":[],"mappings":"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"}
|