@cluesmith/codev 3.0.0-rc.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dashboard/dist/assets/{index-1OFuumc_.js → index-CTrlY11L.js} +13 -13
  2. package/dashboard/dist/assets/{index-1OFuumc_.js.map → index-CTrlY11L.js.map} +1 -1
  3. package/dashboard/dist/index.html +1 -1
  4. package/dist/agent-farm/commands/architect.js +1 -1
  5. package/dist/agent-farm/commands/architect.js.map +1 -1
  6. package/dist/agent-farm/commands/send.d.ts +4 -1
  7. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  8. package/dist/agent-farm/commands/send.js +5 -2
  9. package/dist/agent-farm/commands/send.js.map +1 -1
  10. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  11. package/dist/agent-farm/commands/spawn-worktree.js +26 -10
  12. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  13. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  14. package/dist/agent-farm/servers/overview.js +8 -0
  15. package/dist/agent-farm/servers/overview.js.map +1 -1
  16. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  17. package/dist/agent-farm/servers/tower-instances.js +12 -10
  18. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  19. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  20. package/dist/agent-farm/servers/tower-terminals.js +17 -18
  21. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  22. package/dist/agent-farm/servers/tower-utils.js +1 -1
  23. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  24. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  25. package/dist/agent-farm/utils/config.js +18 -17
  26. package/dist/agent-farm/utils/config.js.map +1 -1
  27. package/dist/agent-farm/utils/roles.d.ts +11 -4
  28. package/dist/agent-farm/utils/roles.d.ts.map +1 -1
  29. package/dist/agent-farm/utils/roles.js +21 -6
  30. package/dist/agent-farm/utils/roles.js.map +1 -1
  31. package/dist/cli.d.ts.map +1 -1
  32. package/dist/cli.js +21 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/commands/adopt.d.ts.map +1 -1
  35. package/dist/commands/adopt.js +14 -43
  36. package/dist/commands/adopt.js.map +1 -1
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +12 -42
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/porch/config.d.ts +6 -9
  41. package/dist/commands/porch/config.d.ts.map +1 -1
  42. package/dist/commands/porch/config.js +12 -37
  43. package/dist/commands/porch/config.js.map +1 -1
  44. package/dist/commands/porch/index.d.ts.map +1 -1
  45. package/dist/commands/porch/index.js +57 -21
  46. package/dist/commands/porch/index.js.map +1 -1
  47. package/dist/commands/porch/next.d.ts.map +1 -1
  48. package/dist/commands/porch/next.js +70 -8
  49. package/dist/commands/porch/next.js.map +1 -1
  50. package/dist/commands/porch/prompts.d.ts.map +1 -1
  51. package/dist/commands/porch/prompts.js +13 -29
  52. package/dist/commands/porch/prompts.js.map +1 -1
  53. package/dist/commands/porch/protocol.d.ts +4 -3
  54. package/dist/commands/porch/protocol.d.ts.map +1 -1
  55. package/dist/commands/porch/protocol.js +21 -21
  56. package/dist/commands/porch/protocol.js.map +1 -1
  57. package/dist/commands/porch/types.d.ts +2 -2
  58. package/dist/commands/porch/types.d.ts.map +1 -1
  59. package/dist/commands/sync.d.ts +26 -0
  60. package/dist/commands/sync.d.ts.map +1 -0
  61. package/dist/commands/sync.js +207 -0
  62. package/dist/commands/sync.js.map +1 -0
  63. package/dist/commands/update.d.ts +15 -2
  64. package/dist/commands/update.d.ts.map +1 -1
  65. package/dist/commands/update.js +159 -202
  66. package/dist/commands/update.js.map +1 -1
  67. package/dist/lib/config.d.ts +82 -0
  68. package/dist/lib/config.d.ts.map +1 -0
  69. package/dist/lib/config.js +158 -0
  70. package/dist/lib/config.js.map +1 -0
  71. package/dist/lib/forge.d.ts +6 -6
  72. package/dist/lib/forge.d.ts.map +1 -1
  73. package/dist/lib/forge.js +7 -15
  74. package/dist/lib/forge.js.map +1 -1
  75. package/dist/lib/github.d.ts +1 -1
  76. package/dist/lib/github.js +2 -2
  77. package/dist/lib/github.js.map +1 -1
  78. package/dist/lib/skeleton.d.ts +15 -5
  79. package/dist/lib/skeleton.d.ts.map +1 -1
  80. package/dist/lib/skeleton.js +82 -7
  81. package/dist/lib/skeleton.js.map +1 -1
  82. package/dist/lib/team-github.js +1 -1
  83. package/dist/lib/team-github.js.map +1 -1
  84. package/package.json +1 -1
  85. package/scripts/forge/gitea/repo-archive.sh +11 -0
  86. package/scripts/forge/github/repo-archive.sh +10 -0
  87. package/scripts/forge/gitlab/repo-archive.sh +12 -0
@@ -1,20 +1,121 @@
1
1
  /**
2
- * codev update - Update codev templates and protocols
2
+ * codev update - Migrate config and refresh Claude-specific files.
3
+ *
4
+ * Two responsibilities:
5
+ * A. One-time migration (runs once, skipped on subsequent runs):
6
+ * 1. Move af-config.json → .codev/config.json
7
+ * 2. Clean unmodified skeleton files (using .update-hashes.json)
8
+ * 3. Preserve user-modified files as local overrides
9
+ * 4. Remove .update-hashes.json
10
+ *
11
+ * B. Claude-specific file refresh (runs every time):
12
+ * 1. Update CLAUDE.md, AGENTS.md, .claude/skills/ from package
3
13
  */
4
14
  import * as fs from 'node:fs';
5
15
  import * as path from 'node:path';
6
16
  import { spawn } from 'node:child_process';
17
+ import { deepMerge } from '../lib/config.js';
7
18
  import chalk from 'chalk';
8
- import { getTemplatesDir, getTemplateFiles, hashFile, loadHashStore, saveHashStore, isUserDataPath, isUpdatableFile, } from '../lib/templates.js';
9
- import { copyConsultTypes, copyRoles, copySkills } from '../lib/scaffold.js';
19
+ import { getTemplatesDir, hashFile, loadHashStore, } from '../lib/templates.js';
20
+ import { copySkills, copyRootFiles } from '../lib/scaffold.js';
10
21
  /**
11
- * Update codev templates in current project
22
+ * Check if migration is needed (af-config.json exists or .update-hashes.json exists).
23
+ */
24
+ function needsMigration(targetDir) {
25
+ return (fs.existsSync(path.join(targetDir, 'af-config.json')) ||
26
+ fs.existsSync(path.join(targetDir, 'codev', '.update-hashes.json')));
27
+ }
28
+ /**
29
+ * Run one-time migration from af-config.json to .codev/config.json
30
+ * and clean unmodified skeleton files.
31
+ */
32
+ function runMigration(targetDir, dryRun, log) {
33
+ const cleaned = [];
34
+ const preserved = [];
35
+ log(chalk.bold('Running migration to .codev/ configuration...'));
36
+ log('');
37
+ // 1. Move af-config.json → .codev/config.json
38
+ const afConfigPath = path.join(targetDir, 'af-config.json');
39
+ const codevConfigDir = path.join(targetDir, '.codev');
40
+ const codevConfigPath = path.join(codevConfigDir, 'config.json');
41
+ if (fs.existsSync(afConfigPath)) {
42
+ if (!dryRun) {
43
+ if (!fs.existsSync(codevConfigDir)) {
44
+ fs.mkdirSync(codevConfigDir, { recursive: true });
45
+ }
46
+ if (!fs.existsSync(codevConfigPath)) {
47
+ // No .codev/config.json yet — move af-config.json there
48
+ fs.copyFileSync(afConfigPath, codevConfigPath);
49
+ fs.unlinkSync(afConfigPath);
50
+ log(chalk.blue(' ~ (migrated)'), 'af-config.json → .codev/config.json');
51
+ }
52
+ else {
53
+ // Both exist — merge af-config.json into .codev/config.json to preserve customizations
54
+ try {
55
+ const afContent = JSON.parse(fs.readFileSync(afConfigPath, 'utf-8'));
56
+ const existingContent = JSON.parse(fs.readFileSync(codevConfigPath, 'utf-8'));
57
+ // deepMerge imported at top of file
58
+ const merged = deepMerge(existingContent, afContent);
59
+ fs.writeFileSync(codevConfigPath, JSON.stringify(merged, null, 2) + '\n');
60
+ fs.unlinkSync(afConfigPath);
61
+ log(chalk.blue(' ~ (merged)'), 'af-config.json merged into .codev/config.json');
62
+ }
63
+ catch (err) {
64
+ log(chalk.yellow(' ⚠ (preserved)'), 'af-config.json — merge failed, kept for manual review');
65
+ log(chalk.dim(` Error: ${err instanceof Error ? err.message : String(err)}`));
66
+ }
67
+ }
68
+ }
69
+ else {
70
+ log(chalk.blue(' ~ (would migrate)'), 'af-config.json → .codev/config.json');
71
+ }
72
+ }
73
+ // 2. Clean unmodified skeleton files using .update-hashes.json
74
+ const hashStorePath = path.join(targetDir, 'codev', '.update-hashes.json');
75
+ if (fs.existsSync(hashStorePath)) {
76
+ const hashes = loadHashStore(targetDir);
77
+ for (const [relativePath, storedHash] of Object.entries(hashes)) {
78
+ const filePath = path.join(targetDir, 'codev', relativePath);
79
+ if (!fs.existsSync(filePath))
80
+ continue;
81
+ const currentHash = hashFile(filePath);
82
+ if (currentHash === storedHash) {
83
+ // File unmodified — safe to remove (falls back to package at runtime)
84
+ if (!dryRun) {
85
+ fs.unlinkSync(filePath);
86
+ }
87
+ cleaned.push(`codev/${relativePath}`);
88
+ log(chalk.red(' - (cleaned)'), `codev/${relativePath}`, chalk.dim('(unmodified, falls back to package)'));
89
+ }
90
+ else {
91
+ // File modified by user — preserve as local override
92
+ preserved.push(`codev/${relativePath}`);
93
+ log(chalk.green(' ✓ (preserved)'), `codev/${relativePath}`, chalk.dim('(user-modified, kept as override)'));
94
+ }
95
+ }
96
+ // 3. Remove .update-hashes.json (no longer needed)
97
+ if (!dryRun) {
98
+ fs.unlinkSync(hashStorePath);
99
+ }
100
+ log(chalk.red(' - (removed)'), 'codev/.update-hashes.json');
101
+ }
102
+ // Clean up legacy codev/bin directory
103
+ const legacyBinDir = path.join(targetDir, 'codev', 'bin');
104
+ if (fs.existsSync(legacyBinDir)) {
105
+ if (!dryRun) {
106
+ fs.rmSync(legacyBinDir, { recursive: true });
107
+ }
108
+ log(chalk.red(' - (removed)'), 'codev/bin/ (deprecated)');
109
+ }
110
+ return { migrated: true, cleaned, preserved };
111
+ }
112
+ /**
113
+ * Update codev — migrate config and refresh Claude-specific files.
12
114
  */
13
115
  export async function update(options = {}) {
14
116
  const { dryRun = false, force = false, agent = false } = options;
15
117
  const targetDir = process.cwd();
16
118
  const codevDir = path.join(targetDir, 'codev');
17
- // In agent mode, route human-readable output to stderr; otherwise stdout
18
119
  const log = agent ? console.error.bind(console) : console.log.bind(console);
19
120
  const result = {
20
121
  updated: [],
@@ -34,240 +135,96 @@ export async function update(options = {}) {
34
135
  }
35
136
  try {
36
137
  log('');
37
- log(chalk.bold('Updating codev templates'));
138
+ log(chalk.bold('Updating codev'));
38
139
  if (dryRun) {
39
140
  log(chalk.yellow('(dry run - no files will be changed)'));
40
141
  }
41
142
  log('');
42
- // Clean up legacy codev/bin directory (bash-based agent farm is deprecated)
43
- const legacyBinDir = path.join(codevDir, 'bin');
44
- if (fs.existsSync(legacyBinDir)) {
45
- if (!dryRun) {
46
- fs.rmSync(legacyBinDir, { recursive: true });
47
- }
48
- log(chalk.red(' - (removed)'), 'codev/bin/ (deprecated bash scripts)');
143
+ // --- A. One-time migration ---
144
+ if (needsMigration(targetDir)) {
145
+ const migration = runMigration(targetDir, dryRun, log);
146
+ result.migrated = migration.migrated;
147
+ result.cleanedFiles = migration.cleaned;
148
+ result.preservedFiles = migration.preserved;
149
+ log('');
49
150
  }
50
- // Migrate codev/config.json to af-config.json (v2.0 change)
51
- const legacyConfigPath = path.join(codevDir, 'config.json');
52
- const newConfigPath = path.join(targetDir, 'af-config.json');
53
- if (fs.existsSync(legacyConfigPath) && !fs.existsSync(newConfigPath)) {
54
- if (!dryRun) {
55
- fs.copyFileSync(legacyConfigPath, newConfigPath);
56
- fs.unlinkSync(legacyConfigPath);
57
- }
58
- log(chalk.blue(' ~ (migrated)'), 'codev/config.json → af-config.json');
151
+ else {
152
+ log(chalk.dim(' Migration already complete.'));
59
153
  }
154
+ // --- B. Claude-specific file refresh (runs every time) ---
155
+ log('');
156
+ log(chalk.bold('Refreshing Claude-specific files...'));
157
+ log('');
60
158
  const templatesDir = getTemplatesDir();
61
- const templateFiles = getTemplateFiles(templatesDir);
62
- const currentHashes = loadHashStore(targetDir);
63
- const newHashes = { ...currentHashes };
64
- // Update consult-types (with skipExisting to preserve user customizations)
65
- if (!dryRun) {
66
- const consultTypesResult = copyConsultTypes(targetDir, templatesDir, { skipExisting: true });
67
- if (consultTypesResult.copied.length > 0) {
68
- for (const file of consultTypesResult.copied) {
69
- const fullPath = `codev/consult-types/${file}`;
70
- result.newFiles.push(fullPath);
71
- log(chalk.green(' + (new)'), fullPath);
72
- }
73
- }
74
- }
75
- // Update .claude/skills/ (add new skills, preserve user customizations)
159
+ // Update .claude/skills/
76
160
  if (!dryRun) {
161
+ // Update skills — add new ones but preserve user-customized existing skills
77
162
  const skillsResult = copySkills(targetDir, templatesDir, { skipExisting: true });
78
- if (skillsResult.copied.length > 0) {
79
- for (const skill of skillsResult.copied) {
80
- const fullPath = `.claude/skills/${skill}/`;
81
- result.newFiles.push(fullPath);
82
- log(chalk.green(' + (new)'), fullPath);
83
- }
84
- }
85
- }
86
- // Update codev/roles/ (add new roles for existing projects that lack them)
87
- if (!dryRun) {
88
- const rolesResult = copyRoles(targetDir, templatesDir, { skipExisting: true });
89
- if (rolesResult.copied.length > 0) {
90
- for (const file of rolesResult.copied) {
91
- const fullPath = `codev/roles/${file}`;
92
- result.newFiles.push(fullPath);
93
- log(chalk.green(' + (new)'), fullPath);
94
- }
95
- }
96
- }
97
- // Note: protocols are handled by the main hash-based loop below
98
- // This ensures proper conflict detection for user-customized prompts
99
- for (const relativePath of templateFiles) {
100
- // Skip user data files
101
- if (isUserDataPath(relativePath)) {
102
- continue;
103
- }
104
- // Only update updatable files (protocols, roles, agents, etc.)
105
- if (!isUpdatableFile(relativePath)) {
106
- continue;
107
- }
108
- const srcPath = path.join(templatesDir, relativePath);
109
- const destPath = path.join(codevDir, relativePath);
110
- const projectRelativePath = `codev/${relativePath}`;
111
- // New file - copy it
112
- if (!fs.existsSync(destPath)) {
113
- if (!dryRun) {
114
- const destDir = path.dirname(destPath);
115
- if (!fs.existsSync(destDir)) {
116
- fs.mkdirSync(destDir, { recursive: true });
117
- }
118
- fs.copyFileSync(srcPath, destPath);
119
- newHashes[relativePath] = hashFile(destPath);
120
- }
121
- result.newFiles.push(projectRelativePath);
122
- log(chalk.green(' + (new)'), projectRelativePath);
123
- continue;
124
- }
125
- // File exists - check if it was modified by user
126
- const currentHash = hashFile(destPath);
127
- const storedHash = currentHashes[relativePath];
128
- const newHash = hashFile(srcPath);
129
- // If the template hasn't changed, skip
130
- if (currentHash === newHash) {
131
- result.skipped.push(projectRelativePath);
132
- continue;
133
- }
134
- // If force mode, overwrite everything
135
- if (force) {
136
- if (!dryRun) {
137
- fs.copyFileSync(srcPath, destPath);
138
- newHashes[relativePath] = hashFile(destPath);
139
- }
140
- result.updated.push(projectRelativePath);
141
- log(chalk.blue(' ~ (force)'), projectRelativePath);
142
- continue;
143
- }
144
- // Check if user modified the file
145
- const userModified = storedHash && currentHash !== storedHash;
146
- if (userModified) {
147
- // User modified the file - write as .codev-new and mark as conflict
148
- if (!dryRun) {
149
- fs.copyFileSync(srcPath, destPath + '.codev-new');
150
- }
151
- result.conflicts.push({
152
- file: projectRelativePath,
153
- codevNew: `${projectRelativePath}.codev-new`,
154
- reason: 'User modified file; new template version available',
163
+ for (const skill of skillsResult.copied) {
164
+ const fullPath = `.claude/skills/${skill}/`;
165
+ result.newFiles.push(fullPath);
166
+ log(chalk.green(' + (new)'), fullPath);
167
+ }
168
+ }
169
+ // Update root files (CLAUDE.md, AGENTS.md)
170
+ const projectName = path.basename(targetDir);
171
+ if (force) {
172
+ const rootResult = copyRootFiles(targetDir, templatesDir, projectName);
173
+ for (const file of rootResult.copied) {
174
+ result.updated.push(file);
175
+ log(chalk.blue(' ~ (updated)'), file);
176
+ }
177
+ }
178
+ else {
179
+ const rootResult = copyRootFiles(targetDir, templatesDir, projectName, { handleConflicts: true });
180
+ for (const file of rootResult.copied) {
181
+ result.newFiles.push(file);
182
+ log(chalk.green(' + (new)'), file);
183
+ }
184
+ for (const file of rootResult.conflicts) {
185
+ result.rootConflicts.push({
186
+ file,
187
+ codevNew: `${file}.codev-new`,
188
+ reason: 'Content differs from template',
155
189
  });
156
- log(chalk.yellow(' ! (conflict)'), projectRelativePath);
157
- log(chalk.dim(' New version saved as:'), `${projectRelativePath}.codev-new`);
158
- }
159
- else {
160
- // File unchanged by user - safe to overwrite
161
- if (!dryRun) {
162
- fs.copyFileSync(srcPath, destPath);
163
- newHashes[relativePath] = hashFile(destPath);
164
- }
165
- result.updated.push(projectRelativePath);
166
- log(chalk.blue(' ~'), projectRelativePath);
190
+ log(chalk.yellow(' ! (conflict)'), file);
191
+ log(chalk.dim(' New version saved as:'), `${file}.codev-new`);
167
192
  }
168
193
  }
169
- // Save updated hash store
170
- if (!dryRun) {
171
- saveHashStore(targetDir, newHashes);
172
- }
173
- // Handle root-level files (CLAUDE.md, AGENTS.md)
174
- const rootFiles = ['CLAUDE.md', 'AGENTS.md'];
175
- const skeletonTemplatesDir = path.join(templatesDir, 'templates');
176
- for (const fileName of rootFiles) {
177
- const srcPath = path.join(skeletonTemplatesDir, fileName);
178
- const destPath = path.join(targetDir, fileName);
179
- // Skip if source doesn't exist
180
- if (!fs.existsSync(srcPath)) {
181
- continue;
182
- }
183
- // New file - copy it (replacing {{PROJECT_NAME}} placeholder)
184
- if (!fs.existsSync(destPath)) {
185
- if (!dryRun) {
186
- const projectName = path.basename(targetDir);
187
- let content = fs.readFileSync(srcPath, 'utf-8');
188
- content = content.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
189
- fs.writeFileSync(destPath, content);
190
- }
191
- result.newFiles.push(fileName);
192
- log(chalk.green(' + (new)'), fileName);
193
- continue;
194
- }
195
- // File exists - check if template has changed
196
- const currentContent = fs.readFileSync(destPath, 'utf-8');
197
- const projectName = path.basename(targetDir);
198
- let templateContent = fs.readFileSync(srcPath, 'utf-8');
199
- templateContent = templateContent.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
200
- // If content is identical, skip
201
- if (currentContent === templateContent) {
202
- result.skipped.push(fileName);
203
- continue;
204
- }
205
- // If force mode, overwrite
206
- if (force) {
207
- if (!dryRun) {
208
- fs.writeFileSync(destPath, templateContent);
209
- }
210
- result.updated.push(fileName);
211
- log(chalk.blue(' ~ (force)'), fileName);
212
- continue;
213
- }
214
- // Content differs - save as .codev-new for merge
215
- if (!dryRun) {
216
- fs.writeFileSync(destPath + '.codev-new', templateContent);
217
- }
218
- result.rootConflicts.push({
219
- file: fileName,
220
- codevNew: `${fileName}.codev-new`,
221
- reason: 'Content differs from template',
222
- });
223
- log(chalk.yellow(' ! (conflict)'), fileName);
224
- log(chalk.dim(' New version saved as:'), `${fileName}.codev-new`);
225
- }
226
194
  // Summary
227
195
  log('');
228
196
  log(chalk.bold('Summary:'));
197
+ if (result.migrated) {
198
+ log(chalk.blue(` Migration: ${result.cleanedFiles?.length || 0} files cleaned, ${result.preservedFiles?.length || 0} preserved`));
199
+ }
229
200
  if (result.newFiles.length > 0) {
230
201
  log(chalk.green(` + ${result.newFiles.length} new files`));
231
202
  }
232
203
  if (result.updated.length > 0) {
233
204
  log(chalk.blue(` ~ ${result.updated.length} updated`));
234
205
  }
235
- if (result.skipped.length > 0) {
236
- log(chalk.dim(` - ${result.skipped.length} unchanged (skipped)`));
237
- }
238
- if (result.conflicts.length > 0) {
239
- log(chalk.yellow(` ! ${result.conflicts.length} codev/ conflicts`));
240
- }
241
206
  if (result.rootConflicts.length > 0) {
242
- log(chalk.yellow(` ! ${result.rootConflicts.length} root conflicts`));
207
+ log(chalk.yellow(` ! ${result.rootConflicts.length} conflicts`));
243
208
  }
244
- if (result.newFiles.length === 0 && result.updated.length === 0 && result.conflicts.length === 0 && result.rootConflicts.length === 0) {
245
- log(chalk.dim(' No updates available - already up to date!'));
209
+ if (!result.migrated && result.newFiles.length === 0 && result.updated.length === 0 && result.rootConflicts.length === 0) {
210
+ log(chalk.dim(' Already up to date!'));
246
211
  }
247
212
  if (dryRun) {
248
213
  log('');
249
214
  log(chalk.yellow('Dry run complete. Run without --dry-run to apply changes.'));
250
215
  return result;
251
216
  }
252
- // In agent mode, skip the interactive Claude spawn
253
217
  if (agent) {
254
218
  return result;
255
219
  }
256
- // Combine all conflicts for Claude merge (file paths are already project-relative)
257
- const allConflicts = [
258
- ...result.conflicts.map(c => c.file),
259
- ...result.rootConflicts.map(c => c.file),
260
- ];
261
- // If there are any conflicts, spawn Claude to merge
220
+ // Combine all conflicts for Claude merge
221
+ const allConflicts = result.rootConflicts.map(c => c.file);
262
222
  if (allConflicts.length > 0) {
263
223
  log('');
264
- log(chalk.cyan('═══════════════════════════════════════════════════════════'));
265
- log(chalk.cyan(' Launching Claude to merge conflicts...'));
266
- log(chalk.cyan('═══════════════════════════════════════════════════════════'));
224
+ log(chalk.cyan('Launching Claude to merge conflicts...'));
267
225
  log('');
268
226
  const fileList = allConflicts.join(', ');
269
227
  const mergePrompt = `Merge the following files from their .codev-new versions: ${fileList}. For each file, add new sections from the .codev-new version, preserve my customizations, then delete the .codev-new file when done.`;
270
- // Spawn Claude interactively with merge instructions as initial prompt
271
228
  const claude = spawn('claude', [mergePrompt], {
272
229
  stdio: 'inherit',
273
230
  cwd: targetDir,
@@ -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":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Unified configuration loader for Codev.
3
+ *
4
+ * Loads and merges config from three layers (lowest → highest priority):
5
+ * 1. Hardcoded defaults
6
+ * 2. ~/.codev/config.json (global)
7
+ * 3. .codev/config.json (project)
8
+ *
9
+ * af-config.json is no longer supported — its presence triggers a hard error
10
+ * directing the user to run `codev update` to migrate.
11
+ */
12
+ export interface CodevConfig {
13
+ shell?: {
14
+ architect?: string | string[];
15
+ builder?: string | string[];
16
+ shell?: string | string[];
17
+ };
18
+ porch?: {
19
+ checks?: Record<string, CheckOverride>;
20
+ consultation?: {
21
+ models?: string | string[];
22
+ };
23
+ };
24
+ forge?: Record<string, string | null> & {
25
+ provider?: string;
26
+ };
27
+ templates?: {
28
+ dir?: string;
29
+ };
30
+ roles?: {
31
+ dir?: string;
32
+ };
33
+ terminal?: {
34
+ backend?: 'node-pty';
35
+ };
36
+ dashboard?: {
37
+ frontend?: 'react' | 'legacy';
38
+ };
39
+ framework?: {
40
+ source?: string;
41
+ ref?: string;
42
+ type?: 'forge' | 'command';
43
+ command?: string;
44
+ };
45
+ }
46
+ export interface CheckOverride {
47
+ command?: string;
48
+ cwd?: string;
49
+ skip?: boolean;
50
+ }
51
+ /**
52
+ * Deep-merge `override` into `base`.
53
+ *
54
+ * Semantics (per spec):
55
+ * - Objects: recursively merged.
56
+ * - Arrays: replaced, not concatenated.
57
+ * - null value: deletes the key from the result.
58
+ */
59
+ export declare function deepMerge<T extends Record<string, unknown>>(base: T, override: Record<string, unknown>): T;
60
+ /**
61
+ * Resolve the project-level config path.
62
+ *
63
+ * Returns .codev/config.json if it exists, otherwise null.
64
+ * Hard error if legacy af-config.json is detected — user must run
65
+ * `codev update` to migrate.
66
+ */
67
+ export declare function resolveProjectConfigPath(workspaceRoot: string): string | null;
68
+ /**
69
+ * Load the full merged config for a workspace.
70
+ *
71
+ * Layer order (lowest → highest priority):
72
+ * 1. Hardcoded defaults
73
+ * 2. <cache>/config.json (remote framework base config)
74
+ * 3. ~/.codev/config.json (global)
75
+ * 4. .codev/config.json (project)
76
+ */
77
+ export declare function loadConfig(workspaceRoot: string): CodevConfig;
78
+ /**
79
+ * Get the default config (useful for init/adopt to write a starter config).
80
+ */
81
+ export declare function getDefaultConfig(): CodevConfig;
82
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACvC,YAAY,CAAC,EAAE;YACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC5B,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;KAC/B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0BD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CA+B1G;AAqCD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CA8B7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C"}