sync-agents-settings 0.2.1 → 0.4.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/.claude-plugin/plugin.json +11 -0
- package/README.md +168 -23
- package/bin/sync-agents.cjs +0 -0
- package/commands/report-schema.md +25 -0
- package/commands/sync-diff.md +32 -0
- package/commands/sync-doctor.md +43 -0
- package/commands/sync-instructions.md +50 -0
- package/commands/sync-list.md +19 -0
- package/commands/sync-reconcile.md +41 -0
- package/commands/sync-validate.md +42 -0
- package/commands/sync.md +44 -0
- package/dist/backup.d.ts +1 -1
- package/dist/backup.js +4 -1
- package/dist/backup.js.map +1 -1
- package/dist/cli.js +542 -55
- package/dist/cli.js.map +1 -1
- package/dist/diff.d.ts +6 -0
- package/dist/diff.js +7 -0
- package/dist/diff.js.map +1 -0
- package/dist/doctor.d.ts +23 -0
- package/dist/doctor.js +140 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fix.d.ts +19 -0
- package/dist/fix.js +71 -0
- package/dist/fix.js.map +1 -0
- package/dist/instructions.d.ts +8 -1
- package/dist/instructions.js +370 -11
- package/dist/instructions.js.map +1 -1
- package/dist/oauth.d.ts +2 -0
- package/dist/oauth.js +7 -0
- package/dist/oauth.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +5 -0
- package/dist/paths.js.map +1 -1
- package/dist/reconcile.d.ts +27 -0
- package/dist/reconcile.js +122 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/report-parser.d.ts +81 -0
- package/dist/report-parser.js +129 -0
- package/dist/report-parser.js.map +1 -0
- package/dist/report-schema-renderer.d.ts +2 -0
- package/dist/report-schema-renderer.js +129 -0
- package/dist/report-schema-renderer.js.map +1 -0
- package/dist/report-schema-sync.d.ts +9 -0
- package/dist/report-schema-sync.js +28 -0
- package/dist/report-schema-sync.js.map +1 -0
- package/dist/report.d.ts +47 -0
- package/dist/report.js +55 -0
- package/dist/report.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/validation.d.ts +18 -0
- package/dist/validation.js +62 -0
- package/dist/validation.js.map +1 -0
- package/dist/writers/codex.js +12 -2
- package/dist/writers/codex.js.map +1 -1
- package/dist/writers/kimi.d.ts +7 -0
- package/dist/writers/kimi.js +25 -0
- package/dist/writers/kimi.js.map +1 -0
- package/package.json +7 -3
- package/skills/sync-awareness/SKILL.md +37 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { isOAuthOnlyServer } from "./oauth.js";
|
|
2
|
+
export function validateServersForTargets(servers, targets, options = {}) {
|
|
3
|
+
const issues = [];
|
|
4
|
+
const filtered = options.skipOAuth
|
|
5
|
+
? servers.filter((server) => !isOAuthOnlyServer(server))
|
|
6
|
+
: servers;
|
|
7
|
+
for (const target of targets) {
|
|
8
|
+
for (const server of filtered) {
|
|
9
|
+
if (isOAuthOnlyServer(server)) {
|
|
10
|
+
issues.push({
|
|
11
|
+
target,
|
|
12
|
+
server: server.name,
|
|
13
|
+
severity: "warning",
|
|
14
|
+
code: "OAUTH_MANUAL_SETUP_REQUIRED",
|
|
15
|
+
message: `${server.name} is OAuth-only and requires manual setup on ${target}.`,
|
|
16
|
+
});
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (server.transport === "stdio" && !hasText(server.command)) {
|
|
20
|
+
issues.push({
|
|
21
|
+
target,
|
|
22
|
+
server: server.name,
|
|
23
|
+
severity: "error",
|
|
24
|
+
code: "INVALID_STDIO_COMMAND_REQUIRED",
|
|
25
|
+
message: `${server.name} uses stdio transport but has no command.`,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if ((server.transport === "http" || server.transport === "sse") && !hasText(server.url)) {
|
|
29
|
+
issues.push({
|
|
30
|
+
target,
|
|
31
|
+
server: server.name,
|
|
32
|
+
severity: "error",
|
|
33
|
+
code: "INVALID_REMOTE_URL_REQUIRED",
|
|
34
|
+
message: `${server.name} uses ${server.transport} transport but has no url.`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (target === "codex" &&
|
|
38
|
+
(server.transport === "http" || server.transport === "sse") &&
|
|
39
|
+
hasUnsupportedCodexHeaders(server.headers)) {
|
|
40
|
+
issues.push({
|
|
41
|
+
target,
|
|
42
|
+
server: server.name,
|
|
43
|
+
severity: "warning",
|
|
44
|
+
code: "CODEX_UNSUPPORTED_HEADERS",
|
|
45
|
+
message: `${server.name} has headers not supported by Codex (only Authorization is mapped).`,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const errorCount = issues.filter((issue) => issue.severity === "error").length;
|
|
51
|
+
const warningCount = issues.length - errorCount;
|
|
52
|
+
return { issues, errorCount, warningCount };
|
|
53
|
+
}
|
|
54
|
+
function hasUnsupportedCodexHeaders(headers) {
|
|
55
|
+
if (!headers)
|
|
56
|
+
return false;
|
|
57
|
+
return Object.keys(headers).some((key) => key.toLowerCase() !== "authorization");
|
|
58
|
+
}
|
|
59
|
+
function hasText(value) {
|
|
60
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/writers/codex.js
CHANGED
|
@@ -75,8 +75,8 @@ function toCodexServer(server) {
|
|
|
75
75
|
url: expandEnvVars(server.url),
|
|
76
76
|
};
|
|
77
77
|
// Extract bearer token env var from Authorization header
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
const auth = getAuthorizationHeaderValue(server.headers);
|
|
79
|
+
if (auth) {
|
|
80
80
|
const envMatch = auth.match(/\$\{?(\w+)\}?/);
|
|
81
81
|
if (envMatch?.[1]) {
|
|
82
82
|
result.bearer_token_env_var = envMatch[1];
|
|
@@ -86,4 +86,14 @@ function toCodexServer(server) {
|
|
|
86
86
|
}
|
|
87
87
|
return null;
|
|
88
88
|
}
|
|
89
|
+
function getAuthorizationHeaderValue(headers) {
|
|
90
|
+
if (!headers)
|
|
91
|
+
return undefined;
|
|
92
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
93
|
+
if (key.toLowerCase() === "authorization") {
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
89
99
|
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/writers/codex.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/writers/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UnifiedMcpServer } from "../types.js";
|
|
2
|
+
export declare function resolveKimiMcpConfigPath(kimiHome?: string): string;
|
|
3
|
+
export declare function writeToKimi(servers: UnifiedMcpServer[], dryRun: boolean, kimiHome?: string): {
|
|
4
|
+
added: string[];
|
|
5
|
+
skipped: string[];
|
|
6
|
+
configPath: string;
|
|
7
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { writeClaudeFormat } from "./claude-format.js";
|
|
5
|
+
const DEFAULT_KIMI_HOME = join(homedir(), ".kimi");
|
|
6
|
+
export function resolveKimiMcpConfigPath(kimiHome) {
|
|
7
|
+
const dir = resolve(kimiHome ?? DEFAULT_KIMI_HOME);
|
|
8
|
+
return join(dir, "mcp.json");
|
|
9
|
+
}
|
|
10
|
+
export function writeToKimi(servers, dryRun, kimiHome) {
|
|
11
|
+
const configPath = resolveKimiMcpConfigPath(kimiHome);
|
|
12
|
+
const kimiDir = dirname(configPath);
|
|
13
|
+
if (!existsSync(kimiDir)) {
|
|
14
|
+
return {
|
|
15
|
+
added: [],
|
|
16
|
+
skipped: [
|
|
17
|
+
`all ${servers.length} server(s) (${kimiDir} does not exist, please install Kimi CLI or use --kimi-home)`,
|
|
18
|
+
],
|
|
19
|
+
configPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const result = writeClaudeFormat(servers, dryRun, configPath, "Kimi CLI");
|
|
23
|
+
return { ...result, configPath };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=kimi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/writers/kimi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAEnD,MAAM,UAAU,wBAAwB,CAAC,QAAiB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAA2B,EAC3B,MAAe,EACf,QAAiB;IAEjB,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,EAAE;YACT,OAAO,EAAE;gBACP,OAAO,OAAO,CAAC,MAAM,eAAe,OAAO,8DAA8D;aAC1G;YACD,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1E,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sync-agents-settings",
|
|
3
3
|
"packageManager": "pnpm@10.32.1",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "Sync MCP server configurations and instruction files from Claude Code to Gemini CLI, Codex CLI, OpenCode, Kiro CLI, and
|
|
4
|
+
"version": "0.4.0",
|
|
5
|
+
"description": "Sync MCP server configurations and instruction files from Claude Code to Gemini CLI, Codex CLI, OpenCode, Kiro CLI, Cursor, and Kimi CLI",
|
|
6
6
|
"main": "dist/cli.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"sync-agents-settings": "bin/sync-agents.cjs",
|
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
"dist",
|
|
13
13
|
"bin",
|
|
14
|
-
"!dist/__tests__"
|
|
14
|
+
"!dist/__tests__",
|
|
15
|
+
".claude-plugin",
|
|
16
|
+
"commands",
|
|
17
|
+
"skills"
|
|
15
18
|
],
|
|
16
19
|
"scripts": {
|
|
17
20
|
"dev": "tsx src/cli.ts",
|
|
@@ -37,6 +40,7 @@
|
|
|
37
40
|
"opencode",
|
|
38
41
|
"kiro",
|
|
39
42
|
"cursor",
|
|
43
|
+
"kimi",
|
|
40
44
|
"sync",
|
|
41
45
|
"ai-agent",
|
|
42
46
|
"mcp-servers",
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sync-awareness
|
|
3
|
+
description: "Suggest syncing MCP server configurations or instruction files to other AI coding agents when the user is editing MCP settings (.claude.json, .mcp.json) or modifying CLAUDE.md files. Available commands: /sync, /sync-list, /sync-diff, /sync-instructions."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Sync Awareness
|
|
8
|
+
|
|
9
|
+
When you detect that the user is working with MCP server configurations or CLAUDE.md instruction files, suggest syncing to other AI agents.
|
|
10
|
+
|
|
11
|
+
## When to Suggest
|
|
12
|
+
|
|
13
|
+
### MCP Config Context
|
|
14
|
+
|
|
15
|
+
If the conversation involves editing or discussing `.claude.json` or `.mcp.json` files (specifically the `mcpServers` section):
|
|
16
|
+
|
|
17
|
+
> You're working with MCP server settings. Want to sync to other AI agents? Use `/sync` to sync, or `/sync-diff` to check differences first.
|
|
18
|
+
|
|
19
|
+
### CLAUDE.md Context
|
|
20
|
+
|
|
21
|
+
If the conversation involves editing or discussing `CLAUDE.md` files:
|
|
22
|
+
|
|
23
|
+
> You're updating CLAUDE.md. Want to sync instructions to other AI agents? Use `/sync-instructions` to sync.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **Suggest only once** per relevant context. Do not repeat the suggestion if the user has already seen it or dismissed it.
|
|
28
|
+
- **Never auto-execute** sync commands. Only suggest them.
|
|
29
|
+
- **Keep it brief** — one or two sentences maximum.
|
|
30
|
+
- **Do not suggest** if the user is already using one of the sync commands.
|
|
31
|
+
|
|
32
|
+
## Available Commands
|
|
33
|
+
|
|
34
|
+
- `/sync` — Sync MCP server configs to other agents
|
|
35
|
+
- `/sync-list` — List all MCP servers in Claude Code
|
|
36
|
+
- `/sync-diff` — Compare MCP configs between Claude and other agents
|
|
37
|
+
- `/sync-instructions` — Sync CLAUDE.md to other agent instruction formats
|