localant 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.
Files changed (177) hide show
  1. package/README.ja.md +185 -0
  2. package/README.md +137 -20
  3. package/SECURITY.md +63 -8
  4. package/assets/hero.png +0 -0
  5. package/assets/localant-icon.png +0 -0
  6. package/examples/skills/article-publisher/README.md +41 -0
  7. package/examples/skills/article-publisher/package.json +9 -0
  8. package/examples/skills/article-publisher/skill.json +134 -0
  9. package/examples/skills/article-publisher/src/index.ts +186 -0
  10. package/examples/skills/article-publisher/tests/skill.test.ts +72 -0
  11. package/package.json +15 -5
  12. package/packages/cli/dist/autostart.d.ts +14 -0
  13. package/packages/cli/dist/autostart.d.ts.map +1 -0
  14. package/packages/cli/dist/autostart.js +98 -0
  15. package/packages/cli/dist/autostart.js.map +1 -0
  16. package/packages/cli/dist/bin.js +214 -2
  17. package/packages/cli/dist/bin.js.map +1 -1
  18. package/packages/cli/dist/runtime.d.ts.map +1 -1
  19. package/packages/cli/dist/runtime.js +56 -8
  20. package/packages/cli/dist/runtime.js.map +1 -1
  21. package/packages/cli/dist/serveo-setup.d.ts +37 -0
  22. package/packages/cli/dist/serveo-setup.d.ts.map +1 -0
  23. package/packages/cli/dist/serveo-setup.js +168 -0
  24. package/packages/cli/dist/serveo-setup.js.map +1 -0
  25. package/packages/cli/dist/util.d.ts +6 -0
  26. package/packages/cli/dist/util.d.ts.map +1 -1
  27. package/packages/cli/dist/util.js +20 -0
  28. package/packages/cli/dist/util.js.map +1 -1
  29. package/packages/cli/package.json +1 -1
  30. package/packages/dashboard/dist/index.d.ts +5 -4
  31. package/packages/dashboard/dist/index.d.ts.map +1 -1
  32. package/packages/dashboard/dist/index.js +781 -44
  33. package/packages/dashboard/dist/index.js.map +1 -1
  34. package/packages/gateway/dist/gateway.d.ts +14 -1
  35. package/packages/gateway/dist/gateway.d.ts.map +1 -1
  36. package/packages/gateway/dist/gateway.js +59 -6
  37. package/packages/gateway/dist/gateway.js.map +1 -1
  38. package/packages/gateway/dist/index.d.ts +3 -0
  39. package/packages/gateway/dist/index.d.ts.map +1 -1
  40. package/packages/gateway/dist/index.js +3 -0
  41. package/packages/gateway/dist/index.js.map +1 -1
  42. package/packages/gateway/dist/managers/coding-agent-manager.d.ts +14 -0
  43. package/packages/gateway/dist/managers/coding-agent-manager.d.ts.map +1 -1
  44. package/packages/gateway/dist/managers/coding-agent-manager.js +21 -2
  45. package/packages/gateway/dist/managers/coding-agent-manager.js.map +1 -1
  46. package/packages/gateway/dist/managers/fs-manager.d.ts +73 -0
  47. package/packages/gateway/dist/managers/fs-manager.d.ts.map +1 -1
  48. package/packages/gateway/dist/managers/fs-manager.js +290 -6
  49. package/packages/gateway/dist/managers/fs-manager.js.map +1 -1
  50. package/packages/gateway/dist/managers/git-manager.d.ts +6 -0
  51. package/packages/gateway/dist/managers/git-manager.d.ts.map +1 -1
  52. package/packages/gateway/dist/managers/git-manager.js +24 -0
  53. package/packages/gateway/dist/managers/git-manager.js.map +1 -1
  54. package/packages/gateway/dist/managers/lsp-service.d.ts +88 -0
  55. package/packages/gateway/dist/managers/lsp-service.d.ts.map +1 -0
  56. package/packages/gateway/dist/managers/lsp-service.js +249 -0
  57. package/packages/gateway/dist/managers/lsp-service.js.map +1 -0
  58. package/packages/gateway/dist/managers/mcp-bridge.d.ts +2 -1
  59. package/packages/gateway/dist/managers/mcp-bridge.d.ts.map +1 -1
  60. package/packages/gateway/dist/managers/mcp-bridge.js +23 -2
  61. package/packages/gateway/dist/managers/mcp-bridge.js.map +1 -1
  62. package/packages/gateway/dist/managers/shell-manager.d.ts +19 -0
  63. package/packages/gateway/dist/managers/shell-manager.d.ts.map +1 -1
  64. package/packages/gateway/dist/managers/shell-manager.js +28 -0
  65. package/packages/gateway/dist/managers/shell-manager.js.map +1 -1
  66. package/packages/gateway/dist/managers/skill-runtime.d.ts +8 -0
  67. package/packages/gateway/dist/managers/skill-runtime.d.ts.map +1 -1
  68. package/packages/gateway/dist/managers/skill-runtime.js +15 -0
  69. package/packages/gateway/dist/managers/skill-runtime.js.map +1 -1
  70. package/packages/gateway/dist/managers/tunnel-manager.d.ts +19 -1
  71. package/packages/gateway/dist/managers/tunnel-manager.d.ts.map +1 -1
  72. package/packages/gateway/dist/managers/tunnel-manager.js +289 -8
  73. package/packages/gateway/dist/managers/tunnel-manager.js.map +1 -1
  74. package/packages/gateway/dist/security/command-guard.d.ts +3 -0
  75. package/packages/gateway/dist/security/command-guard.d.ts.map +1 -1
  76. package/packages/gateway/dist/security/command-guard.js +15 -7
  77. package/packages/gateway/dist/security/command-guard.js.map +1 -1
  78. package/packages/gateway/dist/security/path-guard.d.ts +3 -0
  79. package/packages/gateway/dist/security/path-guard.d.ts.map +1 -1
  80. package/packages/gateway/dist/security/path-guard.js +8 -2
  81. package/packages/gateway/dist/security/path-guard.js.map +1 -1
  82. package/packages/gateway/dist/stores/config-store.d.ts +10 -0
  83. package/packages/gateway/dist/stores/config-store.d.ts.map +1 -1
  84. package/packages/gateway/dist/stores/config-store.js +47 -3
  85. package/packages/gateway/dist/stores/config-store.js.map +1 -1
  86. package/packages/gateway/dist/stores/secret-vault.d.ts +19 -3
  87. package/packages/gateway/dist/stores/secret-vault.d.ts.map +1 -1
  88. package/packages/gateway/dist/stores/secret-vault.js +47 -6
  89. package/packages/gateway/dist/stores/secret-vault.js.map +1 -1
  90. package/packages/gateway/dist/tools/adapters.d.ts.map +1 -1
  91. package/packages/gateway/dist/tools/adapters.js +198 -7
  92. package/packages/gateway/dist/tools/adapters.js.map +1 -1
  93. package/packages/gateway/dist/tools/adb.d.ts.map +1 -1
  94. package/packages/gateway/dist/tools/adb.js +42 -0
  95. package/packages/gateway/dist/tools/adb.js.map +1 -1
  96. package/packages/gateway/dist/tools/agent.d.ts +10 -0
  97. package/packages/gateway/dist/tools/agent.d.ts.map +1 -0
  98. package/packages/gateway/dist/tools/agent.js +35 -0
  99. package/packages/gateway/dist/tools/agent.js.map +1 -0
  100. package/packages/gateway/dist/tools/aliases.d.ts +7 -0
  101. package/packages/gateway/dist/tools/aliases.d.ts.map +1 -0
  102. package/packages/gateway/dist/tools/aliases.js +64 -0
  103. package/packages/gateway/dist/tools/aliases.js.map +1 -0
  104. package/packages/gateway/dist/tools/bash.d.ts +10 -0
  105. package/packages/gateway/dist/tools/bash.d.ts.map +1 -0
  106. package/packages/gateway/dist/tools/bash.js +67 -0
  107. package/packages/gateway/dist/tools/bash.js.map +1 -0
  108. package/packages/gateway/dist/tools/browser.d.ts.map +1 -1
  109. package/packages/gateway/dist/tools/browser.js +9 -0
  110. package/packages/gateway/dist/tools/browser.js.map +1 -1
  111. package/packages/gateway/dist/tools/control.d.ts +8 -0
  112. package/packages/gateway/dist/tools/control.d.ts.map +1 -0
  113. package/packages/gateway/dist/tools/control.js +134 -0
  114. package/packages/gateway/dist/tools/control.js.map +1 -0
  115. package/packages/gateway/dist/tools/editing.d.ts +8 -0
  116. package/packages/gateway/dist/tools/editing.d.ts.map +1 -0
  117. package/packages/gateway/dist/tools/editing.js +102 -0
  118. package/packages/gateway/dist/tools/editing.js.map +1 -0
  119. package/packages/gateway/dist/tools/git.d.ts.map +1 -1
  120. package/packages/gateway/dist/tools/git.js +67 -0
  121. package/packages/gateway/dist/tools/git.js.map +1 -1
  122. package/packages/gateway/dist/tools/index.d.ts.map +1 -1
  123. package/packages/gateway/dist/tools/index.js +17 -2
  124. package/packages/gateway/dist/tools/index.js.map +1 -1
  125. package/packages/gateway/dist/tools/lsp.d.ts +10 -0
  126. package/packages/gateway/dist/tools/lsp.d.ts.map +1 -0
  127. package/packages/gateway/dist/tools/lsp.js +111 -0
  128. package/packages/gateway/dist/tools/lsp.js.map +1 -0
  129. package/packages/gateway/dist/tools/question.d.ts +10 -0
  130. package/packages/gateway/dist/tools/question.d.ts.map +1 -0
  131. package/packages/gateway/dist/tools/question.js +30 -0
  132. package/packages/gateway/dist/tools/question.js.map +1 -0
  133. package/packages/gateway/dist/tools/shell.d.ts +1 -1
  134. package/packages/gateway/dist/tools/shell.d.ts.map +1 -1
  135. package/packages/gateway/dist/tools/shell.js +15 -0
  136. package/packages/gateway/dist/tools/shell.js.map +1 -1
  137. package/packages/gateway/dist/tools/skill.d.ts.map +1 -1
  138. package/packages/gateway/dist/tools/skill.js +2 -7
  139. package/packages/gateway/dist/tools/skill.js.map +1 -1
  140. package/packages/gateway/dist/tools/system.js +2 -2
  141. package/packages/gateway/dist/tools/system.js.map +1 -1
  142. package/packages/gateway/dist/tools/validation.d.ts +3 -0
  143. package/packages/gateway/dist/tools/validation.d.ts.map +1 -0
  144. package/packages/gateway/dist/tools/validation.js +120 -0
  145. package/packages/gateway/dist/tools/validation.js.map +1 -0
  146. package/packages/mcp/dist/http-server.d.ts +1 -1
  147. package/packages/mcp/dist/http-server.d.ts.map +1 -1
  148. package/packages/mcp/dist/http-server.js +544 -20
  149. package/packages/mcp/dist/http-server.js.map +1 -1
  150. package/packages/mcp/dist/mcp-server.d.ts.map +1 -1
  151. package/packages/mcp/dist/mcp-server.js +5 -1
  152. package/packages/mcp/dist/mcp-server.js.map +1 -1
  153. package/packages/shared/dist/config.d.ts +146 -16
  154. package/packages/shared/dist/config.d.ts.map +1 -1
  155. package/packages/shared/dist/config.js +93 -7
  156. package/packages/shared/dist/config.js.map +1 -1
  157. package/packages/shared/dist/index.d.ts +2 -0
  158. package/packages/shared/dist/index.d.ts.map +1 -1
  159. package/packages/shared/dist/index.js +2 -0
  160. package/packages/shared/dist/index.js.map +1 -1
  161. package/packages/shared/dist/paths.d.ts +19 -2
  162. package/packages/shared/dist/paths.d.ts.map +1 -1
  163. package/packages/shared/dist/paths.js +50 -3
  164. package/packages/shared/dist/paths.js.map +1 -1
  165. package/packages/shared/dist/tool-profiles.d.ts +34 -0
  166. package/packages/shared/dist/tool-profiles.d.ts.map +1 -0
  167. package/packages/shared/dist/tool-profiles.js +188 -0
  168. package/packages/shared/dist/tool-profiles.js.map +1 -0
  169. package/packages/shared/dist/version.d.ts +9 -0
  170. package/packages/shared/dist/version.d.ts.map +1 -0
  171. package/packages/shared/dist/version.js +9 -0
  172. package/packages/shared/dist/version.js.map +1 -0
  173. package/assets/icon.svg +0 -25
  174. package/packages/gateway/dist/tools/article.d.ts +0 -3
  175. package/packages/gateway/dist/tools/article.d.ts.map +0 -1
  176. package/packages/gateway/dist/tools/article.js +0 -230
  177. package/packages/gateway/dist/tools/article.js.map +0 -1
@@ -1,26 +1,43 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import crypto from "node:crypto";
4
- import { ConfigSchema, defaultConfig, appPaths } from "@localant/shared";
4
+ import { ConfigSchema, defaultConfig, appPaths, migrateLegacyConfigDir } from "@localant/shared";
5
5
  /** Loads, persists and initializes on-disk configuration and identity files. */
6
6
  export class ConfigStore {
7
7
  paths;
8
+ /** True only when using the real default location (not an explicit test base). */
9
+ isDefaultLocation;
8
10
  constructor(base) {
9
11
  this.paths = appPaths(base);
12
+ this.isDefaultLocation = base === undefined;
10
13
  }
11
14
  /** Create config dir tree and default files if missing. Idempotent. */
12
15
  ensureInitialized() {
13
16
  const p = this.paths;
17
+ // Before creating anything, migrate a pre-1.x install into ~/.localant.
18
+ if (this.isDefaultLocation) {
19
+ migrateLegacyConfigDir(p.root);
20
+ }
14
21
  for (const dir of [p.root, path.dirname(p.auditLog), p.skillsDir, p.backupsDir, p.workspaceDir, p.logsDir]) {
15
22
  fs.mkdirSync(dir, { recursive: true });
16
23
  }
17
24
  if (!fs.existsSync(p.configFile)) {
18
- this.save(defaultConfig());
25
+ const config = defaultConfig();
26
+ config.tunnel.provider = "serveo";
27
+ const rand = crypto.randomBytes(16).toString("hex");
28
+ config.tunnel.subdomain = `localant-${rand}`;
29
+ this.save(config);
19
30
  }
20
31
  if (!fs.existsSync(p.tokenFile)) {
21
32
  const token = crypto.randomBytes(32).toString("base64url");
22
33
  fs.writeFileSync(p.tokenFile, token, { mode: 0o600 });
23
34
  }
35
+ if (!fs.existsSync(p.vaultKeyFile)) {
36
+ // A dedicated, random 256-bit vault key kept independent of the auth
37
+ // token, so rotating the token never makes stored secrets undecryptable.
38
+ const key = crypto.randomBytes(32).toString("base64");
39
+ fs.writeFileSync(p.vaultKeyFile, key, { mode: 0o600 });
40
+ }
24
41
  if (!fs.existsSync(p.secretsFile)) {
25
42
  fs.writeFileSync(p.secretsFile, JSON.stringify({}), { mode: 0o600 });
26
43
  }
@@ -34,7 +51,20 @@ export class ConfigStore {
34
51
  load() {
35
52
  try {
36
53
  const raw = JSON.parse(fs.readFileSync(this.paths.configFile, "utf8"));
37
- return ConfigSchema.parse(raw);
54
+ const config = ConfigSchema.parse(raw);
55
+ // Merge missing default coding agents into existing config automatically
56
+ const def = defaultConfig();
57
+ let changed = false;
58
+ for (const [key, val] of Object.entries(def.codingAgents)) {
59
+ if (!config.codingAgents[key]) {
60
+ config.codingAgents[key] = val;
61
+ changed = true;
62
+ }
63
+ }
64
+ if (changed) {
65
+ this.save(config);
66
+ }
67
+ return config;
38
68
  }
39
69
  catch {
40
70
  return defaultConfig();
@@ -53,5 +83,19 @@ export class ConfigStore {
53
83
  getToken() {
54
84
  return fs.readFileSync(this.paths.tokenFile, "utf8").trim();
55
85
  }
86
+ /** Read the dedicated vault key (base64). Independent of the auth token. */
87
+ getVaultKey() {
88
+ return Buffer.from(fs.readFileSync(this.paths.vaultKeyFile, "utf8").trim(), "base64");
89
+ }
90
+ /**
91
+ * Generate a fresh auth token and persist it. Returns the new token. Because
92
+ * the vault key is stored separately, rotating the token does NOT invalidate
93
+ * stored secrets.
94
+ */
95
+ rotateToken() {
96
+ const token = crypto.randomBytes(32).toString("base64url");
97
+ fs.writeFileSync(this.paths.tokenFile, token, { mode: 0o600 });
98
+ return token;
99
+ }
56
100
  }
57
101
  //# sourceMappingURL=config-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,26 @@
1
1
  import type { AppPaths } from "@localant/shared";
2
2
  /**
3
3
  * Local secret vault. Values are encrypted at rest with AES-256-GCM using a
4
- * key derived from the auth token + machine-local salt. Secret *values* are
5
- * never returned by listing operations and never logged.
4
+ * dedicated random vault key stored separately from the auth token (see
5
+ * ConfigStore.getVaultKey). This means rotating the auth token never makes
6
+ * stored secrets undecryptable. Secret *values* are never returned by listing
7
+ * operations and never logged.
8
+ *
9
+ * For backward compatibility, a `legacyToken` may be supplied: secrets written
10
+ * by older versions (which derived the key from the auth token) are decrypted
11
+ * with the legacy key on read and transparently re-encrypted with the dedicated
12
+ * key via {@link migrate}.
6
13
  */
7
14
  export declare class SecretVault {
8
15
  private readonly file;
9
16
  private readonly key;
10
- constructor(paths: AppPaths, token: string);
17
+ private readonly legacyKey?;
18
+ constructor(paths: AppPaths, key: Buffer, legacyToken?: string);
11
19
  private read;
12
20
  private write;
13
21
  private encrypt;
22
+ private decryptWith;
23
+ /** Decrypt with the current key, falling back to the legacy token-derived key. */
14
24
  private decrypt;
15
25
  set(name: string, value: string): void;
16
26
  get(name: string): string | undefined;
@@ -19,5 +29,11 @@ export declare class SecretVault {
19
29
  list(): string[];
20
30
  /** All current secret values, for redaction purposes only. */
21
31
  allValues(): string[];
32
+ /**
33
+ * Re-encrypt any secrets that only decrypt under the legacy token-derived key
34
+ * with the dedicated vault key. Idempotent; a no-op when there is no legacy
35
+ * key or nothing needs migrating. Returns the number of secrets migrated.
36
+ */
37
+ migrate(): number;
22
38
  }
23
39
  //# sourceMappingURL=secret-vault.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-vault.d.ts","sourceRoot":"","sources":["../../src/stores/secret-vault.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;IAK1C,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,OAAO;IAYf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ7B,iCAAiC;IACjC,IAAI,IAAI,MAAM,EAAE;IAIhB,8DAA8D;IAC9D,SAAS,IAAI,MAAM,EAAE;CAKtB"}
1
+ {"version":3,"file":"secret-vault.d.ts","sourceRoot":"","sources":["../../src/stores/secret-vault.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAExB,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAQ9D,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,WAAW;IAYnB,kFAAkF;IAClF,OAAO,CAAC,OAAO;IAMf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ7B,iCAAiC;IACjC,IAAI,IAAI,MAAM,EAAE;IAIhB,8DAA8D;IAC9D,SAAS,IAAI,MAAM,EAAE;IAMrB;;;;OAIG;IACH,OAAO,IAAI,MAAM;CAelB"}
@@ -2,15 +2,26 @@ import fs from "node:fs";
2
2
  import crypto from "node:crypto";
3
3
  /**
4
4
  * Local secret vault. Values are encrypted at rest with AES-256-GCM using a
5
- * key derived from the auth token + machine-local salt. Secret *values* are
6
- * never returned by listing operations and never logged.
5
+ * dedicated random vault key stored separately from the auth token (see
6
+ * ConfigStore.getVaultKey). This means rotating the auth token never makes
7
+ * stored secrets undecryptable. Secret *values* are never returned by listing
8
+ * operations and never logged.
9
+ *
10
+ * For backward compatibility, a `legacyToken` may be supplied: secrets written
11
+ * by older versions (which derived the key from the auth token) are decrypted
12
+ * with the legacy key on read and transparently re-encrypted with the dedicated
13
+ * key via {@link migrate}.
7
14
  */
8
15
  export class SecretVault {
9
16
  file;
10
17
  key;
11
- constructor(paths, token) {
18
+ legacyKey;
19
+ constructor(paths, key, legacyToken) {
12
20
  this.file = paths.secretsFile;
13
- this.key = crypto.createHash("sha256").update(`cla-vault:${token}`).digest();
21
+ this.key = key;
22
+ this.legacyKey = legacyToken
23
+ ? crypto.createHash("sha256").update(`cla-vault:${legacyToken}`).digest()
24
+ : undefined;
14
25
  }
15
26
  read() {
16
27
  try {
@@ -30,12 +41,12 @@ export class SecretVault {
30
41
  const tag = cipher.getAuthTag();
31
42
  return `${iv.toString("base64")}.${tag.toString("base64")}.${enc.toString("base64")}`;
32
43
  }
33
- decrypt(blob) {
44
+ decryptWith(blob, key) {
34
45
  try {
35
46
  const [ivB, tagB, encB] = blob.split(".");
36
47
  if (!ivB || !tagB || !encB)
37
48
  return undefined;
38
- const decipher = crypto.createDecipheriv("aes-256-gcm", this.key, Buffer.from(ivB, "base64"));
49
+ const decipher = crypto.createDecipheriv("aes-256-gcm", key, Buffer.from(ivB, "base64"));
39
50
  decipher.setAuthTag(Buffer.from(tagB, "base64"));
40
51
  return Buffer.concat([decipher.update(Buffer.from(encB, "base64")), decipher.final()]).toString("utf8");
41
52
  }
@@ -43,6 +54,13 @@ export class SecretVault {
43
54
  return undefined;
44
55
  }
45
56
  }
57
+ /** Decrypt with the current key, falling back to the legacy token-derived key. */
58
+ decrypt(blob) {
59
+ const primary = this.decryptWith(blob, this.key);
60
+ if (primary !== undefined)
61
+ return primary;
62
+ return this.legacyKey ? this.decryptWith(blob, this.legacyKey) : undefined;
63
+ }
46
64
  set(name, value) {
47
65
  const data = this.read();
48
66
  data[name] = this.encrypt(value);
@@ -70,5 +88,28 @@ export class SecretVault {
70
88
  .map((k) => this.get(k))
71
89
  .filter((v) => typeof v === "string" && v.length > 0);
72
90
  }
91
+ /**
92
+ * Re-encrypt any secrets that only decrypt under the legacy token-derived key
93
+ * with the dedicated vault key. Idempotent; a no-op when there is no legacy
94
+ * key or nothing needs migrating. Returns the number of secrets migrated.
95
+ */
96
+ migrate() {
97
+ if (!this.legacyKey)
98
+ return 0;
99
+ const data = this.read();
100
+ let migrated = 0;
101
+ for (const [name, blob] of Object.entries(data)) {
102
+ if (this.decryptWith(blob, this.key) !== undefined)
103
+ continue; // already current
104
+ const legacy = this.decryptWith(blob, this.legacyKey);
105
+ if (legacy !== undefined) {
106
+ data[name] = this.encrypt(legacy);
107
+ migrated++;
108
+ }
109
+ }
110
+ if (migrated > 0)
111
+ this.write(data);
112
+ return migrated;
113
+ }
73
114
  }
74
115
  //# sourceMappingURL=secret-vault.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-vault.js","sourceRoot":"","sources":["../../src/stores/secret-vault.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secret-vault.js","sourceRoot":"","sources":["../../src/stores/secret-vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,WAAW;IACL,IAAI,CAAS;IACb,GAAG,CAAS;IACZ,SAAS,CAAU;IAEpC,YAAY,KAAe,EAAE,GAAW,EAAE,WAAoB;QAC5D,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,WAAW;YAC1B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACzE,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAA2B,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAA4B;QACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAEO,OAAO,CAAC,KAAa;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxF,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,GAAW;QAC3C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzF,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1G,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,kFAAkF;IAC1E,OAAO,CAAC,IAAY;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,IAAI;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,8DAA8D;IAC9D,SAAS;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAS,CAAC,kBAAkB;YAChF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClC,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/tools/adapters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAqKtD"}
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/tools/adapters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAM7C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CA0OtD"}
@@ -1,5 +1,11 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
1
4
  import { z } from "zod";
2
5
  import { commandExists, execFileSafe } from "../util/exec.js";
6
+ const fsReadFileSync = (file) => fs.readFileSync(file, "utf8");
7
+ const joinHome = (rel) => path.join(os.homedir(), rel);
8
+ const joinCwd = (rel) => path.join(process.cwd(), rel);
3
9
  /**
4
10
  * Adapters bridge external systems (OpenClaw, Desktop Commander) and arbitrary
5
11
  * MCP servers. They never expose external tools to ChatGPT unmediated — every
@@ -112,20 +118,40 @@ export function registerAdapterTools(gw) {
112
118
  });
113
119
  r.register({
114
120
  name: "mcp_server_register",
115
- description: "Register a downstream MCP server (stdio) to bridge through the gateway.",
121
+ description: "Register a downstream MCP server (stdio or streamable-http) to bridge through the gateway.",
116
122
  risk: 2,
117
- inputSchema: z.object({
123
+ inputSchema: z
124
+ .object({
118
125
  name: z.string(),
119
- command: z.string(),
126
+ transport: z.enum(["stdio", "streamable-http"]).default("stdio"),
127
+ command: z.string().optional(),
120
128
  args: z.array(z.string()).default([]),
129
+ url: z.string().optional(),
130
+ headers: z.record(z.string(), z.string()).optional(),
131
+ bearerTokenSecretName: z.string().optional(),
121
132
  enabled: z.boolean().default(false),
133
+ })
134
+ .superRefine((v, ctx) => {
135
+ if (v.transport === "stdio" && !v.command)
136
+ ctx.addIssue({ code: z.ZodIssueCode.custom, message: "stdio requires command" });
137
+ if (v.transport === "streamable-http" && !v.url)
138
+ ctx.addIssue({ code: z.ZodIssueCode.custom, message: "streamable-http requires url" });
122
139
  }),
123
- summarize: (i) => `register mcp server ${i.name}`,
140
+ summarize: (i) => `register mcp server ${i.name} (${i.transport})`,
124
141
  handler: (i) => {
125
142
  const cfg = gw.config();
126
- const next = { ...cfg, mcpServers: { ...cfg.mcpServers, [i.name]: { command: i.command, args: i.args, transport: "stdio", enabled: i.enabled } } };
127
- gw.saveConfig(next);
128
- return { registered: i.name, enabled: i.enabled };
143
+ const entry = i.transport === "stdio"
144
+ ? { transport: "stdio", command: i.command, args: i.args, enabled: i.enabled }
145
+ : {
146
+ transport: "streamable-http",
147
+ url: i.url,
148
+ args: [],
149
+ headers: i.headers,
150
+ bearerTokenSecretName: i.bearerTokenSecretName,
151
+ enabled: i.enabled,
152
+ };
153
+ gw.saveConfig({ ...cfg, mcpServers: { ...cfg.mcpServers, [i.name]: entry } });
154
+ return { registered: i.name, transport: i.transport, enabled: i.enabled };
129
155
  },
130
156
  });
131
157
  r.register({
@@ -166,6 +192,171 @@ export function registerAdapterTools(gw) {
166
192
  summarize: (i) => `${i.name}.${i.tool}`,
167
193
  handler: (i) => gw.bridge.callTool(i.name, i.tool, i.input ?? {}),
168
194
  });
195
+ // ---------- MCP config imports (all imported servers start DISABLED) ----------
196
+ const importServers = (servers) => {
197
+ const cfg = gw.config();
198
+ const next = { ...cfg.mcpServers };
199
+ const imported = [];
200
+ for (const [name, s] of Object.entries(servers)) {
201
+ if (next[name])
202
+ continue; // never override an existing (possibly enabled) server
203
+ next[name] = { ...s, args: s.args ?? [], enabled: false };
204
+ imported.push(name);
205
+ }
206
+ if (imported.length)
207
+ gw.saveConfig({ ...cfg, mcpServers: next });
208
+ return { imported };
209
+ };
210
+ r.register({
211
+ name: "mcp_import_claude_config",
212
+ description: "Import MCP servers from Claude Code config (.mcp.json / ~/.claude.json). Imported servers start disabled.",
213
+ risk: 2,
214
+ inputSchema: z.object({ path: z.string().optional() }),
215
+ summarize: () => "import claude mcp config",
216
+ handler: (i) => importServers(readClaudeServers(i.path)),
217
+ });
218
+ r.register({
219
+ name: "mcp_import_codex_config",
220
+ description: "Import MCP servers from Codex config (~/.codex/config.toml / .codex/config.toml). Imported servers start disabled.",
221
+ risk: 2,
222
+ inputSchema: z.object({ path: z.string().optional() }),
223
+ summarize: () => "import codex mcp config",
224
+ handler: (i) => importServers(readCodexServers(i.path)),
225
+ });
226
+ r.register({
227
+ name: "mcp_import_opencode_config",
228
+ description: "Import MCP servers from OpenCode config (opencode.json / opencode.jsonc). Imported servers start disabled.",
229
+ risk: 2,
230
+ inputSchema: z.object({ path: z.string().optional() }),
231
+ summarize: () => "import opencode mcp config",
232
+ handler: (i) => importServers(readOpencodeServers(i.path)),
233
+ });
234
+ r.register({
235
+ name: "mcp_import_all_agent_configs",
236
+ description: "Import MCP servers from Claude Code, Codex, and OpenCode configs. Imported servers start disabled.",
237
+ risk: 2,
238
+ inputSchema: z.object({}).strip(),
239
+ summarize: () => "import all agent mcp configs",
240
+ handler: () => importServers({ ...readClaudeServers(), ...readCodexServers(), ...readOpencodeServers() }),
241
+ });
242
+ }
243
+ /** Safely read + parse a JSON file, returning {} on any error. */
244
+ function readJson(file) {
245
+ try {
246
+ return JSON.parse(fsReadFileSync(file));
247
+ }
248
+ catch {
249
+ return {};
250
+ }
251
+ }
252
+ function normalizeServers(obj) {
253
+ const out = {};
254
+ if (!obj || typeof obj !== "object")
255
+ return out;
256
+ for (const [name, raw] of Object.entries(obj)) {
257
+ if (!raw || typeof raw !== "object")
258
+ continue;
259
+ if (typeof raw.url === "string") {
260
+ out[name] = { transport: "streamable-http", url: raw.url, headers: raw.headers };
261
+ }
262
+ else if (typeof raw.command === "string") {
263
+ out[name] = { transport: "stdio", command: raw.command, args: raw.args ?? [] };
264
+ }
265
+ }
266
+ return out;
267
+ }
268
+ function readClaudeServers(explicit) {
269
+ const candidates = explicit ? [explicit] : [joinCwd(".mcp.json"), joinHome(".claude.json")];
270
+ const merged = {};
271
+ for (const file of candidates) {
272
+ const json = readJson(file);
273
+ Object.assign(merged, normalizeServers(json.mcpServers));
274
+ }
275
+ return merged;
276
+ }
277
+ function readCodexServers(explicit) {
278
+ const candidates = explicit ? [explicit] : [joinHome(".codex/config.toml"), joinCwd(".codex/config.toml")];
279
+ const merged = {};
280
+ for (const file of candidates) {
281
+ let text = "";
282
+ try {
283
+ text = fsReadFileSync(file);
284
+ }
285
+ catch {
286
+ continue;
287
+ }
288
+ Object.assign(merged, parseCodexToml(text));
289
+ }
290
+ return merged;
291
+ }
292
+ function readOpencodeServers(explicit) {
293
+ const candidates = explicit ? [explicit] : [joinCwd("opencode.json"), joinCwd("opencode.jsonc")];
294
+ const merged = {};
295
+ for (const file of candidates) {
296
+ let text = "";
297
+ try {
298
+ text = fsReadFileSync(file);
299
+ }
300
+ catch {
301
+ continue;
302
+ }
303
+ try {
304
+ const json = JSON.parse(stripJsonComments(text));
305
+ // OpenCode uses `mcp` keyed by name with { type, command/url }.
306
+ const mcp = (json.mcp ?? json.mcpServers);
307
+ if (mcp) {
308
+ for (const [name, raw] of Object.entries(mcp)) {
309
+ if (typeof raw.url === "string")
310
+ merged[name] = { transport: "streamable-http", url: raw.url };
311
+ else if (Array.isArray(raw.command))
312
+ merged[name] = { transport: "stdio", command: raw.command[0], args: raw.command.slice(1) };
313
+ else if (typeof raw.command === "string")
314
+ merged[name] = { transport: "stdio", command: raw.command, args: raw.args ?? [] };
315
+ }
316
+ }
317
+ }
318
+ catch {
319
+ /* ignore */
320
+ }
321
+ }
322
+ return merged;
323
+ }
324
+ /** Minimal TOML reader for Codex `[mcp_servers.<name>]` blocks. */
325
+ function parseCodexToml(text) {
326
+ const out = {};
327
+ let current;
328
+ for (const line of text.split("\n")) {
329
+ const header = /^\s*\[mcp_servers\.([^\]]+)\]\s*$/.exec(line);
330
+ if (header && header[1]) {
331
+ current = header[1].replace(/["']/g, "");
332
+ out[current] = { transport: "stdio", args: [] };
333
+ continue;
334
+ }
335
+ if (!current)
336
+ continue;
337
+ const entry = out[current];
338
+ if (!entry)
339
+ continue;
340
+ const cmd = /^\s*command\s*=\s*"([^"]+)"/.exec(line);
341
+ if (cmd)
342
+ entry.command = cmd[1];
343
+ const url = /^\s*url\s*=\s*"([^"]+)"/.exec(line);
344
+ if (url) {
345
+ entry.url = url[1];
346
+ entry.transport = "streamable-http";
347
+ }
348
+ const args = /^\s*args\s*=\s*\[(.*)\]/.exec(line);
349
+ if (args && args[1] !== undefined)
350
+ entry.args = args[1].split(",").map((s) => s.trim().replace(/["']/g, "")).filter(Boolean);
351
+ }
352
+ // Drop entries with neither command nor url.
353
+ for (const [k, v] of Object.entries(out))
354
+ if (!v.command && !v.url)
355
+ delete out[k];
356
+ return out;
357
+ }
358
+ function stripJsonComments(text) {
359
+ return text.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|[^:])\/\/.*$/gm, "$1");
169
360
  }
170
361
  async function requireCli(cmd, args, hint) {
171
362
  if (!(await commandExists(cmd)))
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/tools/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG9D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAW;IAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;IAEtB,iCAAiC;IACjC,MAAM,YAAY,GAChB,6FAA6F,CAAC;IAEhG,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;QACnE,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,8CAA8C;QAC3D,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC;KAC9E,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC;KAChF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;KAC9F,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC;KAC7E,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACnF,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;QAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;KAClG,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,oEAAoE;QACjF,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACrE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE;QACnD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;KACzG,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,gEAAgE;QAC7E,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE;QAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;KACjG,CAAC,CAAC;IAEH,0CAA0C;IAC1C,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iEAAiE,EAAE,CAAC;QAC1H,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,kEAAkE;QAC/E,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACtF,OAAO,EAAE,IAAI,EAAE,sEAAsE,EAAE,CAAC;QAC1F,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,oEAAoE;QACjF,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3E,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE;QAC/C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAG,CAAC,CAAC,KAAiC,IAAI,EAAE,CAAC;KAC5G,CAAC,CAAC;IAEH,mDAAmD;IACnD,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,yEAAyE;QACtF,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SACpC,CAAC;QACF,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE;QACjD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;YAC5J,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAC7D,CAAC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;KAC5C,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7F,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;QACvC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAG,CAAC,CAAC,KAAiC,IAAI,EAAE,CAAC;KAC/F,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,IAAc,EAAE,IAAY;IACjE,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1F,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/tools/adapters.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/tools/adb.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAc7C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CA6ClD"}
1
+ {"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/tools/adb.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAc7C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAwFlD"}
@@ -56,5 +56,47 @@ export function registerAdbTools(gw) {
56
56
  return { output: await adb(["install", "-r", resolved], i.serial) };
57
57
  },
58
58
  });
59
+ r.register({ name: "adb_uninstall", description: "Uninstall an app by package. Requires approval (risk 3).", risk: 3, inputSchema: dev.extend({ pkg: z.string() }), summarize: (i) => `adb uninstall ${i.pkg}`, handler: async (i) => ({ output: await adb(["uninstall", i.pkg], i.serial) }) });
60
+ r.register({ name: "adb_screen_size", description: "Get the device screen size.", risk: 0, inputSchema: dev, handler: async (i) => ({ output: await adb(["shell", "wm", "size"], i.serial) }) });
61
+ r.register({ name: "adb_current_package", description: "Get the current foreground package name.", risk: 0, inputSchema: dev, handler: async (i) => ({ output: await adb(["shell", "dumpsys", "window", "windows"], i.serial) }) });
62
+ r.register({ name: "adb_dump_ui", description: "Dump the current UI hierarchy (uiautomator).", risk: 1, inputSchema: dev, handler: async (i) => ({ output: await adb(["shell", "uiautomator", "dump", "/dev/tty"], i.serial) }) });
63
+ r.register({
64
+ name: "adb_pull",
65
+ description: "Pull a file from the device into the workspace directory. Risk 3.",
66
+ risk: 3,
67
+ inputSchema: dev.extend({ devicePath: z.string(), localName: z.string().optional() }),
68
+ summarize: (i) => `adb pull ${i.devicePath}`,
69
+ handler: async (i) => {
70
+ const dest = path.join(gw.paths.workspaceDir, i.localName ?? `adb-pull-${Date.now()}`);
71
+ gw.pathGuard.assertAccess(dest, "write");
72
+ return { output: await adb(["pull", i.devicePath, dest], i.serial), localPath: dest };
73
+ },
74
+ });
75
+ r.register({
76
+ name: "adb_push",
77
+ description: "Push a local file (inside an allowed directory) to the device. Risk 3.",
78
+ risk: 3,
79
+ inputSchema: dev.extend({ localPath: z.string(), devicePath: z.string() }),
80
+ summarize: (i) => `adb push ${i.localPath}`,
81
+ handler: async (i) => {
82
+ const resolved = gw.pathGuard.assertAccess(i.localPath, "read");
83
+ return { output: await adb(["push", resolved, i.devicePath], i.serial) };
84
+ },
85
+ });
86
+ r.register({
87
+ name: "adb_shell",
88
+ description: "Run an adb shell command. Dangerous commands (rm -rf, reboot, wipe, …) are rejected. Risk 3.",
89
+ risk: 3,
90
+ inputSchema: dev.extend({ command: z.string() }),
91
+ summarize: (i) => `adb shell ${i.command.slice(0, 60)}`,
92
+ handler: async (i) => {
93
+ const lower = i.command.toLowerCase();
94
+ const dangerous = ["rm -rf", "reboot", "wipe", "format", "dd ", "mkfs", "fastboot", "pm clear"];
95
+ if (dangerous.some((d) => lower.includes(d))) {
96
+ throw new Error(`adb_shell rejected: '${i.command}' contains a dangerous operation.`);
97
+ }
98
+ return { output: await adb(["shell", ...i.command.split(" ")], i.serial) };
99
+ },
100
+ });
59
101
  }
60
102
  //# sourceMappingURL=adb.js.map