sync-agents-settings 0.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.
@@ -0,0 +1,76 @@
1
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { PATHS } from "../paths.js";
4
+ import { expandEnvVars } from "../env.js";
5
+ export function writeToOpenCode(servers, dryRun) {
6
+ const added = [];
7
+ const skipped = [];
8
+ // Check if OpenCode config directory exists
9
+ const openCodeDir = dirname(PATHS.openCodeConfig);
10
+ if (!existsSync(openCodeDir)) {
11
+ return {
12
+ added: [],
13
+ skipped: [
14
+ `all ${servers.length} server(s) (${openCodeDir} does not exist, please install OpenCode first)`,
15
+ ],
16
+ };
17
+ }
18
+ // Read existing OpenCode config
19
+ let config = {};
20
+ if (existsSync(PATHS.openCodeConfig)) {
21
+ const raw = readFileSync(PATHS.openCodeConfig, "utf-8");
22
+ if (raw.trim()) {
23
+ config = JSON.parse(raw);
24
+ }
25
+ }
26
+ const existing = config.mcp ?? {};
27
+ for (const server of servers) {
28
+ // Skip OAuth-only servers (need manual auth)
29
+ if (server.oauth && !server.command && !server.url) {
30
+ skipped.push(`${server.name} (requires manual OAuth)`);
31
+ continue;
32
+ }
33
+ const openCodeServer = toOpenCodeServer(server);
34
+ if (!openCodeServer) {
35
+ skipped.push(`${server.name} (cannot convert)`);
36
+ continue;
37
+ }
38
+ // Don't overwrite existing config
39
+ if (existing[server.name]) {
40
+ skipped.push(`${server.name} (already exists)`);
41
+ continue;
42
+ }
43
+ existing[server.name] = openCodeServer;
44
+ added.push(server.name);
45
+ }
46
+ config.mcp = existing;
47
+ if (!dryRun && added.length > 0) {
48
+ writeFileSync(PATHS.openCodeConfig, JSON.stringify(config, null, 2) + "\n");
49
+ }
50
+ return { added, skipped };
51
+ }
52
+ function toOpenCodeServer(server) {
53
+ if (server.transport === "stdio" && server.command) {
54
+ const command = [server.command, ...(server.args ?? [])];
55
+ const result = {
56
+ type: "local",
57
+ command,
58
+ };
59
+ if (server.env) {
60
+ result.environment = server.env;
61
+ }
62
+ return result;
63
+ }
64
+ if ((server.transport === "http" || server.transport === "sse") && server.url) {
65
+ const result = {
66
+ type: "remote",
67
+ url: expandEnvVars(server.url),
68
+ };
69
+ if (server.headers) {
70
+ result.headers = server.headers;
71
+ }
72
+ return result;
73
+ }
74
+ return null;
75
+ }
76
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/writers/opencode.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "sync-agents-settings",
3
+ "packageManager": "pnpm@10.32.1",
4
+ "version": "0.1.0",
5
+ "description": "Sync MCP server configurations from Claude Code to Gemini CLI and Codex CLI",
6
+ "main": "dist/cli.js",
7
+ "bin": {
8
+ "sync-agents": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "!dist/__tests__"
13
+ ],
14
+ "scripts": {
15
+ "dev": "tsx src/cli.ts",
16
+ "build": "tsc",
17
+ "start": "node dist/cli.js",
18
+ "lint": "eslint src/",
19
+ "format": "prettier --write \"src/**/*.ts\"",
20
+ "format:check": "prettier --check \"src/**/*.ts\"",
21
+ "test": "vitest run",
22
+ "test:coverage": "vitest run --coverage",
23
+ "test:watch": "vitest",
24
+ "prepublishOnly": "pnpm build"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/Leoyang183/sync-agents-settings.git"
29
+ },
30
+ "keywords": [
31
+ "mcp",
32
+ "claude-code",
33
+ "gemini-cli",
34
+ "codex-cli",
35
+ "sync",
36
+ "agent",
37
+ "settings"
38
+ ],
39
+ "author": "Leoyang183",
40
+ "license": "MIT",
41
+ "type": "module",
42
+ "engines": {
43
+ "node": ">=18"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/Leoyang183/sync-agents-settings/issues"
47
+ },
48
+ "homepage": "https://github.com/Leoyang183/sync-agents-settings#readme",
49
+ "dependencies": {
50
+ "@iarna/toml": "^2.2.5",
51
+ "commander": "^14.0.3"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^25.5.0",
55
+ "@vitest/coverage-v8": "^4.1.0",
56
+ "chalk": "^5.6.2",
57
+ "eslint": "^10.0.3",
58
+ "prettier": "^3.8.1",
59
+ "tsx": "^4.21.0",
60
+ "typescript": "^5.9.3",
61
+ "typescript-eslint": "^8.57.1",
62
+ "vitest": "^4.1.0"
63
+ }
64
+ }