@cluesmith/codev 1.1.0 → 1.1.1
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 +48 -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 +8 -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 +113 -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 +18 -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 +30 -34
- 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/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 +4 -3
- package/{templates → skeleton}/DEPENDENCIES.md +2 -48
- package/{templates → skeleton}/agents/codev-updater.md +4 -3
- 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 +107 -0
- package/{templates → skeleton}/protocols/experiment/protocol.md +2 -2
- package/{templates → skeleton}/protocols/spider/protocol.md +7 -7
- 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 +229 -0
- package/{templates → skeleton}/roles/architect.md +2 -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/{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/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/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/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}/agents/architecture-documenter.md +0 -0
- /package/{templates → skeleton}/agents/spider-protocol-updater.md +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 → skeleton}/protocols/maintain/protocol.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.1.
|
|
3
|
+
"version": "1.1.1",
|
|
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",
|
|
@@ -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)
|
|
@@ -206,30 +186,6 @@ codex --version
|
|
|
206
186
|
|
|
207
187
|
---
|
|
208
188
|
|
|
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
189
|
## Version Requirements Summary
|
|
234
190
|
|
|
235
191
|
| Dependency | Minimum Version | Required? |
|
|
@@ -239,11 +195,9 @@ python3 -c "import typer; print('typer installed')"
|
|
|
239
195
|
| ttyd | 1.7.0 | Yes |
|
|
240
196
|
| git | 2.5.0 | Yes |
|
|
241
197
|
| gh | latest | Yes |
|
|
242
|
-
| Python 3 | 3.10 | Yes |
|
|
243
198
|
| Claude Code | latest | At least one AI CLI |
|
|
244
199
|
| Gemini CLI | latest | At least one AI CLI |
|
|
245
200
|
| Codex CLI | latest | At least one AI CLI |
|
|
246
|
-
| typer | latest | No (for consult tool) |
|
|
247
201
|
|
|
248
202
|
---
|
|
249
203
|
|
|
@@ -255,7 +209,7 @@ All dependencies are available via Homebrew:
|
|
|
255
209
|
|
|
256
210
|
```bash
|
|
257
211
|
# Install all core dependencies at once
|
|
258
|
-
brew install node tmux ttyd gh
|
|
212
|
+
brew install node tmux ttyd gh
|
|
259
213
|
|
|
260
214
|
# Git is included with Xcode command line tools
|
|
261
215
|
xcode-select --install
|
|
@@ -267,7 +221,7 @@ Most dependencies are available via apt, except ttyd which must be built from so
|
|
|
267
221
|
|
|
268
222
|
```bash
|
|
269
223
|
# Core dependencies
|
|
270
|
-
sudo apt install nodejs npm tmux git
|
|
224
|
+
sudo apt install nodejs npm tmux git
|
|
271
225
|
|
|
272
226
|
# gh requires adding GitHub's apt repository (see above)
|
|
273
227
|
|
|
@@ -46,7 +46,7 @@ You are the Codev Framework Updater, responsible for keeping Codev installations
|
|
|
46
46
|
## Your Core Mission
|
|
47
47
|
|
|
48
48
|
Update existing Codev installations with the latest:
|
|
49
|
-
- Protocols (SPIDER,
|
|
49
|
+
- Protocols (SPIDER, TICK, EXPERIMENT, MAINTAIN, and future additions)
|
|
50
50
|
- AI agents in .claude/agents/
|
|
51
51
|
- Protocol templates
|
|
52
52
|
- Shared resources
|
|
@@ -130,7 +130,7 @@ After updating, verify the installation:
|
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
132
|
# Test protocols exist and are readable
|
|
133
|
-
for protocol in spider
|
|
133
|
+
for protocol in spider tick experiment maintain; do
|
|
134
134
|
if [ -f "codev/protocols/$protocol/protocol.md" ]; then
|
|
135
135
|
echo "✓ $protocol protocol updated"
|
|
136
136
|
fi
|
|
@@ -159,7 +159,8 @@ Generate a comprehensive update report:
|
|
|
159
159
|
|
|
160
160
|
## Updates Applied
|
|
161
161
|
- ✓ SPIDER protocol: [updated/no changes]
|
|
162
|
-
- ✓
|
|
162
|
+
- ✓ EXPERIMENT protocol: [added/updated/no changes]
|
|
163
|
+
- ✓ MAINTAIN protocol: [added/updated/no changes]
|
|
163
164
|
- ✓ TICK protocol: [added/updated/no changes]
|
|
164
165
|
- ✓ Agents updated: [list of updated agents]
|
|
165
166
|
|
|
@@ -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" "$@"
|