@birdmichael/ccsync 1.0.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 (146) hide show
  1. package/README.md +241 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +5 -0
  6. package/dist/commands/config.d.ts +18 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +111 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/dashboard.d.ts +9 -0
  11. package/dist/commands/dashboard.d.ts.map +1 -0
  12. package/dist/commands/dashboard.js +51 -0
  13. package/dist/commands/dashboard.js.map +1 -0
  14. package/dist/commands/hello/index.d.ts +13 -0
  15. package/dist/commands/hello/index.d.ts.map +1 -0
  16. package/dist/commands/hello/index.js +20 -0
  17. package/dist/commands/hello/index.js.map +1 -0
  18. package/dist/commands/hello/world.d.ts +9 -0
  19. package/dist/commands/hello/world.d.ts.map +1 -0
  20. package/dist/commands/hello/world.js +15 -0
  21. package/dist/commands/hello/world.js.map +1 -0
  22. package/dist/commands/logs.d.ts +16 -0
  23. package/dist/commands/logs.d.ts.map +1 -0
  24. package/dist/commands/logs.js +101 -0
  25. package/dist/commands/logs.js.map +1 -0
  26. package/dist/commands/menu.d.ts +13 -0
  27. package/dist/commands/menu.d.ts.map +1 -0
  28. package/dist/commands/menu.js +190 -0
  29. package/dist/commands/menu.js.map +1 -0
  30. package/dist/commands/setup.d.ts +7 -0
  31. package/dist/commands/setup.d.ts.map +1 -0
  32. package/dist/commands/setup.js +270 -0
  33. package/dist/commands/setup.js.map +1 -0
  34. package/dist/commands/start.d.ts +7 -0
  35. package/dist/commands/start.d.ts.map +1 -0
  36. package/dist/commands/start.js +16 -0
  37. package/dist/commands/start.js.map +1 -0
  38. package/dist/commands/status.d.ts +3 -0
  39. package/dist/commands/status.d.ts.map +1 -0
  40. package/dist/commands/status.js +63 -0
  41. package/dist/commands/status.js.map +1 -0
  42. package/dist/commands/stop.d.ts +7 -0
  43. package/dist/commands/stop.d.ts.map +1 -0
  44. package/dist/commands/stop.js +16 -0
  45. package/dist/commands/stop.js.map +1 -0
  46. package/dist/commands/sync.d.ts +7 -0
  47. package/dist/commands/sync.d.ts.map +1 -0
  48. package/dist/commands/sync.js +33 -0
  49. package/dist/commands/sync.js.map +1 -0
  50. package/dist/commands/test.d.ts +8 -0
  51. package/dist/commands/test.d.ts.map +1 -0
  52. package/dist/commands/test.js +27 -0
  53. package/dist/commands/test.js.map +1 -0
  54. package/dist/commands/toggle.d.ts +7 -0
  55. package/dist/commands/toggle.d.ts.map +1 -0
  56. package/dist/commands/toggle.js +22 -0
  57. package/dist/commands/toggle.js.map +1 -0
  58. package/dist/core/config-manager.d.ts +19 -0
  59. package/dist/core/config-manager.d.ts.map +1 -0
  60. package/dist/core/config-manager.js +174 -0
  61. package/dist/core/config-manager.js.map +1 -0
  62. package/dist/core/launch-agent.d.ts +12 -0
  63. package/dist/core/launch-agent.d.ts.map +1 -0
  64. package/dist/core/launch-agent.js +89 -0
  65. package/dist/core/launch-agent.js.map +1 -0
  66. package/dist/core/permission-manager.d.ts +18 -0
  67. package/dist/core/permission-manager.d.ts.map +1 -0
  68. package/dist/core/permission-manager.js +94 -0
  69. package/dist/core/permission-manager.js.map +1 -0
  70. package/dist/core/service-manager.d.ts +33 -0
  71. package/dist/core/service-manager.d.ts.map +1 -0
  72. package/dist/core/service-manager.js +108 -0
  73. package/dist/core/service-manager.js.map +1 -0
  74. package/dist/core/sync-service.d.ts +29 -0
  75. package/dist/core/sync-service.d.ts.map +1 -0
  76. package/dist/core/sync-service.js +180 -0
  77. package/dist/core/sync-service.js.map +1 -0
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +2 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/syncers/base-syncer.d.ts +5 -0
  83. package/dist/syncers/base-syncer.d.ts.map +1 -0
  84. package/dist/syncers/base-syncer.js +3 -0
  85. package/dist/syncers/base-syncer.js.map +1 -0
  86. package/dist/syncers/mcp-syncer.d.ts +16 -0
  87. package/dist/syncers/mcp-syncer.d.ts.map +1 -0
  88. package/dist/syncers/mcp-syncer.js +116 -0
  89. package/dist/syncers/mcp-syncer.js.map +1 -0
  90. package/dist/syncers/skills-syncer.d.ts +13 -0
  91. package/dist/syncers/skills-syncer.d.ts.map +1 -0
  92. package/dist/syncers/skills-syncer.js +153 -0
  93. package/dist/syncers/skills-syncer.js.map +1 -0
  94. package/dist/types/config.d.ts +53 -0
  95. package/dist/types/config.d.ts.map +1 -0
  96. package/dist/types/config.js +33 -0
  97. package/dist/types/config.js.map +1 -0
  98. package/dist/types/mcp.d.ts +20 -0
  99. package/dist/types/mcp.d.ts.map +1 -0
  100. package/dist/types/mcp.js +3 -0
  101. package/dist/types/mcp.js.map +1 -0
  102. package/dist/types/sync.d.ts +44 -0
  103. package/dist/types/sync.d.ts.map +1 -0
  104. package/dist/types/sync.js +3 -0
  105. package/dist/types/sync.js.map +1 -0
  106. package/dist/types/ui.d.ts +263 -0
  107. package/dist/types/ui.d.ts.map +1 -0
  108. package/dist/types/ui.js +3 -0
  109. package/dist/types/ui.js.map +1 -0
  110. package/dist/ui/config/index.d.ts +12 -0
  111. package/dist/ui/config/index.d.ts.map +1 -0
  112. package/dist/ui/config/index.js +43 -0
  113. package/dist/ui/config/index.js.map +1 -0
  114. package/dist/ui/dashboard/index.d.ts +14 -0
  115. package/dist/ui/dashboard/index.d.ts.map +1 -0
  116. package/dist/ui/dashboard/index.js +90 -0
  117. package/dist/ui/dashboard/index.js.map +1 -0
  118. package/dist/ui/error/index.d.ts +13 -0
  119. package/dist/ui/error/index.d.ts.map +1 -0
  120. package/dist/ui/error/index.js +27 -0
  121. package/dist/ui/error/index.js.map +1 -0
  122. package/dist/ui/setup/index.d.ts +11 -0
  123. package/dist/ui/setup/index.d.ts.map +1 -0
  124. package/dist/ui/setup/index.js +18 -0
  125. package/dist/ui/setup/index.js.map +1 -0
  126. package/dist/utils/error-handler.d.ts +21 -0
  127. package/dist/utils/error-handler.d.ts.map +1 -0
  128. package/dist/utils/error-handler.js +178 -0
  129. package/dist/utils/error-handler.js.map +1 -0
  130. package/dist/utils/file-watcher.d.ts +17 -0
  131. package/dist/utils/file-watcher.d.ts.map +1 -0
  132. package/dist/utils/file-watcher.js +92 -0
  133. package/dist/utils/file-watcher.js.map +1 -0
  134. package/dist/utils/logger.d.ts +14 -0
  135. package/dist/utils/logger.d.ts.map +1 -0
  136. package/dist/utils/logger.js +72 -0
  137. package/dist/utils/logger.js.map +1 -0
  138. package/dist/utils/texts.d.ts +263 -0
  139. package/dist/utils/texts.d.ts.map +1 -0
  140. package/dist/utils/texts.js +270 -0
  141. package/dist/utils/texts.js.map +1 -0
  142. package/dist/utils/time-helper.d.ts +8 -0
  143. package/dist/utils/time-helper.d.ts.map +1 -0
  144. package/dist/utils/time-helper.js +67 -0
  145. package/dist/utils/time-helper.js.map +1 -0
  146. package/package.json +79 -0
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { serviceManager } from '../core/service-manager';
4
+ import { TEXTS } from '../utils/texts';
5
+ export default class Start extends Command {
6
+ static description = TEXTS.commands.start;
7
+ async run() {
8
+ try {
9
+ await serviceManager.start();
10
+ }
11
+ catch (error) {
12
+ this.error(`启动失败:${error instanceof Error ? error.message : String(error)}`);
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAE1C,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { configManager } from '../core/config-manager';
4
+ import { TEXTS } from '../utils/texts';
5
+ import { formatUptime } from '../utils/time-helper';
6
+ class Status extends Command {
7
+ static description = TEXTS.commands.status;
8
+ async run() {
9
+ const config = configManager.getConfig();
10
+ console.log('');
11
+ console.log('┌──────────────────────────────────────┐');
12
+ console.log('│' + TEXTS.status.title + ' '.repeat(34) + '│');
13
+ console.log('├──────────────────────────────────────┤');
14
+ console.log('');
15
+ // 服务状态
16
+ const serviceStatus = config.service.running ? '● ' : '○ ';
17
+ const statusText = config.service.running ? TEXTS.status.running : TEXTS.status.stopped;
18
+ console.log('│ 服务:' + serviceStatus + ' ' + statusText);
19
+ if (config.service.running && config.service.pid) {
20
+ console.log('│ ' + TEXTS.status.pid + ':' + config.service.pid + ' '.repeat(28) + '│');
21
+ }
22
+ if (config.service.uptime) {
23
+ console.log('│ ' + TEXTS.status.uptime + ':' + formatUptime(config.service.uptime) + ' '.repeat(22) + '│');
24
+ }
25
+ console.log('');
26
+ console.log('├─────────────────────────────────────────────┤');
27
+ // Skills 状态
28
+ console.log('│ ' + TEXTS.status.skills + ':' + TEXTS.status.synced + ' ' + (config.skills ? config.skills.count : 0));
29
+ if (config.skills && config.skills.claude) {
30
+ console.log('│ └─ ' + TEXTS.dashboard.skills.claudeSkills + ':' + config.skills.claude.length + ' 个 Skills' + ' '.repeat(18) + '│');
31
+ }
32
+ if (config.skills && config.skills.codex) {
33
+ console.log('│ └─ ' + TEXTS.dashboard.skills.codexSkills + ':' + config.skills.codex.length + ' 个 Skills' + ' '.repeat(17) + '│');
34
+ }
35
+ console.log('');
36
+ console.log('├─────────────────────────────────────────────┤');
37
+ // MCP 状态
38
+ console.log('│ ' + TEXTS.status.mcp + ':' + TEXTS.status.synced + ' ' + (config.mcp ? config.mcp.count : 0));
39
+ if (config.mcp && config.mcp.platforms) {
40
+ for (const [platform, data] of Object.entries(config.mcp.platforms)) {
41
+ const platformStatus = data.enabled ? '✓' : '✗';
42
+ console.log('│ ' + platform + ' ' + platformStatus + ' ' + data.count + TEXTS.dashboard.mcp.serversSynced + ' '.repeat(19) + '│');
43
+ }
44
+ }
45
+ console.log('');
46
+ console.log('├─────────────────────────────────────────────┤');
47
+ // 设置
48
+ console.log('│ ' + TEXTS.dashboard.settings.section);
49
+ console.log('│ ' + TEXTS.dashboard.settings.syncInterval + ':' + config.service.interval + TEXTS.dashboard.settings.seconds);
50
+ console.log('│ ' + TEXTS.dashboard.settings.autostart + ':' + (config.autostart.enabled ? '✓' : '✗'));
51
+ console.log('│ ' + TEXTS.dashboard.settings.logLevel + ':' + config.service.logLevel);
52
+ console.log('├─────────────────────────────────────────────┤');
53
+ // 错误
54
+ const errors = config.errors || 0;
55
+ console.log('│ ' + TEXTS.status.errors + ':' + errors);
56
+ console.log('├─────────────────────────────────────────────┤');
57
+ console.log('│ ' + TEXTS.status.tip + ' ' + TEXTS.status.forOptions);
58
+ console.log('');
59
+ console.log('└──────────────────────────────────────────────┘');
60
+ console.log('');
61
+ }
62
+ }
63
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Stop extends Command {
4
+ static description: "停止 ccsync 同步服务";
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,mBAAuB;IAEnC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3B"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { serviceManager } from '../core/service-manager';
4
+ import { TEXTS } from '../utils/texts';
5
+ export default class Stop extends Command {
6
+ static description = TEXTS.commands.stop;
7
+ async run() {
8
+ try {
9
+ await serviceManager.stop();
10
+ }
11
+ catch (error) {
12
+ this.error(`停止失败:${error instanceof Error ? error.message : String(error)}`);
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IAEzC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Sync extends Command {
4
+ static description: "手动触发一次同步";
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,aAAuB;IAEnC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { serviceManager } from '../core/service-manager';
4
+ import { TEXTS } from '../utils/texts';
5
+ export default class Sync extends Command {
6
+ static description = TEXTS.commands.sync;
7
+ async run() {
8
+ try {
9
+ this.log('开始同步...');
10
+ const result = await serviceManager.sync();
11
+ this.log('');
12
+ this.log('同步结果:');
13
+ this.log(` Skills:${result.skills.synced} 个已同步`);
14
+ this.log(` MCP:${result.mcp.synced} 个已同步`);
15
+ this.log(` 耗时:${result.duration}ms`);
16
+ const totalErrors = result.skills.errors.length + result.mcp.errors.length;
17
+ if (totalErrors > 0) {
18
+ this.log('');
19
+ this.log(`错误:${totalErrors} 个`);
20
+ for (const [index, err] of result.skills.errors.entries()) {
21
+ this.log(` ${index + 1}. ${err}`);
22
+ }
23
+ for (const [index, err] of result.mcp.errors.entries()) {
24
+ this.log(` ${result.skills.errors.length + index + 1}. ${err}`);
25
+ }
26
+ }
27
+ }
28
+ catch (error) {
29
+ this.error(`同步失败:${error instanceof Error ? error.message : String(error)}`);
30
+ }
31
+ }
32
+ }
33
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IAEzC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAE3C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YAEtC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,IAAI,CAAC,CAAC;gBAChC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAED,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBACvD,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Test extends Command {
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
7
+ export { Test };
8
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAAY;IAExB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Test extends Command {
4
+ static description = '测试基本功能';
5
+ async run() {
6
+ try {
7
+ this.log('开始测试...');
8
+ // 测试 1:读取配置
9
+ this.log('测试 1:读取配置文件...');
10
+ const { configManager } = await import('../core/config-manager');
11
+ const config = configManager.getConfig();
12
+ this.log(`✓ 配置已加载`);
13
+ // 测试 2:显示配置
14
+ this.log('测试 2:显示配置...');
15
+ console.log(JSON.stringify(config, null, 2));
16
+ // 测试 3:编译检查
17
+ this.log('测试 3:检查 TypeScript 编译...');
18
+ console.log('✓ 项目结构正确');
19
+ this.log('所有测试通过!');
20
+ }
21
+ catch (error) {
22
+ this.error(`测试失败: ${error instanceof Error ? error.message : String(error)}`);
23
+ }
24
+ }
25
+ }
26
+ export { Test };
27
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;IAE9B,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpB,YAAY;YACZ,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpB,YAAY;YACZ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE7C,YAAY;YACZ,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAExB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;;AAGH,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Toggle extends Command {
4
+ static description: "切换 ccsync 同步服务状态(启动/停止)";
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,4BAAyB;IAErC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAY3B"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { serviceManager } from '../core/service-manager';
4
+ import { TEXTS } from '../utils/texts';
5
+ export default class Toggle extends Command {
6
+ static description = TEXTS.commands.toggle;
7
+ async run() {
8
+ try {
9
+ const isRunning = await serviceManager.toggle();
10
+ if (isRunning) {
11
+ this.log('服务已启动');
12
+ }
13
+ else {
14
+ this.log('服务已停止');
15
+ }
16
+ }
17
+ catch (error) {
18
+ this.error(`切换失败:${error instanceof Error ? error.message : String(error)}`);
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../src/commands/toggle.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAE3C,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { SyncConfig } from '../types/config';
2
+ declare class ConfigManager {
3
+ private config;
4
+ constructor();
5
+ get<T>(path: string): T;
6
+ getConfig(): SyncConfig;
7
+ saveConfig(): void;
8
+ set<T>(path: string, value: T): void;
9
+ validate(config: any): {
10
+ errors: string[];
11
+ valid: boolean;
12
+ };
13
+ private fixConfig;
14
+ private loadConfig;
15
+ private saveDefaultConfig;
16
+ }
17
+ export declare const configManager: ConfigManager;
18
+ export {};
19
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAO7D,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAa;;IAM3B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAevB,SAAS,IAAI,UAAU;IAIvB,UAAU,IAAI,IAAI;IAYlB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAkBpC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;KAAE;IAkE5D,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,iBAAiB;CAM1B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,174 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import yaml from 'yaml';
4
+ import { DEFAULT_CONFIG } from '../types/config';
5
+ import { logger } from '../utils/logger';
6
+ import { expandPath, getHomeDir } from '../utils/time-helper';
7
+ const CONFIG_DIR = path.join(getHomeDir(), '.config', 'ccsync');
8
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.yaml');
9
+ class ConfigManager {
10
+ config;
11
+ constructor() {
12
+ this.config = this.loadConfig();
13
+ }
14
+ get(path) {
15
+ const keys = path.split('.');
16
+ let value = this.config;
17
+ for (const key of keys) {
18
+ if (value && typeof value === 'object' && key in value) {
19
+ value = value[key];
20
+ }
21
+ else {
22
+ return undefined;
23
+ }
24
+ }
25
+ return value;
26
+ }
27
+ getConfig() {
28
+ return this.config;
29
+ }
30
+ saveConfig() {
31
+ try {
32
+ const yamlContent = yaml.stringify(this.config);
33
+ fs.ensureDirSync(CONFIG_DIR);
34
+ fs.writeFileSync(CONFIG_FILE, yamlContent, 'utf-8');
35
+ logger.debug('配置已保存');
36
+ }
37
+ catch (error) {
38
+ logger.error('保存配置失败', { error: error instanceof Error ? error.message : String(error) });
39
+ throw error;
40
+ }
41
+ }
42
+ set(path, value) {
43
+ const keys = path.split('.');
44
+ let { config } = this;
45
+ for (let i = 0; i < keys.length - 1; i++) {
46
+ const key = keys[i];
47
+ if (config && typeof config === 'object' && key in config) {
48
+ config = config[key];
49
+ }
50
+ else {
51
+ throw new Error(`无效的配置路径:${path}`);
52
+ }
53
+ }
54
+ config[keys.at(-1)] = value;
55
+ this.config = config;
56
+ this.saveConfig();
57
+ }
58
+ validate(config) {
59
+ const errors = [];
60
+ // 验证服务配置
61
+ if (config.service) {
62
+ if (!config.service.interval || config.service.interval < 5) {
63
+ errors.push('同步间隔必须至少 5 秒');
64
+ }
65
+ if (!['debug', 'error', 'info', 'warn'].includes(config.service.logLevel)) {
66
+ errors.push('无效的日志级别');
67
+ }
68
+ }
69
+ // 验证 Skills 配置
70
+ if (config.sync && config.sync.skills) {
71
+ if (typeof config.sync.skills.sources !== 'object') {
72
+ errors.push('Skills sources 必须是对象');
73
+ }
74
+ if (config.sync.skills.sources.claude === undefined || config.sync.skills.sources.codex === undefined) {
75
+ errors.push('必须至少选择一个 Skills 来源');
76
+ }
77
+ if (!config.sync.skills.target) {
78
+ errors.push('必须指定 Skills 目标目录');
79
+ }
80
+ }
81
+ // 验证 MCP 配置
82
+ if (config.sync && config.sync.mcp) {
83
+ if (typeof config.sync.mcp.platforms !== 'object' || !Array.isArray(config.sync.mcp.platforms)) {
84
+ errors.push('MCP platforms 必须是数组');
85
+ }
86
+ if (config.sync.mcp.platforms.length === 0) {
87
+ errors.push('必须至少选择一个 MCP 平台');
88
+ }
89
+ const validPlatforms = new Set(['all', 'claude', 'codex', 'gemini']);
90
+ for (const platform of config.sync.mcp.platforms) {
91
+ if (!validPlatforms.has(platform)) {
92
+ errors.push(`无效的 MCP 平台:${platform}`);
93
+ }
94
+ }
95
+ if (!config.sync.mcp.dbPath) {
96
+ errors.push('必须指定 MCP 数据库路径');
97
+ }
98
+ if (!config.sync.mcp.target) {
99
+ errors.push('必须指定 OpenCode 配置文件路径');
100
+ }
101
+ }
102
+ // 验证开机启动配置
103
+ if (config.autostart && typeof config.autostart.enabled !== 'boolean') {
104
+ errors.push('autostart.enabled 必须是布尔值');
105
+ }
106
+ return {
107
+ errors,
108
+ valid: errors.length === 0,
109
+ };
110
+ }
111
+ fixConfig(config) {
112
+ const fixed = JSON.parse(JSON.stringify(config));
113
+ // 修复 Skills sources
114
+ if (config.sync && config.sync.skills) {
115
+ if (typeof fixed.sync.skills.sources !== 'object') {
116
+ fixed.sync.skills.sources = DEFAULT_CONFIG.sync.skills.sources;
117
+ }
118
+ if (fixed.sync.skills.sources.claude === undefined) {
119
+ fixed.sync.skills.sources.claude = DEFAULT_CONFIG.sync.skills.sources.claude;
120
+ }
121
+ if (fixed.sync.skills.sources.codex === undefined) {
122
+ fixed.sync.skills.sources.codex = DEFAULT_CONFIG.sync.skills.sources.codex;
123
+ }
124
+ }
125
+ // 修复 MCP platforms
126
+ if (config.sync && config.sync.mcp) {
127
+ if (!Array.isArray(fixed.sync.mcp.platforms)) {
128
+ fixed.sync.mcp.platforms = DEFAULT_CONFIG.sync.mcp.platforms;
129
+ }
130
+ if (fixed.sync.mcp.platforms.length === 0) {
131
+ fixed.sync.mcp.platforms = DEFAULT_CONFIG.sync.mcp.platforms;
132
+ }
133
+ }
134
+ return fixed;
135
+ }
136
+ loadConfig() {
137
+ const configPath = expandPath(CONFIG_FILE);
138
+ try {
139
+ if (!fs.existsSync(configPath)) {
140
+ logger.info('配置文件不存在,使用默认配置');
141
+ fs.ensureDirSync(CONFIG_DIR);
142
+ this.saveDefaultConfig();
143
+ return DEFAULT_CONFIG;
144
+ }
145
+ const content = fs.readFileSync(configPath, 'utf8');
146
+ const parsedConfig = yaml.parse(content);
147
+ const validation = this.validate(parsedConfig);
148
+ if (!validation.valid) {
149
+ logger.warn('配置文件包含错误');
150
+ for (const error of validation.errors)
151
+ logger.warn(` - ${error}`);
152
+ // 修复配置为默认值
153
+ const fixedConfig = this.fixConfig(parsedConfig);
154
+ this.saveConfig();
155
+ logger.info('已修复配置文件');
156
+ return fixedConfig;
157
+ }
158
+ return parsedConfig;
159
+ }
160
+ catch (error) {
161
+ logger.error('加载配置失败', { error: error instanceof Error ? error.message : String(error) });
162
+ logger.info('使用默认配置');
163
+ return DEFAULT_CONFIG;
164
+ }
165
+ }
166
+ saveDefaultConfig() {
167
+ const defaultConfigPath = path.join(CONFIG_DIR, 'config.yaml.default');
168
+ const yamlContent = yaml.stringify(DEFAULT_CONFIG);
169
+ fs.writeFileSync(defaultConfigPath, yamlContent, 'utf-8');
170
+ fs.writeFileSync(CONFIG_FILE, yamlContent, 'utf-8');
171
+ }
172
+ }
173
+ export const configManager = new ConfigManager();
174
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ declare class LaunchAgentManager {
2
+ private readonly agentName;
3
+ private readonly launchAgentsDir;
4
+ private readonly agentPath;
5
+ disable(): Promise<boolean>;
6
+ enable(): Promise<boolean>;
7
+ getAgentPath(): string;
8
+ isEnabled(): Promise<boolean>;
9
+ private generatePlist;
10
+ }
11
+ export { LaunchAgentManager };
12
+ //# sourceMappingURL=launch-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-agent.d.ts","sourceRoot":"","sources":["../../src/core/launch-agent.ts"],"names":[],"mappings":"AAUA,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8D;IAElF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB3B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBhC,YAAY,IAAI,MAAM;IAIhB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAanC,OAAO,CAAC,aAAa;CA+BtB;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,89 @@
1
+ import fs from 'fs-extra';
2
+ import { exec } from 'node:child_process';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ import { logger } from '../utils/logger';
7
+ const execAsync = promisify(exec);
8
+ class LaunchAgentManager {
9
+ agentName = 'com.user.ccsync';
10
+ launchAgentsDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
11
+ agentPath = path.join(this.launchAgentsDir, `${this.agentName}.plist`);
12
+ async disable() {
13
+ try {
14
+ logger.info('正在禁用开机启动...');
15
+ if (await fs.pathExists(this.agentPath)) {
16
+ await execAsync(`launchctl unload ${this.agentPath}`);
17
+ await fs.remove(this.agentPath);
18
+ }
19
+ logger.info('开机启动已禁用');
20
+ return true;
21
+ }
22
+ catch (error) {
23
+ logger.error('禁用开机启动失败', { error: error instanceof Error ? error.message : String(error) });
24
+ return false;
25
+ }
26
+ }
27
+ async enable() {
28
+ try {
29
+ logger.info('正在启用开机启动...');
30
+ await fs.ensureDir(this.launchAgentsDir);
31
+ const plistContent = this.generatePlist();
32
+ await fs.writeFile(this.agentPath, plistContent, 'utf-8');
33
+ await execAsync(`launchctl load ${this.agentPath}`);
34
+ logger.info('开机启动已启用');
35
+ return true;
36
+ }
37
+ catch (error) {
38
+ logger.error('启用开机启动失败', { error: error instanceof Error ? error.message : String(error) });
39
+ return false;
40
+ }
41
+ }
42
+ getAgentPath() {
43
+ return this.agentPath;
44
+ }
45
+ async isEnabled() {
46
+ try {
47
+ if (!await fs.pathExists(this.agentPath)) {
48
+ return false;
49
+ }
50
+ const { stdout } = await execAsync(`launchctl list | grep ${this.agentName}`);
51
+ return stdout.trim().includes(this.agentName);
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ generatePlist() {
58
+ const homeDir = os.homedir();
59
+ const ccsyncPath = path.join(homeDir, '.npm', 'global', 'lib', 'node_modules', 'ccsync', 'bin', 'run.js');
60
+ const logPath = path.join(homeDir, '.local', 'share', 'ccsync', 'logs', 'autostart.log');
61
+ return `<?xml version="1.0" encoding="UTF-8"?>
62
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
63
+ <plist version="1.0">
64
+ <dict>
65
+ <key>Label</key>
66
+ <string>${this.agentName}</string>
67
+ <key>ProgramArguments</key>
68
+ <array>
69
+ <string>/usr/bin/env</string>
70
+ <string>node</string>
71
+ <string>${ccsyncPath}</string>
72
+ <string>start</string>
73
+ </array>
74
+ <key>RunAtLoad</key>
75
+ <true/>
76
+ <key>KeepAlive</key>
77
+ <true/>
78
+ <key>StandardOutPath</key>
79
+ <string>${logPath}</string>
80
+ <key>StandardErrorPath</key>
81
+ <string>${logPath}</string>
82
+ <key>WorkingDirectory</key>
83
+ <string>${homeDir}</string>
84
+ </dict>
85
+ </plist>`;
86
+ }
87
+ }
88
+ export { LaunchAgentManager };
89
+ //# sourceMappingURL=launch-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-agent.js","sourceRoot":"","sources":["../../src/core/launch-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ declare class PermissionManager {
2
+ private readonly paths;
3
+ constructor(paths: string[]);
4
+ check(): Promise<{
5
+ issues: string[];
6
+ valid: boolean;
7
+ }>;
8
+ ensureDirectories(): Promise<{
9
+ created: string[];
10
+ errors: string[];
11
+ }>;
12
+ fix(): Promise<{
13
+ fixed: boolean;
14
+ issues: string[];
15
+ }>;
16
+ }
17
+ export { PermissionManager };
18
+ //# sourceMappingURL=permission-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-manager.d.ts","sourceRoot":"","sources":["../../src/core/permission-manager.ts"],"names":[],"mappings":"AAMA,cAAM,iBAAiB;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;gBAErB,KAAK,EAAE,MAAM,EAAE;IAUrB,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;KAAE,CAAC;IAyBvD,iBAAiB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAqBrE,GAAG,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAsC3D;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}