okit-cli 0.0.1

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 (88) hide show
  1. package/README.md +222 -0
  2. package/dist/commands/check.d.ts +13 -0
  3. package/dist/commands/check.d.ts.map +1 -0
  4. package/dist/commands/check.js +259 -0
  5. package/dist/commands/check.js.map +1 -0
  6. package/dist/commands/claude.d.ts +10 -0
  7. package/dist/commands/claude.d.ts.map +1 -0
  8. package/dist/commands/claude.js +504 -0
  9. package/dist/commands/claude.js.map +1 -0
  10. package/dist/commands/menu.d.ts +3 -0
  11. package/dist/commands/menu.d.ts.map +1 -0
  12. package/dist/commands/menu.js +152 -0
  13. package/dist/commands/menu.js.map +1 -0
  14. package/dist/commands/repo.d.ts +3 -0
  15. package/dist/commands/repo.d.ts.map +1 -0
  16. package/dist/commands/repo.js +266 -0
  17. package/dist/commands/repo.js.map +1 -0
  18. package/dist/commands/uninstall.d.ts +2 -0
  19. package/dist/commands/uninstall.d.ts.map +1 -0
  20. package/dist/commands/uninstall.js +125 -0
  21. package/dist/commands/uninstall.js.map +1 -0
  22. package/dist/commands/upgrade.d.ts +6 -0
  23. package/dist/commands/upgrade.d.ts.map +1 -0
  24. package/dist/commands/upgrade.js +204 -0
  25. package/dist/commands/upgrade.js.map +1 -0
  26. package/dist/config/i18n.d.ts +141 -0
  27. package/dist/config/i18n.d.ts.map +1 -0
  28. package/dist/config/i18n.js +316 -0
  29. package/dist/config/i18n.js.map +1 -0
  30. package/dist/config/registry.d.ts +24 -0
  31. package/dist/config/registry.d.ts.map +1 -0
  32. package/dist/config/registry.js +388 -0
  33. package/dist/config/registry.js.map +1 -0
  34. package/dist/config/user.d.ts +32 -0
  35. package/dist/config/user.d.ts.map +1 -0
  36. package/dist/config/user.js +72 -0
  37. package/dist/config/user.js.map +1 -0
  38. package/dist/executor/deps/BrewDependencyProvider.d.ts +8 -0
  39. package/dist/executor/deps/BrewDependencyProvider.d.ts.map +1 -0
  40. package/dist/executor/deps/BrewDependencyProvider.js +52 -0
  41. package/dist/executor/deps/BrewDependencyProvider.js.map +1 -0
  42. package/dist/executor/deps/DependencyProvider.d.ts +11 -0
  43. package/dist/executor/deps/DependencyProvider.d.ts.map +1 -0
  44. package/dist/executor/deps/DependencyProvider.js +3 -0
  45. package/dist/executor/deps/DependencyProvider.js.map +1 -0
  46. package/dist/executor/deps/NpmDependencyProvider.d.ts +12 -0
  47. package/dist/executor/deps/NpmDependencyProvider.d.ts.map +1 -0
  48. package/dist/executor/deps/NpmDependencyProvider.js +78 -0
  49. package/dist/executor/deps/NpmDependencyProvider.js.map +1 -0
  50. package/dist/executor/deps/PipxDependencyProvider.d.ts +8 -0
  51. package/dist/executor/deps/PipxDependencyProvider.d.ts.map +1 -0
  52. package/dist/executor/deps/PipxDependencyProvider.js +32 -0
  53. package/dist/executor/deps/PipxDependencyProvider.js.map +1 -0
  54. package/dist/executor/deps/UvToolDependencyProvider.d.ts +8 -0
  55. package/dist/executor/deps/UvToolDependencyProvider.d.ts.map +1 -0
  56. package/dist/executor/deps/UvToolDependencyProvider.js +35 -0
  57. package/dist/executor/deps/UvToolDependencyProvider.js.map +1 -0
  58. package/dist/executor/plan/ExecutionPlanner.d.ts +13 -0
  59. package/dist/executor/plan/ExecutionPlanner.d.ts.map +1 -0
  60. package/dist/executor/plan/ExecutionPlanner.js +109 -0
  61. package/dist/executor/plan/ExecutionPlanner.js.map +1 -0
  62. package/dist/executor/plan/TopologicalSorter.d.ts +3 -0
  63. package/dist/executor/plan/TopologicalSorter.d.ts.map +1 -0
  64. package/dist/executor/plan/TopologicalSorter.js +49 -0
  65. package/dist/executor/plan/TopologicalSorter.js.map +1 -0
  66. package/dist/executor/plan/registryDeps.d.ts +3 -0
  67. package/dist/executor/plan/registryDeps.d.ts.map +1 -0
  68. package/dist/executor/plan/registryDeps.js +22 -0
  69. package/dist/executor/plan/registryDeps.js.map +1 -0
  70. package/dist/executor/runner.d.ts +13 -0
  71. package/dist/executor/runner.d.ts.map +1 -0
  72. package/dist/executor/runner.js +430 -0
  73. package/dist/executor/runner.js.map +1 -0
  74. package/dist/main.d.ts +3 -0
  75. package/dist/main.d.ts.map +1 -0
  76. package/dist/main.js +244 -0
  77. package/dist/main.js.map +1 -0
  78. package/dist/utils/sound.d.ts +10 -0
  79. package/dist/utils/sound.d.ts.map +1 -0
  80. package/dist/utils/sound.js +36 -0
  81. package/dist/utils/sound.js.map +1 -0
  82. package/dist/web/api/config.js +73 -0
  83. package/dist/web/api/stats.js +130 -0
  84. package/dist/web/public/app.js +284 -0
  85. package/dist/web/public/index.html +367 -0
  86. package/dist/web/public/styles.css +1004 -0
  87. package/dist/web/server.js +41 -0
  88. package/package.json +61 -0
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_REGISTRY = exports.CACHE_DIR = exports.LOGS_DIR = exports.REGISTRY_PATH = exports.OKIT_DIR = void 0;
7
+ exports.ensureOkitDir = ensureOkitDir;
8
+ exports.loadRegistry = loadRegistry;
9
+ exports.resetRegistry = resetRegistry;
10
+ exports.saveRegistry = saveRegistry;
11
+ exports.registryExists = registryExists;
12
+ const fs_extra_1 = __importDefault(require("fs-extra"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const os_1 = __importDefault(require("os"));
15
+ const child_process_1 = require("child_process");
16
+ exports.OKIT_DIR = path_1.default.join(os_1.default.homedir(), ".okit");
17
+ exports.REGISTRY_PATH = path_1.default.join(exports.OKIT_DIR, "registry.json");
18
+ exports.LOGS_DIR = path_1.default.join(exports.OKIT_DIR, "logs");
19
+ exports.CACHE_DIR = path_1.default.join(exports.OKIT_DIR, "cache");
20
+ // 检测是否在中国大陆
21
+ function isInChina() {
22
+ try {
23
+ // 尝试访问 Google,如果失败可能是国内网络
24
+ (0, child_process_1.execSync)("curl -s --connect-timeout 3 https://www.google.com -o /dev/null", {
25
+ stdio: "ignore",
26
+ });
27
+ return false;
28
+ }
29
+ catch {
30
+ return true;
31
+ }
32
+ }
33
+ // 获取 Homebrew 安装命令
34
+ function getHomebrewInstallCommand() {
35
+ const isChina = isInChina();
36
+ const mirrorHint = isChina ? "(使用国内镜像)" : "";
37
+ if (isChina) {
38
+ // 国内使用 Gitee 镜像(HomebrewCN)
39
+ return `echo "📥 正在安装 Homebrew${mirrorHint}..." && echo "⚠️ 需要管理员权限,请在提示时输入密码" && /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"`;
40
+ }
41
+ else {
42
+ // 国外使用官方源
43
+ return `echo "📥 正在安装 Homebrew${mirrorHint}..." && echo "⚠️ 需要管理员权限,请在提示时输入密码" && /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`;
44
+ }
45
+ }
46
+ exports.DEFAULT_REGISTRY = {
47
+ steps: [
48
+ // 系统基础
49
+ {
50
+ name: "Homebrew",
51
+ install: getHomebrewInstallCommand(),
52
+ upgrade: "brew update && brew upgrade",
53
+ check: "command -v brew",
54
+ versionCmd: "brew --version | head -1",
55
+ },
56
+ // 开发基础
57
+ {
58
+ name: "Node.js",
59
+ install: "brew install node",
60
+ upgrade: "brew upgrade node",
61
+ uninstall: "brew uninstall node",
62
+ check: "command -v node",
63
+ versionCmd: "node --version",
64
+ dependencies: ["Homebrew"],
65
+ },
66
+ {
67
+ name: "Git",
68
+ install: "brew install git",
69
+ upgrade: "brew upgrade git",
70
+ uninstall: "brew uninstall --force git",
71
+ check: "command -v git",
72
+ versionCmd: "git --version",
73
+ dependencies: ["Homebrew"],
74
+ },
75
+ {
76
+ name: "GitHub CLI",
77
+ install: "brew install gh",
78
+ upgrade: "brew upgrade gh",
79
+ uninstall: "brew uninstall gh",
80
+ check: "command -v gh",
81
+ versionCmd: "gh --version | head -1",
82
+ authCheck: "gh auth status 2>&1",
83
+ dependencies: ["Homebrew"],
84
+ },
85
+ {
86
+ name: "pnpm",
87
+ install: "brew install pnpm",
88
+ upgrade: "brew upgrade pnpm",
89
+ uninstall: "brew uninstall pnpm",
90
+ check: "command -v pnpm",
91
+ versionCmd: "pnpm --version",
92
+ dependencies: ["Homebrew"],
93
+ },
94
+ {
95
+ name: "bun",
96
+ install: "curl -fsSL https://bun.sh/install | bash",
97
+ upgrade: "bun upgrade",
98
+ uninstall: "~/.bun/uninstall.sh",
99
+ check: "command -v bun",
100
+ versionCmd: "bun --version",
101
+ },
102
+ {
103
+ name: "Python",
104
+ install: "brew install python",
105
+ upgrade: "brew upgrade python",
106
+ uninstall: "brew uninstall python",
107
+ check: "command -v python3",
108
+ versionCmd: "python3 --version",
109
+ dependencies: ["Homebrew"],
110
+ },
111
+ {
112
+ name: "Docker",
113
+ install: "echo '正在安装 Docker Desktop...' && brew install --cask docker || (echo 'Homebrew 安装失败,请手动从 https://www.docker.com/products/docker-desktop 下载安装' && exit 1)",
114
+ upgrade: "brew upgrade --cask docker",
115
+ uninstall: "brew uninstall --cask docker",
116
+ check: "command -v docker",
117
+ versionCmd: "docker --version",
118
+ authCheck: "docker info 2>&1 | head -3",
119
+ dependencies: ["Homebrew"],
120
+ },
121
+ // AI Coding
122
+ {
123
+ name: "Codex CLI",
124
+ install: "sudo npm install -g @openai/codex",
125
+ upgrade: "sudo npm update -g @openai/codex",
126
+ uninstall: "sudo npm uninstall -g @openai/codex",
127
+ check: "command -v codex",
128
+ versionCmd: "codex --version 2>/dev/null || echo unknown",
129
+ dependencies: ["Node.js"],
130
+ },
131
+ {
132
+ name: "Claude Code",
133
+ install: "sudo npm install -g @anthropic-ai/claude-code",
134
+ upgrade: "sudo npm update -g @anthropic-ai/claude-code",
135
+ uninstall: "sudo npm uninstall -g @anthropic-ai/claude-code",
136
+ check: "command -v claude",
137
+ versionCmd: "claude --version 2>/dev/null || echo unknown",
138
+ dependencies: ["Node.js"],
139
+ },
140
+ {
141
+ name: "Happy Coder",
142
+ install: "npm install -g happy-coder",
143
+ upgrade: "npm update -g happy-coder",
144
+ uninstall: "npm uninstall -g happy-coder",
145
+ check: "command -v happy-coder",
146
+ dependencies: ["Node.js"],
147
+ },
148
+ // 信息抓取
149
+ {
150
+ name: "yt-dlp",
151
+ install: "brew install yt-dlp",
152
+ upgrade: "brew upgrade yt-dlp",
153
+ uninstall: "brew uninstall yt-dlp",
154
+ check: "command -v yt-dlp",
155
+ versionCmd: "yt-dlp --version",
156
+ dependencies: ["Homebrew"],
157
+ },
158
+ {
159
+ name: "curl",
160
+ install: "brew install curl",
161
+ upgrade: "brew upgrade curl",
162
+ uninstall: "brew uninstall curl",
163
+ check: "command -v curl",
164
+ versionCmd: "curl --version | head -1",
165
+ dependencies: ["Homebrew"],
166
+ },
167
+ {
168
+ name: "Playwright",
169
+ install: "echo '安装 Playwright (跳过浏览器下载,请稍后手动运行: npx playwright install)' && sudo npm install -g @playwright/test",
170
+ upgrade: "sudo npm update -g @playwright/test",
171
+ uninstall: "sudo npm uninstall -g @playwright/test",
172
+ check: "command -v playwright",
173
+ dependencies: ["Node.js"],
174
+ },
175
+ // 文档 & 图表
176
+ {
177
+ name: "Chromium (Puppeteer)",
178
+ install: "echo '安装 Puppeteer 浏览器 (Chromium)...' && sudo npm install -g puppeteer && npx puppeteer browsers install chrome",
179
+ upgrade: "sudo npm update -g puppeteer && npx puppeteer browsers install chrome",
180
+ uninstall: "sudo npm uninstall -g puppeteer && sudo rm -rf ~/.cache/puppeteer",
181
+ check: "command -v puppeteer || ls ~/.cache/puppeteer/chrome/*/chrome-mac/Chromium.app 2>/dev/null || ls ~/.cache/puppeteer/chrome/*/chrome-linux/chrome 2>/dev/null",
182
+ dependencies: ["Node.js"],
183
+ },
184
+ {
185
+ name: "Mermaid CLI",
186
+ install: "echo '安装 Mermaid CLI (跳过 Puppeteer 浏览器下载)' && mkdir -p \"$HOME/.cache/puppeteer\" && chmod -R u+rwX \"$HOME/.cache/puppeteer\" || true && PUPPETEER_SKIP_DOWNLOAD=true PUPPETEER_CACHE_DIR=\"$HOME/.cache/puppeteer\" npm install -g @mermaid-js/mermaid-cli",
187
+ upgrade: "mkdir -p \"$HOME/.cache/puppeteer\" && chmod -R u+rwX \"$HOME/.cache/puppeteer\" || true && PUPPETEER_SKIP_DOWNLOAD=true PUPPETEER_CACHE_DIR=\"$HOME/.cache/puppeteer\" npm update -g @mermaid-js/mermaid-cli",
188
+ uninstall: "sudo npm uninstall -g @mermaid-js/mermaid-cli",
189
+ check: "command -v mmdc",
190
+ dependencies: ["Node.js"],
191
+ },
192
+ {
193
+ name: "Pandoc",
194
+ install: "brew install pandoc",
195
+ upgrade: "brew upgrade pandoc",
196
+ uninstall: "brew uninstall pandoc",
197
+ check: "command -v pandoc",
198
+ dependencies: ["Homebrew"],
199
+ },
200
+ // 视频 & 多媒体
201
+ {
202
+ name: "ffmpeg",
203
+ install: "brew install ffmpeg",
204
+ upgrade: "brew upgrade ffmpeg",
205
+ uninstall: "brew uninstall ffmpeg",
206
+ check: "command -v ffmpeg",
207
+ versionCmd: "ffmpeg -version 2>&1 | head -1",
208
+ dependencies: ["Homebrew"],
209
+ },
210
+ {
211
+ name: "ImageMagick",
212
+ install: "brew install imagemagick",
213
+ upgrade: "brew upgrade imagemagick",
214
+ uninstall: "brew uninstall imagemagick",
215
+ check: "command -v convert",
216
+ versionCmd: "convert --version | head -1",
217
+ dependencies: ["Homebrew"],
218
+ },
219
+ {
220
+ name: "pipx",
221
+ install: "brew install pipx && pipx ensurepath",
222
+ upgrade: "brew upgrade pipx",
223
+ uninstall: "brew uninstall pipx",
224
+ check: "command -v pipx",
225
+ versionCmd: "pipx --version",
226
+ dependencies: ["Homebrew", "Python"],
227
+ },
228
+ {
229
+ name: "Whisper",
230
+ install: "pipx install openai-whisper",
231
+ upgrade: "pipx upgrade openai-whisper",
232
+ uninstall: "pipx uninstall openai-whisper",
233
+ check: "command -v whisper",
234
+ dependencies: ["pipx"],
235
+ },
236
+ // 数据 & 分析
237
+ {
238
+ name: "Jupyter",
239
+ install: "pipx install --include-deps jupyter",
240
+ upgrade: "pipx upgrade --include-deps jupyter",
241
+ uninstall: "pipx uninstall jupyter",
242
+ check: "command -v jupyter",
243
+ dependencies: ["pipx"],
244
+ },
245
+ {
246
+ name: "DuckDB",
247
+ install: "brew install duckdb",
248
+ upgrade: "brew upgrade duckdb",
249
+ uninstall: "brew uninstall duckdb",
250
+ check: "command -v duckdb",
251
+ versionCmd: "duckdb --version 2>/dev/null || echo unknown",
252
+ dependencies: ["Homebrew"],
253
+ },
254
+ // 通用效率
255
+ {
256
+ name: "ripgrep",
257
+ install: "brew install ripgrep",
258
+ upgrade: "brew upgrade ripgrep",
259
+ uninstall: "brew uninstall ripgrep",
260
+ check: "command -v rg",
261
+ versionCmd: "rg --version | head -1",
262
+ dependencies: ["Homebrew"],
263
+ },
264
+ {
265
+ name: "fzf",
266
+ install: "brew install fzf",
267
+ upgrade: "brew upgrade fzf",
268
+ uninstall: "brew uninstall fzf",
269
+ check: "command -v fzf",
270
+ versionCmd: "fzf --version",
271
+ dependencies: ["Homebrew"],
272
+ },
273
+ {
274
+ name: "tmux",
275
+ install: "brew install tmux",
276
+ upgrade: "brew upgrade tmux",
277
+ uninstall: "brew uninstall tmux",
278
+ check: "command -v tmux",
279
+ dependencies: ["Homebrew"],
280
+ },
281
+ {
282
+ name: "iTerm2",
283
+ install: "brew install --cask iterm2",
284
+ upgrade: "brew upgrade --cask iterm2",
285
+ uninstall: "brew uninstall --cask iterm2",
286
+ check: "test -d /Applications/iTerm.app",
287
+ dependencies: ["Homebrew"],
288
+ },
289
+ {
290
+ name: "iTerm2 Browser Plugin",
291
+ install: "bash -lc 'set -euo pipefail; TMP_DIR=\"$(mktemp -d)\"; trap \"rm -rf \\\"$TMP_DIR\\\"\" EXIT; ZIP_PATH=\"$TMP_DIR/iTermBrowserPlugin-1.0.zip\"; curl -fL \"https://iterm2.com/downloads/browser-plugin/iTermBrowserPlugin-1.0.zip\" -o \"$ZIP_PATH\"; unzip -o \"$ZIP_PATH\" -d \"$TMP_DIR\" >/dev/null; APP_PATH=\"$(find \"$TMP_DIR\" -maxdepth 3 -type d -name \"iTermBrowserPlugin*.app\" | head -n 1)\"; if [ -z \"$APP_PATH\" ]; then echo \"未在压缩包中找到 iTermBrowserPlugin.app\"; exit 1; fi; sudo rm -rf \"/Applications/$(basename \"$APP_PATH\")\"; sudo mv \"$APP_PATH\" /Applications/'",
292
+ upgrade: "bash -lc 'set -euo pipefail; TMP_DIR=\"$(mktemp -d)\"; trap \"rm -rf \\\"$TMP_DIR\\\"\" EXIT; ZIP_PATH=\"$TMP_DIR/iTermBrowserPlugin-1.0.zip\"; curl -fL \"https://iterm2.com/downloads/browser-plugin/iTermBrowserPlugin-1.0.zip\" -o \"$ZIP_PATH\"; unzip -o \"$ZIP_PATH\" -d \"$TMP_DIR\" >/dev/null; APP_PATH=\"$(find \"$TMP_DIR\" -maxdepth 3 -type d -name \"iTermBrowserPlugin*.app\" | head -n 1)\"; if [ -z \"$APP_PATH\" ]; then echo \"未在压缩包中找到 iTermBrowserPlugin.app\"; exit 1; fi; sudo rm -rf \"/Applications/$(basename \"$APP_PATH\")\"; sudo mv \"$APP_PATH\" /Applications/'",
293
+ uninstall: "sudo rm -rf /Applications/iTermBrowserPlugin.app",
294
+ check: "test -d /Applications/iTermBrowserPlugin.app",
295
+ dependencies: ["iTerm2"],
296
+ },
297
+ {
298
+ name: "Warp",
299
+ install: "brew install --cask warp",
300
+ upgrade: "brew upgrade --cask warp",
301
+ uninstall: "brew uninstall --cask warp",
302
+ check: "test -d /Applications/Warp.app",
303
+ dependencies: ["Homebrew"],
304
+ },
305
+ {
306
+ name: "uv (uvx)",
307
+ install: "brew install uv",
308
+ upgrade: "brew upgrade uv",
309
+ uninstall: "brew uninstall uv",
310
+ check: "command -v uv && command -v uvx",
311
+ dependencies: ["Homebrew"],
312
+ },
313
+ {
314
+ name: "OpenClaw",
315
+ install: "bash -c 'set -e; if command -v curl >/dev/null 2>&1; then curl -fsSL https://openclaw.ai/install.sh | bash; elif command -v npm >/dev/null 2>&1; then npm install -g openclaw@latest; elif command -v pnpm >/dev/null 2>&1; then pnpm add -g openclaw@latest; else echo \"缺少 curl/npm/pnpm,无法安装 OpenClaw\"; exit 1; fi'",
316
+ upgrade: "bash -c 'set -e; if command -v npm >/dev/null 2>&1; then npm update -g openclaw@latest; elif command -v pnpm >/dev/null 2>&1; then pnpm add -g openclaw@latest; elif command -v curl >/dev/null 2>&1; then curl -fsSL https://openclaw.ai/install.sh | bash; else echo \"缺少 curl/npm/pnpm,无法升级 OpenClaw\"; exit 1; fi'",
317
+ uninstall: "bash -c 'if command -v openclaw >/dev/null 2>&1; then openclaw uninstall; elif command -v npm >/dev/null 2>&1; then npm uninstall -g openclaw; elif command -v pnpm >/dev/null 2>&1; then pnpm remove -g openclaw; else echo \"请手动移除 OpenClaw(可能由安装脚本安装)\"; fi'",
318
+ check: "command -v openclaw",
319
+ dependencies: ["Node.js"],
320
+ },
321
+ ],
322
+ };
323
+ async function ensureOkitDir() {
324
+ await fs_extra_1.default.ensureDir(exports.OKIT_DIR);
325
+ await fs_extra_1.default.ensureDir(exports.LOGS_DIR);
326
+ await fs_extra_1.default.ensureDir(exports.CACHE_DIR);
327
+ }
328
+ async function loadRegistry(forceDefault = false) {
329
+ await ensureOkitDir();
330
+ if (forceDefault || !(await fs_extra_1.default.pathExists(exports.REGISTRY_PATH))) {
331
+ await saveRegistry(exports.DEFAULT_REGISTRY);
332
+ return exports.DEFAULT_REGISTRY;
333
+ }
334
+ try {
335
+ const content = await fs_extra_1.default.readFile(exports.REGISTRY_PATH, "utf-8");
336
+ const userRegistry = JSON.parse(content);
337
+ const merged = mergeRegistries(exports.DEFAULT_REGISTRY, userRegistry);
338
+ return merged;
339
+ }
340
+ catch (error) {
341
+ throw new Error(`无法解析 registry.json: ${error}`);
342
+ }
343
+ }
344
+ async function resetRegistry() {
345
+ await saveRegistry(exports.DEFAULT_REGISTRY);
346
+ console.log("✓ 配置已重置为默认");
347
+ }
348
+ async function saveRegistry(registry) {
349
+ await ensureOkitDir();
350
+ await fs_extra_1.default.writeFile(exports.REGISTRY_PATH, JSON.stringify(registry, null, 2));
351
+ }
352
+ async function registryExists() {
353
+ return fs_extra_1.default.pathExists(exports.REGISTRY_PATH);
354
+ }
355
+ function mergeRegistries(base, override) {
356
+ const baseSteps = base.steps ?? [];
357
+ const overrideSteps = override.steps ?? [];
358
+ const byName = new Map();
359
+ for (const step of baseSteps) {
360
+ if (!step?.name)
361
+ continue;
362
+ byName.set(step.name, { ...step });
363
+ }
364
+ for (const step of overrideSteps) {
365
+ if (!step?.name)
366
+ continue;
367
+ const existing = byName.get(step.name);
368
+ if (existing) {
369
+ byName.set(step.name, { ...existing, ...step });
370
+ }
371
+ else {
372
+ byName.set(step.name, { ...step });
373
+ }
374
+ }
375
+ const mergedSteps = Array.from(byName.values());
376
+ const mermaid = mergedSteps.find((step) => step.name === "Mermaid CLI");
377
+ if (mermaid && mermaid.install === "npm install -g @mermaid-js/mermaid-cli") {
378
+ const baseMermaid = baseSteps.find((step) => step.name === "Mermaid CLI");
379
+ if (baseMermaid?.install) {
380
+ mermaid.install = baseMermaid.install;
381
+ }
382
+ if (baseMermaid?.upgrade) {
383
+ mermaid.upgrade = baseMermaid.upgrade;
384
+ }
385
+ }
386
+ return { steps: mergedSteps };
387
+ }
388
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/config/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ type Language = "zh" | "en";
2
+ export type UserConfig = {
3
+ language?: Language;
4
+ claude?: {
5
+ name?: string;
6
+ model?: string;
7
+ agentTeams?: boolean;
8
+ teammateMode?: "auto" | "in-process" | "tmux";
9
+ };
10
+ git?: {
11
+ name?: string;
12
+ email?: string;
13
+ };
14
+ repo?: {
15
+ github?: {
16
+ username?: string;
17
+ token?: string;
18
+ };
19
+ gitee?: {
20
+ username?: string;
21
+ token?: string;
22
+ };
23
+ };
24
+ hints?: {
25
+ mainHelpShown?: boolean;
26
+ };
27
+ };
28
+ export declare function loadUserConfig(): Promise<UserConfig>;
29
+ export declare function saveUserConfig(config: UserConfig): Promise<void>;
30
+ export declare function updateUserConfig(patch: Partial<UserConfig>): Promise<UserConfig>;
31
+ export {};
32
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/config/user.ts"],"names":[],"mappings":"AAKA,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;KAC/C,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE;YACP,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH,CAAC;AAMF,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAU1D;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAYtF"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadUserConfig = loadUserConfig;
7
+ exports.saveUserConfig = saveUserConfig;
8
+ exports.updateUserConfig = updateUserConfig;
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const registry_1 = require("./registry");
12
+ const USER_CONFIG_PATH = path_1.default.join(registry_1.OKIT_DIR, "user.json");
13
+ const LEGACY_LANG_PATH = path_1.default.join(registry_1.OKIT_DIR, "language.json");
14
+ const LEGACY_CLAUDE_PATH = path_1.default.join(registry_1.OKIT_DIR, "claude-current.json");
15
+ async function loadUserConfig() {
16
+ const config = await readJson(USER_CONFIG_PATH);
17
+ if (config)
18
+ return config;
19
+ const migrated = await migrateLegacyConfig();
20
+ if (migrated) {
21
+ await saveUserConfig(migrated);
22
+ return migrated;
23
+ }
24
+ return {};
25
+ }
26
+ async function saveUserConfig(config) {
27
+ await fs_extra_1.default.ensureDir(registry_1.OKIT_DIR);
28
+ await fs_extra_1.default.writeFile(USER_CONFIG_PATH, JSON.stringify(config, null, 2));
29
+ }
30
+ async function updateUserConfig(patch) {
31
+ const current = await loadUserConfig();
32
+ const merged = {
33
+ ...current,
34
+ ...patch,
35
+ claude: patch.claude ? { ...current.claude, ...patch.claude } : current.claude,
36
+ hints: patch.hints ? { ...current.hints, ...patch.hints } : current.hints,
37
+ git: patch.git ? { ...current.git, ...patch.git } : current.git,
38
+ repo: patch.repo ? { ...current.repo, ...patch.repo } : current.repo,
39
+ };
40
+ await saveUserConfig(merged);
41
+ return merged;
42
+ }
43
+ async function migrateLegacyConfig() {
44
+ let changed = false;
45
+ const config = {};
46
+ const legacyLang = await readJson(LEGACY_LANG_PATH);
47
+ if (legacyLang && (legacyLang.lang === "zh" || legacyLang.lang === "en")) {
48
+ config.language = legacyLang.lang;
49
+ changed = true;
50
+ }
51
+ const legacyClaude = await readJson(LEGACY_CLAUDE_PATH);
52
+ if (legacyClaude && typeof legacyClaude.name === "string") {
53
+ config.claude = {
54
+ name: legacyClaude.name,
55
+ model: legacyClaude.model,
56
+ };
57
+ changed = true;
58
+ }
59
+ return changed ? config : null;
60
+ }
61
+ async function readJson(filePath) {
62
+ try {
63
+ if (!(await fs_extra_1.default.pathExists(filePath)))
64
+ return null;
65
+ const content = await fs_extra_1.default.readFile(filePath, "utf-8");
66
+ return JSON.parse(content);
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/config/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Step } from "../../config/registry";
2
+ import { DependencyProvider, PackageInfo } from "./DependencyProvider";
3
+ export declare class BrewDependencyProvider implements DependencyProvider {
4
+ id: string;
5
+ getPackageInfo(step: Step): PackageInfo | null;
6
+ getDependents(info: PackageInfo): Promise<string[]>;
7
+ }
8
+ //# sourceMappingURL=BrewDependencyProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrewDependencyProvider.d.ts","sourceRoot":"","sources":["../../../src/executor/deps/BrewDependencyProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvE,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,EAAE,SAAU;IAEZ,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAsBxC,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAgB1D"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BrewDependencyProvider = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ class BrewDependencyProvider {
9
+ constructor() {
10
+ this.id = "brew";
11
+ }
12
+ getPackageInfo(step) {
13
+ if (!step.uninstall)
14
+ return null;
15
+ const segment = step.uninstall.split("&&")[0]?.trim() ?? "";
16
+ const tokens = segment.split(/\s+/).filter(Boolean);
17
+ const brewIndex = tokens.indexOf("brew");
18
+ if (brewIndex < 0)
19
+ return null;
20
+ const uninstallIndex = tokens.indexOf("uninstall", brewIndex + 1);
21
+ if (uninstallIndex < 0)
22
+ return null;
23
+ let isCask = false;
24
+ for (let i = uninstallIndex + 1; i < tokens.length; i++) {
25
+ const token = tokens[i];
26
+ if (token === "--cask") {
27
+ isCask = true;
28
+ continue;
29
+ }
30
+ if (token.startsWith("-"))
31
+ continue;
32
+ return { name: token, meta: { isCask } };
33
+ }
34
+ return null;
35
+ }
36
+ async getDependents(info) {
37
+ const isCask = Boolean(info.meta && info.meta.isCask);
38
+ const caskFlag = isCask ? "--cask " : "";
39
+ try {
40
+ const { stdout } = await execa_1.default.command(`brew uses --installed ${caskFlag}${info.name}`, { shell: true });
41
+ return stdout
42
+ .split(/\r?\n/)
43
+ .map((line) => line.trim())
44
+ .filter(Boolean);
45
+ }
46
+ catch {
47
+ return [];
48
+ }
49
+ }
50
+ }
51
+ exports.BrewDependencyProvider = BrewDependencyProvider;
52
+ //# sourceMappingURL=BrewDependencyProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrewDependencyProvider.js","sourceRoot":"","sources":["../../../src/executor/deps/BrewDependencyProvider.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAI1B,MAAa,sBAAsB;IAAnC;QACE,OAAE,GAAG,MAAM,CAAC;IAwCd,CAAC;IAtCC,cAAc,CAAC,IAAU;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QAClE,IAAI,cAAc,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvB,MAAM,GAAG,IAAI,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAiB;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAK,CAAC,OAAO,CACpC,yBAAyB,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAC/C,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CAAC;YACF,OAAO,MAAM;iBACV,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAzCD,wDAyCC"}
@@ -0,0 +1,11 @@
1
+ import { Step } from "../../config/registry";
2
+ export interface PackageInfo {
3
+ name: string;
4
+ meta?: Record<string, unknown>;
5
+ }
6
+ export interface DependencyProvider {
7
+ id: string;
8
+ getPackageInfo(step: Step): PackageInfo | null;
9
+ getDependents(info: PackageInfo): Promise<string[]>;
10
+ }
11
+ //# sourceMappingURL=DependencyProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyProvider.d.ts","sourceRoot":"","sources":["../../../src/executor/deps/DependencyProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC;IAC/C,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACrD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=DependencyProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyProvider.js","sourceRoot":"","sources":["../../../src/executor/deps/DependencyProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Step } from "../../config/registry";
2
+ import { DependencyProvider, PackageInfo } from "./DependencyProvider";
3
+ export declare class NpmDependencyProvider implements DependencyProvider {
4
+ id: string;
5
+ private dependentsCache;
6
+ private loadError;
7
+ getPackageInfo(step: Step): PackageInfo | null;
8
+ getDependents(info: PackageInfo): Promise<string[]>;
9
+ private buildDependentsCache;
10
+ private buildReverseDependencies;
11
+ }
12
+ //# sourceMappingURL=NpmDependencyProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmDependencyProvider.d.ts","sourceRoot":"","sources":["../../../src/executor/deps/NpmDependencyProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOvE,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,EAAE,SAAS;IACX,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,SAAS,CAAS;IAE1B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAoBxC,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAQ3C,oBAAoB;IAalC,OAAO,CAAC,wBAAwB;CAuBjC"}