@alenfitz/spec-copilot 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
@@ -1,788 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- /**
4
- * @alenfitz/spec-copilot CLI — 渐进式 Spec 编码框架(多工具统一版)
5
- *
6
- * 支持工具:opencode / claude-code / cursor / windsurf / copilot / cline
7
- *
8
- * 命令:
9
- * npx @alenfitz/spec-copilot install [--tool <name>] 初始化项目
10
- * npx @alenfitz/spec-copilot update [--force] 升级框架文件
11
- * npx @alenfitz/spec-copilot gate <name> <phase> 阶段门禁检查
12
- * npx @alenfitz/spec-copilot lint [name] Spec 完整性检查
13
- * npx @alenfitz/spec-copilot doctor 检查安装状态
14
- * npx @alenfitz/spec-copilot uninstall [--confirm] 移除框架文件
15
- *
16
- * 零外部依赖,仅使用 Node.js 内置模块。
17
- */
18
-
19
- const fs = require('fs');
20
- const path = require('path');
21
- const { execSync } = require('child_process');
22
- const { adapters, detectTools, supportedTools } = require('../adapters');
23
-
24
- // ─── 常量 ───────────────────────────────────────────────────
25
-
26
- const BUILTIN_ADAPTERS = ['_template.md', 'README.md', 'spring-boot-vue3.md'];
27
- const TOOL_STATE_FILE = '.spec-copilot-tool'; // 记录使用的工具
28
-
29
- // ─── 工具函数 ───────────────────────────────────────────────
30
-
31
- const log = {
32
- ok(msg) { console.log(`\x1b[32m✓\x1b[0m ${msg}`); },
33
- warn(msg) { console.log(`\x1b[33m⚠\x1b[0m ${msg}`); },
34
- err(msg) { console.log(`\x1b[31m✗\x1b[0m ${msg}`); },
35
- info(msg) { console.log(` ${msg}`); },
36
- title(msg){ console.log(`\n\x1b[1m${msg}\x1b[0m`); },
37
- };
38
-
39
- function copyDir(src, dest, options = {}) {
40
- const { overwrite = true, exclude = [] } = options;
41
- if (!fs.existsSync(src)) return;
42
- fs.mkdirSync(dest, { recursive: true });
43
- for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
44
- const srcPath = path.join(src, entry.name);
45
- const destPath = path.join(dest, entry.name);
46
- if (exclude.includes(entry.name)) continue;
47
- if (entry.isDirectory()) {
48
- copyDir(srcPath, destPath, options);
49
- } else if (overwrite || !fs.existsSync(destPath)) {
50
- fs.copyFileSync(srcPath, destPath);
51
- }
52
- }
53
- }
54
-
55
- function rmDirRecursive(dirPath) {
56
- if (!fs.existsSync(dirPath)) return;
57
- for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) {
58
- const p = path.join(dirPath, entry.name);
59
- if (entry.isDirectory()) {
60
- rmDirRecursive(p);
61
- } else {
62
- fs.unlinkSync(p);
63
- }
64
- }
65
- fs.rmdirSync(dirPath);
66
- }
67
-
68
- function findProjectRoot(startDir = process.cwd()) {
69
- let dir = path.resolve(startDir);
70
- while (true) {
71
- if (fs.existsSync(path.join(dir, '.git')) ||
72
- fs.existsSync(path.join(dir, 'package.json'))) {
73
- return dir;
74
- }
75
- const parent = path.dirname(dir);
76
- if (parent === dir) break;
77
- dir = parent;
78
- }
79
- return process.cwd();
80
- }
81
-
82
- function pkgRoot() {
83
- return path.resolve(__dirname, '..');
84
- }
85
-
86
- function readVersion() {
87
- try {
88
- return fs.readFileSync(path.join(pkgRoot(), 'framework', 'VERSION'), 'utf-8').trim();
89
- } catch {
90
- return 'unknown';
91
- }
92
- }
93
-
94
- function renderPromptTemplate() {
95
- const templatePath = path.join(pkgRoot(), 'framework', 'AGENTS.md.template');
96
- const template = fs.readFileSync(templatePath, 'utf-8');
97
- return template.replace(/\{\{VERSION\}\}/g, readVersion());
98
- }
99
-
100
- /** 从 framework/ 读取文件 */
101
- function readFrameworkFile(filename) {
102
- const filepath = path.join(pkgRoot(), 'framework', filename);
103
- if (!fs.existsSync(filepath)) {
104
- throw new Error(`框架文件不存在: ${filename}`);
105
- }
106
- return fs.readFileSync(filepath, 'utf-8');
107
- }
108
-
109
- /** 解析 --tool 参数或自动检测 */
110
- function resolveAdapter(args, projectRoot) {
111
- const toolIdx = args.indexOf('--tool');
112
- if (toolIdx !== -1 && args[toolIdx + 1]) {
113
- const toolName = args[toolIdx + 1];
114
- if (!adapters[toolName]) {
115
- log.err(`未知工具: ${toolName}`);
116
- log.info(`支持的工具: ${supportedTools().join(', ')}`);
117
- process.exit(1);
118
- }
119
- return adapters[toolName];
120
- }
121
-
122
- // 从状态文件读取(已安装时)
123
- const stateFile = path.join(projectRoot, 'spec_copilot', TOOL_STATE_FILE);
124
- if (fs.existsSync(stateFile)) {
125
- const savedTool = fs.readFileSync(stateFile, 'utf-8').trim();
126
- if (adapters[savedTool]) return adapters[savedTool];
127
- }
128
-
129
- // 自动检测
130
- const detected = detectTools(projectRoot);
131
- if (detected.length === 1) {
132
- return detected[0];
133
- } else if (detected.length > 1) {
134
- log.warn(`检测到多个工具: ${detected.map(a => a.displayName).join(', ')}`);
135
- log.info(`请用 --tool <name> 指定: ${detected.map(a => a.name).join(', ')}`);
136
- process.exit(1);
137
- }
138
-
139
- return null; // install 时 null 会触发提示
140
- }
141
-
142
- // ─── 安装 ───────────────────────────────────────────────────
143
-
144
- function cmdInstall(args) {
145
- const projectRoot = findProjectRoot();
146
- const srcRoot = pkgRoot();
147
- let adapter = resolveAdapter(args, projectRoot);
148
-
149
- if (!adapter) {
150
- log.err('未检测到 AI 编码工具,请用 --tool 指定:');
151
- log.info('');
152
- for (const a of Object.values(adapters)) {
153
- log.info(` --tool ${a.name.padEnd(12)} ${a.description}`);
154
- }
155
- process.exit(1);
156
- }
157
-
158
- log.title(`@alenfitz/spec-copilot install → ${adapter.displayName}`);
159
- log.info(`项目根目录: ${projectRoot}`);
160
- log.info(`框架版本: ${readVersion()}`);
161
- log.info(`目标工具: ${adapter.displayName}`);
162
-
163
- // 1. 创建 spec_copilot/ 目录结构
164
- const scDir = path.join(projectRoot, 'spec_copilot');
165
- const dirs = [
166
- scDir,
167
- path.join(scDir, 'rules'),
168
- path.join(scDir, 'stack-adapters'),
169
- path.join(scDir, 'changes', 'templates'),
170
- path.join(scDir, 'scripts'),
171
- path.join(scDir, 'knowledge'),
172
- path.join(scDir, 'archives'),
173
- path.join(scDir, 'commands'),
174
- ];
175
- for (const d of dirs) {
176
- fs.mkdirSync(d, { recursive: true });
177
- }
178
-
179
- // 2. 拷贝通用框架文件
180
- const frameworkSrc = path.join(srcRoot, 'framework');
181
- log.info('拷贝通用框架文件...');
182
- copyDir(path.join(frameworkSrc, 'rules'), path.join(scDir, 'rules'), {
183
- exclude: ['project-context.md', 'domain-rules.md'],
184
- });
185
- copyDir(path.join(frameworkSrc, 'stack-adapters'), path.join(scDir, 'stack-adapters'));
186
- copyDir(path.join(frameworkSrc, 'changes', 'templates'), path.join(scDir, 'changes', 'templates'));
187
- copyDir(path.join(frameworkSrc, 'scripts'), path.join(scDir, 'scripts'));
188
-
189
- ['VERSION', 'CHANGELOG.md'].forEach(f => {
190
- const src = path.join(frameworkSrc, f);
191
- const dest = path.join(scDir, f);
192
- if (fs.existsSync(src)) fs.copyFileSync(src, dest);
193
- });
194
-
195
- // 3. 设置脚本可执行
196
- for (const s of ['spec-lint.sh', 'spec-gate.sh', 'install-hooks.sh']) {
197
- const scriptPath = path.join(scDir, 'scripts', s);
198
- if (fs.existsSync(scriptPath)) {
199
- try { fs.chmodSync(scriptPath, 0o755); } catch {}
200
- }
201
- }
202
-
203
- // 4. 创建项目专属文件(仅当不存在时)
204
- for (const rel of ['rules/project-context.md', 'rules/domain-rules.md', 'knowledge/index.md']) {
205
- const dest = path.join(scDir, rel);
206
- if (!fs.existsSync(dest)) {
207
- const content = readFrameworkFile(rel);
208
- fs.writeFileSync(dest, content, 'utf-8');
209
- log.ok(`创建 spec_copilot/${rel}`);
210
- } else {
211
- log.warn(`跳过 spec_copilot/${rel}(已存在,保护项目内容)`);
212
- }
213
- }
214
-
215
- // 5. 安装命令文件
216
- const commandsSrc = path.join(srcRoot, 'commands');
217
- if (adapter.hasNativeCommands && adapter.commandsDir) {
218
- // 有原生命令支持 → 拷贝到工具命令目录
219
- const cmdDest = path.join(projectRoot, adapter.commandsDir);
220
- fs.mkdirSync(cmdDest, { recursive: true });
221
- copyDir(commandsSrc, cmdDest);
222
- const cmdCount = fs.readdirSync(commandsSrc).filter(f => f.endsWith('.md')).length;
223
- log.ok(`${adapter.commandsDir}/ 已安装(${cmdCount} 个斜杠命令)`);
224
- }
225
-
226
- // 同时拷贝到 spec_copilot/commands/(所有工具都有,供引用)
227
- copyDir(commandsSrc, path.join(scDir, 'commands'));
228
- if (!adapter.hasNativeCommands) {
229
- const cmdCount = fs.readdirSync(commandsSrc).filter(f => f.endsWith('.md')).length;
230
- log.ok(`spec_copilot/commands/ 已安装(${cmdCount} 个命令,通过 prompt 路由)`);
231
- }
232
-
233
- // 6. 生成提示词文件
234
- const promptPath = path.join(projectRoot, adapter.promptPath);
235
- const promptDir = path.dirname(promptPath);
236
- if (!fs.existsSync(promptPath)) {
237
- fs.mkdirSync(promptDir, { recursive: true });
238
- const rawPrompt = renderPromptTemplate();
239
- const formattedPrompt = adapter.formatPrompt(rawPrompt);
240
- fs.writeFileSync(promptPath, formattedPrompt, 'utf-8');
241
- log.ok(`${adapter.promptPath} 已创建`);
242
- } else {
243
- log.warn(`${adapter.promptPath} 已存在,跳过(update --force 覆盖)`);
244
- }
245
-
246
- // 7. 记录使用的工具
247
- fs.writeFileSync(path.join(scDir, TOOL_STATE_FILE), adapter.name, 'utf-8');
248
-
249
- // 8. Git hook
250
- installGitHook(projectRoot);
251
-
252
- log.title('安装完成');
253
- log.info('');
254
- log.info('接下来:');
255
- if (adapter.hasNativeCommands) {
256
- log.info(' 1. 执行 /spec:init(自动加载规范 + 扫描项目 + 报告状态)');
257
- } else {
258
- log.info(' 1. 对 AI 说:"读取 spec_copilot/ 目录下的规范,执行 /spec:init"');
259
- }
260
- log.info(' 2. 选择或创建 stack-adapters/<你的栈>.md');
261
- log.info(' 3. 填写 rules/domain-rules.md 业务约束(可选)');
262
- log.info(' 4. 开始使用:/spec:propose <你的第一个需求>');
263
- log.info('');
264
- log.info('验证安装:npx @alenfitz/spec-copilot doctor');
265
- }
266
-
267
- // ─── 升级 ───────────────────────────────────────────────────
268
-
269
- function cmdUpdate(args) {
270
- const force = args.includes('--force');
271
- const projectRoot = findProjectRoot();
272
- const srcRoot = pkgRoot();
273
- const scDir = path.join(projectRoot, 'spec_copilot');
274
-
275
- if (!fs.existsSync(scDir)) {
276
- log.err('未找到 spec_copilot/ 目录,请先运行 install');
277
- process.exit(1);
278
- }
279
-
280
- const adapter = resolveAdapter(args, projectRoot);
281
- if (!adapter) {
282
- log.err('无法确定工具类型,请用 --tool 指定');
283
- process.exit(1);
284
- }
285
-
286
- log.title(`@alenfitz/spec-copilot update → ${adapter.displayName}`);
287
-
288
- const localVersionPath = path.join(scDir, 'VERSION');
289
- const localVersion = fs.existsSync(localVersionPath)
290
- ? fs.readFileSync(localVersionPath, 'utf-8').trim()
291
- : 'unknown';
292
- log.info(`本地版本: ${localVersion}`);
293
- log.info(`包版本: ${readVersion()}`);
294
-
295
- if (localVersion === readVersion() && !force) {
296
- log.ok('已是最新版本(使用 --force 强制更新)');
297
- return;
298
- }
299
-
300
- const frameworkSrc = path.join(srcRoot, 'framework');
301
- log.info('更新通用框架文件...');
302
-
303
- copyDir(path.join(frameworkSrc, 'rules'), path.join(scDir, 'rules'), {
304
- exclude: ['project-context.md', 'domain-rules.md'],
305
- });
306
-
307
- const adapterDir = path.join(scDir, 'stack-adapters');
308
- const userAdapters = fs.existsSync(adapterDir)
309
- ? fs.readdirSync(adapterDir).filter(f => !BUILTIN_ADAPTERS.includes(f))
310
- : [];
311
- copyDir(path.join(frameworkSrc, 'stack-adapters'), adapterDir, {
312
- exclude: userAdapters,
313
- });
314
-
315
- copyDir(path.join(frameworkSrc, 'changes', 'templates'), path.join(scDir, 'changes', 'templates'));
316
- copyDir(path.join(frameworkSrc, 'scripts'), path.join(scDir, 'scripts'));
317
-
318
- ['VERSION', 'CHANGELOG.md'].forEach(f => {
319
- const src = path.join(frameworkSrc, f);
320
- const dest = path.join(scDir, f);
321
- if (fs.existsSync(src)) fs.copyFileSync(src, dest);
322
- });
323
-
324
- // 更新命令
325
- const commandsSrc = path.join(srcRoot, 'commands');
326
- copyDir(commandsSrc, path.join(scDir, 'commands'));
327
- if (adapter.hasNativeCommands && adapter.commandsDir) {
328
- const cmdDest = path.join(projectRoot, adapter.commandsDir);
329
- fs.mkdirSync(cmdDest, { recursive: true });
330
- copyDir(commandsSrc, cmdDest);
331
- log.ok(`${adapter.commandsDir}/ 已更新`);
332
- }
333
-
334
- // 更新 prompt
335
- const promptPath = path.join(projectRoot, adapter.promptPath);
336
- if (force || !fs.existsSync(promptPath)) {
337
- fs.mkdirSync(path.dirname(promptPath), { recursive: true });
338
- const rawPrompt = renderPromptTemplate();
339
- const formattedPrompt = adapter.formatPrompt(rawPrompt);
340
- fs.writeFileSync(promptPath, formattedPrompt, 'utf-8');
341
- log.ok(`${adapter.promptPath} 已更新`);
342
- } else {
343
- log.warn(`${adapter.promptPath} 已跳过(使用 --force 覆盖)`);
344
- }
345
-
346
- // 更新工具记录
347
- fs.writeFileSync(path.join(scDir, TOOL_STATE_FILE), adapter.name, 'utf-8');
348
-
349
- log.title('升级完成');
350
- log.info('保留的项目专属内容:');
351
- log.info(' - rules/project-context.md');
352
- log.info(' - rules/domain-rules.md');
353
- log.info(' - knowledge/');
354
- log.info(' - changes/(进行中的需求)');
355
- log.info(' - archives/');
356
- if (userAdapters.length > 0) {
357
- log.info(` - 自定义 stack-adapters:${userAdapters.join(', ')}`);
358
- }
359
- }
360
-
361
- // ─── Gate ───────────────────────────────────────────────────
362
-
363
- function cmdGate(args) {
364
- const changeName = args[0];
365
- const phase = args[1];
366
-
367
- if (!changeName || !phase) {
368
- log.err('用法: npx @alenfitz/spec-copilot gate <变更名> <phase>');
369
- log.info('phase: apply | review | test | archive');
370
- process.exit(2);
371
- }
372
-
373
- const validPhases = ['apply', 'review', 'test', 'archive'];
374
- if (!validPhases.includes(phase)) {
375
- log.err(`未知 phase: ${phase}(可选: ${validPhases.join(', ')})`);
376
- process.exit(2);
377
- }
378
-
379
- const projectRoot = findProjectRoot();
380
- const changeDir = path.join(projectRoot, 'spec_copilot', 'changes', changeName);
381
-
382
- if (!fs.existsSync(changeDir)) {
383
- log.err(`变更目录不存在: spec_copilot/changes/${changeName}/`);
384
- process.exit(1);
385
- }
386
-
387
- log.title(`Gate 检查: ${changeName} → ${phase}`);
388
-
389
- let pass = true;
390
- const fail = (msg) => { log.err(msg); pass = false; };
391
-
392
- const specPath = path.join(changeDir, 'spec.md');
393
- const tasksPath = path.join(changeDir, 'tasks.md');
394
- const logPath = path.join(changeDir, 'log.md');
395
-
396
- if (!fs.existsSync(specPath)) {
397
- fail('spec.md 不存在');
398
- log.err(`Gate 未通过 — 无法进入 ${phase} 阶段`);
399
- process.exit(1);
400
- }
401
-
402
- const specContent = fs.readFileSync(specPath, 'utf-8');
403
- const isComplex = specContent.includes('complexity:') && specContent.includes('🔴');
404
-
405
- switch (phase) {
406
- case 'apply': {
407
- const section9Match = specContent.match(/## 9\. 待澄清[\s\S]*?(?=## 10\.)/);
408
- if (section9Match && /- \[ \]/.test(section9Match[0])) {
409
- fail('§9 待澄清仍有未解决项 — 必须全部解决后才能 apply');
410
- } else {
411
- log.ok('§9 待澄清已清空');
412
- }
413
- if (isComplex && !fs.existsSync(tasksPath)) {
414
- fail('🔴 复杂需求缺少 tasks.md');
415
- } else if (isComplex) {
416
- log.ok('tasks.md 存在(🔴 复杂需求)');
417
- }
418
- if (!fs.existsSync(logPath)) {
419
- fail('log.md 不存在');
420
- } else {
421
- log.ok('log.md 存在');
422
- }
423
- break;
424
- }
425
- case 'review': {
426
- if (!fs.existsSync(logPath)) {
427
- fail('log.md 不存在');
428
- } else {
429
- const logContent = fs.readFileSync(logPath, 'utf-8');
430
- if (/smoke.*通过|冒烟.*通过|smoke.*✓/i.test(logContent)) {
431
- log.ok('log.md 含冒烟通过记录');
432
- } else {
433
- fail('log.md 无冒烟通过记录 — 请先运行 /spec:smoke');
434
- }
435
- }
436
- if (fs.existsSync(tasksPath)) {
437
- const tasksContent = fs.readFileSync(tasksPath, 'utf-8');
438
- const pendingTasks = tasksContent.match(/状态:待完成/g) || [];
439
- if (pendingTasks.length > 0) {
440
- fail(`tasks.md 中有 ${pendingTasks.length} 个未完成 task`);
441
- }
442
- }
443
- break;
444
- }
445
- case 'test': {
446
- if (!isComplex) {
447
- log.warn('非 🔴 复杂需求,test 为可选');
448
- }
449
- if (/结论:通过|Spec 合规:✅/.test(specContent)) {
450
- log.ok('spec.md §12 审查已通过');
451
- } else {
452
- fail('spec.md §12 审查结论未通过或未填写');
453
- }
454
- break;
455
- }
456
- case 'archive': {
457
- if (/结论:通过/.test(specContent)) {
458
- log.ok('spec.md §12 审查结论为通过');
459
- } else {
460
- fail('spec.md §12 审查结论未通过');
461
- }
462
- break;
463
- }
464
- }
465
-
466
- console.log('');
467
- if (pass) {
468
- log.ok(`Gate 通过 ✓ — 可以进入 ${phase} 阶段`);
469
- process.exit(0);
470
- } else {
471
- log.err(`Gate 未通过 ✗ — 无法进入 ${phase} 阶段`);
472
- process.exit(1);
473
- }
474
- }
475
-
476
- // ─── Lint ───────────────────────────────────────────────────
477
-
478
- function cmdLint(args) {
479
- const projectRoot = findProjectRoot();
480
- const lintScript = path.join(projectRoot, 'spec_copilot', 'scripts', 'spec-lint.sh');
481
-
482
- if (!fs.existsSync(lintScript)) {
483
- log.err('未找到 spec-lint.sh,请先运行 install');
484
- process.exit(1);
485
- }
486
-
487
- const target = args[0] || '';
488
- try {
489
- execSync(`bash "${lintScript}" ${target}`, { cwd: projectRoot, stdio: 'inherit' });
490
- } catch (e) {
491
- process.exit(e.status || 1);
492
- }
493
- }
494
-
495
- // ─── Doctor ─────────────────────────────────────────────────
496
-
497
- function cmdDoctor() {
498
- const projectRoot = findProjectRoot();
499
- log.title('@alenfitz/spec-copilot doctor');
500
- log.info(`项目根目录: ${projectRoot}`);
501
- log.info(`框架版本: ${readVersion()}`);
502
-
503
- let issues = 0;
504
- const scDir = path.join(projectRoot, 'spec_copilot');
505
-
506
- // 检查 spec_copilot/ 目录
507
- if (fs.existsSync(scDir)) {
508
- log.ok('spec_copilot/ 目录存在');
509
- } else {
510
- log.err('spec_copilot/ 目录不存在');
511
- issues++;
512
- log.err(`发现 ${issues} 个问题,运行 install 修复`);
513
- return;
514
- }
515
-
516
- // 检测工具
517
- const stateFile = path.join(scDir, TOOL_STATE_FILE);
518
- let adapter = null;
519
- if (fs.existsSync(stateFile)) {
520
- const toolName = fs.readFileSync(stateFile, 'utf-8').trim();
521
- adapter = adapters[toolName];
522
- if (adapter) {
523
- log.ok(`工具: ${adapter.displayName}`);
524
- }
525
- }
526
- if (!adapter) {
527
- const detected = detectTools(projectRoot);
528
- if (detected.length > 0) {
529
- adapter = detected[0];
530
- log.warn(`工具未记录,自动检测: ${adapter.displayName}`);
531
- } else {
532
- log.warn('未检测到 AI 编码工具');
533
- }
534
- }
535
-
536
- // 检查 prompt 文件
537
- if (adapter) {
538
- const promptPath = path.join(projectRoot, adapter.promptPath);
539
- if (fs.existsSync(promptPath)) {
540
- log.ok(`提示词文件: ${adapter.promptPath}`);
541
- } else {
542
- log.err(`提示词文件缺失: ${adapter.promptPath}`);
543
- issues++;
544
- }
545
-
546
- if (adapter.hasNativeCommands && adapter.commandsDir) {
547
- const cmdDir = path.join(projectRoot, adapter.commandsDir);
548
- if (fs.existsSync(cmdDir)) {
549
- const cmdFiles = fs.readdirSync(cmdDir).filter(f => f.endsWith('.md'));
550
- log.ok(`${adapter.commandsDir}/ 已安装(${cmdFiles.length} 个命令)`);
551
- } else {
552
- log.err(`${adapter.commandsDir}/ 不存在`);
553
- issues++;
554
- }
555
- }
556
- }
557
-
558
- // 检查命令文件
559
- const cmdDir = path.join(scDir, 'commands');
560
- if (fs.existsSync(cmdDir)) {
561
- const cmdFiles = fs.readdirSync(cmdDir).filter(f => f.endsWith('.md'));
562
- log.ok(`spec_copilot/commands/ 已安装(${cmdFiles.length} 个命令)`);
563
- } else {
564
- log.err('spec_copilot/commands/ 不存在');
565
- issues++;
566
- }
567
-
568
- // 检查关键文件
569
- const checkFiles = [
570
- ['spec_copilot/rules/coding-style.md', '编码规范'],
571
- ['spec_copilot/rules/security.md', '安全红线'],
572
- ['spec_copilot/rules/project-context.md', '项目上下文'],
573
- ['spec_copilot/knowledge/index.md', '知识索引'],
574
- ['spec_copilot/scripts/spec-lint.sh', 'Lint 脚本'],
575
- ];
576
- for (const [rel, label] of checkFiles) {
577
- if (fs.existsSync(path.join(projectRoot, rel))) {
578
- log.ok(`${label}(${rel})`);
579
- } else {
580
- log.err(`缺少 ${label}(${rel})`);
581
- issues++;
582
- }
583
- }
584
-
585
- // 检查 project-context.md 是否已填充
586
- const pcPath = path.join(scDir, 'rules', 'project-context.md');
587
- if (fs.existsSync(pcPath)) {
588
- const content = fs.readFileSync(pcPath, 'utf-8');
589
- if (content.match(/- 应用名:$/m)) {
590
- log.warn('project-context.md 未填充 → 请执行 /spec:init');
591
- }
592
- }
593
-
594
- // 检查 Git hook
595
- const hookPath = path.join(projectRoot, '.git', 'hooks', 'pre-commit');
596
- if (fs.existsSync(hookPath)) {
597
- const hookContent = fs.readFileSync(hookPath, 'utf-8');
598
- if (hookContent.includes('spec_copilot')) {
599
- log.ok('Git pre-commit hook 已安装');
600
- } else {
601
- log.warn('pre-commit hook 存在但不是 spec_copilot 的');
602
- }
603
- } else if (fs.existsSync(path.join(projectRoot, '.git'))) {
604
- log.warn('Git pre-commit hook 未安装(可选)');
605
- }
606
-
607
- // 检查 stack adapter
608
- const saDir = path.join(scDir, 'stack-adapters');
609
- if (fs.existsSync(saDir)) {
610
- const sas = fs.readdirSync(saDir)
611
- .filter(f => f.endsWith('.md') && f !== 'README.md' && f !== '_template.md');
612
- if (sas.length > 0) {
613
- log.ok(`技术栈适配:${sas.map(f => f.replace('.md', '')).join(', ')}`);
614
- } else {
615
- log.warn('无自定义栈适配(可基于 _template.md 创建)');
616
- }
617
- }
618
-
619
- console.log('');
620
- if (issues === 0) {
621
- log.ok('全部检查通过');
622
- } else {
623
- log.err(`发现 ${issues} 个问题,运行 install 修复`);
624
- }
625
- }
626
-
627
- // ─── 卸载 ───────────────────────────────────────────────────
628
-
629
- function cmdUninstall(args) {
630
- const confirm = args.includes('--confirm');
631
- const projectRoot = findProjectRoot();
632
- log.title('@alenfitz/spec-copilot uninstall');
633
- log.info(`项目根目录: ${projectRoot}`);
634
-
635
- const scDir = path.join(projectRoot, 'spec_copilot');
636
-
637
- // 读取工具信息
638
- const adapter = resolveAdapter(args, projectRoot);
639
-
640
- // 检查有无重要数据
641
- const changesDir = path.join(scDir, 'changes');
642
- if (fs.existsSync(changesDir)) {
643
- const activeChanges = fs.readdirSync(changesDir)
644
- .filter(d => d !== 'templates' && fs.existsSync(path.join(changesDir, d)) &&
645
- fs.statSync(path.join(changesDir, d)).isDirectory());
646
- if (activeChanges.length > 0) {
647
- log.warn(`发现 ${activeChanges.length} 个进行中的变更: ${activeChanges.join(', ')}`);
648
- }
649
- }
650
- const archivesDir = path.join(scDir, 'archives');
651
- if (fs.existsSync(archivesDir)) {
652
- try {
653
- const archives = fs.readdirSync(archivesDir).filter(d =>
654
- fs.statSync(path.join(archivesDir, d)).isDirectory());
655
- if (archives.length > 0) log.warn(`发现 ${archives.length} 个归档目录`);
656
- } catch {}
657
- }
658
-
659
- console.log('');
660
- log.info('将删除以下内容:');
661
- if (fs.existsSync(scDir)) log.info(' - spec_copilot/');
662
- if (adapter) {
663
- const promptPath = path.join(projectRoot, adapter.promptPath);
664
- if (fs.existsSync(promptPath)) log.info(` - ${adapter.promptPath}`);
665
- if (adapter.hasNativeCommands && adapter.commandsDir) {
666
- const cmdDir = path.join(projectRoot, adapter.commandsDir);
667
- if (fs.existsSync(cmdDir)) log.info(` - ${adapter.commandsDir}/`);
668
- }
669
- }
670
-
671
- if (!confirm) {
672
- console.log('');
673
- log.warn('确认卸载请运行: npx @alenfitz/spec-copilot uninstall --confirm');
674
- return;
675
- }
676
-
677
- // 执行删除
678
- if (adapter) {
679
- const promptPath = path.join(projectRoot, adapter.promptPath);
680
- if (fs.existsSync(promptPath)) {
681
- fs.unlinkSync(promptPath);
682
- log.ok(`已删除 ${adapter.promptPath}`);
683
- }
684
- if (adapter.hasNativeCommands && adapter.commandsDir) {
685
- const cmdDir = path.join(projectRoot, adapter.commandsDir);
686
- if (fs.existsSync(cmdDir)) {
687
- rmDirRecursive(cmdDir);
688
- log.ok(`已删除 ${adapter.commandsDir}/`);
689
- }
690
- }
691
- }
692
- if (fs.existsSync(scDir)) {
693
- rmDirRecursive(scDir);
694
- log.ok('已删除 spec_copilot/');
695
- }
696
-
697
- // 移除 Git hook
698
- const hookPath = path.join(projectRoot, '.git', 'hooks', 'pre-commit');
699
- if (fs.existsSync(hookPath)) {
700
- const hookContent = fs.readFileSync(hookPath, 'utf-8');
701
- if (hookContent.includes('spec_copilot')) {
702
- fs.unlinkSync(hookPath);
703
- log.ok('已删除 Git pre-commit hook');
704
- }
705
- }
706
-
707
- log.title('卸载完成');
708
- }
709
-
710
- // ─── 辅助 ───────────────────────────────────────────────────
711
-
712
- function installGitHook(projectRoot) {
713
- const hookScript = path.join(projectRoot, 'spec_copilot', 'scripts', 'install-hooks.sh');
714
- if (!fs.existsSync(hookScript)) return;
715
-
716
- const gitDir = path.join(projectRoot, '.git');
717
- if (!fs.existsSync(gitDir)) {
718
- log.warn('不在 Git 仓库中,跳过 pre-commit hook 安装');
719
- return;
720
- }
721
-
722
- try {
723
- execSync(`bash "${hookScript}"`, { cwd: projectRoot, stdio: 'pipe' });
724
- log.ok('Git pre-commit hook 已安装');
725
- } catch {
726
- log.warn('pre-commit hook 安装失败(不影响其他功能)');
727
- }
728
- }
729
-
730
- // ─── 入口 ────────────────────────────────────────────────────
731
-
732
- function showHelp() {
733
- console.log(`
734
- @alenfitz/spec-copilot — 渐进式 Spec 编码框架(多工具统一版)
735
-
736
- 支持工具: ${supportedTools().join(', ')}
737
-
738
- 用法:
739
- npx @alenfitz/spec-copilot install [--tool <name>] 初始化项目
740
- npx @alenfitz/spec-copilot update [--force] 升级框架
741
- npx @alenfitz/spec-copilot gate <name> <phase> 阶段门禁检查
742
- npx @alenfitz/spec-copilot lint [name] Spec 完整性检查
743
- npx @alenfitz/spec-copilot doctor 检查安装状态
744
- npx @alenfitz/spec-copilot uninstall [--confirm] 移除框架文件
745
-
746
- 示例:
747
- npx @alenfitz/spec-copilot install --tool cursor
748
- npx @alenfitz/spec-copilot install --tool claude-code
749
- npx @alenfitz/spec-copilot gate user-login apply
750
- npx @alenfitz/spec-copilot doctor
751
- `);
752
- }
753
-
754
- const args = process.argv.slice(2);
755
- const cmd = args[0];
756
-
757
- switch (cmd) {
758
- case 'install':
759
- cmdInstall(args.slice(1));
760
- break;
761
- case 'update':
762
- case 'upgrade':
763
- cmdUpdate(args.slice(1));
764
- break;
765
- case 'gate':
766
- cmdGate(args.slice(1));
767
- break;
768
- case 'lint':
769
- cmdLint(args.slice(1));
770
- break;
771
- case 'doctor':
772
- case 'check':
773
- cmdDoctor();
774
- break;
775
- case 'uninstall':
776
- case 'remove':
777
- cmdUninstall(args.slice(1));
778
- break;
779
- case '--help':
780
- case '-h':
781
- case undefined:
782
- showHelp();
783
- break;
784
- default:
785
- log.err(`未知命令: ${cmd}`);
786
- showHelp();
787
- process.exit(1);
788
- }
3
+ const _0x33c5e5=_0x412d,_0x2a7fa5=_0x412d;function _0x14e6(){const _0x5774f1=['igDHDguGpowpMoABTowqJq','CKnjDLu','AwXVDcb1BMLUCW','tLD6tKi','q1jOwwS','Aw4TCNvSzxmUBq','q0HbtKDfte9hlG','CY8G5lIn5A2y5zYO','B3qVC2nYAxb0CW','6lEZ6l+hihnWzwnFy28','ChjLlwnVBw1PDa','tezWBgW','cGRNLkJMS5u6cIaGBNa','5PYQ55+L5zg95lUKoIa','B21Tyw5KCW','v3vqq3K','CgLSB3qV','CgvJlwnVCgLSBW','yw1LxsaGicaGia','CgjzvK0','AwP3tKW','iowKJEADGUMCGoAXGUw6LowfS+AZQoAyR+wqPG','B2Lct3q','icaTioIhQUwUMUs5IsbZDa','BMfTzq','DgvTCgXHDgu','zM9YrwfJAa','zxHPDa','t2TsDMK','zKXcAK4','ChfzB2C','B1Lpqwm','igHVB2SG5A6j6kof5AsX6lsL','6Ag555UUicSG5OQL5zgk54Q25Ocb77Yj','ios4QUMxRUMIMo+8JoI/KoIHJcbPBG','uuz5yLy','B2TL','BKzmwxy','ALDLAvO','C3rHDhvZ','DefQtve','B3qGDxbKyxrLia','tg9KANu','mJu3ntqWDK5VseHW','5PYQ55+L5BEL5yw3oIa','B3qVioEBRUw9LEs4JEwTMowCQa','DgfZA3mUBwqG5y+y','y3DK','D0j2A1q','Bg9NlM1KifnWzq','C3rHy2STywrHCa','wfjMsei','icaG56E76zMK5Qgg5P625PAh5lU2cG','zwn0lwnVBNrLEa','mZu3mdK1ngnvzxfSAG','yuPrtfu','DgvZDa','B3qGBgLUDcbBBG','6k+355sOic0TDg9VBca','igDHDguGDxnLCG','x3rLBxbSyxrLlG','z1j0swm','lwXVz2LUigfWCa','cKbHBgvUzML0EG','CY/VViJOV5VOOyZKUk3NMOtPNidMSylVViK','5PU05PAW6ycA55sO5Qgg5P625PAh5lU2lI4','uNb0CwW','zgLYBMfTzq','CKPYDhO','wffRwg4','r2L0ihbYzs1JBW','q3vADxO','ios4QUwrVEs7Po+8JoMaMUI/HYbWCG','zgf0zsaTlwzVCG','t1P2q0O','AgfZtMf0AxzLqW','g1SZm23IMQaBwZbT','A1b1tg8','sgfyC0y','D2L0AezPBgvuEq','vNzbuwy','te1qvhC','uxPPBNG','BcaTlxrVB2WGyW','vhvXEKe','CNvSzxm','mZnUrNHzDuS','BhjMEhq','zxzbrfm','5lIn5zYOieDPDcdKU5pLUPpKUk0','Dc5Tza','q2rXuhy','l3nWzwm6Aw5PDa','5y246l295A6m5OIq','5AsA5BEL5yw357UF5lIa54Mi77YjcGRMLk8','y2uG6kAg55Uw77Yj','qxjxqM0','wgHPtwC','rNHoENa','zNjHBwv3B3jR','zs5TzcdLIjVLU7RVViK','q2nQB3O','55sO5RovoIbUChGGqge','mNDQtfbQuW','Dw5SAw5Ru3LUyW','mZuXDvrztKXT','tu1IzM8','5PIVihnWzwnFy29W','D1zmDgC','rgnjAxm','56Ab5Qoa5P+LcIaGBNb4ia','77Yi5lIn5B2X5zon5yw25lUw5yQF6io977Yj','rLnMrwS','qKnjAKO','CMvWBgfJzq','C3bLyY5TzcdKUi3LRzG','ALPutNO','zwPktMK','5PYQ5A6j6kof77Yi5y+V6ycj77Yj','DvPdzw8','ls1OzwXW','zwmTy29WAwXVDa','CLvdBe8','yxrLidXUyw1LpG','igHVB2SG5A2y5zYO5l2g5lIn','lM1K','Dc12DwuZlM1K','iow3SUABToAwSa','Bg90igLUC3rHBa','AxDwBg8','zxHJBhvKzq','5OQa5PYV5Qci6ycc6ywn77YA','BgvZl2rVBwfPBG','5y2h57QN5A6m5OIq','5BEY5yIG6zMKieDPDcbWCG','5yQO5yQG6l296kEe6iYdicSG5OMR5O+p','zxmUBwq','DhjPBq','Bg1Iuva','Ag1lEK8','Cgf0Aa','wgrltwy','iokgKIa','AerTwKO','5PU05Pgy6kAb5BEY5AgR5yAz','BhKGFcbYzxzPzq','icaGicdLJyFNUQFMOyBMNRyk','icaTihj1BgvZlW','Bg90iokaLcdMUjdOV5VLVi8G','B3bPBg90lYdNM67LVzu','CgvJoMLUAxtVViJOH6O','lMDPDa','B3DvtNO','6ycA6l+h6k6W5B2v','5Qgg5P625PAh5lU25lIn5A2y5zYOoIa','ica0lIdLVidLP4VKVB/NLkJVVjO','vfLcr3y','sNLeugG','5ywO6yoO5Qoa5P+L6ycA6l+h','u3bLyYdNVjBNOihMOyBMNRBVViG','D3jPDgvgAwXLuW','icaYlIdPGiNMI6NMIjBLIjVLU7O','veTXu2O','zgvZy3jPChrPBW','yxnRCY5Tza','iow3SUI3S+I/H++8Ios9V+EuQcaTlq','ENbbBMG','twPRDue','C3bYAw5NlwjVBW','DuvlugS','yxbWBhK','DgfZA3mUBwq','zxnZ','rNDNENq','DxPdDKS','ios4QUACQUwUJoAiKcb0yxnR','icaTignOyw5Nzq','6AQm6k+b5A6j6kof77YABNb4iea','ufnKs0i','BMXZAvu','wNrVCva','Dgv4Dc5Tza','sw5XyKS','t2LnqNa','iokaLcdML6dMS5xOV5VLHAuG','mIdLRQhMN6xNU5pORRRMNkRPGjROV4FMIjy','l3nWzwm6ChjVCa','DgvTCgXHDgvZ','CgHHC2u6igfWCa','Bg9NlM1KiowTMowCQa','wMvNEMS','Aw5ZDgfSBa','ios4QUAwNoADOowrVEs7Po+8Iq','B2WG5OYh5A6A77YA','u3bLyY1dB2rLia','Aw5MBW','pIa8CgHHC2u+','zxHPC3rZu3LUyW','vKrnyLy','DxjZB3ikicbUCa','Bu5Pvgq','txvPDxe','5y+r546Wia','CM9Qzwn0lwnVBG','5PYQ5OM+5yIWihnWzwmTBa','WQC5iow+HEA+HoA4HEw3SUA4HEEPUG','C2nYAxb0CW','Ew5J','5yAZ6Ag5iokaLcdLV4xPOBVLHAJPG6JOP6m','u0TODfy','s1vXDhG','5l+D55wz55Qe6Ag555UU5lIt5BgE5yAf5A6577YA','vKDdq3e','ChjVAMvJDc1JBW','55UU5Qch5BEL5yw3oIaGia','CgvJx2nVCgLSBW','5lIA5yQH57QM5P2F77Yi5y+V6ycj77Yj','Bg9N','C3bLyY5Tza','A2Xztge','B2rPBMCTC3r5Ba','5AgR5ywfiokgKIdOR7FMIAFOOyWGlW','CgfJA2fNzs5QCW','BMzPDhOVC3bLyW','t2jYAKe','Aw5JBhvKzxm','AxneAxjLy3rVCG','DwfPr3y','quDftLrtlM1KlG','nZu3nZa5nZzwqLL4Cg0','vwrUtvO','icaTigTUB3DSzq','B29R','EMncC3q','icaGicaGioMyTUAUTEMxQa','DxbNCMfKzq','mIdLRQhMN6xNU5pORRRKUlRPGjROV4C','5PYQ5OM+5yIWihnWzwnFyW','B3qVCNvSzxmVCa','rvDwAvy','Bg9NlM1KioAxOowgKUEdNW','y2HHBMDLCW','ENLArhq','Dc9JAgfUz2vZlW','B2Dfr3G','6kgmic9ZCgvJoNnT','zxbuDeK','5B2v5BEY5AgR5yAz','zw5KC1DPDgG','vgv6A0u','EuH0teK','DhOVC3bLyY1JBW','55sOic0TDg9VBcdMJiC','57Y65Bcria','CNvSzxmVChjVAG','lwnVCgLSB3qGzW','CMvTB3zL','ios4QUw9KUAHO+EBRUw9Lq','vu5ZALe','yxjJAgL2zxm','Dw5RBM93BG','y05dvg8','z3jruMO','5P+LcIaGBNb4iebH','B3qVCNvSzxmVyW','lYdLT7lMM7tMLRa','mtyWnda3ogTIDw1gEq','igfYy2HPDMu','wunZs1i','y29TCgXLEgL0Eq','ELj0Dey','Aw5KzxHpzG','4PQG77IpicbSB2CUBwqG','tuTNs1q','q1Pwsfi','CgDZvKq','D21duKO','AfjQuLy','DgvYCW','5BEL5yw377Ym6k+355sOic0TDg8','lNnWzwmTy29WAq','r2f0zsdMNkRPGjROV4CG4PYx','ugHzEM4','5BEY5yIG6zMKia','WQC5iow+HEA+HoA4HEs7JEACIEACQUINOW','igrVy3rVCIaGia','C3bLyZPPBML0','qNfwsfu','DgfSBcbBls1JBW','DfvQEhy','A25VD2XLzgDL','B3bPBg90lW','CMvZB2X2zq','y29UC3rYDwn0BW','q2XsrKK','D0jUzvu','5O+q56s66k+n5PAh5lU257Y65AsXoIa','ChbSEsdLROZMIjdLKi7LV4xPOBS','BwfW','DxrMltG','Bg9NlM1Kios4JEwTMowCQa','icaTigfYy2HPDG','y29WEuzPBgvtEq','B3qVy29TBwfUza','yxjJAgL2zq','DgnjBMW','BNrLEhqUBwq','BgWGwY0TDg9VBa','ChjVBxb0ugf0Aa','y294r00','ioAxOoAZLEI/M+wfPsa','DxbKyxrL','r29mv3i','wg1jBhO','vgfmru0','y2vDicaGicaGia','wwnyq3u','ChrLCNmVpos9OoEAHoAGIa','wfP1Dfe','DgL0Bgu','icaGicaGicaG5Qoa','BKPwqvq','A2rHt2i','wMj0wg4','B3qVCNvSzxmVCW','B3qGzg9JDg9Y','iow3SUwiM+w7UG','CwTnB1O','lxj1BgvZlM1Kia','5lQoif90zw1WBgf0','BwTKAxjtEw5J','DvvPsxm','EcbaywXLBMzPDa','CMvHzgrPCLn5BG','55+L6k+g57sI5BYv','cUEKUUs+IZOkicbUChG','mtaWotGXmgjksNj3ra','r2f0zsdPGjROV4CG4PYtia','pg5HBwu+ioAmH+wUMJO','y29TBwfUzhm','6ycA6l+h6k6W5B2viokaLcdOR7FLHyJOV5a','6Ag555UU5lIk5lIl5PAh','sKzOChO','lI4VywrHChrLCG','s0DfvLa','EvnXBNG','zg9TywLUlxj1Ba','cHTBmw0','wvzrCfi','55UU5B2v5lIl55Qe6kEe6iYd77Ym5OMN6kgmia','Aw5OzxjPDa','BfrxD1m','DuLnsKq','Au5Vu28','y2HLy2S','zM9Yy2uG6kAg55Uw77Yj','EI9ZCgvJlwnVCa','ls1JB25MAxjT','CMvJDxjZAxzL','yvjAExm','mIdLRQhMN6xLT7lPGjROV4C','5BEL5yw3oIa','BLnUDgi','5P+L5A6j6kof54Q25OcbcIaGBNa','77Yi5y+V6ycjoIa','se5TzLa','y3bmywO','Cvj3Dfi','tvjRugO','icaZlIdLOAVLHPKGCNu','Bwf0y2G','Axr6l3nWzwmTyW','lNnO','EvLSA0G','5BEY5PIV5PYa5PAW54Mi5PYS77Yi5l2/55sOia','Bg9NlM1K','B3z0sLq','BhKkicbUChGGqa','ios4QUwkN+IdVEEcUsdIGjqGCMu','5PsV5OYb55Qe5BEL5yw3oIa','CxvKDhO','ls1MB3jJzsdLVlRLIly','B3bPBg90ihvWza','DgfZA3mUBwqG5lIT','tgLUDcdOHjRMNkW','t0P2sLm','CgLWzq','C3rKAw8','vfDLDhi','yMfZAcaI','Chrpvha','mIdLRQhMN6xNU5pORRRMNkRPGjROV4C','Bvzpr3K','su1SDMe','uufHz0u','CfrJt2q','56gU6k6K5y246l296k+36l+q6kgmoIbU','5yYf54Mi5PYSoIaGia','DMLLDYdML7BLV4xPOBVPGjdMNAe','g1SZmM3INjmBwZbT','zs5Tza','mZi1nJGWnwLouLHcwa','qwXwqKi','CvzJvKu','zuvhyLa','vvDWquO','uffSyxq','5OYb5BEL5yw3oIa','C3rHBgWGls1JBW','zgLZCgXHEu5HBq','5Qgg5P6254Mi5PYSoIaGia','Ag9VA3m','AM9PBG','B3PVz2W','57Yw56cb6kEe6iYd','A25VD2XLzgDLlW','twDot2S','mtfVtgrhsg4','C3bLyY5TzcdcPZe','reTqswq','mJC0nJK2zNnds2H3','DYb8ihrLC3qGFa','l3nWzwmTy29WAq','sg9uCLy','idXUyw1LpL0Gia','C3rHDfn5BMm','B29lyuW','AfnMvfi','sLrSwhC','Cvvrz2i','zqOGig5WEcbayq','zgDLlW','g1SZmw3INjCBwZbT','y29TBwfUzhneAq','CgHoAeS','BgH4B1K','ywXS','r2f0zsdMNkRPGjROV4CG4Ocu','uvfPBNe','D2fYBG','vKvsu0LptG','5A6j5ywO57QI57Q/','CLDevNa','zxjY','lYdKUi3LRzJLNkG','5PEG5Rov56gU5A6A5BEL5yw357g75z6l77Ym6k+3','Bw1PDcbOB29Ria','rLfkCfq','seTqq2i','C1rtB3q','5PYQ5AgR5yAz','icaTia','zs1JB21TAxqGAa','zMHltw4','EhPey1a','Ahr1DKq','tKX5ANq','r2LhCNa','ios4QUwrVEs7Po+8Iq','sMnUugq','B21WDcdOT6/NLlhVViK','ywz4whu','zxjIvvi','yY1dB2rLiowbJ+w3RUIUSa','zKztEvq','Bg9NlM1KiowqQ+wgKUEdNW','qgfSzw5MAxr6lW','5PU05PAW77Yj','ifnWzwmG5A6m5Pw05OcN5Qoa','CM1Jr1i','D2flEgS','5Bcg5yIG6zMK5lUL5lIl5yAf5A6577YA','DuLSz3a','5A6j6kof5A6m5OIq','wNPUy0C','C0P2CLu','5BEY5A6j6kof','Aw5ZDgfSBc1OBW','icbUChGGqgfSzq','BNb4iebHBgvUzG','y2HPBgrFChjVyW','q1jUA1u','lYdLT7lLRONOO4xVViG','ioMyTUAUTq','Aw50lNnO77Ym6k+35ywi6l+q','ihn0ywnRlwfKyq','yxrLifSTlwzVCG','5zYO77Yi8j+uTcdLPi3MNylPNidMSylVViK','C2XPy2u','5OU36lsD6ycA55sO5Qgg5P625PAh5lU2lI4','CMvHzezPBgvtEq','ywXLBMzPDhOVCW','wNjSuhi','CufiwMC','igDYzxaG6AQm6k+b','u3b4CfK','C2vHCMnO','zwvptKG','shruD2O','zM9YBwf0uhjVBq','B29pD3y','6z2EipcFLlqG5Asn5P2c6zYa5Rgc77YmDa','B2TZlNnO','DcbKB2n0B3i','ChDhDvC','zg9JDg9Y','5BEY5yIG6zMKihnWzwnFyW','mtrPvfz0ugy','ueDWugO','ueHpu2m','zwn1CML0Es5Tza','suvSCKq','CNvjy2W','BMzPCM1DicaGia','CM1KAxjtEw5J','Aw5KzxGUBwq','tNfbzLi','5PYQ5Qoa5Rwl5yIWiefjioE8LUEGGq','zMLSDgvY','5y+y5PU055UU5B2v5lIn5A2y5zYOoIbZ','idXWAgfZzt4Gia','CgfKrw5K','uufUvKG','CY8G5BEY5A6j6kof77Yi','CgvZ','CNvSzxmVzg9Tyq','C3rHBgWG5l+U5Asn','s2L6zuW','CMv2Awv3','icaXlIdLR7KGquKG','5PEG6iEQ5A6A5lMj5Qci6ycc6ywn77Yi5y+V5z+6','EfzvDgm','BgvUzML0EI9ZCa','tMfbuha','C3bLyY1JB3bPBa','BNrLEhqUBwqG5PYQ','q05jrNq','zw9cCvm','AwXVDcbPBNn0yq','l3nWzwmTBgLUDa','iow3SUwTMowCQo+8JoI3S+I/H++8IhvW','icaGicaGicaGia','v2PPuge','BgvUz3rO','rxLgCxG','yLHmCNu','tMzQC1m','BgWGls10B29Sia','C3bLy19JB3bPBa','A2rcEgK','g1SWBq','z2f0zq','CNpVVjO','uhnwyxe','C3bLyY1SAw50lG'];_0x14e6=function(){return _0x5774f1;};return _0x14e6();}(function(_0x1b7c0b,_0x2a1da6){const _0x58b32f={_0x135bec:0x36c,_0x452cc1:0x330,_0x58b60c:0x26b,_0x529716:0x33b,_0x39b1c6:0x27e,_0x4c8047:0x36e,_0x4a2e02:0x22a,_0x2b8530:0x27b},_0x112b87=_0x412d,_0x534bef=_0x412d,_0x362ab6=_0x1b7c0b();while(!![]){try{const _0x901e09=-parseInt(_0x112b87(0x1e4))/(-0x1073+-0x1c36+-0x1655*-0x2)*(parseInt(_0x534bef(_0x58b32f._0x135bec))/(0x7+0x11c2+-0x3*0x5ed))+-parseInt(_0x112b87(0x35b))/(0x100f*-0x2+0x2491*0x1+-0x470)*(parseInt(_0x112b87(_0x58b32f._0x452cc1))/(0x25*-0x79+-0x7db+0x195c))+-parseInt(_0x534bef(_0x58b32f._0x58b60c))/(-0x25*0x78+0x2192+-0x1035)+parseInt(_0x534bef(_0x58b32f._0x529716))/(-0x24f7+0x1651+-0x139*-0xc)*(-parseInt(_0x534bef(0x2d5))/(-0xc5*0x26+0xefc+0xe49))+parseInt(_0x534bef(_0x58b32f._0x39b1c6))/(0xbc7+0x3*-0x3b8+0x1*-0x97)*(-parseInt(_0x534bef(_0x58b32f._0x4c8047))/(-0x4a9*0x5+0x10bf+0x697))+-parseInt(_0x534bef(_0x58b32f._0x4a2e02))/(-0x1904+-0x199+0x1aa7)*(-parseInt(_0x534bef(_0x58b32f._0x2b8530))/(0x661+0x1*0x18bd+-0x1f13))+parseInt(_0x112b87(0x3ea))/(0x137a+-0x46b*-0x1+-0x7f3*0x3);if(_0x901e09===_0x2a1da6)break;else _0x362ab6['push'](_0x362ab6['shift']());}catch(_0x4a50f7){_0x362ab6['push'](_0x362ab6['shift']());}}}(_0x14e6,-0x1499f3+0x16c115+-0xe*-0xd9ea));const _0x40b4f3=(function(){let _0x4420e9=!![];return function(_0x5f5a60,_0x4a05e8){const _0x3bf4c6={_0x477f20:0x3bb,_0xd1d085:0x2d4},_0x2504cd=_0x412d,_0x591eac={'InqbK':function(_0x1b1067,_0x5a2782){return _0x1b1067(_0x5a2782);},'rmcGR':_0x2504cd(0x335)},_0x54ca46=_0x4420e9?function(){const _0x35cd47=_0x2504cd,_0x13f461=_0x2504cd;if(_0x591eac[_0x35cd47(0x2af)]===_0x591eac['rmcGR']){if(_0x4a05e8){const _0x3152ff=_0x4a05e8[_0x35cd47(0x3af)](_0x5f5a60,arguments);return _0x4a05e8=null,_0x3152ff;}}else _0x591eac[_0x35cd47(_0x3bf4c6._0x477f20)](_0x167c0e,_0x3a512a),_0x3a770b['ok'](_0x35cd47(_0x3bf4c6._0xd1d085)+_0x35cd47(0x1fd));}:function(){};return _0x4420e9=![],_0x54ca46;};}()),_0x1c17d5=_0x40b4f3(this,function(){const _0x5486d3={_0x7276c9:0x3ee},_0x5c8b1a=_0x412d,_0x341d83=_0x412d,_0x495cd8={};_0x495cd8[_0x5c8b1a(0x3ee)]='(((.+)+)+)'+'+$';const _0x5ab6d3=_0x495cd8;return _0x1c17d5['toString']()[_0x341d83(0x2ca)](_0x5ab6d3[_0x5c8b1a(_0x5486d3._0x7276c9)])['toString']()[_0x341d83(0x1ff)+'r'](_0x1c17d5)['search'](_0x5ab6d3[_0x5c8b1a(_0x5486d3._0x7276c9)]);});_0x1c17d5();const fs=require('fs'),path=require(_0x33c5e5(0x391)),{execSync}=require(_0x2a7fa5(0x2ba)+_0x2a7fa5(0x3b1)),{adapters,detectTools,supportedTools}=require(_0x33c5e5(0x231)+'s'),BUILTIN_ADAPTERS=[_0x2a7fa5(0x341)+'md','README.md',_0x2a7fa5(0x3ad)+_0x33c5e5(0x383)],TOOL_STATE_FILE=_0x33c5e5(0x1f2)+'lot-tool',log={'ok'(_0x296705){const _0x5b42da=_0x2a7fa5;console['log'](_0x5b42da(0x269)+'\x20'+_0x296705);},'warn'(_0x9508a0){const _0x382b8c={_0x276194:0x3de,_0x27f1fc:0x351},_0x41108d=_0x33c5e5,_0x539c9a=_0x33c5e5;console[_0x41108d(_0x382b8c._0x276194)](_0x539c9a(_0x382b8c._0x27f1fc)+'\x20'+_0x9508a0);},'err'(_0x312a7f){const _0x16c78c={_0x31fd2f:0x28a},_0x4b2817=_0x2a7fa5,_0x57b56b=_0x2a7fa5;console[_0x4b2817(0x3de)](_0x57b56b(_0x16c78c._0x31fd2f)+'\x20'+_0x312a7f);},'info'(_0x3ebffc){const _0x47bfb2=_0x2a7fa5;console[_0x47bfb2(0x3de)]('\x20\x20'+_0x3ebffc);},'title'(_0x58f1c0){const _0x431866={_0x1fc305:0x3de},_0x121384=_0x33c5e5;console[_0x121384(_0x431866._0x1fc305)]('\x0a\x1b[1m'+_0x58f1c0+'\x1b[0m');}};function copyDir(_0x1ed900,_0x1161e2,_0x2218b0={}){const _0x1f5e0d={_0x4d927a:0x237,_0xc1ba52:0x240,_0x34ef4d:0x276,_0x39903f:0x31d,_0x234334:0x31d,_0x3152a0:0x3e6,_0x46ca71:0x31d,_0x54ff1f:0x2bb,_0x484315:0x1ef,_0x2053cf:0x3c8},_0x5b6ed2=_0x33c5e5,_0x2d782e=_0x33c5e5,_0x502d66={'fLBjN':_0x5b6ed2(0x2eb)+'说:\x22读取\x20spec'+'_copilot/\x20'+_0x2d782e(_0x1f5e0d._0x4d927a)+_0x5b6ed2(0x361)+'\x22','CRnkU':function(_0x4dc392,_0x17763f,_0x389123,_0x3c4b63){return _0x4dc392(_0x17763f,_0x389123,_0x3c4b63);},'PEbZo':_0x2d782e(0x1ef)},{overwrite:overwrite=!![],exclude:exclude=[]}=_0x2218b0;if(!fs[_0x5b6ed2(0x3ca)](_0x1ed900))return;const _0x452cbf={};_0x452cbf[_0x5b6ed2(_0x1f5e0d._0xc1ba52)]=!![],fs[_0x5b6ed2(0x224)](_0x1161e2,_0x452cbf);const _0xcb440d={};_0xcb440d[_0x2d782e(0x354)+_0x2d782e(0x2e6)]=!![];for(const _0x3f29dc of fs[_0x5b6ed2(0x227)+'c'](_0x1ed900,_0xcb440d)){const _0x4c5075=path[_0x5b6ed2(_0x1f5e0d._0x34ef4d)](_0x1ed900,_0x3f29dc[_0x5b6ed2(_0x1f5e0d._0x39903f)]),_0x2932d6=path[_0x5b6ed2(_0x1f5e0d._0x34ef4d)](_0x1161e2,_0x3f29dc[_0x2d782e(_0x1f5e0d._0x234334)]);if(exclude[_0x2d782e(_0x1f5e0d._0x3152a0)](_0x3f29dc[_0x2d782e(_0x1f5e0d._0x46ca71)]))continue;if(_0x3f29dc['isDirector'+'y']())_0x502d66[_0x2d782e(_0x1f5e0d._0x54ff1f)](copyDir,_0x4c5075,_0x2932d6,_0x2218b0);else(overwrite||!fs['existsSync'](_0x2932d6))&&(_0x502d66['PEbZo']!==_0x5b6ed2(_0x1f5e0d._0x484315)?_0x138dd0[_0x5b6ed2(_0x1f5e0d._0x2053cf)](_0x502d66[_0x5b6ed2(0x322)]):fs['copyFileSy'+'nc'](_0x4c5075,_0x2932d6));}}function rmDirRecursive(_0x14d580){const _0x517fdb={_0x44cf62:0x3ca,_0x3d062a:0x276,_0x4381ee:0x31d,_0x55e27b:0x3e7,_0x50e463:0x36d,_0x543bbc:0x2dc},_0x53b804=_0x2a7fa5,_0x3e4c6b=_0x2a7fa5;if(!fs[_0x53b804(_0x517fdb._0x44cf62)](_0x14d580))return;const _0x4a1cc7={};_0x4a1cc7['withFileTy'+'pes']=!![];for(const _0x5196ba of fs['readdirSyn'+'c'](_0x14d580,_0x4a1cc7)){const _0x33f0e7=path[_0x53b804(_0x517fdb._0x3d062a)](_0x14d580,_0x5196ba[_0x3e4c6b(_0x517fdb._0x4381ee)]);_0x5196ba[_0x53b804(_0x517fdb._0x55e27b)+'y']()?rmDirRecursive(_0x33f0e7):fs[_0x53b804(_0x517fdb._0x50e463)](_0x33f0e7);}fs[_0x53b804(_0x517fdb._0x543bbc)](_0x14d580);}function findProjectRoot(_0x168530=process['cwd']()){const _0x12ae23={_0x1be271:0x1fe,_0x22cd5d:0x3ca,_0x560fbf:0x276,_0x1856d8:0x348,_0x2fe691:0x334},_0x1f8c07=_0x2a7fa5,_0x43df6e=_0x2a7fa5,_0x60839e={};_0x60839e['afxXu']=function(_0xdea521,_0x343203){return _0xdea521===_0x343203;};const _0x254098=_0x60839e;let _0x4c3b49=path[_0x1f8c07(_0x12ae23._0x1be271)](_0x168530);while(!![]){if(fs[_0x1f8c07(_0x12ae23._0x22cd5d)](path[_0x1f8c07(_0x12ae23._0x560fbf)](_0x4c3b49,'.git'))||fs[_0x43df6e(_0x12ae23._0x22cd5d)](path[_0x43df6e(0x276)](_0x4c3b49,_0x43df6e(0x3e3)+'on')))return _0x4c3b49;const _0x5b346f=path[_0x1f8c07(_0x12ae23._0x1856d8)](_0x4c3b49);if(_0x254098[_0x1f8c07(0x2a7)](_0x5b346f,_0x4c3b49))break;_0x4c3b49=_0x5b346f;}return process[_0x1f8c07(_0x12ae23._0x2fe691)]();}function pkgRoot(){const _0x3896b5=_0x2a7fa5;return path[_0x3896b5(0x1fe)](__dirname,'..');}function readVersion(){const _0x382766={_0x1cefbf:0x28c,_0x59e916:0x34a,_0xd089f:0x205,_0x5cc5a2:0x359,_0x210e5e:0x23a,_0x3eccb6:0x205,_0x4bf0f1:0x243},_0x20bc48=_0x33c5e5,_0x28f8e1=_0x33c5e5,_0x8aeb65={};_0x8aeb65[_0x20bc48(_0x382766._0x1cefbf)]='VERSION',_0x8aeb65[_0x28f8e1(0x359)]=function(_0x9f83a4,_0x1ded12){return _0x9f83a4!==_0x1ded12;},_0x8aeb65[_0x28f8e1(0x3a1)]=_0x20bc48(_0x382766._0x59e916);const _0x3cab57=_0x8aeb65;try{return fs[_0x28f8e1(0x2c4)+'nc'](path[_0x20bc48(0x276)](pkgRoot(),_0x20bc48(0x368),_0x3cab57[_0x20bc48(0x28c)]),_0x20bc48(_0x382766._0xd089f))[_0x20bc48(0x38e)]();}catch{if(_0x3cab57[_0x28f8e1(_0x382766._0x5cc5a2)](_0x3cab57[_0x20bc48(0x3a1)],_0x20bc48(_0x382766._0x210e5e)))return _0x20bc48(0x1de);else{const _0x5eefd6=_0x42666d[_0x28f8e1(0x2c4)+'nc'](_0x14bd5a,_0x28f8e1(_0x382766._0x3eccb6))['trim']();_0x5e5605=_0x5bd9cc[_0x5eefd6],_0x217de5&&_0x3d3d5a['ok'](_0x28f8e1(_0x382766._0x4bf0f1)+_0x21dcfc[_0x20bc48(0x273)+'e']);}}}function renderPromptTemplate(){const _0x274dd2={_0x429004:0x276,_0xf877bd:0x3b3,_0x14aa83:0x368,_0xf8ee52:0x205,_0x11dab1:0x377},_0x280f30=_0x2a7fa5,_0x85c112=_0x2a7fa5,_0x4a730a={'uzCvK':function(_0x339908){return _0x339908();}},_0x1f6c70=path[_0x280f30(_0x274dd2._0x429004)](_0x4a730a[_0x280f30(_0x274dd2._0xf877bd)](pkgRoot),_0x280f30(_0x274dd2._0x14aa83),_0x280f30(0x3e9)+_0x280f30(0x31e)),_0x8335b3=fs[_0x280f30(0x2c4)+'nc'](_0x1f6c70,_0x280f30(_0x274dd2._0xf8ee52));return _0x8335b3[_0x85c112(_0x274dd2._0x11dab1)](/\{\{VERSION\}\}/g,readVersion());}function readFrameworkFile(_0x1e53e5){const _0x235cc3={_0x50ef12:0x371,_0x4e0c97:0x225,_0x50253e:0x205,_0x420d43:0x32d,_0x3fd0c1:0x39f},_0x59d7aa=_0x2a7fa5,_0x2aa62d=_0x2a7fa5,_0x3f6832={};_0x3f6832[_0x59d7aa(0x284)]=_0x59d7aa(0x368),_0x3f6832['tAjMQ']=_0x2aa62d(_0x235cc3._0x50ef12),_0x3f6832[_0x2aa62d(_0x235cc3._0x4e0c97)]=_0x59d7aa(_0x235cc3._0x50253e);const _0xfda91c=_0x3f6832,_0x1d86c8=path['join'](pkgRoot(),_0xfda91c['ooKaL'],_0x1e53e5);if(!fs[_0x59d7aa(0x3ca)](_0x1d86c8)){if(_0xfda91c[_0x59d7aa(_0x235cc3._0x420d43)]!==_0x59d7aa(0x371))_0x55341b['ok'](_0x1b0908+'('+_0x3928a7+')');else throw new Error(_0x2aa62d(_0x235cc3._0x3fd0c1)+_0x1e53e5);}return fs['readFileSy'+'nc'](_0x1d86c8,_0xfda91c[_0x59d7aa(_0x235cc3._0x4e0c97)]);}function resolveAdapter(_0x17abbe,_0x19772a){const _0x2bcae1={_0xa72113:0x2a1,_0x235aa9:0x277,_0x21bdd8:0x3c8,_0x23bce8:0x276,_0x3f8e5e:0x2fe,_0x209b47:0x2c4,_0x2fd2fa:0x38e,_0x348beb:0x33f},_0x205d2c=_0x33c5e5,_0x3f3324=_0x33c5e5,_0x2debcf={'htuvD':function(_0x36db58,_0x338ea9){return _0x36db58!==_0x338ea9;},'ozogl':function(_0x298019,_0xad74ff){return _0x298019+_0xad74ff;},'ljTyj':function(_0xca5737){return _0xca5737();},'lmbQP':_0x205d2c(0x205),'ObrjA':function(_0x2ef20d,_0x2623ee){return _0x2ef20d(_0x2623ee);},'BqVHU':function(_0x299f00,_0x1b8a61){return _0x299f00===_0x1b8a61;}},_0x41e209=_0x17abbe[_0x205d2c(0x1e9)]('--tool');if(_0x2debcf[_0x3f3324(_0x2bcae1._0xa72113)](_0x41e209,-(0x1a2c*0x1+0x1e2e+-0x3859))&&_0x17abbe[_0x41e209+(-0x1f4a+-0x2176+0xb*0x5e3)]){const _0x402c56=_0x17abbe[_0x2debcf[_0x3f3324(_0x2bcae1._0x235aa9)](_0x41e209,0x20f7+0x1329+-0x341f)];return!adapters[_0x402c56]&&(log['err'](_0x3f3324(0x331)+_0x402c56),log[_0x3f3324(_0x2bcae1._0x21bdd8)]('支持的工具:\x20'+_0x2debcf['ljTyj'](supportedTools)['join'](',\x20')),process['exit'](0xa20+0x210d+-0x2b2c)),adapters[_0x402c56];}const _0x481172=path[_0x3f3324(_0x2bcae1._0x23bce8)](_0x19772a,_0x3f3324(_0x2bcae1._0x3f8e5e)+'ot',TOOL_STATE_FILE);if(fs[_0x205d2c(0x3ca)](_0x481172)){const _0x1de433=fs[_0x205d2c(_0x2bcae1._0x209b47)+'nc'](_0x481172,_0x2debcf[_0x3f3324(0x38f)])[_0x205d2c(_0x2bcae1._0x2fd2fa)]();if(adapters[_0x1de433])return adapters[_0x1de433];}const _0x4302be=_0x2debcf[_0x3f3324(0x3e5)](detectTools,_0x19772a);if(_0x2debcf[_0x3f3324(0x1f9)](_0x4302be[_0x3f3324(0x2f9)],0x2*0x9b1+0x1649*0x1+0x29aa*-0x1))return _0x4302be[-0x279+0x43*0x89+0x1*-0x2162];else _0x4302be[_0x205d2c(0x2f9)]>0xc7*-0x17+0x925+0x8bd&&(log[_0x205d2c(0x291)]('检测到多个工具:\x20'+_0x4302be['map'](_0x565d44=>_0x565d44[_0x205d2c(0x273)+'e'])[_0x3f3324(0x276)](',\x20')),log[_0x3f3324(0x3c8)](_0x205d2c(_0x2bcae1._0x348beb)+_0x205d2c(0x22c)+'\x20'+_0x4302be[_0x205d2c(0x204)](_0x3a7c37=>_0x3a7c37[_0x3f3324(0x31d)])['join'](',\x20')),process['exit'](-0x24c0+-0x1d1d+0x41de));return null;}function cmdInstall(_0x9aac35){const _0x1dd852={_0x32d658:0x2df,_0x40e5e8:0x1f1,_0x56410f:0x3c6,_0x225194:0x337,_0x4feeb4:0x1f0,_0x581ff1:0x1fc,_0x1b9524:0x35a,_0x3fd4c1:0x3da,_0x5725db:0x20c,_0x4d3516:0x292,_0x598dc3:0x304,_0x5e575b:0x367,_0x4aa44b:0x3b7,_0x3e4477:0x30a,_0x5c487c:0x2ed,_0x376418:0x39b,_0x55614f:0x326,_0x29ddce:0x3a6,_0x3ea7c3:0x2bf,_0x235879:0x217,_0x59fed9:0x3a0,_0x5b3ce3:0x3bf,_0x5601e8:0x3a7,_0x578537:0x3c8,_0x53ab29:0x2e3,_0xed9938:0x393,_0xfdd7e8:0x3c8,_0x3a13a4:0x274,_0x3a64a5:0x3db,_0x3f73b2:0x273,_0x1bcc6f:0x276,_0x30a989:0x28d,_0x5748d5:0x276,_0x55f638:0x1dd,_0x1c33ce:0x224,_0x2724fc:0x2e9,_0x238be5:0x234,_0x528b94:0x1f0,_0x91544:0x3f6,_0x7dce6c:0x353,_0x3f7b28:0x3f6,_0x269ff8:0x2b7,_0x448ead:0x276,_0x11d0d2:0x3d3,_0x17f202:0x3b7,_0xd3fa55:0x3cf,_0xcf634f:0x327,_0x57892a:0x33a,_0x28530e:0x287,_0x4811e3:0x3ca,_0x46c132:0x201,_0x54ddc5:0x1eb,_0x5e52a8:0x1eb,_0x36bac7:0x291,_0x329ae6:0x3aa,_0x4aa6a4:0x291,_0x1d96ea:0x30e,_0x5dd6a5:0x2f9,_0x47695f:0x28b,_0x150814:0x218,_0x2abf97:0x2e0,_0x1d4a78:0x209,_0x425d66:0x2a6,_0xa8bb5:0x2cd,_0x1c7686:0x3d4,_0x5dc0cb:0x20e,_0x490857:0x264,_0x1236fa:0x336,_0x2b5643:0x2a9,_0x262d4e:0x1d1,_0x4069bd:0x2f6,_0x29912e:0x34e,_0x41c4e1:0x364,_0x26eda5:0x3a5,_0x369a8d:0x3d4,_0xb85176:0x219,_0x2eebb0:0x350,_0x8470cc:0x1e8,_0x3144a8:0x314,_0x5e8288:0x29b,_0x2b74ba:0x20f,_0x27a05c:0x2f9,_0x36da6d:0x3b4,_0x697312:0x24b,_0x2c5b76:0x3dd,_0x1b9bfd:0x316,_0x5a5ebd:0x2d1},_0x4bc89b={_0x47f9e6:0x276},_0x1c4e5f=_0x33c5e5,_0x2bf4cf=_0x33c5e5,_0x3219c8={'coxGM':function(_0x16749a,_0x409a8d){return _0x16749a(_0x409a8d);},'TKqSj':function(_0x1db07a){return _0x1db07a();},'ziQem':function(_0x1a23f5){return _0x1a23f5();},'lTWwS':_0x1c4e5f(_0x1dd852._0x32d658)+_0x1c4e5f(_0x1dd852._0x40e5e8)+_0x1c4e5f(_0x1dd852._0x56410f),'nFLYv':'spec_copil'+'ot','ZtoqP':_0x1c4e5f(_0x1dd852._0x225194)+_0x1c4e5f(_0x1dd852._0x4feeb4),'YVQpR':_0x2bf4cf(0x3f6),'lhxoY':_0x2bf4cf(_0x1dd852._0x581ff1),'KizeL':_0x2bf4cf(0x2c3)+'.','evADS':_0x2bf4cf(_0x1dd852._0x1b9524),'snsuV':_0x1c4e5f(_0x1dd852._0x3fd4c1)+_0x1c4e5f(_0x1dd852._0x5725db),'GoLWr':function(_0x16a73c,_0x4f83c5,_0x51d23d){return _0x16a73c(_0x4f83c5,_0x51d23d);},'HaXsF':'templates','XdKMf':_0x1c4e5f(0x3d3),'lrfxt':_0x2bf4cf(_0x1dd852._0x4d3516),'ovovK':_0x2bf4cf(_0x1dd852._0x598dc3)+'sh','hSfTR':_0x2bf4cf(0x2cb),'ZrlPr':_0x2bf4cf(_0x1dd852._0x5e575b),'wBneU':function(_0x5a13ae,_0x166ccb){return _0x5a13ae===_0x166ccb;},'rWDVp':_0x1c4e5f(_0x1dd852._0x4aa44b),'HoTrV':_0x2bf4cf(0x2e7)+_0x1c4e5f(_0x1dd852._0x3e4477)+'d','qUQgb':_0x1c4e5f(0x279)+_0x1c4e5f(0x2dd),'rUClO':_0x2bf4cf(0x205),'XZutQ':_0x2bf4cf(0x247),'rJrtz':_0x1c4e5f(0x319),'QAagE':_0x1c4e5f(_0x1dd852._0x5c487c),'aOwYU':'接下来:','zRttF':'\x20\x201.\x20执行\x20/s'+_0x1c4e5f(_0x1dd852._0x376418)+_0x2bf4cf(0x38c)+_0x2bf4cf(_0x1dd852._0x55614f),'sTSot':'WuPCy','nSntb':_0x2bf4cf(0x2eb)+'说:\x22读取\x20spec'+'_copilot/\x20'+'目录下的规范,执行\x20'+'/spec:init'+'\x22','NWzNB':_0x2bf4cf(_0x1dd852._0x29ddce)+_0x2bf4cf(_0x1dd852._0x3ea7c3)+_0x2bf4cf(_0x1dd852._0x235879)+'>.md','UVAfl':_0x2bf4cf(_0x1dd852._0x59fed9)+_0x1c4e5f(_0x1dd852._0x5b3ce3)+'ose\x20<你的第一个'+'需求>'},_0x58f3ed=_0x3219c8[_0x2bf4cf(_0x1dd852._0x5601e8)](findProjectRoot),_0xe0ee1e=_0x3219c8['ziQem'](pkgRoot);let _0xd171ed=resolveAdapter(_0x9aac35,_0x58f3ed);if(!_0xd171ed){log['err'](_0x3219c8[_0x1c4e5f(0x239)]),log[_0x1c4e5f(_0x1dd852._0x578537)]('');for(const _0x542eaf of Object['values'](adapters)){log[_0x1c4e5f(0x3c8)]('\x20\x20--tool\x20'+_0x542eaf['name'][_0x2bf4cf(_0x1dd852._0x53ab29)](0x2*0x199+-0xd*0x10f+0xa9d)+'\x20'+_0x542eaf[_0x1c4e5f(0x3a8)+'n']);}process['exit'](0x129+0x1641+-0x1769);}log['title'](_0x2bf4cf(0x2ac)+_0x2bf4cf(0x2f0)+'ot\x20install'+_0x1c4e5f(_0x1dd852._0xed9938)+_0xd171ed['displayNam'+'e']),log[_0x1c4e5f(0x3c8)]('项目根目录:\x20'+_0x58f3ed),log[_0x2bf4cf(_0x1dd852._0xfdd7e8)](_0x1c4e5f(_0x1dd852._0x3a13a4)+_0x3219c8[_0x1c4e5f(0x3a7)](readVersion)),log[_0x2bf4cf(0x3c8)](_0x1c4e5f(_0x1dd852._0x3a64a5)+_0xd171ed[_0x2bf4cf(_0x1dd852._0x3f73b2)+'e']);const _0x1b51f2=path[_0x1c4e5f(0x276)](_0x58f3ed,_0x3219c8[_0x1c4e5f(0x32a)]),_0x57fa6b=[_0x1b51f2,path[_0x2bf4cf(_0x1dd852._0x1bcc6f)](_0x1b51f2,'rules'),path[_0x2bf4cf(0x276)](_0x1b51f2,_0x3219c8[_0x2bf4cf(0x3b9)]),path[_0x1c4e5f(0x276)](_0x1b51f2,_0x3219c8[_0x1c4e5f(0x236)],'templates'),path['join'](_0x1b51f2,_0x1c4e5f(0x3d3)),path[_0x2bf4cf(_0x1dd852._0x1bcc6f)](_0x1b51f2,_0x3219c8[_0x2bf4cf(_0x1dd852._0x30a989)]),path[_0x2bf4cf(_0x1dd852._0x5748d5)](_0x1b51f2,_0x1c4e5f(_0x1dd852._0x55f638)),path['join'](_0x1b51f2,_0x2bf4cf(0x22d))];for(const _0x516cad of _0x57fa6b){const _0x55a009={};_0x55a009[_0x1c4e5f(0x240)]=!![],fs[_0x1c4e5f(_0x1dd852._0x1c33ce)](_0x516cad,_0x55a009);}const _0x4763f9=path[_0x1c4e5f(_0x1dd852._0x5748d5)](_0xe0ee1e,_0x1c4e5f(0x368));log['info'](_0x3219c8[_0x2bf4cf(_0x1dd852._0x2724fc)]),copyDir(path[_0x1c4e5f(_0x1dd852._0x1bcc6f)](_0x4763f9,'rules'),path['join'](_0x1b51f2,_0x3219c8[_0x1c4e5f(0x35d)]),{'exclude':[_0x3219c8['snsuV'],_0x1c4e5f(_0x1dd852._0x238be5)+_0x2bf4cf(0x38d)]}),copyDir(path[_0x1c4e5f(_0x1dd852._0x5748d5)](_0x4763f9,_0x3219c8['ZtoqP']),path[_0x2bf4cf(_0x1dd852._0x5748d5)](_0x1b51f2,'stack-adap'+_0x1c4e5f(_0x1dd852._0x528b94))),_0x3219c8[_0x1c4e5f(0x212)](copyDir,path[_0x1c4e5f(0x276)](_0x4763f9,_0x2bf4cf(_0x1dd852._0x91544),_0x3219c8[_0x1c4e5f(_0x1dd852._0x7dce6c)]),path[_0x1c4e5f(_0x1dd852._0x1bcc6f)](_0x1b51f2,_0x1c4e5f(_0x1dd852._0x3f7b28),_0x2bf4cf(0x3c0))),_0x3219c8[_0x2bf4cf(0x212)](copyDir,path['join'](_0x4763f9,_0x2bf4cf(0x3d3)),path['join'](_0x1b51f2,_0x3219c8[_0x1c4e5f(0x392)])),[_0x3219c8[_0x1c4e5f(0x35c)],_0x1c4e5f(0x30b)+'md'][_0x2bf4cf(0x31f)](_0x468aad=>{const _0x13ab15=_0x1c4e5f,_0x52b6cb=_0x1c4e5f,_0x5c0e6e=path[_0x13ab15(0x276)](_0x4763f9,_0x468aad),_0x446408=path[_0x52b6cb(_0x4bc89b._0x47f9e6)](_0x1b51f2,_0x468aad);if(fs[_0x52b6cb(0x3ca)](_0x5c0e6e))fs[_0x13ab15(0x208)+'nc'](_0x5c0e6e,_0x446408);});for(const _0x19e901 of[_0x3219c8['ovovK'],'spec-gate.'+'sh',_0x2bf4cf(_0x1dd852._0x269ff8)+_0x2bf4cf(0x2d0)]){if(_0x3219c8[_0x1c4e5f(0x285)]!==_0x3219c8[_0x1c4e5f(0x2c6)]){const _0x240392=path[_0x1c4e5f(_0x1dd852._0x448ead)](_0x1b51f2,_0x1c4e5f(_0x1dd852._0x11d0d2),_0x19e901);if(fs[_0x2bf4cf(0x3ca)](_0x240392)){if(_0x3219c8[_0x2bf4cf(0x201)](_0x3219c8[_0x1c4e5f(0x294)],_0x1c4e5f(_0x1dd852._0x17f202)))try{fs['chmodSync'](_0x240392,0x89*0x3f+0x1421+-0x33eb*0x1);}catch{}else _0x275389['err'](_0x1c4e5f(_0x1dd852._0xd3fa55)+_0x5e3d01+(_0x1c4e5f(_0x1dd852._0xcf634f)+'stall\x20修复'));}}else _0x280fb5['ok'](_0x1c4e5f(0x3a3));}for(const _0x224d27 of[_0x2bf4cf(0x1d8)+_0x1c4e5f(_0x1dd852._0x57892a)+_0x1c4e5f(0x35f),_0x3219c8[_0x1c4e5f(0x281)],_0x3219c8[_0x2bf4cf(_0x1dd852._0x28530e)]]){const _0x1edb3d=path[_0x1c4e5f(0x276)](_0x1b51f2,_0x224d27);if(!fs[_0x1c4e5f(_0x1dd852._0x4811e3)](_0x1edb3d)){if(_0x3219c8[_0x1c4e5f(_0x1dd852._0x46c132)](_0x2bf4cf(_0x1dd852._0x54ddc5),_0x1c4e5f(_0x1dd852._0x5e52a8))){const _0xd1a0a1=_0x3219c8[_0x2bf4cf(0x20f)](readFrameworkFile,_0x224d27);fs[_0x1c4e5f(0x3a5)+'ync'](_0x1edb3d,_0xd1a0a1,_0x3219c8[_0x2bf4cf(0x37f)]),log['ok']('创建\x20spec_co'+_0x1c4e5f(0x315)+_0x224d27);}else _0x3e961c[_0x1c4e5f(_0x1dd852._0x36bac7)](_0x3dcbe9['promptPath']+(_0x2bf4cf(_0x1dd852._0x329ae6)+_0x2bf4cf(0x23d)));}else log[_0x2bf4cf(_0x1dd852._0x4aa6a4)](_0x2bf4cf(_0x1dd852._0x1d96ea)+'pilot/'+_0x224d27+('(已存在,保护项目内'+'容)'));}const _0xb05bf5=path[_0x2bf4cf(0x276)](_0xe0ee1e,'commands');if(_0xd171ed['hasNativeC'+'ommands']&&_0xd171ed['commandsDi'+'r']){const _0x10fa3e=path[_0x2bf4cf(0x276)](_0x58f3ed,_0xd171ed['commandsDi'+'r']),_0x320c6b={};_0x320c6b['recursive']=!![],fs[_0x1c4e5f(0x224)](_0x10fa3e,_0x320c6b),copyDir(_0xb05bf5,_0x10fa3e);const _0x4b0499=fs['readdirSyn'+'c'](_0xb05bf5)['filter'](_0x52ce9c=>_0x52ce9c[_0x2bf4cf(0x1d2)](_0x2bf4cf(0x382)))[_0x2bf4cf(_0x1dd852._0x5dd6a5)];log['ok'](_0xd171ed[_0x1c4e5f(_0x1dd852._0x47695f)+'r']+'/\x20已安装('+_0x4b0499+_0x1c4e5f(0x3c5));}copyDir(_0xb05bf5,path['join'](_0x1b51f2,'commands'));if(!_0xd171ed[_0x2bf4cf(0x350)+_0x1c4e5f(0x313)]){if(_0x3219c8[_0x2bf4cf(_0x1dd852._0x150814)]==='HNmfP'){const _0xd97def=fs[_0x1c4e5f(0x227)+'c'](_0xb05bf5)[_0x1c4e5f(_0x1dd852._0x2abf97)](_0x12c884=>_0x12c884[_0x1c4e5f(0x1d2)](_0x2bf4cf(0x382)))['length'];log['ok'](_0x1c4e5f(0x2fe)+_0x2bf4cf(_0x1dd852._0x1d4a78)+'s/\x20已安装('+_0xd97def+(_0x2bf4cf(0x34d)+_0x1c4e5f(_0x1dd852._0x425d66)));}else{const _0x49ab64=_0x4fd223[_0x2bf4cf(0x276)](_0x350d2c,_0x1ed859),_0x594848=_0x22d230[_0x2bf4cf(0x276)](_0x3a726d,_0xae064f);if(_0x5874d7[_0x2bf4cf(_0x1dd852._0x4811e3)](_0x49ab64))_0x3e2525[_0x2bf4cf(0x208)+'nc'](_0x49ab64,_0x594848);}}const _0x39b64d=path[_0x1c4e5f(0x276)](_0x58f3ed,_0xd171ed[_0x2bf4cf(0x20e)]),_0x99d3e5=path['dirname'](_0x39b64d);if(!fs[_0x2bf4cf(_0x1dd852._0x4811e3)](_0x39b64d)){const _0x45d665={};_0x45d665['recursive']=!![],fs['mkdirSync'](_0x99d3e5,_0x45d665);const _0x1b964f=renderPromptTemplate(),_0x58c3e0=_0xd171ed[_0x2bf4cf(_0x1dd852._0xa8bb5)+'pt'](_0x1b964f);fs['writeFileS'+_0x1c4e5f(_0x1dd852._0x1c7686)](_0x39b64d,_0x58c3e0,_0x3219c8[_0x2bf4cf(0x37f)]),log['ok'](_0xd171ed[_0x1c4e5f(_0x1dd852._0x5dc0cb)]+'\x20已创建');}else _0x3219c8[_0x1c4e5f(0x349)]===_0x3219c8[_0x1c4e5f(_0x1dd852._0x490857)]?_0x1c0211['ok'](_0x2bf4cf(_0x1dd852._0x1236fa)+_0x1c4e5f(_0x1dd852._0x2b5643)+_0x2bf4cf(_0x1dd852._0x262d4e)):log[_0x2bf4cf(0x291)](_0xd171ed[_0x1c4e5f(0x20e)]+(_0x2bf4cf(_0x1dd852._0x4069bd)+_0x1c4e5f(_0x1dd852._0x29912e)+_0x2bf4cf(_0x1dd852._0x41c4e1)));fs[_0x1c4e5f(_0x1dd852._0x26eda5)+_0x2bf4cf(_0x1dd852._0x369a8d)](path[_0x1c4e5f(_0x1dd852._0x448ead)](_0x1b51f2,TOOL_STATE_FILE),_0xd171ed['name'],_0x2bf4cf(0x205)),_0x3219c8['coxGM'](installGitHook,_0x58f3ed),log[_0x2bf4cf(_0x1dd852._0xb85176)](_0x1c4e5f(0x2b3)),log['info'](''),log['info'](_0x3219c8['aOwYU']),_0xd171ed[_0x2bf4cf(_0x1dd852._0x2eebb0)+_0x2bf4cf(0x313)]?log[_0x1c4e5f(_0x1dd852._0xfdd7e8)](_0x3219c8[_0x2bf4cf(_0x1dd852._0x8470cc)]):_0x1c4e5f(_0x1dd852._0x3144a8)!==_0x3219c8[_0x2bf4cf(_0x1dd852._0x5e8288)]?_0x3219c8[_0x1c4e5f(_0x1dd852._0x2b74ba)](_0xd9fe37,_0x2bf4cf(0x259)+'有\x20'+_0xa4c8ee[_0x1c4e5f(_0x1dd852._0x27a05c)]+_0x2bf4cf(_0x1dd852._0x36da6d)):log[_0x1c4e5f(0x3c8)](_0x3219c8[_0x1c4e5f(0x244)]),log['info'](_0x3219c8[_0x2bf4cf(0x308)]),log[_0x1c4e5f(_0x1dd852._0x578537)](_0x1c4e5f(_0x1dd852._0x697312)+_0x2bf4cf(0x389)+_0x2bf4cf(0x222)+_0x2bf4cf(_0x1dd852._0x2c5b76)),log['info'](_0x3219c8['UVAfl']),log['info'](''),log[_0x2bf4cf(0x3c8)](_0x1c4e5f(0x3b6)+_0x1c4e5f(0x2c5)+_0x1c4e5f(_0x1dd852._0x1b9bfd)+_0x1c4e5f(_0x1dd852._0x5a5ebd));}function _0x412d(_0x35e266,_0x5d1126){_0x35e266=_0x35e266-(-0x1b5c+-0x1f73+-0x2e3*-0x15);const _0x3678be=_0x14e6();let _0x53d3ff=_0x3678be[_0x35e266];if(_0x412d['pOcizB']===undefined){var _0x5e2bde=function(_0x48f95a){const _0x54190b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3a8204='',_0x310aa1='',_0x31b2a6=_0x3a8204+_0x5e2bde,_0x1b60d0=(''+function(){return 0xe54+0xb29*0x1+-0x197d;})['indexOf']('\x0a')!==-(0x1*-0x2161+-0x39e*-0x1+0xa*0x2fa);for(let _0x546605=0x4*-0x359+0x26c1*0x1+0x2b*-0x97,_0x13e592,_0x777b6e,_0x30304d=-0x150d*-0x1+0xbc*0x32+-0x39c5;_0x777b6e=_0x48f95a['charAt'](_0x30304d++);~_0x777b6e&&(_0x13e592=_0x546605%(-0x23*-0x7f+0x25c8+-0x1*0x3721)?_0x13e592*(-0xf17+-0x10*-0xc2+0x337)+_0x777b6e:_0x777b6e,_0x546605++%(0x100*0x1f+-0x3e*-0x3+0x7b*-0x42))?_0x3a8204+=_0x1b60d0||_0x31b2a6['charCodeAt'](_0x30304d+(-0x3*0x9e3+-0x4de+0x1*0x2291))-(-0x9f8+0x2177+0x5*-0x4b1)!==-0xb08+0x1ff*-0x11+-0x2cf7*-0x1?String['fromCharCode'](0x20d7+-0x2*-0x995+0x1*-0x3302&_0x13e592>>(-(0x587+-0x2133+0x1bae)*_0x546605&-0x49*-0x2+-0x46e+0x3e2)):_0x546605:0x14d0+0x18be+-0x2d8e){_0x777b6e=_0x54190b['indexOf'](_0x777b6e);}for(let _0xcfe323=-0x18*0xa0+-0x121f+0x211f,_0x5cfdf8=_0x3a8204['length'];_0xcfe323<_0x5cfdf8;_0xcfe323++){_0x310aa1+='%'+('00'+_0x3a8204['charCodeAt'](_0xcfe323)['toString'](-0x1d4f+-0x2b7+0x4a*0x6f))['slice'](-(0x1*-0x926+0xae0+-0x1b8));}return decodeURIComponent(_0x310aa1);};_0x412d['yXPJMC']=_0x5e2bde,_0x412d['xUjouF']={},_0x412d['pOcizB']=!![];}const _0x27a6d3=_0x3678be[0x1*0x24ee+-0x1d7e+0x88*-0xe],_0x347bd8=_0x35e266+_0x27a6d3,_0x1bb3b2=_0x412d['xUjouF'][_0x347bd8];if(!_0x1bb3b2){const _0x437791=function(_0x3f3159){this['fTtJCc']=_0x3f3159,this['UQPaIh']=[-0x15c4+0x8fa+0xccb,0x14*-0x14+-0xdfe*0x1+0xf8e,-0x18c6+-0x13*0x123+0x3*0xf75],this['XxGvPG']=function(){return'newState';},this['wMmTiW']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['BzgHDD']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x437791['prototype']['uEeUly']=function(){const _0x42f1f4=new RegExp(this['wMmTiW']+this['BzgHDD']),_0x424628=_0x42f1f4['test'](this['XxGvPG']['toString']())?--this['UQPaIh'][0xbe1*-0x3+-0x19e5+0x3d89*0x1]:--this['UQPaIh'][0x586+0x24f5+-0x2a7b];return this['qxzneM'](_0x424628);},_0x437791['prototype']['qxzneM']=function(_0x1e6436){if(!Boolean(~_0x1e6436))return _0x1e6436;return this['GaQaYx'](this['fTtJCc']);},_0x437791['prototype']['GaQaYx']=function(_0x6465aa){for(let _0x30b03a=-0x18ce+-0x3*0x477+-0xb*-0x379,_0x4609d3=this['UQPaIh']['length'];_0x30b03a<_0x4609d3;_0x30b03a++){this['UQPaIh']['push'](Math['round'](Math['random']())),_0x4609d3=this['UQPaIh']['length'];}return _0x6465aa(this['UQPaIh'][0x2090+0x20ef+-0x417f]);},(''+function(){return 0x1051*-0x1+-0x2d7+0x1328;})['indexOf']('\x0a')===-(-0x473*0x3+0x2*-0xe4b+0x2*0x14f8)&&new _0x437791(_0x412d)['uEeUly'](),_0x53d3ff=_0x412d['yXPJMC'](_0x53d3ff),_0x412d['xUjouF'][_0x347bd8]=_0x53d3ff;}else _0x53d3ff=_0x1bb3b2;return _0x53d3ff;}function cmdUpdate(_0x13be59){const _0x34d62a={_0x36c762:0x2b6,_0x348d90:0x3f2,_0x1dec87:0x28e,_0x12c4a1:0x2b4,_0x3be530:0x1d6,_0x1991c3:0x257,_0x47d27c:0x346,_0x5bb190:0x35a,_0x2d78a9:0x3da,_0x23fa9d:0x234,_0x24ed98:0x3f6,_0x5de8d7:0x292,_0x5d9e9b:0x30b,_0x1ba6db:0x398,_0x4b7fdd:0x20c,_0x2aa6fe:0x3b5,_0x248634:0x295,_0x527476:0x1d4,_0x389d76:0x23b,_0x19e1ca:0x3f7,_0x1ad161:0x295,_0x1d8b6e:0x219,_0x3dfde6:0x32e,_0x32580d:0x276,_0x30ab49:0x3c8,_0x3eaeff:0x366,_0x208f1c:0x368,_0x5485d2:0x2aa,_0x291bf9:0x29a,_0x416b7a:0x2c9,_0xcfcb9f:0x299,_0x18225b:0x338,_0x4df859:0x2e0,_0x2c37ff:0x3c0,_0x161461:0x252,_0x124a39:0x324,_0x5d0035:0x276,_0x330adc:0x313,_0x191183:0x28b,_0x70a32c:0x240,_0x26251b:0x1e3,_0x8af782:0x1e0,_0x4721ae:0x2ab,_0x2ddb1a:0x348,_0x385d74:0x291,_0x2558ce:0x20e,_0x219d65:0x3d4,_0x4f5e63:0x205,_0x21003b:0x25b,_0x13eca5:0x2f2,_0x6a2147:0x25d,_0x25b096:0x31c},_0x2e39b0={_0x2d6ade:0x276},_0xb7bcc4=_0x2a7fa5,_0x3f17c0=_0x2a7fa5,_0x2748b4={'FyCFM':_0xb7bcc4(0x34b)+_0x3f17c0(0x298)+_0x3f17c0(_0x34d62a._0x36c762),'uIlgp':'--force','yHtLI':_0xb7bcc4(_0x34d62a._0x348d90)+_0x3f17c0(0x39a)+',请先运行\x20inst'+_0x3f17c0(_0x34d62a._0x1dec87),'oYOAc':function(_0x45ae3d,_0x3339ec,_0x167225){return _0x45ae3d(_0x3339ec,_0x167225);},'iNoSo':function(_0x3e64e3,_0x3f82d7){return _0x3e64e3===_0x3f82d7;},'CuZuz':_0xb7bcc4(_0x34d62a._0x12c4a1),'QFybV':_0x3f17c0(0x297)+_0x3f17c0(_0x34d62a._0x3be530)+'定','XhiMg':function(_0x3326a7){return _0x3326a7();},'Qzinx':'已是最新版本(使用\x20'+_0x3f17c0(_0x34d62a._0x1991c3)+_0x3f17c0(0x2ad),'fFSyT':_0xb7bcc4(_0x34d62a._0x47d27c)+'.','HKPCb':function(_0x55bcf9,_0x538e0e,_0x1882f5,_0x4d9064){return _0x55bcf9(_0x538e0e,_0x1882f5,_0x4d9064);},'uYtwx':_0x3f17c0(_0x34d62a._0x5bb190),'SpxpY':_0x3f17c0(_0x34d62a._0x2d78a9)+_0xb7bcc4(0x20c),'FQJpT':_0x3f17c0(_0x34d62a._0x23fa9d)+_0xb7bcc4(0x38d),'XRfHB':_0x3f17c0(0x337)+'ters','Lodju':_0x3f17c0(_0x34d62a._0x24ed98),'ovtJT':_0xb7bcc4(0x3c0),'ejJNi':_0xb7bcc4(_0x34d62a._0x5de8d7),'PECqq':_0xb7bcc4(_0x34d62a._0x5d9e9b)+'md','grQRj':function(_0x3a7aad,_0x18d056){return _0x3a7aad!==_0x18d056;},'frvJH':_0xb7bcc4(0x38a),'NqAfR':_0x3f17c0(_0x34d62a._0x1ba6db)+_0x3f17c0(0x3da)+_0xb7bcc4(_0x34d62a._0x4b7fdd),'OJvJS':_0x3f17c0(_0x34d62a._0x2aa6fe)+_0xb7bcc4(0x345),'yKXiu':_0xb7bcc4(0x207)+'es/','tpcnG':'CNIFt'},_0x27604a=_0x13be59[_0xb7bcc4(0x3e6)](_0x2748b4[_0x3f17c0(0x2b2)]),_0x3e5b91=findProjectRoot(),_0x14381f=pkgRoot(),_0x2e3fe6=path[_0x3f17c0(0x276)](_0x3e5b91,'spec_copil'+'ot');!fs[_0x3f17c0(0x3ca)](_0x2e3fe6)&&(log[_0x3f17c0(_0x34d62a._0x248634)](_0x2748b4[_0x3f17c0(_0x34d62a._0x527476)]),process['exit'](-0x9f4+-0x1bd2+-0x1*-0x25c7));const _0x5301fa=_0x2748b4[_0x3f17c0(0x324)](resolveAdapter,_0x13be59,_0x3e5b91);!_0x5301fa&&(_0x2748b4[_0xb7bcc4(_0x34d62a._0x389d76)](_0x3f17c0(_0x34d62a._0x19e1ca),_0x2748b4[_0xb7bcc4(0x34c)])?(_0xf05627[_0x3f17c0(_0x34d62a._0x1ad161)](_0xb7bcc4(0x1d7)+_0x565d2+'('+_0x1f1ece+')'),_0x7ef051++):(log[_0x3f17c0(0x295)](_0x2748b4[_0x3f17c0(0x328)]),process[_0x3f17c0(0x320)](0x3*-0x1eb+-0x162b+-0x1*-0x1bed)));log[_0x3f17c0(_0x34d62a._0x1d8b6e)]('@alenfitz/'+_0x3f17c0(0x2f0)+_0xb7bcc4(_0x34d62a._0x3dfde6)+'→\x20'+_0x5301fa['displayNam'+'e']);const _0x3dcc02=path[_0x3f17c0(_0x34d62a._0x32580d)](_0x2e3fe6,_0xb7bcc4(_0x34d62a._0x5de8d7)),_0x550e36=fs[_0xb7bcc4(0x3ca)](_0x3dcc02)?fs[_0x3f17c0(0x2c4)+'nc'](_0x3dcc02,'utf-8')[_0xb7bcc4(0x38e)]():_0x3f17c0(0x1de);log[_0xb7bcc4(_0x34d62a._0x30ab49)]('本地版本:\x20'+_0x550e36),log[_0x3f17c0(_0x34d62a._0x30ab49)](_0x3f17c0(0x267)+_0x2748b4[_0x3f17c0(_0x34d62a._0x3eaeff)](readVersion));if(_0x2748b4['iNoSo'](_0x550e36,readVersion())&&!_0x27604a){log['ok'](_0x2748b4[_0x3f17c0(0x357)]);return;}const _0x2ef190=path[_0x3f17c0(0x276)](_0x14381f,_0xb7bcc4(_0x34d62a._0x208f1c));log[_0x3f17c0(0x3c8)](_0x2748b4[_0xb7bcc4(_0x34d62a._0x5485d2)]),_0x2748b4[_0xb7bcc4(_0x34d62a._0x291bf9)](copyDir,path[_0xb7bcc4(0x276)](_0x2ef190,_0x3f17c0(0x35a)),path[_0xb7bcc4(0x276)](_0x2e3fe6,_0x2748b4['uYtwx']),{'exclude':[_0x2748b4[_0xb7bcc4(_0x34d62a._0x416b7a)],_0x2748b4[_0x3f17c0(_0x34d62a._0xcfcb9f)]]});const _0x24b397=path[_0xb7bcc4(0x276)](_0x2e3fe6,_0x2748b4[_0xb7bcc4(_0x34d62a._0x18225b)]),_0x3fafe8=fs[_0xb7bcc4(0x3ca)](_0x24b397)?fs[_0xb7bcc4(0x227)+'c'](_0x24b397)[_0x3f17c0(_0x34d62a._0x4df859)](_0x3f82a7=>!BUILTIN_ADAPTERS[_0x3f17c0(0x3e6)](_0x3f82a7)):[],_0x5afc4d={};_0x5afc4d[_0xb7bcc4(0x387)]=_0x3fafe8,_0x2748b4[_0x3f17c0(0x29a)](copyDir,path[_0xb7bcc4(0x276)](_0x2ef190,'stack-adap'+_0x3f17c0(0x1f0)),_0x24b397,_0x5afc4d),_0x2748b4[_0x3f17c0(0x324)](copyDir,path[_0xb7bcc4(0x276)](_0x2ef190,_0x2748b4[_0x3f17c0(0x32f)],_0x3f17c0(_0x34d62a._0x2c37ff)),path[_0x3f17c0(0x276)](_0x2e3fe6,'changes',_0x2748b4[_0xb7bcc4(_0x34d62a._0x161461)])),_0x2748b4[_0xb7bcc4(_0x34d62a._0x124a39)](copyDir,path[_0x3f17c0(_0x34d62a._0x32580d)](_0x2ef190,_0xb7bcc4(0x3d3)),path[_0x3f17c0(0x276)](_0x2e3fe6,_0x3f17c0(0x3d3))),[_0x2748b4[_0x3f17c0(0x37a)],_0x2748b4['PECqq']][_0xb7bcc4(0x31f)](_0x290a31=>{const _0x5ec3c0=_0xb7bcc4,_0x242248=_0xb7bcc4,_0x356904=path[_0x5ec3c0(_0x2e39b0._0x2d6ade)](_0x2ef190,_0x290a31),_0x2b9248=path['join'](_0x2e3fe6,_0x290a31);if(fs['existsSync'](_0x356904))fs[_0x242248(0x208)+'nc'](_0x356904,_0x2b9248);});const _0x122a78=path[_0x3f17c0(_0x34d62a._0x5d0035)](_0x14381f,'commands');_0x2748b4['oYOAc'](copyDir,_0x122a78,path[_0xb7bcc4(0x276)](_0x2e3fe6,'commands'));if(_0x5301fa[_0xb7bcc4(0x350)+_0x3f17c0(_0x34d62a._0x330adc)]&&_0x5301fa[_0xb7bcc4(_0x34d62a._0x191183)+'r']){const _0x12da92=path[_0x3f17c0(0x276)](_0x3e5b91,_0x5301fa[_0x3f17c0(0x28b)+'r']),_0x1a14a5={};_0x1a14a5[_0x3f17c0(_0x34d62a._0x70a32c)]=!![],fs['mkdirSync'](_0x12da92,_0x1a14a5),copyDir(_0x122a78,_0x12da92),log['ok'](_0x5301fa[_0xb7bcc4(0x28b)+'r']+_0xb7bcc4(_0x34d62a._0x26251b));}const _0x2a3a46=path['join'](_0x3e5b91,_0x5301fa['promptPath']);if(_0x27604a||!fs['existsSync'](_0x2a3a46)){if(_0x2748b4[_0xb7bcc4(_0x34d62a._0x8af782)]('SKhtV',_0x3f17c0(0x3d6)))_0xeda425['ok'](_0x3f17c0(_0x34d62a._0x4721ae)+_0xb7bcc4(0x39e));else{const _0x59137e={};_0x59137e['recursive']=!![],fs['mkdirSync'](path[_0xb7bcc4(_0x34d62a._0x2ddb1a)](_0x2a3a46),_0x59137e);const _0x1b8729=renderPromptTemplate(),_0x2ed219=_0x5301fa[_0xb7bcc4(0x2cd)+'pt'](_0x1b8729);fs['writeFileS'+_0x3f17c0(0x3d4)](_0x2a3a46,_0x2ed219,_0xb7bcc4(0x205)),log['ok'](_0x5301fa[_0x3f17c0(0x20e)]+_0xb7bcc4(0x384));}}else _0xb7bcc4(0x3a2)==='xHpgR'?(_0x148f26[_0x3f17c0(0x295)]('无法确定工具类型,请'+_0xb7bcc4(0x1d6)+'定'),_0x5346a0['exit'](-0x173c+0x2139+-0x9fc)):log[_0xb7bcc4(_0x34d62a._0x385d74)](_0x5301fa[_0xb7bcc4(_0x34d62a._0x2558ce)]+('\x20已跳过(使用\x20--'+'force\x20覆盖)'));fs[_0x3f17c0(0x3a5)+_0x3f17c0(_0x34d62a._0x219d65)](path[_0x3f17c0(0x276)](_0x2e3fe6,TOOL_STATE_FILE),_0x5301fa['name'],_0xb7bcc4(_0x34d62a._0x4f5e63)),log[_0x3f17c0(_0x34d62a._0x1d8b6e)](_0x2748b4['frvJH']),log['info'](_0x3f17c0(0x3d8)),log[_0x3f17c0(0x3c8)](_0x2748b4[_0xb7bcc4(0x2de)]),log[_0x3f17c0(0x3c8)](_0x3f17c0(_0x34d62a._0x1ba6db)+'domain-rul'+_0xb7bcc4(0x38d)),log[_0xb7bcc4(0x3c8)](_0xb7bcc4(0x3ec)+_0xb7bcc4(0x289)),log['info'](_0x2748b4[_0xb7bcc4(_0x34d62a._0x21003b)]),log[_0x3f17c0(0x3c8)](_0x2748b4['yKXiu']);if(_0x3fafe8['length']>0x60e*-0x2+0x226d+0xc5*-0x1d){if(_0xb7bcc4(_0x34d62a._0x13eca5)!==_0x2748b4['tpcnG']){const _0x5b4f6d={};_0x5b4f6d[_0xb7bcc4(0x334)]=_0x4d8b00,_0x5b4f6d[_0xb7bcc4(_0x34d62a._0x6a2147)]=_0xb7bcc4(0x25c),_0x29472c(_0x3f17c0(0x25f)+_0x2036af+'\x22',_0x5b4f6d),_0x54313a['ok'](_0x2748b4['FyCFM']);}else log[_0xb7bcc4(0x3c8)](_0x3f17c0(_0x34d62a._0x25b096)+'ack-adapte'+_0xb7bcc4(0x302)+_0x3fafe8[_0x3f17c0(_0x34d62a._0x32580d)](',\x20'));}}function cmdGate(_0x5805e1){const _0x1fa5b3={_0x4f5967:0x396,_0x598140:0x1e5,_0x3f2e54:0x33d,_0x19986c:0x3f6,_0x137e2a:0x3a9,_0x455e47:0x2c1,_0x3179ca:0x2e4,_0x417c28:0x2ab,_0x2abbf6:0x39e,_0x18d809:0x34f,_0x311a3e:0x318,_0x34fb7e:0x2a9,_0x10f517:0x333,_0x3c2eb8:0x395,_0x193d8b:0x27c,_0x2910da:0x3f1,_0x116dc8:0x2fa,_0x5021c0:0x36b,_0x26fff2:0x2ee,_0x5666ad:0x3c8,_0x95ff06:0x310,_0x234317:0x295,_0x416cf3:0x2fe,_0x627ede:0x372,_0x405715:0x1e6,_0x142395:0x37c,_0x381a64:0x3dc,_0x5b12e2:0x320,_0x9fc64:0x276,_0xa12cfa:0x3c8,_0x38c989:0x276,_0x2e6b54:0x251,_0x2e91d1:0x3ca,_0x4e9d0b:0x3f4,_0x806081:0x24f,_0xf7925f:0x210,_0x354360:0x2bd,_0x5e0cf1:0x394,_0x456bb0:0x1e7,_0x398503:0x2cc,_0x24c4eb:0x24c,_0x5d04f7:0x33d,_0x2515d2:0x3d5,_0x28cc50:0x21d,_0x4dcd8b:0x1f4,_0x48d093:0x38b,_0x1f3448:0x3ed,_0x504d3f:0x2e4,_0x28bca1:0x360,_0x1b6229:0x206,_0x2fe35f:0x204,_0x344674:0x276,_0x52efea:0x22c,_0x53444d:0x320,_0x232672:0x233,_0xbc93f4:0x2c4,_0x4be1dc:0x2ef,_0x44390b:0x33d,_0x3dea63:0x376,_0x4628fc:0x235,_0x284c54:0x233,_0x2e77bf:0x3f5,_0x4715df:0x22e,_0x404cfa:0x3fa,_0x3500f2:0x329,_0x165f04:0x3ca,_0x33f236:0x2f9,_0x30f429:0x24c,_0x7576a1:0x268,_0x54049b:0x3ca,_0x19f560:0x3eb,_0x4b3045:0x2f9,_0x1d5bfc:0x3a5,_0x650762:0x291,_0x3b163b:0x3ca,_0x3d272c:0x2c4,_0x504582:0x377,_0x2ba9b7:0x38e,_0x1229f3:0x2f9,_0xfed733:0x203,_0x1ebf52:0x2b5,_0x3e9b09:0x3cb,_0xbd56f8:0x242,_0x4bf208:0x3be,_0x19432a:0x29c,_0x3c7d4e:0x261,_0x4b30c4:0x22b,_0x3de3bc:0x3bd},_0x119d41={_0x15d397:0x323,_0x58ee2d:0x227,_0x4ede45:0x2e0,_0xb474f2:0x291,_0x3b2c35:0x3cf,_0x3c00e4:0x295},_0x3d2a4a=_0x2a7fa5,_0x2a7a08=_0x2a7fa5,_0x27d020={'LFpll':function(_0x3071bf,_0x1df2ef){return _0x3071bf(_0x1df2ef);},'klYLa':'spec.md\x20§1'+_0x3d2a4a(0x261),'MRkPj':_0x3d2a4a(0x323),'hDmZJ':_0x3d2a4a(0x30f)+_0x3d2a4a(0x381)+_0x3d2a4a(0x370)+'ilot\x20的','cpLaj':function(_0x5ec938){return _0x5ec938();},'NaAPp':_0x3d2a4a(0x205),'qkMoZ':function(_0x481843,_0x3ff809){return _0x481843!==_0x3ff809;},'EyFqx':_0x3d2a4a(0x347),'nlsiU':_0x2a7a08(0x3c1)+_0x2a7a08(_0x1fa5b3._0x4f5967)+_0x2a7a08(0x27f)+_0x2a7a08(_0x1fa5b3._0x598140),'ogEGx':_0x2a7a08(_0x1fa5b3._0x3f2e54),'bXLru':_0x3d2a4a(0x20a),'DcIis':_0x2a7a08(_0x1fa5b3._0x19986c),'uZCeo':_0x3d2a4a(0x213),'pAtYj':function(_0x3cdc7d,_0x579f91){return _0x3cdc7d(_0x579f91);},'OkRvi':_0x2a7a08(0x378)+'在','HtTwj':'apply','CZVHR':_0x2a7a08(0x3d2),'ZbtXn':'🔴\x20复杂需求缺少\x20t'+_0x2a7a08(_0x1fa5b3._0x137e2a),'PhYzn':_0x2a7a08(0x2a2),'PsVaq':'tasks.md\x20存'+_0x2a7a08(_0x1fa5b3._0x455e47),'CdqPv':_0x3d2a4a(_0x1fa5b3._0x3179ca),'UNsjQ':_0x2a7a08(0x3c2),'ySqnx':function(_0x3f8d01,_0x56e66e){return _0x3f8d01(_0x56e66e);},'nJVAT':'fcSRO','hMuqg':_0x2a7a08(_0x1fa5b3._0x417c28)+_0x2a7a08(_0x1fa5b3._0x2abbf6),'ptSBR':function(_0x1f30bd,_0x473436){return _0x1f30bd>_0x473436;},'ljIjK':_0x2a7a08(0x3eb),'JywoF':function(_0x31e531,_0x407087){return _0x31e531===_0x407087;},'sxOnb':_0x3d2a4a(_0x1fa5b3._0x18d809),'KGEVP':_0x2a7a08(_0x1fa5b3._0x311a3e),'mVOGy':_0x3d2a4a(0x1ea)+_0x2a7a08(0x3c7)+'偏差记录为空\x20—\x20🔴'+_0x2a7a08(0x31a)+'存在未记录的偏差','LLYEo':'log.md\x20Spe'+_0x2a7a08(_0x1fa5b3._0x34fb7e)+_0x2a7a08(0x1d1),'MgNOk':_0x3d2a4a(_0x1fa5b3._0x10f517)+_0x3d2a4a(_0x1fa5b3._0x3c2eb8),'sJvrU':function(_0x616443,_0x2e0b0f){return _0x616443===_0x2e0b0f;},'pwGuW':_0x3d2a4a(0x2ff),'zPfNE':_0x3d2a4a(_0x1fa5b3._0x193d8b)+_0x2a7a08(_0x1fa5b3._0x2910da),'iwVlo':function(_0x3e45e1,_0x486228){return _0x3e45e1(_0x486228);}},_0x4e6e93=_0x5805e1[0x4*0xa9+0x1cb*0x8+0x1*-0x10fc],_0x26b3c3=_0x5805e1[-0x20e2+-0x1d*-0x155+-0x31*0x1e];(!_0x4e6e93||!_0x26b3c3)&&(_0x27d020[_0x3d2a4a(0x221)](_0x27d020[_0x3d2a4a(_0x1fa5b3._0x116dc8)],'fTsWN')?(log['err'](_0x3d2a4a(_0x1fa5b3._0x5021c0)+_0x3d2a4a(_0x1fa5b3._0x26fff2)+_0x2a7a08(0x37e)+_0x3d2a4a(0x305)+_0x2a7a08(0x3c9)),log[_0x3d2a4a(_0x1fa5b3._0x5666ad)](_0x27d020[_0x3d2a4a(0x3b8)]),process[_0x2a7a08(0x320)](-0x1b5*-0x5+0x9df*0x1+0x13a*-0xf)):_0x27d020[_0x2a7a08(_0x1fa5b3._0x95ff06)](_0x4b6f5e,_0x27d020[_0x2a7a08(0x3e0)]));const _0xe5f90b=['apply',_0x2a7a08(0x2ea),_0x27d020[_0x3d2a4a(0x3f9)],_0x27d020['bXLru']];!_0xe5f90b['includes'](_0x26b3c3)&&(log[_0x3d2a4a(_0x1fa5b3._0x234317)]('未知\x20phase:\x20'+_0x26b3c3+_0x3d2a4a(0x246)+_0xe5f90b[_0x2a7a08(0x276)](',\x20')+')'),process[_0x2a7a08(0x320)](0x2*0xf98+-0x7bf*0x2+-0xfb0));const _0x2174f8=findProjectRoot(),_0xd54259=path[_0x2a7a08(0x276)](_0x2174f8,_0x2a7a08(_0x1fa5b3._0x416cf3)+'ot',_0x27d020[_0x3d2a4a(_0x1fa5b3._0x627ede)],_0x4e6e93);if(!fs['existsSync'](_0xd54259)){if(_0x2a7a08(_0x1fa5b3._0x405715)!==_0x27d020[_0x2a7a08(_0x1fa5b3._0x142395)])log[_0x2a7a08(0x295)](_0x2a7a08(0x2e1)+_0x2a7a08(_0x1fa5b3._0x381a64)+_0x2a7a08(0x3f8)+_0x4e6e93+'/'),process[_0x3d2a4a(_0x1fa5b3._0x5b12e2)](0x56+0x14c+-0x1*0x1a1);else{const _0x2b9929=_0xae7ac6[_0x3d2a4a(_0x1fa5b3._0x9fc64)](_0x45d864,_0x54c3cc['commandsDi'+'r']);if(_0x350e9a['existsSync'](_0x2b9929))_0x1e9c8e[_0x2a7a08(_0x1fa5b3._0xa12cfa)]('\x20\x20-\x20'+_0x19f88d['commandsDi'+'r']+'/');}}log['title']('Gate\x20检查:\x20'+_0x4e6e93+_0x2a7a08(0x393)+_0x26b3c3);let _0x20ba24=!![];const _0x5e8436=_0x1ab4a9=>{const _0xddfa4a=_0x2a7a08,_0xd54308=_0x2a7a08;if(_0x27d020[_0xddfa4a(0x24a)]!==_0xddfa4a(_0x119d41._0x15d397))try{const _0x2f00c2=_0x184a08[_0xddfa4a(_0x119d41._0x58ee2d)+'c'](_0x31d594)[_0xd54308(_0x119d41._0x4ede45)](_0x135b3c=>_0x591323[_0xd54308(0x283)](_0x4aa882['join'](_0x1dfe4c,_0x135b3c))[_0xddfa4a(0x3e7)+'y']());if(_0x2f00c2[_0xddfa4a(0x2f9)]>0x1226*-0x2+-0x1*-0x1322+0x112a)_0x2f1e2f[_0xddfa4a(_0x119d41._0xb474f2)](_0xddfa4a(_0x119d41._0x3b2c35)+_0x2f00c2[_0xd54308(0x2f9)]+'\x20个归档目录');}catch{}else log[_0xddfa4a(_0x119d41._0x3c00e4)](_0x1ab4a9),_0x20ba24=![];},_0x1fec04=path[_0x2a7a08(0x276)](_0xd54259,_0x3d2a4a(0x3df)),_0x6065cc=path[_0x2a7a08(_0x1fa5b3._0x38c989)](_0xd54259,_0x2a7a08(0x3b0)),_0x20708b=path[_0x3d2a4a(0x276)](_0xd54259,_0x2a7a08(_0x1fa5b3._0x2e6b54));!fs[_0x3d2a4a(_0x1fa5b3._0x2e91d1)](_0x1fec04)&&(_0x27d020[_0x3d2a4a(0x221)](_0x2a7a08(_0x1fa5b3._0x4e9d0b),_0x2a7a08(_0x1fa5b3._0x806081))?(_0x27d020['pAtYj'](_0x5e8436,_0x27d020[_0x2a7a08(0x321)]),log[_0x3d2a4a(0x295)](_0x2a7a08(0x28f)+_0x3d2a4a(_0x1fa5b3._0xf7925f)+_0x26b3c3+_0x3d2a4a(_0x1fa5b3._0x354360)),process['exit'](0x85e+0x18d*-0xf+0xee6)):_0xaee057[_0x3d2a4a(0x291)](_0x27d020[_0x2a7a08(_0x1fa5b3._0x5e0cf1)]));const _0x3e6e46=fs[_0x3d2a4a(0x2c4)+'nc'](_0x1fec04,'utf-8'),_0xfb15f7=_0x3e6e46[_0x2a7a08(0x3e6)](_0x3d2a4a(_0x1fa5b3._0x456bb0)+':')&&_0x3e6e46[_0x3d2a4a(0x3e6)]('🔴');switch(_0x26b3c3){case _0x27d020[_0x2a7a08(_0x1fa5b3._0x398503)]:{const _0x50df3a=_0x3e6e46[_0x3d2a4a(_0x1fa5b3._0x24c4eb)](/## 9\. 待澄清[\s\S]*?(?=## 10\.)/);_0x50df3a&&/- \[ \]/[_0x2a7a08(_0x1fa5b3._0x5d04f7)](_0x50df3a[0x23bc+-0x206c+0x350*-0x1])?_0x5e8436(_0x3d2a4a(0x1f6)+_0x3d2a4a(_0x1fa5b3._0x2515d2)+'决后才能\x20apply'):log['ok'](_0x27d020[_0x3d2a4a(0x1ec)]);if(_0xfb15f7&&!fs['existsSync'](_0x6065cc))_0x5e8436(_0x27d020[_0x2a7a08(_0x1fa5b3._0x28cc50)]);else _0xfb15f7&&(_0x27d020[_0x2a7a08(_0x1fa5b3._0x4dcd8b)]===_0x3d2a4a(0x33c)?(_0x282b19['unlinkSync'](_0x260e8d),_0x4f5bb5['ok'](_0x2a7a08(_0x1fa5b3._0x48d093)+_0x2a7a08(0x29e)+_0x3d2a4a(_0x1fa5b3._0x1f3448))):log['ok'](_0x27d020[_0x3d2a4a(0x303)]));!fs['existsSync'](_0x20708b)?_0x3d2a4a(_0x1fa5b3._0x504d3f)===_0x27d020[_0x2a7a08(_0x1fa5b3._0x28bca1)]?_0x5e8436(_0x2a7a08(_0x1fa5b3._0x1b6229)):(_0x30b03a['warn']('检测到多个工具:\x20'+_0x4609d3[_0x2a7a08(_0x1fa5b3._0x2fe35f)](_0x217d53=>_0x217d53[_0x3d2a4a(0x273)+'e'])[_0x3d2a4a(_0x1fa5b3._0x344674)](',\x20')),_0x39ea55['info']('请用\x20--tool\x20'+_0x2a7a08(_0x1fa5b3._0x52efea)+'\x20'+_0x331125[_0x2a7a08(0x204)](_0x1f7474=>_0x1f7474[_0x2a7a08(0x31d)])['join'](',\x20')),_0x496672[_0x2a7a08(_0x1fa5b3._0x53444d)](-0x1cb8+-0x1e*-0xb7+0x26d*0x3)):log['ok'](_0x27d020[_0x3d2a4a(0x1dc)]);break;}case'review':{if(!fs[_0x2a7a08(0x3ca)](_0x20708b))_0x27d020[_0x3d2a4a(_0x1fa5b3._0x232672)](_0x5e8436,_0x2a7a08(0x206));else{const _0x2e9d01=fs[_0x2a7a08(_0x1fa5b3._0xbc93f4)+'nc'](_0x20708b,_0x27d020[_0x2a7a08(_0x1fa5b3._0x4be1dc)]);/smoke.*通过|冒烟.*通过|smoke.*✓/i[_0x3d2a4a(_0x1fa5b3._0x44390b)](_0x2e9d01)?_0x27d020[_0x2a7a08(0x21b)]!==_0x3d2a4a(_0x1fa5b3._0x3dea63)?log['ok'](_0x27d020['hMuqg']):_0x44e0e0['log'](_0x3d2a4a(_0x1fa5b3._0x4628fc)+_0x5dcd8b+_0x2a7a08(0x300)):_0x27d020[_0x3d2a4a(_0x1fa5b3._0x284c54)](_0x5e8436,_0x2a7a08(_0x1fa5b3._0x2e77bf)+_0x3d2a4a(_0x1fa5b3._0x4715df)+_0x3d2a4a(_0x1fa5b3._0x404cfa)+_0x3d2a4a(_0x1fa5b3._0x3500f2));}if(fs[_0x2a7a08(_0x1fa5b3._0x165f04)](_0x6065cc)){const _0x103d9e=fs['readFileSy'+'nc'](_0x6065cc,'utf-8'),_0x52c813=_0x103d9e[_0x2a7a08(_0x1fa5b3._0x24c4eb)](/状态:待完成/g)||[];_0x52c813[_0x2a7a08(_0x1fa5b3._0x33f236)]>-0x23ad+-0x40e+0x27bb&&_0x5e8436('tasks.md\x20中'+'有\x20'+_0x52c813[_0x3d2a4a(0x2f9)]+_0x3d2a4a(0x3b4));}const _0x80517e=_0x3e6e46[_0x2a7a08(_0x1fa5b3._0x30f429)](/F\d{2}[::]/g)||_0x3e6e46[_0x2a7a08(_0x1fa5b3._0x24c4eb)](/功能点\s*\d+/g)||[];_0x27d020['ptSBR'](_0x80517e[_0x3d2a4a(_0x1fa5b3._0x33f236)],-0x5b*0x65+0x16e0+0xd07)&&log['ok']('spec.md\x20含\x20'+_0x80517e[_0x2a7a08(0x2f9)]+(_0x3d2a4a(0x254)+_0x3d2a4a(_0x1fa5b3._0x7576a1)+_0x2a7a08(0x2c8)));if(_0xfb15f7&&fs[_0x2a7a08(_0x1fa5b3._0x54049b)](_0x20708b)){if(_0x2a7a08(_0x1fa5b3._0x19f560)!==_0x27d020['ljIjK'])_0x5ad1b9['ok']('工具:\x20'+_0x368b65[_0x2a7a08(0x273)+'e']);else{const _0x52de47=fs[_0x3d2a4a(0x2c4)+'nc'](_0x20708b,'utf-8'),_0x2c3a9c=_0x52de47[_0x3d2a4a(0x24c)](/Spec-Code 偏差记录[\s\S]*?(?=##|$)/);if(_0x2c3a9c){const _0x314906=_0x2c3a9c[0x237b*-0x1+0x501+0x2*0xf3d]['replace'](/Spec-Code 偏差记录/,'')[_0x2a7a08(0x38e)](),_0xdebac6=_0x314906[_0x2a7a08(0x377)](/[-\s|>*]/g,'')[_0x2a7a08(_0x1fa5b3._0x4b3045)]>0x207a*-0x1+0x3e*0x7f+0x1bd*0x1;if(!_0xdebac6){if(_0x27d020['JywoF'](_0x27d020['sxOnb'],_0x27d020[_0x3d2a4a(0x232)])){const _0x105e19={};_0x105e19[_0x3d2a4a(0x240)]=!![],_0x2e4174[_0x2a7a08(0x224)](_0x3df9c7[_0x3d2a4a(0x348)](_0x1c1504),_0x105e19);const _0x59126f=WvtHZc[_0x3d2a4a(0x248)](_0x3f4241),_0x227356=_0x36173a['formatProm'+'pt'](_0x59126f);_0x5687f3[_0x2a7a08(_0x1fa5b3._0x1d5bfc)+'ync'](_0x5f1229,_0x227356,WvtHZc['NaAPp']),_0x506d10['ok'](_0x51f1d7['promptPath']+_0x3d2a4a(0x384));}else log[_0x3d2a4a(_0x1fa5b3._0x650762)](_0x27d020[_0x2a7a08(0x262)]);}else log['ok'](_0x27d020['LLYEo']);}}}if(fs[_0x3d2a4a(_0x1fa5b3._0x3b163b)](_0x6065cc)){const _0x2cb9d9=fs[_0x3d2a4a(_0x1fa5b3._0x3d272c)+'nc'](_0x6065cc,_0x27d020[_0x2a7a08(0x2ef)]),_0x31020f=_0x2cb9d9['match'](/变更摘要[\s\S]*$/);if(_0x31020f){const _0xcd6e82=_0x31020f[0x173*0x10+-0x463*-0x2+-0x1ff6][_0x3d2a4a(_0x1fa5b3._0x504582)](/变更摘要/,'')[_0x3d2a4a(_0x1fa5b3._0x2ba9b7)](),_0x30bb68=_0xcd6e82[_0x3d2a4a(0x377)](/[-\s|>*⚠️/]/g,'')[_0x3d2a4a(_0x1fa5b3._0x1229f3)]>0x5b6+0x1*0x164b+-0x1bf7*0x1;!_0x30bb68?_0x27d020['ySqnx'](_0x5e8436,_0x3d2a4a(0x333)+'更摘要未填写\x20—\x20a'+_0x2a7a08(_0x1fa5b3._0xfed733)+'填写'):log['ok'](_0x27d020[_0x2a7a08(0x27a)]);}}break;}case _0x2a7a08(0x33d):{if(_0x27d020[_0x3d2a4a(_0x1fa5b3._0x1ebf52)](_0x2a7a08(_0x1fa5b3._0x3e9b09),_0x27d020[_0x2a7a08(0x2d2)]))_0x8bdd87[_0x3d2a4a(0x295)]('提示词文件缺失:\x20'+_0x48c9e0[_0x3d2a4a(0x20e)]),_0x35838d++;else{!_0xfb15f7&&log[_0x3d2a4a(0x291)](_0x3d2a4a(0x2cf)+'est\x20为可选');/结论:通过|Spec 合规:✅/['test'](_0x3e6e46)?log['ok'](_0x2a7a08(0x27c)+_0x2a7a08(_0x1fa5b3._0xbd56f8)):_0x5e8436(_0x2a7a08(0x27c)+_0x2a7a08(_0x1fa5b3._0x4bf208)+_0x3d2a4a(_0x1fa5b3._0x19432a));break;}}case _0x27d020[_0x2a7a08(0x2fb)]:{/结论:通过/[_0x3d2a4a(0x33d)](_0x3e6e46)?log['ok'](_0x27d020['zPfNE']):_0x27d020[_0x3d2a4a(0x386)](_0x5e8436,_0x2a7a08(0x27c)+_0x2a7a08(_0x1fa5b3._0x3c7d4e));break;}}console['log'](''),_0x20ba24?(log['ok'](_0x2a7a08(_0x1fa5b3._0x4b30c4)+'—\x20可以进入\x20'+_0x26b3c3+'\x20阶段'),process['exit'](-0x6e6+-0x581*0x1+0xc67)):(log['err'](_0x2a7a08(0x1f3)+_0x3d2a4a(_0x1fa5b3._0x3de3bc)+_0x26b3c3+'\x20阶段'),process['exit'](-0x6*-0x2bb+0x2473+0x126*-0x2e));}function cmdLint(_0x5dfd03){const _0x2e4c5c={_0x494ab2:0x32b,_0x3b15dd:0x205,_0x2f6774:0x2f1,_0x125554:0x25e,_0x5daec7:0x3d7,_0x222cdd:0x3d9,_0x1a427f:0x3c3,_0x1b6a3c:0x32b,_0x18a867:0x24c,_0x2498c1:0x291,_0x4dac83:0x295,_0x7119b7:0x3c8,_0x5ead1f:0x255,_0x4faed1:0x276,_0x3f495c:0x32c},_0x52fdca=_0x2a7fa5,_0x107f87=_0x2a7fa5,_0x1ebf58={};_0x1ebf58[_0x52fdca(_0x2e4c5c._0x494ab2)]=_0x107f87(_0x2e4c5c._0x3b15dd),_0x1ebf58[_0x107f87(0x2f3)]='project-co'+_0x52fdca(_0x2e4c5c._0x2f6774)+_0x52fdca(0x3e2)+_0x107f87(0x1f8),_0x1ebf58['Ccjoz']=_0x107f87(0x2fe)+'ot',_0x1ebf58['Zegzk']='scripts',_0x1ebf58['wmCRJ']='XruyO',_0x1ebf58[_0x52fdca(0x29f)]=_0x52fdca(_0x2e4c5c._0x125554),_0x1ebf58[_0x107f87(_0x2e4c5c._0x5daec7)]=_0x107f87(0x3d1)+_0x107f87(0x2be)+'行\x20install',_0x1ebf58[_0x107f87(_0x2e4c5c._0x222cdd)]='YWAqI';const _0x364087=_0x1ebf58,_0x5a1b5b=findProjectRoot(),_0x16eb04=path[_0x107f87(0x276)](_0x5a1b5b,_0x364087[_0x52fdca(0x36a)],_0x364087[_0x107f87(_0x2e4c5c._0x1a427f)],'spec-lint.'+'sh');if(!fs['existsSync'](_0x16eb04)){if(_0x364087[_0x107f87(0x1ee)]!==_0x364087[_0x52fdca(0x29f)])log[_0x52fdca(0x295)](_0x364087['KUqtx']),process[_0x52fdca(0x320)](-0x713*-0x1+0x1fe7+-0x26f9);else{const _0x1d1a52=_0x325977[_0x107f87(0x2c4)+'nc'](_0x357a03,_0x364087[_0x52fdca(_0x2e4c5c._0x1b6a3c)]);_0x1d1a52[_0x52fdca(_0x2e4c5c._0x18a867)](/- 应用名:$/m)&&_0x2494f5[_0x52fdca(_0x2e4c5c._0x2498c1)](_0x364087['eoBqS']);}}const _0x1b4380=_0x5dfd03[-0x5*-0x2e9+-0x1b1b*-0x1+-0x29a8]||'';try{if(_0x364087['VGCCq']===_0x52fdca(0x2a3)){const _0x11d24c=_0x2c390f[_0x3bbdba+(0x25eb*-0x1+-0x2*0x3d9+0x2d9e)];return!_0x58bed4[_0x11d24c]&&(_0x8eed90[_0x107f87(_0x2e4c5c._0x4dac83)]('未知工具:\x20'+_0x11d24c),_0x3abf5c[_0x52fdca(_0x2e4c5c._0x7119b7)](_0x107f87(_0x2e4c5c._0x5ead1f)+_0x3dffe2()[_0x52fdca(_0x2e4c5c._0x4faed1)](',\x20')),_0x45acae[_0x107f87(0x320)](-0x25ed+-0x1*-0x99e+-0x714*-0x4)),_0x4939e8[_0x11d24c];}else{const _0x1a3d68={};_0x1a3d68[_0x107f87(0x334)]=_0x5a1b5b,_0x1a3d68[_0x52fdca(0x25d)]=_0x52fdca(0x238),execSync(_0x52fdca(0x25f)+_0x16eb04+'\x22\x20'+_0x1b4380,_0x1a3d68);}}catch(_0x1a431c){process[_0x107f87(0x320)](_0x1a431c[_0x107f87(_0x2e4c5c._0x3f495c)]||0x127b+-0x1017+-0x263);}}function cmdDoctor(){const _0x3094a9={_0x2e09cd:0x30f,_0x48c5bc:0x3ce,_0x309a03:0x2df,_0x316d7b:0x30c,_0x6cf96b:0x2fe,_0x521839:0x3f3,_0x13455a:0x22f,_0x563fc1:0x37b,_0x5dbfb6:0x2f0,_0x37cb01:0x3c8,_0x25c176:0x26c,_0x3fec0e:0x276,_0x2327a1:0x3ca,_0x2d7dd8:0x20b,_0x42ee0b:0x265,_0x3ae18b:0x3ce,_0x1d4caf:0x38e,_0xde6d58:0x243,_0x4b4867:0x286,_0x32333a:0x2d9,_0x5a011d:0x1d0,_0x265167:0x20e,_0x4a06f4:0x295,_0x5cd9c0:0x350,_0x4fe8bc:0x313,_0x3fa0b3:0x28b,_0x389a17:0x306,_0x298502:0x309,_0x240700:0x249,_0x31db6c:0x2f9,_0x569fa4:0x2a4,_0x5f1c65:0x28b,_0x504a40:0x296,_0x16b8c6:0x22d,_0x30131e:0x295,_0x443221:0x3cd,_0x3a5c64:0x3e1,_0x531e6b:0x26a,_0x41f8ac:0x21e,_0x10e9c6:0x200,_0x3b37ea:0x30d,_0x55843a:0x2f5,_0x88d5a7:0x24e,_0x45b4f2:0x25a,_0x3e8bb1:0x3ca,_0x3b22f8:0x35a,_0x30c03b:0x20c,_0x179ded:0x2a8,_0x4aef63:0x205,_0xd8d245:0x24c,_0x389255:0x3da,_0x430080:0x2f1,_0x586603:0x275,_0x10d8cf:0x205,_0x4020be:0x3e6,_0x3380ac:0x30f,_0x4793b5:0x355,_0x18265d:0x3bc,_0x422a54:0x216,_0x262fa4:0x298,_0x33086f:0x291,_0x4d393b:0x1f0,_0x4821af:0x2a0,_0x1020ac:0x276,_0x3277b3:0x3ca,_0x574677:0x388,_0x4411ed:0x276,_0x576a1a:0x286,_0x104f5c:0x270,_0x416152:0x240,_0x5469fb:0x224,_0x53ebb3:0x20e,_0x42e754:0x220,_0x51da0c:0x2e8},_0x5ae3fa=_0x33c5e5,_0x44a32e=_0x33c5e5,_0x3b91c7={'MjkuA':'spec.md\x20§1'+'2\x20审查结论未通过或'+_0x5ae3fa(0x29c),'qRwtR':function(_0x1b6b55,_0x2f5630,_0x2d0b6b,_0x1a5609){return _0x1b6b55(_0x2f5630,_0x2d0b6b,_0x1a5609);},'YcXCu':_0x44a32e(0x205),'ojmNu':_0x44a32e(_0x3094a9._0x2e09cd)+_0x44a32e(0x381)+'是\x20spec_cop'+'ilot\x20的','AlVBB':function(_0x5a81f2){return _0x5a81f2();},'cNCTo':_0x44a32e(0x368),'owUNz':function(_0x4e610f,_0xaaa41){return _0x4e610f!==_0xaaa41;},'LMPTw':_0x44a32e(0x20b),'pTcOd':function(_0x277f8b,_0xcc67e6){return _0x277f8b!==_0xcc67e6;},'TezkE':_0x5ae3fa(_0x3094a9._0x48c5bc),'JTlXw':function(_0x2d26cd,_0x41489c){return _0x2d26cd===_0x41489c;},'IElrD':function(_0x8fa5bd,_0x18b507){return _0x8fa5bd(_0x18b507);},'tUjxv':function(_0x1632b6,_0x28e580){return _0x1632b6>_0x28e580;},'epTtI':_0x44a32e(_0x3094a9._0x309a03)+'工具','rCIvU':_0x44a32e(0x21c),'CRhYk':'HOjIS','mNiTd':_0x44a32e(0x2fe)+_0x44a32e(0x209)+_0x44a32e(_0x3094a9._0x316d7b),'ncVlf':_0x5ae3fa(_0x3094a9._0x6cf96b)+_0x5ae3fa(_0x3094a9._0x521839)+_0x44a32e(0x3d0)+_0x44a32e(0x3ba),'ClRFI':_0x5ae3fa(_0x3094a9._0x13455a),'aRZys':_0x44a32e(0x2fe)+'ot/knowled'+'ge/index.m'+'d','MMbfo':_0x5ae3fa(0x2a8),'rvGyq':'pre-commit','rjpMK':_0x5ae3fa(0x34b)+'mmit\x20hook\x20'+_0x5ae3fa(0x2b6),'VvAQf':_0x5ae3fa(0x3bc),'gRtIc':'Git\x20pre-co'+_0x44a32e(0x298)+_0x44a32e(_0x3094a9._0x563fc1),'pgsVD':_0x44a32e(0x2a0)},_0x5b8962=findProjectRoot();log[_0x44a32e(0x219)](_0x44a32e(0x2ac)+_0x5ae3fa(_0x3094a9._0x5dbfb6)+_0x5ae3fa(0x21f)),log[_0x44a32e(_0x3094a9._0x37cb01)]('项目根目录:\x20'+_0x5b8962),log[_0x5ae3fa(0x3c8)](_0x44a32e(0x274)+_0x3b91c7[_0x44a32e(_0x3094a9._0x25c176)](readVersion));let _0x160d9e=0x152a+-0xe47+-0x6e3;const _0x21d478=path[_0x44a32e(_0x3094a9._0x3fec0e)](_0x5b8962,_0x44a32e(0x2fe)+'ot');if(fs[_0x44a32e(_0x3094a9._0x2327a1)](_0x21d478))log['ok'](_0x44a32e(0x2fe)+'ot/\x20目录存在');else{if(_0x3b91c7[_0x44a32e(0x39d)](_0x3b91c7[_0x5ae3fa(0x356)],_0x44a32e(_0x3094a9._0x2d7dd8)))_0x44347d['chmodSync'](_0x5b4bec,-0x1*0x153b+-0x39a*-0x1+-0x138e*-0x1);else{log[_0x5ae3fa(0x295)](_0x44a32e(0x2fe)+_0x5ae3fa(0x332)),_0x160d9e++,log['err']('发现\x20'+_0x160d9e+(_0x44a32e(0x327)+'stall\x20修复'));return;}}const _0x2550b0=path[_0x44a32e(0x276)](_0x21d478,TOOL_STATE_FILE);let _0x2a9a8a=null;if(fs[_0x44a32e(0x3ca)](_0x2550b0)){if(_0x3b91c7[_0x5ae3fa(_0x3094a9._0x42ee0b)](_0x5ae3fa(_0x3094a9._0x3ae18b),_0x3b91c7[_0x5ae3fa(0x1d3)]))_0x45b7a4(PrRyzJ[_0x5ae3fa(0x3ac)]);else{const _0x4be562=fs['readFileSy'+'nc'](_0x2550b0,_0x3b91c7['YcXCu'])[_0x5ae3fa(_0x3094a9._0x1d4caf)]();_0x2a9a8a=adapters[_0x4be562],_0x2a9a8a&&log['ok'](_0x5ae3fa(_0x3094a9._0xde6d58)+_0x2a9a8a[_0x5ae3fa(0x273)+'e']);}}if(!_0x2a9a8a){if(_0x3b91c7[_0x44a32e(_0x3094a9._0x4b4867)]('PHOSc',_0x5ae3fa(0x2d7))){const _0xda723e=_0x3b91c7[_0x44a32e(_0x3094a9._0x32333a)](detectTools,_0x5b8962);_0x3b91c7[_0x44a32e(0x1fb)](_0xda723e['length'],0x2188+0x1*0xe5a+-0x2fe2)?(_0x2a9a8a=_0xda723e[0x447+0x1aca+0xf1*-0x21],log[_0x5ae3fa(0x291)]('工具未记录,自动检测'+':\x20'+_0x2a9a8a[_0x5ae3fa(0x273)+'e'])):log['warn'](_0x3b91c7[_0x5ae3fa(_0x3094a9._0x5a011d)]);}else{_0x386483['ok'](_0x44a32e(0x250)+'--force\x20强制'+_0x44a32e(0x2ad));return;}}if(_0x2a9a8a){const _0x383744=path[_0x5ae3fa(0x276)](_0x5b8962,_0x2a9a8a[_0x5ae3fa(_0x3094a9._0x265167)]);fs['existsSync'](_0x383744)?log['ok']('提示词文件:\x20'+_0x2a9a8a['promptPath']):(log[_0x44a32e(_0x3094a9._0x4a06f4)](_0x5ae3fa(0x202)+_0x2a9a8a[_0x44a32e(0x20e)]),_0x160d9e++);if(_0x2a9a8a[_0x44a32e(_0x3094a9._0x5cd9c0)+_0x44a32e(_0x3094a9._0x4fe8bc)]&&_0x2a9a8a[_0x5ae3fa(_0x3094a9._0x3fa0b3)+'r']){if(_0x3b91c7[_0x5ae3fa(_0x3094a9._0x389a17)]===_0x3b91c7[_0x5ae3fa(_0x3094a9._0x298502)])PrRyzJ[_0x5ae3fa(_0x3094a9._0x240700)](_0x28ec64,_0x1d4567,_0x3e7c72,_0x246ced);else{const _0x55119d=path[_0x44a32e(0x276)](_0x5b8962,_0x2a9a8a[_0x44a32e(_0x3094a9._0x3fa0b3)+'r']);if(fs['existsSync'](_0x55119d)){const _0x42f8e2=fs[_0x5ae3fa(0x227)+'c'](_0x55119d)[_0x44a32e(0x2e0)](_0x6c6d4=>_0x6c6d4[_0x44a32e(0x1d2)](_0x44a32e(0x382)));log['ok'](_0x2a9a8a[_0x44a32e(0x28b)+'r']+_0x44a32e(0x2bc)+_0x42f8e2[_0x44a32e(_0x3094a9._0x31db6c)]+_0x44a32e(_0x3094a9._0x569fa4));}else log['err'](_0x2a9a8a[_0x5ae3fa(_0x3094a9._0x5f1c65)+'r']+_0x44a32e(_0x3094a9._0x504a40)),_0x160d9e++;}}}const _0x512c07=path[_0x44a32e(0x276)](_0x21d478,_0x44a32e(_0x3094a9._0x16b8c6));if(fs['existsSync'](_0x512c07)){const _0x201219=fs[_0x5ae3fa(0x227)+'c'](_0x512c07)[_0x44a32e(0x2e0)](_0x4875d2=>_0x4875d2[_0x44a32e(0x1d2)](_0x5ae3fa(0x382)));log['ok'](_0x44a32e(0x2fe)+'ot/command'+_0x5ae3fa(0x2e5)+_0x201219['length']+'\x20个命令)');}else log[_0x44a32e(_0x3094a9._0x30131e)](_0x3b91c7[_0x5ae3fa(_0x3094a9._0x443221)]),_0x160d9e++;const _0x5042e7=[[_0x44a32e(_0x3094a9._0x6cf96b)+_0x44a32e(0x1e2)+_0x44a32e(_0x3094a9._0x3a5c64)+_0x44a32e(_0x3094a9._0x531e6b),_0x5ae3fa(0x278)],[_0x44a32e(_0x3094a9._0x6cf96b)+_0x5ae3fa(_0x3094a9._0x41f8ac)+_0x5ae3fa(0x2d8),_0x5ae3fa(0x293)],[_0x3b91c7['ncVlf'],_0x3b91c7[_0x44a32e(_0x3094a9._0x10e9c6)]],[_0x3b91c7[_0x44a32e(0x241)],_0x44a32e(0x228)],['spec_copil'+_0x5ae3fa(_0x3094a9._0x3b37ea)+_0x44a32e(_0x3094a9._0x55843a)+_0x5ae3fa(_0x3094a9._0x88d5a7),_0x5ae3fa(_0x3094a9._0x45b4f2)]];for(const [_0x78f242,_0x2f4aa7]of _0x5042e7){fs[_0x5ae3fa(_0x3094a9._0x3e8bb1)](path['join'](_0x5b8962,_0x78f242))?log['ok'](_0x2f4aa7+'('+_0x78f242+')'):(log['err']('缺少\x20'+_0x2f4aa7+'('+_0x78f242+')'),_0x160d9e++);}const _0x5694ce=path[_0x5ae3fa(0x276)](_0x21d478,_0x5ae3fa(_0x3094a9._0x3b22f8),'project-co'+_0x44a32e(_0x3094a9._0x30c03b));if(fs['existsSync'](_0x5694ce)){if(_0x3b91c7[_0x44a32e(0x36f)]!==_0x5ae3fa(_0x3094a9._0x179ded))_0x3c0e0c[_0x5ae3fa(0x3de)](_0x44a32e(0x269)+'\x20'+_0x1f583d);else{const _0x10705a=fs[_0x5ae3fa(0x2c4)+'nc'](_0x5694ce,_0x5ae3fa(_0x3094a9._0x4aef63));_0x10705a[_0x44a32e(_0x3094a9._0xd8d245)](/- 应用名:$/m)&&log['warn'](_0x5ae3fa(_0x3094a9._0x389255)+_0x5ae3fa(_0x3094a9._0x430080)+_0x44a32e(0x3e2)+_0x44a32e(0x1f8));}}const _0x1cd6ea=path[_0x5ae3fa(0x276)](_0x5b8962,'.git',_0x44a32e(_0x3094a9._0x586603),_0x3b91c7['rvGyq']);if(fs['existsSync'](_0x1cd6ea)){const _0x3d5c01=fs[_0x5ae3fa(0x2c4)+'nc'](_0x1cd6ea,_0x44a32e(_0x3094a9._0x10d8cf));_0x3d5c01[_0x44a32e(_0x3094a9._0x4020be)]('spec_copil'+'ot')?log['ok'](_0x3b91c7['rjpMK']):log['warn'](_0x44a32e(_0x3094a9._0x3380ac)+'\x20hook\x20存在但不'+_0x5ae3fa(0x370)+'ilot\x20的');}else{if(fs['existsSync'](path[_0x5ae3fa(_0x3094a9._0x3fec0e)](_0x5b8962,_0x44a32e(0x39c)))){if(_0x3b91c7[_0x5ae3fa(_0x3094a9._0x4793b5)]!==_0x5ae3fa(_0x3094a9._0x18265d)){const _0x45b3c3=_0x2f17ca[_0x5ae3fa(0x2c4)+'nc'](_0x38ae44,_0x3b91c7[_0x44a32e(_0x3094a9._0x422a54)]);_0x45b3c3['includes']('spec_copil'+'ot')?_0xaf59fc['ok'](_0x44a32e(0x34b)+_0x44a32e(_0x3094a9._0x262fa4)+_0x5ae3fa(0x2b6)):_0x2dc073[_0x44a32e(_0x3094a9._0x33086f)](_0x3b91c7['ojmNu']);}else log[_0x5ae3fa(0x291)](_0x3b91c7[_0x44a32e(0x342)]);}}const _0x261de4=path[_0x44a32e(_0x3094a9._0x3fec0e)](_0x21d478,'stack-adap'+_0x44a32e(_0x3094a9._0x4d393b));if(fs[_0x44a32e(0x3ca)](_0x261de4)){if(_0x5ae3fa(_0x3094a9._0x4821af)!==_0x3b91c7[_0x5ae3fa(0x1ed)]){const _0x3545d3=_0x51cc9a[_0x5ae3fa(_0x3094a9._0x1020ac)](PrRyzJ['AlVBB'](_0x174089),PrRyzJ[_0x5ae3fa(0x1df)],_0x4e22c5);if(!_0x59e0c7[_0x5ae3fa(_0x3094a9._0x3277b3)](_0x3545d3))throw new _0x204b32(_0x44a32e(0x39f)+_0x16dd81);return _0x22e00f[_0x5ae3fa(0x2c4)+'nc'](_0x3545d3,PrRyzJ['YcXCu']);}else{const _0x4f64fa=fs[_0x5ae3fa(0x227)+'c'](_0x261de4)[_0x44a32e(0x2e0)](_0x2e2f1e=>_0x2e2f1e[_0x5ae3fa(0x1d2)](_0x5ae3fa(0x382))&&_0x2e2f1e!=='README.md'&&_0x2e2f1e!=='_template.'+'md');_0x4f64fa[_0x5ae3fa(_0x3094a9._0x31db6c)]>0x4*0x985+0xde9*0x1+0x33fd*-0x1?log['ok'](_0x44a32e(_0x3094a9._0x574677)+_0x4f64fa['map'](_0x4e4f92=>_0x4e4f92[_0x44a32e(0x377)](_0x44a32e(0x382),''))[_0x5ae3fa(_0x3094a9._0x4411ed)](',\x20')):log[_0x44a32e(0x291)](_0x44a32e(0x2ec)+_0x5ae3fa(0x223)+_0x44a32e(0x369));}}console[_0x5ae3fa(0x3de)]('');if(_0x3b91c7[_0x5ae3fa(_0x3094a9._0x576a1a)](_0x160d9e,0x1808+-0x13bc+-0x44c)){if(_0x5ae3fa(_0x3094a9._0x104f5c)!==_0x5ae3fa(_0x3094a9._0x104f5c)){const _0x4ab0fa={};_0x4ab0fa[_0x5ae3fa(_0x3094a9._0x416152)]=!![],_0x3bbece[_0x44a32e(_0x3094a9._0x5469fb)](_0xd062bf,_0x4ab0fa);const _0x1bd73a=_0x5240f2(),_0x48119f=_0x1ca603[_0x5ae3fa(0x2cd)+'pt'](_0x1bd73a);_0x4da67e['writeFileS'+_0x5ae3fa(0x3d4)](_0x9508b4,_0x48119f,PrRyzJ['YcXCu']),_0x18f273['ok'](_0x4ed11e[_0x5ae3fa(_0x3094a9._0x53ebb3)]+_0x44a32e(_0x3094a9._0x42e754));}else log['ok'](_0x5ae3fa(0x3a3));}else log['err']('发现\x20'+_0x160d9e+(_0x5ae3fa(0x327)+_0x5ae3fa(_0x3094a9._0x51da0c)));}function cmdUninstall(_0x160d98){const _0x820a9e={_0x2cc2e5:0x238,_0x35703c:0x290,_0x5e6767:0x379,_0x226cac:0x3ae,_0x14504c:0x205,_0x5b081e:0x362,_0x535c30:0x23f,_0x249a8e:0x2f9,_0x1f7c6f:0x3cf,_0x108c59:0x276,_0xef7be:0x3ca,_0x477cf8:0x26e,_0x56a125:0x334,_0x18452a:0x25f,_0x35cd5f:0x227,_0x5ae651:0x2e0,_0xe0dc6f:0x2a5,_0x1fdb86:0x3ca,_0x4deb5a:0x20e,_0x5e5951:0x3c8,_0x204c4b:0x350,_0x1ee4c3:0x276,_0x2ccdfb:0x28b,_0x4e0f63:0x3ca,_0x444ee5:0x28b,_0x1b0e76:0x291,_0x51bb7a:0x266,_0x482dce:0x1d5,_0x49c21e:0x3ca,_0x2c9c4d:0x2ce,_0x52db04:0x2fc,_0x11c5f4:0x1f5,_0x18cbe2:0x20e,_0x262a96:0x354,_0x13c9d9:0x2e6,_0x403f57:0x31d,_0x31af3f:0x36d,_0x1206b5:0x2da,_0x1c450a:0x28b,_0x214896:0x399,_0x289fbf:0x271,_0x288a8c:0x226,_0x27449f:0x23e,_0x53e83b:0x20d,_0x17e74c:0x24d,_0x60e37b:0x2c0,_0x3d68d5:0x2b8,_0x3689f4:0x3e4,_0x56badb:0x380,_0x5b0ed7:0x3ef,_0x3b79dd:0x373,_0x312795:0x2ac,_0x57d6b1:0x2f0,_0x4c4011:0x317,_0xe9fa10:0x2f7,_0x2fe09f:0x2ae,_0xa3f117:0x1e1,_0x429ba2:0x2ee,_0xd3043f:0x21a,_0x42ee11:0x245,_0x215f4c:0x226,_0x16175d:0x2db,_0x2f460d:0x3cc,_0x43c5fa:0x23e,_0x19f8e0:0x343,_0x252da7:0x2c5,_0x35ed1f:0x3ab,_0xfb85ef:0x3ca,_0x377343:0x276,_0x146896:0x1d7,_0xb34c69:0x3ca,_0x14e768:0x2c7,_0x35b2db:0x3e6,_0x462f69:0x3e8,_0x2005c8:0x3ed},_0x3741cf=_0x33c5e5,_0x510002=_0x33c5e5,_0x1dc2d5={'PGpPj':_0x3741cf(_0x820a9e._0x2cc2e5),'ruIcl':function(_0x256ce7,_0x4a6320){return _0x256ce7(_0x4a6320);},'PxWKb':function(_0xa57ec9){return _0xa57ec9();},'YqkZd':_0x3741cf(0x2fe)+'ot','FSfEk':function(_0x162907,_0x2a693d,_0x34141e){return _0x162907(_0x2a693d,_0x34141e);},'CgPmJ':_0x510002(0x1dd),'oiBOt':function(_0x4b487b,_0x4fc9b3){return _0x4b487b!==_0x4fc9b3;},'eEGbP':_0x510002(_0x820a9e._0x35703c),'JcnPd':function(_0x185247,_0x5e63f1){return _0x185247>_0x5e63f1;},'iqRdy':_0x510002(0x2b1),'ooOwv':function(_0x2311d1,_0x593664){return _0x2311d1===_0x593664;},'NfjsS':_0x510002(_0x820a9e._0x5e6767),'tfDwp':_0x510002(0x26d),'IMlva':_0x510002(_0x820a9e._0x226cac),'kPuLo':_0x510002(0x39c),'LMfst':_0x3741cf(0x275),'qAHZg':_0x510002(_0x820a9e._0x14504c),'JFhpz':function(_0x452418,_0x3e469b){return _0x452418!==_0x3e469b;},'uaiGv':'vvtFv','ArWBm':'lHNXB','DKPId':_0x3741cf(_0x820a9e._0x5b081e)},_0x5f498d=_0x160d98['includes'](_0x3741cf(_0x820a9e._0x535c30)),_0x4b99b8=findProjectRoot();log['title'](_0x3741cf(0x2ac)+_0x510002(0x2f0)+'ot\x20uninsta'+'ll'),log['info']('项目根目录:\x20'+_0x4b99b8);const _0x488ce8=path[_0x510002(0x276)](_0x4b99b8,_0x1dc2d5['YqkZd']),_0x530514=_0x1dc2d5[_0x3741cf(0x375)](resolveAdapter,_0x160d98,_0x4b99b8),_0x5245d1=path[_0x510002(0x276)](_0x488ce8,'changes');if(fs[_0x510002(0x3ca)](_0x5245d1)){const _0xadad1c=fs['readdirSyn'+'c'](_0x5245d1)[_0x510002(0x2e0)](_0xfe9be4=>_0xfe9be4!==_0x3741cf(0x3c0)&&fs[_0x3741cf(0x3ca)](path['join'](_0x5245d1,_0xfe9be4))&&fs[_0x3741cf(0x283)](path['join'](_0x5245d1,_0xfe9be4))['isDirector'+'y']());_0xadad1c[_0x3741cf(_0x820a9e._0x249a8e)]>-0xa*-0x33e+0xb3*0x21+0x377f*-0x1&&log['warn'](_0x3741cf(_0x820a9e._0x1f7c6f)+_0xadad1c[_0x510002(0x2f9)]+'\x20个进行中的变更:\x20'+_0xadad1c['join'](',\x20'));}const _0x800806=path[_0x510002(_0x820a9e._0x108c59)](_0x488ce8,_0x1dc2d5['CgPmJ']);if(fs[_0x510002(_0x820a9e._0xef7be)](_0x800806)){if(_0x1dc2d5[_0x3741cf(0x31b)](_0x1dc2d5[_0x510002(_0x820a9e._0x477cf8)],_0x1dc2d5[_0x3741cf(_0x820a9e._0x477cf8)])){const _0x4489bf={};_0x4489bf[_0x510002(_0x820a9e._0x56a125)]=_0x356f80,_0x4489bf['stdio']=ijfoaC[_0x3741cf(0x2d6)],_0x453ac2(_0x3741cf(_0x820a9e._0x18452a)+_0x482a31+'\x22\x20'+_0x5eb4a2,_0x4489bf);}else try{const _0x516a7b=fs[_0x3741cf(_0x820a9e._0x35cd5f)+'c'](_0x800806)[_0x3741cf(_0x820a9e._0x5ae651)](_0x5b82fd=>fs[_0x510002(0x283)](path[_0x510002(0x276)](_0x800806,_0x5b82fd))[_0x510002(0x3e7)+'y']());if(_0x1dc2d5[_0x3741cf(_0x820a9e._0xe0dc6f)](_0x516a7b['length'],-0x227f+-0xe79+0x1*0x30f8))log[_0x510002(0x291)]('发现\x20'+_0x516a7b[_0x3741cf(_0x820a9e._0x249a8e)]+_0x3741cf(0x1db));}catch{}}console[_0x510002(0x3de)](''),log[_0x510002(0x3c8)](_0x1dc2d5['iqRdy']);if(fs[_0x510002(_0x820a9e._0x1fdb86)](_0x488ce8))log[_0x3741cf(0x3c8)]('\x20\x20-\x20spec_c'+_0x3741cf(0x1fd));if(_0x530514){const _0x3d739a=path[_0x3741cf(0x276)](_0x4b99b8,_0x530514[_0x3741cf(_0x820a9e._0x4deb5a)]);if(fs['existsSync'](_0x3d739a))log[_0x510002(_0x820a9e._0x5e5951)]('\x20\x20-\x20'+_0x530514[_0x510002(_0x820a9e._0x4deb5a)]);if(_0x530514[_0x3741cf(_0x820a9e._0x204c4b)+_0x510002(0x313)]&&_0x530514['commandsDi'+'r']){const _0xbc7fbd=path[_0x3741cf(_0x820a9e._0x1ee4c3)](_0x4b99b8,_0x530514[_0x3741cf(_0x820a9e._0x2ccdfb)+'r']);if(fs[_0x3741cf(_0x820a9e._0x4e0f63)](_0xbc7fbd))log[_0x3741cf(0x3c8)](_0x510002(0x29d)+_0x530514[_0x3741cf(_0x820a9e._0x444ee5)+'r']+'/');}}if(!_0x5f498d){console['log'](''),log[_0x3741cf(_0x820a9e._0x1b0e76)](_0x510002(_0x820a9e._0x51bb7a)+'px\x20@alenfi'+_0x510002(_0x820a9e._0x482dce)+'pilot\x20unin'+_0x510002(0x272)+'nfirm');return;}if(_0x530514){const _0x5cc321=path[_0x3741cf(0x276)](_0x4b99b8,_0x530514[_0x510002(_0x820a9e._0x4deb5a)]);if(fs[_0x3741cf(_0x820a9e._0x49c21e)](_0x5cc321)){if(_0x1dc2d5[_0x510002(_0x820a9e._0x2c9c4d)](_0x1dc2d5[_0x3741cf(_0x820a9e._0x52db04)],_0x1dc2d5['NfjsS']))fs[_0x3741cf(0x36d)](_0x5cc321),log['ok'](_0x3741cf(_0x820a9e._0x11c5f4)+_0x530514[_0x510002(_0x820a9e._0x18cbe2)]);else{if(!_0x4bee39['existsSync'](_0x405262))return;const _0x563e02={};_0x563e02[_0x3741cf(_0x820a9e._0x262a96)+_0x3741cf(_0x820a9e._0x13c9d9)]=!![];for(const _0xb0fdf8 of _0x292c70['readdirSyn'+'c'](_0x5752a9,_0x563e02)){const _0x532f9a=_0x471466[_0x3741cf(0x276)](_0x203bd4,_0xb0fdf8[_0x510002(_0x820a9e._0x403f57)]);_0xb0fdf8['isDirector'+'y']()?ijfoaC[_0x3741cf(0x2da)](_0x3182e3,_0x532f9a):_0x347220[_0x3741cf(_0x820a9e._0x31af3f)](_0x532f9a);}_0x223997[_0x3741cf(0x2dc)](_0x64509f);}}if(_0x530514[_0x510002(_0x820a9e._0x204c4b)+_0x510002(0x313)]&&_0x530514[_0x3741cf(0x28b)+'r']){if(_0x1dc2d5['tfDwp']==='qVcVE'){const _0x2e584d=path[_0x510002(0x276)](_0x4b99b8,_0x530514[_0x510002(0x28b)+'r']);fs['existsSync'](_0x2e584d)&&(_0x1dc2d5[_0x510002(_0x820a9e._0x1206b5)](rmDirRecursive,_0x2e584d),log['ok'](_0x510002(0x1f5)+_0x530514[_0x510002(_0x820a9e._0x1c450a)+'r']+'/'));}else _0x19bce3[_0x510002(0x3de)]('\x0a@alenfitz'+_0x510002(0x280)+_0x510002(_0x820a9e._0x214896)+'Spec\x20编码框架('+_0x3741cf(0x363)+_0x510002(_0x820a9e._0x289fbf)+_0x1dc2d5['PxWKb'](_0x33aaec)['join'](',\x20')+(_0x3741cf(0x311)+_0x3741cf(_0x820a9e._0x288a8c)+_0x3741cf(_0x820a9e._0x27449f)+_0x510002(0x2f4)+_0x510002(_0x820a9e._0x53e83b)+_0x510002(0x282)+'\x20\x20初始化项目\x0a\x20\x20'+_0x3741cf(0x2b9)+_0x510002(_0x820a9e._0x17e74c)+_0x3741cf(0x258)+_0x3741cf(_0x820a9e._0x60e37b)+_0x510002(0x215)+'\x20\x20\x20\x20\x20升级框架\x0a'+_0x510002(_0x820a9e._0x3d68d5)+_0x3741cf(_0x820a9e._0x3689f4)+_0x510002(0x1d9)+_0x510002(_0x820a9e._0x56badb)+'\x20<phase>\x20\x20'+_0x3741cf(_0x820a9e._0x5b0ed7)+_0x3741cf(_0x820a9e._0x3b79dd)+_0x510002(_0x820a9e._0x312795)+_0x510002(_0x820a9e._0x57d6b1)+'ot\x20lint\x20[n'+_0x510002(_0x820a9e._0x4c4011)+_0x3741cf(_0x820a9e._0xe9fa10)+_0x510002(_0x820a9e._0x2fe09f)+_0x510002(_0x820a9e._0xa3f117)+_0x510002(_0x820a9e._0x429ba2)+'ec-copilot'+'\x20doctor\x20\x20\x20'+_0x3741cf(0x2f7)+_0x3741cf(_0x820a9e._0xd3043f)+_0x510002(_0x820a9e._0x42ee11)+_0x3741cf(_0x820a9e._0x215f4c)+_0x3741cf(_0x820a9e._0x27449f)+_0x3741cf(0x307)+_0x3741cf(0x1fa)+_0x3741cf(_0x820a9e._0x16175d)+_0x3741cf(0x339)+'\x0a示例:\x0a\x20\x20npx'+'\x20@alenfitz'+'/spec-copi'+_0x510002(0x385)+'l\x20--tool\x20c'+_0x510002(_0x820a9e._0x2f460d)+_0x510002(_0x820a9e._0x288a8c)+_0x3741cf(_0x820a9e._0x43c5fa)+_0x510002(0x2f4)+_0x3741cf(0x2fd)+'claude-cod'+'e\x0a\x20\x20npx\x20@a'+_0x3741cf(0x2ee)+_0x510002(0x37e)+_0x510002(0x340)+_0x510002(_0x820a9e._0x19f8e0)+'ly\x0a\x20\x20npx\x20@'+_0x3741cf(_0x820a9e._0x252da7)+_0x510002(0x316)+'t\x20doctor\x0a'));}}fs[_0x510002(_0x820a9e._0xef7be)](_0x488ce8)&&(_0x3741cf(_0x820a9e._0x35ed1f)===_0x1dc2d5[_0x3741cf(0x263)]?_0x587a9c[_0x3741cf(_0x820a9e._0xfb85ef)](_0x485a95[_0x3741cf(_0x820a9e._0x377343)](_0x39afea,_0xc4985))?_0x191670['ok'](_0x46a496+'('+_0x483437+')'):(_0x4533e1['err'](_0x3741cf(_0x820a9e._0x146896)+_0x172200+'('+_0x33e42d+')'),_0x28c791++):(rmDirRecursive(_0x488ce8),log['ok']('已删除\x20spec_c'+_0x3741cf(0x1fd))));const _0x5f58df=path['join'](_0x4b99b8,_0x1dc2d5[_0x3741cf(0x352)],_0x1dc2d5['LMfst'],'pre-commit');if(fs[_0x3741cf(_0x820a9e._0xb34c69)](_0x5f58df)){const _0x20b5fe=fs['readFileSy'+'nc'](_0x5f58df,_0x1dc2d5[_0x3741cf(_0x820a9e._0x14e768)]);if(_0x20b5fe[_0x510002(_0x820a9e._0x35b2db)]('spec_copil'+'ot')){if(_0x1dc2d5[_0x510002(0x230)](_0x1dc2d5[_0x3741cf(_0x820a9e._0x462f69)],_0x1dc2d5[_0x510002(0x365)]))fs['unlinkSync'](_0x5f58df),log['ok']('已删除\x20Git\x20pr'+_0x510002(0x29e)+_0x3741cf(_0x820a9e._0x2005c8));else return _0x437791[-0xdd0+-0xe5+0xeb5];}}log['title'](_0x1dc2d5[_0x510002(0x27d)]);}function installGitHook(_0x2c1e17){const _0x1b456d={_0x221f43:0x39c,_0x2acd66:0x2f8,_0x2ada1c:0x30f,_0x2b5661:0x325,_0x28d5bc:0x2b7,_0x2908d8:0x2d0,_0x51568b:0x276,_0x115106:0x390,_0x1df05d:0x260,_0x3885b6:0x256,_0x55d5fc:0x25d,_0x195762:0x2b0,_0x202599:0x3ca,_0x155c75:0x1f5,_0x476c1b:0x28b,_0x38d872:0x1f5},_0x5b773c=_0x33c5e5,_0x4e0d01=_0x33c5e5,_0x4f4913={'hmKzO':_0x5b773c(_0x1b456d._0x221f43),'Fwgzt':_0x4e0d01(0x35e)+',跳过\x20pre-co'+_0x4e0d01(0x298)+'安装','ptOTp':function(_0x1b949d,_0x3fdf5e){return _0x1b949d!==_0x3fdf5e;},'qudtz':_0x4e0d01(_0x1b456d._0x2acd66),'pXTvu':function(_0x5eb632,_0x173e5e,_0x4d178d){return _0x5eb632(_0x173e5e,_0x4d178d);},'LISXB':function(_0x1f765f,_0x51b40d){return _0x1f765f===_0x51b40d;},'waKxk':'wNABJ','UWpAJ':'ncobI','roLIF':_0x5b773c(_0x1b456d._0x2ada1c)+_0x5b773c(_0x1b456d._0x2b5661)+_0x4e0d01(0x374)},_0x416a88=path[_0x4e0d01(0x276)](_0x2c1e17,_0x5b773c(0x2fe)+'ot',_0x5b773c(0x3d3),_0x5b773c(_0x1b456d._0x28d5bc)+_0x5b773c(_0x1b456d._0x2908d8));if(!fs[_0x4e0d01(0x3ca)](_0x416a88))return;const _0x1c9b64=path[_0x4e0d01(_0x1b456d._0x51568b)](_0x2c1e17,_0x4f4913[_0x4e0d01(_0x1b456d._0x115106)]);if(!fs[_0x5b773c(0x3ca)](_0x1c9b64)){log[_0x4e0d01(0x291)](_0x4f4913[_0x4e0d01(0x3b2)]);return;}try{if(_0x4f4913[_0x5b773c(_0x1b456d._0x1df05d)]('WjiPa',_0x4f4913[_0x5b773c(_0x1b456d._0x3885b6)]))_0x5ef5df['ok']('tasks.md\x20变'+_0x5b773c(0x395));else{const _0x2c48d7={};_0x2c48d7[_0x4e0d01(0x334)]=_0x2c1e17,_0x2c48d7[_0x4e0d01(_0x1b456d._0x55d5fc)]='pipe',_0x4f4913['pXTvu'](execSync,_0x4e0d01(0x25f)+_0x416a88+'\x22',_0x2c48d7),log['ok'](_0x5b773c(0x34b)+_0x4e0d01(0x298)+'已安装');}}catch{if(_0x4f4913['LISXB'](_0x4f4913[_0x4e0d01(_0x1b456d._0x195762)],_0x4f4913[_0x5b773c(0x26f)])){const _0x12b656=_0x55831f[_0x4e0d01(0x276)](_0x504e99,_0x44066a[_0x5b773c(0x20e)]);_0x2ab0be[_0x5b773c(_0x1b456d._0x202599)](_0x12b656)&&(_0x6fdbd0[_0x5b773c(0x36d)](_0x12b656),_0x4a7148['ok'](_0x5b773c(_0x1b456d._0x155c75)+_0x15c44d['promptPath']));if(_0x52b62b[_0x5b773c(0x350)+_0x4e0d01(0x313)]&&_0x46eff5[_0x5b773c(_0x1b456d._0x476c1b)+'r']){const _0x1b65fa=_0x19e52c[_0x5b773c(_0x1b456d._0x51568b)](_0x521564,_0x7ef70e[_0x5b773c(0x28b)+'r']);_0x245d30['existsSync'](_0x1b65fa)&&(_0x32b920(_0x1b65fa),_0x598c79['ok'](_0x4e0d01(_0x1b456d._0x38d872)+_0x36a755[_0x5b773c(0x28b)+'r']+'/'));}}else log['warn'](_0x4f4913['roLIF']);}}function showHelp(){const _0x223c98={_0x509e2d:0x3de,_0x4d832e:0x280,_0x27c475:0x311,_0x33b8f8:0x2f4,_0x1445ab:0x20d,_0x14832e:0x282,_0x454ad4:0x24d,_0x4c4b5d:0x258,_0x1710ae:0x215,_0x1e4529:0x397,_0x5c55a6:0x2b8,_0xb208de:0x3ef,_0x2d9d9b:0x373,_0x400c9f:0x2ac,_0x4500f2:0x33e,_0x3c7dae:0x2f7,_0x587be1:0x2ee,_0x43d4e3:0x1f7,_0x37ccfc:0x2f7,_0x375222:0x21a,_0x269945:0x245,_0x388c07:0x307,_0x10c235:0x339,_0x52a8e1:0x229,_0x5de06d:0x2fd,_0x27fff9:0x253,_0x21bc45:0x2c5},_0x5f9d3d=_0x2a7fa5,_0x12baf4=_0x2a7fa5,_0x540549={'TaLEM':function(_0x3e6e0c){return _0x3e6e0c();}};console[_0x5f9d3d(_0x223c98._0x509e2d)](_0x5f9d3d(0x344)+_0x5f9d3d(_0x223c98._0x4d832e)+'lot\x20—\x20渐进式\x20'+_0x5f9d3d(0x3a4)+_0x5f9d3d(0x363)+_0x5f9d3d(0x271)+_0x540549[_0x12baf4(0x214)](supportedTools)['join'](',\x20')+(_0x5f9d3d(_0x223c98._0x27c475)+'x\x20@alenfit'+_0x5f9d3d(0x23e)+_0x5f9d3d(_0x223c98._0x33b8f8)+_0x5f9d3d(_0x223c98._0x1445ab)+_0x5f9d3d(_0x223c98._0x14832e)+'\x20\x20初始化项目\x0a\x20\x20'+'npx\x20@alenf'+_0x12baf4(_0x223c98._0x454ad4)+_0x12baf4(_0x223c98._0x4c4b5d)+_0x5f9d3d(0x2c0)+_0x5f9d3d(_0x223c98._0x1710ae)+_0x12baf4(_0x223c98._0x1e4529)+_0x5f9d3d(_0x223c98._0x5c55a6)+'nfitz/spec'+_0x5f9d3d(0x1d9)+_0x12baf4(0x380)+_0x5f9d3d(0x2e2)+_0x12baf4(_0x223c98._0xb208de)+_0x5f9d3d(_0x223c98._0x2d9d9b)+_0x5f9d3d(_0x223c98._0x400c9f)+_0x12baf4(0x2f0)+_0x12baf4(_0x223c98._0x4500f2)+'ame]\x20\x20\x20\x20\x20\x20'+_0x12baf4(_0x223c98._0x3c7dae)+'\x20Spec\x20完整性检'+_0x12baf4(0x1e1)+_0x12baf4(_0x223c98._0x587be1)+_0x12baf4(0x37e)+_0x12baf4(_0x223c98._0x43d4e3)+_0x12baf4(_0x223c98._0x37ccfc)+_0x12baf4(_0x223c98._0x375222)+_0x12baf4(_0x223c98._0x269945)+'x\x20@alenfit'+'z/spec-cop'+_0x12baf4(_0x223c98._0x388c07)+_0x5f9d3d(0x1fa)+'nfirm]\x20\x20\x20\x20'+_0x12baf4(_0x223c98._0x10c235)+_0x5f9d3d(_0x223c98._0x52a8e1)+'\x20@alenfitz'+_0x12baf4(_0x223c98._0x4d832e)+_0x5f9d3d(0x385)+_0x5f9d3d(0x358)+'ursor\x0a\x20\x20np'+'x\x20@alenfit'+_0x5f9d3d(0x23e)+_0x5f9d3d(_0x223c98._0x33b8f8)+_0x5f9d3d(_0x223c98._0x5de06d)+'claude-cod'+_0x5f9d3d(0x288)+'lenfitz/sp'+_0x12baf4(0x37e)+'\x20gate\x20user'+'-login\x20app'+_0x12baf4(_0x223c98._0x27fff9)+_0x12baf4(_0x223c98._0x21bc45)+'pec-copilo'+'t\x20doctor\x0a'));}const args=process['argv'][_0x2a7fa5(0x2c2)](-0xa0f+-0x2ed+0x1*0xcfe),cmd=args[0x14e8+0xb*0x61+-0x1913];switch(cmd){case _0x2a7fa5(0x3c4):cmdInstall(args['slice'](-0x6b3*-0x5+-0x615+0x923*-0x3));break;case _0x33c5e5(0x211):case _0x2a7fa5(0x3f0):cmdUpdate(args[_0x33c5e5(0x2c2)](0x300*0x1+0x1ed0+-0x21cf));break;case _0x33c5e5(0x301):cmdGate(args[_0x33c5e5(0x2c2)](0xf07+-0x1*0x6eb+-0x81b));break;case'lint':cmdLint(args[_0x33c5e5(0x2c2)](0x2261+-0x9*0x445+0x40d));break;case _0x33c5e5(0x2d3):case _0x33c5e5(0x23c):cmdDoctor();break;case'uninstall':case _0x2a7fa5(0x1da):cmdUninstall(args[_0x2a7fa5(0x2c2)](0x1*0xfe6+-0x1a32+0xa4d));break;case _0x2a7fa5(0x37d):case'-h':case undefined:showHelp();break;default:log[_0x2a7fa5(0x295)](_0x2a7fa5(0x312)+cmd),showHelp(),process['exit'](0x31*0x79+-0xcc7+-0xa61);}