aws-runtime-bridge 1.0.3 → 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.
Files changed (142) hide show
  1. package/dist/adapter/adapter.test.js +4 -4
  2. package/dist/adapter/types.d.ts.map +1 -1
  3. package/dist/adapter/types.js +0 -7
  4. package/dist/adapter/types.test.js +5 -53
  5. package/dist/middleware/auth.d.ts.map +1 -1
  6. package/dist/middleware/auth.js +4 -0
  7. package/dist/routes/instance.d.ts.map +1 -1
  8. package/dist/routes/instance.js +36 -0
  9. package/dist/routes/runtime-binding.d.ts.map +1 -1
  10. package/dist/routes/runtime-binding.js +45 -0
  11. package/dist/routes/sessions.js +1 -1
  12. package/dist/routes/terminal.d.ts.map +1 -1
  13. package/dist/routes/terminal.js +48 -14
  14. package/dist/routes/terminal.test.js +6 -2
  15. package/dist/services/agent-process-manager.js +4 -4
  16. package/dist/services/auto-register.d.ts +9 -0
  17. package/dist/services/auto-register.d.ts.map +1 -1
  18. package/dist/services/auto-register.js +190 -32
  19. package/dist/services/aws-client-agent-mcp.test.js +3 -0
  20. package/dist/services/mcp-launch-binding-queue.d.ts +36 -0
  21. package/dist/services/mcp-launch-binding-queue.d.ts.map +1 -0
  22. package/dist/services/mcp-launch-binding-queue.js +92 -0
  23. package/dist/services/mcp-launch-binding-queue.test.d.ts +2 -0
  24. package/dist/services/mcp-launch-binding-queue.test.d.ts.map +1 -0
  25. package/dist/services/mcp-launch-binding-queue.test.js +107 -0
  26. package/dist/services/orphan-monitor.js +1 -1
  27. package/dist/services/process-detector.d.ts +1 -1
  28. package/dist/services/process-detector.d.ts.map +1 -1
  29. package/dist/services/process-detector.js +2 -11
  30. package/dist/services/process-registry.d.ts +1 -0
  31. package/dist/services/process-registry.d.ts.map +1 -1
  32. package/dist/services/process-registry.js +129 -108
  33. package/dist/services/terminal-persistence.d.ts.map +1 -1
  34. package/dist/services/terminal-persistence.js +47 -37
  35. package/dist/services/terminal-persistence.test.js +47 -1
  36. package/dist/utils/file-utils.d.ts +3 -0
  37. package/dist/utils/file-utils.d.ts.map +1 -1
  38. package/dist/utils/file-utils.js +32 -0
  39. package/package/aws-client-agent-mcp/README.md +288 -288
  40. package/package.json +76 -76
  41. package/dist/routes/aws-mcp.d.ts +0 -10
  42. package/dist/routes/aws-mcp.d.ts.map +0 -1
  43. package/dist/routes/aws-mcp.js +0 -74
  44. package/dist/routes/aws-mcp.test.d.ts +0 -2
  45. package/dist/routes/aws-mcp.test.d.ts.map +0 -1
  46. package/dist/routes/aws-mcp.test.js +0 -42
  47. package/dist/routes/memory.d.ts +0 -13
  48. package/dist/routes/memory.d.ts.map +0 -1
  49. package/dist/routes/memory.js +0 -429
  50. package/dist/services/aws-mcp-http.d.ts +0 -11
  51. package/dist/services/aws-mcp-http.d.ts.map +0 -1
  52. package/dist/services/aws-mcp-http.js +0 -225
  53. package/dist/services/aws-mcp-http.test.d.ts +0 -2
  54. package/dist/services/aws-mcp-http.test.d.ts.map +0 -1
  55. package/dist/services/aws-mcp-http.test.js +0 -27
  56. package/dist/services/easytier-manager.d.ts +0 -106
  57. package/dist/services/easytier-manager.d.ts.map +0 -1
  58. package/dist/services/easytier-manager.js +0 -331
  59. package/dist/services/easytier-manager.test.d.ts +0 -5
  60. package/dist/services/easytier-manager.test.d.ts.map +0 -1
  61. package/dist/services/easytier-manager.test.js +0 -98
  62. package/dist/services/memory-service.d.ts +0 -195
  63. package/dist/services/memory-service.d.ts.map +0 -1
  64. package/dist/services/memory-service.js +0 -650
  65. package/dist/services/session-lookup.d.ts +0 -20
  66. package/dist/services/session-lookup.d.ts.map +0 -1
  67. package/dist/services/session-lookup.js +0 -43
  68. package/dist/services/user-api-key-service.d.ts +0 -28
  69. package/dist/services/user-api-key-service.d.ts.map +0 -1
  70. package/dist/services/user-api-key-service.js +0 -75
  71. package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts +0 -38
  72. package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts.map +0 -1
  73. package/node_modules/@cc-switch/sdk/dist/adapters/common.js +0 -47
  74. package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts +0 -5
  75. package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts.map +0 -1
  76. package/node_modules/@cc-switch/sdk/dist/adapters/index.js +0 -28
  77. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts +0 -10
  78. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
  79. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.js +0 -39
  80. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
  81. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
  82. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.js +0 -40
  83. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts +0 -18
  84. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
  85. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.js +0 -63
  86. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
  87. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
  88. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.js +0 -86
  89. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
  90. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
  91. package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.js +0 -14
  92. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts +0 -10
  93. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts.map +0 -1
  94. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.js +0 -51
  95. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts +0 -10
  96. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
  97. package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.js +0 -51
  98. package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts +0 -10
  99. package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
  100. package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.js +0 -51
  101. package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts +0 -9
  102. package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
  103. package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.js +0 -14
  104. package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts +0 -78
  105. package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts.map +0 -1
  106. package/node_modules/@cc-switch/sdk/dist/services/instance-service.js +0 -180
  107. package/package/cc-switch-sdk/dist/adapters/common.d.ts +0 -38
  108. package/package/cc-switch-sdk/dist/adapters/common.d.ts.map +0 -1
  109. package/package/cc-switch-sdk/dist/adapters/common.js +0 -47
  110. package/package/cc-switch-sdk/dist/adapters/index.d.ts +0 -5
  111. package/package/cc-switch-sdk/dist/adapters/index.d.ts.map +0 -1
  112. package/package/cc-switch-sdk/dist/adapters/index.js +0 -28
  113. package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts +0 -10
  114. package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
  115. package/package/cc-switch-sdk/dist/adapters/mcp-claude.js +0 -39
  116. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
  117. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
  118. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.js +0 -40
  119. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts +0 -18
  120. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
  121. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.js +0 -63
  122. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
  123. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
  124. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.js +0 -86
  125. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
  126. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
  127. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.js +0 -14
  128. package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts +0 -10
  129. package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts.map +0 -1
  130. package/package/cc-switch-sdk/dist/adapters/skill-claude.js +0 -51
  131. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts +0 -10
  132. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
  133. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.js +0 -51
  134. package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts +0 -10
  135. package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
  136. package/package/cc-switch-sdk/dist/adapters/skill-opencode.js +0 -51
  137. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts +0 -9
  138. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
  139. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.js +0 -14
  140. package/package/cc-switch-sdk/dist/services/instance-service.d.ts +0 -78
  141. package/package/cc-switch-sdk/dist/services/instance-service.d.ts.map +0 -1
  142. package/package/cc-switch-sdk/dist/services/instance-service.js +0 -180
@@ -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,14 +0,0 @@
1
- export class PlaceholderSkillAdapter {
2
- constructor(appId) {
3
- this.appId = appId;
4
- }
5
- async importSkills() {
6
- return [];
7
- }
8
- async syncSkill(_skill, _sourceDir, _method) {
9
- return;
10
- }
11
- async removeSkill(_skill) {
12
- return;
13
- }
14
- }
@@ -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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"}
@@ -1,180 +0,0 @@
1
- import path from "node:path";
2
- import { promises as fs } from "node:fs";
3
- import { copyDir, pathExists, removeIfExists } from "../utils/fs.js";
4
- import { generateId } from "../utils/id.js";
5
- export class InstanceService {
6
- constructor(sdk, instanceRoot, workspacePath) {
7
- this.sdk = sdk;
8
- this.instanceRoot = instanceRoot;
9
- this.workspacePath = workspacePath;
10
- }
11
- getPaths() {
12
- return {
13
- instanceRoot: this.instanceRoot,
14
- stateFile: path.join(this.instanceRoot, "instance-state.json"),
15
- skillsDir: path.join(this.instanceRoot, "skills"),
16
- mcpDir: path.join(this.instanceRoot, "mcp"),
17
- };
18
- }
19
- async loadState() {
20
- const paths = this.getPaths();
21
- try {
22
- const raw = await fs.readFile(paths.stateFile, "utf-8");
23
- const parsed = JSON.parse(raw);
24
- return parsed;
25
- }
26
- catch {
27
- return {
28
- initialized: false,
29
- skills: [],
30
- mcpServers: [],
31
- enabledApps: [],
32
- skillEnabled: true,
33
- mcpEnabled: true,
34
- updatedAt: null,
35
- };
36
- }
37
- }
38
- async saveState(state) {
39
- const paths = this.getPaths();
40
- state.updatedAt = new Date().toISOString();
41
- await fs.mkdir(path.dirname(paths.stateFile), { recursive: true });
42
- await fs.writeFile(paths.stateFile, JSON.stringify(state, null, 2), "utf-8");
43
- return state;
44
- }
45
- async ensureInstanceRoot() {
46
- await fs.mkdir(this.instanceRoot, { recursive: true });
47
- }
48
- toAppFlags(appIds) {
49
- return {
50
- claude: appIds.includes("claude"),
51
- claudecode: appIds.includes("claudecode"),
52
- codex: appIds.includes("codex"),
53
- gemini: appIds.includes("gemini"),
54
- opencode: appIds.includes("opencode"),
55
- openclaw: appIds.includes("openclaw"),
56
- };
57
- }
58
- async initialize(options = {}) {
59
- await this.ensureInstanceRoot();
60
- const paths = this.getPaths();
61
- const enabledApps = options.enabledApps ?? ["claudecode", "opencode"];
62
- const appFlags = this.toAppFlags(enabledApps);
63
- const result = {
64
- ok: true,
65
- instanceId: generateId(),
66
- workspacePath: this.workspacePath,
67
- instanceRoot: this.instanceRoot,
68
- enabledApps,
69
- skill: {
70
- enabled: options.skillEnabled ?? true,
71
- packagePresent: false,
72
- },
73
- mcp: {
74
- enabled: options.mcpEnabled ?? true,
75
- },
76
- };
77
- const state = await this.loadState();
78
- state.initialized = true;
79
- state.enabledApps = enabledApps;
80
- state.skillEnabled = result.skill.enabled;
81
- state.mcpEnabled = result.mcp.enabled;
82
- if (result.skill.enabled) {
83
- await fs.mkdir(paths.skillsDir, { recursive: true });
84
- const skillCandidates = Array.isArray(options.skillPackages) && options.skillPackages.length > 0
85
- ? options.skillPackages
86
- : options.skillPackage
87
- ? [options.skillPackage]
88
- : [];
89
- const installedSkills = [];
90
- for (const candidate of skillCandidates) {
91
- const installed = await this.installSkillPackage(candidate, paths.skillsDir, appFlags);
92
- if (installed) {
93
- installedSkills.push(installed);
94
- }
95
- }
96
- if (installedSkills.length > 0) {
97
- result.skill.packagePresent = true;
98
- result.skill.installedCount = installedSkills.length;
99
- result.skill.installed = installedSkills;
100
- state.skills = installedSkills;
101
- }
102
- }
103
- if (result.mcp.enabled) {
104
- const mcpServers = Array.isArray(options.mcpServers)
105
- ? options.mcpServers
106
- : [];
107
- const installedMcps = [];
108
- for (const input of mcpServers) {
109
- const server = await this.upsertMcpServer(input, appFlags);
110
- if (server) {
111
- installedMcps.push(server);
112
- }
113
- }
114
- if (installedMcps.length > 0) {
115
- result.mcp.installedCount = installedMcps.length;
116
- result.mcp.installed = installedMcps;
117
- state.mcpServers = installedMcps;
118
- }
119
- }
120
- await this.saveState(state);
121
- return result;
122
- }
123
- async installSkillPackage(pkg, targetDir, apps) {
124
- const sourceDir = pkg.localPath;
125
- if (!sourceDir || !(await pathExists(sourceDir))) {
126
- return null;
127
- }
128
- const skillName = pkg.skillName || path.basename(sourceDir).replace(/\.skill$/, "");
129
- const skillId = generateId();
130
- const targetSkillDir = path.join(targetDir, skillName);
131
- await copyDir(sourceDir, targetSkillDir);
132
- const installed = await this.sdk.installSkill({
133
- sourceDir: targetSkillDir,
134
- name: skillName,
135
- apps,
136
- });
137
- return installed;
138
- }
139
- async upsertMcpServer(input, apps) {
140
- const name = String(input.name || "").trim();
141
- if (!name) {
142
- return null;
143
- }
144
- const existingMcps = this.sdk.getAllMcpServers();
145
- const existing = existingMcps.find((s) => s.name === name);
146
- const serverSpec = {
147
- type: input.transport || "stdio",
148
- command: input.command,
149
- url: input.url,
150
- args: input.args,
151
- env: input.env,
152
- };
153
- if (existing) {
154
- return this.sdk.updateMcpServer(existing.id, {
155
- name,
156
- server: serverSpec,
157
- apps,
158
- });
159
- }
160
- return this.sdk.createMcpServer({
161
- name,
162
- server: serverSpec,
163
- apps,
164
- });
165
- }
166
- async getState() {
167
- return this.loadState();
168
- }
169
- async updateState(partial) {
170
- const state = await this.loadState();
171
- Object.assign(state, partial);
172
- return this.saveState(state);
173
- }
174
- async reset() {
175
- const paths = this.getPaths();
176
- await removeIfExists(paths.stateFile);
177
- await removeIfExists(paths.skillsDir);
178
- await removeIfExists(paths.mcpDir);
179
- }
180
- }
@@ -1,38 +0,0 @@
1
- import type { AppId, McpServer, McpServerSpec } from "../types.js";
2
- export type JsonRecord = Record<string, unknown>;
3
- export interface ClaudeConfig {
4
- mcpServers?: Record<string, McpServerSpec>;
5
- [key: string]: unknown;
6
- }
7
- export interface OpenCodeLocalServer {
8
- type: "local";
9
- command: string[];
10
- environment?: Record<string, string>;
11
- cwd?: string;
12
- enabled?: boolean;
13
- }
14
- export interface OpenCodeRemoteServer {
15
- type: "remote";
16
- url: string;
17
- headers?: Record<string, string>;
18
- enabled?: boolean;
19
- }
20
- export type OpenCodeServer = OpenCodeLocalServer | OpenCodeRemoteServer;
21
- export interface OpenCodeConfig {
22
- mcp?: Record<string, OpenCodeServer>;
23
- mcpServers?: Record<string, OpenCodeServer>;
24
- [key: string]: unknown;
25
- }
26
- export type ClaudecodeLocalServer = OpenCodeLocalServer;
27
- export type ClaudecodeRemoteServer = OpenCodeRemoteServer;
28
- export type ClaudecodeServer = OpenCodeServer;
29
- export interface ClaudecodeConfig {
30
- mcpServers?: Record<string, ClaudecodeServer>;
31
- [key: string]: unknown;
32
- }
33
- export declare function toMcpSpecFromOpenCode(input: OpenCodeServer): McpServerSpec;
34
- export declare function toOpenCodeServer(input: McpServerSpec): OpenCodeServer;
35
- export declare function mergeAppFlagOnImport(server: McpServer, appId: AppId): McpServer;
36
- export declare const toMcpSpecFromClaudecode: typeof toMcpSpecFromOpenCode;
37
- export declare const toClaudecodeServer: typeof toOpenCodeServer;
38
- //# sourceMappingURL=common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/adapters/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AACxD,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAiB1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAoBrE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,KAAK,GACX,SAAS,CAQX;AAGD,eAAO,MAAM,uBAAuB,8BAAwB,CAAC;AAC7D,eAAO,MAAM,kBAAkB,yBAAmB,CAAC"}
@@ -1,47 +0,0 @@
1
- export function toMcpSpecFromOpenCode(input) {
2
- if (input.type === "local") {
3
- const [command, ...args] = input.command;
4
- return {
5
- type: "stdio",
6
- command,
7
- args,
8
- env: input.environment,
9
- cwd: input.cwd,
10
- };
11
- }
12
- return {
13
- type: "sse",
14
- url: input.url,
15
- headers: input.headers,
16
- };
17
- }
18
- export function toOpenCodeServer(input) {
19
- if (input.type === "stdio") {
20
- const commandParts = [input.command, ...(input.args ?? [])].filter((entry) => Boolean(entry));
21
- return {
22
- type: "local",
23
- command: commandParts,
24
- environment: input.env,
25
- cwd: input.cwd,
26
- enabled: true,
27
- };
28
- }
29
- return {
30
- type: "remote",
31
- url: input.url ?? "",
32
- headers: input.headers,
33
- enabled: true,
34
- };
35
- }
36
- export function mergeAppFlagOnImport(server, appId) {
37
- return {
38
- ...server,
39
- apps: {
40
- ...server.apps,
41
- [appId]: true,
42
- },
43
- };
44
- }
45
- // Claudecode uses the same conversion functions as OpenCode
46
- export const toMcpSpecFromClaudecode = toMcpSpecFromOpenCode;
47
- export const toClaudecodeServer = toOpenCodeServer;
@@ -1,5 +0,0 @@
1
- import type { AppId, IMcpAdapter, SdkPaths } from "../types.js";
2
- import type { ISkillAdapter } from "../types.js";
3
- export declare function createMcpAdapters(paths: SdkPaths): Record<AppId, IMcpAdapter>;
4
- export declare function createSkillAdapters(paths: SdkPaths): Record<AppId, ISkillAdapter>;
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAShE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAS7E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,GACd,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAS9B"}
@@ -1,28 +0,0 @@
1
- import { ClaudeMcpAdapter } from "./mcp-claude.js";
2
- import { ClaudecodeMcpAdapter } from "./mcp-claudecode.js";
3
- import { OpenCodeMcpAdapter } from "./mcp-opencode.js";
4
- import { PlaceholderMcpAdapter } from "./mcp-placeholder.js";
5
- import { ClaudeSkillAdapter } from "./skill-claude.js";
6
- import { ClaudecodeSkillAdapter } from "./skill-claudecode.js";
7
- import { OpenCodeSkillAdapter } from "./skill-opencode.js";
8
- import { PlaceholderSkillAdapter } from "./skill-placeholder.js";
9
- export function createMcpAdapters(paths) {
10
- return {
11
- claude: new ClaudeMcpAdapter(paths.claudeConfigFile),
12
- claudecode: new ClaudecodeMcpAdapter(paths.claudecodeConfigFile),
13
- opencode: new OpenCodeMcpAdapter(paths.opencodeConfigFile),
14
- codex: new PlaceholderMcpAdapter("codex"),
15
- gemini: new PlaceholderMcpAdapter("gemini"),
16
- openclaw: new PlaceholderMcpAdapter("openclaw"),
17
- };
18
- }
19
- export function createSkillAdapters(paths) {
20
- return {
21
- claude: new ClaudeSkillAdapter(paths.claudeSkillsDir),
22
- claudecode: new ClaudecodeSkillAdapter(paths.claudecodeSkillsDir),
23
- opencode: new OpenCodeSkillAdapter(paths.opencodeSkillsDir),
24
- codex: new PlaceholderSkillAdapter("codex"),
25
- gemini: new PlaceholderSkillAdapter("gemini"),
26
- openclaw: new PlaceholderSkillAdapter("openclaw"),
27
- };
28
- }
@@ -1,10 +0,0 @@
1
- import type { IMcpAdapter, McpServer } from "../types.js";
2
- export declare class ClaudeMcpAdapter implements IMcpAdapter {
3
- private readonly configPath;
4
- readonly appId: "claude";
5
- constructor(configPath: string);
6
- importServers(): Promise<McpServer[]>;
7
- syncServer(server: McpServer): Promise<void>;
8
- removeServer(server: McpServer): Promise<void>;
9
- }
10
- //# sourceMappingURL=mcp-claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-claude.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK1D,qBAAa,gBAAiB,YAAW,WAAW;IAGtC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,SAAgB,KAAK,EAAG,QAAQ,CAAU;gBAEb,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,39 +0,0 @@
1
- import { createId } from "../utils/id.js";
2
- import { readJsonFile, writeJsonFile } from "../utils/fs.js";
3
- export class ClaudeMcpAdapter {
4
- constructor(configPath) {
5
- this.configPath = configPath;
6
- this.appId = "claude";
7
- }
8
- async importServers() {
9
- const config = await readJsonFile(this.configPath, {});
10
- const entries = Object.entries(config.mcpServers ?? {});
11
- return entries.map(([name, server]) => ({
12
- id: createId("mcp"),
13
- name,
14
- server,
15
- apps: {
16
- claude: true,
17
- claudecode: false,
18
- codex: false,
19
- gemini: false,
20
- opencode: false,
21
- openclaw: false,
22
- },
23
- }));
24
- }
25
- async syncServer(server) {
26
- const config = await readJsonFile(this.configPath, {});
27
- config.mcpServers = config.mcpServers ?? {};
28
- config.mcpServers[server.name] = server.server;
29
- await writeJsonFile(this.configPath, config);
30
- }
31
- async removeServer(server) {
32
- const config = await readJsonFile(this.configPath, {});
33
- if (!config.mcpServers) {
34
- return;
35
- }
36
- delete config.mcpServers[server.name];
37
- await writeJsonFile(this.configPath, config);
38
- }
39
- }