codesyncer 2.1.2 β†’ 2.2.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/README.ko.md CHANGED
@@ -56,7 +56,7 @@ npm install -g codesyncer
56
56
 
57
57
  ---
58
58
 
59
- ## πŸ”„ μ—…λ°μ΄νŠΈ
59
+ ## πŸ”„ CodeSyncer μ—…λ°μ΄νŠΈ
60
60
 
61
61
  ### ν˜„μž¬ 버전 확인
62
62
  ```bash
@@ -70,11 +70,64 @@ npm view codesyncer version
70
70
 
71
71
  ### μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈ
72
72
  ```bash
73
- npm update -g codesyncer
74
- # λ˜λŠ”
75
73
  npm install -g codesyncer@latest
76
74
  ```
77
75
 
76
+ ### μ—…λ°μ΄νŠΈ ν›„, ν”„λ‘œμ νŠΈ 동기화
77
+
78
+ CodeSyncerλ₯Ό μƒˆ λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈν•œ ν›„, `update` λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό μ΅œμ‹  ν…œν”Œλ¦Ώ 및 κΈ°λŠ₯κ³Ό λ™κΈ°ν™”ν•˜μ„Έμš”:
79
+
80
+ ```bash
81
+ cd /path/to/your/multi-repo-workspace
82
+ codesyncer update
83
+ ```
84
+
85
+ **μˆ˜ν–‰ μž‘μ—…:**
86
+ 1. βœ… μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— μΆ”κ°€λœ μƒˆ λ ˆν¬μ§€ν† λ¦¬ μŠ€μΊ”
87
+ 2. βœ… μƒˆ λ²„μ „μ—μ„œ λˆ„λ½λœ 파일 감지 (예: v2.1.2+ λ²„μ „μ˜ 루트 CLAUDE.md)
88
+ 3. βœ… μ–Έμ–΄ μ„€μ • μžλ™ 감지 (ν•œκ΅­μ–΄/μ˜μ–΄)
89
+ 4. βœ… μƒˆ 파일 생성 μ „ μ‚¬μš©μž 확인 μš”μ²­
90
+ 5. βœ… κΈ°μ‘΄ μ»€μŠ€ν„°λ§ˆμ΄μ§• λ‚΄μš© 보쑴
91
+
92
+ **좜λ ₯ μ˜ˆμ‹œ:**
93
+ ```
94
+ πŸ”„ CodeSyncer - Update System
95
+
96
+ βœ“ Scan complete
97
+
98
+ ⚠️ Missing root CLAUDE.md (new in v2.1.2)
99
+ This file allows Claude to automatically load context at session start.
100
+
101
+ ? 루트 CLAUDE.mdλ₯Ό μƒμ„±ν• κΉŒμš”? (Y/n) Y
102
+
103
+ βœ“ 루트 CLAUDE.md 생성 μ™„λ£Œ!
104
+ πŸ’‘ 이제 Claudeκ°€ μ„Έμ…˜ μ‹œμž‘ μ‹œ μžλ™μœΌλ‘œ μ»¨ν…μŠ€νŠΈλ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€!
105
+
106
+ πŸ€– λ‹€μŒ 단계 (AI μ–΄μ‹œμŠ€ν„΄νŠΈμ—κ²Œ):
107
+ ────────────────────────────────────────────────────────────
108
+ μ˜΅μ…˜ 1) μƒˆ μ„Έμ…˜ μ‹œμž‘
109
+ Claudeκ°€ μžλ™μœΌλ‘œ 루트 CLAUDE.mdλ₯Ό μ°Ύμ•„μ„œ μ½μŠ΅λ‹ˆλ‹€.
110
+
111
+ μ˜΅μ…˜ 2) ν˜„μž¬ μ„Έμ…˜μ—μ„œ λ°”λ‘œ 적용
112
+ "CLAUDE.md μ½μ–΄μ€˜"
113
+ ────────────────────────────────────────────────────────────
114
+
115
+ βœ… Update complete!
116
+ ```
117
+
118
+ **`codesyncer update` μ‹€ν–‰ ν›„:**
119
+
120
+ λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜μ—¬ 변경사항을 μ μš©ν•˜μ„Έμš”:
121
+
122
+ **μ˜΅μ…˜ 1: μƒˆ AI μ„Έμ…˜ μ‹œμž‘** (ꢌμž₯)
123
+ - ν˜„μž¬ AI μ–΄μ‹œμŠ€ν„΄νŠΈ μ’…λ£Œ
124
+ - μƒˆ μ„Έμ…˜ μ‹œμž‘
125
+ - Claudeκ°€ μžλ™μœΌλ‘œ 루트 CLAUDE.mdλ₯Ό μ°Ύμ•„μ„œ 읽음
126
+
127
+ **μ˜΅μ…˜ 2: ν˜„μž¬ μ„Έμ…˜μ—μ„œ 적용**
128
+ - AIμ—κ²Œ λ§ν•˜κΈ°: **"CLAUDE.md μ½μ–΄μ€˜"**
129
+ - AIκ°€ μ¦‰μ‹œ μ—…λ°μ΄νŠΈλœ μ»¨ν…μŠ€νŠΈ λ‘œλ“œ
130
+
78
131
  ---
79
132
 
80
133
  ## πŸš€ λΉ λ₯Έ μ‹œμž‘
package/README.md CHANGED
@@ -56,7 +56,7 @@ npm install -g codesyncer
56
56
 
57
57
  ---
58
58
 
59
- ## πŸ”„ Updating
59
+ ## πŸ”„ Updating CodeSyncer
60
60
 
61
61
  ### Check your current version
62
62
  ```bash
@@ -70,11 +70,64 @@ npm view codesyncer version
70
70
 
71
71
  ### Update to latest
72
72
  ```bash
73
- npm update -g codesyncer
74
- # or
75
73
  npm install -g codesyncer@latest
76
74
  ```
77
75
 
76
+ ### After updating, sync your project
77
+
78
+ When you update CodeSyncer to a new version, run the `update` command to sync your project with the latest templates and features:
79
+
80
+ ```bash
81
+ cd /path/to/your/multi-repo-workspace
82
+ codesyncer update
83
+ ```
84
+
85
+ **What happens:**
86
+ 1. βœ… Scans for new repositories added to your workspace
87
+ 2. βœ… Detects missing files from new versions (e.g., root CLAUDE.md in v2.1.2+)
88
+ 3. βœ… Auto-detects your language settings (English/Korean)
89
+ 4. βœ… Prompts before creating any new files
90
+ 5. βœ… Preserves your existing customizations
91
+
92
+ **Example output:**
93
+ ```
94
+ πŸ”„ CodeSyncer - Update System
95
+
96
+ βœ“ Scan complete
97
+
98
+ ⚠️ Missing root CLAUDE.md (new in v2.1.2)
99
+ This file allows Claude to automatically load context at session start.
100
+
101
+ ? Create root CLAUDE.md? (Y/n) Y
102
+
103
+ βœ“ Root CLAUDE.md created!
104
+ πŸ’‘ Claude will now automatically load context at session start!
105
+
106
+ πŸ€– Next Steps (Tell your AI):
107
+ ────────────────────────────────────────────────────────────
108
+ Option 1) Start a new session
109
+ Claude will automatically find and read root CLAUDE.md
110
+
111
+ Option 2) Apply immediately in current session
112
+ "Read CLAUDE.md"
113
+ ────────────────────────────────────────────────────────────
114
+
115
+ βœ… Update complete!
116
+ ```
117
+
118
+ **After running `codesyncer update`:**
119
+
120
+ Choose one of these options to apply changes:
121
+
122
+ **Option 1: Start a new AI session** (Recommended)
123
+ - Close your current AI assistant
124
+ - Open a new session
125
+ - Claude automatically finds and reads root CLAUDE.md
126
+
127
+ **Option 2: Apply in current session**
128
+ - Tell your AI: **"Read CLAUDE.md"**
129
+ - AI loads the updated context immediately
130
+
78
131
  ---
79
132
 
80
133
  ## πŸš€ Quick Start
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBA8FzD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAY,MAAM,UAAU,CAAC;AAGnD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBAovBzD"}
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.updateCommand = updateCommand;
40
40
  const chalk_1 = __importDefault(require("chalk"));
41
41
  const ora_1 = __importDefault(require("ora"));
42
+ const inquirer_1 = __importDefault(require("inquirer"));
42
43
  const fs = __importStar(require("fs-extra"));
43
44
  const path = __importStar(require("path"));
44
45
  const scanner_1 = require("../utils/scanner");
@@ -51,7 +52,56 @@ async function updateCommand(options) {
51
52
  console.log(chalk_1.default.gray('Run `codesyncer init` first.\n'));
52
53
  return;
53
54
  }
54
- const spinner = (0, ora_1.default)('Scanning for changes...').start();
55
+ // Detect language from existing SETUP_GUIDE
56
+ let lang = 'en';
57
+ const setupGuidePath = path.join(currentDir, '.codesyncer', 'SETUP_GUIDE.md');
58
+ try {
59
+ const setupGuide = await fs.readFile(setupGuidePath, 'utf-8');
60
+ if (setupGuide.includes('ν•œκ΅­μ–΄') || setupGuide.includes('λ ˆν¬μ§€ν† λ¦¬')) {
61
+ lang = 'ko';
62
+ }
63
+ }
64
+ catch {
65
+ // Default to English
66
+ }
67
+ // Ask user for update mode (unless --hard flag is provided)
68
+ let isHardUpdate = options.hard || false;
69
+ if (!options.hard) {
70
+ const { updateMode } = await inquirer_1.default.prompt([
71
+ {
72
+ type: 'list',
73
+ name: 'updateMode',
74
+ message: lang === 'ko' ? 'μ—…λ°μ΄νŠΈ 방식을 μ„ νƒν•˜μ„Έμš”:' : 'Select update mode:',
75
+ choices: [
76
+ {
77
+ name: lang === 'ko'
78
+ ? 'πŸ“ 일반 μ—…λ°μ΄νŠΈ - λˆ„λ½λœ 파일만 생성'
79
+ : 'πŸ“ Normal Update - Generate missing files only',
80
+ value: 'normal',
81
+ },
82
+ {
83
+ name: lang === 'ko'
84
+ ? 'πŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ - λͺ¨λ“  파일 μŠ€μΊ” 및 λ‚΄μš© μ—…λ°μ΄νŠΈ'
85
+ : 'πŸ” Hard Update - Deep scan and update all existing files',
86
+ value: 'hard',
87
+ },
88
+ ],
89
+ default: 'normal',
90
+ },
91
+ ]);
92
+ isHardUpdate = updateMode === 'hard';
93
+ }
94
+ if (isHardUpdate) {
95
+ console.log(chalk_1.default.bold.yellow(lang === 'ko'
96
+ ? '\nπŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ λͺ¨λ“œ: λͺ¨λ“  νŒŒμΌμ„ μŠ€μΊ”ν•˜κ³  μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.\n'
97
+ : '\nπŸ” Hard update mode: Scanning and updating all files.\n'));
98
+ }
99
+ else {
100
+ console.log(chalk_1.default.bold.cyan(lang === 'ko'
101
+ ? '\nπŸ“ 일반 μ—…λ°μ΄νŠΈ λͺ¨λ“œ: λˆ„λ½λœ 파일만 μƒμ„±ν•©λ‹ˆλ‹€.\n'
102
+ : '\nπŸ“ Normal update mode: Generating missing files only.\n'));
103
+ }
104
+ const spinner = (0, ora_1.default)(lang === 'ko' ? '변경사항 μŠ€μΊ” 쀑...' : 'Scanning for changes...').start();
55
105
  // Scan for repositories
56
106
  const foundRepos = await (0, scanner_1.scanForRepositories)(currentDir);
57
107
  // Read existing master doc to get current config
@@ -75,29 +125,63 @@ async function updateCommand(options) {
75
125
  const currentRepoNames = foundRepos.map((r) => r.name);
76
126
  const newRepos = foundRepos.filter((r) => !existingRepos.includes(r.name));
77
127
  const removedRepos = existingRepos.filter((name) => !currentRepoNames.includes(name));
78
- spinner.succeed('Scan complete');
128
+ // Check each repository for missing .claude files
129
+ const requiredFiles = ['CLAUDE.md', 'ARCHITECTURE.md', 'COMMENT_GUIDE.md', 'DECISIONS.md'];
130
+ const reposNeedingSetup = [];
131
+ for (const repo of foundRepos) {
132
+ const claudeDir = path.join(repo.path, '.claude');
133
+ const missingFiles = [];
134
+ // Check if .claude directory exists
135
+ if (!(await fs.pathExists(claudeDir))) {
136
+ missingFiles.push(...requiredFiles);
137
+ }
138
+ else {
139
+ // Check each required file
140
+ for (const file of requiredFiles) {
141
+ const filePath = path.join(claudeDir, file);
142
+ if (!(await fs.pathExists(filePath))) {
143
+ missingFiles.push(file);
144
+ }
145
+ }
146
+ }
147
+ if (missingFiles.length > 0) {
148
+ reposNeedingSetup.push({ repo: repo.name, missingFiles });
149
+ }
150
+ }
151
+ spinner.succeed(lang === 'ko' ? 'μŠ€μΊ” μ™„λ£Œ' : 'Scan complete');
79
152
  // Display changes
80
- if (newRepos.length === 0 && removedRepos.length === 0) {
153
+ const hasChanges = newRepos.length > 0 || removedRepos.length > 0 || reposNeedingSetup.length > 0;
154
+ if (!hasChanges) {
81
155
  console.log(chalk_1.default.green('\nβœ“ Everything is up to date!\n'));
82
- console.log(chalk_1.default.gray(` Total repositories: ${foundRepos.length}`));
83
- console.log(chalk_1.default.gray(` With CodeSyncer setup: ${foundRepos.filter((r) => r.hasCodeSyncer).length}\n`));
156
+ console.log(chalk_1.default.gray(` ${lang === 'ko' ? '총 λ ˆν¬μ§€ν† λ¦¬' : 'Total repositories'}: ${foundRepos.length}`));
157
+ console.log(chalk_1.default.gray(` ${lang === 'ko' ? 'CodeSyncer μ„€μ • μ™„λ£Œ' : 'With CodeSyncer setup'}: ${foundRepos.filter((r) => r.hasCodeSyncer).length}\n`));
84
158
  return;
85
159
  }
86
- console.log(chalk_1.default.bold('\nπŸ“Š Changes detected:\n'));
160
+ console.log(chalk_1.default.bold(lang === 'ko' ? '\nπŸ“Š 변경사항 감지:\n' : '\nπŸ“Š Changes detected:\n'));
87
161
  if (newRepos.length > 0) {
88
- console.log(chalk_1.default.green(` + ${newRepos.length} new repository(ies):`));
162
+ console.log(chalk_1.default.green(` + ${newRepos.length} ${lang === 'ko' ? '개의 μƒˆ λ ˆν¬μ§€ν† λ¦¬' : 'new repository(ies)'}:`));
89
163
  newRepos.forEach((repo) => {
90
- console.log(chalk_1.default.gray(` - ${repo.name} (${repo.type})`));
164
+ console.log(chalk_1.default.gray(` - ${repo.name}`));
91
165
  });
92
166
  console.log();
93
167
  }
94
168
  if (removedRepos.length > 0) {
95
- console.log(chalk_1.default.yellow(` - ${removedRepos.length} removed repository(ies):`));
169
+ console.log(chalk_1.default.yellow(` - ${removedRepos.length} ${lang === 'ko' ? '개의 제거된 λ ˆν¬μ§€ν† λ¦¬' : 'removed repository(ies)'}:`));
96
170
  removedRepos.forEach((name) => {
97
171
  console.log(chalk_1.default.gray(` - ${name}`));
98
172
  });
99
173
  console.log();
100
174
  }
175
+ if (reposNeedingSetup.length > 0) {
176
+ console.log(chalk_1.default.yellow(` ⚠️ ${reposNeedingSetup.length} ${lang === 'ko' ? '개의 λ ˆν¬μ§€ν† λ¦¬μ— λˆ„λ½λœ 파일' : 'repository(ies) with missing files'}:`));
177
+ reposNeedingSetup.forEach(({ repo, missingFiles }) => {
178
+ console.log(chalk_1.default.gray(` - ${repo}:`));
179
+ missingFiles.forEach((file) => {
180
+ console.log(chalk_1.default.gray(` βœ— .claude/${file}`));
181
+ });
182
+ });
183
+ console.log();
184
+ }
101
185
  // Update workspace map
102
186
  const updateSpinner = (0, ora_1.default)('Updating WORKSPACE_MAP.md...').start();
103
187
  try {
@@ -114,10 +198,560 @@ async function updateCommand(options) {
114
198
  catch (error) {
115
199
  updateSpinner.fail('Failed to update WORKSPACE_MAP.md');
116
200
  }
201
+ // Check if root CLAUDE.md exists
202
+ const rootClaudePath = path.join(currentDir, 'CLAUDE.md');
203
+ const hasRootClaude = await fs.pathExists(rootClaudePath);
204
+ if (!hasRootClaude) {
205
+ console.log(chalk_1.default.bold.yellow('\n⚠️ Missing root CLAUDE.md (new in v2.1.2)\n'));
206
+ console.log(chalk_1.default.gray('This file allows Claude to automatically load context at session start.\n'));
207
+ const { createRootClaude } = await inquirer_1.default.prompt([
208
+ {
209
+ type: 'confirm',
210
+ name: 'createRootClaude',
211
+ message: lang === 'ko' ? '루트 CLAUDE.mdλ₯Ό μƒμ„±ν• κΉŒμš”?' : 'Create root CLAUDE.md?',
212
+ default: true,
213
+ },
214
+ ]);
215
+ if (createRootClaude) {
216
+ const spinner = (0, ora_1.default)(lang === 'ko' ? '루트 CLAUDE.md 생성 쀑...' : 'Creating root CLAUDE.md...').start();
217
+ try {
218
+ // Read template
219
+ const templatePath = path.join(__dirname, '..', 'templates', lang, 'root_claude.md');
220
+ let template = await fs.readFile(templatePath, 'utf-8');
221
+ // Extract project info from existing MASTER_CODESYNCER.md
222
+ const masterPath = path.join(currentDir, '.codesyncer', 'MASTER_CODESYNCER.md');
223
+ let projectName = path.basename(currentDir);
224
+ let githubUsername = 'your-username';
225
+ try {
226
+ const masterContent = await fs.readFile(masterPath, 'utf-8');
227
+ const nameMatch = masterContent.match(/ν”„λ‘œμ νŠΈ[:\s]*([^\n]+)|Project[:\s]*([^\n]+)/i);
228
+ const githubMatch = masterContent.match(/github\.com\/([^/\s]+)/i);
229
+ if (nameMatch)
230
+ projectName = (nameMatch[1] || nameMatch[2]).trim();
231
+ if (githubMatch)
232
+ githubUsername = githubMatch[1];
233
+ }
234
+ catch {
235
+ // Use defaults
236
+ }
237
+ const repoCount = foundRepos.length;
238
+ const today = new Date().toISOString().split('T')[0];
239
+ // Replace placeholders
240
+ template = template
241
+ .replace(/\[PROJECT_NAME\]/g, projectName)
242
+ .replace(/\[GITHUB_USERNAME\]/g, githubUsername)
243
+ .replace(/\[TODAY\]/g, today)
244
+ .replace(/\[REPO_COUNT\]/g, String(repoCount));
245
+ // Write root CLAUDE.md
246
+ await fs.writeFile(rootClaudePath, template, 'utf-8');
247
+ spinner.succeed(lang === 'ko' ? '루트 CLAUDE.md 생성 μ™„λ£Œ!' : 'Root CLAUDE.md created!');
248
+ console.log(chalk_1.default.green(` βœ“ ${rootClaudePath}\n`));
249
+ console.log(chalk_1.default.cyan(lang === 'ko'
250
+ ? 'πŸ’‘ 이제 Claudeκ°€ μ„Έμ…˜ μ‹œμž‘ μ‹œ μžλ™μœΌλ‘œ μ»¨ν…μŠ€νŠΈλ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€!'
251
+ : 'πŸ’‘ Claude will now automatically load context at session start!\n'));
252
+ // Show next steps for AI
253
+ console.log(chalk_1.default.bold(lang === 'ko' ? '\nπŸ€– λ‹€μŒ 단계 (AI μ–΄μ‹œμŠ€ν„΄νŠΈμ—κ²Œ):' : '\nπŸ€– Next Steps (Tell your AI):'));
254
+ console.log(chalk_1.default.gray('─'.repeat(60)));
255
+ console.log();
256
+ if (lang === 'ko') {
257
+ console.log(chalk_1.default.bold('μ˜΅μ…˜ 1) μƒˆ μ„Έμ…˜ μ‹œμž‘'));
258
+ console.log(chalk_1.default.gray(' Claudeκ°€ μžλ™μœΌλ‘œ 루트 CLAUDE.mdλ₯Ό μ°Ύμ•„μ„œ μ½μŠ΅λ‹ˆλ‹€.'));
259
+ console.log();
260
+ console.log(chalk_1.default.bold('μ˜΅μ…˜ 2) ν˜„μž¬ μ„Έμ…˜μ—μ„œ λ°”λ‘œ 적용'));
261
+ console.log(chalk_1.default.yellow(' "CLAUDE.md μ½μ–΄μ€˜"'));
262
+ console.log();
263
+ }
264
+ else {
265
+ console.log(chalk_1.default.bold('Option 1) Start a new session'));
266
+ console.log(chalk_1.default.gray(' Claude will automatically find and read root CLAUDE.md'));
267
+ console.log();
268
+ console.log(chalk_1.default.bold('Option 2) Apply immediately in current session'));
269
+ console.log(chalk_1.default.yellow(' "Read CLAUDE.md"'));
270
+ console.log();
271
+ }
272
+ console.log(chalk_1.default.gray('─'.repeat(60)));
273
+ console.log();
274
+ }
275
+ catch (error) {
276
+ spinner.fail(lang === 'ko' ? '루트 CLAUDE.md 생성 μ‹€νŒ¨' : 'Failed to create root CLAUDE.md');
277
+ console.error(chalk_1.default.red(`Error: ${error}\n`));
278
+ }
279
+ }
280
+ }
281
+ // Generate UPDATE_GUIDE.md if there are repos needing setup OR if hard update
282
+ const needsUpdateGuide = reposNeedingSetup.length > 0 || isHardUpdate;
283
+ if (needsUpdateGuide) {
284
+ if (reposNeedingSetup.length > 0) {
285
+ console.log(chalk_1.default.bold.yellow(lang === 'ko'
286
+ ? '\n⚠️ 일뢀 λ ˆν¬μ§€ν† λ¦¬μ— λˆ„λ½λœ 파일이 μžˆμŠ΅λ‹ˆλ‹€\n'
287
+ : '\n⚠️ Some repositories have missing files\n'));
288
+ }
289
+ if (isHardUpdate && reposNeedingSetup.length === 0) {
290
+ console.log(chalk_1.default.bold.yellow(lang === 'ko'
291
+ ? '\nπŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ: λͺ¨λ“  λ ˆν¬μ§€ν† λ¦¬ νŒŒμΌμ„ μŠ€μΊ”ν•˜κ³  μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€\n'
292
+ : '\nπŸ” Hard update: Scanning and updating all repository files\n'));
293
+ }
294
+ const { generateUpdateGuide } = await inquirer_1.default.prompt([
295
+ {
296
+ type: 'confirm',
297
+ name: 'generateUpdateGuide',
298
+ message: lang === 'ko'
299
+ ? 'AIκ°€ 읽을 UPDATE_GUIDE.mdλ₯Ό μƒμ„±ν• κΉŒμš”?'
300
+ : 'Generate UPDATE_GUIDE.md for AI to read?',
301
+ default: true,
302
+ },
303
+ ]);
304
+ if (generateUpdateGuide) {
305
+ const spinner = (0, ora_1.default)(lang === 'ko' ? 'UPDATE_GUIDE.md 생성 쀑...' : 'Creating UPDATE_GUIDE.md...').start();
306
+ try {
307
+ const updateGuidePath = path.join(currentDir, '.codesyncer', 'UPDATE_GUIDE.md');
308
+ const today = new Date().toISOString().split('T')[0];
309
+ // Extract project info
310
+ let projectName = path.basename(currentDir);
311
+ try {
312
+ const masterContent = await fs.readFile(masterPath, 'utf-8');
313
+ const nameMatch = masterContent.match(/ν”„λ‘œμ νŠΈ[:\s]*([^\n]+)|Project[:\s]*([^\n]+)/i);
314
+ if (nameMatch)
315
+ projectName = (nameMatch[1] || nameMatch[2]).trim();
316
+ }
317
+ catch {
318
+ // Use default
319
+ }
320
+ // Generate update guide content
321
+ let updateGuide = '';
322
+ if (lang === 'ko') {
323
+ updateGuide = `# UPDATE_GUIDE.md - CodeSyncer μ—…λ°μ΄νŠΈ μž‘μ—…
324
+
325
+ > **AI μ–΄μ‹œμŠ€ν„΄νŠΈμš©**: 이 λ¬Έμ„œμ˜ μ§€μ‹œμ‚¬ν•­μ„ 따라 ${isHardUpdate ? 'λͺ¨λ“  νŒŒμΌμ„ μŠ€μΊ”ν•˜κ³  μ—…λ°μ΄νŠΈν•˜μ„Έμš”' : 'λˆ„λ½λœ νŒŒμΌλ“€μ„ μƒμ„±ν•˜μ„Έμš”'}.
326
+ >
327
+ > **ν”„λ‘œμ νŠΈ**: ${projectName}
328
+ > **μ—…λ°μ΄νŠΈ λ‚ μ§œ**: ${today}
329
+ > **μ—…λ°μ΄νŠΈ λͺ¨λ“œ**: ${isHardUpdate ? 'πŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ' : 'πŸ“ 일반 μ—…λ°μ΄νŠΈ'}
330
+
331
+ ---
332
+
333
+ ${isHardUpdate ? `
334
+ ## πŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ λͺ¨λ“œ
335
+
336
+ **λͺ¨λ“  λ ˆν¬μ§€ν† λ¦¬μ˜ κΈ°μ‘΄ νŒŒμΌλ“€μ„ μŠ€μΊ”ν•˜κ³  μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€:**
337
+
338
+ ### μž‘μ—… λͺ©λ‘
339
+
340
+ 1. **각 λ ˆν¬μ§€ν† λ¦¬μ˜ .claude/ 폴더 μŠ€μΊ”**
341
+ 2. **κΈ°μ‘΄ 파일 뢄석 및 μ—…λ°μ΄νŠΈ:**
342
+ - \`ARCHITECTURE.md\` - μ΅œμ‹  폴더 ꡬ쑰 반영 (μƒˆ 파일/폴더 μΆ”κ°€ μ—¬λΆ€ 확인)
343
+ - \`CLAUDE.md\` - μƒˆλ‘œμš΄ νŒ¨ν„΄/κ·œμΉ™ 발견 μ‹œ μΆ”κ°€
344
+ - \`COMMENT_GUIDE.md\` - ν…œν”Œλ¦Ώ μ΅œμ‹  버전과 비ꡐ
345
+ - \`DECISIONS.md\` - ν˜•μ‹ 검증 (λˆ„λ½ μ—†λŠ”μ§€ 확인)
346
+ 3. **λˆ„λ½λœ 파일 생성** (μ•„λž˜ λͺ©λ‘ μ°Έκ³ )
347
+
348
+ ---
349
+ ` : ''}
350
+
351
+ ## πŸ“‹ λ ˆν¬μ§€ν† λ¦¬ λͺ©λ‘ 및 μž‘μ—…
352
+
353
+ ${isHardUpdate ? `
354
+ **λͺ¨λ“  λ ˆν¬μ§€ν† λ¦¬ (${foundRepos.length}개):**
355
+
356
+ ${foundRepos.map(repo => {
357
+ const needsSetup = reposNeedingSetup.find(r => r.repo === repo.name);
358
+ const missingFiles = needsSetup ? needsSetup.missingFiles : [];
359
+ return `
360
+ ### πŸ“ ${repo.name}/
361
+
362
+ ${missingFiles.length > 0 ? `
363
+ **⚠️ λˆ„λ½λœ 파일:**
364
+ ${missingFiles.map(f => `- \`.claude/${f}\``).join('\n')}
365
+ ` : '**βœ“ λͺ¨λ“  ν•„μˆ˜ 파일 쑴재**'}
366
+
367
+ **πŸ” ν•˜λ“œ μ—…λ°μ΄νŠΈ μž‘μ—…:**
368
+ 1. \`${repo.name}/.claude/\` ν΄λ”λ‘œ 이동
369
+ 2. **κΈ°μ‘΄ 파일 μŠ€μΊ” 및 μ—…λ°μ΄νŠΈ:**
370
+ - \`ARCHITECTURE.md\`: μ΅œμ‹  폴더 ꡬ쑰 반영
371
+ - μƒˆ 파일/폴더 μΆ”κ°€λ˜μ—ˆλŠ”μ§€ 확인
372
+ - 파일 톡계 μ—…λ°μ΄νŠΈ (총 파일 수, μ½”λ“œ 라인 수 λ“±)
373
+ - \`CLAUDE.md\`: μƒˆλ‘œμš΄ νŒ¨ν„΄/κ·œμΉ™ μΆ”κ°€
374
+ - λ°˜λ³΅λ˜λŠ” μ½”λ“œ νŒ¨ν„΄ 발견 μ‹œ ν…œν”Œλ¦ΏμœΌλ‘œ μΆ”κ°€
375
+ - μƒˆλ‘œμš΄ μ½”λ”© κ·œμΉ™ 발견 μ‹œ μΆ”κ°€
376
+ - \`COMMENT_GUIDE.md\`: ν…œν”Œλ¦Ώ μ΅œμ‹  버전 확인
377
+ - \`DECISIONS.md\`: ν˜•μ‹ 검증
378
+ ${missingFiles.length > 0 ? `3. **λˆ„λ½λœ 파일 생성:**
379
+ ${missingFiles.map(f => ` - \`.claude/${f}\``).join('\n')}
380
+ ` : ''}
381
+ **μ€‘μš” 원칙:**
382
+ - ❌ **μ ˆλŒ€ μΆ”λ‘  κΈˆμ§€**: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 수치, API URL, λ³΄μ•ˆ μ„€μ •
383
+ - βœ… **λ°˜λ“œμ‹œ 질문**: μ•Œ 수 μ—†λŠ” μ •λ³΄λŠ” μ‚¬μš©μžμ—κ²Œ 확인
384
+ - βœ… **μ‹€μ œ μ½”λ“œ 읽기**: μΆ”μΈ‘ν•˜μ§€ 말고 μ‹€μ œ 파일 λ‚΄μš© 확인
385
+ - βœ… **μ‚¬μš©μž 확인**: μ—…λ°μ΄νŠΈ 전에 변경사항 보여주고 확인 λ°›κΈ°
386
+ `;
387
+ }).join('\n---\n')}
388
+ ` : `
389
+ **λˆ„λ½λœ 파일이 μžˆλŠ” λ ˆν¬μ§€ν† λ¦¬:**
390
+
391
+ ${reposNeedingSetup.map(({ repo, missingFiles }) => `
392
+ ### πŸ“ ${repo}/
393
+
394
+ **λˆ„λ½λœ 파일:**
395
+ ${missingFiles.map(f => `- \`.claude/${f}\``).join('\n')}
396
+
397
+ **μž‘μ—…:**
398
+ 1. \`${repo}/.claude/\` ν΄λ”λ‘œ 이동
399
+ 2. λ ˆν¬μ§€ν† λ¦¬ 뢄석:
400
+ - μ‹€μ œ 파일 ꡬ쑰 μŠ€μΊ”
401
+ - package.json λ˜λŠ” μ˜μ‘΄μ„± 파일 읽기
402
+ - μ½”λ“œ νŒ¨ν„΄ 확인
403
+ - ν”„λ‘œμ νŠΈ νƒ€μž… νŒŒμ•… (frontend/backend/mobile/fullstack)
404
+ 3. λˆ„λ½λœ 각 파일 생성:
405
+ ${missingFiles.map(f => ` - **${f}**: \`../templates/ko/${f.toLowerCase().replace('.md', '_template.md')}\` μ°Έκ³ `).join('\n')}
406
+
407
+ **μ€‘μš” 원칙:**
408
+ - ❌ **μ ˆλŒ€ μΆ”λ‘  κΈˆμ§€**: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 수치, API URL, λ³΄μ•ˆ μ„€μ •
409
+ - βœ… **λ°˜λ“œμ‹œ 질문**: μ•Œ 수 μ—†λŠ” μ •λ³΄λŠ” μ‚¬μš©μžμ—κ²Œ 확인
410
+ - βœ… **μ‹€μ œ μ½”λ“œ 읽기**: μΆ”μΈ‘ν•˜μ§€ 말고 μ‹€μ œ 파일 λ‚΄μš© 확인
411
+ `).join('\n---\n')}
412
+ `}
413
+
414
+ ---
415
+
416
+ ## πŸš€ μž‘μ—… μˆœμ„œ
417
+
418
+ ${isHardUpdate ? `
419
+ ### ν•˜λ“œ μ—…λ°μ΄νŠΈ μž‘μ—… 흐름:
420
+
421
+ 각 λ ˆν¬μ§€ν† λ¦¬λ§ˆλ‹€:
422
+
423
+ **1단계: κΈ°μ‘΄ 파일 μŠ€μΊ”**
424
+ \`\`\`
425
+ "${foundRepos[0]?.name} λ ˆν¬μ§€ν† λ¦¬μ˜ .claude/ 폴더 μŠ€μΊ”ν•΄μ€˜"
426
+ \`\`\`
427
+
428
+ **2단계: 변경사항 뢄석**
429
+ - ARCHITECTURE.md의 폴더 ꡬ쑰와 μ‹€μ œ 폴더 ꡬ쑰 비ꡐ
430
+ - μƒˆ 파일/폴더 μΆ”κ°€ μ—¬λΆ€ 확인
431
+ - 파일 톡계 μž¬κ³„μ‚°
432
+
433
+ **3단계: μ‚¬μš©μžμ—κ²Œ 변경사항 μ œμ‹œ**
434
+ \`\`\`
435
+ 발견된 변경사항:
436
+ - μƒˆ 파일 10개 좔가됨
437
+ - src/new-feature/ 폴더 좔가됨
438
+ - 총 파일 수: 150 β†’ 160
439
+
440
+ 이 λ‚΄μš©μ„ ARCHITECTURE.md에 λ°˜μ˜ν• κΉŒμš”?
441
+ \`\`\`
442
+
443
+ **4단계: 승인 ν›„ μ—…λ°μ΄νŠΈ**
444
+ μ‚¬μš©μž 확인 받은 ν›„ 파일 μ—…λ°μ΄νŠΈ
445
+
446
+ **5단계: λˆ„λ½λœ 파일 생성** (μžˆλŠ” 경우)
447
+ ` : `
448
+ ### 일반 μ—…λ°μ΄νŠΈ μž‘μ—… 흐름:
449
+
450
+ 각 λ ˆν¬μ§€ν† λ¦¬λ§ˆλ‹€:
451
+
452
+ **1단계: λ ˆν¬μ§€ν† λ¦¬ 뢄석**
453
+ \`\`\`
454
+ "${reposNeedingSetup[0]?.repo || foundRepos[0]?.name} λ ˆν¬μ§€ν† λ¦¬ λΆ„μ„ν•΄μ€˜"
455
+ \`\`\`
456
+
457
+ **2단계: μ‚¬μš©μž 확인**
458
+ 뢄석 κ²°κ³Όλ₯Ό μ œμ‹œν•˜κ³  μ‚¬μš©μž 확인:
459
+ - ν”„λ‘œμ νŠΈ νƒ€μž…μ΄ λ§žλ‚˜μš”?
460
+ - 기술 μŠ€νƒμ΄ μ •ν™•ν•œκ°€μš”?
461
+ - μ£Όμš” κΈ°λŠ₯이 λΉ μ§„ 게 μ—†λ‚˜μš”?
462
+
463
+ **3단계: λˆ„λ½λœ 파일 생성**
464
+ 확인 ν›„ λˆ„λ½λœ νŒŒμΌλ“€ 생성:
465
+ - CLAUDE.md - μ½”λ”© κ·œμΉ™
466
+ - ARCHITECTURE.md - ν”„λ‘œμ νŠΈ ꡬ쑰
467
+ - COMMENT_GUIDE.md - 주석 κ°€μ΄λ“œ
468
+ - DECISIONS.md - μ˜λ…Ό 기둝
469
+
470
+ **4단계: 검증**
471
+ \`\`\`bash
472
+ ls ${reposNeedingSetup[0]?.repo || foundRepos[0]?.name}/.claude/
473
+ \`\`\`
474
+
475
+ λͺ¨λ“  파일이 μƒμ„±λ˜μ—ˆλŠ”μ§€ 확인
476
+ `}
477
+
478
+ ---
479
+
480
+ ## πŸ’‘ ν…œν”Œλ¦Ώ μœ„μΉ˜
481
+
482
+ ν•„μš”ν•œ ν…œν”Œλ¦Ώ νŒŒμΌλ“€:
483
+ - \`src/templates/ko/claude.md\`
484
+ - \`src/templates/ko/architecture.md\`
485
+ - \`src/templates/ko/comment_guide.md\`
486
+ - \`src/templates/ko/decisions.md\`
487
+
488
+ **주의**: ν…œν”Œλ¦Ώμ˜ ν”Œλ ˆμ΄μŠ€ν™€λ” ([PROJECT_NAME], [TECH_STACK] λ“±)λ₯Ό μ‹€μ œ κ°’μœΌλ‘œ κ΅μ²΄ν•˜μ„Έμš”!
489
+
490
+ ---
491
+
492
+ ## βœ… μ™„λ£Œ 쑰건
493
+
494
+ λͺ¨λ“  λ ˆν¬μ§€ν† λ¦¬μ—μ„œ:
495
+ - \`.claude/\` 폴더 쑴재
496
+ - 4개 ν•„μˆ˜ 파일 λͺ¨λ‘ 생성
497
+ - 각 νŒŒμΌμ— μ‹€μ œ ν”„λ‘œμ νŠΈ 정보 반영
498
+ - ν”Œλ ˆμ΄μŠ€ν™€λ” μ—†μŒ
499
+
500
+ ---
501
+
502
+ ## πŸ—‘οΈ μž‘μ—… μ™„λ£Œ ν›„
503
+
504
+ λͺ¨λ“  λˆ„λ½λœ νŒŒμΌμ„ μƒμ„±ν–ˆλ‹€λ©΄:
505
+
506
+ \`\`\`
507
+ "UPDATE_GUIDE.md μ‚­μ œν•΄μ€˜"
508
+ \`\`\`
509
+
510
+ λ˜λŠ” 직접 μ‚­μ œ:
511
+ \`\`\`bash
512
+ rm .codesyncer/UPDATE_GUIDE.md
513
+ \`\`\`
514
+
515
+ ---
516
+
517
+ **이 νŒŒμΌμ€ \`codesyncer update\`에 μ˜ν•΄ μžλ™ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.**
518
+ **μž‘μ—… μ™„λ£Œ ν›„ 이 νŒŒμΌμ€ μ‚­μ œλ©λ‹ˆλ‹€.**
519
+ `;
520
+ }
521
+ else {
522
+ updateGuide = `# UPDATE_GUIDE.md - CodeSyncer Update Tasks
523
+
524
+ > **For AI Assistant**: Follow the instructions in this document to ${isHardUpdate ? 'scan and update all files' : 'generate missing files'}.
525
+ >
526
+ > **Project**: ${projectName}
527
+ > **Update Date**: ${today}
528
+ > **Update Mode**: ${isHardUpdate ? 'πŸ” Hard Update' : 'πŸ“ Normal Update'}
529
+
530
+ ---
531
+
532
+ ${isHardUpdate ? `
533
+ ## πŸ” Hard Update Mode
534
+
535
+ **Scan and update all existing files in every repository:**
536
+
537
+ ### Task List
538
+
539
+ 1. **Scan each repository's .claude/ folder**
540
+ 2. **Analyze and update existing files:**
541
+ - \`ARCHITECTURE.md\` - Reflect latest folder structure (check for new files/folders)
542
+ - \`CLAUDE.md\` - Add new patterns/rules when discovered
543
+ - \`COMMENT_GUIDE.md\` - Compare with latest template version
544
+ - \`DECISIONS.md\` - Validate format (check for missing entries)
545
+ 3. **Generate missing files** (see list below)
546
+
547
+ ---
548
+ ` : ''}
549
+
550
+ ## πŸ“‹ Repository List and Tasks
551
+
552
+ ${isHardUpdate ? `
553
+ **All Repositories (${foundRepos.length}):**
554
+
555
+ ${foundRepos.map(repo => {
556
+ const needsSetup = reposNeedingSetup.find(r => r.repo === repo.name);
557
+ const missingFiles = needsSetup ? needsSetup.missingFiles : [];
558
+ return `
559
+ ### πŸ“ ${repo.name}/
560
+
561
+ ${missingFiles.length > 0 ? `
562
+ **⚠️ Missing Files:**
563
+ ${missingFiles.map(f => `- \`.claude/${f}\``).join('\n')}
564
+ ` : '**βœ“ All Required Files Exist**'}
565
+
566
+ **πŸ” Hard Update Tasks:**
567
+ 1. Navigate to \`${repo.name}/.claude/\`
568
+ 2. **Scan and update existing files:**
569
+ - \`ARCHITECTURE.md\`: Reflect latest folder structure
570
+ - Check if new files/folders added
571
+ - Update file statistics (total files, lines of code, etc.)
572
+ - \`CLAUDE.md\`: Add new patterns/rules
573
+ - Add repeated code patterns as templates
574
+ - Add newly discovered coding rules
575
+ - \`COMMENT_GUIDE.md\`: Check latest template version
576
+ - \`DECISIONS.md\`: Validate format
577
+ ${missingFiles.length > 0 ? `3. **Generate missing files:**
578
+ ${missingFiles.map(f => ` - \`.claude/${f}\``).join('\n')}
579
+ ` : ''}
580
+ **Important Principles:**
581
+ - ❌ **Never Infer**: Business logic numbers, API URLs, security settings
582
+ - βœ… **Always Ask**: Confirm unknown information with user
583
+ - βœ… **Read Actual Code**: Don't guess, read actual file contents
584
+ - βœ… **User Confirmation**: Show changes and get approval before updating
585
+ `;
586
+ }).join('\n---\n')}
587
+ ` : `
588
+ **Repositories with Missing Files:**
589
+
590
+ ${reposNeedingSetup.map(({ repo, missingFiles }) => `
591
+ ### πŸ“ ${repo}/
592
+
593
+ **Missing files:**
594
+ ${missingFiles.map(f => `- \`.claude/${f}\``).join('\n')}
595
+
596
+ **Tasks:**
597
+ 1. Navigate to \`${repo}/.claude/\`
598
+ 2. Analyze repository:
599
+ - Scan actual file structure
600
+ - Read package.json or dependency files
601
+ - Check code patterns
602
+ - Identify project type (frontend/backend/mobile/fullstack)
603
+ 3. Generate each missing file:
604
+ ${missingFiles.map(f => ` - **${f}**: Reference \`../templates/en/${f.toLowerCase().replace('.md', '_template.md')}\``).join('\n')}
605
+
606
+ **Important Principles:**
607
+ - ❌ **Never Infer**: Business logic numbers, API URLs, security settings
608
+ - βœ… **Always Ask**: Confirm unknown information with user
609
+ - βœ… **Read Actual Code**: Don't guess, read actual file contents
610
+ `).join('\n---\n')}
611
+ `}
612
+
613
+ ---
614
+
615
+ ## πŸš€ Workflow
616
+
617
+ ${isHardUpdate ? `
618
+ ### Hard Update Workflow:
619
+
620
+ For each repository:
621
+
622
+ **Step 1: Scan Existing Files**
623
+ \`\`\`
624
+ "Scan ${foundRepos[0]?.name} repository's .claude/ folder"
625
+ \`\`\`
626
+
627
+ **Step 2: Analyze Changes**
628
+ - Compare ARCHITECTURE.md folder structure with actual folder structure
629
+ - Check for new files/folders added
630
+ - Recalculate file statistics
631
+
632
+ **Step 3: Present Changes to User**
633
+ \`\`\`
634
+ Changes detected:
635
+ - 10 new files added
636
+ - src/new-feature/ folder added
637
+ - Total files: 150 β†’ 160
638
+
639
+ Update ARCHITECTURE.md with these changes?
640
+ \`\`\`
641
+
642
+ **Step 4: Update After Approval**
643
+ Update files after user confirmation
644
+
645
+ **Step 5: Generate Missing Files** (if any)
646
+ ` : `
647
+ ### Normal Update Workflow:
648
+
649
+ For each repository:
650
+
651
+ **Step 1: Analyze Repository**
652
+ \`\`\`
653
+ "Analyze ${reposNeedingSetup[0]?.repo || foundRepos[0]?.name} repository"
654
+ \`\`\`
655
+
656
+ **Step 2: User Confirmation**
657
+ Present analysis results and confirm with user:
658
+ - Is the project type correct?
659
+ - Is the tech stack accurate?
660
+ - Are there any missing main features?
661
+
662
+ **Step 3: Generate Missing Files**
663
+ After confirmation, create missing files:
664
+ - CLAUDE.md - Coding rules
665
+ - ARCHITECTURE.md - Project structure
666
+ - COMMENT_GUIDE.md - Comment guide
667
+ - DECISIONS.md - Decision log
668
+
669
+ **Step 4: Verification**
670
+ \`\`\`bash
671
+ ls ${reposNeedingSetup[0]?.repo || foundRepos[0]?.name}/.claude/
672
+ \`\`\`
673
+
674
+ Verify all files are created
675
+ `}
676
+
677
+ ---
678
+
679
+ ## πŸ’‘ Template Locations
680
+
681
+ Required template files:
682
+ - \`src/templates/en/claude.md\`
683
+ - \`src/templates/en/architecture.md\`
684
+ - \`src/templates/en/comment_guide.md\`
685
+ - \`src/templates/en/decisions.md\`
686
+
687
+ **Note**: Replace template placeholders ([PROJECT_NAME], [TECH_STACK], etc.) with actual values!
688
+
689
+ ---
690
+
691
+ ## βœ… Completion Criteria
692
+
693
+ For all repositories:
694
+ - \`.claude/\` folder exists
695
+ - All 4 required files created
696
+ - Each file reflects actual project information
697
+ - No placeholders remaining
698
+
699
+ ---
700
+
701
+ ## πŸ—‘οΈ After Completion
702
+
703
+ Once all missing files are generated:
704
+
705
+ \`\`\`
706
+ "Delete UPDATE_GUIDE.md"
707
+ \`\`\`
708
+
709
+ Or delete manually:
710
+ \`\`\`bash
711
+ rm .codesyncer/UPDATE_GUIDE.md
712
+ \`\`\`
713
+
714
+ ---
715
+
716
+ **This file was automatically generated by \`codesyncer update\`.**
717
+ **This file will be deleted after tasks are completed.**
718
+ `;
719
+ }
720
+ // Delete existing UPDATE_GUIDE.md if exists (always create fresh)
721
+ if (await fs.pathExists(updateGuidePath)) {
722
+ await fs.remove(updateGuidePath);
723
+ }
724
+ await fs.writeFile(updateGuidePath, updateGuide, 'utf-8');
725
+ spinner.succeed(lang === 'ko' ? 'UPDATE_GUIDE.md 생성 μ™„λ£Œ!' : 'UPDATE_GUIDE.md created!');
726
+ console.log(chalk_1.default.green(` βœ“ ${updateGuidePath}\n`));
727
+ console.log(chalk_1.default.gray(lang === 'ko'
728
+ ? ' πŸ’‘ 이 νŒŒμΌμ€ μž‘μ—… μ™„λ£Œ ν›„ μ‚­μ œλ©λ‹ˆλ‹€'
729
+ : ' πŸ’‘ This file will be deleted after tasks are completed\n'));
730
+ // Show instructions
731
+ console.log(chalk_1.default.bold(lang === 'ko' ? '\nπŸ€– λ‹€μŒ 단계 (AI μ–΄μ‹œμŠ€ν„΄νŠΈμ—κ²Œ):' : '\nπŸ€– Next Steps (Tell your AI):'));
732
+ console.log(chalk_1.default.gray('─'.repeat(60)));
733
+ console.log();
734
+ console.log(chalk_1.default.yellow(lang === 'ko'
735
+ ? ' ".codesyncer/UPDATE_GUIDE.md 읽고 μ§€μ‹œμ‚¬ν•­λŒ€λ‘œ λˆ„λ½λœ νŒŒμΌλ“€ μƒμ„±ν•΄μ€˜"'
736
+ : ' "Read .codesyncer/UPDATE_GUIDE.md and generate missing files as instructed"'));
737
+ console.log();
738
+ console.log(chalk_1.default.gray(lang === 'ko'
739
+ ? ' βœ“ μž‘μ—… μ™„λ£Œ ν›„: "UPDATE_GUIDE.md μ‚­μ œν•΄μ€˜"'
740
+ : ' βœ“ After completion: "Delete UPDATE_GUIDE.md"'));
741
+ console.log();
742
+ console.log(chalk_1.default.gray('─'.repeat(60)));
743
+ console.log();
744
+ }
745
+ catch (error) {
746
+ spinner.fail(lang === 'ko' ? 'UPDATE_GUIDE.md 생성 μ‹€νŒ¨' : 'Failed to create UPDATE_GUIDE.md');
747
+ console.error(chalk_1.default.red(`Error: ${error}\n`));
748
+ }
749
+ }
750
+ }
117
751
  console.log(chalk_1.default.bold.green('\nβœ… Update complete!\n'));
118
752
  if (newRepos.length > 0) {
119
- console.log(chalk_1.default.bold('πŸ“ Next steps:\n'));
120
- console.log(` ${chalk_1.default.cyan('Run:')} codesyncer add-repo ${chalk_1.default.gray('(to set up new repositories)')}\n`);
753
+ console.log(chalk_1.default.bold(lang === 'ko' ? 'πŸ“ λ‹€μŒ 단계:\n' : 'πŸ“ Next steps:\n'));
754
+ console.log(` ${chalk_1.default.cyan(lang === 'ko' ? 'μ‹€ν–‰:' : 'Run:')} codesyncer add-repo ${chalk_1.default.gray(lang === 'ko' ? '(μƒˆ λ ˆν¬μ§€ν† λ¦¬ μ„€μ •)' : '(to set up new repositories)')}\n`);
121
755
  }
122
756
  }
123
757
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sCAovBC;AA5vBD,kDAA0B;AAC1B,8CAAsB;AACtB,wDAAgC;AAChC,6CAA+B;AAC/B,2CAA6B;AAE7B,8CAAuE;AAEhE,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjC,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,IAAI,IAAI,GAAa,IAAI,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IAED,4DAA4D;IAC5D,IAAI,YAAY,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IAEzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB;gBAClE,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,IAAI,KAAK,IAAI;4BACjB,CAAC,CAAC,yBAAyB;4BAC3B,CAAC,CAAC,gDAAgD;wBACpD,KAAK,EAAE,QAAQ;qBAChB;oBACD;wBACE,IAAI,EAAE,IAAI,KAAK,IAAI;4BACjB,CAAC,CAAC,iCAAiC;4BACnC,CAAC,CAAC,0DAA0D;wBAC9D,KAAK,EAAE,MAAM;qBACd;iBACF;gBACD,OAAO,EAAE,QAAQ;aAClB;SACF,CAAC,CAAC;QAEH,YAAY,GAAG,UAAU,KAAK,MAAM,CAAC;IACvC,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;YACzC,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;YACvC,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;IAExF,wBAAwB;IACxB,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAmB,EAAC,UAAU,CAAC,CAAC;IAEzD,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAC;IAChF,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,gEAAgE;QAChE,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACnF,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,GAAG,WAAW;iBACxB,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc;iBACvB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1C,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uBAAuB;IACzB,CAAC;IAED,wBAAwB;IACxB,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtF,kDAAkD;IAClD,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAA+C,EAAE,CAAC;IAEzE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,oCAAoC;QACpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACrC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3D,kBAAkB;IAClB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IAElG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,uBAAuB,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACpJ,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAExF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;QAC5G,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;QACvH,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,iBAAiB,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oCAAoC,GAAG,CAAC,CAAC,CAAC;QAC7I,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1C,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAElE,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,2CAA2C;QAC3C,MAAM,UAAU,GAAG,wBAAwB,WAAW,MAAM,CAAC;QAC7D,MAAM,SAAS,GAAG,2BAA2B,UAAU,CAAC,MAAM,IAAI,CAAC;QACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpH,qBAAqB;QACrB,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;QAE7E,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC1D,CAAC;IAED,iCAAiC;IACjC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAE1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;QAErG,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACjD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB;gBAC1E,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;YAEnG,IAAI,CAAC;gBACH,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACrF,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAExD,0DAA0D;gBAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAC;gBAChF,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC5C,IAAI,cAAc,GAAG,eAAe,CAAC;gBAErC,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC7D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBACnF,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBAEnE,IAAI,SAAS;wBAAE,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACnE,IAAI,WAAW;wBAAE,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;gBAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAErD,uBAAuB;gBACvB,QAAQ,GAAG,QAAQ;qBAChB,OAAO,CAAC,mBAAmB,EAAE,WAAW,CAAC;qBACzC,OAAO,CAAC,sBAAsB,EAAE,cAAc,CAAC;qBAC/C,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;qBAC5B,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEjD,uBAAuB;gBACvB,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAEtD,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,cAAc,IAAI,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;oBAClC,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,mEAAmE,CAAC,CAAC,CAAC;gBAE1E,yBAAyB;gBACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACxG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;oBAClE,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;oBACpF,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;oBAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAChD,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC;IAEtE,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;gBACzC,CAAC,CAAC,gCAAgC;gBAClC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,YAAY,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;gBACzC,CAAC,CAAC,2CAA2C;gBAC7C,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,IAAI,KAAK,IAAI;oBACpB,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,0CAA0C;gBAC9C,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;YAEvG,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;gBAChF,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAErD,uBAAuB;gBACvB,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC5C,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC7D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBACnF,IAAI,SAAS;wBAAE,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrE,CAAC;gBAAC,MAAM,CAAC;oBACP,cAAc;gBAChB,CAAC;gBAED,gCAAgC;gBAChC,IAAI,WAAW,GAAG,EAAE,CAAC;gBAErB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,WAAW,GAAG;;kCAEU,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB;;cAE3E,WAAW;iBACR,KAAK;iBACL,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;;;;EAIzD,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;CAgBhB,CAAC,CAAC,CAAC,EAAE;;;;EAIJ,YAAY,CAAC,CAAC,CAAC;cACH,UAAU,CAAC,MAAM;;EAE7B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;wBAE/D,OAAO;SACA,IAAI,CAAC,IAAI;;EAEhB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;EAE1B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACvD,CAAC,CAAC,CAAC,mBAAmB;;;OAGhB,IAAI,CAAC,IAAI;;;;;;;;;;EAUd,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC1D,CAAC,CAAC,CAAC,EAAE;;;;;;CAML,CAAC;oBACF,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;CACjB,CAAC,CAAC,CAAC;;;EAGF,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;SAC3C,IAAI;;;EAGX,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;OAGjD,IAAI;;;;;;;EAOT,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;CAM5H,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;CACjB;;;;;;EAMC,YAAY,CAAC,CAAC,CAAC;;;;;;;GAOd,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsBrB,CAAC,CAAC,CAAC;;;;;;;GAOD,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;;;;;;;;;;;;;;;KAkB/C,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;CAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CA,CAAC;gBACM,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG;;sEAE8C,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB;;iBAE1H,WAAW;qBACP,KAAK;qBACL,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;;;;EAIvE,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;CAgBhB,CAAC,CAAC,CAAC,EAAE;;;;EAIJ,YAAY,CAAC,CAAC,CAAC;sBACK,UAAU,CAAC,MAAM;;EAErC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;wBAE/D,OAAO;SACA,IAAI,CAAC,IAAI;;EAEhB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;EAE1B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACvD,CAAC,CAAC,CAAC,gCAAgC;;;mBAGjB,IAAI,CAAC,IAAI;;;;;;;;;;EAU1B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC1D,CAAC,CAAC,CAAC,EAAE;;;;;;CAML,CAAC;oBACF,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;CACjB,CAAC,CAAC,CAAC;;;EAGF,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;SAC3C,IAAI;;;EAGX,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;mBAGrC,IAAI;;;;;;;EAOrB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;CAMnI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;CACjB;;;;;;EAMC,YAAY,CAAC,CAAC,CAAC;;;;;;;QAOT,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC,CAAC,CAAC;;;;;;;WAOO,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;;;;;;;;;;;;;;;KAkBvD,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;;;;CAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CA,CAAC;gBACM,CAAC;gBAED,kEAAkE;gBAClE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACzC,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACnC,CAAC;gBAED,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAE1D,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;gBACvF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,eAAe,IAAI,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;oBAClC,CAAC,CAAC,0BAA0B;oBAC5B,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC;gBAEnE,oBAAoB;gBACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACxG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;oBACpC,CAAC,CAAC,wDAAwD;oBAC1D,CAAC,CAAC,+EAA+E,CAAC,CAAC,CAAC;gBACtF,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;oBAClC,CAAC,CAAC,qCAAqC;oBACvC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBAC3F,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAExD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,wBAAwB,eAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACtK,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -80,6 +80,7 @@ program
80
80
  .command('update')
81
81
  .description('Update project structure and documentation')
82
82
  .option('-a, --ai <tool>', 'AI tool (currently: claude only)', 'claude')
83
+ .option('--hard', 'Deep scan and update all existing files (not just missing files)')
83
84
  .action(update_1.updateCommand);
84
85
  program
85
86
  .command('add-repo')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,8CAAkD;AAClD,kDAAqD;AACrD,2CAA6B;AAC7B,uCAAyB;AAEzB,iCAAiC;AACjC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,GAAG,OAAO,6CAA6C;IAC9D,eAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC;IAClF,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;KAC/E,WAAW,CAAC,OAAO,EAAE;EACtB,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC;IACzC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC;;EAElB,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC;IAC3D,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;EAEjB,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;mCACU,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC;mCAC/C,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;mCACxC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC;GAC/E,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,IAAI,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,IAAI,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,yBAAc,CAAC,CAAC;AAE1B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,8CAAkD;AAClD,kDAAqD;AACrD,2CAA6B;AAC7B,uCAAyB;AAEzB,iCAAiC;AACjC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,GAAG,OAAO,6CAA6C;IAC9D,eAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC;IAClF,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;KAC/E,WAAW,CAAC,OAAO,EAAE;EACtB,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC;IACzC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC;;EAElB,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC;IAC3D,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACf,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;EAEjB,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;mCACU,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC;mCAC/C,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;mCACxC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC;GAC/E,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,IAAI,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,QAAQ,EAAE,kEAAkE,CAAC;KACpF,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,IAAI,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KACvE,MAAM,CAAC,yBAAc,CAAC,CAAC;AAE1B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface InitOptions {
10
10
  }
11
11
  export interface UpdateOptions {
12
12
  ai: AITool;
13
+ hard?: boolean;
13
14
  }
14
15
  export interface AddRepoOptions {
15
16
  lang: Language;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;AAE9B,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,WAAW,CAAC;KACnB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC;AAGD,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,eAAO,MAAM,cAAc,+DAMjB,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;AAE9B,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,WAAW,CAAC;KACnB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC;AAGD,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,eAAO,MAAM,cAAc,+DAMjB,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAqFA,oFAAoF;AACvE,QAAA,YAAY,GAAG;IAC1B,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,QAAQ,EAAG,qDAAqD;CAChE,CAAC;AAEE,QAAA,cAAc,GAAG;IAC5B,MAAM;IACN,WAAW;IACX,UAAU;IACV,MAAM;IACN,SAAS;CACD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAsFA,oFAAoF;AACvE,QAAA,YAAY,GAAG;IAC1B,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,QAAQ,EAAG,qDAAqD;CAChE,CAAC;AAEE,QAAA,cAAc,GAAG;IAC5B,MAAM;IACN,WAAW;IACX,UAAU;IACV,MAAM;IACN,SAAS;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codesyncer",
3
- "version": "2.1.2",
3
+ "version": "2.2.0",
4
4
  "description": "AI-powered multi-repository collaboration system - Works with Claude Code, Cursor, GitHub Copilot, and more",
5
5
  "keywords": [
6
6
  "ai-collaboration",