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.
Files changed (60) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/README.md +168 -23
  3. package/bin/sync-agents.cjs +0 -0
  4. package/commands/report-schema.md +25 -0
  5. package/commands/sync-diff.md +32 -0
  6. package/commands/sync-doctor.md +43 -0
  7. package/commands/sync-instructions.md +50 -0
  8. package/commands/sync-list.md +19 -0
  9. package/commands/sync-reconcile.md +41 -0
  10. package/commands/sync-validate.md +42 -0
  11. package/commands/sync.md +44 -0
  12. package/dist/backup.d.ts +1 -1
  13. package/dist/backup.js +4 -1
  14. package/dist/backup.js.map +1 -1
  15. package/dist/cli.js +542 -55
  16. package/dist/cli.js.map +1 -1
  17. package/dist/diff.d.ts +6 -0
  18. package/dist/diff.js +7 -0
  19. package/dist/diff.js.map +1 -0
  20. package/dist/doctor.d.ts +23 -0
  21. package/dist/doctor.js +140 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/fix.d.ts +19 -0
  24. package/dist/fix.js +71 -0
  25. package/dist/fix.js.map +1 -0
  26. package/dist/instructions.d.ts +8 -1
  27. package/dist/instructions.js +370 -11
  28. package/dist/instructions.js.map +1 -1
  29. package/dist/oauth.d.ts +2 -0
  30. package/dist/oauth.js +7 -0
  31. package/dist/oauth.js.map +1 -0
  32. package/dist/paths.d.ts +4 -0
  33. package/dist/paths.js +5 -0
  34. package/dist/paths.js.map +1 -1
  35. package/dist/reconcile.d.ts +27 -0
  36. package/dist/reconcile.js +122 -0
  37. package/dist/reconcile.js.map +1 -0
  38. package/dist/report-parser.d.ts +81 -0
  39. package/dist/report-parser.js +129 -0
  40. package/dist/report-parser.js.map +1 -0
  41. package/dist/report-schema-renderer.d.ts +2 -0
  42. package/dist/report-schema-renderer.js +129 -0
  43. package/dist/report-schema-renderer.js.map +1 -0
  44. package/dist/report-schema-sync.d.ts +9 -0
  45. package/dist/report-schema-sync.js +28 -0
  46. package/dist/report-schema-sync.js.map +1 -0
  47. package/dist/report.d.ts +47 -0
  48. package/dist/report.js +55 -0
  49. package/dist/report.js.map +1 -0
  50. package/dist/types.d.ts +1 -1
  51. package/dist/validation.d.ts +18 -0
  52. package/dist/validation.js +62 -0
  53. package/dist/validation.js.map +1 -0
  54. package/dist/writers/codex.js +12 -2
  55. package/dist/writers/codex.js.map +1 -1
  56. package/dist/writers/kimi.d.ts +7 -0
  57. package/dist/writers/kimi.js +25 -0
  58. package/dist/writers/kimi.js.map +1 -0
  59. package/package.json +7 -3
  60. 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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"}
@@ -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
- if (server.headers?.["Authorization"]) {
79
- const auth = server.headers["Authorization"];
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.2.1",
5
- "description": "Sync MCP server configurations and instruction files from Claude Code to Gemini CLI, Codex CLI, OpenCode, Kiro CLI, and Cursor",
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