@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
package/README.md ADDED
@@ -0,0 +1,241 @@
1
+ # ccsync
2
+
3
+ ccsync 是一个用于将 ccswitch 的 Skills 和 MCP 服务器自动同步到 OpenCode 的 CLI 工具。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 自动同步:监控 ccswitch 的变化,自动同步到 OpenCode
8
+ - ✅ Skills 同步:支持 Claude 和 Codex Skills,可选择同步
9
+ - ✅ MCP 同步:支持 Claude、Codex、Gemini 平台,支持全部同步
10
+ - ✅ 中文界面:所有用户界面都是中文
11
+ - ✅ 可视化仪表板:实时显示同步状态和可用资源
12
+ - ✅ 错误处理:自动检测错误并提供处理选项
13
+ - ✅ 日志轮转:自动删除 14 天前的日志
14
+ - ✅ 开机启动:支持配置开机自动启动
15
+
16
+ ## 安装
17
+
18
+ ### 从源码安装
19
+
20
+ ```bash
21
+ cd /Users/bm/Documents/Code/Github/ccswitch2opencode/ccsync
22
+ npm install
23
+ npm run build
24
+ npm link
25
+ ```
26
+
27
+ ### 使用 NPM 安装(推荐)
28
+
29
+ ```bash
30
+ npm install -g ccsync
31
+ ```
32
+
33
+ ## 使用
34
+
35
+ ### 初始化
36
+
37
+ 首次使用时运行初始化向导:
38
+
39
+ ```bash
40
+ ccsync setup
41
+ ```
42
+
43
+ 向导会引导您完成以下配置:
44
+
45
+ 1. Skills 同步配置:选择要同步的 Skills(Claude、Codex 或两者都选)
46
+ 2. MCP 同步配置:选择要同步的 MCP 平台(Claude、Codex、Gemini 或全部)
47
+ 3. 同步间隔:配置自动检查的间隔(默认 15 秒)
48
+ 4. 开机启动:是否开机自动启动服务
49
+
50
+ ### 日常使用
51
+
52
+ 启动同步服务:
53
+
54
+ ```bash
55
+ ccsync start
56
+ ```
57
+
58
+ 停止同步服务:
59
+
60
+ ```bash
61
+ ccsync stop
62
+ ```
63
+
64
+ 切换服务状态:
65
+
66
+ ```bash
67
+ ccsync toggle
68
+ ```
69
+
70
+ 查看服务状态:
71
+
72
+ ```bash
73
+ ccsync status
74
+ ```
75
+
76
+ 打开可视化仪表板:
77
+
78
+ ```bash
79
+ ccsync dashboard
80
+ ```
81
+
82
+ 手动触发同步:
83
+
84
+ ```bash
85
+ ccsync sync
86
+ ```
87
+
88
+ 打开交互式菜单:
89
+
90
+ ```bash
91
+ ccsync menu
92
+ ```
93
+
94
+ ### 配置管理
95
+
96
+ 编辑配置文件:
97
+
98
+ ```bash
99
+ ccsync config edit
100
+ ```
101
+
102
+ 查看所有配置:
103
+
104
+ ```bash
105
+ ccsync config --list
106
+ ```
107
+
108
+ 获取配置项:
109
+
110
+ ```bash
111
+ ccsync config --get <key>
112
+ ```
113
+
114
+ 设置配置项:
115
+
116
+ ```bash
117
+ ccsync config --set <key> --value <value>
118
+ ```
119
+
120
+ ### 日志管理
121
+
122
+ 查看日志:
123
+
124
+ ```bash
125
+ ccsync logs
126
+ ```
127
+
128
+ 实时跟踪日志:
129
+
130
+ ```bash
131
+ ccsync logs --tail
132
+ ```
133
+
134
+ 清空所有日志:
135
+
136
+ ```bash
137
+ ccsync logs --clear
138
+ ```
139
+
140
+ ### 开机启动
141
+
142
+ 启用开机启动:
143
+
144
+ ```bash
145
+ ccsync enable-autostart
146
+ ```
147
+
148
+ 禁用开机启动:
149
+
150
+ ```bash
151
+ ccsync disable-autostart
152
+ ```
153
+
154
+ 检查开机启动状态:
155
+
156
+ ```bash
157
+ ccsync is-autostart-enabled
158
+ ```
159
+
160
+ ### 开发
161
+
162
+ 安装依赖:
163
+
164
+ ```bash
165
+ npm install
166
+ ```
167
+
168
+ 编译项目:
169
+
170
+ ```bash
171
+ npm run build
172
+ ```
173
+
174
+ 开发模式运行:
175
+
176
+ ```bash
177
+ npm run dev <command>
178
+ ```
179
+
180
+ 格式化代码:
181
+
182
+ ```bash
183
+ npm run format
184
+ ```
185
+
186
+ 检查代码规范:
187
+
188
+ ```bash
189
+ npm run lint
190
+ ```
191
+
192
+ 修复代码规范问题:
193
+
194
+ ```bash
195
+ npm run lint:fix
196
+ ```
197
+
198
+ 运行测试:
199
+
200
+ ```bash
201
+ npm test
202
+ ```
203
+
204
+ ## 配置文件
205
+
206
+ 配置文件位置:`~/.config/ccsync/config.yaml`
207
+
208
+ ## 技术栈
209
+
210
+ - **框架**:oclif 4.x
211
+ - **UI 框架**:Ink 4.x + React 18.x
212
+ - **配置管理**:YAML
213
+ - **日志**:Winston 3.x + Winston Daily Rotate File
214
+ - **文件监控**:chokidar 4.x
215
+ - **文件操作**:fs-extra 11.x
216
+ - **开发语言**:TypeScript 5.3.0
217
+
218
+ ## 项目结构
219
+
220
+ ```
221
+ ccsync/
222
+ ├── src/
223
+ │ ├── commands/ # CLI 命令
224
+ │ ├── core/ # 核心服务
225
+ │ ├── syncers/ # 同步器
226
+ │ ├── ui/ # UI 组件(Ink)
227
+ │ ├── utils/ # 工具函数
228
+ │ └── types/ # 类型定义
229
+ ├── bin/ # 可执行文件
230
+ ├── dist/ # 编译输出
231
+ ├── package.json
232
+ └── README.md
233
+ ```
234
+
235
+ ## 许可证
236
+
237
+ MIT License
238
+
239
+ ## 反馈
240
+
241
+ 如遇问题,请在 https://github.com/ccswitch2opencode/ccsync/issues 提交 Issue。
package/bin/dev.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node --loader ts-node/esm --no-warnings=ExperimentalWarning "%~dp0\dev" %*
package/bin/dev.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env -S node --loader ts-node/esm --disable-warning=ExperimentalWarning
2
+
3
+ import {execute} from '@oclif/core'
4
+
5
+ await execute({development: true, dir: import.meta.url})
package/bin/run.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node "%~dp0\run" %*
package/bin/run.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {execute} from '@oclif/core'
4
+
5
+ await execute({dir: import.meta.url})
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Config extends Command {
4
+ static description: "管理 ccsync 配置";
5
+ static flags: {
6
+ edit: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ get: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ list: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ set: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ value: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ private editConfig;
14
+ private getConfig;
15
+ private listConfig;
16
+ private setConfig;
17
+ }
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,iBAAyB;IAC7C,MAAM,CAAC,KAAK;;;;;;MAMR;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBZ,UAAU;IAYxB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;YAiCJ,SAAS;CAoBxB"}
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { exec } from 'node:child_process';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { promisify } from 'node:util';
7
+ import { configManager } from '../core/config-manager';
8
+ import { TEXTS } from '../utils/texts';
9
+ const execAsync = promisify(exec);
10
+ export default class Config extends Command {
11
+ static description = TEXTS.commands.config;
12
+ static flags = {
13
+ edit: Flags.boolean({ char: 'e', description: '编辑配置文件' }),
14
+ get: Flags.string({ char: 'g', description: '获取配置项' }),
15
+ list: Flags.boolean({ char: 'l', description: '列出所有配置' }),
16
+ set: Flags.string({ char: 's', description: '设置配置项' }),
17
+ value: Flags.string({ char: 'v', description: '配置值(配合--set使用)' }),
18
+ };
19
+ async run() {
20
+ const { flags } = await this.parse(Config);
21
+ if (flags.edit) {
22
+ await this.editConfig();
23
+ }
24
+ else if (flags.list) {
25
+ this.listConfig();
26
+ }
27
+ else if (flags.get) {
28
+ this.getConfig(flags.get);
29
+ }
30
+ else if (flags.set && flags.value) {
31
+ await this.setConfig(flags.set, flags.value);
32
+ }
33
+ else {
34
+ this.log('');
35
+ this.log('使用 --list 查看所有配置');
36
+ this.log('使用 --get <key> 获取配置项');
37
+ this.log('使用 --set <key> --value <value> 设置配置项');
38
+ this.log('使用 --edit 编辑配置文件');
39
+ }
40
+ }
41
+ async editConfig() {
42
+ const configPath = path.join(os.homedir(), '.config', 'ccsync', 'config.yaml');
43
+ try {
44
+ const editor = process.env.EDITOR || 'vim';
45
+ await execAsync(`${editor} ${configPath}`);
46
+ this.log('配置文件已更新');
47
+ }
48
+ catch (error) {
49
+ this.error(`编辑配置失败:${error instanceof Error ? error.message : String(error)}`);
50
+ }
51
+ }
52
+ getConfig(key) {
53
+ const value = configManager.get(key);
54
+ if (value === undefined) {
55
+ this.error(`配置项 "${key}" 不存在`);
56
+ }
57
+ else {
58
+ this.log(`${key}:${JSON.stringify(value, null, 2)}`);
59
+ }
60
+ }
61
+ listConfig() {
62
+ const config = configManager.getConfig();
63
+ this.log('');
64
+ this.log('配置信息:');
65
+ this.log('');
66
+ this.log('服务配置:');
67
+ this.log(` 同步间隔:${config.service.interval} 秒`);
68
+ this.log(` 日志级别:${config.service.logLevel}`);
69
+ this.log(` 日志文件:${config.service.logFile}`);
70
+ this.log('');
71
+ this.log('Skills 同步配置:');
72
+ this.log(` Claude Skills:${config.sync.skills.sources.claude ? '✓' : '✗'}`);
73
+ this.log(` Codex Skills:${config.sync.skills.sources.codex ? '✓' : '✗'}`);
74
+ this.log(` Claude 路径:${config.sync.skills.paths.claude}`);
75
+ this.log(` Codex 路径:${config.sync.skills.paths.codex}`);
76
+ this.log(` 目标路径:${config.sync.skills.target}`);
77
+ this.log('');
78
+ this.log('MCP 同步配置:');
79
+ this.log(` 已启用:${config.sync.mcp.enabled ? '✓' : '✗'}`);
80
+ this.log(` 平台:${config.sync.mcp.platforms.join(', ')}`);
81
+ this.log(` 数据库路径:${config.sync.mcp.dbPath}`);
82
+ this.log(` 目标路径:${config.sync.mcp.target}`);
83
+ this.log('');
84
+ this.log('开机启动配置:');
85
+ this.log(` 已启用:${config.autostart.enabled ? '✓' : '✗'}`);
86
+ this.log(` LaunchAgent:${config.autostart.launchAgentPath}`);
87
+ }
88
+ async setConfig(key, value) {
89
+ try {
90
+ let parsedValue = value;
91
+ if (value === 'true') {
92
+ parsedValue = true;
93
+ }
94
+ else if (value === 'false') {
95
+ parsedValue = false;
96
+ }
97
+ else if (!isNaN(Number.parseInt(value))) {
98
+ parsedValue = Number.parseInt(value);
99
+ }
100
+ else if (value.startsWith('[') || value.startsWith('{')) {
101
+ parsedValue = JSON.parse(value);
102
+ }
103
+ configManager.set(key, parsedValue);
104
+ this.log(`配置已更新:${key} = ${parsedValue}`);
105
+ }
106
+ catch (error) {
107
+ this.error(`设置配置失败:${error instanceof Error ? error.message : String(error)}`);
108
+ }
109
+ }
110
+ }
111
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Dashboard extends Command {
4
+ static description: string;
5
+ static examples: string[];
6
+ private refreshInterval;
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAStC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAc;IAClC,MAAM,CAAC,QAAQ,WAEX;IACJ,OAAO,CAAC,eAAe,CAA+B;IAE9C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8C3B"}
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ import { render } from 'ink';
4
+ import { clearInterval, setInterval } from 'node:timers';
5
+ import React from 'react';
6
+ import { configManager } from '../core/config-manager';
7
+ import { Dashboard as DashboardComponent } from '../ui/dashboard';
8
+ export default class Dashboard extends Command {
9
+ static description = '打开可视化仪表板';
10
+ static examples = [
11
+ '<%= config.bin %> <%= command.id %>',
12
+ ];
13
+ refreshInterval = null;
14
+ async run() {
15
+ const config = configManager.getConfig();
16
+ const { rerender, unmount } = render(React.createElement(DashboardComponent, {
17
+ autostart: config.autostart.enabled,
18
+ errors: config.errors || 0,
19
+ logLevel: config.service.logLevel,
20
+ mcpCount: config.mcp?.count || 0,
21
+ running: config.service.running || false,
22
+ skillsCount: config.skills?.count || 0,
23
+ syncInterval: config.service.interval,
24
+ uptime: config.service.uptime || 0,
25
+ }));
26
+ this.refreshInterval = setInterval(async () => {
27
+ const updatedConfig = configManager.getConfig();
28
+ rerender(React.createElement(DashboardComponent, {
29
+ autostart: updatedConfig.autostart.enabled,
30
+ errors: updatedConfig.errors || 0,
31
+ logLevel: updatedConfig.service.logLevel,
32
+ mcpCount: updatedConfig.mcp?.count || 0,
33
+ running: updatedConfig.service.running || false,
34
+ skillsCount: updatedConfig.skills?.count || 0,
35
+ syncInterval: updatedConfig.service.interval,
36
+ uptime: updatedConfig.service.uptime || 0,
37
+ }));
38
+ }, 5000);
39
+ process.on('SIGINT', () => {
40
+ if (this.refreshInterval) {
41
+ clearInterval(this.refreshInterval);
42
+ }
43
+ unmount();
44
+ process.exit(0);
45
+ });
46
+ return new Promise((resolve) => {
47
+ process.on('exit', () => resolve());
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG;QACd,qCAAqC;KACtC,CAAC;IACI,eAAe,GAA0B,IAAI,CAAC;IAEpD,KAAK,CAAC,GAAG;QACP,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAClC,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;YAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;YACjC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;YACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;YACtC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;YACrC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;SACnC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC5C,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YAEhD,QAAQ,CACN,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE;gBACtC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO;gBAC1C,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC;gBACjC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ;gBACxC,QAAQ,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;gBACvC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;gBAC/C,WAAW,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;gBAC7C,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ;gBAC5C,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;aAC1C,CAAC,CACH,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Hello extends Command {
3
+ static args: {
4
+ person: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ from: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hello/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAQ,MAAM,aAAa,CAAA;AAEhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,IAAI;;MAEV;IACD,MAAM,CAAC,WAAW,SAAc;IAChC,MAAM,CAAC,QAAQ,WAId;IACD,MAAM,CAAC,KAAK;;MAEX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3B"}
@@ -0,0 +1,20 @@
1
+ import { Args, Command, Flags } from '@oclif/core';
2
+ export default class Hello extends Command {
3
+ static args = {
4
+ person: Args.string({ description: 'Person to say hello to', required: true }),
5
+ };
6
+ static description = 'Say hello';
7
+ static examples = [
8
+ `<%= config.bin %> <%= command.id %> friend --from oclif
9
+ hello friend from oclif! (./src/commands/hello/index.ts)
10
+ `,
11
+ ];
12
+ static flags = {
13
+ from: Flags.string({ char: 'f', description: 'Who is saying hello', required: true }),
14
+ };
15
+ async run() {
16
+ const { args, flags } = await this.parse(Hello);
17
+ this.log(`hello ${args.person} from ${flags.from}! (./src/commands/hello/index.ts)`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hello/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAEhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KAC7E,CAAA;IACD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,MAAM,CAAC,QAAQ,GAAG;QAChB;;CAEH;KACE,CAAA;IACD,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACpF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE7C,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,KAAK,CAAC,IAAI,mCAAmC,CAAC,CAAA;IACtF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class World extends Command {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: string[];
6
+ static flags: {};
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=world.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../../src/commands/hello/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,IAAI,KAAK;IAChB,MAAM,CAAC,WAAW,SAAoB;IACtC,MAAM,CAAC,QAAQ,WAId;IACD,MAAM,CAAC,KAAK,KAAK;IAEX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B"}
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class World extends Command {
3
+ static args = {};
4
+ static description = 'Say hello world';
5
+ static examples = [
6
+ `<%= config.bin %> <%= command.id %>
7
+ hello world! (./src/commands/hello/world.ts)
8
+ `,
9
+ ];
10
+ static flags = {};
11
+ async run() {
12
+ this.log('hello world! (./src/commands/hello/world.ts)');
13
+ }
14
+ }
15
+ //# sourceMappingURL=world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.js","sourceRoot":"","sources":["../../../src/commands/hello/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA;IAChB,MAAM,CAAC,WAAW,GAAG,iBAAiB,CAAA;IACtC,MAAM,CAAC,QAAQ,GAAG;QAChB;;CAEH;KACE,CAAA;IACD,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA;IAEjB,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC1D,CAAC"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ export default class Logs extends Command {
4
+ static description: "查看 ccsync 日志";
5
+ static flags: {
6
+ clear: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ lines: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
8
+ tail: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ private clearLogs;
12
+ private getLogFiles;
13
+ private showLogs;
14
+ private tailLogs;
15
+ }
16
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAO7C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,iBAAuB;IAC3C,MAAM,CAAC,KAAK;;;;MAIR;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAYZ,SAAS;YAeT,WAAW;YAgBX,QAAQ;YAuBR,QAAQ;CAgCvB"}