@cluesmith/codev 1.1.0 → 1.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/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +19 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +18 -1
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.d.ts +16 -0
- package/dist/agent-farm/commands/consult.d.ts.map +1 -0
- package/dist/agent-farm/commands/consult.js +51 -0
- package/dist/agent-farm/commands/consult.js.map +1 -0
- package/dist/agent-farm/commands/open.js +6 -6
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +51 -42
- 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 +9 -14
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/util.js +2 -2
- package/dist/agent-farm/commands/util.js.map +1 -1
- package/dist/agent-farm/db/errors.d.ts +4 -0
- package/dist/agent-farm/db/errors.d.ts.map +1 -1
- package/dist/agent-farm/db/errors.js +8 -0
- package/dist/agent-farm/db/errors.js.map +1 -1
- package/dist/agent-farm/servers/dashboard-server.js +125 -71
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
- package/dist/agent-farm/servers/open-server.d.ts +9 -0
- package/dist/agent-farm/servers/open-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/{annotate-server.js → open-server.js} +17 -15
- package/dist/agent-farm/servers/open-server.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +4 -7
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +5 -0
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +17 -0
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +1 -1
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +13 -7
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/port-registry.d.ts +1 -1
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -1
- package/dist/agent-farm/utils/port-registry.js +1 -1
- package/dist/agent-farm/utils/port-registry.js.map +1 -1
- package/dist/agent-farm/utils/shell.d.ts +19 -0
- package/dist/agent-farm/utils/shell.d.ts.map +1 -1
- package/dist/agent-farm/utils/shell.js +28 -0
- package/dist/agent-farm/utils/shell.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -0
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +31 -25
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +3 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +128 -54
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +88 -36
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/eject.d.ts +18 -0
- package/dist/commands/eject.d.ts.map +1 -0
- package/dist/commands/eject.js +149 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/import.d.ts +16 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +278 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -27
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/projectlist-parser.d.ts +70 -0
- package/dist/lib/projectlist-parser.d.ts.map +1 -0
- package/dist/lib/projectlist-parser.js +200 -0
- package/dist/lib/projectlist-parser.js.map +1 -0
- package/dist/lib/skeleton.d.ts +41 -0
- package/dist/lib/skeleton.d.ts.map +1 -0
- package/dist/lib/skeleton.js +110 -0
- package/dist/lib/skeleton.js.map +1 -0
- package/dist/lib/templates.d.ts +2 -1
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +11 -10
- package/dist/lib/templates.js.map +1 -1
- package/package.json +5 -4
- package/{templates → skeleton}/DEPENDENCIES.md +3 -48
- package/skeleton/bin/agent-farm +7 -0
- package/skeleton/docs/commands/agent-farm.md +469 -0
- package/skeleton/docs/commands/codev.md +253 -0
- package/skeleton/docs/commands/consult.md +286 -0
- package/skeleton/docs/commands/overview.md +108 -0
- package/skeleton/maintain/.gitkeep +2 -0
- package/{templates → skeleton}/protocols/experiment/protocol.md +2 -2
- package/skeleton/protocols/maintain/protocol.md +502 -0
- package/skeleton/protocols/maintain/templates/maintenance-run.md +64 -0
- package/{templates → skeleton}/protocols/spider/protocol.md +9 -9
- package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/plan.md +22 -1
- package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/spec.md +30 -1
- package/skeleton/protocols/tick/protocol.md +277 -0
- package/skeleton/resources/lessons-learned.md +30 -0
- package/skeleton/resources/workflow-reference.md +242 -0
- package/skeleton/roles/architect.md +283 -0
- package/{templates → skeleton}/roles/builder.md +2 -0
- package/skeleton/roles/review-types/impl-review.md +56 -0
- package/skeleton/roles/review-types/integration-review.md +68 -0
- package/skeleton/roles/review-types/plan-review.md +59 -0
- package/skeleton/roles/review-types/pr-ready.md +72 -0
- package/skeleton/roles/review-types/spec-review.md +55 -0
- package/skeleton/templates/lessons-learned.md +28 -0
- package/{templates → skeleton}/templates/projectlist.md +17 -16
- package/dist/agent-farm/servers/annotate-server.d.ts +0 -9
- package/dist/agent-farm/servers/annotate-server.d.ts.map +0 -1
- package/dist/agent-farm/servers/annotate-server.js.map +0 -1
- package/templates/agents/architecture-documenter.md +0 -189
- package/templates/agents/codev-updater.md +0 -276
- package/templates/agents/spider-protocol-updater.md +0 -118
- package/templates/annotate.html +0 -903
- package/templates/bin/agent-farm +0 -18
- package/templates/bin/annotate-server.js +0 -140
- package/templates/dashboard-split.html +0 -1679
- package/templates/dashboard.html +0 -149
- package/templates/protocols/maintain/protocol.md +0 -235
- package/templates/protocols/spider/templates/plan.md +0 -169
- package/templates/protocols/spider/templates/review.md +0 -207
- package/templates/protocols/spider/templates/spec.md +0 -140
- package/templates/protocols/spider-solo/protocol.md +0 -619
- package/templates/protocols/tick/protocol.md +0 -250
- package/templates/roles/architect.md +0 -230
- package/templates/tower.html +0 -1032
- /package/{templates/AGENTS.md → skeleton/AGENTS.md.template} +0 -0
- /package/{templates/CLAUDE.md → skeleton/CLAUDE.md.template} +0 -0
- /package/{templates → skeleton}/bin/codev-doctor +0 -0
- /package/{templates → skeleton}/builders.md +0 -0
- /package/{templates → skeleton}/config.json +0 -0
- /package/{templates → skeleton}/plans/.gitkeep +0 -0
- /package/{templates → skeleton}/protocols/experiment/templates/notes.md +0 -0
- /package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/review.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/plan.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/review.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/spec.md +0 -0
- /package/{templates → skeleton}/reviews/.gitkeep +0 -0
- /package/{templates → skeleton}/roles/consultant.md +0 -0
- /package/{templates → skeleton}/specs/.gitkeep +0 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codev import - AI-assisted protocol import from other codev projects
|
|
3
|
+
*
|
|
4
|
+
* Fetches codev/ directory from another project (local or GitHub) and
|
|
5
|
+
* spawns an interactive Claude session to analyze differences and
|
|
6
|
+
* recommend imports.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import * as os from 'node:os';
|
|
11
|
+
import { spawn, execSync } from 'node:child_process';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { findProjectRoot } from '../lib/skeleton.js';
|
|
14
|
+
/**
|
|
15
|
+
* Parse a source argument into its type and path
|
|
16
|
+
*/
|
|
17
|
+
function parseSource(source) {
|
|
18
|
+
// GitHub URL patterns:
|
|
19
|
+
// - github:owner/repo
|
|
20
|
+
// - https://github.com/owner/repo
|
|
21
|
+
// - git@github.com:owner/repo.git
|
|
22
|
+
if (source.startsWith('github:')) {
|
|
23
|
+
const repo = source.slice('github:'.length);
|
|
24
|
+
return { type: 'github', path: repo, repo };
|
|
25
|
+
}
|
|
26
|
+
if (source.includes('github.com')) {
|
|
27
|
+
// Extract owner/repo from URL
|
|
28
|
+
// Regex captures owner/repo including dots (e.g., vercel/next.js, owner/repo.name)
|
|
29
|
+
const match = source.match(/github\.com[/:]([\w.-]+\/[\w.-]+)/);
|
|
30
|
+
if (match) {
|
|
31
|
+
const repo = match[1].replace(/\.git$/, '');
|
|
32
|
+
return { type: 'github', path: repo, repo };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Treat as local path
|
|
36
|
+
return { type: 'local', path: source };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch codev directory from GitHub
|
|
40
|
+
*/
|
|
41
|
+
async function fetchFromGitHub(repo, tempDir) {
|
|
42
|
+
console.log(chalk.dim(`Fetching from GitHub: ${repo}...`));
|
|
43
|
+
// Clone with depth 1 to get only latest
|
|
44
|
+
const cloneUrl = `https://github.com/${repo}.git`;
|
|
45
|
+
try {
|
|
46
|
+
execSync(`git clone --depth 1 "${cloneUrl}" "${tempDir}"`, {
|
|
47
|
+
stdio: 'pipe',
|
|
48
|
+
encoding: 'utf-8',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new Error(`Failed to clone ${repo}: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
|
+
}
|
|
54
|
+
const codevDir = path.join(tempDir, 'codev');
|
|
55
|
+
if (!fs.existsSync(codevDir)) {
|
|
56
|
+
throw new Error(`Repository ${repo} does not have a codev/ directory`);
|
|
57
|
+
}
|
|
58
|
+
return codevDir;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Read relevant codev files for comparison
|
|
62
|
+
*/
|
|
63
|
+
function readCodevDirectory(dir) {
|
|
64
|
+
const files = new Map();
|
|
65
|
+
// Directories to include in comparison
|
|
66
|
+
const includeDirs = ['protocols', 'resources', 'roles'];
|
|
67
|
+
function walkDir(currentPath, relativePath) {
|
|
68
|
+
if (!fs.existsSync(currentPath))
|
|
69
|
+
return;
|
|
70
|
+
const entries = fs.readdirSync(currentPath, { withFileTypes: true });
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
73
|
+
const relPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
74
|
+
if (entry.isDirectory()) {
|
|
75
|
+
walkDir(fullPath, relPath);
|
|
76
|
+
}
|
|
77
|
+
else if (entry.name.endsWith('.md')) {
|
|
78
|
+
try {
|
|
79
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
80
|
+
files.set(relPath, content);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Skip unreadable files
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const subdir of includeDirs) {
|
|
89
|
+
walkDir(path.join(dir, subdir), subdir);
|
|
90
|
+
}
|
|
91
|
+
return files;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format files map for Claude context
|
|
95
|
+
*/
|
|
96
|
+
function formatFilesForContext(files, label) {
|
|
97
|
+
let output = `## ${label}\n\n`;
|
|
98
|
+
if (files.size === 0) {
|
|
99
|
+
output += '(No codev files found)\n';
|
|
100
|
+
return output;
|
|
101
|
+
}
|
|
102
|
+
for (const [filePath, content] of files) {
|
|
103
|
+
output += `### ${filePath}\n\n`;
|
|
104
|
+
output += '```markdown\n';
|
|
105
|
+
// Truncate very long files
|
|
106
|
+
if (content.length > 10000) {
|
|
107
|
+
output += content.substring(0, 10000);
|
|
108
|
+
output += '\n\n... (truncated, ' + content.length + ' chars total)\n';
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
output += content;
|
|
112
|
+
}
|
|
113
|
+
output += '\n```\n\n';
|
|
114
|
+
}
|
|
115
|
+
return output;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Build the prompt for Claude
|
|
119
|
+
*/
|
|
120
|
+
function buildImportPrompt(sourceFiles, targetFiles, sourceLabel) {
|
|
121
|
+
return `You are helping import protocol improvements from another codev project.
|
|
122
|
+
|
|
123
|
+
The user wants to import improvements from "${sourceLabel}" into their local codev installation.
|
|
124
|
+
|
|
125
|
+
${formatFilesForContext(sourceFiles, 'SOURCE (from ' + sourceLabel + ')')}
|
|
126
|
+
|
|
127
|
+
${formatFilesForContext(targetFiles, 'TARGET (local codev/)')}
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Your Task
|
|
132
|
+
|
|
133
|
+
Analyze the differences between SOURCE and TARGET and help the user decide what to import.
|
|
134
|
+
|
|
135
|
+
Focus on:
|
|
136
|
+
1. **Protocol improvements**: New phases, better documentation, additional guidance
|
|
137
|
+
2. **Lessons learned**: Wisdom from other projects' reviews
|
|
138
|
+
3. **Architectural patterns**: Better ways to document or structure things
|
|
139
|
+
4. **New protocols**: Protocols that exist in source but not target
|
|
140
|
+
|
|
141
|
+
For each potential import, explain:
|
|
142
|
+
- What it is and why it might be valuable
|
|
143
|
+
- Any risks or considerations
|
|
144
|
+
- Your recommendation (import, skip, or merge manually)
|
|
145
|
+
|
|
146
|
+
Be interactive - discuss with the user and wait for their approval before making changes.
|
|
147
|
+
|
|
148
|
+
When the user approves a change, make the edit to the appropriate file in codev/.
|
|
149
|
+
|
|
150
|
+
Start by summarizing the key differences you found.`;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Main import entry point
|
|
154
|
+
*/
|
|
155
|
+
export async function importCommand(source, options = {}) {
|
|
156
|
+
const { dryRun = false } = options;
|
|
157
|
+
if (!source) {
|
|
158
|
+
throw new Error('Source required.\n\n' +
|
|
159
|
+
'Usage:\n' +
|
|
160
|
+
' codev import /path/to/other-project\n' +
|
|
161
|
+
' codev import github:owner/repo\n' +
|
|
162
|
+
' codev import https://github.com/owner/repo');
|
|
163
|
+
}
|
|
164
|
+
const projectRoot = findProjectRoot();
|
|
165
|
+
const localCodevDir = path.join(projectRoot, 'codev');
|
|
166
|
+
if (!fs.existsSync(localCodevDir)) {
|
|
167
|
+
throw new Error('No codev/ directory found in current project.\n' +
|
|
168
|
+
'Run "codev init" or "codev adopt" first.');
|
|
169
|
+
}
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(chalk.bold('Codev Import'));
|
|
172
|
+
console.log(chalk.dim('AI-assisted protocol import from other projects'));
|
|
173
|
+
console.log('');
|
|
174
|
+
const parsed = parseSource(source);
|
|
175
|
+
let sourceCodevDir;
|
|
176
|
+
let tempDir = null;
|
|
177
|
+
let sourceLabel = source;
|
|
178
|
+
try {
|
|
179
|
+
if (parsed.type === 'github') {
|
|
180
|
+
// Create temp directory for GitHub clone
|
|
181
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'codev-import-'));
|
|
182
|
+
sourceCodevDir = await fetchFromGitHub(parsed.repo, tempDir);
|
|
183
|
+
sourceLabel = `github:${parsed.repo}`;
|
|
184
|
+
console.log(chalk.green('✓'), `Fetched ${parsed.repo}`);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Local path
|
|
188
|
+
sourceCodevDir = path.join(parsed.path, 'codev');
|
|
189
|
+
if (!fs.existsSync(sourceCodevDir)) {
|
|
190
|
+
// Maybe they specified the codev dir directly?
|
|
191
|
+
if (fs.existsSync(parsed.path) && fs.statSync(parsed.path).isDirectory()) {
|
|
192
|
+
// Check if it looks like a codev directory
|
|
193
|
+
if (fs.existsSync(path.join(parsed.path, 'protocols')) ||
|
|
194
|
+
fs.existsSync(path.join(parsed.path, 'roles'))) {
|
|
195
|
+
sourceCodevDir = parsed.path;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
throw new Error(`No codev/ directory found at ${parsed.path}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
throw new Error(`Path not found: ${parsed.path}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
sourceLabel = path.basename(path.dirname(sourceCodevDir)) || parsed.path;
|
|
206
|
+
console.log(chalk.green('✓'), `Found local source: ${sourceCodevDir}`);
|
|
207
|
+
}
|
|
208
|
+
// Read files from both directories
|
|
209
|
+
console.log(chalk.dim('Reading source files...'));
|
|
210
|
+
const sourceFiles = readCodevDirectory(sourceCodevDir);
|
|
211
|
+
console.log(chalk.dim(` Found ${sourceFiles.size} files`));
|
|
212
|
+
console.log(chalk.dim('Reading target files...'));
|
|
213
|
+
const targetFiles = readCodevDirectory(localCodevDir);
|
|
214
|
+
console.log(chalk.dim(` Found ${targetFiles.size} files`));
|
|
215
|
+
if (sourceFiles.size === 0) {
|
|
216
|
+
throw new Error('No codev files found in source');
|
|
217
|
+
}
|
|
218
|
+
// Build the prompt
|
|
219
|
+
const prompt = buildImportPrompt(sourceFiles, targetFiles, sourceLabel);
|
|
220
|
+
if (dryRun) {
|
|
221
|
+
console.log('');
|
|
222
|
+
console.log(chalk.yellow('Dry run - would spawn Claude with this context:'));
|
|
223
|
+
console.log('');
|
|
224
|
+
console.log(chalk.dim('Source files:'));
|
|
225
|
+
for (const file of sourceFiles.keys()) {
|
|
226
|
+
console.log(chalk.dim(` - ${file}`));
|
|
227
|
+
}
|
|
228
|
+
console.log('');
|
|
229
|
+
console.log(chalk.dim('Target files:'));
|
|
230
|
+
for (const file of targetFiles.keys()) {
|
|
231
|
+
console.log(chalk.dim(` - ${file}`));
|
|
232
|
+
}
|
|
233
|
+
console.log('');
|
|
234
|
+
console.log(chalk.dim('Prompt length:'), prompt.length, 'chars');
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Check if claude is available
|
|
238
|
+
try {
|
|
239
|
+
execSync('which claude', { stdio: 'pipe' });
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
throw new Error('Claude CLI not found.\n' +
|
|
243
|
+
'Install with: npm install -g @anthropic-ai/claude-code');
|
|
244
|
+
}
|
|
245
|
+
console.log('');
|
|
246
|
+
console.log(chalk.bold('Starting interactive Claude session...'));
|
|
247
|
+
console.log(chalk.dim('Claude will analyze the differences and help you decide what to import.'));
|
|
248
|
+
console.log('');
|
|
249
|
+
// Spawn interactive Claude session
|
|
250
|
+
// We use -p to pass the initial prompt, but NOT --print so it stays interactive
|
|
251
|
+
const claudeProcess = spawn('claude', ['-p', prompt], {
|
|
252
|
+
stdio: 'inherit',
|
|
253
|
+
cwd: projectRoot, // Run from project root so Claude can make edits
|
|
254
|
+
});
|
|
255
|
+
await new Promise((resolve, reject) => {
|
|
256
|
+
claudeProcess.on('close', (code) => {
|
|
257
|
+
if (code === 0) {
|
|
258
|
+
resolve();
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
reject(new Error(`Claude exited with code ${code}`));
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
claudeProcess.on('error', (error) => {
|
|
265
|
+
reject(error);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
console.log('');
|
|
269
|
+
console.log(chalk.green('✓'), 'Import session complete');
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
// Clean up temp directory if we created one
|
|
273
|
+
if (tempDir && fs.existsSync(tempDir)) {
|
|
274
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA2CD;;GAEG;AACH,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoIzF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* codev init - Create a new codev project
|
|
3
|
+
*
|
|
4
|
+
* Creates a minimal codev structure. Framework files (protocols, roles)
|
|
5
|
+
* are provided by the embedded skeleton at runtime, not copied to the project.
|
|
3
6
|
*/
|
|
4
7
|
import * as fs from 'node:fs';
|
|
5
8
|
import * as path from 'node:path';
|
|
6
9
|
import * as readline from 'node:readline';
|
|
7
10
|
import chalk from 'chalk';
|
|
8
|
-
import { getTemplatesDir
|
|
11
|
+
import { getTemplatesDir } from '../lib/templates.js';
|
|
9
12
|
/**
|
|
10
13
|
* Prompt user for input
|
|
11
14
|
*/
|
|
@@ -77,36 +80,38 @@ export async function init(projectName, options = {}) {
|
|
|
77
80
|
}
|
|
78
81
|
// Create directory
|
|
79
82
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
const hashes = {};
|
|
83
|
+
// Create minimal codev structure
|
|
84
|
+
// Framework files (protocols, roles) are provided by embedded skeleton at runtime
|
|
83
85
|
let fileCount = 0;
|
|
84
|
-
console.log(chalk.dim('
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (action === 'copy') {
|
|
90
|
-
fileCount++;
|
|
91
|
-
console.log(chalk.green(' +'), `codev/${relativePath}`);
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
// Save hash store for future updates
|
|
96
|
-
saveHashStore(targetDir, hashes);
|
|
97
|
-
// Create empty directories for user data
|
|
98
|
-
const userDirs = ['specs', 'plans', 'reviews', 'resources'];
|
|
86
|
+
console.log(chalk.dim('Creating minimal codev structure...'));
|
|
87
|
+
console.log(chalk.dim('(Framework files provided by @cluesmith/codev at runtime)'));
|
|
88
|
+
console.log('');
|
|
89
|
+
// Create user data directories
|
|
90
|
+
const userDirs = ['specs', 'plans', 'reviews'];
|
|
99
91
|
for (const dir of userDirs) {
|
|
100
92
|
const dirPath = path.join(targetDir, 'codev', dir);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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++;
|
|
106
98
|
}
|
|
107
|
-
// Create
|
|
108
|
-
const
|
|
109
|
-
const
|
|
99
|
+
// Create projectlist.md for tracking projects
|
|
100
|
+
const projectlistPath = path.join(targetDir, 'codev', 'projectlist.md');
|
|
101
|
+
const projectlistContent = `# Project List
|
|
102
|
+
|
|
103
|
+
Track all projects here. See codev documentation for status values.
|
|
104
|
+
|
|
105
|
+
| ID | Name | Status | Priority | Notes |
|
|
106
|
+
|----|------|--------|----------|-------|
|
|
107
|
+
`;
|
|
108
|
+
fs.writeFileSync(projectlistPath, projectlistContent);
|
|
109
|
+
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
110
|
+
fileCount++;
|
|
111
|
+
// Create CLAUDE.md / AGENTS.md at project root from skeleton templates
|
|
112
|
+
const skeletonDir = getTemplatesDir();
|
|
113
|
+
const claudeMdSrc = path.join(skeletonDir, 'CLAUDE.md.template');
|
|
114
|
+
const agentsMdSrc = path.join(skeletonDir, 'AGENTS.md.template');
|
|
110
115
|
if (fs.existsSync(claudeMdSrc)) {
|
|
111
116
|
const content = fs.readFileSync(claudeMdSrc, 'utf-8')
|
|
112
117
|
.replace(/\{\{PROJECT_NAME\}\}/g, projectBaseName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Projectlist.md parser for the Projects Tab UI (Spec 0045)
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to parse the YAML project entries from
|
|
5
|
+
* codev/projectlist.md. It's used by both the dashboard UI and for testing.
|
|
6
|
+
*/
|
|
7
|
+
export interface ProjectFiles {
|
|
8
|
+
spec?: string | null;
|
|
9
|
+
plan?: string | null;
|
|
10
|
+
review?: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface ProjectTimestamps {
|
|
13
|
+
conceived_at?: string | null;
|
|
14
|
+
specified_at?: string | null;
|
|
15
|
+
planned_at?: string | null;
|
|
16
|
+
implementing_at?: string | null;
|
|
17
|
+
implemented_at?: string | null;
|
|
18
|
+
committed_at?: string | null;
|
|
19
|
+
integrated_at?: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface Project {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
summary?: string;
|
|
25
|
+
status: string;
|
|
26
|
+
priority?: string;
|
|
27
|
+
release?: string;
|
|
28
|
+
files?: ProjectFiles;
|
|
29
|
+
dependencies?: string[];
|
|
30
|
+
tags?: string[];
|
|
31
|
+
ticks?: string[];
|
|
32
|
+
timestamps?: ProjectTimestamps;
|
|
33
|
+
notes?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const VALID_STATUSES: readonly ["conceived", "specified", "planned", "implementing", "implemented", "committed", "integrated", "abandoned", "on-hold"];
|
|
36
|
+
export type ProjectStatus = (typeof VALID_STATUSES)[number];
|
|
37
|
+
export declare const LIFECYCLE_STAGES: ProjectStatus[];
|
|
38
|
+
/**
|
|
39
|
+
* XSS-safe HTML escaping
|
|
40
|
+
*/
|
|
41
|
+
export declare function escapeHtml(text: string | null | undefined): string;
|
|
42
|
+
/**
|
|
43
|
+
* Parse a single project entry from YAML-like text
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseProjectEntry(text: string): Partial<Project>;
|
|
46
|
+
/**
|
|
47
|
+
* Validate that a project entry is valid
|
|
48
|
+
*/
|
|
49
|
+
export declare function isValidProject(project: Partial<Project>): project is Project;
|
|
50
|
+
/**
|
|
51
|
+
* Parse projectlist.md content into array of projects
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseProjectlist(content: string): Project[];
|
|
54
|
+
/**
|
|
55
|
+
* Get the index of a lifecycle stage
|
|
56
|
+
*/
|
|
57
|
+
export declare function getStageIndex(status: string): number;
|
|
58
|
+
/**
|
|
59
|
+
* Filter projects to only active (non-terminal) ones
|
|
60
|
+
*/
|
|
61
|
+
export declare function getActiveProjects(projects: Project[]): Project[];
|
|
62
|
+
/**
|
|
63
|
+
* Filter projects to only terminal (abandoned, on-hold) ones
|
|
64
|
+
*/
|
|
65
|
+
export declare function getTerminalProjects(projects: Project[]): Project[];
|
|
66
|
+
/**
|
|
67
|
+
* Get projects grouped by status
|
|
68
|
+
*/
|
|
69
|
+
export declare function groupByStatus(projects: Project[], statuses: string[]): Record<string, Project[]>;
|
|
70
|
+
//# sourceMappingURL=projectlist-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectlist-parser.d.ts","sourceRoot":"","sources":["../../src/lib/projectlist-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,kIAUjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAQ3C,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6EhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,OAAO,CA6B5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CA8B3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAIhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAIlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAM3B"}
|