@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,200 @@
|
|
|
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 const VALID_STATUSES = [
|
|
8
|
+
'conceived',
|
|
9
|
+
'specified',
|
|
10
|
+
'planned',
|
|
11
|
+
'implementing',
|
|
12
|
+
'implemented',
|
|
13
|
+
'committed',
|
|
14
|
+
'integrated',
|
|
15
|
+
'abandoned',
|
|
16
|
+
'on-hold',
|
|
17
|
+
];
|
|
18
|
+
export const LIFECYCLE_STAGES = [
|
|
19
|
+
'conceived',
|
|
20
|
+
'specified',
|
|
21
|
+
'planned',
|
|
22
|
+
'implementing',
|
|
23
|
+
'implemented',
|
|
24
|
+
'committed',
|
|
25
|
+
'integrated',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* XSS-safe HTML escaping
|
|
29
|
+
*/
|
|
30
|
+
export function escapeHtml(text) {
|
|
31
|
+
if (!text)
|
|
32
|
+
return '';
|
|
33
|
+
return String(text)
|
|
34
|
+
.replace(/&/g, '&')
|
|
35
|
+
.replace(/</g, '<')
|
|
36
|
+
.replace(/>/g, '>')
|
|
37
|
+
.replace(/"/g, '"')
|
|
38
|
+
.replace(/'/g, ''');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse a single project entry from YAML-like text
|
|
42
|
+
*/
|
|
43
|
+
export function parseProjectEntry(text) {
|
|
44
|
+
const project = {};
|
|
45
|
+
const lines = text.split('\n');
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
// Match key: value or key: "value"
|
|
48
|
+
// Also handle "- id:" YAML list format
|
|
49
|
+
const match = line.match(/^\s*-?\s*(\w+):\s*(.*)$/);
|
|
50
|
+
if (!match)
|
|
51
|
+
continue;
|
|
52
|
+
const [, key, rawValue] = match;
|
|
53
|
+
// Remove quotes if present
|
|
54
|
+
let value = rawValue.trim();
|
|
55
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
56
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
57
|
+
value = value.slice(1, -1);
|
|
58
|
+
}
|
|
59
|
+
// Handle nested files object
|
|
60
|
+
if (key === 'files') {
|
|
61
|
+
project.files = {};
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (key === 'spec' || key === 'plan' || key === 'review') {
|
|
65
|
+
if (!project.files)
|
|
66
|
+
project.files = {};
|
|
67
|
+
project.files[key] =
|
|
68
|
+
value === 'null' ? null : value;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Handle nested timestamps object
|
|
72
|
+
if (key === 'timestamps') {
|
|
73
|
+
project.timestamps = {};
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const timestampFields = [
|
|
77
|
+
'conceived_at',
|
|
78
|
+
'specified_at',
|
|
79
|
+
'planned_at',
|
|
80
|
+
'implementing_at',
|
|
81
|
+
'implemented_at',
|
|
82
|
+
'committed_at',
|
|
83
|
+
'integrated_at',
|
|
84
|
+
];
|
|
85
|
+
if (timestampFields.includes(key)) {
|
|
86
|
+
if (!project.timestamps)
|
|
87
|
+
project.timestamps = {};
|
|
88
|
+
project.timestamps[key] =
|
|
89
|
+
value === 'null' ? null : value;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// Handle arrays (simple inline format)
|
|
93
|
+
if (key === 'dependencies' || key === 'tags' || key === 'ticks') {
|
|
94
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
95
|
+
const inner = value.slice(1, -1);
|
|
96
|
+
if (inner.trim() === '') {
|
|
97
|
+
project[key] = [];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
project[key] = inner
|
|
101
|
+
.split(',')
|
|
102
|
+
.map((s) => s.trim().replace(/^["']|["']$/g, ''));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
project[key] = [];
|
|
107
|
+
}
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Regular string values
|
|
111
|
+
if (value !== 'null') {
|
|
112
|
+
project[key] = value;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return project;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validate that a project entry is valid
|
|
119
|
+
*/
|
|
120
|
+
export function isValidProject(project) {
|
|
121
|
+
// Must have id (4-digit string, not "NNNN")
|
|
122
|
+
if (!project.id ||
|
|
123
|
+
project.id === 'NNNN' ||
|
|
124
|
+
!/^\d{4}$/.test(project.id)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
// Must have status
|
|
128
|
+
if (!project.status ||
|
|
129
|
+
!VALID_STATUSES.includes(project.status)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// Must have title
|
|
133
|
+
if (!project.title) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
// Filter out example entries
|
|
137
|
+
if (project.tags && project.tags.includes('example')) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Parse projectlist.md content into array of projects
|
|
144
|
+
*/
|
|
145
|
+
export function parseProjectlist(content) {
|
|
146
|
+
const projects = [];
|
|
147
|
+
try {
|
|
148
|
+
// Extract YAML code blocks
|
|
149
|
+
const yamlBlockRegex = /```yaml\n([\s\S]*?)```/g;
|
|
150
|
+
let match;
|
|
151
|
+
while ((match = yamlBlockRegex.exec(content)) !== null) {
|
|
152
|
+
const block = match[1];
|
|
153
|
+
// Split by project entries (lines starting with " - id:")
|
|
154
|
+
// Handle both top-level and indented entries
|
|
155
|
+
const projectMatches = block.split(/\n(?=\s*- id:)/);
|
|
156
|
+
for (const projectText of projectMatches) {
|
|
157
|
+
if (!projectText.trim() || !projectText.includes('id:'))
|
|
158
|
+
continue;
|
|
159
|
+
const project = parseProjectEntry(projectText);
|
|
160
|
+
if (isValidProject(project)) {
|
|
161
|
+
projects.push(project);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Return empty array on parse error
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
return projects;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the index of a lifecycle stage
|
|
174
|
+
*/
|
|
175
|
+
export function getStageIndex(status) {
|
|
176
|
+
return LIFECYCLE_STAGES.indexOf(status);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Filter projects to only active (non-terminal) ones
|
|
180
|
+
*/
|
|
181
|
+
export function getActiveProjects(projects) {
|
|
182
|
+
return projects.filter((p) => !['abandoned', 'on-hold'].includes(p.status));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Filter projects to only terminal (abandoned, on-hold) ones
|
|
186
|
+
*/
|
|
187
|
+
export function getTerminalProjects(projects) {
|
|
188
|
+
return projects.filter((p) => ['abandoned', 'on-hold'].includes(p.status));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get projects grouped by status
|
|
192
|
+
*/
|
|
193
|
+
export function groupByStatus(projects, statuses) {
|
|
194
|
+
const groups = {};
|
|
195
|
+
for (const status of statuses) {
|
|
196
|
+
groups[status] = projects.filter((p) => p.status === status);
|
|
197
|
+
}
|
|
198
|
+
return groups;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=projectlist-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectlist-parser.js","sourceRoot":"","sources":["../../src/lib/projectlist-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skeleton resolver - finds codev files with local override support
|
|
3
|
+
*
|
|
4
|
+
* Resolution order:
|
|
5
|
+
* 1. Local codev/ directory (user overrides)
|
|
6
|
+
* 2. Embedded skeleton in npm package (defaults)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Get path to embedded skeleton directory.
|
|
10
|
+
* The skeleton is copied from codev-skeleton/ at build time.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getSkeletonDir(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Find project root by looking for codev/ directory or .git
|
|
15
|
+
*/
|
|
16
|
+
export declare function findProjectRoot(startDir?: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a codev file, checking local first then embedded skeleton.
|
|
19
|
+
*
|
|
20
|
+
* @param relativePath - Path relative to codev/ (e.g., 'roles/consultant.md')
|
|
21
|
+
* @param projectRoot - Optional project root (auto-detected if not provided)
|
|
22
|
+
* @returns Absolute path to the file, or null if not found
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveCodevFile(relativePath: string, projectRoot?: string): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Read a codev file, checking local first then embedded skeleton.
|
|
27
|
+
*
|
|
28
|
+
* @param relativePath - Path relative to codev/ (e.g., 'roles/consultant.md')
|
|
29
|
+
* @param projectRoot - Optional project root (auto-detected if not provided)
|
|
30
|
+
* @returns File contents, or null if not found
|
|
31
|
+
*/
|
|
32
|
+
export declare function readCodevFile(relativePath: string, projectRoot?: string): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a file exists in local codev/ directory (not skeleton)
|
|
35
|
+
*/
|
|
36
|
+
export declare function hasLocalOverride(relativePath: string, projectRoot?: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* List all files in the skeleton directory matching a pattern
|
|
39
|
+
*/
|
|
40
|
+
export declare function listSkeletonFiles(subdir?: string): string[];
|
|
41
|
+
//# sourceMappingURL=skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB1F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAIpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skeleton resolver - finds codev files with local override support
|
|
3
|
+
*
|
|
4
|
+
* Resolution order:
|
|
5
|
+
* 1. Local codev/ directory (user overrides)
|
|
6
|
+
* 2. Embedded skeleton in npm package (defaults)
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
/**
|
|
14
|
+
* Get path to embedded skeleton directory.
|
|
15
|
+
* The skeleton is copied from codev-skeleton/ at build time.
|
|
16
|
+
*/
|
|
17
|
+
export function getSkeletonDir() {
|
|
18
|
+
// In built package: dist/lib/skeleton.js
|
|
19
|
+
// Skeleton is at: packages/codev/skeleton/
|
|
20
|
+
// So: dist/lib -> ../../skeleton
|
|
21
|
+
return path.resolve(__dirname, '../../skeleton');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Find project root by looking for codev/ directory or .git
|
|
25
|
+
*/
|
|
26
|
+
export function findProjectRoot(startDir) {
|
|
27
|
+
let current = startDir || process.cwd();
|
|
28
|
+
while (current !== path.dirname(current)) {
|
|
29
|
+
// Check for codev/ directory
|
|
30
|
+
if (fs.existsSync(path.join(current, 'codev'))) {
|
|
31
|
+
return current;
|
|
32
|
+
}
|
|
33
|
+
// Check for .git as fallback
|
|
34
|
+
if (fs.existsSync(path.join(current, '.git'))) {
|
|
35
|
+
return current;
|
|
36
|
+
}
|
|
37
|
+
current = path.dirname(current);
|
|
38
|
+
}
|
|
39
|
+
return startDir || process.cwd();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a codev file, checking local first then embedded skeleton.
|
|
43
|
+
*
|
|
44
|
+
* @param relativePath - Path relative to codev/ (e.g., 'roles/consultant.md')
|
|
45
|
+
* @param projectRoot - Optional project root (auto-detected if not provided)
|
|
46
|
+
* @returns Absolute path to the file, or null if not found
|
|
47
|
+
*/
|
|
48
|
+
export function resolveCodevFile(relativePath, projectRoot) {
|
|
49
|
+
const root = projectRoot || findProjectRoot();
|
|
50
|
+
// 1. Check local codev/ directory first (user overrides)
|
|
51
|
+
const localPath = path.join(root, 'codev', relativePath);
|
|
52
|
+
if (fs.existsSync(localPath)) {
|
|
53
|
+
return localPath;
|
|
54
|
+
}
|
|
55
|
+
// 2. Fall back to embedded skeleton
|
|
56
|
+
const skeletonDir = getSkeletonDir();
|
|
57
|
+
const embeddedPath = path.join(skeletonDir, relativePath);
|
|
58
|
+
if (fs.existsSync(embeddedPath)) {
|
|
59
|
+
return embeddedPath;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read a codev file, checking local first then embedded skeleton.
|
|
65
|
+
*
|
|
66
|
+
* @param relativePath - Path relative to codev/ (e.g., 'roles/consultant.md')
|
|
67
|
+
* @param projectRoot - Optional project root (auto-detected if not provided)
|
|
68
|
+
* @returns File contents, or null if not found
|
|
69
|
+
*/
|
|
70
|
+
export function readCodevFile(relativePath, projectRoot) {
|
|
71
|
+
const filePath = resolveCodevFile(relativePath, projectRoot);
|
|
72
|
+
if (!filePath) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if a file exists in local codev/ directory (not skeleton)
|
|
79
|
+
*/
|
|
80
|
+
export function hasLocalOverride(relativePath, projectRoot) {
|
|
81
|
+
const root = projectRoot || findProjectRoot();
|
|
82
|
+
const localPath = path.join(root, 'codev', relativePath);
|
|
83
|
+
return fs.existsSync(localPath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* List all files in the skeleton directory matching a pattern
|
|
87
|
+
*/
|
|
88
|
+
export function listSkeletonFiles(subdir) {
|
|
89
|
+
const skeletonDir = getSkeletonDir();
|
|
90
|
+
const targetDir = subdir ? path.join(skeletonDir, subdir) : skeletonDir;
|
|
91
|
+
if (!fs.existsSync(targetDir)) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
const results = [];
|
|
95
|
+
function walk(dir, prefix) {
|
|
96
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
97
|
+
for (const entry of entries) {
|
|
98
|
+
const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
99
|
+
if (entry.isDirectory()) {
|
|
100
|
+
walk(path.join(dir, entry.name), relativePath);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
results.push(relativePath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
walk(targetDir, subdir || '');
|
|
108
|
+
return results;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/templates.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Template handling utilities for codev init/adopt/update
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* Get the path to the embedded
|
|
5
|
+
* Get the path to the embedded skeleton directory
|
|
6
|
+
* (contains protocols, roles, agents - the codev framework files)
|
|
6
7
|
*/
|
|
7
8
|
export declare function getTemplatesDir(): string;
|
|
8
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAexC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAOrF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAM9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAqBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;CAC1E,GACL,IAAI,CAoEN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB/D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAM9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
package/dist/lib/templates.js
CHANGED
|
@@ -8,21 +8,22 @@ import { fileURLToPath } from 'node:url';
|
|
|
8
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
9
9
|
const __dirname = path.dirname(__filename);
|
|
10
10
|
/**
|
|
11
|
-
* Get the path to the embedded
|
|
11
|
+
* Get the path to the embedded skeleton directory
|
|
12
|
+
* (contains protocols, roles, agents - the codev framework files)
|
|
12
13
|
*/
|
|
13
14
|
export function getTemplatesDir() {
|
|
14
|
-
// In development: packages/codev/
|
|
15
|
-
// In installed: node_modules/@cluesmith/codev/
|
|
16
|
-
const
|
|
17
|
-
if (fs.existsSync(
|
|
18
|
-
return
|
|
15
|
+
// In development: packages/codev/skeleton
|
|
16
|
+
// In installed: node_modules/@cluesmith/codev/skeleton
|
|
17
|
+
const skeletonDir = path.resolve(__dirname, '../../skeleton');
|
|
18
|
+
if (fs.existsSync(skeletonDir)) {
|
|
19
|
+
return skeletonDir;
|
|
19
20
|
}
|
|
20
21
|
// Fallback: check dist location
|
|
21
|
-
const
|
|
22
|
-
if (fs.existsSync(
|
|
23
|
-
return
|
|
22
|
+
const distSkeletonDir = path.resolve(__dirname, '../../../skeleton');
|
|
23
|
+
if (fs.existsSync(distSkeletonDir)) {
|
|
24
|
+
return distSkeletonDir;
|
|
24
25
|
}
|
|
25
|
-
throw new Error('
|
|
26
|
+
throw new Error('Skeleton directory not found. Package may be corrupted.');
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
29
|
* Get SHA256 hash of a file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cluesmith/codev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Codev CLI - AI-assisted software development framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
"dist",
|
|
13
13
|
"bin",
|
|
14
|
-
"
|
|
14
|
+
"skeleton"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
17
|
+
"build": "tsc && npm run copy-skeleton",
|
|
18
|
+
"copy-skeleton": "rm -rf skeleton && cp -r ../../codev-skeleton skeleton",
|
|
18
19
|
"dev": "tsx src/cli.ts",
|
|
19
20
|
"start": "node dist/cli.js",
|
|
20
21
|
"test": "vitest",
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
"@types/node": "^22.10.1",
|
|
33
34
|
"tsx": "^4.19.2",
|
|
34
35
|
"typescript": "^5.7.2",
|
|
35
|
-
"vitest": "^
|
|
36
|
+
"vitest": "^4.0.15"
|
|
36
37
|
},
|
|
37
38
|
"engines": {
|
|
38
39
|
"node": ">=18.0.0"
|
|
@@ -130,26 +130,6 @@ gh auth login
|
|
|
130
130
|
gh auth status # Should show "Logged in to github.com"
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
### Python 3
|
|
134
|
-
|
|
135
|
-
| Requirement | Value |
|
|
136
|
-
|-------------|-------|
|
|
137
|
-
| Minimum Version | 3.10 |
|
|
138
|
-
| Purpose | Consult tool, utility scripts |
|
|
139
|
-
|
|
140
|
-
**Installation:**
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
# macOS
|
|
144
|
-
brew install python
|
|
145
|
-
|
|
146
|
-
# Ubuntu/Debian
|
|
147
|
-
sudo apt install python3 python3-pip
|
|
148
|
-
|
|
149
|
-
# Verify
|
|
150
|
-
python3 --version # Should show 3.10.x or higher
|
|
151
|
-
```
|
|
152
|
-
|
|
153
133
|
---
|
|
154
134
|
|
|
155
135
|
## AI CLI Dependencies (At Least One Required)
|
|
@@ -161,6 +141,7 @@ You need at least one AI CLI installed to use Codev. Install more for multi-agen
|
|
|
161
141
|
| Requirement | Value |
|
|
162
142
|
|-------------|-------|
|
|
163
143
|
| Purpose | Primary AI agent for development |
|
|
144
|
+
| Required For | `codev import` command (spawns interactive Claude session) |
|
|
164
145
|
| Documentation | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
|
|
165
146
|
|
|
166
147
|
**Installation:**
|
|
@@ -206,30 +187,6 @@ codex --version
|
|
|
206
187
|
|
|
207
188
|
---
|
|
208
189
|
|
|
209
|
-
## Python Packages (Optional)
|
|
210
|
-
|
|
211
|
-
These are optional but enable additional features.
|
|
212
|
-
|
|
213
|
-
### typer
|
|
214
|
-
|
|
215
|
-
| Requirement | Value |
|
|
216
|
-
|-------------|-------|
|
|
217
|
-
| Purpose | CLI framework for the consult tool |
|
|
218
|
-
|
|
219
|
-
**Installation:**
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
pip install typer
|
|
223
|
-
|
|
224
|
-
# Or with uv
|
|
225
|
-
uv pip install typer
|
|
226
|
-
|
|
227
|
-
# Verify
|
|
228
|
-
python3 -c "import typer; print('typer installed')"
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
190
|
## Version Requirements Summary
|
|
234
191
|
|
|
235
192
|
| Dependency | Minimum Version | Required? |
|
|
@@ -239,11 +196,9 @@ python3 -c "import typer; print('typer installed')"
|
|
|
239
196
|
| ttyd | 1.7.0 | Yes |
|
|
240
197
|
| git | 2.5.0 | Yes |
|
|
241
198
|
| gh | latest | Yes |
|
|
242
|
-
| Python 3 | 3.10 | Yes |
|
|
243
199
|
| Claude Code | latest | At least one AI CLI |
|
|
244
200
|
| Gemini CLI | latest | At least one AI CLI |
|
|
245
201
|
| Codex CLI | latest | At least one AI CLI |
|
|
246
|
-
| typer | latest | No (for consult tool) |
|
|
247
202
|
|
|
248
203
|
---
|
|
249
204
|
|
|
@@ -255,7 +210,7 @@ All dependencies are available via Homebrew:
|
|
|
255
210
|
|
|
256
211
|
```bash
|
|
257
212
|
# Install all core dependencies at once
|
|
258
|
-
brew install node tmux ttyd gh
|
|
213
|
+
brew install node tmux ttyd gh
|
|
259
214
|
|
|
260
215
|
# Git is included with Xcode command line tools
|
|
261
216
|
xcode-select --install
|
|
@@ -267,7 +222,7 @@ Most dependencies are available via apt, except ttyd which must be built from so
|
|
|
267
222
|
|
|
268
223
|
```bash
|
|
269
224
|
# Core dependencies
|
|
270
|
-
sudo apt install nodejs npm tmux git
|
|
225
|
+
sudo apt install nodejs npm tmux git
|
|
271
226
|
|
|
272
227
|
# gh requires adding GitHub's apt repository (see above)
|
|
273
228
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Thin wrapper - forwards all commands to agent-farm TypeScript
|
|
3
|
+
# Uses readlink to handle symlinks (e.g., if symlinked to /usr/local/bin)
|
|
4
|
+
SCRIPT_PATH="$(readlink -f "$0" 2>/dev/null || realpath "$0" 2>/dev/null || echo "$0")"
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
|
|
6
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
7
|
+
exec node "$PROJECT_ROOT/agent-farm/dist/index.js" "$@"
|