@cluesmith/codev 1.5.10 → 1.5.11
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/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +5 -20
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +35 -22
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +35 -21
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/servers/dashboard-server.js +5 -53
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
- package/dist/agent-farm/servers/open-server.js +2 -11
- package/dist/agent-farm/servers/open-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +2 -54
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/utils/roles.d.ts +32 -0
- package/dist/agent-farm/utils/roles.d.ts.map +1 -0
- package/dist/agent-farm/utils/roles.js +43 -0
- package/dist/agent-farm/utils/roles.js.map +1 -0
- package/dist/agent-farm/utils/server-utils.d.ts +24 -0
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -0
- package/dist/agent-farm/utils/server-utils.js +66 -0
- package/dist/agent-farm/utils/server-utils.js.map +1 -0
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +37 -157
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +26 -138
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/cli-prompts.d.ts +20 -0
- package/dist/lib/cli-prompts.d.ts.map +1 -0
- package/dist/lib/cli-prompts.js +51 -0
- package/dist/lib/cli-prompts.js.map +1 -0
- package/dist/lib/scaffold.d.ts +81 -0
- package/dist/lib/scaffold.d.ts.map +1 -0
- package/dist/lib/scaffold.js +189 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/package.json +1 -1
- package/templates/dashboard/js/activity.js +4 -130
- package/templates/dashboard/js/dialogs.js +4 -49
- package/templates/dashboard/js/files.js +2 -29
- package/templates/dashboard/js/main.js +2 -31
- package/templates/dashboard/js/tabs.js +6 -30
- package/templates/dashboard/js/utils.js +199 -0
- package/templates/open.html +8 -8
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared server utilities
|
|
3
|
+
* Extracted from dashboard-server.ts, tower-server.ts, open-server.ts
|
|
4
|
+
* to eliminate code duplication (Maintenance Run 0004)
|
|
5
|
+
*/
|
|
6
|
+
import type * as http from 'node:http';
|
|
7
|
+
/**
|
|
8
|
+
* HTML-escape a string to prevent XSS
|
|
9
|
+
*/
|
|
10
|
+
export declare function escapeHtml(str: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Parse JSON body from request with size limit
|
|
13
|
+
* @param req - HTTP incoming message
|
|
14
|
+
* @param maxSize - Maximum body size in bytes (default 1MB)
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseJsonBody(req: http.IncomingMessage, maxSize?: number): Promise<Record<string, unknown>>;
|
|
17
|
+
/**
|
|
18
|
+
* Security: Validate request origin to prevent CSRF and DNS rebinding attacks
|
|
19
|
+
* Allows only localhost and 127.0.0.1 hosts/origins
|
|
20
|
+
* @param req - HTTP incoming message
|
|
21
|
+
* @returns true if request should be allowed
|
|
22
|
+
*/
|
|
23
|
+
export declare function isRequestAllowed(req: http.IncomingMessage): boolean;
|
|
24
|
+
//# sourceMappingURL=server-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/server-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,SAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBhH;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAgBnE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared server utilities
|
|
3
|
+
* Extracted from dashboard-server.ts, tower-server.ts, open-server.ts
|
|
4
|
+
* to eliminate code duplication (Maintenance Run 0004)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* HTML-escape a string to prevent XSS
|
|
8
|
+
*/
|
|
9
|
+
export function escapeHtml(str) {
|
|
10
|
+
return str
|
|
11
|
+
.replace(/&/g, '&')
|
|
12
|
+
.replace(/</g, '<')
|
|
13
|
+
.replace(/>/g, '>')
|
|
14
|
+
.replace(/"/g, '"')
|
|
15
|
+
.replace(/'/g, ''');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse JSON body from request with size limit
|
|
19
|
+
* @param req - HTTP incoming message
|
|
20
|
+
* @param maxSize - Maximum body size in bytes (default 1MB)
|
|
21
|
+
*/
|
|
22
|
+
export function parseJsonBody(req, maxSize = 1024 * 1024) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
let body = '';
|
|
25
|
+
let size = 0;
|
|
26
|
+
req.on('data', (chunk) => {
|
|
27
|
+
size += chunk.length;
|
|
28
|
+
if (size > maxSize) {
|
|
29
|
+
reject(new Error('Request body too large'));
|
|
30
|
+
req.destroy();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
body += chunk.toString();
|
|
34
|
+
});
|
|
35
|
+
req.on('end', () => {
|
|
36
|
+
try {
|
|
37
|
+
resolve(body ? JSON.parse(body) : {});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
reject(new Error('Invalid JSON'));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
req.on('error', reject);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Security: Validate request origin to prevent CSRF and DNS rebinding attacks
|
|
48
|
+
* Allows only localhost and 127.0.0.1 hosts/origins
|
|
49
|
+
* @param req - HTTP incoming message
|
|
50
|
+
* @returns true if request should be allowed
|
|
51
|
+
*/
|
|
52
|
+
export function isRequestAllowed(req) {
|
|
53
|
+
const host = req.headers.host;
|
|
54
|
+
const origin = req.headers.origin;
|
|
55
|
+
// Host check (prevent DNS rebinding attacks)
|
|
56
|
+
if (host && !host.startsWith('localhost') && !host.startsWith('127.0.0.1')) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
// Origin check (prevent CSRF from external sites)
|
|
60
|
+
// Note: CLI tools/curl might not send Origin, so we only block if Origin is present and invalid
|
|
61
|
+
if (origin && !origin.startsWith('http://localhost') && !origin.startsWith('http://127.0.0.1')) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=server-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/server-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAyB,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IAC5E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC5C,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAyB;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAElC,6CAA6C;IAC7C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kDAAkD;IAClD,gGAAgG;IAChG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAoCD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmIrE"}
|
package/dist/commands/adopt.js
CHANGED
|
@@ -6,32 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'node:fs';
|
|
8
8
|
import * as path from 'node:path';
|
|
9
|
-
import * as readline from 'node:readline';
|
|
10
9
|
import { spawn } from 'node:child_process';
|
|
11
10
|
import chalk from 'chalk';
|
|
12
11
|
import { getTemplatesDir } from '../lib/templates.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
async function confirm(question, defaultYes = true) {
|
|
17
|
-
const rl = readline.createInterface({
|
|
18
|
-
input: process.stdin,
|
|
19
|
-
output: process.stdout,
|
|
20
|
-
});
|
|
21
|
-
return new Promise((resolve) => {
|
|
22
|
-
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
23
|
-
rl.question(`${question} ${hint}: `, (answer) => {
|
|
24
|
-
rl.close();
|
|
25
|
-
const normalized = answer.trim().toLowerCase();
|
|
26
|
-
if (normalized === '') {
|
|
27
|
-
resolve(defaultYes);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
resolve(normalized === 'y' || normalized === 'yes');
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
}
|
|
12
|
+
import { confirm } from '../lib/cli-prompts.js';
|
|
13
|
+
import { createUserDirs, copyProjectlist, copyProjectlistArchive, copyResourceTemplates, copyRootFiles, updateGitignore, } from '../lib/scaffold.js';
|
|
14
|
+
// confirm imported from ../lib/cli-prompts.js
|
|
35
15
|
/**
|
|
36
16
|
* Detect conflicts with existing files
|
|
37
17
|
*/
|
|
@@ -85,157 +65,57 @@ export async function adopt(options = {}) {
|
|
|
85
65
|
process.exit(0);
|
|
86
66
|
}
|
|
87
67
|
}
|
|
88
|
-
// Create minimal codev structure
|
|
89
|
-
// Framework files (protocols, roles) are provided by embedded skeleton at runtime
|
|
68
|
+
// Create minimal codev structure using shared scaffold utilities
|
|
90
69
|
let fileCount = 0;
|
|
91
70
|
let skippedCount = 0;
|
|
92
71
|
console.log(chalk.dim('Creating minimal codev structure...'));
|
|
93
72
|
console.log(chalk.dim('(Framework files provided by @cluesmith/codev at runtime)'));
|
|
94
73
|
console.log('');
|
|
95
|
-
// Create user data directories
|
|
96
|
-
const userDirs = ['specs', 'plans', 'reviews'];
|
|
97
|
-
for (const dir of userDirs) {
|
|
98
|
-
const dirPath = path.join(targetDir, 'codev', dir);
|
|
99
|
-
if (!fs.existsSync(dirPath)) {
|
|
100
|
-
fs.mkdirSync(dirPath, { recursive: true });
|
|
101
|
-
// Create .gitkeep to preserve empty directory
|
|
102
|
-
fs.writeFileSync(path.join(dirPath, '.gitkeep'), '');
|
|
103
|
-
console.log(chalk.green(' +'), `codev/${dir}/`);
|
|
104
|
-
fileCount++;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
74
|
// Get skeleton directory for templates
|
|
108
75
|
const skeletonDir = getTemplatesDir();
|
|
109
|
-
// Create
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (fs.existsSync(projectlistTemplatePath)) {
|
|
114
|
-
fs.copyFileSync(projectlistTemplatePath, projectlistPath);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
// Fallback to inline template if skeleton template not found
|
|
118
|
-
const projectlistContent = `# Project List
|
|
119
|
-
|
|
120
|
-
Track all projects here. See codev documentation for status values.
|
|
121
|
-
|
|
122
|
-
\`\`\`yaml
|
|
123
|
-
projects:
|
|
124
|
-
- id: "0001"
|
|
125
|
-
title: "Example Project"
|
|
126
|
-
summary: "Brief description"
|
|
127
|
-
status: conceived
|
|
128
|
-
priority: medium
|
|
129
|
-
files:
|
|
130
|
-
spec: null
|
|
131
|
-
plan: null
|
|
132
|
-
review: null
|
|
133
|
-
dependencies: []
|
|
134
|
-
tags: []
|
|
135
|
-
notes: "Replace with your first project"
|
|
136
|
-
\`\`\`
|
|
137
|
-
`;
|
|
138
|
-
fs.writeFileSync(projectlistPath, projectlistContent);
|
|
139
|
-
}
|
|
140
|
-
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
76
|
+
// Create user data directories (specs, plans, reviews) - skip existing
|
|
77
|
+
const dirsResult = createUserDirs(targetDir, { skipExisting: true });
|
|
78
|
+
for (const dir of dirsResult.created) {
|
|
79
|
+
console.log(chalk.green(' +'), `codev/${dir}/`);
|
|
141
80
|
fileCount++;
|
|
142
81
|
}
|
|
143
|
-
// Create projectlist
|
|
144
|
-
const
|
|
145
|
-
if (
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
fs.copyFileSync(projectlistArchiveTemplatePath, projectlistArchivePath);
|
|
149
|
-
console.log(chalk.green(' +'), 'codev/projectlist-archive.md');
|
|
150
|
-
fileCount++;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
// Create resources directory and copy templates if they don't exist
|
|
154
|
-
const resourcesDir = path.join(targetDir, 'codev', 'resources');
|
|
155
|
-
if (!fs.existsSync(resourcesDir)) {
|
|
156
|
-
fs.mkdirSync(resourcesDir, { recursive: true });
|
|
157
|
-
}
|
|
158
|
-
// Copy lessons-learned.md template if it doesn't exist
|
|
159
|
-
const lessonsPath = path.join(resourcesDir, 'lessons-learned.md');
|
|
160
|
-
if (!fs.existsSync(lessonsPath)) {
|
|
161
|
-
const lessonsTemplatePath = path.join(skeletonDir, 'templates', 'lessons-learned.md');
|
|
162
|
-
if (fs.existsSync(lessonsTemplatePath)) {
|
|
163
|
-
fs.copyFileSync(lessonsTemplatePath, lessonsPath);
|
|
164
|
-
console.log(chalk.green(' +'), 'codev/resources/lessons-learned.md');
|
|
165
|
-
fileCount++;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// Copy arch.md template if it doesn't exist
|
|
169
|
-
const archPath = path.join(resourcesDir, 'arch.md');
|
|
170
|
-
if (!fs.existsSync(archPath)) {
|
|
171
|
-
const archTemplatePath = path.join(skeletonDir, 'templates', 'arch.md');
|
|
172
|
-
if (fs.existsSync(archTemplatePath)) {
|
|
173
|
-
fs.copyFileSync(archTemplatePath, archPath);
|
|
174
|
-
console.log(chalk.green(' +'), 'codev/resources/arch.md');
|
|
175
|
-
fileCount++;
|
|
176
|
-
}
|
|
82
|
+
// Create projectlist.md - skip if exists
|
|
83
|
+
const projectlistResult = copyProjectlist(targetDir, skeletonDir, { skipExisting: true });
|
|
84
|
+
if (projectlistResult.copied) {
|
|
85
|
+
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
86
|
+
fileCount++;
|
|
177
87
|
}
|
|
178
|
-
// Create
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const agentsMdDest = path.join(targetDir, 'AGENTS.md');
|
|
183
|
-
const rootConflicts = [];
|
|
184
|
-
// CLAUDE.md
|
|
185
|
-
if (!fs.existsSync(claudeMdDest) && fs.existsSync(claudeMdSrc)) {
|
|
186
|
-
const content = fs.readFileSync(claudeMdSrc, 'utf-8')
|
|
187
|
-
.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
|
|
188
|
-
fs.writeFileSync(claudeMdDest, content);
|
|
189
|
-
console.log(chalk.green(' +'), 'CLAUDE.md');
|
|
88
|
+
// Create projectlist-archive.md - skip if exists
|
|
89
|
+
const archiveResult = copyProjectlistArchive(targetDir, skeletonDir, { skipExisting: true });
|
|
90
|
+
if (archiveResult.copied) {
|
|
91
|
+
console.log(chalk.green(' +'), 'codev/projectlist-archive.md');
|
|
190
92
|
fileCount++;
|
|
191
93
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
console.log(chalk.yellow(' !'), 'CLAUDE.md', chalk.dim('(conflict - .codev-new created)'));
|
|
198
|
-
rootConflicts.push('CLAUDE.md');
|
|
199
|
-
skippedCount++;
|
|
94
|
+
// Copy resource templates - skip existing
|
|
95
|
+
const resourcesResult = copyResourceTemplates(targetDir, skeletonDir, { skipExisting: true });
|
|
96
|
+
for (const file of resourcesResult.copied) {
|
|
97
|
+
console.log(chalk.green(' +'), `codev/resources/${file}`);
|
|
98
|
+
fileCount++;
|
|
200
99
|
}
|
|
201
|
-
//
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
fs.writeFileSync(agentsMdDest, content);
|
|
206
|
-
console.log(chalk.green(' +'), 'AGENTS.md');
|
|
100
|
+
// Copy root files with conflict handling
|
|
101
|
+
const rootResult = copyRootFiles(targetDir, skeletonDir, projectName, { handleConflicts: true });
|
|
102
|
+
for (const file of rootResult.copied) {
|
|
103
|
+
console.log(chalk.green(' +'), file);
|
|
207
104
|
fileCount++;
|
|
208
105
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const content = fs.readFileSync(agentsMdSrc, 'utf-8')
|
|
212
|
-
.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
|
|
213
|
-
fs.writeFileSync(agentsMdDest + '.codev-new', content);
|
|
214
|
-
console.log(chalk.yellow(' !'), 'AGENTS.md', chalk.dim('(conflict - .codev-new created)'));
|
|
215
|
-
rootConflicts.push('AGENTS.md');
|
|
106
|
+
for (const file of rootResult.conflicts) {
|
|
107
|
+
console.log(chalk.yellow(' !'), file, chalk.dim('(conflict - .codev-new created)'));
|
|
216
108
|
skippedCount++;
|
|
217
109
|
}
|
|
218
|
-
// Update .gitignore
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
# Codev
|
|
222
|
-
.agent-farm/
|
|
223
|
-
.consult/
|
|
224
|
-
codev/.update-hashes.json
|
|
225
|
-
.builders/
|
|
226
|
-
`;
|
|
227
|
-
if (fs.existsSync(gitignorePath)) {
|
|
228
|
-
const existing = fs.readFileSync(gitignorePath, 'utf-8');
|
|
229
|
-
if (!existing.includes('.agent-farm/')) {
|
|
230
|
-
fs.appendFileSync(gitignorePath, codevGitignoreEntries);
|
|
231
|
-
console.log(chalk.green(' ~'), '.gitignore', chalk.dim('(updated)'));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
fs.writeFileSync(gitignorePath, codevGitignoreEntries.trim() + '\n');
|
|
110
|
+
// Update or create .gitignore
|
|
111
|
+
const gitResult = updateGitignore(targetDir);
|
|
112
|
+
if (gitResult.created) {
|
|
236
113
|
console.log(chalk.green(' +'), '.gitignore');
|
|
237
114
|
fileCount++;
|
|
238
115
|
}
|
|
116
|
+
else if (gitResult.updated) {
|
|
117
|
+
console.log(chalk.green(' ~'), '.gitignore', chalk.dim('(updated)'));
|
|
118
|
+
}
|
|
239
119
|
console.log('');
|
|
240
120
|
console.log(chalk.green.bold('✓'), `Created ${fileCount} files`);
|
|
241
121
|
if (skippedCount > 0) {
|
|
@@ -249,13 +129,13 @@ codev/.update-hashes.json
|
|
|
249
129
|
console.log('');
|
|
250
130
|
console.log(chalk.dim('For more info, see: https://github.com/cluesmith/codev'));
|
|
251
131
|
// If there are root conflicts (CLAUDE.md, AGENTS.md), spawn Claude to merge
|
|
252
|
-
if (
|
|
132
|
+
if (rootResult.conflicts.length > 0) {
|
|
253
133
|
console.log('');
|
|
254
134
|
console.log(chalk.cyan('═══════════════════════════════════════════════════════════'));
|
|
255
135
|
console.log(chalk.cyan(' Launching Claude to merge conflicts...'));
|
|
256
136
|
console.log(chalk.cyan('═══════════════════════════════════════════════════════════'));
|
|
257
137
|
console.log('');
|
|
258
|
-
const mergePrompt = `Merge ${
|
|
138
|
+
const mergePrompt = `Merge ${rootResult.conflicts.join(' and ')} from the .codev-new versions. Add new sections from the .codev-new files, preserve my customizations, then delete the .codev-new files when done.`;
|
|
259
139
|
// Spawn Claude interactively with merge instructions as initial prompt
|
|
260
140
|
const claude = spawn('claude', [mergePrompt], {
|
|
261
141
|
stdio: 'inherit',
|
|
@@ -265,7 +145,7 @@ codev/.update-hashes.json
|
|
|
265
145
|
console.error(chalk.red('Failed to launch Claude:'), err.message);
|
|
266
146
|
console.log('');
|
|
267
147
|
console.log('Please merge the conflicts manually:');
|
|
268
|
-
for (const file of
|
|
148
|
+
for (const file of rootResult.conflicts) {
|
|
269
149
|
console.log(chalk.dim(` ${file} ← ${file}.codev-new`));
|
|
270
150
|
}
|
|
271
151
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAID;;GAEG;AACH,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GzF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,47 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'node:fs';
|
|
8
8
|
import * as path from 'node:path';
|
|
9
|
-
import * as readline from 'node:readline';
|
|
10
9
|
import chalk from 'chalk';
|
|
11
10
|
import { getTemplatesDir } from '../lib/templates.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async function prompt(question, defaultValue) {
|
|
16
|
-
const rl = readline.createInterface({
|
|
17
|
-
input: process.stdin,
|
|
18
|
-
output: process.stdout,
|
|
19
|
-
});
|
|
20
|
-
return new Promise((resolve) => {
|
|
21
|
-
const promptText = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
|
|
22
|
-
rl.question(promptText, (answer) => {
|
|
23
|
-
rl.close();
|
|
24
|
-
resolve(answer.trim() || defaultValue || '');
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Prompt for yes/no confirmation
|
|
30
|
-
*/
|
|
31
|
-
async function confirm(question, defaultYes = true) {
|
|
32
|
-
const rl = readline.createInterface({
|
|
33
|
-
input: process.stdin,
|
|
34
|
-
output: process.stdout,
|
|
35
|
-
});
|
|
36
|
-
return new Promise((resolve) => {
|
|
37
|
-
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
38
|
-
rl.question(`${question} ${hint}: `, (answer) => {
|
|
39
|
-
rl.close();
|
|
40
|
-
const normalized = answer.trim().toLowerCase();
|
|
41
|
-
if (normalized === '') {
|
|
42
|
-
resolve(defaultYes);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
resolve(normalized === 'y' || normalized === 'yes');
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
11
|
+
import { prompt, confirm } from '../lib/cli-prompts.js';
|
|
12
|
+
import { createUserDirs, copyProjectlist, copyProjectlistArchive, copyResourceTemplates, copyRootFiles, createGitignore, } from '../lib/scaffold.js';
|
|
13
|
+
// prompt and confirm imported from ../lib/cli-prompts.js
|
|
50
14
|
/**
|
|
51
15
|
* Initialize a new codev project
|
|
52
16
|
*/
|
|
@@ -80,121 +44,45 @@ export async function init(projectName, options = {}) {
|
|
|
80
44
|
}
|
|
81
45
|
// Create directory
|
|
82
46
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
83
|
-
// Create minimal codev structure
|
|
84
|
-
// Framework files (protocols, roles) are provided by embedded skeleton at runtime
|
|
47
|
+
// Create minimal codev structure using shared scaffold utilities
|
|
85
48
|
let fileCount = 0;
|
|
86
49
|
console.log(chalk.dim('Creating minimal codev structure...'));
|
|
87
50
|
console.log(chalk.dim('(Framework files provided by @cluesmith/codev at runtime)'));
|
|
88
51
|
console.log('');
|
|
89
|
-
// Create user data directories
|
|
90
|
-
const userDirs = ['specs', 'plans', 'reviews'];
|
|
91
|
-
for (const dir of userDirs) {
|
|
92
|
-
const dirPath = path.join(targetDir, 'codev', dir);
|
|
93
|
-
fs.mkdirSync(dirPath, { recursive: true });
|
|
94
|
-
// Create .gitkeep to preserve empty directory
|
|
95
|
-
fs.writeFileSync(path.join(dirPath, '.gitkeep'), '');
|
|
96
|
-
console.log(chalk.green(' +'), `codev/${dir}/`);
|
|
97
|
-
fileCount++;
|
|
98
|
-
}
|
|
99
52
|
// Get skeleton directory for templates
|
|
100
53
|
const skeletonDir = getTemplatesDir();
|
|
101
|
-
// Create
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
fs.copyFileSync(projectlistTemplatePath, projectlistPath);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// Fallback to inline template if skeleton template not found
|
|
109
|
-
const projectlistContent = `# Project List
|
|
110
|
-
|
|
111
|
-
Track all projects here. See codev documentation for status values.
|
|
112
|
-
|
|
113
|
-
\`\`\`yaml
|
|
114
|
-
projects:
|
|
115
|
-
- id: "0001"
|
|
116
|
-
title: "Example Project"
|
|
117
|
-
summary: "Brief description"
|
|
118
|
-
status: conceived
|
|
119
|
-
priority: medium
|
|
120
|
-
files:
|
|
121
|
-
spec: null
|
|
122
|
-
plan: null
|
|
123
|
-
review: null
|
|
124
|
-
dependencies: []
|
|
125
|
-
tags: []
|
|
126
|
-
notes: "Replace with your first project"
|
|
127
|
-
\`\`\`
|
|
128
|
-
`;
|
|
129
|
-
fs.writeFileSync(projectlistPath, projectlistContent);
|
|
130
|
-
}
|
|
131
|
-
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
132
|
-
fileCount++;
|
|
133
|
-
// Create projectlist-archive.md from skeleton template
|
|
134
|
-
const projectlistArchivePath = path.join(targetDir, 'codev', 'projectlist-archive.md');
|
|
135
|
-
const projectlistArchiveTemplatePath = path.join(skeletonDir, 'templates', 'projectlist-archive.md');
|
|
136
|
-
if (fs.existsSync(projectlistArchiveTemplatePath)) {
|
|
137
|
-
fs.copyFileSync(projectlistArchiveTemplatePath, projectlistArchivePath);
|
|
138
|
-
console.log(chalk.green(' +'), 'codev/projectlist-archive.md');
|
|
54
|
+
// Create user data directories (specs, plans, reviews)
|
|
55
|
+
const dirsResult = createUserDirs(targetDir);
|
|
56
|
+
for (const dir of dirsResult.created) {
|
|
57
|
+
console.log(chalk.green(' +'), `codev/${dir}/`);
|
|
139
58
|
fileCount++;
|
|
140
59
|
}
|
|
141
|
-
// Create
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
// Copy lessons-learned.md template
|
|
147
|
-
const lessonsPath = path.join(resourcesDir, 'lessons-learned.md');
|
|
148
|
-
const lessonsTemplatePath = path.join(skeletonDir, 'templates', 'lessons-learned.md');
|
|
149
|
-
if (fs.existsSync(lessonsTemplatePath)) {
|
|
150
|
-
fs.copyFileSync(lessonsTemplatePath, lessonsPath);
|
|
151
|
-
console.log(chalk.green(' +'), 'codev/resources/lessons-learned.md');
|
|
60
|
+
// Create projectlist.md
|
|
61
|
+
const projectlistResult = copyProjectlist(targetDir, skeletonDir);
|
|
62
|
+
if (projectlistResult.copied) {
|
|
63
|
+
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
152
64
|
fileCount++;
|
|
153
65
|
}
|
|
154
|
-
//
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
fs.copyFileSync(archTemplatePath, archPath);
|
|
159
|
-
console.log(chalk.green(' +'), 'codev/resources/arch.md');
|
|
66
|
+
// Create projectlist-archive.md
|
|
67
|
+
const archiveResult = copyProjectlistArchive(targetDir, skeletonDir);
|
|
68
|
+
if (archiveResult.copied) {
|
|
69
|
+
console.log(chalk.green(' +'), 'codev/projectlist-archive.md');
|
|
160
70
|
fileCount++;
|
|
161
71
|
}
|
|
162
|
-
//
|
|
163
|
-
const
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
const content = fs.readFileSync(claudeMdSrc, 'utf-8')
|
|
167
|
-
.replace(/\{\{PROJECT_NAME\}\}/g, projectBaseName);
|
|
168
|
-
fs.writeFileSync(path.join(targetDir, 'CLAUDE.md'), content);
|
|
169
|
-
console.log(chalk.green(' +'), 'CLAUDE.md');
|
|
72
|
+
// Copy resource templates (lessons-learned.md, arch.md)
|
|
73
|
+
const resourcesResult = copyResourceTemplates(targetDir, skeletonDir);
|
|
74
|
+
for (const file of resourcesResult.copied) {
|
|
75
|
+
console.log(chalk.green(' +'), `codev/resources/${file}`);
|
|
170
76
|
fileCount++;
|
|
171
77
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
console.log(chalk.green(' +'), 'AGENTS.md');
|
|
78
|
+
// Copy root files (CLAUDE.md, AGENTS.md)
|
|
79
|
+
const rootResult = copyRootFiles(targetDir, skeletonDir, projectBaseName);
|
|
80
|
+
for (const file of rootResult.copied) {
|
|
81
|
+
console.log(chalk.green(' +'), file);
|
|
177
82
|
fileCount++;
|
|
178
83
|
}
|
|
179
84
|
// Create .gitignore
|
|
180
|
-
|
|
181
|
-
.agent-farm/
|
|
182
|
-
.consult/
|
|
183
|
-
codev/.update-hashes.json
|
|
184
|
-
.builders/
|
|
185
|
-
|
|
186
|
-
# Dependencies
|
|
187
|
-
node_modules/
|
|
188
|
-
|
|
189
|
-
# Build output
|
|
190
|
-
dist/
|
|
191
|
-
|
|
192
|
-
# OS files
|
|
193
|
-
.DS_Store
|
|
194
|
-
*.swp
|
|
195
|
-
*.swo
|
|
196
|
-
`;
|
|
197
|
-
fs.writeFileSync(path.join(targetDir, '.gitignore'), gitignoreContent);
|
|
85
|
+
createGitignore(targetDir);
|
|
198
86
|
console.log(chalk.green(' +'), '.gitignore');
|
|
199
87
|
fileCount++;
|
|
200
88
|
// Initialize git if requested
|
|
@@ -204,7 +92,7 @@ dist/
|
|
|
204
92
|
execSync('git init', { cwd: targetDir, stdio: 'pipe' });
|
|
205
93
|
console.log(chalk.green(' ✓'), 'Git repository initialized');
|
|
206
94
|
}
|
|
207
|
-
catch
|
|
95
|
+
catch {
|
|
208
96
|
console.log(chalk.yellow(' ⚠'), 'Failed to initialize git repository');
|
|
209
97
|
}
|
|
210
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|